From czarn@rtna.daimlerbenz.com Tue Dec 2 15:47:14 1997 Received: from sun2.RTNA.DaimlerBenz.COM (sun2.RTNA.DaimlerBenz.COM [204.162.66.11]) by amber.ccs.neu.edu (8.8.6/8.8.6) with ESMTP id PAA22880; Tue, 2 Dec 1997 15:47:09 -0500 (EST) Received: from rtna.daimlerbenz.com (pc53.RTNA.DaimlerBenz.COM [204.162.66.12]) by sun2.RTNA.DaimlerBenz.COM (8.8.5/RTNA.8.8.5) with ESMTP id MAA17775; Tue, 2 Dec 1997 12:46:59 -0800 (PST) Message-ID: <348473CB.80CE6F3A@rtna.daimlerbenz.com> Date: Tue, 02 Dec 1997 12:47:07 -0800 From: Krzysztof Czarnecki X-Mailer: Mozilla 4.03 [en] (WinNT; U) MIME-Version: 1.0 To: Mira Mezini CC: lieber@ccs.neu.edu Subject: dynamic cool Content-Type: multipart/mixed; boundary="------------11B1B64A1E66500850CEBED3" Status: R This is a multi-part message in MIME format. --------------11B1B64A1E66500850CEBED3 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hallo Mira, vielen Dank fuer Deine Diss. Ich habe eine kleine prototypische Implementierung von Cool mit einigen extra Features in Smalltalt gemacht. Es nuetzt auch die "Shadow Classes"-Technik wie in Deinen Attachments. Ich habe auch heute mit Prof. Lieberherr gesprochen und er hat mir gesagt, dass es fuer Euch interessant sein koennte - daher schicke ich Euch den Code als Attachment. Die einzige Beschreibung, die ich hab ist eine Mail, die ich an die AspectJ-Leute geschickt habe. In dem Code sind aber einige Beispiele dabei (siehe unten). Viele Gruesse Krzysztof here is an excerpt from a mail I send to the AspectJ team: Some desired features for Cool ---------------------------------------------------------- Given that some system requires an elaborated synchronization and dynamic load balancing, there are some features which, in my view, Cool would have to provide in order to adequately support such a system. These features would include 1) splitting coordination state and the ability to reference one coordinator from another: this is needed for dynamic composition - dynamically adding new server objects would require interaction not only between objects but coordinators too; also, if an instance of class A interacts with an instance of class B and an instance of class C, it might be reasonable to have two coordinators, one for A and B and one for A and C (esp. if they do not share coordination state). So it should be possible to associate an object with more than one coordinator. Splitting also seems to be desirable for dividing large coordination state machines. 2) dynamically assigning coordinators to object instances: changes in the environment could require changes to the synchronization strategy; 3) per-instance coordination of instances of multiple classes: Cool references functionality using class names. This turns out to be awkward when coordinating instances of multiple classes. Even in the simple candy assembly line example, it is not possible to simply instantiate multiple assembly lines without changing the coordination code. The need for instance-based coordination is even greater if you would like to support dynamic reconfiguration and load balancing. Implementing "dynamic Cool" in Smalltalk -------------------------------------------------------- In order to see how the dynamic features work, I implemented Cool in Smalltalk using the Smalltalk MOP. This implementation is based on the ability to attach listener objects to an arbitrary object at a certain "selector". All messages of the form "selector" sent to the object are redirected to the listener attached at "selector". This allows us to transparently implement before and after methods. Now, there are a number of coordinator objects. Each coordinator object has one or more ports. An object which has to be synchronized can be connected to one or more ports of one or more coordinators. A port of a coordinator maintains a number of message coordinators, one per message that has to be coordinated on that port. A message coordinator keeps the selfex, mutex, and requires conditions and onEntry and onExit blocks for that message. By connecting an object to a port, the message coordinators of that port get connected to the corresponding listeners of the object. Since one listener can be connected to many message coordinators belonging to different object coordinators, one object can be connected to more than one port of more than one object coordinator. Connecting or disconnecting an object instance to/from a port of a coordinator instance can be done at any time during run-time. Also the selfex, mutex, and reqires/onEntry/onExit specs of a coordinator instance can be modified at run-time. The selfex, mutex, and reqires/onEntry/onExit specs look much the same as Cool, e.g. here is the candy assembly line coordination spec in Smalltalk: defineCoordination packFull := false. gotPack := false. gotLabel := false. self addPorts: #( packer finalizer ); selfex: #( 'packer.newCandy:' ); at: 'packer.newCandy:' requires: [ :packer | packFull not ] onExit: [ :packer | packer candyPack candyCount = packer maxCandy ifTrue: [ packFull := true ]]; at: 'packer.processPack' requires: [ :packer | packFull ]; at: 'finalizer.newPack:' requires: [ :finalizer | gotPack not ] onEntry: [ :finalizer | gotPack := true ] onExit: [ :finalizer | packFull := false ]; at: 'finalizer.newLabel:' requires: [ :finalizer | gotLabel not ] onEntry: [ :finalizer | gotLabel := true ]; at: 'finalizer.glueLabelToPack' requires: [ :finalizer | gotPack & gotLabel ]; at: 'finalizer.shipNewCandyPack' onExit: [ :finalizer | gotPack := false. gotLabel := false ]. This method is called automatically in order to initialize a coordinator instance. Any of the selfex:, mutex:, at:requires:onEntry:onExit: messages can also be sent to the coordinator instance in order to modify its synchronization strategy thereafter. The following code snippet creates a finalizer, a packer, and a coordinator (which is initialized using the method presented above), and connects the packer and the finalizer to the coordinator: finalizer := Finalizer new. packer := Packer newWith: finalizer. coordinator := CandyAssemblyLineCoordinator new. coordinator register: packer at: #packer; register: finalizer at: #finalizer. Unlike in the AspectJ implementation, we can have multiple instances of finalizer and packer at a time. The full Smalltalk (VisualWorks 2.0 or 2.5) code for Cool, the assembly line example, and another example are in the attachments. The implementation of Cool in Smalltalk was simple thanks to the reflective facilities in Smalltalk. First, a simple MOP was implemented, and the layer for attaching object was implemented on top of it. The coordinator code sits on the latter. The MOP consists of two methods in Object, one for adding methods to single instances (i.e. instance-specific methods) and one for adding instance variables to instances: specialize: stringRepresentingCodeOfAMethod "This method inserts a method represented by stringRepresentingCodeOfAMethod into the receiver. This is implemented using a lightweight, private class, which is inserted between the receiver and its original class." addInstanceVariable: stringRepresentingNameForAccessors "This method adds a new instance variable to the receiver and creates accessor methods based on stringRepresentingNameForAccessors. This is implemented by modifying the format of the object, creating an object of the new format, and mutating the old object into the new one using become:." ------------------------------------ Examples: TestObject (class) >> examples this example demonstrates the layer for attaching objects TwoMethodsTest (class) >> example1 TwoMethodsTest (class) >> example2 TwoMethodsTest (class) >> example3 these examples demonstrate the flexibility of dynamic configurators. The code is not secured against any potential problems when dynamically modifying the coordination (one would need to introduce some extra critical blocks). But with the included examples, it works fine. AssemblyLine (class) >> example this is the assembly line example --------------11B1B64A1E66500850CEBED3 Content-Type: application/x-unknown-content-type-ST_auto_file; name="smallcoo.st" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="smallcoo.st" DQonIC5BcHBsaWNhdGlvblNvdXJjZSBTbWFsbENvb2woMC4wbSknIQ0KJ0Zyb20gVmlzdWFs V29ya3MoUikgUmVsZWFzZSAyLjAgb2YgNCBBdWd1c3QgMTk5NCBvbiAzIE5vdmVtYmVyIDE5 OTcgYXQgOTo1Mzo1OCBwbSchDQoNCg0KDQonLSBzb3VyY2VzIG9mIFNtYWxsQ29vbCgwLjBt KSAtJyENCg0KRGVsYXkgc3ViY2xhc3M6ICNSYW5kb21EZWxheQ0KCWluc3RhbmNlVmFyaWFi bGVOYW1lczogJycNCgljbGFzc1ZhcmlhYmxlTmFtZXM6ICdSYW5kb21HZW5lcmF0b3IgJw0K CXBvb2xEaWN0aW9uYXJpZXM6ICcnDQoJY2F0ZWdvcnk6ICdTeW5jaHJvbml6YXRpb24tU3Vw cG9ydCchDQoNCg0KIi0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tIC0tIC0tIC0tICIhDQoNCg0KDQohUmFuZG9tRGVsYXkgY2xhc3MgbWV0aG9kc0Zvcjog J2NsYXNzIGluaXRpYWxpemF0aW9uJyENCg0KaW5pdGlhbGl6ZQ0KCSJzZWxmIGluaXRpYWxp emUiDQoNCglSYW5kb21HZW5lcmF0b3IgOj0gUmFuZG9tIG5ldy4hICENCg0KIVJhbmRvbURl bGF5IGNsYXNzIG1ldGhvZHNGb3I6ICdpbnN0YW5jZSBjcmVhdGlvbichDQoNCnVwdG86IG1p bGlzZWNvbmRzDQoNCglec2VsZiBmb3JNaWxsaXNlY29uZHM6IChSYW5kb21HZW5lcmF0b3Ig bmV4dCkgKiBtaWxpc2Vjb25kcyEgIQ0KDA0KDQoNClNlbWFwaG9yZSBzdWJjbGFzczogI011 dGV4DQoJaW5zdGFuY2VWYXJpYWJsZU5hbWVzOiAnJw0KCWNsYXNzVmFyaWFibGVOYW1lczog JycNCglwb29sRGljdGlvbmFyaWVzOiAnJw0KCWNhdGVnb3J5OiAnU3luY2hyb25pemF0aW9u LVN1cHBvcnQnIQ0KDQoNCiFNdXRleCBtZXRob2RzRm9yOiAnY29tbXVuaWNhdGlvbichDQoN CnNpZ25hbA0KCSJTaWduYWwgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGlzIG5vIG1vcmUg dGhhbiBvbmUgZXhjZXNzIHNpZ25hbC4iDQoNCglleGNlc3NTaWduYWxzID09IDEgaWZUcnVl OiBbIGV4Y2Vzc1NpZ25hbHMgOj0gMCBdLg0KCXN1cGVyIHNpZ25hbC4hICENCg0KIU11dGV4 IG1ldGhvZHNGb3I6ICdhY2Nlc3NpbmcnIQ0KDQpleGNlc3NTaWduYWxzDQoJIlJldHVybiB0 aGUgbnVtYmVyIG9mIGV4Y2VzcyBzaWduYWxzIHRoZSByZWNlaXZlciBoYXZlIGFjY3VtdWxh dGVkLiINCg0KCV5leGNlc3NTaWduYWxzISAhDQoNCiItLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAiIQ0KDQoNCg0KIU11dGV4IGNsYXNz IG1ldGhvZHNGb3I6ICdpbnN0YW5jZSBjcmVhdGlvbichDQoNCm5ldw0KDQoJXnN1cGVyIG5l dyBzaWduYWwhICENCgwNCg0KDQohT2JqZWN0IG1ldGhvZHNGb3I6ICdwcml2YXRlIC0gYXR0 YWNoaW5nIG9iamVjdHMnIQ0KDQppbnNlcnRBcmd1bWVudHNJbnRvOiBzZWxlY3Rvcg0KCSJz ZWxmIGluc2VydEFyZ3VtZW50c0ludG86ICdtZXNzYWdlQXJnMTp3aXRoOicgcmV0dXJucyAn bWVzc2FnZUFyZzE6IHQxIHdpdGg6IHQyJyAiDQoNCgl8IGFTdHJlYW0gbnVtQXJncyB8DQoJ YVN0cmVhbSA6PSBXcml0ZVN0cmVhbSBvbjogKFN0cmluZyBuZXc6IDYwKS4NCgkobnVtQXJn cyA6PSBzZWxlY3RvciBudW1BcmdzKSA9IDANCgkJaWZUcnVlOiBbIGFTdHJlYW0gbmV4dFB1 dEFsbDogc2VsZWN0b3IgXQ0KCQlpZkZhbHNlOiBbDQoJCQlzZWxlY3RvciBrZXl3b3JkcyB3 aXRoOiAoMSB0bzogbnVtQXJncykgZG86IFsgOndvcmQgOmkgfA0KCQkJCWFTdHJlYW0gbmV4 dFB1dEFsbDogd29yZDsgbmV4dFB1dEFsbDogJyB0JzsgcHJpbnQ6IGk7IHNwYWNlIF1dLg0K CV5hU3RyZWFtIGNvbnRlbnRzIQ0KDQppc09iamVjdEF0dGFjaGFibGUNCgkiSXMgdGhpcyBv YmplY3QgcHJlcGFyZWQgdG8gcmVkaXJlY3QgbWVzc2FnZXM/Ig0KDQoJXnNlbGYgYmFzaWND bGFzcyBpbmNsdWRlc1NlbGVjdG9yOiAjbGlzdGVuZXJzRGljdGlvbmFyeSENCg0KbWVzc2Fn ZUlzUmVkaXJlY3RlZDogc2VsZWN0b3INCg0KCV5zZWxmIGJhc2ljQ2xhc3MgaW5jbHVkZXNT ZWxlY3Rvcjogc2VsZWN0b3IhDQoNCnJlZGlyZWN0TWVzc2FnZTogc2VsZWN0b3INCgkiUmVk aXJlY3QgbWVzc2FnZXMgb2YgdGhlIGZvcm0gc2VsZWN0b3IgdG8gc2VsZiB0byB0aGUgYXBw cm9wcmlhdGUgbGlzdGVuZXIgb2JqZWN0LiINCg0KCXNlbGYgcmVkaXJlY3RNZXNzYWdlOiBz ZWxlY3RvciBhczogbmlsIQ0KDQpyZWRpcmVjdE1lc3NhZ2U6IHNlbGVjdG9yMSBhczogc2Vs ZWN0b3IyT3JOaWwNCgkiUmVkaXJlY3QgbWVzc2FnZXMgb2YgdGhlIGZvcm0gc2VsZWN0b3Ix IHRvIHNlbGYgdG8gdGhlIGFwcHJvcHJpYXRlIGxpc3RlbmVyIG9iamVjdC4NCglJZiBzZWxl Y3RvcjJPck5pbCBpcyBub3QgbmlsLCBjb252ZXJ0IHRoZSBtZXNzYWdlIHRvIHNlbGVjdG9y Mk9yTmlsLiINCg0KCXwgZGlzcGF0Y2hNZXRoIGFTdHJlYW0gc2VsZWN0b3JXaXRoQXJndW1l bnRzIG5ld1NlbGVjdG9yIHwNCg0KCShzZWxmIG1lc3NhZ2VJc1JlZGlyZWN0ZWQ6IHNlbGVj dG9yMSkgaWZUcnVlOiBbIF5zZWxmIF0uDQoJc2VsZWN0b3JXaXRoQXJndW1lbnRzIDo9IHNl bGYgaW5zZXJ0QXJndW1lbnRzSW50bzogc2VsZWN0b3IxLg0KCW5ld1NlbGVjdG9yIDo9IHNl bGVjdG9yMk9yTmlsIGlzTmlsDQoJCQkJCWlmVHJ1ZTogWyBzZWxlY3RvcldpdGhBcmd1bWVu dHMgXQ0KCQkJCQlpZkZhbHNlOiBbIHNlbGVjdG9yMk9yTmlsIF0uDQoNCglhU3RyZWFtIDo9 IFdyaXRlU3RyZWFtIG9uOiAoU3RyaW5nIG5ldzogMTAwKS4NCglhU3RyZWFtDQoJCW5leHRQ dXRBbGw6IHNlbGVjdG9yV2l0aEFyZ3VtZW50czsNCgkJbmV4dFB1dEFsbDogJyBeKHNlbGYg bGlzdGVuZXJzRGljdGlvbmFyeSBhdDogIyc7DQoJCW5leHRQdXRBbGw6IHNlbGVjdG9yMTsN CgkJbmV4dFB1dEFsbDogJykgJzsNCgkJbmV4dFB1dEFsbDogbmV3U2VsZWN0b3IuDQoNCglk aXNwYXRjaE1ldGggOj0gYVN0cmVhbSBjb250ZW50cy4NCglzZWxmIGJhc2ljQ2xhc3MgY29t cGlsZTogZGlzcGF0Y2hNZXRoIG5vdGlmeWluZzogbmlsLiEgIQ0KDQohT2JqZWN0IG1ldGhv ZHNGb3I6ICdhdHRhY2hpbmcgb2JqZWN0cychDQoNCmF0dGFjaDogYW5PYmplY3QgYXQ6IHNl bGVjdG9yDQoJIkF0dGFjaCBhbk9iamVjdCBhdCBzZWxlY3Rvci4gQWxsIG1lc3NhZ2VzIG9m IHRoZSBmb3JtIHNlbGVjdG9yDQoJc2VudCB0byBzZWxmIGFyZSByZWRpcmVjdGVkIHRvIGFu T2JqZWN0LiINCg0KCXNlbGYgbWFrZU9iamVjdEF0dGFjaGFibGUuDQoJc2VsZiByZWRpcmVj dE1lc3NhZ2U6IHNlbGVjdG9yLg0KDQoJc2VsZglsaXN0ZW5lcnNEaWN0aW9uYXJ5IGF0OiBz ZWxlY3RvciBwdXQ6IGFuT2JqZWN0LiENCg0KYXR0YWNoOiBhbk9iamVjdCBhdDogc2VsZWN0 b3IxIGFuZDogc2VsZWN0b3IyDQoJIkF0dGFjaCBhbk9iamVjdCBhdCBzZWxlY3RvcjEgYW5k IHNlbGVjdG9yMi4gQWxsIG1lc3NhZ2VzIG9mIHRoZSBmb3JtIHNlbGVjdG9yMQ0KCWFuZCBz ZWxlY3RvcjIgc2VudCB0byBzZWxmIGFyZSByZWRpcmVjdGVkIHRvIGFuT2JqZWN0LiINCg0K CXNlbGYgbWFrZU9iamVjdEF0dGFjaGFibGUuDQoJc2VsZiByZWRpcmVjdE1lc3NhZ2U6IHNl bGVjdG9yMS4NCglzZWxmIHJlZGlyZWN0TWVzc2FnZTogc2VsZWN0b3IyLg0KDQoJc2VsZiBs aXN0ZW5lcnNEaWN0aW9uYXJ5IGF0OiBzZWxlY3RvcjEgcHV0OiBhbk9iamVjdC4NCglzZWxm IGxpc3RlbmVyc0RpY3Rpb25hcnkgYXQ6IHNlbGVjdG9yMiBwdXQ6IGFuT2JqZWN0LiENCg0K YXR0YWNoOiBhbk9iamVjdCBhdDogc2VsZWN0b3IxIHNlbmRpbmc6IHNlbGVjdG9yMg0KCSJB dHRhY2ggYW5PYmplY3QgYXQgc2VsZWN0b3IxLiBBbGwgbWVzc2FnZXMgb2YgdGhlIGZvcm0g c2VsZWN0b3IxDQoJc2VudCB0byBzZWxmIGFyZSBjb252ZXJ0ZWQgdG8gc2VsZWN0b3IyIGFu ZCByZWRpcmVjdGVkIHRvIGFuT2JqZWN0Lg0KCXNlbGVjdG9yMiBoYXMgdG8gYmUgYW4gdW5h cnkgbWVzc2FnZSBzZWxlY3RvciwgaS5lLiBleHBlY3RzIG5vIGFyZ3VtZW50cy4iDQoNCglz ZWxmIG1ha2VPYmplY3RBdHRhY2hhYmxlLg0KCXNlbGYgcmVkaXJlY3RNZXNzYWdlOiBzZWxl Y3RvcjEgYXM6IHNlbGVjdG9yMi4NCg0KCXNlbGYJbGlzdGVuZXJzRGljdGlvbmFyeSBhdDog c2VsZWN0b3IxIHB1dDogYW5PYmplY3QuIQ0KDQphdHRhY2g6IGFuT2JqZWN0IGF0U2VsZWN0 b3JzOiBhQ29sbGVjdGlvbg0KCSJBdHRhY2ggYW5PYmplY3QgYXQgc2VsZWN0b3JzIGNvbnRh aW5lZCBpbiAgYUNvbGxlY3Rpb24uIg0KDQoJc2VsZiBtYWtlT2JqZWN0QXR0YWNoYWJsZS4N CglhQ29sbGVjdGlvbiBkbzogWyA6c2VsZWN0b3IgfA0KCQlzZWxmIHJlZGlyZWN0TWVzc2Fn ZTogc2VsZWN0b3IuDQoJCXNlbGYgbGlzdGVuZXJzRGljdGlvbmFyeSBhdDogc2VsZWN0b3Ig cHV0OiBhbk9iamVjdCBdLiENCg0KYmFzZUNhbGwNCgkiVGhpcyBtZXRob2QgaXMgbWVhbnQg dG8gYmUgaW52b2tlZCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGJ5IGEgcmVkaXJlY3RlZCBt ZXNzYWdlLg0KCWJhc2VDYWxsIGNhbGxzIHRoZSBiYXNlIG1ldGhvZCwgaS5lLiB0aGUgbWV0 aG9kIHdoaWNoIHdvdWxkIGhhdmUgYmVlbiBjYWxsZWQNCglpZiBpdCB0aGUgbWVzc2FnZSB3 YXMgbm90IHJlZGlyZWN0ZWQuIg0KDQoJfCBiYXNlQ29udGV4dCBzZWxlY3RvciBiYXNlTWV0 aG9kIG5hIGFyZ3MgfA0KCWJhc2VDb250ZXh0IDo9IHNlbGYgYmFzZUNvbnRleHQuDQoNCgki ZmluZCBvdXQgdGhlIHNlbGVjdG9yIG9mIHRoZSBvcmlnaW5hbGx5IGRpcGF0Y2hlZCBtZXRo b2QiDQoJc2VsZWN0b3IgOj0gYmFzZUNvbnRleHQgcmVjZWl2ZXIgYmFzaWNDbGFzcw0KCQlz ZWxlY3RvckF0TWV0aG9kOiBiYXNlQ29udGV4dA0KCQltZXRob2QgaWZBYnNlbnQ6IFsgc2Vs ZiBlcnJvcjogJ21ldGhvZCBub3QgZm91bmQgLSBzaG91bGQgbm90IGhhcHBlbicgXS4NCg0K CSJyZXRyaWV2ZSB0aGUgYXJndW1lbnRzIG9mIHRoZSBvcmlnaW5hbGx5IGRpcGF0Y2hlZCBt ZXRob2QiDQoJbmEgOj0gc2VsZWN0b3IgbnVtQXJncy4NCglhcmdzIDo9IEFycmF5IG5ldzog bmEuDQoJMSB0bzogbmEgZG86IFsgOmkgfCBhcmdzIGF0OiBpIHB1dDogKGJhc2VDb250ZXh0 IGxvY2FsQXQ6IGkpIF0uDQoNCgkibG9vayB1cCB0aGUgYmFzZSBtZXRob2Q7IGlmIG5vdCBm b3VuZCwgcmVwb3J0IGFuIGVycm9yIg0KCWJhc2VNZXRob2QgOj0gYmFzZUNvbnRleHQgcmVj ZWl2ZXIgY2xhc3MgZmluZFNlbGVjdG9yOiBzZWxlY3Rvci4NCgliYXNlTWV0aG9kIGlzTmls IGlmVHJ1ZTogWw0KCQlPYmplY3QgbWVzc2FnZU5vdFVuZGVyc3Rvb2RTaWduYWwNCgkJCXJh aXNlUmVxdWVzdFdpdGg6IChNZXNzYWdlIHNlbGVjdG9yOiBzZWxlY3RvciBhcmd1bWVudHM6 IGFyZ3MpDQoJCQllcnJvclN0cmluZzogJ3N1cGVyQ2FsbDogTWVzc2FnZSBub3QgdW5kZXJz dG9vZCBieSB0aGUgYmFzZSBvYmplY3Q6ICcgLCBzZWxlY3Rvci4gXS4NCgliYXNlTWV0aG9k IDo9IGJhc2VNZXRob2QgYXQ6IDIuDQoNCgkiZXhlY3V0ZSB0aGUgYmFzZSBtZXRob2QiDQoJ XmJhc2VDb250ZXh0IHJlY2VpdmVyIHBlcmZvcm1NZXRob2Q6IGJhc2VNZXRob2QgYXJndW1l bnRzOiBhcmdzIQ0KDQpiYXNlQ29udGV4dA0KCSJSZXR1cm4gdGhlIGluaXRpYWwgbWV0aG9k IGNvbnRleHQgb2YgdGhlIHJlZGlyZWN0ZWQgbWVzc2FnZS4NCglUaGlzIGdlbmVyYWwgaW1w bGVtZW50YXRpb24gaXMgb3ZlcnJpZGRlbiBpbiBCZWZvcmVBZnRlckxpc3RlbmVyLiINCg0K CXwgY3R4IHwNCgljdHggOj0gdGhpc0NvbnRleHQuCglbIGN0eCA9PSBuaWwgb3I6IFsNCgkJ Y3R4IHJlY2VpdmVyIGlzT2JqZWN0QXR0YWNoYWJsZSBhbmQ6IFsgY3R4IHJlY2VpdmVyIH5+ IHNlbGZdXV0gd2hpbGVGYWxzZTogWyBjdHggOj0gY3R4IHNlbmRlciBdLg0KCWN0eCA9PSBu aWwgaWZUcnVlOiBbIHNlbGYgZXJyb3I6ICdiYXNlIGNvbnRleHQgbm90IGZvdW5kJyBdLgoJ XmN0eCENCg0KYmFzZU9iamVjdA0KCSJSZXR1cm4gdGhlIG9yaWdpbmFsIHJlY2VpdmVyIG9m IHRoZSByZWRpcmVjdGVkIG1lc3NhZ2UuIg0KDQoJXnNlbGYgYmFzZUNvbnRleHQgcmVjZWl2 ZXIhDQoNCmRldGFjaEF0OiBzZWxlY3Rvcg0KCSJTdG9wIHJlZGlyZWN0aW5nIG1lc3NhZ2Vz IG9mIHRoZSBmb3JtIHNlbGVjdG9yLiINCg0KCXNlbGYgYmFzaWNDbGFzcyByZW1vdmVTZWxl Y3Rvcjogc2VsZWN0b3IuDQoJc2VsZiBsaXN0ZW5lcnNEaWN0aW9uYXJ5IHJlbW92ZUtleTog c2VsZWN0b3IuIQ0KDQptYWtlT2JqZWN0QXR0YWNoYWJsZQ0KCSJQcmVwYXJlIHRoaXMgb2Jq ZWN0IGZvciByZWRpcmVjdGluZyBtZXNzYWdlcy4iDQoNCglzZWxmIGlzT2JqZWN0QXR0YWNo YWJsZSBpZlRydWU6IFsgXnNlbGYgXS4NCg0KCXNlbGYNCgkJYWRkSW5zdGFuY2VWYXJpYWJs ZTogJ2xpc3RlbmVyc0RpY3Rpb25hcnknOw0KCQlsaXN0ZW5lcnNEaWN0aW9uYXJ5OiBJZGVu dGl0eURpY3Rpb25hcnkgbmV3LiEgIQ0KDQohT2JqZWN0IG1ldGhvZHNGb3I6ICdpbnN0YW5j ZSBzcGVjaWFsaXphdGlvbichDQoNCmFkZEluc3RhbmNlVmFyaWFibGU6IGFTdHJpbmcNCgki QWRkIGFuIGluc3RhbmNlIHZhcmlhYmxlIGFuZCBhY2Nlc3NpbmcNCgltZXRob2RzIGJhc2Vk IG9uIHRoZSBuYW1lIGFTdHJpbmciDQoNCglzZWxmIHNwZWNpYWxpemUuDQoJc2VsZiBpbmNy ZW1lbnROdW1iZXJPZkluc3RWYXJzSW5NeUNsYXNzRm9ybWF0Lg0KCXNlbGYgbXV0YXRlU2Vs ZlRvUmVmbGVjdE5ld0NsYXNzRm9ybWF0Lg0KCXNlbGYgYWRkQWNjZXNzaW5nTWV0aG9kc0Zv ckxhc3RJbnN0VmFyVXNpbmc6IGFTdHJpbmcuIQ0KDQpiYXNpY0NsYXNzDQoJIkFuc3dlciB0 aGUgb2JqZWN0IHdoaWNoIGlzIHRoZSByZWNlaXZlcidzIGNsYXNzLiINCg0KCTxwcmltaXRp dmU6IDExMT4NCglzZWxmIHByaW1pdGl2ZUZhaWxlZCENCg0KaXNTcGVjaWFsaXplZA0KDQoJ XnNlbGYgYmFzaWNDbGFzcyBzaG91bGRCZVJlZ2lzdGVyZWQgbm90IQ0KDQpzcGVjaWFsaXpl OiBhU3RyaW5nDQoJIkNvbXBpbGUgYVN0cmluZyBhcyBhIG1ldGhvZCBmb3IgdGhpcyBpbnN0 YW5jZSBvbmx5LiINCg0KCXNlbGYgc3BlY2lhbGl6ZS4NCglzZWxmIGJhc2ljQ2xhc3MgY29t cGlsZTogYVN0cmluZyBub3RpZnlpbmc6IG5pbC4hDQoNCnVuc3BlY2lhbGl6ZQ0KDQoJc2Vs ZiBpc1NwZWNpYWxpemVkIGlmRmFsc2U6IFtec2VsZl0uDQoJc2VsZiBjaGFuZ2VDbGFzc1Rv VGhhdE9mOiBzZWxmIGNsYXNzIGJhc2ljTmV3LiEgIQ0KDQohT2JqZWN0IG1ldGhvZHNGb3I6 ICdwcml2YXRlIC0gaW5zdGFuY2Ugc3BlY2lhbGl6YXRpb24nIQ0KDQphZGRBY2Nlc3NpbmdN ZXRob2RzRm9yTGFzdEluc3RWYXJVc2luZzogYVN0cmluZw0KCSJBZGQgZ2V0dGVycyBhbmQg c2V0dGVycyBmb3IgdGhlIGxhc3QgaW5zdGFuY2UNCgl2YXJpYWJsZSB1c2luZyBhU3RyaW5n IGZvciBuYW1pbmciDQoNCgl8IGxhc3RJVkluZGV4IGdldE1ldGggcHV0TWV0aCB8DQoJbGFz dElWSW5kZXggOj0gc2VsZiBiYXNpY0NsYXNzIGluc3RTaXplLg0KCWdldE1ldGggOj0gYVN0 cmluZywgJyBec2VsZiBpbnN0VmFyQXQ6ICcsDQoJCWxhc3RJVkluZGV4IHByaW50U3RyaW5n Lg0KCXNlbGYgYmFzaWNDbGFzcyBjb21waWxlOiBnZXRNZXRoIG5vdGlmeWluZzogbmlsLg0K CXB1dE1ldGggOj0gYVN0cmluZywgJzogYVZhbHVlIHNlbGYgaW5zdFZhckF0OiAnLA0KCQls YXN0SVZJbmRleCBwcmludFN0cmluZywgJyBwdXQ6IGFWYWx1ZScuDQoJc2VsZiBiYXNpY0Ns YXNzIGNvbXBpbGU6IHB1dE1ldGggbm90aWZ5aW5nOiBuaWwuIQ0KDQppbmNyZW1lbnROdW1i ZXJPZkluc3RWYXJzSW5NeUNsYXNzRm9ybWF0DQoJIlNldCB0aGUgZm9ybWF0IG9mIG15IGNs YXNzIHNvIHRoYXQgaXQgZGVmaW5lcyB0aGUgbnVtYmVyDQoJb2YgaW5zdGFuY2UgdmFyaWFi bGVzIHRvIGJlIGhpZ2hlciBieSBvbmUgdGhhbiBwcmV2aW91c2x5Ig0KDQoJfCBmb3JtYXQg IG5ld0luc3RWYXJMaXN0U2l6ZSB8DQoJbmV3SW5zdFZhckxpc3RTaXplIDo9IHNlbGYgYmFz aWNDbGFzcyBpbnN0U2l6ZSAtIHNlbGYgY2xhc3MgaW5zdFNpemUgKyAxLg0KCWZvcm1hdCA6 PSBDbGFzc0J1aWxkZXIgbmV3DQoJCWdlbkZvcm1hdDogbmV3SW5zdFZhckxpc3RTaXplDQoJ CXVuZGVyOiBzZWxmIGNsYXNzIA0KCQlmb3JtYXQ6IHNlbGYgYmFzaWNDbGFzcyBmb3JtYXQu DQoJc2VsZiBiYXNpY0NsYXNzIHNldEluc3RhbmNlRm9ybWF0OiBmb3JtYXQuIQ0KDQptdXRh dGVTZWxmVG9SZWZsZWN0TmV3Q2xhc3NGb3JtYXQNCgkiTXV0YXRlIHNlbGYgdG8gZ2V0IGlu IHN5bmMgd2l0aCB0aGUgbmV3IGZvcm1hdCBvZiBteSBjbGFzcyINCg0KCXwgbmV3SVZTaXpl IG1hcHBpbmdBcnJheSBuZXdJbnN0IHwNCgluZXdJVlNpemUgOj0gc2VsZiBiYXNpY0NsYXNz IGluc3RTaXplLg0KCW1hcHBpbmdBcnJheSA6PSBBcnJheSBuZXc6IG5ld0lWU2l6ZS4NCgkx IHRvOiBuZXdJVlNpemUgLSAxIGRvOiBbIDppIHwgbWFwcGluZ0FycmF5IGF0OiBpIHB1dDog aV0uDQoJbWFwcGluZ0FycmF5IGF0OiBuZXdJVlNpemUgcHV0OiAwLg0KCW5ld0luc3QgOj0g Q2xhc3NCdWlsZGVyIG5ldw0KCQljcmVhdGVDb3B5OiBzZWxmDQoJCXVuZGVyOiBzZWxmIGJh c2ljQ2xhc3MNCgkJdXNpbmc6IG1hcHBpbmdBcnJheS4NCglzZWxmIGJlY29tZTogbmV3SW5z dC4hDQoNCnNwZWNpYWxpemUNCgkiUHJlcGFyZSBzZWxmIGZvciBvdmVycmlkaW5nIG1ldGhv ZHMuIg0KDQoJfCBjbGFzcyB8DQoJc2VsZiBpc1NwZWNpYWxpemVkIGlmVHJ1ZTogW15zZWxm XS4NCgljbGFzcyA6PSBCZWhhdmlvciBuZXcNCgkJc3VwZXJjbGFzczogc2VsZiBjbGFzczsN CgkJc2V0SW5zdGFuY2VGb3JtYXQ6IHNlbGYgY2xhc3MgZm9ybWF0Ow0KCQltZXRob2REaWN0 aW9uYXJ5OiBNZXRob2REaWN0aW9uYXJ5IG5ldy4NCglzZWxmIGNoYW5nZUNsYXNzVG9UaGF0 T2Y6IGNsYXNzIGJhc2ljTmV3Lg0KCXNlbGYgYmFzaWNDbGFzcyBjb21waWxlOiANCgkJJ2Ns YXNzIA0KCQkJXnN1cGVyIGNsYXNzIHN1cGVyY2xhc3MnIA0KCQlub3RpZnlpbmc6IG5pbC4h ICENCgwNCg0KDQpPYmplY3Qgc3ViY2xhc3M6ICNDb29yZGluYXRvcg0KCWluc3RhbmNlVmFy aWFibGVOYW1lczogJ3BvcnREaWN0aW9uYXJ5IHNlbGZleENvbGxlY3Rpb24gbXV0ZXhDb2xs ZWN0aW9ucyBjb29yZGluYXRpb25TdGF0ZUxvY2sgd2FpdGluZ0xvY2sgJw0KCWNsYXNzVmFy aWFibGVOYW1lczogJycNCglwb29sRGljdGlvbmFyaWVzOiAnJw0KCWNhdGVnb3J5OiAnQ29v cmRpbmF0b3JzJyENCg0KDQohQ29vcmRpbmF0b3IgbWV0aG9kc0ZvcjogJ3ByaXZhdGUgLSB1 dGlsaXRpZXMnIQ0KDQpjaGVja0lmUG9ydEV4aXN0czogcG9ydE5hbWUNCg0KCShwb3J0RGlj dGlvbmFyeSBpbmNsdWRlc0tleTogcG9ydE5hbWUpIGlmRmFsc2U6IFsgc2VsZiBlcnJvcjog J05vIHN1Y2ggcG9ydDogJywgcG9ydE5hbWUgXS4hDQoNCmdldE1lc3NhZ2VDb29yZGluYXRv ckZvcjogcG9ydEFuZFNlbGVjdG9yDQoNCgl8IHBvcnROYW1lIHNlbGVjdG9yIHBvcnQgfA0K CXBvcnROYW1lIDo9IHBvcnRBbmRTZWxlY3RvciBhdDogMS4NCglzZWxlY3RvciA6PSBwb3J0 QW5kU2VsZWN0b3IgYXQ6IDIuDQoJcG9ydCA6PSBwb3J0RGljdGlvbmFyeSBhdDogcG9ydE5h bWUuDQoJcG9ydCByZWdpc3RlclNlbGVjdG9ySWZOZWNlc3Nhcnk6IHNlbGVjdG9yLg0KCV5w b3J0IG1lc3NhZ2VDb29yZGluYXRvckRpY3Rpb25hcnkgYXQ6IHNlbGVjdG9yIQ0KDQpwYXJz ZVF1YWxpZmllZFNlbGVjdG9yOiBhU3RyaW5nDQoNCgl8IGluZGV4IHBvcnQgc2VsZWN0b3Ig fA0KCWluZGV4IDo9IGFTdHJpbmcgaW5kZXhPZjogJC4gaWZBYnNlbnQ6IFsgc2VsZiBlcnJv cjogJ1BvcnQgbWlzc2luZyBpbiAnLCBhU3RyaW5nIF0uDQoJcG9ydCA6PSBhU3RyaW5nIGNv cHlGcm9tOiAxIHRvOiBpbmRleCAtIDEuDQoJc2VsZWN0b3IgOj0gYVN0cmluZyBjb3B5RnJv bTogaW5kZXggKyAxIHRvOiBhU3RyaW5nIHNpemUuDQoJXkFycmF5IHdpdGg6IHBvcnQgYXNT eW1ib2wgd2l0aDogc2VsZWN0b3IgYXNTeW1ib2whICENCg0KIUNvb3JkaW5hdG9yIG1ldGhv ZHNGb3I6ICdkZWZpbmluZychDQoNCmFkZE11dGV4OiBxdWFsaWZpZWRTZWxlY3RvckNvbGxl Y3Rpb24NCg0KCXF1YWxpZmllZFNlbGVjdG9yQ29sbGVjdGlvbiBzaXplIDwgMiBpZlRydWU6 IFsgc2VsZiBlcnJvcjogJ0EgbXV0ZXggc2V0IG5lZWRzIGF0IGxlYXN0IHR3byBlbGVtZW50 cycgXS4NCgltdXRleENvbGxlY3Rpb25zIGFkZDogcXVhbGlmaWVkU2VsZWN0b3JDb2xsZWN0 aW9uLiENCg0KYWRkUG9ydDogcG9ydE5hbWUNCg0KCShwb3J0RGljdGlvbmFyeSBpbmNsdWRl c0tleTogcG9ydE5hbWUgYXNTeW1ib2wpIGlmVHJ1ZTogWyBzZWxmIGVycm9yOiAnUG9ydCBh bHJlYWR5IGV4aXN0cyEhJyBdLg0KCXBvcnREaWN0aW9uYXJ5IGF0OiBwb3J0TmFtZSBhc1N5 bWJvbCBwdXQ6IENvb3JkaW5hdG9yUG9ydCBuZXcuIQ0KDQphZGRQb3J0czogcG9ydE5hbWVD b2xsZWN0aW9uDQoNCgkoVXRpbGl0aWVzIGNoZWNrRm9yRHVwbGljYXRlc0luOiBwb3J0TmFt ZUNvbGxlY3Rpb24pIGlmVHJ1ZTogWyBzZWxmIGVycm9yOiAnRHVwbGljYXRlIHBvcnQgbmFt ZXMgYXJlIG5vdCBhbGxvd2VkISEnIF0uDQoJcG9ydE5hbWVDb2xsZWN0aW9uIGRvOiBbIDpw b3J0TmFtZSB8IHBvcnREaWN0aW9uYXJ5IGF0OiBwb3J0TmFtZSBhc1N5bWJvbCBwdXQ6IENv b3JkaW5hdG9yUG9ydCBuZXcgXS4hDQoNCmF0OiBxdWFsaWZpZWRTZWxlY3RvciBvbkVudHJ5 OiBvbkVudHJ5QmxvY2sNCg0KCXNlbGYgYXQ6IHF1YWxpZmllZFNlbGVjdG9yIHJlcXVpcmVz OiBuaWwgb25FbnRyeTogb25FbnRyeUJsb2NrIG9uRXhpdDogbmlsLiENCg0KYXQ6IHF1YWxp ZmllZFNlbGVjdG9yIG9uRW50cnk6IG9uRW50cnlCbG9jayBvbkV4aXQ6IG9uRXhpdEJsb2Nr DQoNCglzZWxmIGF0OiBxdWFsaWZpZWRTZWxlY3RvciByZXF1aXJlczogbmlsIG9uRW50cnk6 IG9uRW50cnlCbG9jayBvbkV4aXQ6IG9uRXhpdEJsb2NrLiENCg0KYXQ6IHF1YWxpZmllZFNl bGVjdG9yIG9uRXhpdDogb25FeGl0QmxvY2sNCg0KCXNlbGYgYXQ6IHF1YWxpZmllZFNlbGVj dG9yIHJlcXVpcmVzOiBuaWwgb25FbnRyeTogbmlsIG9uRXhpdDogb25FeGl0QmxvY2suIQ0K DQphdDogcXVhbGlmaWVkU2VsZWN0b3IgcmVxdWlyZXM6IGNvbmRpdGlvbkJsb2NrDQoNCglz ZWxmIGF0OiBxdWFsaWZpZWRTZWxlY3RvciByZXF1aXJlczogY29uZGl0aW9uQmxvY2sgb25F bnRyeTogbmlsIG9uRXhpdDogbmlsLiENCg0KYXQ6IHF1YWxpZmllZFNlbGVjdG9yIHJlcXVp cmVzOiBjb25kaXRpb25CbG9jayBvbkVudHJ5OiBvbkVudHJ5QmxvY2sNCg0KCXNlbGYgYXQ6 IHF1YWxpZmllZFNlbGVjdG9yIHJlcXVpcmVzOiBjb25kaXRpb25CbG9jayBvbkVudHJ5OiBv bkVudHJ5QmxvY2sgb25FeGl0OiBuaWwuIQ0KDQphdDogcXVhbGlmaWVkU2VsZWN0b3IgcmVx dWlyZXM6IGNvbmRpdGlvbkJsb2NrIG9uRW50cnk6IG9uRW50cnlCbG9jayBvbkV4aXQ6IG9u RXhpdEJsb2NrDQoNCgl8IHBvcnRBbmRTZWxlY3RvciBtZXNzYWdlQ29vcmRpbmF0b3IgfA0K CXBvcnRBbmRTZWxlY3RvciA6PSBzZWxmIHBhcnNlUXVhbGlmaWVkU2VsZWN0b3I6IHF1YWxp ZmllZFNlbGVjdG9yLg0KCXNlbGYgY2hlY2tJZlBvcnRFeGlzdHM6ICAocG9ydEFuZFNlbGVj dG9yIGF0OiAxKS4NCgltZXNzYWdlQ29vcmRpbmF0b3IgOj0gc2VsZiBnZXRNZXNzYWdlQ29v cmRpbmF0b3JGb3I6IHBvcnRBbmRTZWxlY3Rvci4NCgltZXNzYWdlQ29vcmRpbmF0b3Igd2Fp dGluZ0NvbmRpdGlvbjogY29uZGl0aW9uQmxvY2s7IG9uRW50cnk6IG9uRW50cnlCbG9jazsg b25FeGl0OiBvbkV4aXRCbG9jay4hDQoNCmF0OiBxdWFsaWZpZWRTZWxlY3RvciByZXF1aXJl czogY29uZGl0aW9uQmxvY2sgb25FeGl0OiBvbkV4aXRCbG9jaw0KDQoJc2VsZiBhdDogcXVh bGlmaWVkU2VsZWN0b3IgcmVxdWlyZXM6IGNvbmRpdGlvbkJsb2NrIG9uRW50cnk6IG5pbCBv bkV4aXQ6IG9uRXhpdEJsb2NrLiENCg0KZGVmaW5lQ29vcmRpbmF0aW9uDQoNCgkib3ZlcnJp ZGUgdGhpcyBtZXRob2QgaW4gYSBzdWJjbGFzcyINCiINCglzZWxmIGFkZFBvcnRzOiAjKCBw b3J0MSBwb3J0MiApLg0KDQoJc2VsZiBzZWxmZXg6ICMoICdwb3J0MS5tMTonICdwb3J0Mi5t MjonICkuDQoJc2VsZiBtdXRleDogIygNCgkJIyggJ3BvcnQxLm0xOicgJ3BvcnQxLm0yJyAp DQoJCSMoICdwb3J0MS5tMycgJ3BvcnQyLm00JyApKS4NCg0KCXNlbGYNCgkJYXQ6ICdwb3J0 MS5tMTonDQoJCXJlcXVpcmVzOiBbIDpvYmogfCBvYmogaXNSZWR5IF0NCgkJb25FbnRyeTog WyA6b2JqIHwgb2JqIGVudGVyaW5nIF0NCgkJb25FeGl0OiBbIDpvYmogfCBvYmogbGVhdmlu ZyBdLg0KIiENCg0KbXV0ZXg6IGNvbGxlY3Rpb25PZlF1YWxpZmllZFNlbGVjdG9yQ29sbGVj dGlvbnMNCgkiZS5nLjoNCgkJIygNCgkJCSMoICdwb3J0MSNtZXRob2QxJyAncG9ydDEjbWV0 aG9kMicpDQoJCQkjKCAncG9ydDEjbWV0aG9kMScgJ3BvcnQyI21ldGhvZDEnKSkiDQoNCgl8 IG5ld0NvbGxlY3Rpb25zIHwNCgluZXdDb2xsZWN0aW9ucyA6PSBPcmRlcmVkQ29sbGVjdGlv biBuZXc6IGNvbGxlY3Rpb25PZlF1YWxpZmllZFNlbGVjdG9yQ29sbGVjdGlvbnMgc2l6ZS4N Cgljb2xsZWN0aW9uT2ZRdWFsaWZpZWRTZWxlY3RvckNvbGxlY3Rpb25zIGRvOiBbIDpjb2xs IHwgfCBuZXdDb2xsIHwNCgkJY29sbCBzaXplIDwgMiBpZlRydWU6IFsgc2VsZiBlcnJvcjog J0EgbXV0ZXggc2V0IG11c3QgY29udGFpbiBhdCBsZWFzdCB0d28gc2VsZWN0b3JzISEnIF0u DQoJCShVdGlsaXRpZXMgY2hlY2tGb3JEdXBsaWNhdGVzSW46IGNvbGwpIGlmVHJ1ZTogWyBz ZWxmIGVycm9yOiAnRHVwbGljYXRlIHNlbGVjdG9ycyBpbiB0aGUgbXV0ZXggc2V0IGFyZSBu b3QgYWxsb3dlZCEhJyBdLg0KCQluZXdDb2xsIDo9IE9yZGVyZWRDb2xsZWN0aW9uIG5ldzog Y29sbCBzaXplLg0KCQljb2xsIGRvOiBbIDpxdWFsaWZpZWRTZWxlY3RvciB8IHwgcG9ydEFu ZFNlbGVjdG9yIHwNCgkJCXBvcnRBbmRTZWxlY3RvciA6PSBzZWxmIHBhcnNlUXVhbGlmaWVk U2VsZWN0b3I6IHF1YWxpZmllZFNlbGVjdG9yLg0KCQkJc2VsZiBjaGVja0lmUG9ydEV4aXN0 czogIChwb3J0QW5kU2VsZWN0b3IgYXQ6IDEpLg0KCQkJbmV3Q29sbCBhZGQ6IHBvcnRBbmRT ZWxlY3RvciBdLg0KCQluZXdDb2xsZWN0aW9ucyBhZGQ6IG5ld0NvbGwgXS4NCgltdXRleENv bGxlY3Rpb25zIDo9IG5ld0NvbGxlY3Rpb25zLg0KDQoJc2VsZiBzZXRNdXRleENvbmRpdGlv bnMuIQ0KDQpzZWxmZXg6IHF1YWxpZmllZFNlbGVjdG9yQ29sbGVjdGlvbg0KDQoJfCBuZXdD b2xsIHwNCgkoVXRpbGl0aWVzIGNoZWNrRm9yRHVwbGljYXRlc0luOiBxdWFsaWZpZWRTZWxl Y3RvckNvbGxlY3Rpb24pIGlmVHJ1ZTogWyBzZWxmIGVycm9yOiAnRHVwbGljYXRlIHNlbGVj dG9ycyBpbiB0aGUgc2VsZmV4IHNldCBhcmUgbm90IGFsbG93ZWQhIScgXS4NCgluZXdDb2xs IDo9IE9yZGVyZWRDb2xsZWN0aW9uIG5ldzogcXVhbGlmaWVkU2VsZWN0b3JDb2xsZWN0aW9u IHNpemUuDQoJcXVhbGlmaWVkU2VsZWN0b3JDb2xsZWN0aW9uIGRvOiBbIDpxdWFsaWZpZWRT ZWxlY3RvciB8IHwgcG9ydEFuZFNlbGVjdG9yIHwNCgkJcG9ydEFuZFNlbGVjdG9yIDo9IHNl bGYgcGFyc2VRdWFsaWZpZWRTZWxlY3RvcjogcXVhbGlmaWVkU2VsZWN0b3IuDQoJCXNlbGYg Y2hlY2tJZlBvcnRFeGlzdHM6ICAocG9ydEFuZFNlbGVjdG9yIGF0OiAxKS4NCgkJbmV3Q29s bCBhZGQ6IHBvcnRBbmRTZWxlY3RvciBdLg0KCXNlbGZleENvbGxlY3Rpb24gOj0gbmV3Q29s bC4NCg0KCXNlbGYgc2V0U2VsZmV4Q29uZGl0aW9ucy4hICENCg0KIUNvb3JkaW5hdG9yIG1l dGhvZHNGb3I6ICdpbml0aWFsaXphdGlvbichDQoNCmluaXRpYWxpemUNCg0KCXBvcnREaWN0 aW9uYXJ5IDo9IElkZW50aXR5RGljdGlvbmFyeSBuZXcuDQoJc2VsZmV4Q29sbGVjdGlvbiA6 PSBPcmRlcmVkQ29sbGVjdGlvbiBuZXcuDQoJbXV0ZXhDb2xsZWN0aW9ucyA6PSBPcmRlcmVk Q29sbGVjdGlvbiBuZXcuDQoJY29vcmRpbmF0aW9uU3RhdGVMb2NrIDo9IE11dGV4IG5ldy4g ImNvdWxkIGJlIGNoYW5nZSB0byByZWN1cnNpdmUgaW4gZnV0dXJlIg0KCXdhaXRpbmdMb2Nr IDo9IFNlbWFwaG9yZSBuZXcuDQoNCglzZWxmIGRlZmluZUNvb3JkaW5hdGlvbi4hICENCg0K IUNvb3JkaW5hdG9yIG1ldGhvZHNGb3I6ICdyZWdpc3RlcmluZychDQoNCmNsZWFyUG9ydDog cG9ydE5hbWUNCgkiRGlzY29ubmVjdCBtZSBmcm9tIHRoZSBvYmplY3Qgb24gcG9ydCBwb3J0 TmFtZS4iDQoNCgl8IHBvcnQgfA0KCXNlbGYgY2hlY2tJZlBvcnRFeGlzdHM6IHBvcnROYW1l Lg0KCXBvcnQgOj0gcG9ydERpY3Rpb25hcnkgYXQ6IHBvcnROYW1lIGFzU3ltYm9sLg0KCXBv cnQgY29vcmRpbmF0ZWRPYmplY3QgaXNOaWwgaWZUcnVlOiBbIHNlbGYgZXJyb3I6ICdQb3J0 IGFscmVhZHkgY2xlYXIuJyBdLg0KCXBvcnQNCgkJY2xlYXJJbmNsdWRpbmdDb29yZGluYXRp b25TdGF0ZUxvY2s6IGNvb3JkaW5hdGlvblN0YXRlTG9jaw0KCQl3YWl0aW5nTG9jazogd2Fp dGluZ0xvY2suIQ0KDQpyZWdpc3RlcjogYW5PYmplY3QgYXQ6IHBvcnROYW1lDQoJIkNvbm5l Y3QgbWUgdG8gYW5PYmplY3QgYXQgcG9ydCBwb3J0TmFtZS4iDQoNCglzZWxmIGNoZWNrSWZQ b3J0RXhpc3RzOiBwb3J0TmFtZS4NCgkocG9ydERpY3Rpb25hcnkgYXQ6IHBvcnROYW1lIGFz U3ltYm9sKQ0KCQlyZWdpc3RlcjogYW5PYmplY3QNCgkJY29vcmRpbmF0aW9uU3RhdGVMb2Nr OiBjb29yZGluYXRpb25TdGF0ZUxvY2sNCgkJd2FpdGluZ0xvY2s6IHdhaXRpbmdMb2NrLiEg IQ0KDQohQ29vcmRpbmF0b3IgbWV0aG9kc0ZvcjogJ3ByaXZhdGUgLSBzZXQgY29uZGl0aW9u cychDQoNCnNldE11dGV4Q29uZGl0aW9ucw0KDQoJbXV0ZXhDb2xsZWN0aW9ucyBkbzogWyA6 bXV0ZXhDb2xsZWN0aW9uIHwgfCBtZXNzYWdlQ29vcmRpbmF0b3JDb2xsIHwNCgkJbWVzc2Fn ZUNvb3JkaW5hdG9yQ29sbCA6PSBPcmRlcmVkQ29sbGVjdGlvbiBuZXc6IG11dGV4Q29sbGVj dGlvbiBzaXplLg0KCQltdXRleENvbGxlY3Rpb24gZG86IFsgOnBvcnRBbmRTZWxlY3RvciB8 DQoJCQltZXNzYWdlQ29vcmRpbmF0b3JDb2xsIGFkZDogKHNlbGYgZ2V0TWVzc2FnZUNvb3Jk aW5hdG9yRm9yOiBwb3J0QW5kU2VsZWN0b3IpIF0uDQoJCW1lc3NhZ2VDb29yZGluYXRvckNv bGwgZG86IFsgOm1lc3NhZ2VDb29yZGluYXRvciB8DQoJCQltZXNzYWdlQ29vcmRpbmF0b3Ig bWFrZU11dGV4V2l0aDogKG1lc3NhZ2VDb29yZGluYXRvckNvbGwgY29weVdpdGhvdXQ6IG1l c3NhZ2VDb29yZGluYXRvcikgXV0uIQ0KDQpzZXRTZWxmZXhDb25kaXRpb25zDQoNCglzZWxm ZXhDb2xsZWN0aW9uIGRvOiBbIDpwb3J0QW5kU2VsZWN0b3IgfCB8IG1lc3NhZ2VDb29yZGlu YXRvciB8DQoJCW1lc3NhZ2VDb29yZGluYXRvciA6PSBzZWxmIGdldE1lc3NhZ2VDb29yZGlu YXRvckZvcjogcG9ydEFuZFNlbGVjdG9yLg0KCQltZXNzYWdlQ29vcmRpbmF0b3IgbWFrZVNl bGZleCBdLiEgIQ0KDQohQ29vcmRpbmF0b3IgbWV0aG9kc0ZvcjogJ2FjY2Vzc2luZychDQoN CmNvb3JkaW5hdGlvblN0YXRlTG9jaw0KDQoJXmNvb3JkaW5hdGlvblN0YXRlTG9jayENCg0K d2FpdGluZ0xvY2sNCg0KCV53YWl0aW5nTG9jayEgIQ0KDQohQ29vcmRpbmF0b3IgbWV0aG9k c0ZvcjogJ2Nvb3BlcmF0aW5nJyENCg0KY29vcGVyYXRlV2l0aDogYUNvb3JkaW5hdG9yDQoJ Ik1ha2UgcmVjZWl2ZXIgc2hhcmUgaXRzIGxvY2tzIHdpdGggYUNvb3JkaW5hdG9yLiINCg0K CWNvb3JkaW5hdGlvblN0YXRlTG9jayA6PSBhQ29vcmRpbmF0b3IgY29vcmRpbmF0aW9uU3Rh dGVMb2NrLg0KCXdhaXRpbmdMb2NrIDo9IGFDb29yZGluYXRvciB3YWl0aW5nTG9jay4hICEN Cg0KIi0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tICIhDQoNCg0KDQohQ29vcmRpbmF0b3IgY2xhc3MgbWV0aG9kc0ZvcjogJ2luc3RhbmNl IGNyZWF0aW9uJyENCg0KbmV3DQoNCglec3VwZXIgbmV3IGluaXRpYWxpemUhDQoNCm5ld0Nv b3BlcmF0aW5nV2l0aDogYUNvb3JkaW5hdG9yDQoJIlJldHVybiBhIG5ldyBjb29yZGluYXRv ci4gVGhlIG5ldyBjb29yZGluYXRvciB3aWxsIHNoYXJlIGl0cyBsb2NrIHdpdGggYUNvb3Jk aW5hdG9yLiINCg0KCV5zZWxmIG5ldyBjb29wZXJhdGVXaXRoOiBhQ29vcmRpbmF0b3IhICEN CgwNCg0KDQpPYmplY3Qgc3ViY2xhc3M6ICNCZWZvcmVBZnRlckxpc3RlbmVyDQoJaW5zdGFu Y2VWYXJpYWJsZU5hbWVzOiAnYmFzZU9iamVjdCAnDQoJY2xhc3NWYXJpYWJsZU5hbWVzOiAn Jw0KCXBvb2xEaWN0aW9uYXJpZXM6ICcnDQoJY2F0ZWdvcnk6ICdMaXN0ZW5lcnMnIQ0KQmVm b3JlQWZ0ZXJMaXN0ZW5lciBjb21tZW50Og0KJ0JlZm9yZUFmdGVyTGlzdGVuZXIgcmVwcmVz ZW50cyBhbiBvYmplY3QgdG8gYmUgYXR0YWNoZWQgdG8gYW5vdGhlciBvYmplY3QgTyBieSBt ZWFucyBvZg0KYXR0YWNoOiBhbk9iamVjdCBhdDogc2VsZWN0b3IuIFNlbmRpbmcgc2VsZWN0 b3IgdG8gTyB3aWxsIGludm9rZSBiZWZvcmVXb3JrLCB0aGVuIHRoZSB0aGUNCmNvcnJlc3Bv bmRpbmcgbWV0aG9kIGluIE8gYW5kIHRoZW4gYWZ0ZXJXb3JrLg0KDQpJbnN0YW5jZSBWYXJp YWJsZXM6DQoJYmFzZU9iamVjdAk8T2JqZWN0PglyZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBJ IGFtIGF0dGFjaGVkIHRvJyENCg0KDQohQmVmb3JlQWZ0ZXJMaXN0ZW5lciBtZXRob2RzRm9y OiAnY2FsbGluZyBiYXNlJyENCg0KYmFzZUNvbnRleHQNCgkiUmV0dXJuIHRoZSBpbml0aWFs IG1ldGhvZCBjb250ZXh0IG9mIHRoZSByZWRpcmVjdGVkIG1lc3NhZ2UuIg0KDQoJfCBjdHgg fA0KCWN0eCA6PSB0aGlzQ29udGV4dC4KCVsgY3R4ID09IG5pbCBvcjogW2N0eCByZWNlaXZl ciA9PSBiYXNlT2JqZWN0XV0gd2hpbGVGYWxzZTogWyBjdHggOj0gY3R4IHNlbmRlciBdLg0K CWN0eCA9PSBuaWwgaWZUcnVlOiBbIHNlbGYgZXJyb3I6ICdiYXNlIGNvbnRleHQgbm90IGZv dW5kJyBdLgoJXmN0eCENCg0KYmFzZU9iamVjdA0KDQoJXmJhc2VPYmplY3QhDQoNCmJhc2VP YmplY3Q6IGFuT2JqZWN0DQoNCgliYXNlT2JqZWN0IDo9IGFuT2JqZWN0ISAhDQoNCiFCZWZv cmVBZnRlckxpc3RlbmVyIG1ldGhvZHNGb3I6ICdwcm9jZXNzaW5nJyENCg0KYWZ0ZXJXb3Jr DQoNCgkiRG8gYWZ0ZXIgd29yay4gVG8gYmUgb3ZlcnJpZGRlbiBpbiBhIHN1YmNsYXNzLiIh DQoNCmJlZm9yZVdvcmsNCg0KCSJEbyBiZWZvcmUgd29yay4gVG8gYmUgb3ZlcnJpZGRlbiBp biBhIHN1YmNsYXNzLiIhDQoNCmRvDQoJIkRvIHRoZSBiZWZvcmUgd29yaywgdGhlbiBjYWxs IHRoZSBiYXNlIG1ldGhvZCwgdGhlbiBkbyB0aGUgYWZ0ZXIgd29yay4NCglFeGVjdXRlIGFm dGVyV29yayBldmVuIGluIGNhc2Ugb2YgYW4gZXhjZXB0aW9uIGluIGJhc2VDYWxsLiINCg0K CXwgcmVzdWx0IHwNCglzZWxmIGJlZm9yZVdvcmsuDQoJWyByZXN1bHQgOj0gc2VsZiBiYXNl Q2FsbCBdIHZhbHVlTm93T3JPblVud2luZERvOiBbDQoJCXNlbGYgYWZ0ZXJXb3JrIF0uDQoJ XnJlc3VsdCEgIQ0KDQohQmVmb3JlQWZ0ZXJMaXN0ZW5lciBtZXRob2RzRm9yOiAnYXR0YWNo aW5nIHRvIG9iamVjdHMnIQ0KDQphdHRhY2hUbzogYW5PYmplY3QgYXQ6IHNlbGVjdG9yDQoJ IkF0dGFjaCBzZWxmIHRvIGFuT2JqZWN0IGF0IHNlbGVjdG9yLiINCg0KCWFuT2JqZWN0IGF0 dGFjaDogc2VsZiBhdDogc2VsZWN0b3Igc2VuZGluZzogI2RvLg0KCXNlbGYgYmFzZU9iamVj dDogYW5PYmplY3QuISAhDQoMDQoNCg0KQ29vcmRpbmF0b3Igc3ViY2xhc3M6ICNTZWxmZXhG b3JUd29NZXRob2RzVGVzdENvb3JkaW5hdG9yDQoJaW5zdGFuY2VWYXJpYWJsZU5hbWVzOiAn Jw0KCWNsYXNzVmFyaWFibGVOYW1lczogJycNCglwb29sRGljdGlvbmFyaWVzOiAnJw0KCWNh dGVnb3J5OiAnVGVzdCAtIFN5bmNocm9uaXppbmcgVHdvIE1ldGhvZHMnIQ0KDQoNCiFTZWxm ZXhGb3JUd29NZXRob2RzVGVzdENvb3JkaW5hdG9yIG1ldGhvZHNGb3I6ICdkZWZpbmluZych DQoNCmRlZmluZUNvb3JkaW5hdGlvbg0KDQoJc2VsZiBhZGRQb3J0czogIyggdHdvTWV0aG9k c1Rlc3QgKS4NCg0KCXNlbGYgc2VsZmV4OiAjKCAndHdvTWV0aG9kc1Rlc3QubWV0aG9kMScg J3R3b01ldGhvZHNUZXN0Lm1ldGhvZDInICkuISAhDQoMDQoNCg0KQmVmb3JlQWZ0ZXJMaXN0 ZW5lciBzdWJjbGFzczogI1N5bmNocm9uaXphdGlvbkxpc3RlbmVyDQoJaW5zdGFuY2VWYXJp YWJsZU5hbWVzOiAnbWVzc2FnZUNvb3JkaW5hdG9ycyBlbnRyeVJlY29yZCBjb29yZGluYXRv ckxvY2tzIHdhaXRpbmdMb2NrcyAnDQoJY2xhc3NWYXJpYWJsZU5hbWVzOiAnJw0KCXBvb2xE aWN0aW9uYXJpZXM6ICcnDQoJY2F0ZWdvcnk6ICdMaXN0ZW5lcnMnIQ0KU3luY2hyb25pemF0 aW9uTGlzdGVuZXIgY29tbWVudDoNCidTeW5jaHJvbml6YXRpb25MaXN0ZW5lciBpcyBhIGxp c3RlbmVyIG1lZGlhdGluZyBiZXR3ZWVuIGEgc3luY2hyb25pemVkIG9iamVjdCBhbmQgaXRz IGNvb3JkaW5hdG9yDQooc2VlIGNsYXNzIENvb3JkaW5hdG9yKS4gVGhlcmUgaXMgZXhhY3Rs eSBvbmUgU3luY2hyb25pemF0aW9uTGlzdGVuZXIgcGVyIG1ldGhvZCB0aGF0IG5lZWRzIHRv IGJlIHN5bmNocm9uaXplZC4NClRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIGNvb3JkaW5h dG9yIGFzc29jaWF0ZWQgd2l0aCBhIFN5bmNocm9uaXphdGlvbkxpc3RlbmVyLiBFYWNoIGNv b3JkaW5hdG9yDQpjb250cmlidXRlcyBhIE1lc3NhZ2VDb29yZGluYXRvcnMgdG8gdGhlIFN5 bmNocm9uaXphdGlvbkxpc3RlbmVyIGFzIHdlbGwgYXMgYW4gZXh0ZXJuYWxMb2NrIChzZWUg U3luY2hyb25pemVkQmVmb3JlQWZ0ZXJMaXN0ZW5lcikuDQoNCkluc3RhbmNlIFZhcmlhYmxl czoNCgltZXNzYWdlQ29vcmRpbmF0b3JzCTxPcmRlcmVkQ29sbGVjdGlvbiBvZjogTWVzc2Fn ZUNvb3JkaW5hdG9yPglNZXNzYWdlQ29vcmRpbmF0b3JzIGNvbnRyaWJ1dGVkIGJ5IHRoZSBh c3NvY2lhdGVkIENvb3JkaW5hdG9ycw0KCWVudHJ5UmVjb3JkCTxFbnRyeVJlY29yZHM+CWtl ZXBzIHRyYWNrIG9mIFByb2Nlc3NlcyBlbnRlcmluZyB0aGUgbWV0aG9kIGFzc29jaWF0ZWQg d2l0aCB0aGlzIGxpc3RlbmVyDQoJY29vcmRpbmF0b3JMb2NrcyA8R3JvdXBMb2NrPgljb250 YWlucyBhIGdyb3VwIGxvY2sgZm9yIHRoZSBjb29yZGluYXRvcnMgd2hpY2ggYXJlIGFzc29j aWF0ZWQgd2l0aCBtZTsgdGhpcyBhbGxvd3MgZm9yIGFuIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8g dGhlIGNvb3JkaWF0b3JzDQoJd2FpdGluZ0xvY2tzCTxHcm91cFdhaXRpbmdMb2NrPglsb2Nr cyB1c2VkIGZvciB3YWl0aW5nIGlmIHByZWNvbmRpdGlvbnMgZm9yIGVudGVyaW5nIHRoZSBh c3NvY2lhdGVkIG1ldGhvZCBhcmUgbm90IG1ldDsNCgkJCQkJCQkJZWFjaCBhc3NvY2lhdGVk IGNvb3JkaW5hdG9yIGFkZHMgaXRzIChwb3NzaWJseSBzaGFyZWQpIGxvY2sgdG8gd2FpdGlu Z0xvY2tzJyENCg0KDQohU3luY2hyb25pemF0aW9uTGlzdGVuZXIgbWV0aG9kc0ZvcjogJ3By b2Nlc3NpbmcnIQ0KDQphZnRlcldvcmsNCg0KCWNvb3JkaW5hdG9yTG9ja3MgbG9jay4NCglb IHNlbGYgYWZ0ZXJXb3JrV2l0aG91dExvY2tpbmcgXSB2YWx1ZU5vd09yT25VbndpbmREbzog Ww0KCQljb29yZGluYXRvckxvY2tzIHJlbGVhc2UuDQoJCXNlbGYgbm90aWZ5QWxsIF0uIQ0K DQphZnRlcldvcmtXaXRob3V0TG9ja2luZw0KDQoJZW50cnlSZWNvcmQgb3V0Lg0KCXNlbGYg ZXhlY3V0ZU9uRXhpdEJsb2Nrcy4hDQoNCmJlZm9yZVdvcmsNCg0KCWNvb3JkaW5hdG9yTG9j a3MgbG9jay4NCglbIHNlbGYgYmVmb3JlV29ya1dpdGhvdXRMb2NraW5nIF0gdmFsdWVOb3dP ck9uVW53aW5kRG86IFsNCgkJY29vcmRpbmF0b3JMb2NrcyByZWxlYXNlIF0uIQ0KDQpiZWZv cmVXb3JrV2l0aG91dExvY2tpbmcNCg0KCVsgc2VsZiBjaGVja0VudHJ5V2FpdENvbmRpdGlv bnMgXSB3aGlsZVRydWU6IFsgc2VsZiB3YWl0IF0uDQoJZW50cnlSZWNvcmQgaW4uDQoJc2Vs ZiBleGVjdXRlT25FbnRyeUJsb2Nrcy4hDQoNCmNoZWNrRW50cnlXYWl0Q29uZGl0aW9ucw0K CSJSZXR1cm4gZmFsc2UgaWYgbm8gY29vcmRpbmF0b3IgcmVxdWlyZXMgdGhlIGN1cnJlbnQg dGhyZWFkIHRvIHdhaXQuDQoJT3RoZXJ3aXNlIHJldHVybiB0cnVlLiINCg0KCW1lc3NhZ2VD b29yZGluYXRvcnMgZG86IFsgOmNvb3JkaW5hdG9yIHwNCgkJKGNvb3JkaW5hdG9yIGNoZWNr RW50cnlXYWl0Q29uZGl0aW9uczogYmFzZU9iamVjdCkgaWZUcnVlOiBbIF50cnVlIF1dLg0K CV5mYWxzZSENCg0KZXhlY3V0ZU9uRW50cnlCbG9ja3MNCgkiRXhlY3V0ZSB0aGUgb25FbnRy eUJsb2Nrcy4iDQoNCgltZXNzYWdlQ29vcmRpbmF0b3JzIGRvOiBbIDpjb29yZGluYXRvciB8 DQoJCWNvb3JkaW5hdG9yIGV4ZWN1dGVPbkVudHJ5QmxvY2s6IGJhc2VPYmplY3QgXS4hDQoN CmV4ZWN1dGVPbkV4aXRCbG9ja3MNCgkiRXhlY3V0ZSB0aGUgb25FbnRyeUJsb2Nrcy4iDQoN CgltZXNzYWdlQ29vcmRpbmF0b3JzIGRvOiBbIDpjb29yZGluYXRvciB8DQoJCWNvb3JkaW5h dG9yIGV4ZWN1dGVPbkV4aXRCbG9jazogYmFzZU9iamVjdCBdLiEgIQ0KDQohU3luY2hyb25p emF0aW9uTGlzdGVuZXIgbWV0aG9kc0ZvcjogJ3dhaXRpbmcnIQ0KDQpub3RpZnlBbGwNCgki Tm90aWZ5IGFsbCBwcm9jZXNzZXMgd2FpdGluZyBvbiB3YWl0aW5nTG9ja3MuIg0KDQoJd2Fp dGluZ0xvY2tzIG5vdGlmeUFsbC4hDQoNCndhaXQNCgkiV2FpdCB0aWxsIG5vdGlmeUFsbCBp cyBjYWxsZWQuIg0KDQoJY29vcmRpbmF0b3JMb2NrcyByZWxlYXNlLg0KCXdhaXRpbmdMb2Nr cyB3YWl0Lg0KCWNvb3JkaW5hdG9yTG9ja3MgbG9jay4hICENCg0KIVN5bmNocm9uaXphdGlv bkxpc3RlbmVyIG1ldGhvZHNGb3I6ICdpbml0aWFsaXphdGlvbichDQoNCmluaXRpYWxpemUN Cg0KCWVudHJ5UmVjb3JkIDo9IEVudHJ5UmVjb3JkIG5ldy4NCgltZXNzYWdlQ29vcmRpbmF0 b3JzIDo9IE9yZGVyZWRDb2xsZWN0aW9uIG5ldy4NCgljb29yZGluYXRvckxvY2tzIDo9IEdy b3VwTXV0ZXggbmV3Lg0KCXdhaXRpbmdMb2NrcyA6PSBHcm91cFdhaXRpbmdMb2NrIG5ldy4h ICENCg0KIVN5bmNocm9uaXphdGlvbkxpc3RlbmVyIG1ldGhvZHNGb3I6ICdyZWdpc3Rlcmlu ZychDQoNCmFkZE1lc3NhZ2VDb29yZGlhbnRvcjogYU1lc3NhZ2VDb29yZGluYXRvciBjb29y ZGluYXRpb25TdGF0ZUxvY2s6IGFNdXRleCB3YWl0aW5nTG9jazogYVNlbWFwaG9yZQ0KCSJB ZGQgYU1lc3NhZ2VDb29yZGluYXRvciBhbmQgbG9ja3MuIg0KDQoJYU1lc3NhZ2VDb29yZGlu YXRvciBlbnRyeVJlY29yZDogZW50cnlSZWNvcmQuDQoJY29vcmRpbmF0b3JMb2NrcyBhZGQ6 IGFNdXRleC4NCgl3YWl0aW5nTG9ja3MgYWRkOiBhU2VtYXBob3JlLg0KCW1lc3NhZ2VDb29y ZGluYXRvcnMgYWRkOiBhTWVzc2FnZUNvb3JkaW5hdG9yLiENCg0KcmVtb3ZlTWVzc2FnZUNv b3JkaWFudG9yOiBhTWVzc2FnZUNvb3JkaW5hdG9yIGNvb3JkaW5hdGlvblN0YXRlTG9jazog YU11dGV4IHdhaXRpbmdMb2NrOiBhU2VtYXBob3JlDQoJIlJlbW92ZSBhTWVzc2FnZUNvb3Jk aW5hdG9yIGFuZCBsb2Nrcy4iDQoNCgltZXNzYWdlQ29vcmRpbmF0b3JzIHJlbW92ZTogYU1l c3NhZ2VDb29yZGluYXRvci4NCgljb29yZGluYXRvckxvY2tzIHJlbW92ZTogYU11dGV4LiAi c2hvdWxkIGJlIHNlcmlhbGl6ZWQgd2l0aCBiZWZvcmVXb3JrIGFuZCBhZnRlcldvcmsiDQoJ d2FpdGluZ0xvY2tzIHJlbW92ZTogYVNlbWFwaG9yZS4NCglhTWVzc2FnZUNvb3JkaW5hdG9y IGVudHJ5UmVjb3JkOiBuaWwuDQoJc2VsZiBub3RpZnlBbGwuISAhDQoNCiFTeW5jaHJvbml6 YXRpb25MaXN0ZW5lciBtZXRob2RzRm9yOiAndGVzdGluZychDQoNCmlzRW1wdHkNCgkiQW5z d2VyIHRydWUgaWYgdGhlcmUgYXJlIGNvb3JkaW5hdG9ycyBhc3NvY2lhdGVkIHdpdGggc2Vs Zi4iDQoNCglebWVzc2FnZUNvb3JkaW5hdG9ycyBpc0VtcHR5ISAhDQoNCiFTeW5jaHJvbml6 YXRpb25MaXN0ZW5lciBtZXRob2RzRm9yOiAnYXR0YWNoaW5nIHRvIG9iamVjdHMnIQ0KDQph dHRhY2hUbzogYW5PYmplY3QgYXQ6IHNlbGVjdG9yDQoJIkF0dGFjaCBzZWxmIHRvIGFuT2Jq ZWN0IGF0IHNlbGVjdG9yLiINCg0KCXN1cGVyIGF0dGFjaFRvOiBhbk9iamVjdCBhdDogc2Vs ZWN0b3IuISAhDQoNCiItLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAiIQ0KDQoNCg0KIVN5bmNocm9uaXphdGlvbkxpc3RlbmVyIGNsYXNz IG1ldGhvZHNGb3I6ICdpbnN0YW5jZSBjcmVhdGlvbichDQoNCm5ldw0KDQoJXnN1cGVyIG5l dyBpbml0aWFsaXplISAhDQoMDQoNCg0KT2JqZWN0IHN1YmNsYXNzOiAjVHdvTWV0aG9kc1Rl c3QNCglpbnN0YW5jZVZhcmlhYmxlTmFtZXM6ICdwcm9jZXNzRGljdCAnDQoJY2xhc3NWYXJp YWJsZU5hbWVzOiAnQWxsVGVzdENvb3JkaW5hdG9yIENvbmRpdGlvblRlc3RDb29yZGluYXRv ciBNdXRleFRlc3RDb29yZGluYXRvciBTZWxmZXhUZXN0Q29vcmRpbmF0b3IgVGVzdFdvcmtl ciAnDQoJcG9vbERpY3Rpb25hcmllczogJycNCgljYXRlZ29yeTogJ1Rlc3QgLSBTeW5jaHJv bml6aW5nIFR3byBNZXRob2RzJyENCg0KDQohVHdvTWV0aG9kc1Rlc3QgbWV0aG9kc0Zvcjog J3dvcmsnIQ0KDQptZXRob2QxDQoJVHJhbnNjcmlwdCBzaG93OiAnbWV0aG9kMSBlbnRlcmVk IGJ5IHByb2Nlc3MgJzsgc2hvdzogKChwcm9jZXNzRGljdCBhdDogUHJvY2Vzc29yIGFjdGl2 ZVByb2Nlc3MpIHByaW50U3RyaW5nKTsgY3IuDQoJc2VsZiB3YWl0Lg0KCVRyYW5zY3JpcHQg c2hvdzogJ21ldGhvZDEgbGVmdCBieSBwcm9jZXNzICc7IHNob3c6ICgocHJvY2Vzc0RpY3Qg YXQ6IFByb2Nlc3NvciBhY3RpdmVQcm9jZXNzKSBwcmludFN0cmluZyk7IGNyLiENCg0KbWV0 aG9kMg0KCVRyYW5zY3JpcHQgc2hvdzogJ21ldGhvZDIgZW50ZXJlZCBieSBwcm9jZXNzICc7 IHNob3c6ICgocHJvY2Vzc0RpY3QgYXQ6IFByb2Nlc3NvciBhY3RpdmVQcm9jZXNzKSBwcmlu dFN0cmluZyk7IGNyLg0KCXNlbGYgd2FpdC4NCglUcmFuc2NyaXB0IHNob3c6ICdtZXRob2Qy IGxlZnQgYnkgcHJvY2VzcyAnOyBzaG93OiAoKHByb2Nlc3NEaWN0IGF0OiBQcm9jZXNzb3Ig YWN0aXZlUHJvY2VzcykgcHJpbnRTdHJpbmcpOyBjci4hDQoNCndhaXQNCgkoUmFuZG9tRGVs YXkgdXB0bzogMTAwMCkgd2FpdC4hICENCg0KIVR3b01ldGhvZHNUZXN0IG1ldGhvZHNGb3I6 ICdydW5uaW5nJyENCg0Kc3RhcnQNCg0KCXByb2Nlc3NEaWN0IDo9IElkZW50aXR5RGljdGlv bmFyeSBuZXcuDQoJcHJvY2Vzc0RpY3QgYXQ6IChbWyBzZWxmIG1ldGhvZDE7IHdhaXQgXSBy ZXBlYXQgXSBmb3JrQXQ6IFByb2Nlc3NvciB1c2VyQmFja2dyb3VuZFByaW9yaXR5KSBwdXQ6 IDEuDQoJcHJvY2Vzc0RpY3QgYXQ6IChbWyBzZWxmIG1ldGhvZDE7IHdhaXQgXSByZXBlYXQg XSBmb3JrQXQ6IFByb2Nlc3NvciB1c2VyQmFja2dyb3VuZFByaW9yaXR5KSBwdXQ6IDIuDQoJ cHJvY2Vzc0RpY3QgYXQ6IChbWyBzZWxmIG1ldGhvZDI7IHdhaXQgXSByZXBlYXQgXSBmb3Jr QXQ6IFByb2Nlc3NvciB1c2VyQmFja2dyb3VuZFByaW9yaXR5KSBwdXQ6IDMuDQoJcHJvY2Vz c0RpY3QgYXQ6IChbWyBzZWxmIG1ldGhvZDI7IHdhaXQgXSByZXBlYXQgXSBmb3JrQXQ6IFBy b2Nlc3NvciB1c2VyQmFja2dyb3VuZFByaW9yaXR5KSBwdXQ6IDQuIQ0KDQpzdG9wDQoNCglw cm9jZXNzRGljdCBrZXlzRG86IFsgOnByb2Nlc3MgfCBwcm9jZXNzIHRlcm1pbmF0ZSBdLiEg IQ0KDQoiLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gIiENCg0KDQoNCiFUd29NZXRob2RzVGVzdCBjbGFzcyBtZXRob2RzRm9yOiAnZXhw ZXJpbWVudGluZychDQoNCmV4YW1wbGUxDQoNCgkiRXZhbHVhdGUgdGhlIGZvbGxvd2luZyBz ZWN0aW9ucyBvbmUgYXQgYSB0aW1lLg0KCVdhdGNoIHRoZSBvdXRwdXQgaW4gdGhlIHRyYW5z Y3JpcHQgYmV0d2VlbiBldmFsdWF0aW5nIHRoZSBsaW5lcy4iDQoNCg0KCSJDcmVhdGUgdGhl IHdvcmtlciBhbmQgdGhlIGNvb3JkaW5hdG9ycy4iDQoJVGVzdFdvcmtlciA6PSBUd29NZXRo b2RzVGVzdCBuZXcuDQoJU2VsZmV4VGVzdENvb3JkaW5hdG9yIDo9IFNlbGZleEZvclR3b01l dGhvZHNUZXN0Q29vcmRpbmF0b3IgbmV3Lg0KCU11dGV4VGVzdENvb3JkaW5hdG9yIDo9IE11 dGV4Rm9yVHdvTWV0aG9kc1Rlc3RDb29yZGluYXRvciBuZXcuDQoJQ29uZGl0aW9uVGVzdENv b3JkaW5hdG9yIDo9IENvbmRpdGlvbkZvclR3b01ldGhvZHNUZXN0Q29vcmRpbmF0b3IgbmV3 Lg0KDQoJIlN0YXJ0IHRoZSB3b3JrZXIuIFdhdGNoIHRoZSBvdXRwdXQgaW4gdGhlIHRyYW5z Y3JpcHQuIG1ldGhvZDEgY2FuIGJlDQoJZXhlY3V0ZWQgYnkgYm90aCBwcm9jZXNzZXMgMSBh bmQgMiBhdCB0aGUgc2FtZSB0aW1lLiBtZXRob2QyIGJ5IHByb2Nlc3Nlcw0KCTMgYW5kIDQu Ig0KCVRlc3RXb3JrZXIgc3RhcnQuDQoNCgkiQXR0YWNoIHRoZSB3b3JrZXIgdG8gcG9ydCB0 d29NZXRob2RzVGVzdCBvZiBTZWxmZXhUZXN0Q29vcmRpbmF0b3IuIFdhdGNoIHRoZSBvdXRw dXQgaW4gdGhlIHRyYW5zY3JpcHQuDQoJQm90aCBtZXRob2QxIGFuZCBtZXRob2QyIGFyZSBl eGVjdXRlZCBieSBvbmUgcHJvY2VzcyBhdCBhIHRpbWUuIg0KCVNlbGZleFRlc3RDb29yZGlu YXRvciByZWdpc3RlcjogVGVzdFdvcmtlciBhdDogI3R3b01ldGhvZHNUZXN0Lg0KCVRyYW5z Y3JpcHQgc2hvdzogJ21ldGhvZDEgYW5kIG1ldGhvZDIgYXJlIHN5bmNocm9uaXplZCBhcyBz ZWxmZXgnOyBjci4NCg0KCSJBdHRhY2ggdGhlIHdvcmtlciB0byBwb3J0IHR3b01ldGhvZHNU ZXN0IG9mIE11dGV4VGVzdENvb3JkaW5hdG9yLiBXYXRjaCB0aGUgb3V0cHV0IGluIHRoZSB0 cmFuc2NyaXB0Lg0KCW1ldGhvZDEgYW5kIG1ldGhvZDIgYXJlIGV4ZWN1dGVkIGFsdGVybmF0 aXZlbHkuIE5vdyBtZXRob2QxIGFuZCBtZXRob2QyIGFyZSBzeW5jaHJvbml6ZWQgYXMgYm90 aA0KCXNlbGZleCBhbmQgbXV0ZXguIg0KCU11dGV4VGVzdENvb3JkaW5hdG9yIHJlZ2lzdGVy OiBUZXN0V29ya2VyIGF0OiAjdHdvTWV0aG9kc1Rlc3QuDQoJVHJhbnNjcmlwdCBzaG93OiAn bWV0aG9kMSBhbmQgbWV0aG9kMiBhcmUgc3luY2hyb25pemVkIGFzIG11dGV4JzsgY3IuDQoN CgkiQXR0YWNoIHRoZSB3b3JrZXIgdG8gcG9ydCB0d29NZXRob2RzVGVzdCBvZiBDb25kaXRp b25UZXN0Q29vcmRpbmF0b3IuIFdhdGNoIHRoZSBvdXRwdXQgaW4gdGhlIHRyYW5zY3JpcHQu DQoJVGhlcmUgYXJlIHRocmVlIGNhbGxzIHRvIG1ldGhvZDIgcGVyIG9uZSBjYWxsIHRvIG1l dGhvZDEuIg0KCUNvbmRpdGlvblRlc3RDb29yZGluYXRvciByZWdpc3RlcjogVGVzdFdvcmtl ciBhdDogI3R3b01ldGhvZHNUZXN0Lg0KCVRyYW5zY3JpcHQgc2hvdzogJ21ldGhvZDEgYW5k IG1ldGhvZDIgYXJlIHN5bmNocm9uaXplZCB1c2luZyBhIGNvbmRpdGlvbic7IGNyLg0KDQoN Cg0KDQoNCgkiRGV0YXRjaCB0aGUgY29vcmRpbmF0b3IgYXQgcG9ydCB0d29NZXRob2RzVGVz dCINCglTZWxmZXhUZXN0Q29vcmRpbmF0b3IgY2xlYXJQb3J0OiAjdHdvTWV0aG9kc1Rlc3Qu DQoNCg0KCSJTdG9wIHRoZSB3b3JrZXIuIg0KCVRlc3RXb3JrZXIgc3RvcC4hDQoNCmV4YW1w bGUyDQoNCgkiRXZhbHVhdGUgdGhlIGZvbGxvd2luZyBzZWN0aW9ucyBvbmUgYXQgYSB0aW1l LiINCg0KCSJDcmVhdGUgdGhlIHdvcmtlciBhbmQgdGhlIGNvb3JkaW5hdG9yLiINCglUZXN0 V29ya2VyIDo9IFR3b01ldGhvZHNUZXN0IG5ldy4NCglBbGxUZXN0Q29vcmRpbmF0b3IgOj0g QWxsRm9yVHdvTWV0aG9kc1Rlc3RDb29yZGluYXRvciBuZXcuDQoNCgkiQXR0YWNoIHRoZSB3 b3JrZXIgdG8gcG9ydCB0d29NZXRob2RzVGVzdCBvZiBBbGxUZXN0Q29vcmRpbmF0b3IuIg0K CUFsbFRlc3RDb29yZGluYXRvciByZWdpc3RlcjogVGVzdFdvcmtlciBhdDogI3R3b01ldGhv ZHNUZXN0Lg0KDQoJIlN0YXJ0IHRoZSB3b3JrZXIuIFdhdGNoIHRoZSBvdXRwdXQgaW4gdGhl IHRyYW5zY3JpcHQuDQoJVGhlcmUgYXJlIHRocmVlIGNhbGxzIHRvIG1ldGhvZDIgcGVyIG9u ZSBjYWxsIHRvIG1ldGhvZDEuIG1ldGhvZDEgYW5kIG1ldGhvZDIgYXJlIGFsc28gY29vcmRp bmF0ZWQgYXMgc2VsZmV4DQoJYW5kIG11dGV4LiINCglUZXN0V29ya2VyIHN0YXJ0Lg0KDQoJ IlN0b3AgdGhlIHdvcmtlci4iDQoJVGVzdFdvcmtlciBzdG9wLiENCg0KZXhhbXBsZTMNCg0K CSJFdmFsdWF0ZSB0aGUgZm9sbG93aW5nIHNlY3Rpb25zIG9uZSBhdCBhIHRpbWUuIg0KDQoJ IkNyZWF0ZSB0aGUgd29ya2VyIGFuZCB0aGUgY29vcmRpbmF0b3IuIg0KCVRlc3RXb3JrZXIg Oj0gVHdvTWV0aG9kc1Rlc3QgbmV3Lg0KCVNlbGZleFRlc3RDb29yZGluYXRvciA6PSBTZWxm ZXhGb3JUd29NZXRob2RzVGVzdENvb3JkaW5hdG9yIG5ldy4NCg0KCSJBdHRhY2ggdGhlIHdv cmtlciB0byBwb3J0IHR3b01ldGhvZHNUZXN0IG9mIFNlbGZleFRlc3RDb29yZGluYXRvci4i DQoJU2VsZmV4VGVzdENvb3JkaW5hdG9yIHJlZ2lzdGVyOiBUZXN0V29ya2VyIGF0OiAjdHdv TWV0aG9kc1Rlc3QuDQoNCgkiU3RhcnQgdGhlIHdvcmtlci4gV2F0Y2ggdGhlIG91dHB1dCBp biB0aGUgdHJhbnNjcmlwdC4NCgltZXRob2QxIGFuZCBtZXRob2QyIGFyZSBjb29yZGluYXRl ZCBhcyBzZWxmZXguIg0KCVRlc3RXb3JrZXIgc3RhcnQuDQoNCgkiTWFrZSB0aGUgY29vcmRp bmF0b3IgbXV0ZXggb24gYm90aCBtZXRob2RzLiBXYXRjaCB0aGUgcmVzdWx0IGluIHRoZSB0 cmFuc2NyaXB0LiINCglTZWxmZXhUZXN0Q29vcmRpbmF0b3IgbXV0ZXg6ICMoDQoJCSMoICd0 d29NZXRob2RzVGVzdC5tZXRob2QxJyAndHdvTWV0aG9kc1Rlc3QubWV0aG9kMicgKQ0KCSku DQoJVHJhbnNjcmlwdCBzaG93OiAnbWV0aG9kMSBhbmQgbWV0aG9kMiBhcmUgc3luY2hyb25p emVkIGFzIG11dGV4JzsgY3IuDQoNCgkNCgkiU3RvcCB0aGUgd29ya2VyLiINCglUZXN0V29y a2VyIHN0b3AuISAhDQoMDQoNCg0KT2JqZWN0IHN1YmNsYXNzOiAjR3JvdXBXYWl0aW5nTG9j aw0KCWluc3RhbmNlVmFyaWFibGVOYW1lczogJ2xvY2tzIGxvY2tJZGVudGl0eVNldCAnDQoJ Y2xhc3NWYXJpYWJsZU5hbWVzOiAnJw0KCXBvb2xEaWN0aW9uYXJpZXM6ICcnDQoJY2F0ZWdv cnk6ICdTeW5jaHJvbml6YXRpb24tU3VwcG9ydCchDQpHcm91cFdhaXRpbmdMb2NrIGNvbW1l bnQ6DQonR3JvdXBXYWl0aW5nTG9jayBhbGxvd3MgdXMgdG8gd2FpdCBvbiBhIHNldCBvZiBs b2Nrcy4NCg0KSW5zdGFuY2UgVmFyaWFibGVzOg0KCWxvY2tzCTxPcmRlcmVkQ29sbGVjdGlv biBvZjogU2VtYXBob3JlPglhbGxvd3MgdXMgdG8ga2VlcCB0cmFjayBvZiBhZGRlZCBsb2Nr cw0KCWxvY2tJZGVudGl0eVNldAk8SWRlbnRpdHlTZXQgb2Y6IFNlbWFwaG9yZT4Ja2VlcHMg dGhlIGxvY2tzIHdpdGhvdXQgZHVwbGljYXRlcychDQoNCg0KIUdyb3VwV2FpdGluZ0xvY2sg bWV0aG9kc0ZvcjogJ2FjY2Vzc2luZychDQoNCmFkZDogYVNlbWFwaG9yZQ0KDQoJbG9ja3Mg YWRkOiBhU2VtYXBob3JlLg0KCWxvY2tJZGVudGl0eVNldCBhZGQ6IGFTZW1hcGhvcmUuIQ0K DQpyZW1vdmU6IGFTZW1hcGhvcmUNCg0KCWxvY2tzIHJlbW92ZTogYVNlbWFwaG9yZS4NCgko bG9ja3MgaW5jbHVkZXM6IGFTZW1hcGhvcmUpIGlmRmFsc2U6IFsgbG9ja0lkZW50aXR5U2V0 IHJlbW92ZTogYVNlbWFwaG9yZSBdLiEgIQ0KDQohR3JvdXBXYWl0aW5nTG9jayBtZXRob2Rz Rm9yOiAnd2FpdGluZychDQoNCm5vdGlmeUFsbA0KCSJOb3RpZnkgYWxsIHByb2Nlc3NlcyB3 YWl0aW5nIG9uIGxvY2tzLiINCg0KCWxvY2tJZGVudGl0eVNldCBkbzogWyA6bG9jayB8DQoJ CWxvY2sgc2l6ZSB0aW1lc1JlcGVhdDogWyBsb2NrIHNpZ25hbCBdXS4hDQoNCndhaXQNCgki V2FpdCB0aWxsIG5vdGlmeUFsbCBpcyBjYWxsZWQuIg0KDQoJbG9ja3MgaXNFbXB0eSBpZkZh bHNlOiBbIGxvY2tzIGZpcnN0IHdhaXQgXS4hICENCg0KIUdyb3VwV2FpdGluZ0xvY2sgbWV0 aG9kc0ZvcjogJ2luaXRpYWxpemF0aW9uJyENCg0KaW5pdGlhbGl6ZQ0KDQoJbG9ja3MgOj0g T3JkZXJlZENvbGxlY3Rpb24gbmV3Lg0KCWxvY2tJZGVudGl0eVNldCA6PSBJZGVudGl0eVNl dCBuZXcuISAhDQoNCiItLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAiIQ0KDQoNCg0KIUdyb3VwV2FpdGluZ0xvY2sgY2xhc3MgbWV0aG9k c0ZvcjogJ2luc3RhbmNlIGNyZWF0aW9uJyENCg0KbmV3DQoNCglec3VwZXIgbmV3IGluaXRp YWxpemUhICENCgwNCg0KDQpPYmplY3Qgc3ViY2xhc3M6ICNUZXN0QXR0YWNobWVudA0KCWlu c3RhbmNlVmFyaWFibGVOYW1lczogJycNCgljbGFzc1ZhcmlhYmxlTmFtZXM6ICcnDQoJcG9v bERpY3Rpb25hcmllczogJycNCgljYXRlZ29yeTogJ1Rlc3QgLSBBdHRhY2hpbmcgT2JqZWN0 cychDQoNCg0KIVRlc3RBdHRhY2htZW50IG1ldGhvZHNGb3I6ICd0ZXN0JyENCg0KbWVzc2Fn ZQ0KDQoJc2VsZiBiYXNlQ2FsbC4NCglzZWxmIGhhbHQuIQ0KDQptZXNzYWdlOiBhcmcNCg0K CXwgdCB8DQoJdCA6PSBzZWxmIGJhc2VDYWxsLg0KCXNlbGYgaGFsdC4NCgledC4hDQoNCm1l c3NhZ2U6IGFyZzEgd2l0aDogYXJnMg0KDQoJfCB0IHwNCgl0IDo9IHNlbGYgYmFzZUNhbGwu DQoJc2VsZiBoYWx0Lg0KCV50LiEgIQ0KDA0KDQoNCk9iamVjdCBzdWJjbGFzczogI1V0aWxp dGllcw0KCWluc3RhbmNlVmFyaWFibGVOYW1lczogJycNCgljbGFzc1ZhcmlhYmxlTmFtZXM6 ICcnDQoJcG9vbERpY3Rpb25hcmllczogJycNCgljYXRlZ29yeTogJ1N5bmNocm9uaXphdGlv bi1TdXBwb3J0JyENCg0KDQoiLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0gIiENCg0KDQoNCiFVdGlsaXRpZXMgY2xhc3MgbWV0aG9kc0Zv cjogJ3Rlc3RpbmcgY29sbGVjdGlvbnMnIQ0KDQpjaGVja0ZvckR1cGxpY2F0ZXNJbjogYUNv bGxlY3Rpb24NCg0KCXwgc2V0IHwNCglzZXQgOj0gU2V0IG5ldzogYUNvbGxlY3Rpb24gc2l6 ZS4NCglhQ29sbGVjdGlvbiBkbzogWyA6b2JqIHwNCgkJKHNldCBpbmNsdWRlczogb2JqKSBp ZlRydWU6IFsgXnRydWUgXS4NCgkJc2V0IGFkZDogb2JqIF0uDQoJXmZhbHNlISAhDQoMDQoN Cg0KQ29vcmRpbmF0b3Igc3ViY2xhc3M6ICNDb25kaXRpb25Gb3JUd29NZXRob2RzVGVzdENv b3JkaW5hdG9yDQoJaW5zdGFuY2VWYXJpYWJsZU5hbWVzOiAnZW5hYmxlZE1ldGhvZDEgZW5h YmxlZE1ldGhvZDIgY291bnRNZXRob2QyICcNCgljbGFzc1ZhcmlhYmxlTmFtZXM6ICcnDQoJ cG9vbERpY3Rpb25hcmllczogJycNCgljYXRlZ29yeTogJ1Rlc3QgLSBTeW5jaHJvbml6aW5n IFR3byBNZXRob2RzJyENCg0KDQohQ29uZGl0aW9uRm9yVHdvTWV0aG9kc1Rlc3RDb29yZGlu YXRvciBtZXRob2RzRm9yOiAnZGVmaW5pbmcnIQ0KDQpkZWZpbmVDb29yZGluYXRpb24NCg0K CWVuYWJsZWRNZXRob2QxIDo9IHRydWUuDQoJZW5hYmxlZE1ldGhvZDIgOj0gdHJ1ZS4NCglj b3VudE1ldGhvZDIgOj0gMC4NCg0KCXNlbGYNCgkJYWRkUG9ydHM6ICMoIHR3b01ldGhvZHNU ZXN0ICk7DQoNCgkJYXQ6ICd0d29NZXRob2RzVGVzdC5tZXRob2QxJw0KCQlyZXF1aXJlczog WyA6dHdvTWV0aG9kc1Rlc3QgfCBlbmFibGVkTWV0aG9kMSBdDQoJCW9uRW50cnk6IFsgOnR3 b01ldGhvZHNUZXN0IHwNCgkJCWVuYWJsZWRNZXRob2QxIDo9IGZhbHNlLg0KCQkJY291bnRN ZXRob2QyID0gMyBpZlRydWU6IFsNCgkJCQllbmFibGVkTWV0aG9kMiA6PSB0cnVlLg0KCQkJ CWNvdW50TWV0aG9kMiA6PSAwIF0uDQoJCV07DQoNCgkJYXQ6ICd0d29NZXRob2RzVGVzdC5t ZXRob2QyJw0KCQlyZXF1aXJlczogWyA6dHdvTWV0aG9kc1Rlc3QgfCBlbmFibGVkTWV0aG9k MiBdDQoJCW9uRW50cnk6IFsgOnR3b01ldGhvZHNUZXN0IHwNCgkJCQkJY291bnRNZXRob2Qy IDo9IGNvdW50TWV0aG9kMiArIDEuDQoJCQkJCWNvdW50TWV0aG9kMiA9IDMgaWZUcnVlOiBb DQoJCQkJCQllbmFibGVkTWV0aG9kMiA6PSBmYWxzZS4NCgkJCQkJCWVuYWJsZWRNZXRob2Qx IDo9IHRydWUgXQ0KCQldLiEgIQ0KDA0KDQoNCk9iamVjdCBzdWJjbGFzczogI01lc3NhZ2VD b29yZGluYXRvcg0KCWluc3RhbmNlVmFyaWFibGVOYW1lczogJ3dhaXRDb25kaXRpb25CbG9j ayBzZWxmZXhDb25kaXRpb25CbG9jayBtdXRleENvbmRpdGlvbkJsb2NrcyBvbkVudHJ5Qmxv Y2sgb25FeGl0QmxvY2sgZW50cnlSZWNvcmQgJw0KCWNsYXNzVmFyaWFibGVOYW1lczogJycN Cglwb29sRGljdGlvbmFyaWVzOiAnJw0KCWNhdGVnb3J5OiAnU3luY2hyb25pemF0aW9uLVN1 cHBvcnQnIQ0KTWVzc2FnZUNvb3JkaW5hdG9yIGNvbW1lbnQ6DQonTWVzc2FnZUNvb3JkaW5h dG9yIGtlZXBzIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIGZvciBjb29yZGluYXRpbmcg YSBzaW5nbGUgbWVzc2FnZS4NCg0KSW5zdGFuY2UgVmFyaWFibGVzOg0KCXdhaXRDb25kaXRp b25CbG9jawk8QmxvY2tDbG9zdXJlPgl0aGlzIGJsb2NrIHJlcHJlc2VudHMgdGhlIGNvbmRp dGlvbiBzZXQgYnkgdGhlIHJlcXVpcmVzOiBrZXl3b3JkDQoJc2VsZmV4Q29uZGl0aW9uQmxv Y2sJPEJsb2NrQ2xvc3VyZT4JdGhpcyBibG9jayBpbXBsZW1lbnRzIHRoZSB3YWl0aW5nIGNv bmRpdGlvbiBmb3Igc2VsZmV4DQoJbXV0ZXhDb25kaXRpb25CbG9ja3MJPE9yZGVyZWRDb2xs ZWN0aW9uIG9mOiBCbG9ja0Nsb3N1cmU+CXRoaXMgYmxvY2sgaW1wbGVtZW50cyB0aGUgd2Fp dGluZyBjb25kaXRpb24gZm9yIG11dGV4DQoJb25FbnRyeUJsb2NrCTxCbG9ja0Nsb3N1cmU+ CW9uIGVudHJ5IGJsb2NrDQoJb25FeGl0QmxvY2sJPEJsb2NrQ2xvc3VyZT4Jb24gZXhpdCBi bG9jaw0KCWVudHJ5UmVjb3JkCTxFbnRyeVJlY29yZD4Ja2VlcHMgdHJhY2sgb2YgcHJvY2Vz c2VzIGN1cnJlbnRseSBpbiBhIG1ldGhvZC4gVGhlcmUgaXMgb25seSBvbmUgRW50cnlSZWNv cmQgcGVyIGNvb3JkaW5hdGVkDQoJCQkJCQkJCW1ldGhvZC4gVGhlcmVmb3JlIHRoZSBvcmln aW5hbCBFbnRyeVJlY29yZCBpcyBrZXB0IGluIHRoZSBTeW5jaHJvbml6YXRpb25MaXN0ZW5l ci4nIQ0KDQoNCiFNZXNzYWdlQ29vcmRpbmF0b3IgbWV0aG9kc0ZvcjogJ2FjY2Vzc2luZych DQoNCmVudHJ5UmVjb3JkDQoNCgleZW50cnlSZWNvcmQhDQoNCmVudHJ5UmVjb3JkOiBhbkVu dHJ5UmVjb3JkDQoNCgllbnRyeVJlY29yZCA6PSBhbkVudHJ5UmVjb3JkLiENCg0Kb25FbnRy eTogYUJsb2NrQ2xvc3VyZQ0KDQoJb25FbnRyeUJsb2NrIDo9ICBhQmxvY2tDbG9zdXJlLiEN Cg0Kb25FeGl0OiBhQmxvY2tDbG9zdXJlDQoNCglvbkV4aXRCbG9jayA6PSBhQmxvY2tDbG9z dXJlLiENCg0Kd2FpdGluZ0NvbmRpdGlvbjogYUJsb2NrQ2xvc3VyZQ0KDQoJd2FpdENvbmRp dGlvbkJsb2NrIDo9IGFCbG9ja0Nsb3N1cmUuISAhDQoNCiFNZXNzYWdlQ29vcmRpbmF0b3Ig bWV0aG9kc0ZvcjogJ2dlbmVyYXRlIGNvbmRpdGlvbnMnIQ0KDQptYWtlTXV0ZXhXaXRoOiBt ZXNzYWdlQ29vcmRpbmF0b3JDb2xsZWN0aW9uDQoJIk1ha2UgbWUgbXV0ZXggd2l0aCBtZXRo b2RzIGFzc29jaWF0ZWQgd2l0aCBNZXNzYWdlQ29vcmRpbmF0b3JzIGluIG1lc3NhZ2VDb29y ZGluYXRvckNvbGxlY3Rpb24uIg0KDQoJbXV0ZXhDb25kaXRpb25CbG9ja3MgOj0gT3JkZXJl ZENvbGxlY3Rpb24gbmV3OiBtZXNzYWdlQ29vcmRpbmF0b3JDb2xsZWN0aW9uIHNpemUuDQoJ bWVzc2FnZUNvb3JkaW5hdG9yQ29sbGVjdGlvbiBkbzogWyA6bWVzc2FnZUNvb3JkaW5hdG9y IHwNCgkJCW11dGV4Q29uZGl0aW9uQmxvY2tzIGFkZDogWyBtZXNzYWdlQ29vcmRpbmF0b3Ig ZW50cnlSZWNvcmQgaXNPY2N1cGllZEJ5T3RoZXJQcm9jZXNzZXNPbmx5IF1dLiENCg0KbWFr ZVNlbGZleA0KCSJNYWtlIG1lIHNlbGZleC4iDQoNCglzZWxmZXhDb25kaXRpb25CbG9jayA6 PSBbIHNlbGYgZW50cnlSZWNvcmQgaXNPY2N1cGllZEJ5T3RoZXJQcm9jZXNzZXNPbmx5IF0u ISAhDQoNCiFNZXNzYWdlQ29vcmRpbmF0b3IgbWV0aG9kc0ZvcjogJ2Nvb3JkaW5hdGlvbich DQoNCmNoZWNrRW50cnlXYWl0Q29uZGl0aW9uczogY29vcmRpbmF0ZWRPYmplY3QNCg0KCXdh aXRDb25kaXRpb25CbG9jayA9PSBuaWwgaWZGYWxzZTogWyAod2FpdENvbmRpdGlvbkJsb2Nr IHZhbHVlOiBjb29yZGluYXRlZE9iamVjdCkgbm90IGlmVHJ1ZTogWyBedHJ1ZSBdXS4NCglz ZWxmZXhDb25kaXRpb25CbG9jayA9PSBuaWwgaWZGYWxzZTogWyBzZWxmZXhDb25kaXRpb25C bG9jayB2YWx1ZSBpZlRydWU6IFsgXnRydWUgXV0uDQoJbXV0ZXhDb25kaXRpb25CbG9ja3Mg PT0gbmlsIGlmRmFsc2U6IFsNCgkJbXV0ZXhDb25kaXRpb25CbG9ja3MgZG86IFsgOmNvbmQg fA0KCQkJY29uZCB2YWx1ZSBpZlRydWU6IFsgXnRydWUgXV1dLg0KCV5mYWxzZSENCg0KZXhl Y3V0ZU9uRW50cnlCbG9jazogY29vcmRpbmF0ZWRPYmplY3QNCg0KCW9uRW50cnlCbG9jayA9 PSBuaWwgaWZGYWxzZTogWyBvbkVudHJ5QmxvY2sgdmFsdWU6IGNvb3JkaW5hdGVkT2JqZWN0 IF0uIQ0KDQpleGVjdXRlT25FeGl0QmxvY2s6IGNvb3JkaW5hdGVkT2JqZWN0DQoNCglvbkV4 aXRCbG9jayA9PSBuaWwgaWZGYWxzZTogWyBvbkV4aXRCbG9jayB2YWx1ZTogY29vcmRpbmF0 ZWRPYmplY3QgXS4hICENCgwNCg0KDQpPYmplY3Qgc3ViY2xhc3M6ICNFbnRyeVJlY29yZA0K CWluc3RhbmNlVmFyaWFibGVOYW1lczogJ3Byb2Nlc3NlcyBjb3VudCAnDQoJY2xhc3NWYXJp YWJsZU5hbWVzOiAnJw0KCXBvb2xEaWN0aW9uYXJpZXM6ICcnDQoJY2F0ZWdvcnk6ICdTeW5j aHJvbml6YXRpb24tU3VwcG9ydCchDQpFbnRyeVJlY29yZCBjb21tZW50Og0KJ0VudHJ5UmVj b3JkIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBwcm9jZXNzZXMgZXhlY3V0aW5nIGEgbWV0 aG9kLg0KDQpJbnN0YW5jZSBWYXJpYWJsZXM6DQoJcHJvY2Vzc2VzCTxPcmRlcmVkQ29sbGVj dGlvbiBvZjogUHJvY2Vzcz4JYSBjb2xsZWN0aW9uIG9mIHByb2Nlc3NlcyB0aGF0IGFyZSBj dXJyZW50bHkgaW4NCgljb3VudAk8SW50ZWdlcj4Ja2VlcHMgdHJhY2sgb2YgaW5zJyENCg0K DQohRW50cnlSZWNvcmQgbWV0aG9kc0ZvcjogJ2luaXRpYWxpemF0aW9uJyENCg0KaW5pdGlh bGl6ZQ0KDQoJcHJvY2Vzc2VzIDo9IE9yZGVyZWRDb2xsZWN0aW9uIG5ldy4NCgljb3VudCA6 PSAwLiEgIQ0KDQohRW50cnlSZWNvcmQgbWV0aG9kc0ZvcjogJ3Rlc3RpbmcnIQ0KDQppc09j Y3VwaWVkQnlPdGhlclByb2Nlc3Nlc09ubHkNCg0KCV5jb3VudCA+IDAgYW5kOiBbIChwcm9j ZXNzZXMgaW5jbHVkZXM6IFByb2Nlc3NvciBhY3RpdmVQcm9jZXNzKSBub3QgXSEgIQ0KDQoh RW50cnlSZWNvcmQgbWV0aG9kc0ZvcjogJ3JlY29yZGluZychDQoNCmluDQoJIkNhbGxlZCB3 aGVuIGEgcHJvY2VzcyBlbnRlcnMgYSBtZXRob2QuIg0KDQoJY291bnQgOj0gY291bnQgKyAx Lg0KCXByb2Nlc3NlcyBhZGQ6IFByb2Nlc3NvciBhY3RpdmVQcm9jZXNzLiENCg0Kb3V0DQoJ IkNhbGxlZCB3aGVuIGEgcHJvY2VzcyBsZWF2ZXMgYSBtZXRob2QuIg0KDQoJY291bnQgOj0g Y291bnQgLSAxLg0KCXByb2Nlc3NlcyByZW1vdmU6IFByb2Nlc3NvciBhY3RpdmVQcm9jZXNz LiEgIQ0KDQoiLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gIiENCg0KDQoNCiFFbnRyeVJlY29yZCBjbGFzcyBtZXRob2RzRm9yOiAnaW5z dGFuY2UgY3JlYXRpb24nIQ0KDQpuZXcNCg0KCV5zdXBlciBuZXcgaW5pdGlhbGl6ZSEgIQ0K DA0KDQoNCk9iamVjdCBzdWJjbGFzczogI0dyb3VwTXV0ZXgNCglpbnN0YW5jZVZhcmlhYmxl TmFtZXM6ICdsb2NrcyBsb2NrSWRlbnRpdHlTZXQgJw0KCWNsYXNzVmFyaWFibGVOYW1lczog JycNCglwb29sRGljdGlvbmFyaWVzOiAnJw0KCWNhdGVnb3J5OiAnU3luY2hyb25pemF0aW9u LVN1cHBvcnQnIQ0KR3JvdXBNdXRleCBjb21tZW50Og0KJ0dyb3VwTXV0ZXggYWxsb3dzIHVz IHRvIGxvY2sgYSBncm91cCBvZiBvYmplY3RzLCBlYWNoIG93bmluZyBhIG11dGV4IGxvY2su IEhvd2V2ZXIsIHNvbWUgbG9ja3MgY2FuIGJlIHNoYXJlZCBhbW9uZyBvYmplY3RzIGFuZCB0 aHJlcmVmb3JlIEdyb3VwTXV0ZXggYXZvaWRzIGxvY2tpbmcgdGhlIHNhbWUgb2JqZWN0IHR3 aWNlIGJ5IGtlZXBpbmcgdGhlIGxvY2tzIGluIGFuIGlkZW50aXR5IHNldC4gRWFjaCBvYmpl Y3QgbWF5IGxlYXZlIHRoZSBncm91cCBieSByZW1vdmluZyBpdHMgbG9jay4NCg0KSW5zdGFu Y2UgVmFyaWFibGVzOg0KCWxvY2tzCTxPcmRlcmVkQ29sbGVjdGlvbiBvZjogTXV0ZXg+CWFs bG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGFkZGVkIGxvY2tzDQoJbG9ja0lkZW50aXR5U2V0 CTxJZGVudGl0eVNldCBvZjogTXV0ZXg+CWtlZXBzIHRoZSBsb2NrcyB3aXRob3V0IGR1cGxp Y2F0ZXMnIQ0KDQoNCiFHcm91cE11dGV4IG1ldGhvZHNGb3I6ICdpbml0aWFsaXphdGlvbich DQoNCmluaXRpYWxpemUNCg0KCWxvY2tzIDo9IE9yZGVyZWRDb2xsZWN0aW9uIG5ldy4NCgls b2NrSWRlbnRpdHlTZXQgOj0gSWRlbnRpdHlTZXQgbmV3LiEgIQ0KDQohR3JvdXBNdXRleCBt ZXRob2RzRm9yOiAnYWNjZXNzaW5nJyENCg0KYWRkOiBhTXV0ZXgNCg0KCWxvY2tzIGFkZDog YU11dGV4Lg0KCWxvY2tJZGVudGl0eVNldCBhZGQ6IGFNdXRleC4hDQoNCnJlbW92ZTogYU11 dGV4DQoNCglsb2NrcyByZW1vdmU6IGFNdXRleC4NCgkobG9ja3MgaW5jbHVkZXM6IGFNdXRl eCkgaWZGYWxzZTogWyBsb2NrSWRlbnRpdHlTZXQgcmVtb3ZlOiBhTXV0ZXggXS4hICENCg0K IUdyb3VwTXV0ZXggbWV0aG9kc0ZvcjogJ3ByaXZhdGUgLSBsb2NraW5nJyENCg0KZ3JhYkFs bExvY2tzT3JSZXR1cm5GaXJzdEJ1c3lMb2NrDQoNCglsb2NrSWRlbnRpdHlTZXQgZG86IFsg OmxvY2sgfCBsb2NrIGV4Y2Vzc1NpZ25hbHMgPT0gMCBpZlRydWU6IFsgXmxvY2sgXV0uDQoJ bG9ja0lkZW50aXR5U2V0IGRvOiBbIDpsb2NrIHwgbG9jayB3YWl0IF0uDQoJXm5pbCEgIQ0K DQohR3JvdXBNdXRleCBtZXRob2RzRm9yOiAnbG9ja2luZychDQoNCmxvY2sNCg0KCXwgbG9j ayB8DQoJWyBuaWwgPT0gKGxvY2sgOj0gWyBzZWxmIGdyYWJBbGxMb2Nrc09yUmV0dXJuRmly c3RCdXN5TG9jayBdIHZhbHVlVW5wcmVlbXB0aXZlbHkpIF0gd2hpbGVGYWxzZTogWyBsb2Nr IHdhaXQ7IHNpZ25hbCBdLiENCg0KcmVsZWFzZQ0KDQoJbG9ja0lkZW50aXR5U2V0IGRvOiBb IDpsb2NrIHwgbG9jayBzaWduYWwgXS4hICENCg0KIi0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tICIhDQoNCg0KDQohR3JvdXBNdXRleCBj bGFzcyBtZXRob2RzRm9yOiAnaW5zdGFuY2UgY3JlYXRpb24nIQ0KDQpuZXcNCg0KCV5zdXBl ciBuZXcgaW5pdGlhbGl6ZSEgIQ0KDA0KDQoNCk9iamVjdCBzdWJjbGFzczogI0Nvb3JkaW5h dG9yUG9ydA0KCWluc3RhbmNlVmFyaWFibGVOYW1lczogJ21lc3NhZ2VDb29yZGluYXRvckRp Y3Rpb25hcnkgY29vcmRpbmF0ZWRPYmplY3QgJw0KCWNsYXNzVmFyaWFibGVOYW1lczogJycN Cglwb29sRGljdGlvbmFyaWVzOiAnJw0KCWNhdGVnb3J5OiAnU3luY2hyb25pemF0aW9uLVN1 cHBvcnQnIQ0KQ29vcmRpbmF0b3JQb3J0IGNvbW1lbnQ6DQonQ29vcmRpbmF0aW9uUG9ydCBy ZXByZXNlbnRzIGEgcG9ydCBvZiBhIENvb3JkaW5hdG9yLiBBbiBvYmplY3QgY2FuIGJlIHJl Z2lzdGVyZWQgd2l0aCBhIENvb3JkaW5hdG9yUG9ydA0KdG8gYmUgc3luY2hyb25pemVkIGJ5 IHRoZSBDb29yZGluYXRvciBvZiB0aGlzIHBvcnQuIEEgQ29vcmRpbmF0b3JQb3J0IG1haW50 YWlucyBhIGRpY3Rpb25hcnkgb2YgTWVzc2FnZUNvb3JkaW5hdG9ycw0KZm9yIGFsbCBtZXNz YWdlcyBpdCBjb29yZGluYXRlcy4NCg0KSW5zdGFuY2UgVmFyaWFibGVzOg0KCW1lc3NhZ2VD b29yZGluYXRvckRpY3Rpb25hcnkJPElkZW50aXR5RGljdGlvbmFyeSB3aXRoIGtleXM6IFN5 bWJvbCB2YWx1ZXM6IE1lc3NhZ2VDb29yZGluYXRvcj4Jc3RvcmVzIE1lc3NhZ2VDb29yZGlu YXRvcnMgYXQgdGhlaXIgcmVzcGVjdGl2ZSBzZWxlY3RvcnMNCgljb29yZGluYXRlZE9iamVj dAk8T2JqZWN0Pgl0aGUgY29vcmRpbmF0ZWQgb2JqZWN0JyENCg0KDQohQ29vcmRpbmF0b3JQ b3J0IG1ldGhvZHNGb3I6ICdyZWdpc3RlciBvYmplY3QnIQ0KDQpjbGVhckluY2x1ZGluZ0Nv b3JkaW5hdGlvblN0YXRlTG9jazogYU11dGV4IHdhaXRpbmdMb2NrOiBhU2VtYXBob3JlDQoJ IkRpc2Nvbm5lY3QgbWUgZnJvbSBteSBjb29yZGluYXRlZE9iamVjdC4iDQoNCglzZWxmIGRp c2Nvbm5lY3RNeU1lc3NhZ2VDb29yZGluYXRvcnNBbmRDb29yZGluYXRpb25TdGF0ZUxvY2s6 IGFNdXRleCB3YWl0aW5nTG9jazogYVNlbWFwaG9yZS4NCgljb29yZGluYXRlZE9iamVjdCA6 PSBuaWwuIQ0KDQpyZWdpc3RlcjogYW5PYmplY3QgY29vcmRpbmF0aW9uU3RhdGVMb2NrOiBh TXV0ZXggd2FpdGluZ0xvY2s6IGFTZW1hcGhvcmUNCgkiQ29ubmVjdCBtZSB0byBhbk9iamVj dC4iDQoNCgljb29yZGluYXRlZE9iamVjdCA6PSBhbk9iamVjdC4NCglzZWxmIGNvbm5lY3RN eU1lc3NhZ2VDb29yZGluYXRvcnNXaXRoU3luY2hyb25pemF0aW9uTGlzdGVuZXJzU2V0dGlu Z0Nvb3JkaW5hdGlvblN0YXRlTG9jazogYU11dGV4ICB3YWl0aW5nTG9jazogYVNlbWFwaG9y ZS4hICENCg0KIUNvb3JkaW5hdG9yUG9ydCBtZXRob2RzRm9yOiAnYWNjZXNzaW5nJyENCg0K Y29vcmRpbmF0ZWRPYmplY3QNCg0KCV5jb29yZGluYXRlZE9iamVjdCENCg0KbWVzc2FnZUNv b3JkaW5hdG9yRGljdGlvbmFyeQ0KDQoJXm1lc3NhZ2VDb29yZGluYXRvckRpY3Rpb25hcnkh ICENCg0KIUNvb3JkaW5hdG9yUG9ydCBtZXRob2RzRm9yOiAnaW5pdGlhbGl6YXRpb24nIQ0K DQppbml0aWFsaXplDQoNCgltZXNzYWdlQ29vcmRpbmF0b3JEaWN0aW9uYXJ5IDo9IElkZW50 aXR5RGljdGlvbmFyeSBuZXcuISAhDQoNCiFDb29yZGluYXRvclBvcnQgbWV0aG9kc0Zvcjog J3JlZ2lzdGVyIG5ldyBzZWxlY3RvcichDQoNCnJlZ2lzdGVyU2VsZWN0b3JJZk5lY2Vzc2Fy eTogYVN5bWJvbA0KDQoJKG1lc3NhZ2VDb29yZGluYXRvckRpY3Rpb25hcnkgaW5jbHVkZXNL ZXk6IGFTeW1ib2wpIGlmRmFsc2U6IFsNCgkJbWVzc2FnZUNvb3JkaW5hdG9yRGljdGlvbmFy eSBhdDogYVN5bWJvbCBwdXQ6IE1lc3NhZ2VDb29yZGluYXRvciBuZXcgXS4hICENCg0KIUNv b3JkaW5hdG9yUG9ydCBtZXRob2RzRm9yOiAncHJpdmF0ZSAtIHJlZ2lzdGVyIG9iamVjdCch DQoNCmNvbm5lY3RNeU1lc3NhZ2VDb29yZGluYXRvcnNXaXRoU3luY2hyb25pemF0aW9uTGlz dGVuZXJzU2V0dGluZ0Nvb3JkaW5hdGlvblN0YXRlTG9jazogYU11dGV4IHdhaXRpbmdMb2Nr OiBhU2VtYXBob3JlDQoNCgl8IGxpc3RlbmVyc0RpY3Rpb25hcnkgfA0KDQoJIm1ha2Ugc3Vy ZSB0aGF0IGFuT2JqZWN0IHVuZGVyc3RhbmRzIGxpc3RlbmVyc0RpY3Rpb25hcnkiDQoJY29v cmRpbmF0ZWRPYmplY3QgbWFrZU9iamVjdEF0dGFjaGFibGUuDQoJbGlzdGVuZXJzRGljdGlv bmFyeSA6PSAgY29vcmRpbmF0ZWRPYmplY3QgbGlzdGVuZXJzRGljdGlvbmFyeS4NCg0KCW1l c3NhZ2VDb29yZGluYXRvckRpY3Rpb25hcnkga2V5c0FuZFZhbHVlc0RvOiBbIDpzZWxlY3Rv ciA6bWVzc2FnZUNvb3JkaW5hdG9yIHwNCgkJfCBzeW5jaHJvbml6YXRpb25MaXN0ZW5lciB8 DQoJCShsaXN0ZW5lcnNEaWN0aW9uYXJ5IGluY2x1ZGVzS2V5OiBzZWxlY3RvcikgaWZGYWxz ZTogWw0KCQkJU3luY2hyb25pemF0aW9uTGlzdGVuZXIgbmV3IGF0dGFjaFRvOiBjb29yZGlu YXRlZE9iamVjdCBhdDogc2VsZWN0b3IgXS4NCgkJc3luY2hyb25pemF0aW9uTGlzdGVuZXIg Oj0gbGlzdGVuZXJzRGljdGlvbmFyeSBhdDogc2VsZWN0b3IuDQoJCXN5bmNocm9uaXphdGlv bkxpc3RlbmVyDQoJCQlhZGRNZXNzYWdlQ29vcmRpYW50b3I6IG1lc3NhZ2VDb29yZGluYXRv cg0KCQkJY29vcmRpbmF0aW9uU3RhdGVMb2NrOiBhTXV0ZXgNCgkJCXdhaXRpbmdMb2NrOiBh U2VtYXBob3JlIF0uIQ0KDQpkaXNjb25uZWN0TXlNZXNzYWdlQ29vcmRpbmF0b3JzQW5kQ29v cmRpbmF0aW9uU3RhdGVMb2NrOiBhTXV0ZXggd2FpdGluZ0xvY2s6IGFTZW1hcGhvcmUNCg0K CXwgbGlzdGVuZXJzRGljdGlvbmFyeSB8DQoNCglsaXN0ZW5lcnNEaWN0aW9uYXJ5IDo9ICBj b29yZGluYXRlZE9iamVjdCBsaXN0ZW5lcnNEaWN0aW9uYXJ5Lg0KDQoJbWVzc2FnZUNvb3Jk aW5hdG9yRGljdGlvbmFyeSBrZXlzQW5kVmFsdWVzRG86IFsgOnNlbGVjdG9yIDptZXNzYWdl Q29vcmRpbmF0b3IgfA0KCQl8IHN5bmNocm9uaXphdGlvbkxpc3RlbmVyIHwNCgkJc3luY2hy b25pemF0aW9uTGlzdGVuZXIgOj0gbGlzdGVuZXJzRGljdGlvbmFyeSBhdDogc2VsZWN0b3Iu DQoJCXN5bmNocm9uaXphdGlvbkxpc3RlbmVyDQoJCQlyZW1vdmVNZXNzYWdlQ29vcmRpYW50 b3I6IG1lc3NhZ2VDb29yZGluYXRvcg0KCQkJY29vcmRpbmF0aW9uU3RhdGVMb2NrOiBhTXV0 ZXgNCgkJCXdhaXRpbmdMb2NrOiBhU2VtYXBob3JlLg0KCQkiSWYgeW91IHdhbnQgdG8gYmUg YWJsZSB0byBkaXNjb25uZWN0IG9iamVjdCB3aGlsZSBwcm9jZXNzZXMgYXJlIGluIHRoZSBt aWRkbGUgb2YgY2FsbGluZyBzZWxlY3RvciwNCgkJeW91IHNob3VsZCBsZWF2ZSB0aGlzIGxp bmUgY29tbWVudGVkIG91dC4iDQoJCSJzeW5jaHJvbml6YXRpb25MaXN0ZW5lciBpc0VtcHR5 IGlmVHJ1ZTogWyBjb29yZGluYXRlZE9iamVjdCBkZXRhY2hBdDogc2VsZWN0b3IgXSJdLiEg IQ0KDQoiLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gIiENCg0KDQoNCiFDb29yZGluYXRvclBvcnQgY2xhc3MgbWV0aG9kc0ZvcjogJ2lu c3RhbmNlIGNyZWF0aW9uJyENCg0KbmV3DQoJXnN1cGVyIG5ldyBpbml0aWFsaXplISAhDQoM DQoNCg0KQ29vcmRpbmF0b3Igc3ViY2xhc3M6ICNBbGxGb3JUd29NZXRob2RzVGVzdENvb3Jk aW5hdG9yDQoJaW5zdGFuY2VWYXJpYWJsZU5hbWVzOiAnZW5hYmxlZE1ldGhvZDEgZW5hYmxl ZE1ldGhvZDIgY291bnRNZXRob2QyICcNCgljbGFzc1ZhcmlhYmxlTmFtZXM6ICcnDQoJcG9v bERpY3Rpb25hcmllczogJycNCgljYXRlZ29yeTogJ1Rlc3QgLSBTeW5jaHJvbml6aW5nIFR3 byBNZXRob2RzJyENCg0KDQohQWxsRm9yVHdvTWV0aG9kc1Rlc3RDb29yZGluYXRvciBtZXRo b2RzRm9yOiAnZGVmaW5pbmcnIQ0KDQpkZWZpbmVDb29yZGluYXRpb24NCg0KCWVuYWJsZWRN ZXRob2QxIDo9IHRydWUuDQoJZW5hYmxlZE1ldGhvZDIgOj0gdHJ1ZS4NCgljb3VudE1ldGhv ZDIgOj0gMC4NCg0KCXNlbGYNCgkJYWRkUG9ydHM6ICMoIHR3b01ldGhvZHNUZXN0ICk7DQoN CgkJc2VsZmV4OiAjKCAndHdvTWV0aG9kc1Rlc3QubWV0aG9kMScgJ3R3b01ldGhvZHNUZXN0 Lm1ldGhvZDInICk7DQoNCgkJbXV0ZXg6ICMoDQoJCQkjKCAndHdvTWV0aG9kc1Rlc3QubWV0 aG9kMScgJ3R3b01ldGhvZHNUZXN0Lm1ldGhvZDInICkNCgkJKTsNCg0KCQlhdDogJ3R3b01l dGhvZHNUZXN0Lm1ldGhvZDEnDQoJCXJlcXVpcmVzOiBbIDp0d29NZXRob2RzVGVzdCB8IGVu YWJsZWRNZXRob2QxIF0NCgkJb25FbnRyeTogWyA6dHdvTWV0aG9kc1Rlc3QgfA0KCQkJZW5h YmxlZE1ldGhvZDEgOj0gZmFsc2UuDQoJCQljb3VudE1ldGhvZDIgPSAzIGlmVHJ1ZTogWw0K CQkJCWVuYWJsZWRNZXRob2QyIDo9IHRydWUuDQoJCQkJY291bnRNZXRob2QyIDo9IDAgXS4N CgkJXTsNCg0KCQlhdDogJ3R3b01ldGhvZHNUZXN0Lm1ldGhvZDInDQoJCXJlcXVpcmVzOiBb IDp0d29NZXRob2RzVGVzdCB8IGVuYWJsZWRNZXRob2QyIF0NCgkJb25FbnRyeTogWyA6dHdv TWV0aG9kc1Rlc3QgfA0KCQkJCQljb3VudE1ldGhvZDIgOj0gY291bnRNZXRob2QyICsgMS4N CgkJCQkJY291bnRNZXRob2QyID0gMyBpZlRydWU6IFsNCgkJCQkJCWVuYWJsZWRNZXRob2Qy IDo9IGZhbHNlLg0KCQkJCQkJZW5hYmxlZE1ldGhvZDEgOj0gdHJ1ZSBdDQoJCV0uISAhDQoM DQoNCg0KT2JqZWN0IHN1YmNsYXNzOiAjVGVzdE9iamVjdA0KCWluc3RhbmNlVmFyaWFibGVO YW1lczogJycNCgljbGFzc1ZhcmlhYmxlTmFtZXM6ICdTYW1wbGVUZXN0QXR0YWNobWVudCBT YW1wbGVUZXN0T2JqZWN0ICcNCglwb29sRGljdGlvbmFyaWVzOiAnJw0KCWNhdGVnb3J5OiAn VGVzdCAtIEF0dGFjaGluZyBPYmplY3RzJyENCg0KDQohVGVzdE9iamVjdCBtZXRob2RzRm9y OiAndGVzdCchDQoNCm1lc3NhZ2UNCg0KCXNlbGYgaGFsdC4hDQoNCm1lc3NhZ2U6IGFyZw0K DQoJc2VsZiBoYWx0Lg0KCV5hcmchDQoNCm1lc3NhZ2U6IGFyZzEgd2l0aDogYXJnMg0KDQoJ c2VsZiBoYWx0Lg0KCV5BcnJheSB3aXRoOiBhcmcxIHdpdGg6IGFyZzIhICENCg0KIi0tIC0t IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tICIhDQoN Cg0KDQohVGVzdE9iamVjdCBjbGFzcyBtZXRob2RzRm9yOiAnZXhwZXJpbWVudHMnIQ0KDQpl eGFtcGxlcw0KCSJFdmFsdWF0ZSB0aGUgZm9sbG93aW5nIHNlY3Rpb25zIG9uZSBhdCBhIHRp bWUuIg0KDQoJU2FtcGxlVGVzdE9iamVjdCA6PSBUZXN0T2JqZWN0IG5ldy4NCglTYW1wbGVU ZXN0QXR0YWNobWVudCA6PSBUZXN0QXR0YWNobWVudCBuZXcuDQoNCglTYW1wbGVUZXN0T2Jq ZWN0IGF0dGFjaDogU2FtcGxlVGVzdEF0dGFjaG1lbnQgYXQ6ICNtZXNzYWdlLg0KDQoJU2Ft cGxlVGVzdE9iamVjdCBtZXNzYWdlLg0KDQoJU2FtcGxlVGVzdE9iamVjdCBkZXRhY2hBdDog I21lc3NhZ2UuDQoNCglTYW1wbGVUZXN0T2JqZWN0IG1lc3NhZ2UuDQoNCglTYW1wbGVUZXN0 T2JqZWN0IGF0dGFjaDogU2FtcGxlVGVzdEF0dGFjaG1lbnQgYXQ6ICNtZXNzYWdlOi4NCg0K CVNhbXBsZVRlc3RPYmplY3QgbWVzc2FnZTogMS4NCg0KCVNhbXBsZVRlc3RPYmplY3QgZGV0 YWNoQXQ6ICNtZXNzYWdlOi4NCg0KCVNhbXBsZVRlc3RPYmplY3QgYXR0YWNoOiBTYW1wbGVU ZXN0QXR0YWNobWVudCBhdFNlbGVjdG9yczogIygjbWVzc2FnZTp3aXRoOiAjbWVzc2FnZSku DQoNCglTYW1wbGVUZXN0T2JqZWN0IG1lc3NhZ2U7IG1lc3NhZ2U6IDEgd2l0aDogMi4hICEN CgwNCg0KDQpDb29yZGluYXRvciBzdWJjbGFzczogI011dGV4Rm9yVHdvTWV0aG9kc1Rlc3RD b29yZGluYXRvcg0KCWluc3RhbmNlVmFyaWFibGVOYW1lczogJycNCgljbGFzc1ZhcmlhYmxl TmFtZXM6ICcnDQoJcG9vbERpY3Rpb25hcmllczogJycNCgljYXRlZ29yeTogJ1Rlc3QgLSBT eW5jaHJvbml6aW5nIFR3byBNZXRob2RzJyENCg0KDQohTXV0ZXhGb3JUd29NZXRob2RzVGVz dENvb3JkaW5hdG9yIG1ldGhvZHNGb3I6ICdkZWZpbmluZychDQoNCmRlZmluZUNvb3JkaW5h dGlvbg0KDQoJc2VsZiBhZGRQb3J0czogIyggdHdvTWV0aG9kc1Rlc3QgKS4NCg0KCXNlbGYg bXV0ZXg6ICMoDQoJCSMoICd0d29NZXRob2RzVGVzdC5tZXRob2QxJyAndHdvTWV0aG9kc1Rl c3QubWV0aG9kMicgKQ0KCSkuISAhDQoNClJhbmRvbURlbGF5IGluaXRpYWxpemUhDQoNCg0K --------------11B1B64A1E66500850CEBED3 Content-Type: application/x-unknown-content-type-ST_auto_file; name="candy.st" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="candy.st" DQonIC5BcHBsaWNhdGlvblNvdXJjZSBDYW5keSgwLjBtKSchDQonRnJvbSBWaXN1YWxXb3Jr cyhSKSBSZWxlYXNlIDIuMCBvZiA0IEF1Z3VzdCAxOTk0IG9uIDMgTm92ZW1iZXIgMTk5NyBh dCA5OjU0OjE5IHBtJyENCg0KDQoNCictIHNvdXJjZXMgb2YgQ2FuZHkoMC4wbSkgLSchDQoN Ck9iamVjdCBzdWJjbGFzczogI0Fzc2VtYmx5TGluZQ0KCWluc3RhbmNlVmFyaWFibGVOYW1l czogJ2NhbmR5TWFrZXIgcGFja2VyIGZpbmFsaXplciBsYWJlbE1ha2VyIGNvb3JkaW5hdG9y ICcNCgljbGFzc1ZhcmlhYmxlTmFtZXM6ICdTYW1wbGVBc3NlbWJseUxpbmUgJw0KCXBvb2xE aWN0aW9uYXJpZXM6ICcnDQoJY2F0ZWdvcnk6ICdDYW5keSchDQoNCg0KIUFzc2VtYmx5TGlu ZSBtZXRob2RzRm9yOiAncnVubmluZychDQoNCnN0YXJ0DQoNCgljYW5keU1ha2VyIHN0YXJ0 Lg0KCXBhY2tlciBzdGFydC4NCglmaW5hbGl6ZXIgc3RhcnQuDQoJbGFiZWxNYWtlciBzdGFy dC4hDQoNCnN0b3ANCg0KCWNhbmR5TWFrZXIgc3RvcC4NCglwYWNrZXIgc3RvcC4NCglmaW5h bGl6ZXIgc3RvcC4NCglsYWJlbE1ha2VyIHN0b3AuISAhDQoNCiFBc3NlbWJseUxpbmUgbWV0 aG9kc0ZvcjogJ2Nvb3JkaW5hdGlvbichDQoNCmF0dGFjaENvb3JkaW5hdG9yDQoNCgljb29y ZGluYXRvcg0KCQlyZWdpc3RlcjogcGFja2VyIGF0OiAjcGFja2VyOw0KCQlyZWdpc3Rlcjog ZmluYWxpemVyIGF0OiAjZmluYWxpemVyLiEgIQ0KDQohQXNzZW1ibHlMaW5lIG1ldGhvZHNG b3I6ICdpbml0aWFsaXplLXJlbGVhc2UnIQ0KDQppbml0aWFsaXplDQoNCglDYW5keSBpbml0 aWFsaXplLg0KCUNhbmR5TGFiZWwgaW5pdGlhbGl6ZS4NCglQYWNrIGluaXRpYWxpemUuDQoN CglmaW5hbGl6ZXIgIDo9IEZpbmFsaXplciBuZXcuDQoJbGFiZWxNYWtlciA6PSBMYWJlbE1h a2VyIG5ld1dpdGg6IGZpbmFsaXplci4NCglwYWNrZXIgOj0gUGFja2VyIG5ld1dpdGg6IGZp bmFsaXplci4NCgljYW5keU1ha2VyIDo9IENhbmR5TWFrZXIgbmV3V2l0aDogcGFja2VyLg0K DQoJY29vcmRpbmF0b3IgOj0gQ2FuZHlBc3NlbWJseUxpbmVDb29yZGluYXRvciBuZXcuISAh DQoNCiItLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAiIQ0KDQoNCg0KIUFzc2VtYmx5TGluZSBjbGFzcyBtZXRob2RzRm9yOiAnaW5zdGFu Y2UgY3JlYXRpb24nIQ0KDQpuZXcNCg0KCV5zdXBlciBuZXcgaW5pdGlhbGl6ZSEgIQ0KDQoh QXNzZW1ibHlMaW5lIGNsYXNzIG1ldGhvZHNGb3I6ICdleHBlcmltZW50cychDQoNCmV4YW1w bGUNCgkiZXhlY3V0ZSBlYWNoIGxpbmUgb25lIGF0IGEgdGltZSINCgkNCglTYW1wbGVBc3Nl bWJseUxpbmUgIDo9IEFzc2VtYmx5TGluZSBuZXcuDQoNCglTYW1wbGVBc3NlbWJseUxpbmUg YXR0YWNoQ29vcmRpbmF0b3IuDQoNCglTYW1wbGVBc3NlbWJseUxpbmUgc3RhcnQuDQoNCglT YW1wbGVBc3NlbWJseUxpbmUgc3RvcC4hICENCgwNCg0KDQpDb29yZGluYXRvciBzdWJjbGFz czogI0NhbmR5QXNzZW1ibHlMaW5lQ29vcmRpbmF0b3INCglpbnN0YW5jZVZhcmlhYmxlTmFt ZXM6ICdwYWNrRnVsbCBnb3RQYWNrIGdvdExhYmVsICcNCgljbGFzc1ZhcmlhYmxlTmFtZXM6 ICcnDQoJcG9vbERpY3Rpb25hcmllczogJycNCgljYXRlZ29yeTogJ0NhbmR5IENvb3JkaW5h dGlvbichDQoNCg0KIUNhbmR5QXNzZW1ibHlMaW5lQ29vcmRpbmF0b3IgbWV0aG9kc0Zvcjog J2RlZmluaW5nJyENCg0KZGVmaW5lQ29vcmRpbmF0aW9uDQoNCglwYWNrRnVsbCA6PSBmYWxz ZS4NCglnb3RQYWNrIDo9IGZhbHNlLg0KCWdvdExhYmVsIDo9IGZhbHNlLg0KDQoJc2VsZg0K CQlhZGRQb3J0czogIyggcGFja2VyIGZpbmFsaXplciApOw0KDQoJCXNlbGZleDogIyggJ3Bh Y2tlci5uZXdDYW5keTonICk7DQoNCgkJYXQ6ICdwYWNrZXIubmV3Q2FuZHk6Jw0KCQlyZXF1 aXJlczogWyA6cGFja2VyIHwgcGFja0Z1bGwgbm90IF0NCgkJb25FeGl0OiBbIDpwYWNrZXIg fCBwYWNrZXIgY2FuZHlQYWNrIGNhbmR5Q291bnQgPSBwYWNrZXIgbWF4Q2FuZHkgaWZUcnVl OiBbIHBhY2tGdWxsIDo9IHRydWUgXV07DQoNCgkJYXQ6ICdwYWNrZXIucHJvY2Vzc1BhY2sn DQoJCXJlcXVpcmVzOiBbIDpwYWNrZXIgfCBwYWNrRnVsbCBdOw0KDQoJCWF0OiAnZmluYWxp emVyLm5ld1BhY2s6Jw0KCQlyZXF1aXJlczogWyA6ZmluYWxpemVyIHwgZ290UGFjayBub3Qg XQ0KCQlvbkVudHJ5OiBbIDpmaW5hbGl6ZXIgfCBnb3RQYWNrIDo9IHRydWUgXQ0KCQlvbkV4 aXQ6IFsgOmZpbmFsaXplciB8IHBhY2tGdWxsIDo9IGZhbHNlIF07DQoNCgkJYXQ6ICdmaW5h bGl6ZXIubmV3TGFiZWw6Jw0KCQlyZXF1aXJlczogWyA6ZmluYWxpemVyIHwgZ290TGFiZWwg bm90IF0NCgkJb25FbnRyeTogWyA6ZmluYWxpemVyIHwgZ290TGFiZWwgOj0gdHJ1ZSBdOw0K DQoJCWF0OiAnZmluYWxpemVyLmdsdWVMYWJlbFRvUGFjaycNCgkJcmVxdWlyZXM6IFsgOmZp bmFsaXplciB8IGdvdFBhY2sgJiBnb3RMYWJlbCBdOw0KDQoJCWF0OiAnZmluYWxpemVyLnNo aXBOZXdDYW5keVBhY2snDQoJCW9uRXhpdDogWyA6ZmluYWxpemVyIHwgZ290UGFjayA6PSBm YWxzZS4gZ290TGFiZWwgOj0gZmFsc2UgXS4hICENCgwNCg0KDQpPYmplY3Qgc3ViY2xhc3M6 ICNSdW5uYWJsZQ0KCWluc3RhbmNlVmFyaWFibGVOYW1lczogJ215UHJvY2VzcyAnDQoJY2xh c3NWYXJpYWJsZU5hbWVzOiAnJw0KCXBvb2xEaWN0aW9uYXJpZXM6ICcnDQoJY2F0ZWdvcnk6 ICdDYW5keSchDQoNCg0KIVJ1bm5hYmxlIG1ldGhvZHNGb3I6ICdydW5uaW5nJyENCg0KcnVu DQoNCglbc2VsZiBkb05leHRdIHJlcGVhdC4hDQoNCnN0YXJ0DQoNCglteVByb2Nlc3MgOj0g W3NlbGYgcnVuXSBmb3JrQXQ6IFByb2Nlc3NvciB1c2VyQmFja2dyb3VuZFByaW9yaXR5IQ0K DQpzdGFydEF0OiBwcmlvcml0eQ0KDQoJbXlQcm9jZXNzIDo9IFtzZWxmIHJ1bl0gZm9ya0F0 OiBwcmlvcml0eSENCg0Kc3RvcA0KDQoJbXlQcm9jZXNzIHRlcm1pbmF0ZS4hICENCg0KIVJ1 bm5hYmxlIG1ldGhvZHNGb3I6ICd3b3JrJyENCg0KZG9OZXh0DQoNCglzZWxmIHN1YmNsYXNz UmVzcG9uc2liaWxpdHkhDQoNCndhaXQNCgkoUmFuZG9tRGVsYXkgdXB0bzogMTAwMCkgd2Fp dC4hICENCg0KIi0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tIC0tIC0tICIhDQoNCg0KDQohUnVubmFibGUgY2xhc3MgbWV0aG9kc0ZvcjogJ3N0b3Bw aW5nJyENCg0Kc3RvcEFsbA0KDQoJc2VsZiBhbGxJbnN0YW5jZXMgZG86IFsgOmNtIHwgY20g c3RvcF0uISAhDQoMDQoNCg0KUnVubmFibGUgc3ViY2xhc3M6ICNMYWJlbE1ha2VyDQoJaW5z dGFuY2VWYXJpYWJsZU5hbWVzOiAnZmluYWxpemVyICcNCgljbGFzc1ZhcmlhYmxlTmFtZXM6 ICcnDQoJcG9vbERpY3Rpb25hcmllczogJycNCgljYXRlZ29yeTogJ0NhbmR5JyENCg0KDQoh TGFiZWxNYWtlciBtZXRob2RzRm9yOiAnYWNjZXNzaW5nJyENCg0KZmluYWxpemVyDQoNCgle ZmluYWxpemVyIQ0KDQpmaW5hbGl6ZXI6IGFGaW5hbGl6ZXINCg0KCWZpbmFsaXplciA6PSBh RmluYWxpemVyISAhDQoNCiFMYWJlbE1ha2VyIG1ldGhvZHNGb3I6ICdpbml0aWFsaXphdGlv bichDQoNCmluaXRpYWxpemVXaXRoOiBhRmluYWxpemVyDQoNCglzZWxmIGZpbmFsaXplcjog YUZpbmFsaXplci4hICENCg0KIUxhYmVsTWFrZXIgbWV0aG9kc0ZvcjogJ3dvcmsnIQ0KDQpk b05leHQNCg0KCXNlbGYgZmluYWxpemVyIG5ld0xhYmVsOiBzZWxmIG1ha2VOZXdMYWJlbC4h DQoNCm1ha2VOZXdMYWJlbA0KDQoJc2VsZiB3YWl0Lg0KCV5DYW5keUxhYmVsIG5ldyEgIQ0K DQoiLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gIiENCg0KDQoNCiFMYWJlbE1ha2VyIGNsYXNzIG1ldGhvZHNGb3I6ICdpbnN0YW5jZSBj cmVhdGlvbichDQoNCm5ld1dpdGg6IGFGaW5hbGl6ZXINCg0KCV5zdXBlciBuZXcgaW5pdGlh bGl6ZVdpdGg6IGFGaW5hbGl6ZXIhICENCgwNCg0KDQpSdW5uYWJsZSBzdWJjbGFzczogI1Bh Y2tlcg0KCWluc3RhbmNlVmFyaWFibGVOYW1lczogJ2NhbmR5UGFjayBmaW5hbGl6ZXIgJw0K CWNsYXNzVmFyaWFibGVOYW1lczogJ1BhY2tGdWxsU2lnbmFsICcNCglwb29sRGljdGlvbmFy aWVzOiAnJw0KCWNhdGVnb3J5OiAnQ2FuZHknIQ0KDQoNCiFQYWNrZXIgbWV0aG9kc0Zvcjog J2NvbnN0YW50cychDQoNCm1heENhbmR5DQoNCgleMTAhICENCg0KIVBhY2tlciBtZXRob2Rz Rm9yOiAnYWNjZXNzaW5nJyENCg0KY2FuZHlQYWNrDQoNCgleY2FuZHlQYWNrIQ0KDQpjYW5k eVBhY2s6IGFQYWNrDQoNCgljYW5keVBhY2sgOj0gYVBhY2suIQ0KDQpmaW5hbGl6ZXINCg0K CV5maW5hbGl6ZXIhDQoNCmZpbmFsaXplcjogYUZpbmFsaXplcg0KDQoJZmluYWxpemVyIDo9 IGFGaW5hbGl6ZXIhICENCg0KIVBhY2tlciBtZXRob2RzRm9yOiAnaW5pdGlhbGl6YXRpb24n IQ0KDQppbml0aWFsaXplV2l0aDogYUZpbmFsaXplcg0KDQoJc2VsZiBmaW5hbGl6ZXI6IGFG aW5hbGl6ZXIuDQoJc2VsZiBjYW5keVBhY2s6IFBhY2sgbmV3LiEgIQ0KDQohUGFja2VyIG1l dGhvZHNGb3I6ICd3b3JrJyENCg0KZG9OZXh0DQoNCglzZWxmIGNhbmR5UGFjazogc2VsZiBn ZXROZXdQYWNrLg0KCXNlbGYgcHJvY2Vzc1BhY2suDQoJc2VsZiBmaW5hbGl6ZXIgbmV3UGFj azogc2VsZiBjYW5keVBhY2suIQ0KDQpnZXROZXdQYWNrDQoNCgl8IHAgfA0KCXNlbGYgd2Fp dC4NCglwIDo9IFBhY2sgbmV3Lg0KCVRyYW5zY3JpcHQgc2hvdzogJ1BhY2tlcjogc3RhcnRl ZCBuZXcgJzsgc2hvdzogcCBwcmludFN0cmluZzsgY3IuDQoJXnAhDQoNCm5ld0NhbmR5OiBh Q2FuZHkNCg0KCVRyYW5zY3JpcHQgc2hvdzogJ1BhY2tlcjogZ290IG5ldyAnOyBzaG93OiBh Q2FuZHkgcHJpbnRTdHJpbmc7IGNyLg0KCXNlbGYgY2FuZHlQYWNrIGNhbmR5Q291bnQgPiBz ZWxmIG1heENhbmR5IGlmVHJ1ZTogW3NlbGYgY2xhc3MgcGFja0Z1bGxTaWduYWwgcmFpc2Vd Lg0KCXNlbGYgY2FuZHlQYWNrIGFkZENhbmR5OiBhQ2FuZHkuIQ0KDQpwcm9jZXNzUGFjaw0K DQoJVHJhbnNjcmlwdCBzaG93OiAnUGFja2VyOiBwcm9jZXNzaW5nICc7IHNob3c6IGNhbmR5 UGFjayBwcmludFN0cmluZzsgY3IuDQoJc2VsZiB3YWl0Lg0KCVRyYW5zY3JpcHQgc2hvdzog J1BhY2tlcjogZmluaXNoZWQgcHJvY2Vzc2luZyAnOyBzaG93OiBjYW5keVBhY2sgcHJpbnRT dHJpbmc7IGNyLiEgIQ0KDQoiLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0gIiENCg0KDQoNCiFQYWNrZXIgY2xhc3MgbWV0aG9kc0Zvcjog J2luaXRpYWxpemF0aW9uJyENCg0KaW5pdGlhbGl6ZQ0KDQoJUGFja0Z1bGxTaWduYWwgOj0g KE9iamVjdCBlcnJvclNpZ25hbCBuZXdTaWduYWwpDQoJCQlub3RpZmllclN0cmluZzogJ1Ro ZSBjdXJyZW50IHBhY2sgaXMgYWxyZWFkeSBmdWwhISc7DQoJCQluYW1lQ2xhc3M6IHNlbGYg bWVzc2FnZTogI3BhY2tGdWxsU2lnbmFsLiEgIQ0KDQohUGFja2VyIGNsYXNzIG1ldGhvZHNG b3I6ICdzaWduYWwgY29uc3RhbnRzJyENCg0KcGFja0Z1bGxTaWduYWwNCg0KCVBhY2tGdWxs U2lnbmFsIGlzTmlsIGlmVHJ1ZTogWyBzZWxmIGluaXRpYWxpemUgXS4NCgleUGFja0Z1bGxT aWduYWwhICENCg0KIVBhY2tlciBjbGFzcyBtZXRob2RzRm9yOiAnaW5zdGFuY2UgY3JlYXRp b24nIQ0KDQpuZXdXaXRoOiBhRmluYWxpemVyDQoNCglec3VwZXIgbmV3IGluaXRpYWxpemVX aXRoOiBhRmluYWxpemVyISAhDQoMDQoNCg0KUnVubmFibGUgc3ViY2xhc3M6ICNDYW5keU1h a2VyDQoJaW5zdGFuY2VWYXJpYWJsZU5hbWVzOiAncGFja2VyICcNCgljbGFzc1ZhcmlhYmxl TmFtZXM6ICcnDQoJcG9vbERpY3Rpb25hcmllczogJycNCgljYXRlZ29yeTogJ0NhbmR5JyEN Cg0KDQohQ2FuZHlNYWtlciBtZXRob2RzRm9yOiAnYWNjZXNzaW5nJyENCg0KcGFja2VyDQoN CglecGFja2VyIQ0KDQpwYWNrZXI6IGFQYWNrZXINCg0KCXBhY2tlciA6PSBhUGFja2VyISAh DQoNCiFDYW5keU1ha2VyIG1ldGhvZHNGb3I6ICdpbml0aWFsaXphdGlvbichDQoNCmluaXRp YWxpemVXaXRoOiBhUGFja2VyDQoNCglzZWxmIHBhY2tlcjogYVBhY2tlciEgIQ0KDQohQ2Fu ZHlNYWtlciBtZXRob2RzRm9yOiAnd29yaychDQoNCmRvTmV4dA0KDQoJc2VsZiBwYWNrZXIg bmV3Q2FuZHk6IHNlbGYgbWFrZU5ld0NhbmR5LiENCg0KbWFrZU5ld0NhbmR5DQoNCglzZWxm IHdhaXQuDQoJXkNhbmR5IG5ldyEgIQ0KDQoiLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gIiENCg0KDQoNCiFDYW5keU1ha2VyIGNsYXNz IG1ldGhvZHNGb3I6ICdpbnN0YW5jZSBjcmVhdGlvbichDQoNCm5ld1dpdGg6IGFQYWNrZXIN Cg0KCV5zdXBlciBuZXcgaW5pdGlhbGl6ZVdpdGg6IGFQYWNrZXIhICENCgwNCg0KDQpSdW5u YWJsZSBzdWJjbGFzczogI0ZpbmFsaXplcg0KCWluc3RhbmNlVmFyaWFibGVOYW1lczogJ2Nh bmR5UGFjayBsYWJlbCAnDQoJY2xhc3NWYXJpYWJsZU5hbWVzOiAnJw0KCXBvb2xEaWN0aW9u YXJpZXM6ICcnDQoJY2F0ZWdvcnk6ICdDYW5keSchDQoNCg0KIUZpbmFsaXplciBtZXRob2Rz Rm9yOiAnd29yaychDQoNCmRvTmV4dA0KDQoJc2VsZiBnbHVlTGFiZWxUb1BhY2suDQoJc2Vs ZiBzaGlwTmV3Q2FuZHlQYWNrLiENCg0KZ2x1ZUxhYmVsVG9QYWNrDQoNCglUcmFuc2NyaXB0 IHNob3c6ICdGaW5hbGl6ZXI6IGdsdWluZyBsYWJlbCBvbiAnOyBzaG93OiBjYW5keVBhY2sg cHJpbnRTdHJpbmc7IGNyLg0KCXNlbGYgd2FpdC4NCglUcmFuc2NyaXB0IHNob3c6ICdGaW5h bGl6ZXI6IGZpbmlzaGVkIGdsdWluZyBsYWJlbCBvbiAnOyBzaG93OiBjYW5keVBhY2sgcHJp bnRTdHJpbmc7IGNyLiENCg0KbmV3TGFiZWw6IGFDYW5keUxhYmVsDQoNCglzZWxmIGxhYmVs OiBhQ2FuZHlMYWJlbC4NCglUcmFuc2NyaXB0IHNob3c6ICdGaW5hbGl6ZXI6IGdvdCAnOyBz aG93OiBhQ2FuZHlMYWJlbCBwcmludFN0cmluZzsgY3IuIQ0KDQpuZXdQYWNrOiBhUGFjaw0K DQoJc2VsZiBjYW5keVBhY2s6IGFQYWNrLg0KCVRyYW5zY3JpcHQgc2hvdzogJ0ZpbmFsaXpl cjogZ290ICc7IHNob3c6IGFQYWNrIHByaW50U3RyaW5nOyBjci4hDQoNCnNoaXBOZXdDYW5k eVBhY2sNCg0KCVRyYW5zY3JpcHQgc2hvdzogJ0ZpbmFsaXplcjogZmluaXNoZWQgbmV3ICc7 IHNob3c6IGNhbmR5UGFjayBwcmludFN0cmluZzsgY3IuISAhDQoNCiFGaW5hbGl6ZXIgbWV0 aG9kc0ZvcjogJ2FjY2Vzc2luZychDQoNCmNhbmR5UGFjaw0KDQoJXmNhbmR5UGFjayENCg0K Y2FuZHlQYWNrOiBhUGFjaw0KDQoJY2FuZHlQYWNrIDo9IGFQYWNrLiENCg0KbGFiZWwNCg0K CV5sYWJlbCENCg0KbGFiZWw6IGFDYW5keUxhYmxlDQoNCglsYWJlbCA6PSBhQ2FuZHlMYWJs ZS4hICENCgwNCg0KDQpPYmplY3Qgc3ViY2xhc3M6ICNQYWNrDQoJaW5zdGFuY2VWYXJpYWJs ZU5hbWVzOiAnaWQgY2FuZHlDb2wgJw0KCWNsYXNzVmFyaWFibGVOYW1lczogJ0lEICcNCglw b29sRGljdGlvbmFyaWVzOiAnJw0KCWNhdGVnb3J5OiAnQ2FuZHknIQ0KDQoNCiFQYWNrIG1l dGhvZHNGb3I6ICdpbml0aWFsaXppbmcnIQ0KDQppbml0aWFsaXplDQoNCglpZCA6PSBzZWxm IGNsYXNzIG5ld0lELg0KCWNhbmR5Q29sIDo9IE9yZGVyZWRDb2xsZWN0aW9uIG5ldy4hICEN Cg0KIVBhY2sgbWV0aG9kc0ZvcjogJ3ByaW50aW5nJyENCg0KcHJpbnRPbjogYVN0cmVhbQ0K DQoJYVN0cmVhbSBuZXh0UHV0QWxsOiAnYSBQYWNrICMnLg0KCWlkIHByaW50T246IGFTdHJl YW0uDQoJYVN0cmVhbSBuZXh0UHV0QWxsOiAnIHdpdGggJy4NCglzZWxmIGNhbmR5Q291bnQg cHJpbnRPbjogYVN0cmVhbS4NCglhU3RyZWFtIG5leHRQdXRBbGw6ICcgY2FuZGllcycuDQoJ Y2FuZHlDb2wgaXNFbXB0eSBpZkZhbHNlOiBbDQoJCWFTdHJlYW0gbmV4dFB1dEFsbDogJyBh bmQgbGFzdCAnLg0KCQljYW5keUNvbCBsYXN0IHByaW50T246IGFTdHJlYW0gXS4hICENCg0K IVBhY2sgbWV0aG9kc0ZvcjogJ2FjY2Vzc2luZychDQoNCmFkZENhbmR5OiBhQ2FuZHkNCg0K CWNhbmR5Q29sIGFkZDogYUNhbmR5IQ0KDQpjYW5keUNvdW50DQoNCgleY2FuZHlDb2wgc2l6 ZSEgIQ0KDQoiLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gIiENCg0KDQoNCiFQYWNrIGNsYXNzIG1ldGhvZHNGb3I6ICdpbnN0YW5jZSBj cmVhdGlvbichDQoNCm5ldw0KDQoJXnN1cGVyIG5ldyBpbml0aWFsaXplISAhDQoNCiFQYWNr IGNsYXNzIG1ldGhvZHNGb3I6ICdpbml0aWFsaXphdGlvbichDQoNCmluaXRpYWxpemUNCg0K CSJzZWxmIGluaXRpYWxpemUiDQoJSUQgOj0gMC4hICENCg0KIVBhY2sgY2xhc3MgbWV0aG9k c0ZvcjogJ2FjY2Vzc2luZychDQoNCm5ld0lEDQoNCglJRCA6PSBJRCArIDEuDQoJXklEISAh DQoMDQoNCg0KT2JqZWN0IHN1YmNsYXNzOiAjQ2FuZHlMYWJlbA0KCWluc3RhbmNlVmFyaWFi bGVOYW1lczogJ2lkICcNCgljbGFzc1ZhcmlhYmxlTmFtZXM6ICdJRCAnDQoJcG9vbERpY3Rp b25hcmllczogJycNCgljYXRlZ29yeTogJ0NhbmR5JyENCg0KDQohQ2FuZHlMYWJlbCBtZXRo b2RzRm9yOiAnaW5pdGlhbGl6YXRpb24nIQ0KDQppbml0aWFsaXplDQoNCglpZCA6PSBzZWxm IGNsYXNzIG5ld0lELiEgIQ0KDQohQ2FuZHlMYWJlbCBtZXRob2RzRm9yOiAncHJpbnRpbmcn IQ0KDQpwcmludE9uOiBhU3RyZWFtDQoNCglhU3RyZWFtIG5leHRQdXRBbGw6ICdhIENhbmR5 TGFiZWwgIycuDQoJaWQgcHJpbnRPbjogYVN0cmVhbS4hICENCg0KIi0tIC0tIC0tIC0tIC0t IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tICIhDQoNCg0KDQohQ2Fu ZHlMYWJlbCBjbGFzcyBtZXRob2RzRm9yOiAnaW5pdGlhbGl6YXRpb24nIQ0KDQppbml0aWFs aXplDQoNCgkic2VsZiBpbml0aWFsaXplIg0KCUlEIDo9IDAuISAhDQoNCiFDYW5keUxhYmVs IGNsYXNzIG1ldGhvZHNGb3I6ICdhY2Nlc3NpbmcnIQ0KDQpuZXdJRA0KDQoJSUQgOj0gSUQg KyAxLg0KCV5JRCEgIQ0KDQohQ2FuZHlMYWJlbCBjbGFzcyBtZXRob2RzRm9yOiAnaW5zdGFu Y2UgY3JlYXRpb24nIQ0KDQpuZXcNCg0KCV5zdXBlciBuZXcgaW5pdGlhbGl6ZSEgIQ0KDA0K DQoNCk9iamVjdCBzdWJjbGFzczogI0NhbmR5DQoJaW5zdGFuY2VWYXJpYWJsZU5hbWVzOiAn aWQgJw0KCWNsYXNzVmFyaWFibGVOYW1lczogJ0lEICcNCglwb29sRGljdGlvbmFyaWVzOiAn Jw0KCWNhdGVnb3J5OiAnQ2FuZHknIQ0KDQoNCiFDYW5keSBtZXRob2RzRm9yOiAncHJpbnRp bmcnIQ0KDQpwcmludE9uOiBhU3RyZWFtDQoNCglhU3RyZWFtIG5leHRQdXRBbGw6ICdhIENh bmR5ICMnLg0KCWlkIHByaW50T246IGFTdHJlYW0uISAhDQoNCiFDYW5keSBtZXRob2RzRm9y OiAnaW5pdGlhbGl6YXRpb24nIQ0KDQppbml0aWFsaXplDQoNCglpZCA6PSBzZWxmIGNsYXNz IG5ld0lELiEgIQ0KDQoiLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gIiENCg0KDQoNCiFDYW5keSBjbGFzcyBtZXRob2RzRm9yOiAnaW5z dGFuY2UgY3JlYXRpb24nIQ0KDQpuZXcNCg0KCV5zdXBlciBuZXcgaW5pdGlhbGl6ZSEgIQ0K DQohQ2FuZHkgY2xhc3MgbWV0aG9kc0ZvcjogJ2luaXRpYWxpemF0aW9uJyENCg0KaW5pdGlh bGl6ZQ0KCSJzZWxmIGluaXRpYWxpemUiDQoNCglJRCA6PSAwLiEgIQ0KDQohQ2FuZHkgY2xh c3MgbWV0aG9kc0ZvcjogJ2FjY2Vzc2luZychDQoNCm5ld0lEDQoNCglJRCA6PSBJRCArIDEu DQoJXklEISAhDQoNClBhY2tlciBpbml0aWFsaXplIQ0KDQpDYW5keUxhYmVsIGluaXRpYWxp emUhDQoNCkNhbmR5IGluaXRpYWxpemUhDQoNClBhY2sgaW5pdGlhbGl6ZSENCg0KDQo= --------------11B1B64A1E66500850CEBED3--