| Server IP : 82.208.35.60 / Your IP : 216.73.216.89 Web Server : Apache/2.4.55 (FreeBSD) OpenSSL/1.1.1q-freebsd PHP/7.3.31 System : FreeBSD server7.d2m.cz 12.4-RELEASE-p9 FreeBSD 12.4-RELEASE-p9 GENERIC amd64 User : studiokobylisy_cz ( 1008) PHP Version : 7.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/air-sport_cz/www/admin939wizxmp/themes/new-theme/public/ |
Upload File : |
/*! For license information please see product_edit.bundle.js.LICENSE.txt */
(()=>{var t={57208:t=>{"use strict";t.exports=JSON.parse('{"base_url":"","routes":{"admin_common_notifications":{"tokens":[["text","/common/notifications"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_product_form":{"tokens":[["variable","/","\\\\d+","id"],["text","/sell/catalog/products"]],"defaults":[],"requirements":{"id":"\\\\d+"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_feature_get_feature_values":{"tokens":[["variable","/","\\\\d+","idFeature"],["text","/sell/catalog/products/features"]],"defaults":{"idFeature":0},"requirements":{"idFeature":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_products_combinations":{"tokens":[["text","/combinations"],["variable","/","[^/]++","productId"],["text","/sell/catalog/products-v2"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_products_combinations_ids":{"tokens":[["text","/combinations/ids"],["variable","/","[^/]++","productId"],["text","/sell/catalog/products-v2"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_products_combinations_update_combination_from_listing":{"tokens":[["text","/update-combination-from-listing"],["variable","/","\\\\d+","combinationId"],["text","/sell/catalog/products-v2/combinations"]],"defaults":[],"requirements":{"combinationId":"\\\\d+"},"hosttokens":[],"methods":["PATCH"],"schemes":[]},"admin_products_combinations_edit_combination":{"tokens":[["text","/edit"],["variable","/","\\\\d+","combinationId"],["text","/sell/catalog/products-v2/combinations"]],"defaults":[],"requirements":{"combinationId":"\\\\d+"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_products_combinations_remove_combination":{"tokens":[["text","/remove"],["variable","/","\\\\d+","combinationId"],["text","/sell/catalog/products-v2/combinations"]],"defaults":[],"requirements":{"combinationId":"\\\\d+"},"hosttokens":[],"methods":["DELETE"],"schemes":[]},"admin_products_attribute_groups":{"tokens":[["text","/attribute-groups"],["variable","/","[^/]++","productId"],["text","/sell/catalog/products-v2"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_all_attribute_groups":{"tokens":[["text","/sell/catalog/products-v2/all-attribute-groups"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_products_combinations_generate":{"tokens":[["variable","/","[^/]++","productId"],["text","/sell/catalog/products-v2/generate-combinations"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_products_v2_get_images":{"tokens":[["text","/images"],["variable","/","\\\\d+","productId"],["text","/sell/catalog/products-v2"]],"defaults":[],"requirements":{"productId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_products_v2_add_image":{"tokens":[["text","/sell/catalog/products-v2/images/add"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_products_v2_update_image":{"tokens":[["text","/update"],["variable","/","\\\\d+","productImageId"],["text","/sell/catalog/products-v2/images"]],"defaults":[],"requirements":{"productImageId":"\\\\d+"},"hosttokens":[],"methods":["PATCH"],"schemes":[]},"admin_products_v2_delete_image":{"tokens":[["text","/delete"],["variable","/","\\\\d+","productImageId"],["text","/sell/catalog/products-v2/images"]],"defaults":[],"requirements":{"productImageId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_categories_get_categories_tree":{"tokens":[["text","/sell/catalog/categories/tree"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_cart_rules_search":{"tokens":[["text","/sell/catalog/cart-rules/search"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_customers_view":{"tokens":[["text","/view"],["variable","/","\\\\d+","customerId"],["text","/sell/customers"]],"defaults":[],"requirements":{"customerId":"\\\\d+"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_customers_search":{"tokens":[["text","/sell/customers/search"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_customers_carts":{"tokens":[["text","/carts"],["variable","/","\\\\d+","customerId"],["text","/sell/customers"]],"defaults":[],"requirements":{"customerId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_customers_orders":{"tokens":[["text","/orders"],["variable","/","\\\\d+","customerId"],["text","/sell/customers"]],"defaults":[],"requirements":{"customerId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_addresses_create":{"tokens":[["text","/sell/addresses/new"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_addresses_edit":{"tokens":[["text","/edit"],["variable","/","\\\\d+","addressId"],["text","/sell/addresses"]],"defaults":[],"requirements":{"addressId":"\\\\d+"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_order_addresses_edit":{"tokens":[["text","/edit"],["variable","/","delivery|invoice","addressType"],["variable","/","\\\\d+","orderId"],["text","/sell/addresses/order"]],"defaults":[],"requirements":{"orderId":"\\\\d+","addressType":"delivery|invoice"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_cart_addresses_edit":{"tokens":[["text","/edit"],["variable","/","delivery|invoice","addressType"],["variable","/","\\\\d+","cartId"],["text","/sell/addresses/cart"]],"defaults":[],"requirements":{"cartId":"\\\\d+","addressType":"delivery|invoice"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_carts_view":{"tokens":[["text","/view"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_carts_info":{"tokens":[["text","/info"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_carts_create":{"tokens":[["text","/sell/orders/carts/new"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_addresses":{"tokens":[["text","/addresses"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_carrier":{"tokens":[["text","/carrier"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_currency":{"tokens":[["text","/currency"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_language":{"tokens":[["text","/language"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_set_delivery_settings":{"tokens":[["text","/rules/delivery-settings"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_add_cart_rule":{"tokens":[["text","/cart-rules"],["variable","/","[^/]++","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_delete_cart_rule":{"tokens":[["text","/delete"],["variable","/","[^/]++","cartRuleId"],["text","/cart-rules"],["variable","/","[^/]++","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_add_product":{"tokens":[["text","/products"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_product_price":{"tokens":[["text","/price"],["variable","/","\\\\d+","productId"],["text","/products"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+","productId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_edit_product_quantity":{"tokens":[["text","/quantity"],["variable","/","\\\\d+","productId"],["text","/products"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+","productId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_carts_delete_product":{"tokens":[["text","/delete-product"],["variable","/","\\\\d+","cartId"],["text","/sell/orders/carts"]],"defaults":[],"requirements":{"cartId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_place":{"tokens":[["text","/sell/orders/place"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_view":{"tokens":[["text","/view"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET","POST"],"schemes":[]},"admin_orders_duplicate_cart":{"tokens":[["text","/duplicate-cart"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_update_product":{"tokens":[["variable","/","\\\\d+","orderDetailId"],["text","/products"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+","orderDetailId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_partial_refund":{"tokens":[["text","/partial-refund"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_standard_refund":{"tokens":[["text","/standard-refund"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_return_product":{"tokens":[["text","/return-product"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_send_process_order_email":{"tokens":[["text","/sell/orders/process-order-email"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_add_product":{"tokens":[["text","/products"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_delete_product":{"tokens":[["text","/delete"],["variable","/","\\\\d+","orderDetailId"],["text","/products"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+","orderDetailId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_get_discounts":{"tokens":[["text","/discounts"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_prices":{"tokens":[["text","/prices"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_payments":{"tokens":[["text","/payments"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_products":{"tokens":[["text","/products"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_invoices":{"tokens":[["text","/invoices"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_documents":{"tokens":[["text","/documents"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_get_shipping":{"tokens":[["text","/shipping"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_cancellation":{"tokens":[["text","/cancellation"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_configure_product_pagination":{"tokens":[["text","/sell/orders/configure-product-pagination"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["POST"],"schemes":[]},"admin_orders_product_prices":{"tokens":[["text","/products/prices"],["variable","/","\\\\d+","orderId"],["text","/sell/orders"]],"defaults":[],"requirements":{"orderId":"\\\\d+"},"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_orders_products_search":{"tokens":[["text","/sell/orders/products/search"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]},"admin_shops_search":{"tokens":[["variable","/","[^/]++","searchTerm"],["text","/configure/advanced/shops/search"]],"defaults":[],"requirements":[],"hosttokens":[],"methods":["GET"],"schemes":[]}},"prefix":"","host":"localhost","port":"","scheme":"http","locale":[]}')},50066:(t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var e=n.showGrowl=function(t,n,e){var r=void 0!==e?e:2e3;"success"===t?window.$.growl({title:"",size:"large",message:n,duration:r}):window.$.growl[t]({title:"",size:"large",message:n,duration:r})};n.default=e},43284:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=s(e(99663)),i=s(e(22600)),o=s(e(72100)),a=e(76544),l=s(e(25121));function s(t){return t&&t.__esModule?t:{default:t}}var d=window.$,u=function(){function t(n,e){if((0,r.default)(this,t),0!==d(n.container).length){if(this.originalUrl=e,this.useMultiLang=void 0!==n.multiLanguageInput||void 0!==n.multiLanguageField,this.useMultiLang){var i=[];n.multiLanguageInput&&i.push(n.multiLanguageInput),n.multiLanguageField&&i.push(n.multiLanguageField),this.multiLangSelector=i.join(","),this.attachMultiLangEvents()}this.data={url:e,title:"",description:""},this.vm=new o.default({el:n.container,template:'<serp ref="serp" :url="url" :title="title" :description="description" />',components:{serp:l.default},data:this.data}),this.initializeSelectors(n),this.attachInputEvents()}}return(0,i.default)(t,[{key:"attachMultiLangEvents",value:function(t){var n=this;d("body").on("click",t,(function(){n.checkTitle(),n.checkDesc(),n.checkUrl()})),a.EventEmitter.on("languageSelected",(function(){n.checkTitle(),n.checkDesc(),n.checkUrl()}))}},{key:"initializeSelectors",value:function(t){this.defaultTitle=d(t.defaultTitle),this.watchedTitle=d(t.watchedTitle),this.defaultDescription=d(t.defaultDescription),this.watchedDescription=d(t.watchedDescription),this.watchedMetaUrl=d(t.watchedMetaUrl)}},{key:"attachInputEvents",value:function(){var t=this;d(this.defaultTitle).on("keyup change",(function(){return t.checkTitle()})),d(this.watchedTitle).on("keyup change",(function(){return t.checkTitle()})),d(this.defaultDescription).on("keyup change",(function(){return t.checkDesc()})),d(this.watchedDescription).on("keyup change",(function(){return t.checkDesc()})),this.watchedMetaUrl.on("keyup change",(function(){return t.checkUrl()})),this.checkTitle(),this.checkDesc(),this.checkUrl()}},{key:"setTitle",value:function(t){this.data.title=t}},{key:"setDescription",value:function(t){this.data.description=t}},{key:"setUrl",value:function(t){this.data.url=this.originalUrl.replace("{friendy-url}",t),this.data.url=this.data.url.replace("{friendly-url}",t)}},{key:"checkTitle",value:function(){var t=this.defaultTitle,n=this.watchedTitle;this.useMultiLang&&(n=n.closest(this.multiLangSelector).find("input"),t=t.closest(this.multiLangSelector).find("input"));var e=n.length?n.val():"",r=t.length?t.val():"";this.setTitle(""===e?r:e),this.checkUrl()}},{key:"checkDesc",value:function(){var t=this.watchedDescription,n=this.defaultDescription;this.useMultiLang&&(t=t.closest(this.multiLangSelector).find(this.watchedDescription.is("input")?"input":"textarea"),n=n.closest(this.multiLangSelector).find(this.defaultDescription.is("input")?"input":"textarea"));var e=t.length?t.val().innerText||t.val():"",r=n.length?d(n.val()).text()||n.val():"";this.setDescription(""===e?r:e)}},{key:"checkUrl",value:function(){var t=this.watchedMetaUrl;this.useMultiLang&&(t=t.closest(this.multiLangSelector).find("input")),this.setUrl(t.val())}}]),t}();n.default=u},73481:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=a(e(88239)),i=a(e(99663)),o=a(e(22600));function a(t){return t&&t.__esModule?t:{default:t}}var l=function(){function t(n,e){var o=this;(0,i.default)(this,t),this.$searchInput=n,this.searchInputId=this.$searchInput.prop("id");var a=e||{};this.config=(0,r.default)({minLength:2,highlight:!0,cache:!1,hint:!1},a),this.dataSetConfig=(0,r.default)({display:"name",value:"id",limit:20,dataLimit:0,onSelect:function(t,n){return!0},onClose:function(t){}},a);var l={suggestion:function(t){var n=t;return"function"==typeof o.dataSetConfig.display?o.dataSetConfig.display(t):Object.prototype.hasOwnProperty.call(t,o.dataSetConfig.display)&&(n=t[o.dataSetConfig.display]),'<div class="px-2">'+n+"</div>"},pending:function(t){return'<div class="px-2">Searching for "'+t.query+'"</div>'},notFound:function(t){return'<div class="px-2">No results found for "'+t.query+'"</div>'}};Object.prototype.hasOwnProperty.call(a,"templates")?this.dataSetConfig.templates=(0,r.default)({},l,a.templates):this.dataSetConfig.templates=l,this.buildTypeahead()}return(0,o.default)(t,[{key:"buildTypeahead",value:function(){var t=this;this.$searchInput.typeahead(this.config,this.dataSetConfig).bind("typeahead:select",(function(n,e){return t.config.onSelect(e,n,t.$searchInput)})).bind("typeahead:close",(function(n){t.config.onClose(n,t.$searchInput)}))}}]),t}();n.default=l},62893:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.letters=void 0;var r=o(e(96486)),i=o(e(53943));function o(t){return t&&t.__esModule?t:{default:t}}var a,l=n.letters=function(t){var n=i.default.tokenizers.nonword(t);return n.forEach((function(t){for(var e=0;e+1<t.length;)n.push(t.substr(e,t.length)),e+=1})),n};n.default={letters:l,obj:{letters:(a=l,function(t){for(var n=arguments.length,e=Array(n>1?n-1:0),i=1;i<n;i++)e[i-1]=arguments[i];var o=r.default.isArray(t)?t:[].slice.call(e,0);return function(t){var n=[];return o.forEach((function(e){n=n.concat(a(r.default.toString(t[e])))})),n}})}}},23026:(t,n,e)=>{"use strict";var r=e(73609);Object.defineProperty(n,"__esModule",{value:!0});var i=d(e(88239)),o=d(e(99663)),a=d(e(22600)),l=d(e(73481)),s=d(e(53943));function d(t){return t&&t.__esModule?t:{default:t}}var u=function(){function t(n,e){(0,o.default)(this,t),this.$entitySearchInput=n,this.entitySearchInputId=this.$entitySearchInput.prop("id"),this.$autoCompleteSearchContainer=this.$entitySearchInput.closest(".autocomplete-search"),this.$selectionContainer=r("#"+this.entitySearchInputId+"-data"),this.searchInputFullName=this.$autoCompleteSearchContainer.data("fullname");var a=e||{};this.options=(0,i.default)({value:"id",dataLimit:1},a),this.buildRemoteSource(),this.buildAutoCompleteSearch()}return(0,a.default)(t,[{key:"setRemoteUrl",value:function(t){this.entityRemoteSource.remote.url=t}},{key:"setValue",value:function(t){var n=this;this.clearSelectedItems(),!t||t.length<=0||t.each((function(t){n.appendSelectedItem(t)}))}},{key:"buildAutoCompleteSearch",value:function(){var t=this,n={source:this.entityRemoteSource,dataLimit:this.options.dataLimit,templates:{suggestion:function(t){var n=void 0;return Object.prototype.hasOwnProperty.call(t,"image")&&(n='<img src="'+t.image+'" /> '),'<div class="search-suggestion">'+n+t.name+"</div>"}},onClose:function(n){t.onSelectionClose(n)},onSelect:function(n,e){return 1===t.options.dataLimit?t.replaceSelectedItem(n):t.appendSelectedItem(n)}};void 0!==this.options.value&&(n.value=this.options.value),this.autoSearch=new l.default(this.$entitySearchInput,n)}},{key:"buildRemoteSource",value:function(){var t={mappingValue:this.$autoCompleteSearchContainer.data("mappingvalue"),remoteUrl:this.$autoCompleteSearchContainer.data("remoteurl")};this.entityRemoteSource=new s.default({datumTokenizer:s.default.tokenizers.whitespace,queryTokenizer:s.default.tokenizers.whitespace,identify:function(n){return n[t.mappingValue]},remote:{url:t.remoteUrl,cache:!1,wildcard:"__QUERY__",transform:function(t){return t||[]}}})}},{key:"onSelectionClose",value:function(t){r(t.target).val("")}},{key:"clearSelectedItems",value:function(){r("li",this.$selectionContainer).remove()}},{key:"replaceSelectedItem",value:function(t){return this.clearSelectedItems(),this.addSelectedContentToContainer(t),!0}},{key:"appendSelectedItem",value:function(t){var n=r("li",this.$selectionContainer);return!(0!==this.options.dataLimit&&n.length>=this.options.dataLimit||(this.addSelectedContentToContainer(t),0))}},{key:"addSelectedContentToContainer",value:function(t){var n;n="function"==typeof this.options.value?this.options.value(t):t[this.options.value];var e=this.renderSelected(t),i=r(e),o=r('<input type="hidden" name="'+this.searchInputFullName+'[data][]" value="'+n+'" />');i.append(o),this.$selectionContainer.append(i),o.trigger("change")}},{key:"renderSelected",value:function(t){var n=r("#tplcollection-"+this.entitySearchInputId).html().replace("%s",t.name);return'<li class="media">\n <div class="media-left">\n <img class="media-object image" src="'+t.image+'" />\n </div>\n <div class="media-body media-middle">\n '+n+"\n </div>\n </li>"}}]),t}();n.default=u},76544:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.EventEmitter=void 0;var r,i=(r=e(17187))&&r.__esModule?r:{default:r},o=n.EventEmitter=new i.default;n.default=o},79979:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=l(e(88902)),i=l(e(99663)),o=l(e(22600)),a=l(e(96486));function l(t){return t&&t.__esModule?t:{default:t}}var s=window.$,d=function(){function t(n,e,r,o){var a=this;(0,i.default)(this,t),this.$form=n,this.fullModelMapping=e,this.eventEmitter=r;var l=o||{};return this.updateModelEventName=l.updateModel||"updateModel",this.modelUpdatedEventName=l.modelUpdated||"modelUpdated",this.modelFieldUpdatedEventName=l.modelFieldUpdated||"modelFieldUpdated",this.watchedProperties={},this.initFormMapping(),this.updateFullObject(),this.watchUpdates(),{getModel:function(){return a.model},getInputsFor:function(t){if(Object.prototype.hasOwnProperty.call(a.fullModelMapping,t)){var n=a.fullModelMapping[t],e=[],r=a.$form.get(0);return n.forEach((function(t){var n=r.querySelectorAll('[name="'+t+'"]');n.length&&n.forEach((function(t){e.push(t)}))})),e.length?s(e):void 0}},set:function(t,n){Object.prototype.hasOwnProperty.call(a.modelMapping,t)&&n!==a.getValue(t)&&(a.updateInputValue(t,n),a.updateObjectByKey(t,n),a.eventEmitter.emit(a.modelUpdatedEventName,a.model))},watch:function(t,n){Object.prototype.hasOwnProperty.call(a.watchedProperties,t)||(a.watchedProperties[t]=[]),a.watchedProperties[t].push(n)}}}return(0,o.default)(t,[{key:"getValue",value:function(t){var n=t.split(".");return s.serializeJSON.deepGet(this.model,n)}},{key:"watchUpdates",value:function(){var t=this;this.$form.on("keyup change dp.change",":input",a.default.debounce((function(n){return t.inputUpdated(n)}),350,{maxWait:1500})),this.eventEmitter.on(this.updateModelEventName,(function(){return t.updateFullObject()}))}},{key:"inputUpdated",value:function(t){var n=t.currentTarget;if(Object.prototype.hasOwnProperty.call(this.formMapping,n.name)){var e=s(n).val(),r=this.formMapping[n.name];this.updateInputValue(r,e,n.name),this.updateObjectByKey(r,e),this.eventEmitter.emit(this.modelUpdatedEventName,this.model)}}},{key:"updateInputValue",value:function(t,n){var e=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,i=this.fullModelMapping[t];Array.isArray(i)?i.forEach((function(t){r!==t&&e.updateInputByName(t,n)})):r!==i&&this.updateInputByName(i,n)}},{key:"updateInputByName",value:function(t,n){var e=s('[name="'+t+'"]',this.$form);e.length?e.val()!=n&&(e.val(n),"select2"===e.data("toggle")&&e.trigger("change")):console.error("Input with name "+t+" is not present in form.")}},{key:"updateFullObject",value:function(){var t=this,n=this.$form.serializeJSON();this.model={},(0,r.default)(this.modelMapping).forEach((function(e){var r=t.modelMapping[e],i=s.serializeJSON.splitInputNameIntoKeysArray(r),o=s.serializeJSON.deepGet(n,i);t.updateObjectByKey(e,o)})),this.eventEmitter.emit(this.modelUpdatedEventName,this.model)}},{key:"updateObjectByKey",value:function(t,n){var e=t.split("."),r=s.serializeJSON.deepGet(this.model,e);if(r!==n){s.serializeJSON.deepSet(this.model,e,n);var i={object:this.model,modelKey:t,value:n,previousValue:r};this.eventEmitter.emit(this.modelFieldUpdatedEventName,i),Object.prototype.hasOwnProperty.call(this.watchedProperties,t)&&this.watchedProperties[t].forEach((function(t){t(i)}))}}},{key:"initFormMapping",value:function(){var t=this;this.modelMapping={},this.formMapping={},(0,r.default)(this.fullModelMapping).forEach((function(n){var e=t.fullModelMapping[n];Array.isArray(e)?e.forEach((function(e){t.addFormMapping(e,n)})):t.addFormMapping(e,n)}))}},{key:"addFormMapping",value:function(t,n){Object.prototype.hasOwnProperty.call(this.formMapping,t)?console.error("The form element "+t+" is already mapped to "+this.formMapping[t]):(this.formMapping[t]=n,this.modelMapping[n]=t)}}]),t}();n.default=d},16985:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=l(e(88902)),i=l(e(99663)),o=l(e(22600)),a=e(50066);function l(t){return t&&t.__esModule?t:{default:t}}var s=window.$,d=function(){function t(n,e){return(0,i.default)(this,t),this.inputSelector=".submittable-input",this.callback=e,this.wrapperSelector=n,this.buttonSelector=".check-button",this.init(),{}}return(0,o.default)(t,[{key:"init",value:function(){var t=this,n=this.wrapperSelector+" "+this.inputSelector,e=this;s(document).on("focus",n,(function(n){t.refreshButtonState(n.currentTarget,!0)})),s(document).on("input blur",n,(function(n){t.refreshButtonState(n.currentTarget)})),s(document).on("click",this.wrapperSelector+" "+this.buttonSelector,(function(){e.submitInput(this)})),s(document).on("keyup",n,(function(n){if(13===n.keyCode){n.preventDefault();var e=t.findButton(n.target);t.submitInput(e)}}))}},{key:"submitInput",value:function(t){var n=this,e=this.findInput(t);this.toggleLoading(t,!0),this.callback(e).then((function(r){s(e).data("initial-value",e.value),n.toggleButtonVisibility(t,!1),r.message&&(0,a.showGrowl)("success",r.message),n.toggleLoading(t,!1)})).catch((function(e){if(n.toggleError(t,!0),n.toggleButtonVisibility(t,!1),n.toggleLoading(t,!1),void 0!==e.responseJSON.errors){var i=e.responseJSON.errors;(0,r.default)(i).forEach((function(t){(0,a.showGrowl)("error",i[t])}))}}))}},{key:"refreshButtonState",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,e=this.findButton(t),r=this.inputValueChanged(t);this.toggleButtonActivity(e,r),null!==n?this.toggleButtonVisibility(e,n):this.toggleButtonVisibility(e,r)}},{key:"toggleButtonActivity",value:function(t,n){s(t).toggleClass("active",n)}},{key:"toggleButtonVisibility",value:function(t,n){s(t).toggleClass("d-none",!n)}},{key:"toggleLoading",value:function(t,n){n?s(t).html('<span class="spinner-border spinner-border-sm"></span>'):s(t).html('<i class="material-icons">check</i>')}},{key:"toggleError",value:function(t,n){var e=this.findInput(t);s(e).toggleClass("is-invalid",n)}},{key:"findButton",value:function(t){return s(t).closest(this.wrapperSelector).find(this.buttonSelector)[0]}},{key:"findInput",value:function(t){return s(t).closest(this.wrapperSelector).find(this.inputSelector)[0]}},{key:"inputValueChanged",value:function(t){var n=s(t).data("initial-value"),e=s(t).val();return s(t).hasClass("is-invalid")&&s(t).removeClass("is-invalid"),"number"==typeof n&&(e=Number(e)),n!==e}}]),t}();n.default=d},68840:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r,i=(r=e(85315))&&r.__esModule?r:{default:r};n.default=function(t,n,e){var r=this,a=t.id,l=t.closable;this.modal=function(t){var n,e=t.id,r=void 0===e?"confirm-modal":e,o=t.confirmTitle,a=t.confirmMessage,l=void 0===a?"":a,s=t.closeButtonLabel,d=void 0===s?"Close":s,u=t.confirmButtonLabel,c=void 0===u?"Accept":u,p=t.confirmButtonClass,m=void 0===p?"btn-primary":p,f=t.customButtons,g=void 0===f?[]:f,A={};return A.container=document.createElement("div"),A.container.classList.add("modal","fade"),A.container.id=r,A.dialog=document.createElement("div"),A.dialog.classList.add("modal-dialog"),A.content=document.createElement("div"),A.content.classList.add("modal-content"),A.header=document.createElement("div"),A.header.classList.add("modal-header"),o&&(A.title=document.createElement("h4"),A.title.classList.add("modal-title"),A.title.innerHTML=o),A.closeIcon=document.createElement("button"),A.closeIcon.classList.add("close"),A.closeIcon.setAttribute("type","button"),A.closeIcon.dataset.dismiss="modal",A.closeIcon.innerHTML="×",A.body=document.createElement("div"),A.body.classList.add("modal-body","text-left","font-weight-normal"),A.message=document.createElement("p"),A.message.classList.add("confirm-message"),A.message.innerHTML=l,A.footer=document.createElement("div"),A.footer.classList.add("modal-footer"),A.closeButton=document.createElement("button"),A.closeButton.setAttribute("type","button"),A.closeButton.classList.add("btn","btn-outline-secondary","btn-lg"),A.closeButton.dataset.dismiss="modal",A.closeButton.innerHTML=d,A.confirmButton=document.createElement("button"),A.confirmButton.setAttribute("type","button"),A.confirmButton.classList.add("btn",m,"btn-lg","btn-confirm-submit"),A.confirmButton.dataset.dismiss="modal",A.confirmButton.innerHTML=c,o?A.header.append(A.title,A.closeIcon):A.header.appendChild(A.closeIcon),A.body.appendChild(A.message),(n=A.footer).append.apply(n,[A.closeButton].concat((0,i.default)(g),[A.confirmButton])),A.content.append(A.header,A.body,A.footer),A.dialog.appendChild(A.content),A.container.appendChild(A.dialog),A}(t),this.$modal=o(this.modal.container),this.show=function(){r.$modal.modal()},this.modal.confirmButton.addEventListener("click",n),this.$modal.modal({backdrop:!!l||"static",keyboard:void 0===l||l,closable:void 0===l||l,show:!1}),this.$modal.on("hidden.bs.modal",(function(){document.querySelector("#"+a).remove(),e&&e()})),document.body.appendChild(this.modal.container)};var o=window.$},49551:(t,n,e)=>{"use strict";var r=e(73609);Object.defineProperty(n,"__esModule",{value:!0});var i=a(e(99663)),o=a(e(22600));function a(t){return t&&t.__esModule?t:{default:t}}var l=function(){function t(n,e){(0,i.default)(this,t),this.tabPrefix=e||"tab-",this.$navigationContainer=n,this.watchNavbar(),this.watchTabLinks(),this.switchOnPageLoad()}return(0,o.default)(t,[{key:"switchToTarget",value:function(t){if(t){var n=r('[href="'+t+'"]',this.$navigationContainer);if(!(n.length<=0)){var e=n.first();this.switchToTab(e)}}}},{key:"switchToTab",value:function(t){t.click(),this.updateBrowserHash(t.attr("href"))}},{key:"updateBrowserHash",value:function(t){var n=t.replace("#","#"+this.tabPrefix);window.history.pushState?window.history.pushState(null,null,n):window.location.hash=n}},{key:"watchNavbar",value:function(){var t=this;r(this.$navigationContainer).on("shown.bs.tab",(function(n){n.target.hash&&t.updateBrowserHash(n.target.hash)}))}},{key:"watchTabLinks",value:function(){var t=this;r(".tab-link").click((function(n){n.preventDefault();var e=r(n.target).attr("href");e&&t.switchToTarget(""+e)}))}},{key:"switchOnPageLoad",value:function(){var t=r(".has-error",this.$navigationContainer);if(t.length){var n=r('a[role="tab"]',t.first()).first();this.switchToTab(n)}else{var e=document.location.hash.replace("#"+this.tabPrefix,"#");this.switchToTarget(e)}}}]),t}();n.default=l},40253:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=l(e(94942)),i=l(e(36803)),o=l(e(99663)),a=l(e(22600));function l(t){return t&&t.__esModule?t:{default:t}}var s=window.$,d=function(){function t(n,e,r){var i=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,l=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;return(0,o.default)(this,t),this.$paginationContainer=s(n),this.paginationService=e,this.renderer=r,this.setSelectorsMap(l),this.init(),this.currentPage=1,null!==a&&this.paginate(a),{paginate:function(t){return i.paginate(t)},getCurrentPage:function(){return i.currentPage}}}var n;return(0,a.default)(t,[{key:"init",value:function(){var t=this;this.$paginationContainer.on("click",this.selectorsMap.pageLink,(function(n){t.paginate(Number(s(n.currentTarget).data("page")))})),this.$paginationContainer.find(this.selectorsMap.jumpToPageInput).keypress((function(n){if(13===n.which){n.preventDefault();var e=t.getValidPageNumber(Number(n.currentTarget.value));t.paginate(e)}})),this.$paginationContainer.on("change",this.selectorsMap.limitSelect,(function(){t.paginate(1)}))}},{key:"paginate",value:(n=(0,i.default)(r.default.mark((function t(n){var e,i;return r.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return this.currentPage=n,this.renderer.toggleLoading(!0),e=this.getLimit(),t.next=5,this.paginationService.fetch(this.calculateOffset(n,e),e);case 5:i=t.sent,s(this.selectorsMap.jumpToPageInput).val(n),this.countPages(i.total),this.refreshButtonsData(n),this.refreshInfoLabel(n,i.total),this.toggleTargetAvailability(this.selectorsMap.firstPageItem,n>1),this.toggleTargetAvailability(this.selectorsMap.previousPageItem,n>1),this.toggleTargetAvailability(this.selectorsMap.nextPageItem,n<this.pagesCount),this.toggleTargetAvailability(this.selectorsMap.lastPageItem,n<this.pagesCount),this.renderer.render(i),this.renderer.toggleLoading(!1),window.prestaShopUiKit.initToolTips();case 17:case"end":return t.stop()}}),t,this)}))),function(t){return n.apply(this,arguments)})},{key:"calculateOffset",value:function(t,n){return(t-1)*n}},{key:"refreshButtonsData",value:function(t){this.$paginationContainer.find(this.selectorsMap.nextPageBtn).data("page",t+1),this.$paginationContainer.find(this.selectorsMap.previousPageBtn).data("page",t-1),this.$paginationContainer.find(this.selectorsMap.lastPageBtn).data("page",this.pagesCount)}},{key:"refreshInfoLabel",value:function(t,n){var e=this.$paginationContainer.find(this.selectorsMap.paginationInfoLabel),r=this.getLimit(),i=1===t?1:Math.round((t-1)*r),o=t===this.pagesCount?n:Math.round(t*r),a=e.data("pagination-info").replace(/%from%/g,i).replace(/%to%/g,o).replace(/%total%/g,n).replace(/%current_page%/g,t).replace(/%page_count%/g,this.pagesCount);e.text(a)}},{key:"toggleTargetAvailability",value:function(t,n){var e=this.$paginationContainer.find(t);n?e.removeClass("disabled"):e.addClass("disabled")}},{key:"countPages",value:function(t){this.pagesCount=Math.ceil(t/this.getLimit());var n=this.$paginationContainer.find(this.selectorsMap.lastPageBtn);n.data("page",this.pagesCount),n.text(this.pagesCount)}},{key:"getLimit",value:function(){return this.$paginationContainer.find(this.selectorsMap.limitSelect).val()}},{key:"getValidPageNumber",value:function(t){return t>this.pagesCount?this.pagesCount:t<1?1:t}},{key:"setSelectorsMap",value:function(t){this.selectorsMap=t||{jumpToPageInput:'input[name="paginator-jump-page"]',firstPageBtn:"button.page-link.first",firstPageItem:"li.page-item.first",nextPageBtn:"button.page-link.next",nextPageItem:"li.page-item.next",previousPageBtn:"button.page-link.previous",previousPageItem:"li.page-item.previous",lastPageItem:"li.page-item.last",lastPageBtn:"button.page-link.last",pageLink:"button.page-link",limitSelect:"#paginator-limit",paginationInfoLabel:"#pagination-info"}}}]),t}();n.default=d},95778:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=s(e(52945)),i=s(e(99663)),o=s(e(22600)),a=s(e(2564)),l=s(e(57208));function s(t){return t&&t.__esModule?t:{default:t}}var d=window.$,u=function(){function t(){return(0,i.default)(this,t),window.prestashop&&window.prestashop.customRoutes&&(0,r.default)(l.default.routes,window.prestashop.customRoutes),a.default.setData(l.default),a.default.setBaseUrl(d(document).find("body").data("base-url")),this}return(0,o.default)(t,[{key:"generate",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=(0,r.default)(n,{_token:d(document).find("body").data("token")});return a.default.generate(t,e)}}]),t}();n.default=u},57661:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=f(e(94942)),i=f(e(36803)),o=f(e(99663)),a=f(e(22600)),l=f(e(53943)),s=f(e(96486)),d=f(e(73481)),u=f(e(62893)),c=f(e(26141)),p=f(e(2341)),m=e(13014);function f(t){return t&&t.__esModule?t:{default:t}}var g=window.$,A=c.default.categories,h=function(){function t(n){return(0,o.default)(this,t),this.eventEmitter=n,this.categoriesContainer=document.querySelector(A.categoriesContainer),this.categories=[],this.typeaheadDatas=[],this.categoryTree=this.categoriesContainer.querySelector(A.categoryTree),this.prototypeTemplate=this.categoryTree.dataset.prototype,this.prototypeName=this.categoryTree.dataset.prototypeName,this.expandAllButton=this.categoriesContainer.querySelector(A.expandAllButton),this.reduceAllButton=this.categoriesContainer.querySelector(A.reduceAllButton),this.initCategories(),{}}var n;return(0,a.default)(t,[{key:"initCategories",value:(n=(0,i.default)(r.default.mark((function t(){var n;return r.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,(0,m.getCategories)();case 2:this.categories=t.sent,n=A.checkboxName("__REGEXP__"),n=s.default.escapeRegExp(n).replace("__REGEXP__","([0-9]+)"),this.checkboxIdRegexp=new RegExp(n),n=A.radioName("__REGEXP__"),n=s.default.escapeRegExp(n).replace("__REGEXP__","([0-9]+)"),this.radioIdRegexp=new RegExp(n),this.initTypeaheadData(this.categories,""),this.initTypeahead(),this.initTree(),this.updateCategoriesTags();case 13:case"end":return t.stop()}}),t,this)}))),function(){return n.apply(this,arguments)})},{key:"initTree",value:function(){var t=this,n={};this.categoryTree.querySelectorAll(A.treeElement).forEach((function(e){var r=e.querySelector(A.checkboxInput),i=t.getIdFromCheckbox(r);n[i]=e})),this.categories.forEach((function(e){var r=t.generateCategoryTree(e,n);t.categoryTree.append(r)})),this.expandAllButton.addEventListener("click",(function(){t.toggleAll(!0)})),this.reduceAllButton.addEventListener("click",(function(){t.toggleAll(!1)})),this.categoryTree.querySelectorAll(A.checkboxInput).forEach((function(n){n.addEventListener("change",(function(n){var e=n.currentTarget;e.parentNode.closest(A.treeElement).querySelector(A.radioInput).checked?(n.preventDefault(),n.stopImmediatePropagation(),t.updateCheckbox(e,!0)):t.updateCategoriesTags()}))})),this.categoryTree.querySelectorAll(A.radioInput).forEach((function(n){n.addEventListener("click",(function(){t.selectedDefaultCategory(n)})),n.checked&&t.updateDefaultCheckbox(n)})),this.categoriesContainer.querySelector(A.fieldset).classList.remove("d-none"),this.categoriesContainer.querySelector(A.loader).classList.add("d-none")}},{key:"generateCategoryTree",value:function(t,n){var e=this,r=this.generateTreeElement(t,n),i=r.querySelector(A.childrenList);i.classList.add("d-none");var o=t.children&&t.children.length>0;return r.classList.toggle("more",o),o&&(r.querySelector(A.treeElementInputs).addEventListener("click",(function(t){if(t.target===t.currentTarget){var n=!i.classList.contains("d-none");r.classList.toggle("less",!n),r.classList.toggle("more",n),i.classList.toggle("d-none",n)}})),t.children.forEach((function(t){var r=e.generateCategoryTree(t,n);i.append(r)}))),r}},{key:"generateTreeElement",value:function(t,n){var e=void 0;if(Object.prototype.hasOwnProperty.call(n,t.id))e=n[t.id];else{var r=this.prototypeTemplate.replace(new RegExp(this.prototypeName,"g"),t.id);e=document.createRange().createContextualFragment(r.trim()).firstChild}var i=e.querySelector(A.checkboxInput);return i.parentNode.insertBefore(document.createTextNode(t.name),i),e}},{key:"selectedDefaultCategory",value:function(t){this.categoryTree.querySelectorAll(A.radioInput).forEach((function(n){n!==t&&(n.checked=!1)})),this.categoryTree.querySelectorAll(A.checkboxInput).forEach((function(t){t.parentNode.closest(A.materialCheckbox).classList.remove("disabled")})),this.updateDefaultCheckbox(t)}},{key:"updateDefaultCheckbox",value:function(t){var n=t.parentNode.closest(A.treeElement).querySelector(A.checkboxInput);n.parentNode.closest(A.materialCheckbox).classList.add("disabled"),this.updateCheckbox(n,!0),this.updateCategoriesTags(),this.eventEmitter.emit(p.default.updateSubmitButtonState)}},{key:"toggleAll",value:function(t){this.expandAllButton.style.display=t?"none":"block",this.reduceAllButton.style.display=t?"block":"none",this.categoriesContainer.querySelectorAll(A.childrenList).forEach((function(n){n.classList.toggle("d-none",!t)})),this.categoriesContainer.querySelectorAll(A.everyItems).forEach((function(n){n.classList.toggle("more",!t),n.classList.toggle("less",t)}))}},{key:"selectCategory",value:function(t){var n=this.categoriesContainer.querySelector('[name="'+A.checkboxName(t)+'"]');n&&(this.updateCheckbox(n,!0),this.openCategoryParents(n),this.updateCategoriesTags())}},{key:"openCategoryParents",value:function(t){var n=t.closest(A.treeElement);for(null!==n&&(n=n.parentNode.closest(A.treeElement));null!==n&&this.categoryTree.contains(n);)n.querySelector(A.childrenList).childNodes.length&&(n.classList.add("less"),n.classList.remove("more"),n.querySelector(A.childrenList).classList.remove("d-none")),n=n.parentNode.closest(A.treeElement)}},{key:"unselectCategory",value:function(t){var n=this.categoriesContainer.querySelector('[name="'+A.checkboxName(t)+'"]');n&&(this.updateCheckbox(n,!1),this.openCategoryParents(n),this.updateCategoriesTags())}},{key:"initTypeaheadData",value:function(t,n){var e=this;t.forEach((function(t){t.breadcrumb=n?n+" > "+t.name:t.name,e.typeaheadDatas.push(t),t.children&&e.initTypeaheadData(t.children,t.breadcrumb)}))}},{key:"initTypeahead",value:function(){var t=this,n={source:new l.default({datumTokenizer:u.default.obj.letters("name","breadcrumb"),queryTokenizer:l.default.tokenizers.nonword,local:this.typeaheadDatas}),display:"breadcrumb",value:"id",onSelect:function(n,e,r){t.selectCategory(n.id),r.typeahead("val","")},onClose:function(t,n){return n.typeahead("val",""),!0},templates:{suggestion:function(t){return'<div class="px-2">'+t.breadcrumb+"</div>"}}};new d.default(g(A.searchInput),n)}},{key:"updateCategoriesTags",value:function(){var t=this,n=this.categoryTree.querySelectorAll(A.checkedCheckboxInputs),e=this.categoriesContainer.querySelector(A.tagsContainer);e.innerHTML="";var r=this.getDefaultCategoryId();n.forEach((function(n){var i=t.getIdFromCheckbox(n),o=t.getCategoryById(i);if(o){var a=r!==i?'<a class="pstaggerClosingCross" href="#" data-id="'+o.id+'">x</a>':"",l='\n <span class="pstaggerTag">\n <span data-id="'+o.id+'" title="'+o.breadcrumb+'">'+o.name+"</span>\n "+a+"\n </span>\n ",s=document.createRange().createContextualFragment(l.trim());e.append(s.firstChild)}})),e.querySelectorAll(".pstaggerClosingCross").forEach((function(n){n.addEventListener("click",(function(n){n.preventDefault(),n.stopImmediatePropagation();var e=Number(n.currentTarget.dataset.id);e!==r&&t.unselectCategory(e)}))})),e.classList.toggle("d-block",n.length>0)}},{key:"getCategoryById",value:function(t){return this.searchCategory(t,this.categories)}},{key:"searchCategory",value:function(t,n){var e=this,r=null;return n.forEach((function(n){t===n.id&&(r=n),null===r&&n.children&&n.children.length>0&&(r=e.searchCategory(t,n.children))})),r}},{key:"getDefaultCategoryId",value:function(){var t=this.categoryTree.querySelector(A.defaultRadioInput);if(t)return this.getIdFromRadio(t)}},{key:"getIdFromRadio",value:function(t){var n=t.name.match(this.radioIdRegexp);return Number(n[1])}},{key:"getIdFromCheckbox",value:function(t){var n=t.name.match(this.checkboxIdRegexp);return Number(n[1])}},{key:"updateCheckbox",value:function(t,n){t.checked!==n&&(t.checked=n,this.eventEmitter.emit(p.default.updateSubmitButtonState))}}]),t}();n.default=h},25923:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(t,n,e){var l=document.querySelector(t),s=l.dataset.emptyImage;if(!l)return null;var d=JSON.parse(l.dataset.translations),u=new i.default({locale:"en",formatter:new o.default,messages:{en:d}});return new r.default({el:t,template:'<combination-modal :productId=productId :emptyImageUrl="emptyImage" :eventEmitter=eventEmitter />',components:{CombinationModal:a.default},i18n:u,data:{productId:n,eventEmitter:e,emptyImage:s}})};var r=l(e(72100)),i=l(e(17152)),o=l(e(42157)),a=l(e(1535));function l(t){return t&&t.__esModule?t:{default:t}}r.default.use(i.default)},47154:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(t){var n=document.querySelector(t),e=JSON.parse(n.dataset.translations),l=new i.default({locale:"en",formatter:new o.default,messages:{en:e}}),s=Number(n.dataset.productId),d=JSON.parse(n.dataset.locales);return new r.default({el:t,template:"<dropzone :productId=productId :locales=locales :token=token :formName=formName />",components:{Dropzone:a.default},i18n:l,data:{locales:d,productId:s,token:n.dataset.token,formName:n.dataset.formName}})};var r=l(e(72100)),i=l(e(17152)),o=l(e(42157)),a=l(e(95075));function l(t){return t&&t.__esModule?t:{default:t}}r.default.use(i.default)},4312:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(t,n,e){var l=document.querySelector(t),s=JSON.parse(l.dataset.translations),d=new o.default({locale:"en",formatter:new a.default,messages:{en:s}});return new r.default({el:t,template:"<filters :filters=filters :eventEmitter=eventEmitter />",components:{Filters:i.default},i18n:d,data:{filters:e,eventEmitter:n}})};var r=l(e(72100)),i=l(e(4205)),o=l(e(17152)),a=l(e(42157));function l(t){return t&&t.__esModule?t:{default:t}}r.default.use(o.default)},2984:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(t,n,e){var l=document.querySelector(t),s=JSON.parse(l.dataset.translations),d=new i.default({locale:"en",formatter:new o.default,messages:{en:s}});return new r.default({el:t,template:"<combination-generator :productId=productId :eventEmitter=eventEmitter />",components:{CombinationGenerator:a.default},i18n:d,data:{productId:e,eventEmitter:n}})};var r=l(e(72100)),i=l(e(17152)),o=l(e(42157)),a=l(e(83510));function l(t){return t&&t.__esModule?t:{default:t}}r.default.use(i.default)},20259:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(){var t,n=o(i.default.jsArrow),e=o(i.default.jsTabs),r=o(i.default.jsNavTabs),a=void 0,l=0,s=0,d=35;r.find("li").each((function(t,n){d+=o(n).width()})),t=d+70,r.width(t),r.find(i.default.toggleTab).on("click",(function(t){o(t.target).hasClass("active")||o(i.default.formContentTab).removeClass("active")})),n.on("click",(function(t){n.is(":visible")&&(s=e.width(),a=r.position(),l="-=0",o(t.currentTarget).hasClass("right-arrow")?s-a.left<d&&(l="-="+s):a.left<35&&(l="+="+s),r.animate({left:l},400,"easeOutQuad",(function(){o(i.default.leftArrow).toggleClass("visible",o(t.currentTarget).hasClass("right-arrow")),o(i.default.rightArrow).toggleClass("visible",!o(t.currentTarget).hasClass("right-arrow"))})))}))};var r,i=(r=e(26141))&&r.__esModule?r:{default:r},o=window.$},96720:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=a(e(99663)),i=a(e(22600)),o=a(e(26141));function a(t){return t&&t.__esModule?t:{default:t}}var l=window.$,s=function(){function t(){var n=this;return(0,r.default)(this,t),this.$combinationsTable=l(o.default.combinations.combinationsTable),this.$combinationsTableBody=l(o.default.combinations.combinationsTableBody),this.$loadingSpinner=l(o.default.combinations.loadingSpinner),this.prototypeTemplate=this.$combinationsTable.data("prototype"),this.prototypeName=this.$combinationsTable.data("prototypeName"),{render:function(t){return n.render(t)},toggleLoading:function(t){return n.toggleLoading(t)}}}return(0,i.default)(t,[{key:"render",value:function(t){this.renderCombinations(t.combinations)}},{key:"toggleLoading",value:function(t){this.$loadingSpinner.toggle(t)}},{key:"renderCombinations",value:function(t){var n=this;this.$combinationsTableBody.empty();var e=0;t.forEach((function(t){var r=l(n.getPrototypeRow(e)),i=l(o.default.combinations.tableRow.combinationCheckbox(e),r),a=l(o.default.combinations.tableRow.combinationIdInput(e),r),s=l(o.default.combinations.tableRow.combinationNameInput(e),r),d=l(o.default.combinations.tableRow.quantityInput(e),r),u=l(o.default.combinations.tableRow.impactOnPriceInput(e),r),c=l(o.default.combinations.tableRow.referenceInput(e),r),p=l(o.default.combinations.tableRow.finalPriceTeInput(e),r);a.val(t.id),s.val(t.name),i.closest("label").append(t.id),s.closest("td").append(t.name),p.closest("td").append(t.finalPriceTe),c.val(t.reference),c.data("initial-value",t.reference),d.val(t.quantity),d.data("initial-value",t.quantity),u.val(t.impactOnPrice),u.data("initial-value",t.impactOnPrice),l(o.default.combinations.tableRow.editButton(e),r).data("id",t.id),l(o.default.combinations.tableRow.deleteButton(e),r).data("id",t.id),l(o.default.combinations.tableRow.combinationImg,r).attr("src",t.imageUrl).attr("alt",t.name),t.isDefault&&l(o.default.combinations.tableRow.isDefaultInput(e),r).prop("checked",!0),n.$combinationsTableBody.append(r),e+=1}))}},{key:"getPrototypeRow",value:function(t){return this.prototypeTemplate.replace(new RegExp(this.prototypeName,"g"),t)}}]),t}();n.default=s},40734:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=$(e(88106)),i=$(e(88902)),o=$(e(94942)),a=$(e(36803)),l=$(e(99663)),s=$(e(22600)),d=$(e(26141)),u=$(e(96720)),c=$(e(73927)),p=$(e(40253)),m=$(e(16985)),f=$(e(2341)),g=$(e(25923)),A=$(e(4312)),h=$(e(68840)),C=$(e(2984)),b=e(57867);function $(t){return t&&t.__esModule?t:{default:t}}var v=window.$,x=f.default.combinations,y=d.default.combinations,w=function(){function t(n){return(0,l.default)(this,t),this.productId=n,this.eventEmitter=window.prestashop.instance.eventEmitter,this.$productForm=v(d.default.productForm),this.$combinationsContainer=v(d.default.combinations.combinationsContainer),this.combinationIdInputsSelector=d.default.combinations.combinationIdInputsSelector,this.$externalCombinationTab=v(d.default.combinations.externalCombinationTab),this.$preloader=v(d.default.combinations.preloader),this.$paginatedList=v(y.combinationsPaginatedList),this.$emptyState=v(y.emptyState),this.paginator=null,this.combinationsRenderer=null,this.filtersApp=null,this.combinationModalApp=null,this.combinationGeneratorApp=null,this.initialized=!1,this.combinationsService=new c.default(this.productId),this.productAttributeGroups=[],this.init(),{}}var n,e,f;return(0,s.default)(t,[{key:"init",value:function(){var t=this;this.$productForm.find(y.navigationTab).on("shown.bs.tab",(function(){return t.showCombinationTab()})),this.$productForm.find(y.navigationTab).on("hidden.bs.tab",(function(){return t.hideCombinationTab()})),this.watchEvents()}},{key:"showCombinationTab",value:function(){this.$externalCombinationTab.removeClass("d-none"),this.firstInit()}},{key:"hideCombinationTab",value:function(){this.$externalCombinationTab.addClass("d-none")}},{key:"firstInit",value:function(){this.initialized||(this.initialized=!0,this.combinationGeneratorApp=(0,C.default)(y.combinationsGeneratorContainer,this.eventEmitter,this.productId),this.combinationModalApp=(0,g.default)(y.editModal,this.productId,this.eventEmitter),this.filtersApp=(0,A.default)(y.combinationsFiltersContainer,this.eventEmitter,this.productAttributeGroups),this.initPaginatedList(),this.refreshCombinationList(!0))}},{key:"refreshCombinationList",value:(f=(0,a.default)(o.default.mark((function t(n){var e;return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return this.$preloader.toggleClass("d-none",!n),this.$paginatedList.toggleClass("d-none",n),this.$emptyState.addClass("d-none"),this.paginator.paginate(1),t.next=6,(0,b.getProductAttributeGroups)(this.productId);case 6:this.productAttributeGroups=t.sent,this.filtersApp.filters=this.productAttributeGroups,this.eventEmitter.emit(x.clearFilters),this.$preloader.addClass("d-none"),e=this.productAttributeGroups&&this.productAttributeGroups.length,this.$paginatedList.toggleClass("d-none",!e),e||(this.combinationsRenderer.render({combinations:[]}),this.$emptyState.removeClass("d-none"));case 13:case"end":return t.stop()}}),t,this)}))),function(t){return f.apply(this,arguments)})},{key:"refreshPage",value:function(){this.paginator.paginate(this.paginator.getCurrentPage())}},{key:"initPaginatedList",value:function(){var t,n,e=this;this.combinationsRenderer=new u.default,this.paginator=new p.default(y.paginationContainer,this.combinationsService,this.combinationsRenderer),this.initSubmittableInputs(),this.$combinationsContainer.on("change",y.isDefaultInputsSelector,(t=(0,a.default)(o.default.mark((function t(n){return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n.currentTarget.checked){t.next=2;break}return t.abrupt("return");case 2:return t.next=4,e.updateDefaultCombination(n.currentTarget);case 4:case"end":return t.stop()}}),t,e)}))),function(n){return t.apply(this,arguments)})),this.$combinationsContainer.on("click",y.removeCombinationSelector,(n=(0,a.default)(o.default.mark((function t(n){return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.removeCombination(n.currentTarget);case 2:case"end":return t.stop()}}),t,e)}))),function(t){return n.apply(this,arguments)})),this.initSortingColumns(),this.paginator.paginate(1)}},{key:"watchEvents",value:function(){var t=this;this.eventEmitter.on(x.refreshCombinationList,(function(){return t.refreshCombinationList(!1)})),this.eventEmitter.on(x.refreshPage,(function(){return t.refreshPage()})),this.eventEmitter.on(x.updateAttributeGroups,(function(n){var e=t.combinationsService.getFilters();e.attributes={},(0,i.default)(n).forEach((function(t){e.attributes[t]=[],n[t].forEach((function(n){e.attributes[t].push(n.id)}))})),t.combinationsService.setFilters(e),t.paginator.paginate(1)})),this.eventEmitter.on(x.combinationGeneratorReady,(function(){v(d.default.combinations.generateCombinationsButton).prop("disabled",!1),v("body").on("click",d.default.combinations.generateCombinationsButton,(function(n){n.stopImmediatePropagation(),t.eventEmitter.emit(x.openCombinationsGenerator)}))}))}},{key:"initSubmittableInputs",value:function(){var t=this,n=this.getCombinationToken(),e=y.combinationItemForm.quantityKey,i=y.combinationItemForm.impactOnPriceKey,o=y.combinationItemForm.referenceKey,a=y.combinationItemForm.tokenKey;new m.default(y.quantityInputWrapper,(function(i){var o;return t.combinationsService.updateListedCombination(t.findCombinationId(i),(o={},(0,r.default)(o,e,i.value),(0,r.default)(o,a,n),o))})),new m.default(y.impactOnPriceInputWrapper,(function(e){var o;return t.combinationsService.updateListedCombination(t.findCombinationId(e),(o={},(0,r.default)(o,i,e.value),(0,r.default)(o,a,n),o))})),new m.default(y.referenceInputWrapper,(function(e){var i;return t.combinationsService.updateListedCombination(t.findCombinationId(e),(i={},(0,r.default)(i,o,e.value),(0,r.default)(i,a,n),i))}))}},{key:"initSortingColumns",value:function(){var t=this;this.$combinationsContainer.on("click",y.sortableColumns,(function(n){var e=v(n.currentTarget),r=e.data("sortColName");if(r){var i=e.data("sortDirection");i=i&&"desc"!==i?"desc":"asc",v(y.sortableColumns,t.$combinationsContainer).removeData("sortIsCurrent"),v(y.sortableColumns,t.$combinationsContainer).removeData("sortDirection"),v(y.sortableColumns,t.$combinationsContainer).removeAttr("data-sort-is-current"),v(y.sortableColumns,t.$combinationsContainer).removeAttr("data-sort-direction"),e.data("sortIsCurrent","true"),e.data("sortDirection",i),e.attr("data-sort-is-current","true"),e.attr("data-sort-direction",i),t.combinationsService.setOrderBy(r,i),t.paginator.paginate(1)}}))}},{key:"removeCombination",value:(e=(0,a.default)(o.default.mark((function t(n){var e,r,i=this;return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:try{e=v(n),new h.default({id:"modal-confirm-delete-combination",confirmTitle:e.data("modal-title"),confirmMessage:e.data("modal-message"),confirmButtonLabel:e.data("modal-apply"),closeButtonLabel:e.data("modal-cancel"),confirmButtonClass:"btn-danger",closable:!0},(0,a.default)(o.default.mark((function t(){var e;return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,i.combinationsService.removeCombination(i.findCombinationId(n));case 2:e=t.sent,v.growl({message:e.message}),i.eventEmitter.emit(x.refreshCombinationList);case 5:case"end":return t.stop()}}),t,i)})))).show()}catch(t){r=t.responseJSON?t.responseJSON.error:t,v.growl.error({message:r})}case 1:case"end":return t.stop()}}),t,this)}))),function(t){return e.apply(this,arguments)})},{key:"updateDefaultCombination",value:(n=(0,a.default)(o.default.mark((function t(n){var e,r,i=this;return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=this.$combinationsContainer.find(y.isDefaultInputsSelector+":checked"),r=this.findCombinationId(n),t.next=4,this.combinationsService.updateListedCombination(r,{"combination_item[is_default]":n.value,"combination_item[_token]":this.getCombinationToken()});case 4:v.each(e,(function(t,n){i.findCombinationId(n)!==r&&v(n).prop("checked",!1)}));case 5:case"end":return t.stop()}}),t,this)}))),function(t){return n.apply(this,arguments)})},{key:"getCombinationToken",value:function(){return v(y.combinationsContainer).data("combinationToken")}},{key:"findCombinationId",value:function(t){return v(t).closest("tr").find(this.combinationIdInputsSelector).val()}}]),t}();n.default=w},51588:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=s(e(99663)),i=s(e(22600)),o=s(e(26141)),a=s(e(2341)),l=s(e(68840));function s(t){return t&&t.__esModule?t:{default:t}}var d=window.$,u=function(){function t(){(0,r.default)(this,t),this.$customizationsContainer=d(o.default.customizations.customizationsContainer),this.$customizationFieldsList=d(o.default.customizations.customizationFieldsList),this.eventEmitter=window.prestashop.instance.eventEmitter,this.prototypeTemplate=this.$customizationFieldsList.data("prototype"),this.prototypeName=this.$customizationFieldsList.data("prototypeName"),this.init()}return(0,i.default)(t,[{key:"init",value:function(){var t=this;this.$customizationsContainer.on("click",o.default.customizations.addCustomizationBtn,(function(){t.addCustomizationField()})),this.$customizationsContainer.on("click",o.default.customizations.removeCustomizationBtn,(function(n){t.removeCustomizationField(n)}))}},{key:"addCustomizationField",value:function(){var t=this.getIndex(),n=this.prototypeTemplate.replace(new RegExp(this.prototypeName,"g"),this.getIndex());this.$customizationFieldsList.append(n),window.prestaShopUiKit.initToolTips(),window.prestashop.instance.translatableInput.refreshFormInputs(this.$customizationsContainer.closest("form")),this.eventEmitter.emit(a.default.customizations.rowAdded,{index:t})}},{key:"removeCustomizationField",value:function(t){var n=this,e=d(t.currentTarget);new l.default({id:"modal-confirm-delete-customization",confirmTitle:e.data("modal-title"),confirmMessage:e.data("modal-message"),confirmButtonLabel:e.data("modal-apply"),closeButtonLabel:e.data("modal-cancel"),confirmButtonClass:"btn-danger",closable:!0},(function(){e.closest(o.default.customizations.customizationFieldRow).remove(),n.eventEmitter.emit(a.default.customizations.rowRemoved)})).show()}},{key:"getIndex",value:function(){return this.$customizationFieldsList.find(o.default.customizations.customizationFieldRow).length}}]),t}();n.default=u},22386:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=d(e(99663)),i=d(e(22600)),o=d(e(26141)),a=d(e(95778)),l=d(e(68840)),s=d(e(2341));function d(t){return t&&t.__esModule?t:{default:t}}var u=window.$,c=function(){function t(n){(0,r.default)(this,t),this.router=new a.default,this.eventEmitter=n,this.$collectionContainer=u(o.default.featureValues.collectionContainer),this.$collectionRowsContainer=u(o.default.featureValues.collectionRowsContainer),this.watchFeatureSelectors(),this.watchCustomInputs(),this.watchDeleteButtons(),this.watchAddButton()}return(0,i.default)(t,[{key:"watchAddButton",value:function(){var t=this;u(o.default.featureValues.addFeatureValue).on("click",(function(){var n=t.$collectionContainer.data("prototype"),e=t.$collectionContainer.data("prototypeName"),r=u(o.default.featureValues.collectionRow,t.$collectionContainer).length,i=u(n.replace(new RegExp(e,"g"),r));t.$collectionRowsContainer.append(i),u('select[data-toggle="select2"]',i).select2()}))}},{key:"watchDeleteButtons",value:function(){var t=this;u(this.$collectionContainer).on("click",o.default.featureValues.deleteFeatureValue,(function(n){var e=u(n.currentTarget),r=e.closest(o.default.featureValues.collectionRow);new l.default({id:"modal-confirm-delete-feature-value",confirmTitle:e.data("modal-title"),confirmMessage:e.data("modal-message"),confirmButtonLabel:e.data("modal-apply"),closeButtonLabel:e.data("modal-cancel"),confirmButtonClass:"btn-danger",closable:!0},(function(){r.remove(),t.eventEmitter.emit(s.default.updateSubmitButtonState)})).show()}))}},{key:"watchCustomInputs",value:function(){u(this.$collectionContainer).on("keyup change",o.default.featureValues.customValueInput,(function(t){var n=u(t.target).closest(o.default.featureValues.collectionRow),e=!1;u(o.default.featureValues.customValueInput,n).each((function(t,n){""!==u(n).val()&&(e=!0)}));var r=u(o.default.featureValues.featureValueSelect,n).first();r.prop("disabled",e),e&&r.val("")}))}},{key:"watchFeatureSelectors",value:function(){var t=this;u(this.$collectionContainer).on("change",o.default.featureValues.featureSelect,(function(n){var e=u(n.target),r=e.val(),i=e.closest(o.default.featureValues.collectionRow),a=u(o.default.featureValues.featureValueSelect,i).first(),l=u(o.default.featureValues.customValueInput,i),s=u(o.default.featureValues.customFeatureIdInput,i);l.val(""),a.val(""),s.val(""),u.get(t.router.generate("admin_feature_get_feature_values",{idFeature:r})).then((function(t){a.prop("disabled",0===t.length),a.empty(),u.each(t,(function(t,n){"0"===n.id&&(n.id=""),a.append(u("<option></option>").attr("value",n.id).text(n.value))}))}))}))}}]),t}();n.default=c},59150:(t,n,e)=>{"use strict";var r=e(73609);Object.defineProperty(n,"__esModule",{value:!0});var i=s(e(99663)),o=s(e(22600)),a=s(e(68840)),l=s(e(26141));function s(t){return t&&t.__esModule?t:{default:t}}var d=function(){function t(){var n=this;(0,i.default)(this,t),this.$deleteProductButton=r(l.default.footer.deleteProductButton),this.$deleteProductButton.click((function(){return n.deleteProduct()}))}return(0,o.default)(t,[{key:"deleteProduct",value:function(){var t=this;new a.default({id:"modal-confirm-delete-product",confirmTitle:this.$deleteProductButton.data("modal-title"),confirmMessage:this.$deleteProductButton.data("modal-message"),confirmButtonLabel:this.$deleteProductButton.data("modal-apply"),closeButtonLabel:this.$deleteProductButton.data("modal-cancel"),confirmButtonClass:"btn-danger",closable:!0},(function(){var n=t.$deleteProductButton.data("removeUrl");r(l.default.productFormSubmitButton).prop("disabled",!0),window.location=n})).show()}}]),t}();n.default=d},85177:(t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default={"product.stock.quantity":["product[stock][quantities][quantity]","product[shortcuts][stock][quantity]"],"product.price.priceTaxExcluded":["product[pricing][retail_price][price_tax_excluded]","product[shortcuts][retail_price][price_tax_excluded]"],"product.price.priceTaxIncluded":["product[pricing][retail_price][price_tax_included]","product[shortcuts][retail_price][price_tax_included]"],"product.price.taxRulesGroupId":["product[pricing][tax_rules_group_id]","product[shortcuts][retail_price][tax_rules_group_id]"],"product.stock.hasVirtualProductFile":"product[stock][virtual_product_file][has_file]"}},30975:(t,n,e)=>{"use strict";var r=e(73609);Object.defineProperty(n,"__esModule",{value:!0});var i=u(e(99663)),o=u(e(22600)),a=u(e(44431)),l=u(e(79979)),s=u(e(85177)),d=u(e(2341));function u(t){return t&&t.__esModule?t:{default:t}}var c=function(){function t(n,e){var r=this;(0,i.default)(this,t),this.eventEmitter=e,this.mapper=new l.default(n,s.default,e,{modelUpdated:d.default.productModelUpdated,updateModel:d.default.updatedProductModel,modelFieldUpdated:d.default.updatedProductField});var o=this.mapper.getInputsFor("product.price.priceTaxExcluded");return this.precision=o.data("displayPricePrecision"),this.eventEmitter.on(d.default.updatedProductField,(function(t){return r.productFieldUpdated(t)})),{getProduct:function(){return r.getProduct()},watch:function(t,n){return r.watchProductModel(t,n)}}}return(0,o.default)(t,[{key:"getProduct",value:function(){return this.mapper.getModel().product}},{key:"watchProductModel",value:function(t,n){this.mapper.watch("product."+t,n)}},{key:"productFieldUpdated",value:function(t){this.updateProductPrices(t)}},{key:"updateProductPrices",value:function(t){if(["product.price.priceTaxIncluded","product.price.priceTaxExcluded","product.price.taxRulesGroupId"].includes(t.modelKey)){var n=this.mapper.getInputsFor("product.price.taxRulesGroupId"),e=r(":selected",n),i=void 0;try{i=new a.default(e.data("taxRate"))}catch(t){i=a.default.NaN}i.isNaN()&&(i=new a.default(0));var o=i.dividedBy(100).plus(1);switch(t.modelKey){case"product.price.priceTaxIncluded":var l=new a.default(this.getProduct().price.priceTaxIncluded);this.mapper.set("product.price.priceTaxExcluded",l.dividedBy(o).toFixed(this.precision));break;default:var s=new a.default(this.getProduct().price.priceTaxExcluded);this.mapper.set("product.price.priceTaxIncluded",s.times(o).toFixed(this.precision))}}}}]),t}();n.default=c},85682:(t,n,e)=>{"use strict";var r=e(73609);Object.defineProperty(n,"__esModule",{value:!0});var i=l(e(99663)),o=l(e(22600)),a=l(e(26141));function l(t){return t&&t.__esModule?t:{default:t}}var s=function(){function t(){return(0,i.default)(this,t),this.$previewContainer=r(a.default.modules.previewContainer),this.$selectorContainer=r(a.default.modules.selectorContainer),this.$contentContainer=r(a.default.modules.contentContainer),this.$moduleSelector=r(a.default.modules.moduleSelector),this.$selectorPreviews=r(a.default.modules.selectorPreviews),this.$moduleContents=r(a.default.modules.moduleContents),this.init(),{}}return(0,o.default)(t,[{key:"init",value:function(){var t=this;this.$previewContainer.removeClass("d-none"),this.$selectorContainer.addClass("d-none"),this.$contentContainer.addClass("d-none"),this.$selectorPreviews.addClass("d-none"),this.$moduleContents.addClass("d-none"),this.$previewContainer.on("click",a.default.modules.previewButton,(function(n){var e=r(n.target);t.selectModule(e.data("target"))})),this.$moduleSelector.on("change",(function(){return t.showSelectedModule()}))}},{key:"selectModule",value:function(t){this.$previewContainer.addClass("d-none"),this.$selectorContainer.removeClass("d-none"),this.$contentContainer.removeClass("d-none"),this.$moduleSelector.val(t),this.$moduleSelector.trigger("change")}},{key:"showSelectedModule",value:function(){this.$selectorPreviews.addClass("d-none"),this.$moduleContents.addClass("d-none");var t=this.$moduleSelector.val();r(a.default.modules.selectorPreview(t)).removeClass("d-none"),r(a.default.modules.moduleContent(t)).removeClass("d-none")}}]),t}();n.default=s},10093:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=s(e(88902)),i=s(e(99663)),o=s(e(22600)),a=s(e(96486)),l=s(e(2341));function s(t){return t&&t.__esModule?t:{default:t}}var d=window.$,u=function(){function t(n,e,r){(0,i.default)(this,t),this.eventEmitter=n,this.$productForm=e,this.$productFormSubmitButton=r}return(0,o.default)(t,[{key:"watch",value:function(){var t=this;this.$productForm.keypress((function(t){return 13!==t.which})),this.$productFormSubmitButton.prop("disabled",!0),this.initialData=this.getFormDataAsObject(),this.$productForm.submit((function(){return t.updatePartialForm()})),this.$productForm.on("keyup change dp.change",":input",(function(){return t.updateSubmitButtonState()})),this.eventEmitter.on(l.default.updateSubmitButtonState,(function(){return t.updateSubmitButtonState()})),this.watchCustomizations(),this.initFormattedTextarea()}},{key:"watchCustomizations",value:function(){var t=this;this.eventEmitter.on(l.default.customizations.rowAdded,(function(){return t.updateSubmitButtonState()})),this.eventEmitter.on(l.default.customizations.rowRemoved,(function(){return t.updateSubmitButtonState()}))}},{key:"initFormattedTextarea",value:function(){var t=this;this.eventEmitter.on("tinymceEditorSetup",(function(n){n.editor.on("change",(function(){return t.updateSubmitButtonState()}))}))}},{key:"updatePartialForm",value:function(){var t=this.getUpdatedFormData();if(null!==t){var n=this.$productForm.prop("method");if(Object.prototype.hasOwnProperty.call(t,"_method")&&(n=t._method),"PATCH"!==n)return!0;this.submitUpdatedData(t)}else alert("no fields updated");return!1}},{key:"submitUpdatedData",value:function(t){this.$productFormSubmitButton.prop("disabled",!0);var n=this.createShadowForm(t);n.appendTo("body"),n.submit()}},{key:"createShadowForm",value:function(t){var n=this,e=this.$productForm.clone();return e.empty(),e.prop("class",""),(0,r.default)(t).forEach((function(r){Array.isArray(t[r])?t[r].forEach((function(t){n.appendInputToForm(e,r,t)})):n.appendInputToForm(e,r,t[r])})),e}},{key:"updateSubmitButtonState",value:function(){var t=this.getUpdatedFormData();this.$productFormSubmitButton.prop("disabled",null===t)}},{key:"getUpdatedFormData",value:function(){var t=this,n=this.getFormDataAsObject();return(0,r.default)(this.initialData).forEach((function(e){var r=t.initialData[e];Object.prototype.hasOwnProperty.call(n,e)?a.default.isEqual(n[e],r)&&delete n[e]:n[e]=""})),0===(0,r.default)(n).length?null:(["product[_token]","_method"].forEach((function(e){Object.prototype.hasOwnProperty.call(t.initialData,e)&&(n[e]=t.initialData[e])})),n)}},{key:"getFormDataAsObject",value:function(){var t=this.$productForm.serializeArray(),n={};return t.forEach((function(t){var e=t.value;if(t.name.endsWith("[]")){var r=[];Object.prototype.hasOwnProperty.call(n,t.name)&&(r=n[t.name]),r.push(t.value),e=r}n[t.name]=e})),d('input[type="file"]',this.$productForm).each((function(t,e){d.each(d(e)[0].files,(function(t,r){n[e.name]=r}))})),n}},{key:"appendInputToForm",value:function(t,n,e){d("<input>").attr({name:n,type:"hidden",value:e}).appendTo(t)}}]),t}();n.default=u},10318:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=s(e(99663)),i=s(e(22600)),o=s(e(43284)),a=s(e(44451)),l=s(e(26141));function s(t){return t&&t.__esModule?t:{default:t}}var d=window.$,u=function(){function t(){return(0,r.default)(this,t),this.$previewButton=d(l.default.footer.previewUrlButton),this.init(),{}}return(0,i.default)(t,[{key:"init",value:function(){var t=d(l.default.seo.redirectOption.typeInput),n=d(l.default.seo.redirectOption.targetInput);new a.default(t,n);var e=window.prestashop.instance,r=e.translatableInput,i=e.translatableField,s=this.$previewButton.data("seoUrl");s||(s=""),new o.default({container:l.default.seo.container,defaultTitle:l.default.seo.defaultTitle,watchedTitle:l.default.seo.watchedTitle,defaultDescription:l.default.seo.defaultDescription,watchedDescription:l.default.seo.watchedDescription,watchedMetaUrl:l.default.seo.watchedMetaUrl,multiLanguageInput:r.localeInputSelector+":not(.d-none)",multiLanguageField:i.translationFieldSelector+".active"},s)}}]),t}();n.default=u},8690:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=l(e(85861)),i=l(e(99663)),o=l(e(22600)),a=l(e(67285));function l(t){return t&&t.__esModule?t:{default:t}}var s=window.$,d=function(){function t(n,e){return(0,i.default)(this,t),this.forceUpdateDefault=e,this.suppliersMap=(0,a.default)(n),this.$productSuppliersCollection=s(this.suppliersMap.productSuppliersCollection),this.$supplierIdsGroup=s(this.suppliersMap.supplierIdsInput).closest(".form-group"),this.$defaultSupplierGroup=s(this.suppliersMap.defaultSupplierInput).closest(".form-group"),this.$productsTable=s(this.suppliersMap.productSuppliersTable),this.$productsTableBody=s(this.suppliersMap.productsSuppliersTableBody),this.suppliers=[],this.prototypeTemplate=this.$productSuppliersCollection.data("prototype"),this.prototypeName=this.$productSuppliersCollection.data("prototypeName"),this.defaultDataForSupplier=this.getDefaultDataForSupplier(),this.init(),{}}return(0,o.default)(t,[{key:"init",value:function(){var t=this;this.memorizeCurrentSuppliers(),this.toggleTableVisibility(),this.refreshDefaultSupplierBlock(),this.$initialDefault=this.$defaultSupplierGroup.find("input:checked").first(),this.$initialDefault.length&&this.$initialDefault.closest(this.suppliersMap.checkboxContainer).addClass(this.suppliersMap.defaultSupplierClass),this.$productsTable.on("change","input",(function(){t.memorizeCurrentSuppliers()})),this.$supplierIdsGroup.on("change","input",(function(n){var e=n.currentTarget;e.checked?t.addSupplier({supplierId:e.value,supplierName:e.dataset.label}):t.removeSupplier(e.value),t.renderSuppliers(),t.toggleTableVisibility(),t.refreshDefaultSupplierBlock()}))}},{key:"toggleTableVisibility",value:function(){0!==this.getSelectedSuppliers().length?this.showTable():this.hideTable()}},{key:"addSupplier",value:function(t){if(void 0===this.suppliers[t.supplierId]){var n=(0,r.default)(this.defaultDataForSupplier);n.supplierId=t.supplierId,n.supplierName=t.supplierName,this.suppliers[t.supplierId]=n}else this.suppliers[t.supplierId].removed=!1}},{key:"removeSupplier",value:function(t){this.suppliers[t].removed=!0}},{key:"renderSuppliers",value:function(){var t=this;this.$productsTableBody.empty(),this.getSelectedSuppliers().forEach((function(n){var e=t.suppliers[n.supplierId];if(!e.removed){var r=t.prototypeTemplate.replace(new RegExp(t.prototypeName,"g"),e.supplierId);t.$productsTableBody.append(r);var i=t.suppliersMap.productSupplierRow;s(i.supplierIdInput(e.supplierId)).val(e.supplierId),s(i.supplierNamePreview(e.supplierId)).html(e.supplierName),s(i.supplierNameInput(e.supplierId)).val(e.supplierName),s(i.productSupplierIdInput(e.supplierId)).val(e.productSupplierId),s(i.referenceInput(e.supplierId)).val(e.reference),s(i.priceInput(e.supplierId)).val(e.price),s(i.currencyIdInput(e.supplierId)).val(e.currencyId)}}))}},{key:"getSelectedSuppliers",value:function(){var t=[];return this.$supplierIdsGroup.find("input:checked").each((function(n,e){t.push({supplierName:e.dataset.label,supplierId:e.value})})),t}},{key:"refreshDefaultSupplierBlock",value:function(){var t=this,n=this.getSelectedSuppliers();if(0===n.length)return this.forceUpdateDefault&&this.$defaultSupplierGroup.find("input").prop("checked",!1),void this.hideDefaultSuppliers();this.showDefaultSuppliers();var e=n.map((function(t){return t.supplierId}));this.$defaultSupplierGroup.find("input").each((function(n,r){var i=e.includes(r.value);t.forceUpdateDefault&&!i&&(r.checked=!1),r.disabled=!i})),0===this.$defaultSupplierGroup.find("input:checked").length&&this.forceUpdateDefault&&this.checkFirstAvailableDefaultSupplier(e)}},{key:"hideDefaultSuppliers",value:function(){this.$defaultSupplierGroup.addClass("d-none")}},{key:"showDefaultSuppliers",value:function(){this.$defaultSupplierGroup.removeClass("d-none")}},{key:"checkFirstAvailableDefaultSupplier",value:function(t){var n=t[0];this.$defaultSupplierGroup.find('input[value="'+n+'"]').prop("checked",!0)}},{key:"showTable",value:function(){this.$productsTable.removeClass("d-none")}},{key:"hideTable",value:function(){this.$productsTable.addClass("d-none")}},{key:"memorizeCurrentSuppliers",value:function(){var t=this;this.getSelectedSuppliers().forEach((function(n){t.suppliers[n.supplierId]={supplierId:n.supplierId,productSupplierId:s(t.suppliersMap.productSupplierRow.productSupplierIdInput(n.supplierId)).val(),supplierName:s(t.suppliersMap.productSupplierRow.supplierNameInput(n.supplierId)).val(),reference:s(t.suppliersMap.productSupplierRow.referenceInput(n.supplierId)).val(),price:s(t.suppliersMap.productSupplierRow.priceInput(n.supplierId)).val(),currencyId:s(t.suppliersMap.productSupplierRow.currencyIdInput(n.supplierId)).val(),removed:!1}}))}},{key:"getDefaultDataForSupplier",value:function(){var t=(new DOMParser).parseFromString(this.prototypeTemplate,"text/html");return{removed:!1,productSupplierId:this.getDataFromRow(this.suppliersMap.productSupplierRow.productSupplierIdInput,t),reference:this.getDataFromRow(this.suppliersMap.productSupplierRow.referenceInput,t),price:this.getDataFromRow(this.suppliersMap.productSupplierRow.priceInput,t),currencyId:this.getDataFromRow(this.suppliersMap.productSupplierRow.currencyIdInput,t)}}},{key:"getDataFromRow",value:function(t,n){return n.querySelector(t(this.prototypeName)).value}}]),t}();n.default=d},92950:(t,n,e)=>{"use strict";var r=e(73609);Object.defineProperty(n,"__esModule",{value:!0});var i=s(e(99663)),o=s(e(22600)),a=s(e(68840)),l=s(e(26141));function s(t){return t&&t.__esModule?t:{default:t}}var d=function(){function t(n,e){var r=this;return(0,i.default)(this,t),this.$typeSelector=n,this.$productForm=e,this.productId=parseInt(e.data("productId"),10),this.initialType=n.val(),this.$typeSelector.on("change",(function(t){return r.confirmTypeSubmit(t)})),{}}return(0,o.default)(t,[{key:"confirmTypeSubmit",value:function(){var t=this,n=this.$typeSelector.data("confirm-message"),e="";if(this.productId)switch(this.initialType){case l.default.productType.COMBINATIONS:e=this.$typeSelector.data("combinations-warning");break;case l.default.productType.PACK:e=this.$typeSelector.data("pack-warning");break;case l.default.productType.VIRTUAL:e=this.$typeSelector.data("virtual-warning");break;case l.default.productType.STANDARD:default:e=""}e&&(e='<div class="alert alert-warning">'+e+"</div>"),n='<div class="alert alert-info">'+n+"</div>",new a.default({id:"modal-confirm-product-type",confirmTitle:this.$typeSelector.data("modal-title"),confirmMessage:n+" "+e,confirmButtonLabel:this.$typeSelector.data("modal-apply"),closeButtonLabel:this.$typeSelector.data("modal-cancel"),closable:!1},(function(){r(l.default.productFormSubmitButton).prop("disabled",!0),t.$productForm.submit()}),(function(){t.$typeSelector.val(t.initialType)})).show()}}]),t}();n.default=d},44451:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=a(e(99663)),i=a(e(22600)),o=a(e(23026));function a(t){return t&&t.__esModule?t:{default:t}}var l=window.$,s=function(){function t(n,e){(0,r.default)(this,t),this.$redirectTypeInput=n,this.$redirectTargetInput=e,this.$redirectTargetRow=this.$redirectTargetInput.closest(".form-group"),this.$redirectTargetLabel=l(".form-control-label",this.$redirectTargetRow).first(),this.$redirectTargetHint=l(".typeahead-hint",this.$redirectTargetRow),this.buildAutoCompleteSearchInput(),this.watchRedirectType()}return(0,i.default)(t,[{key:"watchRedirectType",value:function(){var t=this;this.lastSelectedType=this.$redirectTypeInput.val(),this.$redirectTypeInput.change((function(){switch(t.$redirectTypeInput.val()){case"301-category":case"302-category":t.entitySearchInput.setRemoteUrl(t.$redirectTargetInput.data("categorySearchUrl")),t.$redirectTargetInput.prop("placeholder",t.$redirectTargetInput.data("categoryPlaceholder")),t.$redirectTargetLabel.html(t.$redirectTargetInput.data("categoryLabel")),"301-category"!==t.lastSelectedType&&"302-category"!==t.lastSelectedType&&t.entitySearchInput.setValue(null),t.$redirectTargetHint.html(t.$redirectTargetInput.data("categoryHelp")),t.showTarget();break;case"301-product":case"302-product":t.entitySearchInput.setRemoteUrl(t.$redirectTargetInput.data("productSearchUrl")),t.$redirectTargetInput.prop("placeholder",t.$redirectTargetInput.data("productPlaceholder")),t.$redirectTargetLabel.html(t.$redirectTargetInput.data("productLabel")),"301-product"!==t.lastSelectedType&&"302-product"!==t.lastSelectedType&&t.entitySearchInput.setValue(null),t.$redirectTargetHint.html(t.$redirectTargetInput.data("productHelp")),t.showTarget();break;case"404":default:t.entitySearchInput.setValue(null),t.hideTarget()}t.lastSelectedType=t.$redirectTypeInput.val()}))}},{key:"buildAutoCompleteSearchInput",value:function(){this.entitySearchInput=new o.default(this.$redirectTargetInput)}},{key:"showTarget",value:function(){this.$redirectTargetRow.removeClass("d-none")}},{key:"hideTarget",value:function(){this.$redirectTargetRow.addClass("d-none")}}]),t}();n.default=s},40720:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=a(e(99663)),i=a(e(22600)),o=a(e(26141));function a(t){return t&&t.__esModule?t:{default:t}}var l=window.$,s=function(){function t(n){return(0,r.default)(this,t),this.productFormModel=n,this.$virtualProductContainer=l(o.default.virtualProduct.container),this.$fileContentContainer=l(o.default.virtualProduct.fileContentContainer),this.init(),{}}return(0,i.default)(t,[{key:"init",value:function(){var t=this;this.productFormModel.watch("stock.hasVirtualProductFile",(function(){return t.toggleContentVisibility()})),this.toggleContentVisibility()}},{key:"toggleContentVisibility",value:function(){var t=1===Number(this.productFormModel.getProduct().stock.hasVirtualProductFile),n=0!==this.$virtualProductContainer.find(o.default.invalidField).length;t||n?this.showContent():this.hideContent()}},{key:"hideContent",value:function(){this.$fileContentContainer.addClass("d-none")}},{key:"showContent",value:function(){this.$fileContentContainer.removeClass("d-none")}}]),t}();n.default=s},34508:(t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default={methods:{isSelected:function(t,n,e){return!!Object.prototype.hasOwnProperty.call(e,n.id)&&e[n.id].attributes.includes(t)}}}},2341:(t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default={productModelUpdated:"productModelUpdated",updatedProductModel:"updatedProductModel",updatedProductField:"updatedProductField",updateSubmitButtonState:"updateSubmitButtonState",customizations:{rowRemoved:"customizationRowRemoved",rowAdded:"customizationRowAdded"},dropzone:{addedFile:"addedfile",error:"error",success:"success",languageSelected:"languageSelected",photoswipe:{destroy:"destroy",closeGallery:"closeGallery"}},combinations:{refreshPage:"refreshPage",refreshCombinationList:"refreshCombinationList",updateAttributeGroups:"updateAttributeGroups",combinationGeneratorReady:"combinationGeneratorReady",openCombinationsGenerator:"openCombinationsGenerator",clearFilters:"clearFilters",selectCombination:"selectCombination"}}},26141:(t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default={productForm:"form[name=product]",productTypeSelector:"#product_header_type",productType:{STANDARD:"standard",PACK:"pack",VIRTUAL:"virtual",COMBINATIONS:"combinations"},invalidField:".is-invalid",productFormSubmitButton:".product-form-save-button",navigationBar:"#form-nav",dropzoneImagesContainer:".product-image-dropzone",featureValues:{collectionContainer:".feature-values-collection",collectionRowsContainer:".feature-values-collection > .col-sm",collectionRow:"div.row.product-feature",featureSelect:"select.feature-selector",featureValueSelect:"select.feature-value-selector",customValueInput:".custom-values input",customFeatureIdInput:"input.custom-value-id",deleteFeatureValue:"button.delete-feature-value",addFeatureValue:".feature-value-add-button"},customizations:{customizationsContainer:".product-customizations-collection",customizationFieldsList:".product-customizations-collection ul",addCustomizationBtn:".add-customization-btn",removeCustomizationBtn:".remove-customization-btn",customizationFieldRow:".customization-field-row"},combinations:{navigationTab:"#combinations-tab-nav",externalCombinationTab:"#external-combination-tab",preloader:"#combinations-preloader",emptyState:"#combinations-empty-state",combinationsPaginatedList:"#combinations-paginated-list",combinationsContainer:"#combination_list",combinationsFiltersContainer:"#combinations_filters",combinationsGeneratorContainer:"#product_combinations_generator",combinationsTable:"#combination_list table",combinationsTableBody:"#combination_list table tbody",combinationIdInputsSelector:".combination-id-input",isDefaultInputsSelector:".combination-is-default-input",removeCombinationSelector:".remove-combination-item",combinationName:"form .card-header span",paginationContainer:"#combinations-pagination",loadingSpinner:"#productCombinationsLoading",quantityInputWrapper:".combination-quantity",impactOnPriceInputWrapper:".combination-impact-on-price",referenceInputWrapper:".combination-reference",sortableColumns:".ps-sortable-column",combinationItemForm:{quantityKey:"combination_item[quantity][value]",impactOnPriceKey:"combination_item[impact_on_price][value]",referenceKey:"combination_item[reference][value]",tokenKey:"combination_item[_token]"},editionForm:'form[name="combination_form"]',editionFormInputs:'form[name="combination_form"] input, form[name="combination_form"] textarea, form[name="combination_form"] select',editCombinationButtons:".edit-combination-item",tableRow:{combinationImg:".combination-image",combinationCheckbox:function(t){return"#combination_list_combinations_"+t+"_is_selected"},combinationIdInput:function(t){return"#combination_list_combinations_"+t+"_combination_id"},combinationNameInput:function(t){return"#combination_list_combinations_"+t+"_name"},referenceInput:function(t){return"#combination_list_combinations_"+t+"_reference_value"},impactOnPriceInput:function(t){return"#combination_list_combinations_"+t+"_impact_on_price_value"},finalPriceTeInput:function(t){return"#combination_list_combinations_"+t+"_final_price_te"},quantityInput:function(t){return"#combination_list_combinations_"+t+"_quantity_value"},isDefaultInput:function(t){return"#combination_list_combinations_"+t+"_is_default"},editButton:function(t){return"#combination_list_combinations_"+t+"_edit"},deleteButton:function(t){return"#combination_list_combinations_"+t+"_delete"}},editModal:"#combination-edit-modal",images:{selectorContainer:".combination-images-selector",imageChoice:".combination-image-choice",checkboxContainer:".form-check",checkbox:"input[type=checkbox]"},scrollBar:".attributes-list-overflow",searchInput:"#product-combinations-generate .attributes-search",generateCombinationsButton:".generate-combinations-button"},virtualProduct:{container:".virtual-product-file-container",fileContentContainer:".virtual-product-file-content"},dropzone:{configuration:{fileManager:".openfilemanager"},photoswipe:{element:".pswp"},dzTemplate:".dz-template",dzPreview:".dz-preview",sortableContainer:"#product-images-dropzone",sortableItems:"div.dz-preview:not(.disabled)",dropzoneContainer:".dropzone-container",checkbox:".md-checkbox input",shownTooltips:".tooltip.show",savedImageContainer:function(t){return'.dz-preview[data-id="'+t+'"]'},savedImage:function(t){return'.dz-preview[data-id="'+t+'"] img'},coveredPreview:".dz-preview.is-cover",windowFileManager:".dropzone-window-filemanager"},suppliers:{productSuppliers:"#product_options_suppliers",combinationSuppliers:"#combination_form_suppliers"},seo:{container:"#product_seo_serp",defaultTitle:".serp-default-title:input",watchedTitle:".serp-watched-title:input",defaultDescription:".serp-default-description",watchedDescription:".serp-watched-description",watchedMetaUrl:".serp-watched-url:input",redirectOption:{typeInput:"#product_seo_redirect_option_type",targetInput:"#product_seo_redirect_option_target"}},jsTabs:".js-tabs",jsArrow:".js-arrow",jsNavTabs:".js-nav-tabs",toggleTab:'[data-toggle="tab"]',formContentTab:"#form_content > .form-contenttab",leftArrow:".left-arrow",rightArrow:".right-arrow",footer:{previewUrlButton:".preview-url-button",deleteProductButton:".delete-product-button"},categories:{categoriesContainer:".js-categories-container",categoryTree:".js-categories-tree",treeElement:".category-tree-element",treeElementInputs:".category-tree-inputs",checkboxInput:"[type=checkbox]",checkedCheckboxInputs:"[type=checkbox]:checked",checkboxName:function(t){return"product[categories][product_categories]["+t+"][is_associated]"},materialCheckbox:".md-checkbox",radioInput:"[type=radio]",defaultRadioInput:"[type=radio]:checked",radioName:function(t){return"product[categories][product_categories]["+t+"][is_default]"},tagsContainer:"#categories-tags-container",searchInput:"#ps-select-product-category",fieldset:".tree-fieldset",loader:".categories-tree-loader",childrenList:".children-list",everyItems:".less, .more",expandAllButton:"#categories-tree-expand",reduceAllButton:"#categories-tree-reduce"},modules:{previewContainer:".module-render-container.all-modules",previewButton:".modules-list-button",selectorContainer:".module-selection",moduleSelector:".modules-list-select",selectorPreviews:".module-selection .module-render-container",selectorPreview:function(t){return".module-selection .module-render-container."+t},contentContainer:".module-contents",moduleContents:".module-contents .module-render-container",moduleContent:function(t){return".module-contents .module-render-container."+t}}}},57867:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.getAllAttributeGroups=n.getProductAttributeGroups=void 0;var r=o(e(94942)),i=o(e(36803));function o(t){return t&&t.__esModule?t:{default:t}}var a,l,s=new(o(e(95778)).default),d=window.$,u=n.getProductAttributeGroups=(a=(0,i.default)(r.default.mark((function t(n){return r.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",d.get(s.generate("admin_products_attribute_groups",{productId:n})));case 1:case"end":return t.stop()}}),t,void 0)}))),function(t){return a.apply(this,arguments)}),c=n.getAllAttributeGroups=(l=(0,i.default)(r.default.mark((function t(){return r.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",d.get(s.generate("admin_all_attribute_groups")));case 1:case"end":return t.stop()}}),t,void 0)}))),function(){return l.apply(this,arguments)});n.default={getProductAttributeGroups:u,getAllAttributeGroups:c}},13014:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.getCategories=void 0;var r=o(e(94942)),i=o(e(36803));function o(t){return t&&t.__esModule?t:{default:t}}var a,l=new(o(e(95778)).default),s=window.$,d=n.getCategories=(a=(0,i.default)(r.default.mark((function t(){return r.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",s.get(l.generate("admin_categories_get_categories_tree")));case 1:case"end":return t.stop()}}),t,void 0)}))),function(){return a.apply(this,arguments)});n.default={getCategories:d}},73927:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=a(e(99663)),i=a(e(22600)),o=a(e(95778));function a(t){return t&&t.__esModule?t:{default:t}}var l=window.$,s=function(){function t(n){(0,r.default)(this,t),this.productId=n,this.router=new o.default,this.filters={},this.orderBy=null,this.orderWay=null}return(0,i.default)(t,[{key:"fetch",value:function(t,n){var e="product_combinations_"+this.productId,r={};return r.productId=this.productId,r[e]={},r[e].offset=t,r[e].limit=n,r[e].filters=this.filters,null!==this.orderBy&&(r[e].orderBy=this.orderBy),null!==this.orderWay&&(r[e].sortOrder=this.orderWay),l.get(this.router.generate("admin_products_combinations",r))}},{key:"removeCombination",value:function(t){return l.ajax({url:this.router.generate("admin_products_combinations_remove_combination",{combinationId:t}),type:"DELETE"})}},{key:"updateListedCombination",value:function(t,n){return l.ajax({url:this.router.generate("admin_products_combinations_update_combination_from_listing",{combinationId:t}),data:n,type:"PATCH"})}},{key:"generateCombinations",value:function(t){return l.ajax({url:this.router.generate("admin_products_combinations_generate",{productId:this.productId}),data:t,method:"POST"})}},{key:"getCombinationIds",value:function(){return l.get(this.router.generate("admin_products_combinations_ids",{productId:this.productId}))}},{key:"setOrderBy",value:function(t,n){this.orderBy=t,this.orderWay="desc"===n.toLowerCase()?"DESC":"ASC"}},{key:"getFilters",value:function(){return this.filters}},{key:"setFilters",value:function(t){this.filters=t}}]),t}();n.default=s},86211:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.removeProductImage=n.saveImagePosition=n.replaceImage=n.saveImageInformations=n.getProductImages=void 0;var r=a(e(88902)),i=a(e(94942)),o=a(e(36803));function a(t){return t&&t.__esModule?t:{default:t}}var l,s,d,u,c,p=new(a(e(95778)).default),m=window.$,f=n.getProductImages=(l=(0,o.default)(i.default.mark((function t(n){var e;return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=p.generate("admin_products_v2_get_images",{productId:n}),t.abrupt("return",m.get(e));case 2:case"end":return t.stop()}}),t,void 0)}))),function(t){return l.apply(this,arguments)}),g=n.saveImageInformations=(s=(0,o.default)(i.default.mark((function t(n,e,o){var a,l;return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=p.generate("admin_products_v2_update_image",{productImageId:n.image_id}),(l={})[o+"[is_cover]"]=n.is_cover?1:0,(0,r.default)(n.legends).forEach((function(t){l[o+"[legend]["+t+"]"]=n.legends[t]})),l[o+"[_token]"]=e,t.abrupt("return",m.ajax(a,{method:"PATCH",data:l}));case 6:case"end":return t.stop()}}),t,void 0)}))),function(t,n,e){return s.apply(this,arguments)}),A=n.replaceImage=(d=(0,o.default)(i.default.mark((function t(n,e,r,o){var a,l;return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=p.generate("admin_products_v2_update_image",{productImageId:n.image_id}),(l=new FormData).append(r+"[file]",e),l.append(r+"[_token]",o),l.append("_method","PATCH"),t.abrupt("return",m.ajax(a,{method:"POST",data:l,processData:!1,contentType:!1}));case 6:case"end":return t.stop()}}),t,void 0)}))),function(t,n,e,r){return d.apply(this,arguments)}),h=n.saveImagePosition=(u=(0,o.default)(i.default.mark((function t(n,e,r,o){var a,l;return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return a=p.generate("admin_products_v2_update_image",{productImageId:n}),(l={})[r+"[position]"]=e,l[r+"[_token]"]=o,t.abrupt("return",m.ajax(a,{method:"PATCH",data:l}));case 5:case"end":return t.stop()}}),t,void 0)}))),function(t,n,e,r){return u.apply(this,arguments)}),C=n.removeProductImage=(c=(0,o.default)(i.default.mark((function t(n){var e;return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=p.generate("admin_products_v2_delete_image",{productImageId:n}),t.abrupt("return",m.post(e));case 2:case"end":return t.stop()}}),t,void 0)}))),function(t){return c.apply(this,arguments)});n.default={getProductImages:f,saveImageInformations:g,replaceImage:A,saveImagePosition:h,removeProductImage:C}},67285:(t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(t){var n=t+"_product_suppliers",e=function(t,e){return n+"_"+t+"_"+e};return{productSuppliersCollection:""+n,supplierIdsInput:t+"_supplier_ids",defaultSupplierInput:t+"_default_supplier_id",productSuppliersTable:n+" table",productsSuppliersTableBody:n+" table tbody",defaultSupplierClass:"default-supplier",productSupplierRow:{supplierIdInput:function(t){return e(t,"supplier_id")},supplierNameInput:function(t){return e(t,"supplier_name")},productSupplierIdInput:function(t){return e(t,"product_supplier_id")},referenceInput:function(t){return e(t,"reference")},priceInput:function(t){return e(t,"price_tax_excluded")},currencyIdInput:function(t){return e(t,"currency_id")},supplierNamePreview:function(t){return"#product_supplier_row_"+t+" .supplier_name .preview"}},checkboxContainer:".form-check"}}},32517:(t,n,e)=>{"use strict";var r,i=(r=e(72100))&&r.__esModule?r:{default:r},o=[];function a(t){o.forEach((function(n){if(t.path&&t.path.length){for(var e=0;e<t.path.length;e+=1)if(t.path[e]===n.node)return;n.callback(t)}else n.node.contains(t.target)||n.callback(t)}))}function l(t,n){o.length||document.addEventListener("click",a,!1),o.push({node:t,callback:n})}function s(t,n){(o=o.filter((function(e){return e.node!==t||!!n&&e.callback!==n}))).length||document.removeEventListener("click",a,!1)}i.default.directive("click-outside",{bind:function(t,n){s(t,n.value),"function"==typeof n.value&&l(t,n.value)},update:function(t,n){n.value!==n.oldValue&&(s(t,n.oldValue),l(t,n.value))},unbind:function(t,n){s(t,n.value)}})},42157:(t,n,e)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=a(e(88902)),i=a(e(99663)),o=a(e(22600));function a(t){return t&&t.__esModule?t:{default:t}}var l=function(){function t(){(0,i.default)(this,t)}return(0,o.default)(t,[{key:"interpolate",value:function(t,n){if(!n)return[t];var e=t;return(0,r.default)(n).forEach((function(t){var r=t;-1===r.indexOf("%")&&-1===r.indexOf("{")&&(r="{"+r+"}"),e=e.replace(r,n[t])})),[e]}}]),t}();n.default=l},66313:(t,n)=>{"use strict";Object.defineProperty(n,"X",{value:!0}),n.Z={name:"Serp",props:{url:{type:String,default:"https://www.example.com/"},description:{type:String,default:""},title:{type:String,default:""}},computed:{displayedTitle:function(){return this.title.length>70?this.title.substring(0,70)+"...":this.title},displayedDescription:function(){return this.description.length>150?this.description.substring(0,150)+"...":this.description}}}},13517:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r=c(e(94942)),i=c(e(36803)),o=c(e(73927)),a=c(e(26141)),l=c(e(2341)),s=c(e(56995)),d=c(e(95778)),u=c(e(36125));function c(t){return t&&t.__esModule?t:{default:t}}var p,m=window.$,f=l.default.combinations,g=new d.default;n.Z={name:"CombinationModal",components:{Modal:s.default,History:u.default},data:function(){return{combinationsService:null,combinationIds:[],selectedCombinationId:null,selectedCombinationName:null,previousCombinationId:null,nextCombinationId:null,editCombinationUrl:"",loadingCombinationForm:!1,submittingCombinationForm:!1,combinationList:null,hasSubmittedCombinations:!1,combinationsHistory:[],showConfirm:!1,temporarySelection:null,isFormUpdated:!1,isClosing:!1}},props:{productId:{type:Number,required:!0},eventEmitter:{type:Object,required:!0},emptyImageUrl:{type:String,required:!0}},mounted:function(){var t=this;this.combinationList=m(a.default.combinations.combinationsContainer),this.combinationsService=new o.default(this.productId),this.initCombinationIds(),this.watchEditButtons(),this.eventEmitter.on(f.refreshCombinationList,(function(){return t.initCombinationIds()}))},methods:{watchEditButtons:function(){var t=this;this.combinationList.on("click",a.default.combinations.editCombinationButtons,(function(n){n.stopImmediatePropagation();var e=m(n.target).closest("tr");t.selectedCombinationId=Number(e.find(a.default.combinations.combinationIdInputsSelector).val()),t.hasSubmittedCombinations=!1}))},initCombinationIds:(p=(0,i.default)(r.default.mark((function t(){return r.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.combinationsService.getCombinationIds();case 2:this.combinationIds=t.sent;case 3:case"end":return t.stop()}}),t,this)}))),function(){return p.apply(this,arguments)}),frameLoading:function(){this.applyIframeStyling()},onFrameLoaded:function(){var t=this;this.loadingCombinationForm=!1,this.submittingCombinationForm=!1;var n=this.$refs.iframe.contentDocument.body;this.applyIframeStyling(),this.selectedCombinationName=n.querySelector(a.default.combinations.combinationName).innerHTML,n.querySelectorAll(a.default.combinations.editionFormInputs).forEach((function(n){n.addEventListener("keyup",(function(){t.isFormUpdated=!0})),n.addEventListener("change",(function(){t.isFormUpdated=!0})),t.$refs.iframe.contentDocument.addEventListener("datepickerChange",(function(){t.isFormUpdated=!0}))}))},applyIframeStyling:function(){this.$refs.iframe.contentDocument.body.style.overflowX="hidden"},tryClose:function(){this.isFormUpdated?(this.isClosing=!0,this.showConfirmModal()):this.closeModal()},closeModal:function(){this.submittingCombinationForm||(this.hasSubmittedCombinations&&this.eventEmitter.emit(f.refreshPage),this.hasSubmittedCombinations=!1,this.selectedCombinationId=null,this.combinationsHistory=[])},navigateToCombination:function(t){null!==t&&(this.isFormUpdated?(this.temporarySelection=t,this.showConfirmModal()):this.selectedCombinationId=t)},showPrevious:function(){this.navigateToCombination(this.previousCombinationId)},showNext:function(){this.navigateToCombination(this.nextCombinationId)},selectCombination:function(t){this.navigateToCombination(t.id)},confirmSelection:function(){this.isClosing?(this.closeModal(),this.isClosing=!1,this.hideConfirmModal()):(this.selectedCombinationId=this.temporarySelection,this.hideConfirmModal())},submitForm:function(){this.submittingCombinationForm=!0;var t=this.$refs.iframe.contentDocument.body;t.querySelector(a.default.combinations.editionForm).submit(),this.hasSubmittedCombinations=!0;var n={id:this.selectedCombinationId,title:t.querySelector(a.default.combinations.combinationName).innerHTML};(this.combinationsHistory[0]&&this.combinationsHistory[0].id!==n.id||!this.combinationsHistory.length)&&(this.combinationsHistory=this.combinationsHistory.filter((function(t){return t.id!==n.id})),this.combinationsHistory.unshift(n)),this.isFormUpdated=!1},showConfirmModal:function(){this.showConfirm=!0},hideConfirmModal:function(){this.isClosing=!1,this.showConfirm=!1},preventClose:function(t){t.stopPropagation(),t.preventDefault()}},watch:{selectedCombinationId:function(t){if(this.isFormUpdated=!1,null===t)return this.previousCombinationId=null,this.nextCombinationId=null,void(this.editCombinationUrl=null);this.loadingCombinationForm=!0,this.editCombinationUrl=g.generate("admin_products_combinations_edit_combination",{combinationId:t,liteDisplaying:1});var n=this.combinationIds.indexOf(t);-1===n?(this.previousCombinationId=null,this.nextCombinationId=null):(this.previousCombinationId=0===n?null:this.combinationIds[n-1],this.nextCombinationId=n===this.combinationIds.length-1?null:this.combinationIds[n+1])}}}},19177:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r=o(e(2341)),i=o(e(51063));function o(t){return t&&t.__esModule?t:{default:t}}var a=r.default.combinations;n.Z={name:"CombinationHistory",data:function(){return{paginatedDatas:[],currentPage:1}},components:{Pagination:i.default},props:{combinationsList:{type:Array,default:function(){return[]}},selectedCombination:{type:Number,required:!0},emptyImageUrl:{type:String,required:!0}},computed:{areCombinationsNotEmpty:function(){return this.combinationsList.length>0}},mounted:function(){var t=this;this.$parent.$on(a.selectCombination,(function(n){t.selectedCombination={id:n}}))},methods:{selectCombination:function(t){this.$emit(a.selectCombination,t)},preventClose:function(t){t.stopPropagation(),t.preventDefault()},constructDatas:function(t){this.paginatedDatas=t.paginatedDatas,this.currentPage=t.currentPage},isSelected:function(t){return this.selectedCombination===t||1===this.combinationsList.length?"selected":null}}}},76182:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r=m(e(46593)),i=m(e(94942)),o=m(e(36803)),a=m(e(95778)),l=e(86211),s=m(e(26141)),d=m(e(2341)),u=m(e(56995)),c=m(e(69671)),p=m(e(9080));function m(t){return t&&t.__esModule?t:{default:t}}var f,g,A,h,C,b=window.$,$=new a.default,v=s.default.dropzone,x=d.default.dropzone;n.Z={name:"Dropzone",data:function(){return{dropzone:null,configuration:{url:$.generate("admin_products_v2_add_image"),clickable:v.configuration.fileManager,previewTemplate:null,thumbnailWidth:130,thumbnailHeight:130,thumbnailMethod:"crop"},files:[],selectedFiles:[],translations:[],loading:!0,selectedLocale:null,buttonLoading:!1,isModalShown:!1,galleryOpened:!1}},props:{productId:{type:Number,required:!0},locales:{type:Array,required:!0},formName:{type:String,required:!0},token:{type:String,required:!0}},components:{DropzoneWindow:c.default,Modal:u.default,DropzonePhotoSwipe:p.default},computed:{},mounted:function(){this.watchLocaleChanges(),this.initProductImages()},methods:{watchLocaleChanges:function(){var t=this;this.selectedLocale=this.locales[0],window.prestashop.instance.eventEmitter.on(x.languageSelected,(function(n){var e=n.selectedLocale;t.locales.forEach((function(n){n.iso_code===e&&(t.selectedLocale=n)}))}))},initProductImages:(C=(0,o.default)(i.default.mark((function t(){var n,e=this;return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,(0,l.getProductImages)(this.productId);case 3:n=t.sent,this.loading=!1,this.initDropZone(),n.forEach((function(t){e.dropzone.displayExistingFile(t,t.image_url)})),t.next=12;break;case 9:t.prev=9,t.t0=t.catch(0),window.$.growl.error({message:t.t0});case 12:case"end":return t.stop()}}),t,this,[[0,9]])}))),function(){return C.apply(this,arguments)}),initDropZone:function(){var t=this;this.configuration.previewTemplate=document.querySelector(v.dzTemplate).innerHTML,this.configuration.paramName=this.formName+"[file]",this.configuration.method="POST",this.configuration.params={},this.configuration.params[this.formName+"[product_id]"]=this.productId,this.configuration.params[this.formName+"[_token]"]=this.token,this.sortableContainer=b("#product-images-dropzone"),this.dropzone=new window.Dropzone(v.dropzoneContainer,this.configuration),this.sortableContainer.sortable({items:v.sortableItems,opacity:.9,containment:"parent",distance:32,tolerance:"pointer",cursorAt:{left:64,top:64},cancel:".disabled",stop:function(n,e){var r=e.item.index()-1;t.updateImagePosition(e.item.data("id"),r)},start:function(n,e){t.sortableContainer.find(v.dzPreview).css("zIndex",1),e.item.css("zIndex",10)}}),this.dropzone.on(x.addedFile,(function(n){n.previewElement.dataset.id=n.image_id,n.is_cover&&n.previewElement.classList.add("is-cover"),n.previewElement.addEventListener("click",(function(){var e=n.previewElement.querySelector(v.checkbox);e.checked=!e.checked,e.checked?t.selectedFiles.includes(n)||(t.selectedFiles.push(n),n.previewElement.classList.toggle("selected")):(t.selectedFiles=t.selectedFiles.filter((function(t){return t!==n})),n.previewElement.classList.toggle("selected"))})),t.files.push(n)})),this.dropzone.on(x.error,(function(n,e){b.growl.error({message:e.error}),t.dropzone.removeFile(n)})),this.dropzone.on(x.success,(function(t,n){t.image_id=n.image_id,t.is_cover=n.is_cover,t.legends=n.legends,t.previewElement.dataset.id=t.image_id,t.is_cover&&t.previewElement.classList.add("is-cover")}))},selectAll:function(){this.selectedFiles=this.files,this.editCheckboxes(!0)},unselectAll:function(){this.editCheckboxes(!1),this.selectedFiles=[],this.removeTooltips()},removeSelection:(h=(0,o.default)(i.default.mark((function t(){var n,e,a,s=this;return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=!1,e=!1,a=this.selectedFiles.length,t.next=5,r.default.all(this.selectedFiles.map(function(){var t=(0,o.default)(i.default.mark((function t(r){return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,(0,l.removeProductImage)(r.image_id);case 3:s.dropzone.removeFile(r),s.files=s.files.filter((function(t){return r!==t})),s.selectedFiles=s.selectedFiles.filter((function(t){return r!==t})),r.is_cover&&(e=!0),t.next=12;break;case 9:t.prev=9,t.t0=t.catch(0),n=t.t0.responseJSON?t.t0.responseJSON.error:t.t0;case 12:case"end":return t.stop()}}),t,s,[[0,9]])})));return function(n){return t.apply(this,arguments)}}()));case 5:this.removeTooltips(),n?b.growl.error({message:n}):b.growl({message:this.$t("delete.success",{"%filesNb%":a})}),e&&this.resetDropzone(),this.hideModal();case 9:case"end":return t.stop()}}),t,this)}))),function(){return h.apply(this,arguments)}),editCheckboxes:function(t){this.selectedFiles.forEach((function(n){var e=n.previewElement.querySelector(v.checkbox);e.checked=void 0!==t?t:!e.checked,n.previewElement.classList.toggle("selected",t)}))},removeTooltips:function(){b(v.shownTooltips).each((function(t,n){b(n).remove()}))},saveSelectedFile:(A=(0,o.default)(i.default.mark((function t(n,e){var r,o,a,s;return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(this.selectedFiles.length){t.next=2;break}return t.abrupt("return");case 2:return this.buttonLoading=!0,(r=this.selectedFiles[0]).is_cover=e,r.legends=n,t.prev=6,t.next=9,(0,l.saveImageInformations)(r,this.token,this.formName);case 9:o=t.sent,a=document.querySelector(v.savedImageContainer(o.image_id)),o.is_cover&&(a.classList.contains("is-cover")||((s=document.querySelector(v.coveredPreview))&&s.classList.remove("is-cover"),a.classList.add("is-cover"),this.files=this.files.map((function(t){return t.image_id!==o.image_id&&t.is_cover&&(t.is_cover=!1),t})))),b.growl({message:this.$t("window.settingsUpdated")}),this.buttonLoading=!1,t.next=20;break;case 16:t.prev=16,t.t0=t.catch(6),b.growl.error({message:t.t0.error}),this.buttonLoading=!1;case 20:case"end":return t.stop()}}),t,this,[[6,16]])}))),function(t,n){return A.apply(this,arguments)}),manageReplacedFile:(g=(0,o.default)(i.default.mark((function t(n){var e,r;return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e=this.selectedFiles[0],this.buttonLoading=!0,t.prev=2,t.next=5,(0,l.replaceImage)(e,n.target.files[0],this.formName,this.token);case 5:r=t.sent,document.querySelector(v.savedImage(r.image_id)).src=r.image_url,b.growl({message:this.$t("window.imageReplaced")}),this.buttonLoading=!1,t.next=16;break;case 12:t.prev=12,t.t0=t.catch(2),b.growl.error({message:t.t0.responseJSON.error}),this.buttonLoading=!1;case 16:case"end":return t.stop()}}),t,this,[[2,12]])}))),function(t){return g.apply(this,arguments)}),updateImagePosition:(f=(0,o.default)(i.default.mark((function t(n,e){return i.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,(0,l.saveImagePosition)(n,e,this.formName,this.token);case 3:t.next=9;break;case 5:t.prev=5,t.t0=t.catch(0),this.sortableContainer.sortable("cancel"),b.growl.error({message:t.t0.responseJSON.error});case 9:case"end":return t.stop()}}),t,this,[[0,5]])}))),function(t,n){return f.apply(this,arguments)}),resetDropzone:function(){var t=this;this.loading=!0,this.files.forEach((function(n){t.dropzone.removeFile(n)})),this.dropzone.destroy(),this.dropzone=null,this.initProductImages()},showModal:function(){this.isModalShown=!0},hideModal:function(){this.isModalShown=!1},toggleGallery:function(){this.galleryOpened=!this.galleryOpened}}}},99681:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r=l(e(58832)),i=l(e(38411)),o=l(e(26141)),a=l(e(2341));function l(t){return t&&t.__esModule?t:{default:t}}var s=o.default.dropzone.photoswipe,d=a.default.dropzone.photoswipe;n.Z={name:"DropzonePhotoSwipe",props:{files:{type:Array,default:function(){return[]}}},mounted:function(){var t=this,n=document.querySelector(s.element);if(n){var e={index:0,shareButtons:[{id:"download",label:this.$t("window.downloadImage"),url:"{{raw_image_url}}",download:!0}]},o=this.files.map((function(t){return t.src=t.dataURL,t.h=t.height,t.w=t.width,t})),a=new r.default(n,i.default,o,e);a.init(),a.listen(d.destroy,(function(){t.$emit(d.closeGallery)}))}},methods:{}}},30356:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r,i=((r=e(26141))&&r.__esModule?r:{default:r}).default.dropzone;n.Z={name:"DropzoneWindow",props:{selectedFiles:{type:Array,default:function(){return[]}},files:{type:Array,default:function(){return[]}},locales:{type:Array,required:!0},selectedLocale:{type:Object,default:function(){}},loading:{type:Boolean,default:!1}},data:function(){return{captionValue:{},coverData:!1}},watch:{selectedFiles:function(t){var n=this;t.length>1?(this.captionValue={},this.locales.forEach((function(t){n.captionValue[t]=""}))):(this.captionValue=this.selectedFile.legends,this.coverData=this.selectedFile.is_cover)}},computed:{selectedFile:function(){return 1===this.selectedFiles.length?this.selectedFiles[0]:null},isCover:function(){return!(!this.selectedFile||!this.selectedFile.is_cover)},showCoverTooltip:function(){return!!this.isCover&&"pstooltip"}},mounted:function(){window.prestaShopUiKit.initToolTips(),this.captionValue=this.selectedFile.legends,this.coverData=this.selectedFile.is_cover},updated:function(){window.prestaShopUiKit.initToolTips()},methods:{watchFiles:function(t){this.$emit("replacedFile",t)},openFileManager:function(){document.querySelector(i.windowFileManager).click()},coverChanged:function(t){this.coverData=t.target.value},prevent:function(t){t.preventDefault(),t.stopPropagation()}}}},84813:(t,n)=>{"use strict";Object.defineProperty(n,"X",{value:!0}),n.Z={name:"FilterDropdown",data:function(){return{selectedFilters:[]}},props:{parentId:{type:Number,required:!0},children:{type:Array,required:!0},label:{type:String,required:!0}},mounted:function(){this.$parent.$on("clearAll",this.clear)},computed:{nbFiles:function(){return this.selectedFilters.length>0?"("+this.selectedFilters.length+")":null}},methods:{isChecked:function(t){return this.selectedFilters.includes(t)},toggleFilter:function(t){this.selectedFilters.includes(t)?(this.$emit("removeFilter",t,this.parentId),this.selectedFilters=this.selectedFilters.filter((function(n){return n.id!==t.id}))):(this.$emit("addFilter",t,this.parentId),this.selectedFilters.push(t))},preventClose:function(t){t.stopPropagation()},clear:function(){this.selectedFilters=[]}}}},80003:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r=o(e(47518)),i=o(e(93858));function o(t){return t&&t.__esModule?t:{default:t}}var a=o(e(2341)).default.combinations;n.Z={name:"Filters",data:function(){return{selectedFilters:{}}},props:{filters:{type:Array,required:!0},eventEmitter:{type:Object,required:!0}},components:{FilterDropdown:i.default},computed:{selectedFiltersNumber:function(){return this.selectedFilters?(0,r.default)(this.selectedFilters).reduce((function(t,n){return t+n.length}),0):0}},mounted:function(){var t=this;this.eventEmitter.on(a.clearFilters,(function(){return t.clearAll()}))},methods:{addFilter:function(t,n){this.selectedFilters[n]||this.$set(this.selectedFilters,n,[]),this.selectedFilters[n].push(t),this.updateFilters()},removeFilter:function(t,n){this.selectedFilters[n]&&(this.selectedFilters[n]=this.selectedFilters[n].filter((function(n){return t.id!==n.id})),this.updateFilters())},clearAll:function(){this.selectedFilters=[],this.$emit("clearAll"),this.eventEmitter.emit(a.updateAttributeGroups,this.selectedFilters)},updateFilters:function(){this.eventEmitter.emit(a.updateAttributeGroups,this.selectedFilters)}}}},58530:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r=d(e(88902)),i=d(e(34508)),o=d(e(26141)),a=d(e(84772)),l=d(e(53943)),s=d(e(73481));function d(t){return t&&t.__esModule?t:{default:t}}var u=window.$,c=o.default.combinations;n.Z={name:"AttributesSelector",props:{attributeGroups:{type:Array,default:function(){return[]}},selectedAttributeGroups:{type:Object,default:function(){}}},mixins:[i.default],data:function(){return{dataSetConfig:{},searchSource:{},scrollbar:null,hasGeneratedCombinations:!1,checkboxList:[]}},mounted:function(){this.initDataSetConfig(),this.scrollbar=new a.default(c.scrollBar);var t=u(c.searchInput);new s.default(t,this.dataSetConfig)},watch:{selectedAttributeGroups:function(t){(0,r.default)(t).length<=0&&(this.checkboxList=[])}},methods:{initDataSetConfig:function(){var t=this,n=this.getSearchableAttributes();this.searchSource=new l.default({datumTokenizer:l.default.tokenizers.obj.whitespace("name","value","color","group_name"),queryTokenizer:l.default.tokenizers.whitespace,local:n});var e={source:this.searchSource,display:"name",value:"name",minLength:1,onSelect:function(n,e,r){var i={id:n.group_id,name:n.group_name};t.sendAddEvent(n,i),r.typeahead("val","")},onClose:function(t,n){return n.typeahead("val",""),!0},templates:{suggestion:function(t){return'<div class="px-2">'+t.group_name+": "+t.name+"</div>"}}};this.dataSetConfig=e},getSearchableAttributes:function(){var t=this,n=[];return this.attributeGroups.forEach((function(e){e.attributes.forEach((function(r){t.isSelected(r,e,t.selectedAttributeGroups)||(r.group_name=e.name,r.group_id=e.id,n.push(r))}))})),n},getSelectedClass:function(t,n){return this.isSelected(t,n,this.selectedAttributeGroups)?"selected":"unselected"},sendRemoveEvent:function(t,n){this.$emit("removeSelected",{selectedAttribute:t,selectedAttributeGroup:n}),this.updateSearchableAttributes(),this.updateCheckboxes(n)},sendChangeEvent:function(t,n){this.$emit("changeSelected",{selectedAttribute:t,attributeGroup:n}),this.updateSearchableAttributes(),this.updateCheckboxes(n)},sendAddEvent:function(t,n){this.$emit("addSelected",{selectedAttribute:t,attributeGroup:n}),this.updateSearchableAttributes(),this.updateCheckboxes(n)},updateSearchableAttributes:function(){var t=this.getSearchableAttributes();this.searchSource.clear(),this.searchSource.add(t)},toggleAll:function(t){this.checkboxList.includes(t)?this.checkboxList=this.checkboxList.filter((function(n){return n.id!==t.id})):this.checkboxList.push(t),this.$emit("toggleAll",{attributeGroup:t,select:this.checkboxList.includes(t)})},updateCheckboxes:function(t){this.selectedAttributeGroups[t.id]&&!this.checkboxList.includes(t)&&this.selectedAttributeGroups[t.id].attributes.length===t.attributes.length?this.checkboxList.push(t):this.checkboxList=this.checkboxList.filter((function(n){return n.id!==t.id}))}}}},60054:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0});var r=f(e(88239)),i=f(e(88106)),o=f(e(94942)),a=f(e(36803)),l=f(e(88902)),s=f(e(73927)),d=f(e(23681)),u=f(e(34508)),c=e(57867),p=f(e(56995)),m=f(e(2341));function f(t){return t&&t.__esModule?t:{default:t}}var g,A,h=window.$,C=m.default.combinations;n.Z={name:"CombinationGenerator",data:function(){return{attributeGroups:[],selectedAttributeGroups:{},combinationsService:new s.default(this.productId),isModalShown:!1,preLoading:!0,loading:!1,scrollbar:null,hasGeneratedCombinations:!1}},props:{productId:{type:Number,required:!0},eventEmitter:{type:Object,required:!0}},mixins:[u.default],components:{Modal:p.default,AttributesSelector:d.default},computed:{generatedCombinationsNb:function(){var t=this,n=(0,l.default)(this.selectedAttributeGroups),e=0;return n.forEach((function(n){t.selectedAttributeGroups[n].attributes.length&&(0===e&&(e=1),e*=t.selectedAttributeGroups[n].attributes.length)})),e}},mounted:function(){var t=this;this.initAttributeGroups(),this.eventEmitter.on(C.openCombinationsGenerator,(function(){return t.showModal()}))},methods:{initAttributeGroups:(A=(0,a.default)(o.default.mark((function t(){return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,(0,c.getAllAttributeGroups)();case 3:this.attributeGroups=t.sent,window.prestaShopUiKit.init(),this.preLoading=!1,this.eventEmitter.emit(C.combinationGeneratorReady),t.next=12;break;case 9:t.prev=9,t.t0=t.catch(0),window.$.growl.error({message:t.t0});case 12:case"end":return t.stop()}}),t,this,[[0,9]])}))),function(){return A.apply(this,arguments)}),showModal:function(){this.preLoading||(document.querySelector("body").classList.add("overflow-hidden"),this.hasGeneratedCombinations=!1,this.selectedAttributeGroups={},this.isModalShown=!0)},closeModal:function(){this.isModalShown=!1,document.querySelector("body").classList.remove("overflow-hidden"),this.hasGeneratedCombinations&&this.eventEmitter.emit(C.refreshCombinationList)},generateCombinations:(g=(0,a.default)(o.default.mark((function t(){var n,e,r=this;return o.default.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return this.loading=!0,n={attributes:{}},(0,l.default)(this.selectedAttributeGroups).forEach((function(t){n.attributes[t]=[],r.selectedAttributeGroups[t].attributes.forEach((function(e){n.attributes[t].push(e.id)}))})),t.prev=3,t.next=6,this.combinationsService.generateCombinations(n);case 6:e=t.sent,h.growl({message:this.$t("generator.success",{"%combinationsNb%":e.combination_ids.length})}),this.selectedAttributeGroups={},this.hasGeneratedCombinations=!0,t.next=15;break;case 12:t.prev=12,t.t0=t.catch(3),t.t0.responseJSON&&t.t0.responseJSON.error?h.growl.error({message:t.t0.responseJSON.error}):h.growl.error({message:t.t0});case 15:this.loading=!1;case 16:case"end":return t.stop()}}),t,this,[[3,12]])}))),function(){return g.apply(this,arguments)}),changeSelected:function(t){var n=t.selectedAttribute,e=t.attributeGroup;this.isSelected(n,e,this.selectedAttributeGroups)?this.removeSelected({selectedAttribute:n,selectedAttributeGroup:e}):this.addSelected({selectedAttribute:n,attributeGroup:e})},addSelected:function(t){var n=t.selectedAttribute,e=t.attributeGroup;if(!this.isSelected(n,e,this.selectedAttributeGroups)){if(!this.selectedAttributeGroups[e.id]){var o=(0,i.default)({},e.id,{id:e.id,name:e.name,attributes:[]});this.selectedAttributeGroups=(0,r.default)({},this.selectedAttributeGroups,o)}this.selectedAttributeGroups[e.id].attributes.push(n)}},removeSelected:function(t){var n=t.selectedAttribute,e=t.selectedAttributeGroup;if(Object.prototype.hasOwnProperty.call(this.selectedAttributeGroups,e.id)){var r=this.selectedAttributeGroups[e.id];r.attributes=r.attributes.filter((function(t){return t.id!==n.id}))}},toggleAll:function(t){var n=this,e=t.attributeGroup;t.select?e.attributes.forEach((function(t){n.addSelected({selectedAttribute:t,attributeGroup:e})})):e.attributes.forEach((function(t){n.removeSelected({selectedAttribute:t,selectedAttributeGroup:e})}))}}}},59845:(t,n,e)=>{"use strict";Object.defineProperty(n,"X",{value:!0}),e(32517),n.Z={name:"Modal",props:{confirmation:{type:Boolean,required:!1,default:!1},cancelLabel:{type:String,required:!1,default:function(){return this.$t("modal.cancel")}},confirmLabel:{type:String,required:!1,default:function(){return this.$t("modal.apply")}},closeLabel:{type:String,required:!1,default:function(){return this.$t("modal.close")}},modalTitle:{type:String,required:!1,default:function(){return""}}},methods:{close:function(){this.$emit("close")},confirm:function(){this.$emit("confirm")}}}},93356:(t,n)=>{"use strict";Object.defineProperty(n,"X",{value:!0}),n.Z={name:"Pagination",data:function(){return{paginatedDatas:[],currentPage:1}},props:{datas:{type:Array,default:function(){return[]}},paginationLength:{type:Number,default:14}},methods:{goToPage:function(t){this.paginatedDatas[t-1]&&(this.currentPage=t,this.$emit("paginated",{paginatedDatas:this.paginatedDatas,currentPage:this.currentPage}))},constructDatas:function(t){this.paginatedDatas=[];for(var n=0;n<t.length;n+=this.paginationLength)this.paginatedDatas.push(t.slice(n,n+this.paginationLength));this.$emit("paginated",{paginatedDatas:this.paginatedDatas,currentPage:this.currentPage})},isActive:function(t){return this.currentPage===t+1?"active":null}},mounted:function(){this.constructDatas(this.datas)},watch:{datas:function(t){this.constructDatas(t)}}}},24043:(t,n,e)=>{t.exports={default:e(47185),__esModule:!0}},52945:(t,n,e)=>{t.exports={default:e(56981),__esModule:!0}},85861:(t,n,e)=>{t.exports={default:e(45627),__esModule:!0}},32242:(t,n,e)=>{t.exports={default:e(33391),__esModule:!0}},88902:(t,n,e)=>{t.exports={default:e(98613),__esModule:!0}},47518:(t,n,e)=>{t.exports={default:e(48056),__esModule:!0}},46593:(t,n,e)=>{t.exports={default:e(80112),__esModule:!0}},36803:(t,n,e)=>{"use strict";n.__esModule=!0;var r,i=(r=e(46593))&&r.__esModule?r:{default:r};n.default=function(t){return function(){var n=t.apply(this,arguments);return new i.default((function(t,e){return function r(o,a){try{var l=n[o](a),s=l.value}catch(t){return void e(t)}if(!l.done)return i.default.resolve(s).then((function(t){r("next",t)}),(function(t){r("throw",t)}));t(s)}("next")}))}}},99663:(t,n)=>{"use strict";n.__esModule=!0,n.default=function(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}},22600:(t,n,e)=>{"use strict";n.__esModule=!0;var r,i=(r=e(32242))&&r.__esModule?r:{default:r};n.default=function(){function t(t,n){for(var e=0;e<n.length;e++){var r=n[e];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),(0,i.default)(t,r.key,r)}}return function(n,e,r){return e&&t(n.prototype,e),r&&t(n,r),n}}()},88106:(t,n,e)=>{"use strict";n.__esModule=!0;var r,i=(r=e(32242))&&r.__esModule?r:{default:r};n.default=function(t,n,e){return n in t?(0,i.default)(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}},88239:(t,n,e)=>{"use strict";n.__esModule=!0;var r,i=(r=e(52945))&&r.__esModule?r:{default:r};n.default=i.default||function(t){for(var n=1;n<arguments.length;n++){var e=arguments[n];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])}return t}},85315:(t,n,e)=>{"use strict";n.__esModule=!0;var r,i=(r=e(24043))&&r.__esModule?r:{default:r};n.default=function(t){if(Array.isArray(t)){for(var n=0,e=Array(t.length);n<t.length;n++)e[n]=t[n];return e}return(0,i.default)(t)}},94942:(t,n,e)=>{t.exports=e(20205)},44431:function(t,n,e){var r;!function(i){"use strict";var o,a=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,l=Math.ceil,s=Math.floor,d="[BigNumber Error] ",u=d+"Number primitive has more than 15 significant digits: ",c=1e14,p=14,m=9007199254740991,f=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],g=1e7,A=1e9;function h(t){var n=0|t;return t>0||t===n?n:n-1}function C(t){for(var n,e,r=1,i=t.length,o=t[0]+"";r<i;){for(n=t[r++]+"",e=p-n.length;e--;n="0"+n);o+=n}for(i=o.length;48===o.charCodeAt(--i););return o.slice(0,i+1||1)}function b(t,n){var e,r,i=t.c,o=n.c,a=t.s,l=n.s,s=t.e,d=n.e;if(!a||!l)return null;if(e=i&&!i[0],r=o&&!o[0],e||r)return e?r?0:-l:a;if(a!=l)return a;if(e=a<0,r=s==d,!i||!o)return r?0:!i^e?1:-1;if(!r)return s>d^e?1:-1;for(l=(s=i.length)<(d=o.length)?s:d,a=0;a<l;a++)if(i[a]!=o[a])return i[a]>o[a]^e?1:-1;return s==d?0:s>d^e?1:-1}function $(t,n,e,r){if(t<n||t>e||t!==s(t))throw Error(d+(r||"Argument")+("number"==typeof t?t<n||t>e?" out of range: ":" not an integer: ":" not a primitive number: ")+String(t))}function v(t){var n=t.c.length-1;return h(t.e/p)==n&&t.c[n]%2!=0}function x(t,n){return(t.length>1?t.charAt(0)+"."+t.slice(1):t)+(n<0?"e":"e+")+n}function y(t,n,e){var r,i;if(n<0){for(i=e+".";++n;i+=e);t=i+t}else if(++n>(r=t.length)){for(i=e,n-=r;--n;i+=e);t+=i}else n<r&&(t=t.slice(0,n)+"."+t.slice(n));return t}(o=function t(n){var e,r,i,o,w,B,k,_,I,D,S=N.prototype={constructor:N,toString:null,valueOf:null},z=new N(1),E=20,G=4,T=-7,M=21,j=-1e7,O=1e7,F=!1,L=1,P=0,R={prefix:"",groupSize:3,secondaryGroupSize:0,groupSeparator:",",decimalSeparator:".",fractionGroupSize:0,fractionGroupSeparator:" ",suffix:""},q="0123456789abcdefghijklmnopqrstuvwxyz";function N(t,n){var e,o,l,d,c,f,g,A,h=this;if(!(h instanceof N))return new N(t,n);if(null==n){if(t&&!0===t._isBigNumber)return h.s=t.s,void(!t.c||t.e>O?h.c=h.e=null:t.e<j?h.c=[h.e=0]:(h.e=t.e,h.c=t.c.slice()));if((f="number"==typeof t)&&0*t==0){if(h.s=1/t<0?(t=-t,-1):1,t===~~t){for(d=0,c=t;c>=10;c/=10,d++);return void(d>O?h.c=h.e=null:(h.e=d,h.c=[t]))}A=String(t)}else{if(!a.test(A=String(t)))return i(h,A,f);h.s=45==A.charCodeAt(0)?(A=A.slice(1),-1):1}(d=A.indexOf("."))>-1&&(A=A.replace(".","")),(c=A.search(/e/i))>0?(d<0&&(d=c),d+=+A.slice(c+1),A=A.substring(0,c)):d<0&&(d=A.length)}else{if($(n,2,q.length,"Base"),10==n)return H(h=new N(t),E+h.e+1,G);if(A=String(t),f="number"==typeof t){if(0*t!=0)return i(h,A,f,n);if(h.s=1/t<0?(A=A.slice(1),-1):1,N.DEBUG&&A.replace(/^0\.0*|\./,"").length>15)throw Error(u+t)}else h.s=45===A.charCodeAt(0)?(A=A.slice(1),-1):1;for(e=q.slice(0,n),d=c=0,g=A.length;c<g;c++)if(e.indexOf(o=A.charAt(c))<0){if("."==o){if(c>d){d=g;continue}}else if(!l&&(A==A.toUpperCase()&&(A=A.toLowerCase())||A==A.toLowerCase()&&(A=A.toUpperCase()))){l=!0,c=-1,d=0;continue}return i(h,String(t),f,n)}f=!1,(d=(A=r(A,n,10,h.s)).indexOf("."))>-1?A=A.replace(".",""):d=A.length}for(c=0;48===A.charCodeAt(c);c++);for(g=A.length;48===A.charCodeAt(--g););if(A=A.slice(c,++g)){if(g-=c,f&&N.DEBUG&&g>15&&(t>m||t!==s(t)))throw Error(u+h.s*t);if((d=d-c-1)>O)h.c=h.e=null;else if(d<j)h.c=[h.e=0];else{if(h.e=d,h.c=[],c=(d+1)%p,d<0&&(c+=p),c<g){for(c&&h.c.push(+A.slice(0,c)),g-=p;c<g;)h.c.push(+A.slice(c,c+=p));c=p-(A=A.slice(c)).length}else c-=g;for(;c--;A+="0");h.c.push(+A)}}else h.c=[h.e=0]}function Y(t,n,e,r){var i,o,a,l,s;if(null==e?e=G:$(e,0,8),!t.c)return t.toString();if(i=t.c[0],a=t.e,null==n)s=C(t.c),s=1==r||2==r&&(a<=T||a>=M)?x(s,a):y(s,a,"0");else if(o=(t=H(new N(t),n,e)).e,l=(s=C(t.c)).length,1==r||2==r&&(n<=o||o<=T)){for(;l<n;s+="0",l++);s=x(s,o)}else if(n-=a,s=y(s,o,"0"),o+1>l){if(--n>0)for(s+=".";n--;s+="0");}else if((n+=o-l)>0)for(o+1==l&&(s+=".");n--;s+="0");return t.s<0&&i?"-"+s:s}function U(t,n){for(var e,r=1,i=new N(t[0]);r<t.length;r++){if(!(e=new N(t[r])).s){i=e;break}n.call(i,e)&&(i=e)}return i}function W(t,n,e){for(var r=1,i=n.length;!n[--i];n.pop());for(i=n[0];i>=10;i/=10,r++);return(e=r+e*p-1)>O?t.c=t.e=null:e<j?t.c=[t.e=0]:(t.e=e,t.c=n),t}function H(t,n,e,r){var i,o,a,d,u,m,g,A=t.c,h=f;if(A){t:{for(i=1,d=A[0];d>=10;d/=10,i++);if((o=n-i)<0)o+=p,a=n,g=(u=A[m=0])/h[i-a-1]%10|0;else if((m=l((o+1)/p))>=A.length){if(!r)break t;for(;A.length<=m;A.push(0));u=g=0,i=1,a=(o%=p)-p+1}else{for(u=d=A[m],i=1;d>=10;d/=10,i++);g=(a=(o%=p)-p+i)<0?0:u/h[i-a-1]%10|0}if(r=r||n<0||null!=A[m+1]||(a<0?u:u%h[i-a-1]),r=e<4?(g||r)&&(0==e||e==(t.s<0?3:2)):g>5||5==g&&(4==e||r||6==e&&(o>0?a>0?u/h[i-a]:0:A[m-1])%10&1||e==(t.s<0?8:7)),n<1||!A[0])return A.length=0,r?(n-=t.e+1,A[0]=h[(p-n%p)%p],t.e=-n||0):A[0]=t.e=0,t;if(0==o?(A.length=m,d=1,m--):(A.length=m+1,d=h[p-o],A[m]=a>0?s(u/h[i-a]%h[a])*d:0),r)for(;;){if(0==m){for(o=1,a=A[0];a>=10;a/=10,o++);for(a=A[0]+=d,d=1;a>=10;a/=10,d++);o!=d&&(t.e++,A[0]==c&&(A[0]=1));break}if(A[m]+=d,A[m]!=c)break;A[m--]=0,d=1}for(o=A.length;0===A[--o];A.pop());}t.e>O?t.c=t.e=null:t.e<j&&(t.c=[t.e=0])}return t}function Q(t){var n,e=t.e;return null===e?t.toString():(n=C(t.c),n=e<=T||e>=M?x(n,e):y(n,e,"0"),t.s<0?"-"+n:n)}return N.clone=t,N.ROUND_UP=0,N.ROUND_DOWN=1,N.ROUND_CEIL=2,N.ROUND_FLOOR=3,N.ROUND_HALF_UP=4,N.ROUND_HALF_DOWN=5,N.ROUND_HALF_EVEN=6,N.ROUND_HALF_CEIL=7,N.ROUND_HALF_FLOOR=8,N.EUCLID=9,N.config=N.set=function(t){var n,e;if(null!=t){if("object"!=typeof t)throw Error(d+"Object expected: "+t);if(t.hasOwnProperty(n="DECIMAL_PLACES")&&($(e=t[n],0,A,n),E=e),t.hasOwnProperty(n="ROUNDING_MODE")&&($(e=t[n],0,8,n),G=e),t.hasOwnProperty(n="EXPONENTIAL_AT")&&((e=t[n])&&e.pop?($(e[0],-A,0,n),$(e[1],0,A,n),T=e[0],M=e[1]):($(e,-A,A,n),T=-(M=e<0?-e:e))),t.hasOwnProperty(n="RANGE"))if((e=t[n])&&e.pop)$(e[0],-A,-1,n),$(e[1],1,A,n),j=e[0],O=e[1];else{if($(e,-A,A,n),!e)throw Error(d+n+" cannot be zero: "+e);j=-(O=e<0?-e:e)}if(t.hasOwnProperty(n="CRYPTO")){if((e=t[n])!==!!e)throw Error(d+n+" not true or false: "+e);if(e){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw F=!e,Error(d+"crypto unavailable");F=e}else F=e}if(t.hasOwnProperty(n="MODULO_MODE")&&($(e=t[n],0,9,n),L=e),t.hasOwnProperty(n="POW_PRECISION")&&($(e=t[n],0,A,n),P=e),t.hasOwnProperty(n="FORMAT")){if("object"!=typeof(e=t[n]))throw Error(d+n+" not an object: "+e);R=e}if(t.hasOwnProperty(n="ALPHABET")){if("string"!=typeof(e=t[n])||/^.?$|[+\-.\s]|(.).*\1/.test(e))throw Error(d+n+" invalid: "+e);q=e}}return{DECIMAL_PLACES:E,ROUNDING_MODE:G,EXPONENTIAL_AT:[T,M],RANGE:[j,O],CRYPTO:F,MODULO_MODE:L,POW_PRECISION:P,FORMAT:R,ALPHABET:q}},N.isBigNumber=function(t){if(!t||!0!==t._isBigNumber)return!1;if(!N.DEBUG)return!0;var n,e,r=t.c,i=t.e,o=t.s;t:if("[object Array]"=={}.toString.call(r)){if((1===o||-1===o)&&i>=-A&&i<=A&&i===s(i)){if(0===r[0]){if(0===i&&1===r.length)return!0;break t}if((n=(i+1)%p)<1&&(n+=p),String(r[0]).length==n){for(n=0;n<r.length;n++)if((e=r[n])<0||e>=c||e!==s(e))break t;if(0!==e)return!0}}}else if(null===r&&null===i&&(null===o||1===o||-1===o))return!0;throw Error(d+"Invalid BigNumber: "+t)},N.maximum=N.max=function(){return U(arguments,S.lt)},N.minimum=N.min=function(){return U(arguments,S.gt)},N.random=(o=9007199254740992,w=Math.random()*o&2097151?function(){return s(Math.random()*o)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(t){var n,e,r,i,o,a=0,u=[],c=new N(z);if(null==t?t=E:$(t,0,A),i=l(t/p),F)if(crypto.getRandomValues){for(n=crypto.getRandomValues(new Uint32Array(i*=2));a<i;)(o=131072*n[a]+(n[a+1]>>>11))>=9e15?(e=crypto.getRandomValues(new Uint32Array(2)),n[a]=e[0],n[a+1]=e[1]):(u.push(o%1e14),a+=2);a=i/2}else{if(!crypto.randomBytes)throw F=!1,Error(d+"crypto unavailable");for(n=crypto.randomBytes(i*=7);a<i;)(o=281474976710656*(31&n[a])+1099511627776*n[a+1]+4294967296*n[a+2]+16777216*n[a+3]+(n[a+4]<<16)+(n[a+5]<<8)+n[a+6])>=9e15?crypto.randomBytes(7).copy(n,a):(u.push(o%1e14),a+=7);a=i/7}if(!F)for(;a<i;)(o=w())<9e15&&(u[a++]=o%1e14);for(i=u[--a],t%=p,i&&t&&(o=f[p-t],u[a]=s(i/o)*o);0===u[a];u.pop(),a--);if(a<0)u=[r=0];else{for(r=-1;0===u[0];u.splice(0,1),r-=p);for(a=1,o=u[0];o>=10;o/=10,a++);a<p&&(r-=p-a)}return c.e=r,c.c=u,c}),N.sum=function(){for(var t=1,n=arguments,e=new N(n[0]);t<n.length;)e=e.plus(n[t++]);return e},r=function(){var t="0123456789";function n(t,n,e,r){for(var i,o,a=[0],l=0,s=t.length;l<s;){for(o=a.length;o--;a[o]*=n);for(a[0]+=r.indexOf(t.charAt(l++)),i=0;i<a.length;i++)a[i]>e-1&&(null==a[i+1]&&(a[i+1]=0),a[i+1]+=a[i]/e|0,a[i]%=e)}return a.reverse()}return function(r,i,o,a,l){var s,d,u,c,p,m,f,g,A=r.indexOf("."),h=E,b=G;for(A>=0&&(c=P,P=0,r=r.replace(".",""),m=(g=new N(i)).pow(r.length-A),P=c,g.c=n(y(C(m.c),m.e,"0"),10,o,t),g.e=g.c.length),u=c=(f=n(r,i,o,l?(s=q,t):(s=t,q))).length;0==f[--c];f.pop());if(!f[0])return s.charAt(0);if(A<0?--u:(m.c=f,m.e=u,m.s=a,f=(m=e(m,g,h,b,o)).c,p=m.r,u=m.e),A=f[d=u+h+1],c=o/2,p=p||d<0||null!=f[d+1],p=b<4?(null!=A||p)&&(0==b||b==(m.s<0?3:2)):A>c||A==c&&(4==b||p||6==b&&1&f[d-1]||b==(m.s<0?8:7)),d<1||!f[0])r=p?y(s.charAt(1),-h,s.charAt(0)):s.charAt(0);else{if(f.length=d,p)for(--o;++f[--d]>o;)f[d]=0,d||(++u,f=[1].concat(f));for(c=f.length;!f[--c];);for(A=0,r="";A<=c;r+=s.charAt(f[A++]));r=y(r,u,s.charAt(0))}return r}}(),e=function(){function t(t,n,e){var r,i,o,a,l=0,s=t.length,d=n%g,u=n/g|0;for(t=t.slice();s--;)l=((i=d*(o=t[s]%g)+(r=u*o+(a=t[s]/g|0)*d)%g*g+l)/e|0)+(r/g|0)+u*a,t[s]=i%e;return l&&(t=[l].concat(t)),t}function n(t,n,e,r){var i,o;if(e!=r)o=e>r?1:-1;else for(i=o=0;i<e;i++)if(t[i]!=n[i]){o=t[i]>n[i]?1:-1;break}return o}function e(t,n,e,r){for(var i=0;e--;)t[e]-=i,i=t[e]<n[e]?1:0,t[e]=i*r+t[e]-n[e];for(;!t[0]&&t.length>1;t.splice(0,1));}return function(r,i,o,a,l){var d,u,m,f,g,A,C,b,$,v,x,y,w,B,k,_,I,D=r.s==i.s?1:-1,S=r.c,z=i.c;if(!(S&&S[0]&&z&&z[0]))return new N(r.s&&i.s&&(S?!z||S[0]!=z[0]:z)?S&&0==S[0]||!z?0*D:D/0:NaN);for($=(b=new N(D)).c=[],D=o+(u=r.e-i.e)+1,l||(l=c,u=h(r.e/p)-h(i.e/p),D=D/p|0),m=0;z[m]==(S[m]||0);m++);if(z[m]>(S[m]||0)&&u--,D<0)$.push(1),f=!0;else{for(B=S.length,_=z.length,m=0,D+=2,(g=s(l/(z[0]+1)))>1&&(z=t(z,g,l),S=t(S,g,l),_=z.length,B=S.length),w=_,x=(v=S.slice(0,_)).length;x<_;v[x++]=0);I=z.slice(),I=[0].concat(I),k=z[0],z[1]>=l/2&&k++;do{if(g=0,(d=n(z,v,_,x))<0){if(y=v[0],_!=x&&(y=y*l+(v[1]||0)),(g=s(y/k))>1)for(g>=l&&(g=l-1),C=(A=t(z,g,l)).length,x=v.length;1==n(A,v,C,x);)g--,e(A,_<C?I:z,C,l),C=A.length,d=1;else 0==g&&(d=g=1),C=(A=z.slice()).length;if(C<x&&(A=[0].concat(A)),e(v,A,x,l),x=v.length,-1==d)for(;n(z,v,_,x)<1;)g++,e(v,_<x?I:z,x,l),x=v.length}else 0===d&&(g++,v=[0]);$[m++]=g,v[0]?v[x++]=S[w]||0:(v=[S[w]],x=1)}while((w++<B||null!=v[0])&&D--);f=null!=v[0],$[0]||$.splice(0,1)}if(l==c){for(m=1,D=$[0];D>=10;D/=10,m++);H(b,o+(b.e=m+u*p-1)+1,a,f)}else b.e=u,b.r=+f;return b}}(),B=/^(-?)0([xbo])(?=\w[\w.]*$)/i,k=/^([^.]+)\.$/,_=/^\.([^.]+)$/,I=/^-?(Infinity|NaN)$/,D=/^\s*\+(?=[\w.])|^\s+|\s+$/g,i=function(t,n,e,r){var i,o=e?n:n.replace(D,"");if(I.test(o))t.s=isNaN(o)?null:o<0?-1:1;else{if(!e&&(o=o.replace(B,(function(t,n,e){return i="x"==(e=e.toLowerCase())?16:"b"==e?2:8,r&&r!=i?t:n})),r&&(i=r,o=o.replace(k,"$1").replace(_,"0.$1")),n!=o))return new N(o,i);if(N.DEBUG)throw Error(d+"Not a"+(r?" base "+r:"")+" number: "+n);t.s=null}t.c=t.e=null},S.absoluteValue=S.abs=function(){var t=new N(this);return t.s<0&&(t.s=1),t},S.comparedTo=function(t,n){return b(this,new N(t,n))},S.decimalPlaces=S.dp=function(t,n){var e,r,i,o=this;if(null!=t)return $(t,0,A),null==n?n=G:$(n,0,8),H(new N(o),t+o.e+1,n);if(!(e=o.c))return null;if(r=((i=e.length-1)-h(this.e/p))*p,i=e[i])for(;i%10==0;i/=10,r--);return r<0&&(r=0),r},S.dividedBy=S.div=function(t,n){return e(this,new N(t,n),E,G)},S.dividedToIntegerBy=S.idiv=function(t,n){return e(this,new N(t,n),0,1)},S.exponentiatedBy=S.pow=function(t,n){var e,r,i,o,a,u,c,m,f=this;if((t=new N(t)).c&&!t.isInteger())throw Error(d+"Exponent not an integer: "+Q(t));if(null!=n&&(n=new N(n)),a=t.e>14,!f.c||!f.c[0]||1==f.c[0]&&!f.e&&1==f.c.length||!t.c||!t.c[0])return m=new N(Math.pow(+Q(f),a?2-v(t):+Q(t))),n?m.mod(n):m;if(u=t.s<0,n){if(n.c?!n.c[0]:!n.s)return new N(NaN);(r=!u&&f.isInteger()&&n.isInteger())&&(f=f.mod(n))}else{if(t.e>9&&(f.e>0||f.e<-1||(0==f.e?f.c[0]>1||a&&f.c[1]>=24e7:f.c[0]<8e13||a&&f.c[0]<=9999975e7)))return o=f.s<0&&v(t)?-0:0,f.e>-1&&(o=1/o),new N(u?1/o:o);P&&(o=l(P/p+2))}for(a?(e=new N(.5),u&&(t.s=1),c=v(t)):c=(i=Math.abs(+Q(t)))%2,m=new N(z);;){if(c){if(!(m=m.times(f)).c)break;o?m.c.length>o&&(m.c.length=o):r&&(m=m.mod(n))}if(i){if(0===(i=s(i/2)))break;c=i%2}else if(H(t=t.times(e),t.e+1,1),t.e>14)c=v(t);else{if(0==(i=+Q(t)))break;c=i%2}f=f.times(f),o?f.c&&f.c.length>o&&(f.c.length=o):r&&(f=f.mod(n))}return r?m:(u&&(m=z.div(m)),n?m.mod(n):o?H(m,P,G,void 0):m)},S.integerValue=function(t){var n=new N(this);return null==t?t=G:$(t,0,8),H(n,n.e+1,t)},S.isEqualTo=S.eq=function(t,n){return 0===b(this,new N(t,n))},S.isFinite=function(){return!!this.c},S.isGreaterThan=S.gt=function(t,n){return b(this,new N(t,n))>0},S.isGreaterThanOrEqualTo=S.gte=function(t,n){return 1===(n=b(this,new N(t,n)))||0===n},S.isInteger=function(){return!!this.c&&h(this.e/p)>this.c.length-2},S.isLessThan=S.lt=function(t,n){return b(this,new N(t,n))<0},S.isLessThanOrEqualTo=S.lte=function(t,n){return-1===(n=b(this,new N(t,n)))||0===n},S.isNaN=function(){return!this.s},S.isNegative=function(){return this.s<0},S.isPositive=function(){return this.s>0},S.isZero=function(){return!!this.c&&0==this.c[0]},S.minus=function(t,n){var e,r,i,o,a=this,l=a.s;if(n=(t=new N(t,n)).s,!l||!n)return new N(NaN);if(l!=n)return t.s=-n,a.plus(t);var s=a.e/p,d=t.e/p,u=a.c,m=t.c;if(!s||!d){if(!u||!m)return u?(t.s=-n,t):new N(m?a:NaN);if(!u[0]||!m[0])return m[0]?(t.s=-n,t):new N(u[0]?a:3==G?-0:0)}if(s=h(s),d=h(d),u=u.slice(),l=s-d){for((o=l<0)?(l=-l,i=u):(d=s,i=m),i.reverse(),n=l;n--;i.push(0));i.reverse()}else for(r=(o=(l=u.length)<(n=m.length))?l:n,l=n=0;n<r;n++)if(u[n]!=m[n]){o=u[n]<m[n];break}if(o&&(i=u,u=m,m=i,t.s=-t.s),(n=(r=m.length)-(e=u.length))>0)for(;n--;u[e++]=0);for(n=c-1;r>l;){if(u[--r]<m[r]){for(e=r;e&&!u[--e];u[e]=n);--u[e],u[r]+=c}u[r]-=m[r]}for(;0==u[0];u.splice(0,1),--d);return u[0]?W(t,u,d):(t.s=3==G?-1:1,t.c=[t.e=0],t)},S.modulo=S.mod=function(t,n){var r,i,o=this;return t=new N(t,n),!o.c||!t.s||t.c&&!t.c[0]?new N(NaN):!t.c||o.c&&!o.c[0]?new N(o):(9==L?(i=t.s,t.s=1,r=e(o,t,0,3),t.s=i,r.s*=i):r=e(o,t,0,L),(t=o.minus(r.times(t))).c[0]||1!=L||(t.s=o.s),t)},S.multipliedBy=S.times=function(t,n){var e,r,i,o,a,l,s,d,u,m,f,A,C,b,$,v=this,x=v.c,y=(t=new N(t,n)).c;if(!(x&&y&&x[0]&&y[0]))return!v.s||!t.s||x&&!x[0]&&!y||y&&!y[0]&&!x?t.c=t.e=t.s=null:(t.s*=v.s,x&&y?(t.c=[0],t.e=0):t.c=t.e=null),t;for(r=h(v.e/p)+h(t.e/p),t.s*=v.s,(s=x.length)<(m=y.length)&&(C=x,x=y,y=C,i=s,s=m,m=i),i=s+m,C=[];i--;C.push(0));for(b=c,$=g,i=m;--i>=0;){for(e=0,f=y[i]%$,A=y[i]/$|0,o=i+(a=s);o>i;)e=((d=f*(d=x[--a]%$)+(l=A*d+(u=x[a]/$|0)*f)%$*$+C[o]+e)/b|0)+(l/$|0)+A*u,C[o--]=d%b;C[o]=e}return e?++r:C.splice(0,1),W(t,C,r)},S.negated=function(){var t=new N(this);return t.s=-t.s||null,t},S.plus=function(t,n){var e,r=this,i=r.s;if(n=(t=new N(t,n)).s,!i||!n)return new N(NaN);if(i!=n)return t.s=-n,r.minus(t);var o=r.e/p,a=t.e/p,l=r.c,s=t.c;if(!o||!a){if(!l||!s)return new N(i/0);if(!l[0]||!s[0])return s[0]?t:new N(l[0]?r:0*i)}if(o=h(o),a=h(a),l=l.slice(),i=o-a){for(i>0?(a=o,e=s):(i=-i,e=l),e.reverse();i--;e.push(0));e.reverse()}for((i=l.length)-(n=s.length)<0&&(e=s,s=l,l=e,n=i),i=0;n;)i=(l[--n]=l[n]+s[n]+i)/c|0,l[n]=c===l[n]?0:l[n]%c;return i&&(l=[i].concat(l),++a),W(t,l,a)},S.precision=S.sd=function(t,n){var e,r,i,o=this;if(null!=t&&t!==!!t)return $(t,1,A),null==n?n=G:$(n,0,8),H(new N(o),t,n);if(!(e=o.c))return null;if(r=(i=e.length-1)*p+1,i=e[i]){for(;i%10==0;i/=10,r--);for(i=e[0];i>=10;i/=10,r++);}return t&&o.e+1>r&&(r=o.e+1),r},S.shiftedBy=function(t){return $(t,-9007199254740991,m),this.times("1e"+t)},S.squareRoot=S.sqrt=function(){var t,n,r,i,o,a=this,l=a.c,s=a.s,d=a.e,u=E+4,c=new N("0.5");if(1!==s||!l||!l[0])return new N(!s||s<0&&(!l||l[0])?NaN:l?a:1/0);if(0==(s=Math.sqrt(+Q(a)))||s==1/0?(((n=C(l)).length+d)%2==0&&(n+="0"),s=Math.sqrt(+n),d=h((d+1)/2)-(d<0||d%2),r=new N(n=s==1/0?"5e"+d:(n=s.toExponential()).slice(0,n.indexOf("e")+1)+d)):r=new N(s+""),r.c[0])for((s=(d=r.e)+u)<3&&(s=0);;)if(o=r,r=c.times(o.plus(e(a,o,u,1))),C(o.c).slice(0,s)===(n=C(r.c)).slice(0,s)){if(r.e<d&&--s,"9999"!=(n=n.slice(s-3,s+1))&&(i||"4999"!=n)){+n&&(+n.slice(1)||"5"!=n.charAt(0))||(H(r,r.e+E+2,1),t=!r.times(r).eq(a));break}if(!i&&(H(o,o.e+E+2,0),o.times(o).eq(a))){r=o;break}u+=4,s+=4,i=1}return H(r,r.e+E+1,G,t)},S.toExponential=function(t,n){return null!=t&&($(t,0,A),t++),Y(this,t,n,1)},S.toFixed=function(t,n){return null!=t&&($(t,0,A),t=t+this.e+1),Y(this,t,n)},S.toFormat=function(t,n,e){var r,i=this;if(null==e)null!=t&&n&&"object"==typeof n?(e=n,n=null):t&&"object"==typeof t?(e=t,t=n=null):e=R;else if("object"!=typeof e)throw Error(d+"Argument not an object: "+e);if(r=i.toFixed(t,n),i.c){var o,a=r.split("."),l=+e.groupSize,s=+e.secondaryGroupSize,u=e.groupSeparator||"",c=a[0],p=a[1],m=i.s<0,f=m?c.slice(1):c,g=f.length;if(s&&(o=l,l=s,s=o,g-=o),l>0&&g>0){for(o=g%l||l,c=f.substr(0,o);o<g;o+=l)c+=u+f.substr(o,l);s>0&&(c+=u+f.slice(o)),m&&(c="-"+c)}r=p?c+(e.decimalSeparator||"")+((s=+e.fractionGroupSize)?p.replace(new RegExp("\\d{"+s+"}\\B","g"),"$&"+(e.fractionGroupSeparator||"")):p):c}return(e.prefix||"")+r+(e.suffix||"")},S.toFraction=function(t){var n,r,i,o,a,l,s,u,c,m,g,A,h=this,b=h.c;if(null!=t&&(!(s=new N(t)).isInteger()&&(s.c||1!==s.s)||s.lt(z)))throw Error(d+"Argument "+(s.isInteger()?"out of range: ":"not an integer: ")+Q(s));if(!b)return new N(h);for(n=new N(z),c=r=new N(z),i=u=new N(z),A=C(b),a=n.e=A.length-h.e-1,n.c[0]=f[(l=a%p)<0?p+l:l],t=!t||s.comparedTo(n)>0?a>0?n:c:s,l=O,O=1/0,s=new N(A),u.c[0]=0;m=e(s,n,0,1),1!=(o=r.plus(m.times(i))).comparedTo(t);)r=i,i=o,c=u.plus(m.times(o=c)),u=o,n=s.minus(m.times(o=n)),s=o;return o=e(t.minus(r),i,0,1),u=u.plus(o.times(c)),r=r.plus(o.times(i)),u.s=c.s=h.s,g=e(c,i,a*=2,G).minus(h).abs().comparedTo(e(u,r,a,G).minus(h).abs())<1?[c,i]:[u,r],O=l,g},S.toNumber=function(){return+Q(this)},S.toPrecision=function(t,n){return null!=t&&$(t,1,A),Y(this,t,n,2)},S.toString=function(t){var n,e=this,i=e.s,o=e.e;return null===o?i?(n="Infinity",i<0&&(n="-"+n)):n="NaN":(null==t?n=o<=T||o>=M?x(C(e.c),o):y(C(e.c),o,"0"):10===t?n=y(C((e=H(new N(e),E+o+1,G)).c),e.e,"0"):($(t,2,q.length,"Base"),n=r(y(C(e.c),o,"0"),10,t,i,!0)),i<0&&e.c[0]&&(n="-"+n)),n},S.valueOf=S.toJSON=function(){return Q(this)},S._isBigNumber=!0,null!=n&&N.set(n),N}()).default=o.BigNumber=o,void 0===(r=function(){return o}.call(n,e,n,t))||(t.exports=r)}()},47185:(t,n,e)=>{e(91867),e(2586),t.exports=e(34579).Array.from},56981:(t,n,e)=>{e(72699),t.exports=e(34579).Object.assign},45627:(t,n,e)=>{e(86760);var r=e(34579).Object;t.exports=function(t,n){return r.create(t,n)}},33391:(t,n,e)=>{e(31477);var r=e(34579).Object;t.exports=function(t,n,e){return r.defineProperty(t,n,e)}},98613:(t,n,e)=>{e(40961),t.exports=e(34579).Object.keys},48056:(t,n,e)=>{e(21013),t.exports=e(34579).Object.values},80112:(t,n,e)=>{e(94058),e(91867),e(73871),e(32878),e(95971),e(22526),t.exports=e(34579).Promise},85663:t=>{t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},79003:t=>{t.exports=function(){}},29142:t=>{t.exports=function(t,n,e,r){if(!(t instanceof n)||void 0!==r&&r in t)throw TypeError(e+": incorrect invocation!");return t}},12159:(t,n,e)=>{var r=e(36727);t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},57428:(t,n,e)=>{var r=e(7932),i=e(78728),o=e(16531);t.exports=function(t){return function(n,e,a){var l,s=r(n),d=i(s.length),u=o(a,d);if(t&&e!=e){for(;d>u;)if((l=s[u++])!=l)return!0}else for(;d>u;u++)if((t||u in s)&&s[u]===e)return t||u||0;return!t&&-1}}},14677:(t,n,e)=>{var r=e(32894),i=e(22939)("toStringTag"),o="Arguments"==r(function(){return arguments}());t.exports=function(t){var n,e,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(e=function(t,n){try{return t[n]}catch(t){}}(n=Object(t),i))?e:o?r(n):"Object"==(a=r(n))&&"function"==typeof n.callee?"Arguments":a}},32894:t=>{var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},34579:t=>{var n=t.exports={version:"2.6.11"};"number"==typeof __e&&(__e=n)},52445:(t,n,e)=>{"use strict";var r=e(4743),i=e(83101);t.exports=function(t,n,e){n in t?r.f(t,n,i(0,e)):t[n]=e}},19216:(t,n,e)=>{var r=e(85663);t.exports=function(t,n,e){if(r(t),void 0===n)return t;switch(e){case 1:return function(e){return t.call(n,e)};case 2:return function(e,r){return t.call(n,e,r)};case 3:return function(e,r,i){return t.call(n,e,r,i)}}return function(){return t.apply(n,arguments)}}},8333:t=>{t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},89666:(t,n,e)=>{t.exports=!e(7929)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},97467:(t,n,e)=>{var r=e(36727),i=e(33938).document,o=r(i)&&r(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},73338:t=>{t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},83856:(t,n,e)=>{var r=e(33938),i=e(34579),o=e(19216),a=e(41818),l=e(27069),s=function(t,n,e){var d,u,c,p=t&s.F,m=t&s.G,f=t&s.S,g=t&s.P,A=t&s.B,h=t&s.W,C=m?i:i[n]||(i[n]={}),b=C.prototype,$=m?r:f?r[n]:(r[n]||{}).prototype;for(d in m&&(e=n),e)(u=!p&&$&&void 0!==$[d])&&l(C,d)||(c=u?$[d]:e[d],C[d]=m&&"function"!=typeof $[d]?e[d]:A&&u?o(c,r):h&&$[d]==c?function(t){var n=function(n,e,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(n);case 2:return new t(n,e)}return new t(n,e,r)}return t.apply(this,arguments)};return n.prototype=t.prototype,n}(c):g&&"function"==typeof c?o(Function.call,c):c,g&&((C.virtual||(C.virtual={}))[d]=c,t&s.R&&b&&!b[d]&&a(b,d,c)))};s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,t.exports=s},7929:t=>{t.exports=function(t){try{return!!t()}catch(t){return!0}}},45576:(t,n,e)=>{var r=e(19216),i=e(95602),o=e(45991),a=e(12159),l=e(78728),s=e(83728),d={},u={},c=t.exports=function(t,n,e,c,p){var m,f,g,A,h=p?function(){return t}:s(t),C=r(e,c,n?2:1),b=0;if("function"!=typeof h)throw TypeError(t+" is not iterable!");if(o(h)){for(m=l(t.length);m>b;b++)if((A=n?C(a(f=t[b])[0],f[1]):C(t[b]))===d||A===u)return A}else for(g=h.call(t);!(f=g.next()).done;)if((A=i(g,C,f.value,n))===d||A===u)return A};c.BREAK=d,c.RETURN=u},33938:t=>{var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},27069:t=>{var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},41818:(t,n,e)=>{var r=e(4743),i=e(83101);t.exports=e(89666)?function(t,n,e){return r.f(t,n,i(1,e))}:function(t,n,e){return t[n]=e,t}},54881:(t,n,e)=>{var r=e(33938).document;t.exports=r&&r.documentElement},33758:(t,n,e)=>{t.exports=!e(89666)&&!e(7929)((function(){return 7!=Object.defineProperty(e(97467)("div"),"a",{get:function(){return 7}}).a}))},46778:t=>{t.exports=function(t,n,e){var r=void 0===e;switch(n.length){case 0:return r?t():t.call(e);case 1:return r?t(n[0]):t.call(e,n[0]);case 2:return r?t(n[0],n[1]):t.call(e,n[0],n[1]);case 3:return r?t(n[0],n[1],n[2]):t.call(e,n[0],n[1],n[2]);case 4:return r?t(n[0],n[1],n[2],n[3]):t.call(e,n[0],n[1],n[2],n[3])}return t.apply(e,n)}},50799:(t,n,e)=>{var r=e(32894);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},45991:(t,n,e)=>{var r=e(15449),i=e(22939)("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||o[i]===t)}},36727:t=>{t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},95602:(t,n,e)=>{var r=e(12159);t.exports=function(t,n,e,i){try{return i?n(r(e)[0],e[1]):n(e)}catch(n){var o=t.return;throw void 0!==o&&r(o.call(t)),n}}},33945:(t,n,e)=>{"use strict";var r=e(98989),i=e(83101),o=e(25378),a={};e(41818)(a,e(22939)("iterator"),(function(){return this})),t.exports=function(t,n,e){t.prototype=r(a,{next:i(1,e)}),o(t,n+" Iterator")}},45700:(t,n,e)=>{"use strict";var r=e(16227),i=e(83856),o=e(57470),a=e(41818),l=e(15449),s=e(33945),d=e(25378),u=e(95089),c=e(22939)("iterator"),p=!([].keys&&"next"in[].keys()),m="keys",f="values",g=function(){return this};t.exports=function(t,n,e,A,h,C,b){s(e,n,A);var $,v,x,y=function(t){if(!p&&t in _)return _[t];switch(t){case m:case f:return function(){return new e(this,t)}}return function(){return new e(this,t)}},w=n+" Iterator",B=h==f,k=!1,_=t.prototype,I=_[c]||_["@@iterator"]||h&&_[h],D=I||y(h),S=h?B?y("entries"):D:void 0,z="Array"==n&&_.entries||I;if(z&&(x=u(z.call(new t)))!==Object.prototype&&x.next&&(d(x,w,!0),r||"function"==typeof x[c]||a(x,c,g)),B&&I&&I.name!==f&&(k=!0,D=function(){return I.call(this)}),r&&!b||!p&&!k&&_[c]||a(_,c,D),l[n]=D,l[w]=g,h)if($={values:B?D:y(f),keys:C?D:y(m),entries:S},b)for(v in $)v in _||o(_,v,$[v]);else i(i.P+i.F*(p||k),n,$);return $}},96630:(t,n,e)=>{var r=e(22939)("iterator"),i=!1;try{var o=[7][r]();o.return=function(){i=!0},Array.from(o,(function(){throw 2}))}catch(t){}t.exports=function(t,n){if(!n&&!i)return!1;var e=!1;try{var o=[7],a=o[r]();a.next=function(){return{done:e=!0}},o[r]=function(){return a},t(o)}catch(t){}return e}},85084:t=>{t.exports=function(t,n){return{value:n,done:!!t}}},15449:t=>{t.exports={}},16227:t=>{t.exports=!0},81601:(t,n,e)=>{var r=e(33938),i=e(62569).set,o=r.MutationObserver||r.WebKitMutationObserver,a=r.process,l=r.Promise,s="process"==e(32894)(a);t.exports=function(){var t,n,e,d=function(){var r,i;for(s&&(r=a.domain)&&r.exit();t;){i=t.fn,t=t.next;try{i()}catch(r){throw t?e():n=void 0,r}}n=void 0,r&&r.enter()};if(s)e=function(){a.nextTick(d)};else if(!o||r.navigator&&r.navigator.standalone)if(l&&l.resolve){var u=l.resolve(void 0);e=function(){u.then(d)}}else e=function(){i.call(r,d)};else{var c=!0,p=document.createTextNode("");new o(d).observe(p,{characterData:!0}),e=function(){p.data=c=!c}}return function(r){var i={fn:r,next:void 0};n&&(n.next=i),t||(t=i,e()),n=i}}},59304:(t,n,e)=>{"use strict";var r=e(85663);function i(t){var n,e;this.promise=new t((function(t,r){if(void 0!==n||void 0!==e)throw TypeError("Bad Promise constructor");n=t,e=r})),this.resolve=r(n),this.reject=r(e)}t.exports.f=function(t){return new i(t)}},88082:(t,n,e)=>{"use strict";var r=e(89666),i=e(46162),o=e(48195),a=e(86274),l=e(66530),s=e(50799),d=Object.assign;t.exports=!d||e(7929)((function(){var t={},n={},e=Symbol(),r="abcdefghijklmnopqrst";return t[e]=7,r.split("").forEach((function(t){n[t]=t})),7!=d({},t)[e]||Object.keys(d({},n)).join("")!=r}))?function(t,n){for(var e=l(t),d=arguments.length,u=1,c=o.f,p=a.f;d>u;)for(var m,f=s(arguments[u++]),g=c?i(f).concat(c(f)):i(f),A=g.length,h=0;A>h;)m=g[h++],r&&!p.call(f,m)||(e[m]=f[m]);return e}:d},98989:(t,n,e)=>{var r=e(12159),i=e(57856),o=e(73338),a=e(58989)("IE_PROTO"),l=function(){},s=function(){var t,n=e(97467)("iframe"),r=o.length;for(n.style.display="none",e(54881).appendChild(n),n.src="javascript:",(t=n.contentWindow.document).open(),t.write("<script>document.F=Object<\/script>"),t.close(),s=t.F;r--;)delete s.prototype[o[r]];return s()};t.exports=Object.create||function(t,n){var e;return null!==t?(l.prototype=r(t),e=new l,l.prototype=null,e[a]=t):e=s(),void 0===n?e:i(e,n)}},4743:(t,n,e)=>{var r=e(12159),i=e(33758),o=e(33206),a=Object.defineProperty;n.f=e(89666)?Object.defineProperty:function(t,n,e){if(r(t),n=o(n,!0),r(e),i)try{return a(t,n,e)}catch(t){}if("get"in e||"set"in e)throw TypeError("Accessors not supported!");return"value"in e&&(t[n]=e.value),t}},57856:(t,n,e)=>{var r=e(4743),i=e(12159),o=e(46162);t.exports=e(89666)?Object.defineProperties:function(t,n){i(t);for(var e,a=o(n),l=a.length,s=0;l>s;)r.f(t,e=a[s++],n[e]);return t}},48195:(t,n)=>{n.f=Object.getOwnPropertySymbols},95089:(t,n,e)=>{var r=e(27069),i=e(66530),o=e(58989)("IE_PROTO"),a=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),r(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?a:null}},12963:(t,n,e)=>{var r=e(27069),i=e(7932),o=e(57428)(!1),a=e(58989)("IE_PROTO");t.exports=function(t,n){var e,l=i(t),s=0,d=[];for(e in l)e!=a&&r(l,e)&&d.push(e);for(;n.length>s;)r(l,e=n[s++])&&(~o(d,e)||d.push(e));return d}},46162:(t,n,e)=>{var r=e(12963),i=e(73338);t.exports=Object.keys||function(t){return r(t,i)}},86274:(t,n)=>{n.f={}.propertyIsEnumerable},12584:(t,n,e)=>{var r=e(83856),i=e(34579),o=e(7929);t.exports=function(t,n){var e=(i.Object||{})[t]||Object[t],a={};a[t]=n(e),r(r.S+r.F*o((function(){e(1)})),"Object",a)}},52050:(t,n,e)=>{var r=e(89666),i=e(46162),o=e(7932),a=e(86274).f;t.exports=function(t){return function(n){for(var e,l=o(n),s=i(l),d=s.length,u=0,c=[];d>u;)e=s[u++],r&&!a.call(l,e)||c.push(t?[e,l[e]]:l[e]);return c}}},10931:t=>{t.exports=function(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},87790:(t,n,e)=>{var r=e(12159),i=e(36727),o=e(59304);t.exports=function(t,n){if(r(t),i(n)&&n.constructor===t)return n;var e=o.f(t);return(0,e.resolve)(n),e.promise}},83101:t=>{t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},48144:(t,n,e)=>{var r=e(41818);t.exports=function(t,n,e){for(var i in n)e&&t[i]?t[i]=n[i]:r(t,i,n[i]);return t}},57470:(t,n,e)=>{t.exports=e(41818)},39967:(t,n,e)=>{"use strict";var r=e(33938),i=e(34579),o=e(4743),a=e(89666),l=e(22939)("species");t.exports=function(t){var n="function"==typeof i[t]?i[t]:r[t];a&&n&&!n[l]&&o.f(n,l,{configurable:!0,get:function(){return this}})}},25378:(t,n,e)=>{var r=e(4743).f,i=e(27069),o=e(22939)("toStringTag");t.exports=function(t,n,e){t&&!i(t=e?t:t.prototype,o)&&r(t,o,{configurable:!0,value:n})}},58989:(t,n,e)=>{var r=e(20250)("keys"),i=e(65730);t.exports=function(t){return r[t]||(r[t]=i(t))}},20250:(t,n,e)=>{var r=e(34579),i=e(33938),o="__core-js_shared__",a=i[o]||(i[o]={});(t.exports=function(t,n){return a[t]||(a[t]=void 0!==n?n:{})})("versions",[]).push({version:r.version,mode:e(16227)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},32707:(t,n,e)=>{var r=e(12159),i=e(85663),o=e(22939)("species");t.exports=function(t,n){var e,a=r(t).constructor;return void 0===a||null==(e=r(a)[o])?n:i(e)}},90510:(t,n,e)=>{var r=e(11052),i=e(8333);t.exports=function(t){return function(n,e){var o,a,l=String(i(n)),s=r(e),d=l.length;return s<0||s>=d?t?"":void 0:(o=l.charCodeAt(s))<55296||o>56319||s+1===d||(a=l.charCodeAt(s+1))<56320||a>57343?t?l.charAt(s):o:t?l.slice(s,s+2):a-56320+(o-55296<<10)+65536}}},62569:(t,n,e)=>{var r,i,o,a=e(19216),l=e(46778),s=e(54881),d=e(97467),u=e(33938),c=u.process,p=u.setImmediate,m=u.clearImmediate,f=u.MessageChannel,g=u.Dispatch,A=0,h={},C=function(){var t=+this;if(h.hasOwnProperty(t)){var n=h[t];delete h[t],n()}},b=function(t){C.call(t.data)};p&&m||(p=function(t){for(var n=[],e=1;arguments.length>e;)n.push(arguments[e++]);return h[++A]=function(){l("function"==typeof t?t:Function(t),n)},r(A),A},m=function(t){delete h[t]},"process"==e(32894)(c)?r=function(t){c.nextTick(a(C,t,1))}:g&&g.now?r=function(t){g.now(a(C,t,1))}:f?(o=(i=new f).port2,i.port1.onmessage=b,r=a(o.postMessage,o,1)):u.addEventListener&&"function"==typeof postMessage&&!u.importScripts?(r=function(t){u.postMessage(t+"","*")},u.addEventListener("message",b,!1)):r="onreadystatechange"in d("script")?function(t){s.appendChild(d("script")).onreadystatechange=function(){s.removeChild(this),C.call(t)}}:function(t){setTimeout(a(C,t,1),0)}),t.exports={set:p,clear:m}},16531:(t,n,e)=>{var r=e(11052),i=Math.max,o=Math.min;t.exports=function(t,n){return(t=r(t))<0?i(t+n,0):o(t,n)}},11052:t=>{var n=Math.ceil,e=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?e:n)(t)}},7932:(t,n,e)=>{var r=e(50799),i=e(8333);t.exports=function(t){return r(i(t))}},78728:(t,n,e)=>{var r=e(11052),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},66530:(t,n,e)=>{var r=e(8333);t.exports=function(t){return Object(r(t))}},33206:(t,n,e)=>{var r=e(36727);t.exports=function(t,n){if(!r(t))return t;var e,i;if(n&&"function"==typeof(e=t.toString)&&!r(i=e.call(t)))return i;if("function"==typeof(e=t.valueOf)&&!r(i=e.call(t)))return i;if(!n&&"function"==typeof(e=t.toString)&&!r(i=e.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},65730:t=>{var n=0,e=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+e).toString(36))}},26640:(t,n,e)=>{var r=e(33938).navigator;t.exports=r&&r.userAgent||""},22939:(t,n,e)=>{var r=e(20250)("wks"),i=e(65730),o=e(33938).Symbol,a="function"==typeof o;(t.exports=function(t){return r[t]||(r[t]=a&&o[t]||(a?o:i)("Symbol."+t))}).store=r},83728:(t,n,e)=>{var r=e(14677),i=e(22939)("iterator"),o=e(15449);t.exports=e(34579).getIteratorMethod=function(t){if(null!=t)return t[i]||t["@@iterator"]||o[r(t)]}},2586:(t,n,e)=>{"use strict";var r=e(19216),i=e(83856),o=e(66530),a=e(95602),l=e(45991),s=e(78728),d=e(52445),u=e(83728);i(i.S+i.F*!e(96630)((function(t){Array.from(t)})),"Array",{from:function(t){var n,e,i,c,p=o(t),m="function"==typeof this?this:Array,f=arguments.length,g=f>1?arguments[1]:void 0,A=void 0!==g,h=0,C=u(p);if(A&&(g=r(g,f>2?arguments[2]:void 0,2)),null==C||m==Array&&l(C))for(e=new m(n=s(p.length));n>h;h++)d(e,h,A?g(p[h],h):p[h]);else for(c=C.call(p),e=new m;!(i=c.next()).done;h++)d(e,h,A?a(c,g,[i.value,h],!0):i.value);return e.length=h,e}})},3882:(t,n,e)=>{"use strict";var r=e(79003),i=e(85084),o=e(15449),a=e(7932);t.exports=e(45700)(Array,"Array",(function(t,n){this._t=a(t),this._i=0,this._k=n}),(function(){var t=this._t,n=this._k,e=this._i++;return!t||e>=t.length?(this._t=void 0,i(1)):i(0,"keys"==n?e:"values"==n?t[e]:[e,t[e]])}),"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},72699:(t,n,e)=>{var r=e(83856);r(r.S+r.F,"Object",{assign:e(88082)})},86760:(t,n,e)=>{var r=e(83856);r(r.S,"Object",{create:e(98989)})},31477:(t,n,e)=>{var r=e(83856);r(r.S+r.F*!e(89666),"Object",{defineProperty:e(4743).f})},40961:(t,n,e)=>{var r=e(66530),i=e(46162);e(12584)("keys",(function(){return function(t){return i(r(t))}}))},94058:()=>{},32878:(t,n,e)=>{"use strict";var r,i,o,a,l=e(16227),s=e(33938),d=e(19216),u=e(14677),c=e(83856),p=e(36727),m=e(85663),f=e(29142),g=e(45576),A=e(32707),h=e(62569).set,C=e(81601)(),b=e(59304),$=e(10931),v=e(26640),x=e(87790),y="Promise",w=s.TypeError,B=s.process,k=B&&B.versions,_=k&&k.v8||"",I=s.Promise,D="process"==u(B),S=function(){},z=i=b.f,E=!!function(){try{var t=I.resolve(1),n=(t.constructor={})[e(22939)("species")]=function(t){t(S,S)};return(D||"function"==typeof PromiseRejectionEvent)&&t.then(S)instanceof n&&0!==_.indexOf("6.6")&&-1===v.indexOf("Chrome/66")}catch(t){}}(),G=function(t){var n;return!(!p(t)||"function"!=typeof(n=t.then))&&n},T=function(t,n){if(!t._n){t._n=!0;var e=t._c;C((function(){for(var r=t._v,i=1==t._s,o=0,a=function(n){var e,o,a,l=i?n.ok:n.fail,s=n.resolve,d=n.reject,u=n.domain;try{l?(i||(2==t._h&&O(t),t._h=1),!0===l?e=r:(u&&u.enter(),e=l(r),u&&(u.exit(),a=!0)),e===n.promise?d(w("Promise-chain cycle")):(o=G(e))?o.call(e,s,d):s(e)):d(r)}catch(t){u&&!a&&u.exit(),d(t)}};e.length>o;)a(e[o++]);t._c=[],t._n=!1,n&&!t._h&&M(t)}))}},M=function(t){h.call(s,(function(){var n,e,r,i=t._v,o=j(t);if(o&&(n=$((function(){D?B.emit("unhandledRejection",i,t):(e=s.onunhandledrejection)?e({promise:t,reason:i}):(r=s.console)&&r.error&&r.error("Unhandled promise rejection",i)})),t._h=D||j(t)?2:1),t._a=void 0,o&&n.e)throw n.v}))},j=function(t){return 1!==t._h&&0===(t._a||t._c).length},O=function(t){h.call(s,(function(){var n;D?B.emit("rejectionHandled",t):(n=s.onrejectionhandled)&&n({promise:t,reason:t._v})}))},F=function(t){var n=this;n._d||(n._d=!0,(n=n._w||n)._v=t,n._s=2,n._a||(n._a=n._c.slice()),T(n,!0))},L=function(t){var n,e=this;if(!e._d){e._d=!0,e=e._w||e;try{if(e===t)throw w("Promise can't be resolved itself");(n=G(t))?C((function(){var r={_w:e,_d:!1};try{n.call(t,d(L,r,1),d(F,r,1))}catch(t){F.call(r,t)}})):(e._v=t,e._s=1,T(e,!1))}catch(t){F.call({_w:e,_d:!1},t)}}};E||(I=function(t){f(this,I,y,"_h"),m(t),r.call(this);try{t(d(L,this,1),d(F,this,1))}catch(t){F.call(this,t)}},(r=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=e(48144)(I.prototype,{then:function(t,n){var e=z(A(this,I));return e.ok="function"!=typeof t||t,e.fail="function"==typeof n&&n,e.domain=D?B.domain:void 0,this._c.push(e),this._a&&this._a.push(e),this._s&&T(this,!1),e.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new r;this.promise=t,this.resolve=d(L,t,1),this.reject=d(F,t,1)},b.f=z=function(t){return t===I||t===a?new o(t):i(t)}),c(c.G+c.W+c.F*!E,{Promise:I}),e(25378)(I,y),e(39967)(y),a=e(34579).Promise,c(c.S+c.F*!E,y,{reject:function(t){var n=z(this);return(0,n.reject)(t),n.promise}}),c(c.S+c.F*(l||!E),y,{resolve:function(t){return x(l&&this===a?I:this,t)}}),c(c.S+c.F*!(E&&e(96630)((function(t){I.all(t).catch(S)}))),y,{all:function(t){var n=this,e=z(n),r=e.resolve,i=e.reject,o=$((function(){var e=[],o=0,a=1;g(t,!1,(function(t){var l=o++,s=!1;e.push(void 0),a++,n.resolve(t).then((function(t){s||(s=!0,e[l]=t,--a||r(e))}),i)})),--a||r(e)}));return o.e&&i(o.v),e.promise},race:function(t){var n=this,e=z(n),r=e.reject,i=$((function(){g(t,!1,(function(t){n.resolve(t).then(e.resolve,r)}))}));return i.e&&r(i.v),e.promise}})},91867:(t,n,e)=>{"use strict";var r=e(90510)(!0);e(45700)(String,"String",(function(t){this._t=String(t),this._i=0}),(function(){var t,n=this._t,e=this._i;return e>=n.length?{value:void 0,done:!0}:(t=r(n,e),this._i+=t.length,{value:t,done:!1})}))},21013:(t,n,e)=>{var r=e(83856),i=e(52050)(!1);r(r.S,"Object",{values:function(t){return i(t)}})},95971:(t,n,e)=>{"use strict";var r=e(83856),i=e(34579),o=e(33938),a=e(32707),l=e(87790);r(r.P+r.R,"Promise",{finally:function(t){var n=a(this,i.Promise||o.Promise),e="function"==typeof t;return this.then(e?function(e){return l(n,t()).then((function(){return e}))}:t,e?function(e){return l(n,t()).then((function(){throw e}))}:t)}})},22526:(t,n,e)=>{"use strict";var r=e(83856),i=e(59304),o=e(10931);r(r.S,"Promise",{try:function(t){var n=i.f(this),e=o(t);return(e.e?n.reject:n.resolve)(e.v),n.promise}})},73871:(t,n,e)=>{e(3882);for(var r=e(33938),i=e(41818),o=e(15449),a=e(22939)("toStringTag"),l="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),s=0;s<l.length;s++){var d=l[s],u=r[d],c=u&&u.prototype;c&&!c[a]&&i(c,a,d),o[d]=o.Array}},20251:(t,n,e)=>{"use strict";e.r(n),e.d(n,{default:()=>l});var r=e(94015),i=e.n(r),o=e(23645),a=e.n(o)()(i());a.push([t.id,".serp-preview[data-v-66c4c5ab]{margin-top:15px;margin-bottom:15px;border-radius:2px;box-shadow:0 0 5px 0 rgba(0,0,0,0.12);background-color:#ffffff;border:solid 1px #e7e7e7;padding:30px;max-width:700px}.serp-preview .serp-arrow[data-v-66c4c5ab]{border-bottom-color:#006621;border-bottom-style:solid;border-bottom-width:0px;border-left-color:rgba(0,0,0,0);border-left-style:solid;border-left-width:4px;border-right-color:rgba(0,0,0,0);border-right-style:solid;border-right-width:4px;border-top-color:#006621;border-top-style:solid;border-top-width:5px;color:gray;cursor:default;font-family:arial, sans-serif;font-size:11px;font-weight:bold;height:0px;position:absolute;line-height:27px;margin-left:3px;margin-top:6px;text-align:center;user-select:none;visibility:visible;white-space:nowrap;width:0px}.serp-preview .serp-title[data-v-66c4c5ab]{color:#1A0DAB;cursor:pointer;font-family:arial, regular;font-size:18px;font-weight:normal;text-align:left;text-decoration:none;visibility:visible;white-space:nowrap}.serp-preview .serp-url[data-v-66c4c5ab]{color:#006621;font-family:arial, regular;font-size:14px;font-style:normal;font-weight:normal;line-height:24px;text-align:left;visibility:visible}.serp-preview .serp-description[data-v-66c4c5ab]{color:#545454;font-family:arial, regular;font-size:13px;font-weight:normal;text-align:left;visibility:visible;word-wrap:break-word}\n","",{version:3,sources:["webpack://./js/app/utils/serp/serp.vue"],names:[],mappings:"AA6EA,+BACI,eAAgB,CAChB,kBAAmB,CACnB,iBAAkB,CAClB,qCAAyC,CACzC,wBAAyB,CACzB,wBAAyB,CACzB,YAAa,CACb,eAAgB,CARpB,2CAWQ,2BAAoC,CACpC,yBAA0B,CAC1B,uBAAwB,CACxB,+BAAmC,CACnC,uBAAwB,CACxB,qBAAsB,CACtB,gCAAoC,CACpC,wBAAyB,CACzB,sBAAuB,CACvB,wBAAiC,CACjC,sBAAuB,CACvB,oBAAqB,CACrB,UAAyB,CACzB,cAAe,CACf,6BAA8B,CAC9B,cAAe,CACf,gBAAiB,CACjB,UAAW,CACX,iBAAkB,CAClB,gBAAiB,CACjB,eAAgB,CAChB,cAAe,CACf,iBAAkB,CAClB,gBAAiB,CACjB,kBAAmB,CACnB,kBAAmB,CACnB,SAAU,CArClB,2CAyCQ,aAAc,CACd,cAAe,CACf,0BAA2B,CAC3B,cAAe,CACf,kBAAmB,CACnB,eAAgB,CAChB,oBAAqB,CACrB,kBAAmB,CACnB,kBAAmB,CAjD3B,yCAqDQ,aAAc,CACd,0BAA2B,CAC3B,cAAe,CACf,iBAAkB,CAClB,kBAAmB,CACnB,gBAAiB,CACjB,eAAgB,CAChB,kBAAmB,CA5D3B,iDAgEQ,aAAc,CACd,0BAA2B,CAC3B,cAAe,CACf,kBAAmB,CACnB,eAAgB,CAChB,kBAAmB,CACnB,oBAAqB",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.serp-preview {\n margin-top: 15px;\n margin-bottom: 15px;\n border-radius: 2px;\n box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.12);\n background-color: #ffffff;\n border: solid 1px #e7e7e7;\n padding: 30px;\n max-width: 700px;\n\n .serp-arrow {\n border-bottom-color: rgb(0, 102, 33);\n border-bottom-style: solid;\n border-bottom-width: 0px;\n border-left-color: rgba(0, 0, 0, 0);\n border-left-style: solid;\n border-left-width: 4px;\n border-right-color: rgba(0, 0, 0, 0);\n border-right-style: solid;\n border-right-width: 4px;\n border-top-color: rgb(0, 102, 33);\n border-top-style: solid;\n border-top-width: 5px;\n color: rgb(128, 128, 128);\n cursor: default;\n font-family: arial, sans-serif;\n font-size: 11px;\n font-weight: bold;\n height: 0px;\n position: absolute;\n line-height: 27px;\n margin-left: 3px;\n margin-top: 6px;\n text-align: center;\n user-select: none;\n visibility: visible;\n white-space: nowrap;\n width: 0px;\n }\n\n .serp-title {\n color: #1A0DAB;\n cursor: pointer;\n font-family: arial, regular;\n font-size: 18px;\n font-weight: normal;\n text-align: left;\n text-decoration: none;\n visibility: visible;\n white-space: nowrap;\n }\n\n .serp-url {\n color: #006621;\n font-family: arial, regular;\n font-size: 14px;\n font-style: normal;\n font-weight: normal;\n line-height: 24px;\n text-align: left;\n visibility: visible;\n }\n\n .serp-description {\n color: #545454;\n font-family: arial, regular;\n font-size: 13px;\n font-weight: normal;\n text-align: left;\n visibility: visible;\n word-wrap: break-word;\n }\n}\n"],sourceRoot:""}]);const l=a},77454:(t,n,e)=>{"use strict";e.r(n),e.d(n,{default:()=>l});var r=e(94015),i=e.n(r),o=e(23645),a=e.n(o)()(i());a.push([t.id,"#combination-edit-modal .combination-modal .modal{display:flex;align-items:flex-start;justify-content:center}#combination-edit-modal .combination-modal .modal-dialog{max-width:990px;width:90%;height:95%;margin:0}#combination-edit-modal .combination-modal .modal-dialog .modal-header{display:none}#combination-edit-modal .combination-modal .modal-dialog .modal-content{height:100%;padding:0;margin:0 1rem;overflow:hidden}#combination-edit-modal .combination-modal .modal-dialog .modal-content .modal-body{padding:0.5rem;margin:0;background:#eaebec}#combination-edit-modal .combination-modal .modal-dialog .modal-content .modal-body .combination-loading{position:absolute;width:100%;height:100%;display:flex;align-items:center;justify-content:center;z-index:1;background:rgba(255,255,255,0.8)}#combination-edit-modal .combination-modal .modal-dialog .modal-content .modal-body .combination-iframe{padding:0;margin:0;border:0;outline:none;vertical-align:top;width:100%;height:100%;display:block}#combination-edit-modal .combination-modal .modal-dialog .modal-content .modal-body .combination-iframe .card{margin-bottom:0}#combination-edit-modal .combination-modal .modal-dialog .modal-content .modal-footer{margin:0;padding:0.6rem 1rem;display:flex;flex-direction:row;justify-content:flex-end}#combination-edit-modal .combination-modal .modal-dialog .modal-content .modal-footer .btn-close{margin-right:auto}#combination-edit-modal .combination-modal .history{max-width:400px;width:100%;min-height:calc(100% - 3.5rem);top:50%;transform:translateY(-50%);height:95%;margin-right:1rem}\n","",{version:3,sources:["webpack://./js/pages/product/components/combination-modal/CombinationModal.vue"],names:[],mappings:"AA+XA,kDAEI,YAAa,CACb,sBAAuB,CACvB,sBAAuB,CAJ3B,yDAQI,eAAgB,CAChB,SAAU,CACV,UAAW,CACX,QAAS,CAXb,uEAcM,YAAa,CAdnB,wEAkBM,WAAY,CACZ,SAAU,CACV,aAAc,CACd,eAAgB,CArBtB,oFAwBQ,cAAe,CACf,QAAS,CACT,kBAAmB,CA1B3B,yGA6BU,iBAAkB,CAClB,UAAW,CACX,WAAY,CACZ,YAAa,CACb,kBAAmB,CACnB,sBAAuB,CACvB,SAAU,CACV,gCAAoC,CApC9C,wGAwCU,SAAU,CACV,QAAS,CACT,QAAS,CACT,YAAa,CACb,kBAAmB,CACnB,UAAW,CACX,WAAY,CACZ,aAAc,CA/CxB,8GAkDY,eAAgB,CAlD5B,sFAwDQ,QAAS,CACT,mBAAoB,CACpB,YAAa,CACb,kBAAmB,CACnB,wBAAyB,CA5DjC,iGA+DU,iBAAkB,CA/D5B,oDAsEI,eAAgB,CAChB,UAAW,CACX,8BAA+B,CAC/B,OAAQ,CACR,0BAA2B,CAC3B,UAAW,CACX,iBAAkB",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@import '~@scss/config/_settings.scss';\n\n#combination-edit-modal .combination-modal {\n .modal {\n display: flex;\n align-items: flex-start;\n justify-content: center;\n }\n\n .modal-dialog {\n max-width: 990px;\n width: 90%;\n height: 95%;\n margin: 0;\n\n .modal-header {\n display: none;\n }\n\n .modal-content {\n height: 100%;\n padding: 0;\n margin: 0 1rem;\n overflow: hidden;\n\n .modal-body {\n padding: 0.5rem;\n margin: 0;\n background: #eaebec;\n\n .combination-loading {\n position: absolute;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1;\n background: rgba(255, 255, 255, 0.8);\n }\n\n .combination-iframe {\n padding: 0;\n margin: 0;\n border: 0;\n outline: none;\n vertical-align: top;\n width: 100%;\n height: 100%;\n display: block;\n\n .card {\n margin-bottom: 0;\n }\n }\n }\n\n .modal-footer {\n margin: 0;\n padding: 0.6rem 1rem;\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n\n .btn-close {\n margin-right: auto;\n }\n }\n }\n }\n\n .history {\n max-width: 400px;\n width: 100%;\n min-height: calc(100% - 3.5rem);\n top: 50%;\n transform: translateY(-50%);\n height: 95%;\n margin-right: 1rem;\n }\n}\n"],sourceRoot:""}]);const l=a},15279:(t,n,e)=>{"use strict";e.r(n),e.d(n,{default:()=>l});var r=e(94015),i=e.n(r),o=e(23645),a=e.n(o)()(i());a.push([t.id,".history-list{padding:0;margin:0}.history .card-block{padding:0;height:calc(100% - 7rem)}.history-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;height:calc(100% - 4rem)}.history-empty-tip{color:#8a8a8a;font-size:1rem;text-align:center;max-width:280px;margin-top:1.75rem}.history-item{list-style-type:none;padding:0.75rem 1rem;transition:0.25s ease-out;cursor:pointer;position:relative}.history-item i{color:#25b9d7;opacity:0;position:absolute;top:50%;transform:translateY(-50%);right:1rem;font-size:1.25rem;transition:0.25s ease-out}.history-item.selected{background:#f7f7f7}.history-item:hover{background:#f0fcfd;color:#25b9d7}.history-item:hover i{opacity:1}\n","",{version:3,sources:["webpack://./js/pages/product/components/combination-modal/History.vue","webpack://./node_modules/prestakit/scss/_variables.scss"],names:[],mappings:"AA+JE,cACE,SAAU,CACV,QAAS,CAHb,qBAOI,SAAU,CACV,wBAAyB,CAC1B,eAGC,YAAa,CACb,qBAAsB,CACtB,kBAAmB,CACnB,sBAAuB,CACvB,wBAAyB,CAEzB,mBACE,aAAc,CACd,cAAe,CACf,iBAAkB,CAClB,eAAgB,CAChB,kBAAmB,CACpB,cAID,oBAAqB,CACrB,oBAAqB,CACrB,yBAA0B,CAC1B,cAAe,CACf,iBAAkB,CALnB,gBAQG,aC/JQ,CDgKR,SAAU,CACV,iBAAkB,CAClB,OAAQ,CACR,0BAA2B,CAC3B,UAAW,CACX,iBAAkB,CAClB,yBAA0B,CAf7B,uBAmBG,kBAAmB,CAnBtB,oBAuBG,kBAAmB,CACnB,aC/KQ,CDuJX,sBA2BK,SAAU",sourcesContent:['\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@import "~@scss/config/_settings.scss";\n\n.history {\n &-list {\n padding: 0;\n margin: 0;\n }\n\n .card-block {\n padding: 0;\n height: calc(100% - 7rem);\n }\n\n &-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: calc(100% - 4rem);\n\n &-tip {\n color: #8a8a8a;\n font-size: 1rem;\n text-align: center;\n max-width: 280px;\n margin-top: 1.75rem;\n }\n }\n\n &-item {\n list-style-type: none;\n padding: 0.75rem 1rem;\n transition: 0.25s ease-out;\n cursor: pointer;\n position: relative;\n\n i {\n color: $primary;\n opacity: 0;\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n right: 1rem;\n font-size: 1.25rem;\n transition: 0.25s ease-out;\n }\n\n &.selected {\n background: #f7f7f7;\n }\n\n &:hover {\n background: #f0fcfd;\n color: $primary;\n\n i {\n opacity: 1;\n }\n }\n }\n}\n','/* stylelint-disable */\n\n// Color system\n$white: #fff;\n$gray-disabled: #eaebec;\n$gray-100: #fafbfc;\n$gray-200: #fafbfc;\n$gray-250: #fafbfc;\n$gray-300: #bbcdd2;\n$gray-400: #bbcdd2;\n$gray-450: #b3c7cd;\n$gray-500: #6c868e;\n$gray-550: #708090;\n$gray-600: #6c868e;\n$gray-700: #363a41;\n$gray-750: #363a41;\n$gray-800: #363a41;\n$gray-900: #282b30;\n$black: #000;\n\n// PS Vars\n$extra-light-gray: $gray-100;\n$light-gray: $gray-300;\n$medium-gray: $gray-500;\n$dark-gray: $gray-700;\n$extra-dark-gray: $gray-900;\n$gray-light: $light-gray;\n$gray-medium: $medium-gray;\n$gray-dark: $dark-gray;\n$gray-soft: $gray-200;\n$background-color: #eff1f2;\n$primary-lighten: #f4fcfd;\n$local-font: false !default;\n\n$blue: #25b9d7;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #f54c3e;\n$orange: #fd7e14 !default;\n$yellow: #fab000;\n$green: #70b580;\n$orange: #fd7e14 !default;\n$teal: #20c997 !default;\n$cyan: $blue;\n$light-blue: #f4fcfd;\n\n// main button background colors\n$primary-hover: #7cd5e7;\n$primary-active: #21a6c1;\n$primary-disabled: #d3f1f7;\n$secondary-hover: #b7ced3;\n$secondary-active: #889da2;\n$danger-hover: #fde1e1;\n$notice: #dff5f9;\n\n$primary: $blue !default;\n$secondary: $medium-gray;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$toast-success: #53d572 !default;\n$toast-warning: #fab000 !default;\n\n$brand-primary: $primary !default;\n$brand-secondary: $secondary !default;\n$brand-info: #5bc0de !default;\n$brand-warning: #f0ad4e !default;\n$brand-success: $success !default;\n$brand-danger: $danger !default;\n\n$btn-primary-bg: $primary-hover;\n$btn-secondary-border: #000;\n$btn-info-bg: $brand-info !default;\n$btn-success-bg: $brand-success !default;\n$btn-warning-bg: $brand-warning !default;\n$btn-danger-bg: $brand-danger !default;\n\n$theme-colors: (\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": $warning,\n "danger": $danger,\n "light": $light,\n "dark": $dark\n);\n\n$alerts-background-colors: (\n "success": #cbf2d4,\n "info": #beeaf3,\n "warning": #fffbd3,\n "danger": #fbc6c3\n);\n\n$alerts-second-colors: (\n "success": #53d572,\n "info": #25b9d7,\n "warning": #fab000,\n "danger": #f44336\n);\n\n$theme-alerts-icons: (\n success: "\\E5CA",\n info: "\\e88e",\n warning: "\\E002",\n danger: "\\e000"\n);\n\n$theme-colors-icons: (\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": #fab000,\n "danger": $danger,\n "light": $light\n);\n\n$theme-colors-hover: (\n primary: $primary-hover,\n secondary: $secondary-hover,\n success: #9bcba6,\n info: $primary-hover,\n warning: #e6b045,\n danger: #e76d7a,\n light: $gray-800,\n dark: $gray-100,\n default: $light-blue\n);\n\n$theme-colors-active: (\n primary: $primary-active,\n secondary: $secondary-active,\n success: #5a9166,\n info: darken(map-get($theme-colors, "info"), 10%),\n warning: darken(map-get($theme-colors, "warning"), 10%),\n danger: #c3362b,\n light: darken(map-get($theme-colors, "light"), 10%),\n dark: darken(map-get($theme-colors, "dark"), 10%),\n default: $primary\n);\n\n$theme-colors-background: (\n primary: #dff5f9,\n secondary: $black,\n success: #d6f0d8,\n info: #dff5f9,\n warning: #fffbd3,\n danger: #fde1e1,\n light: $gray-200,\n dark: $gray-700\n);\n\n$theme-colors-shadow: (\n primary: theme-color("primary"),\n secondary: $black,\n success: theme-color("success"),\n info: theme-color("info"),\n warning: theme-color("warning"),\n danger: theme-color("danger"),\n light: theme-color("light"),\n dark: theme-color("dark")\n);\n\n// Options\n$enable-caret: true !default;\n$enable-rounded: true;\n$enable-shadows: true;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n// Spacing\n$spacer: 1.875rem;\n\n$spacers: (\n 0: 0,\n 1: (\n $spacer / 6\n ),\n 2: (\n $spacer / 3\n ),\n 3: (\n $spacer / 2\n ),\n 4: $spacer,\n 5: (\n $spacer * 2\n )\n);\n\n// Body\n$body-bg: $white !default;\n$body-color: $dark-gray;\n\n// Links\n$link-hover-color: theme-color("primary") !default;\n$link-hover-decoration: underline;\n\n// Paragraphs\n$paragraph-margin-bottom: 1rem;\n\n// Grid breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 544px,\n md: 768px,\n lg: 1024px,\n xl: 1300px,\n xxl: 1600px // PS custom\n);\n@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n// Grid containers\n$container-max-widths: (\n sm: 576px,\n md: 720px,\n lg: 972px,\n xl: 1240px\n);\n@include _assert-ascending($container-max-widths, "$container-max-widths");\n\n// Grid columns\n//$grid-columns: 12 !default;\n$grid-gutter-width: 1.875rem !default;\n\n// Components\n//$line-height-lg: 1.5 !default;\n//$line-height-sm: 1.5 !default;\n\n//$border-width: 1px !default;\n//$border-color: $gray-300 !default;\n\n$border-radius: 4px !default;\n//$border-radius-lg: .3rem !default;\n//$border-radius-sm: .2rem !default;\n\n//$component-active-color: $white !default;\n//$component-active-bg: theme-color("primary") !default;\n\n$caret-width: .25rem;\n\n//$transition-base: all .2s ease-in-out !default;\n//$transition-fade: opacity .15s linear !default;\n//$transition-collapse: height .35s ease !default;\n\n// Fonts\n$font-family-sans-serif: "Open Sans", helvetica, arial, sans-serif;\n//$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;\n//$font-family-base: $font-family-sans-serif !default;\n\n$font-size-base: .875rem;\n$font-size-lg: 1rem;\n$font-size-sm: .75rem;\n$font-size-xs: .625rem; // PS custom\n\n//$font-weight-light: 300;\n//$font-weight-normal: 400;\n$font-weight-semibold: 600;\n$font-weight-bold: 700;\n\n$h1-font-size: 1.5rem;\n$h2-font-size: 1.25rem;\n$h3-font-size: 1rem;\n$h4-font-size: .875rem;\n$h5-font-size: .75rem;\n$h6-font-size: .625rem;\n\n//$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: $font-family-sans-serif;\n$headings-font-weight: $font-weight-bold;\n$headings-color: $body-color;\n\n//$display1-size: 6rem !default;\n//$display2-size: 5.5rem !default;\n//$display3-size: 4.5rem !default;\n//$display4-size: 3.5rem !default;\n\n//$display1-weight: 300 !default;\n//$display2-weight: 300 !default;\n//$display3-weight: 300 !default;\n//$display4-weight: 300 !default;\n//$display-line-height: $headings-line-height !default;\n\n//$lead-font-size: ($font-size-base * 1.25) !default;\n//$lead-font-weight: 300 !default;\n\n//$small-font-size: 80% !default;\n\n$text-muted: $medium-gray;\n\n//$blockquote-small-color: $gray-600 !default;\n//$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: $light-gray;\n//$hr-border-width: $border-width !default;\n\n//$mark-padding: .2em !default;\n\n//$dt-font-weight: $font-weight-bold !default;\n\n//$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n//$nested-kbd-font-weight: $font-weight-bold !default;\n\n//$list-inline-padding: .5rem !default;\n\n//$mark-bg: #fcf8e3 !default;\n\n//$hr-margin-y: $spacer !default;\n\n// Tables\n$table-cell-padding: .4rem;\n$table-cell-padding-sm: .25rem;\n\n//$table-bg: transparent !default;\n$table-accent-bg: $background-color;\n$table-hover-bg: theme-color-hover("primary");\n$table-active-bg: theme-color-hover("primary");\n\n//$table-border-width: $border-width !default;\n//$table-border-color: $gray-300 !default;\n\n$table-head-bg: $background-color;\n$table-head-color: $body-color;\n\n$table-dark-bg: $body-color;\n$table-dark-accent-bg: $extra-dark-gray;\n$table-dark-hover-bg: theme-color-hover("primary");\n$table-dark-border-color: $medium-gray;\n//$table-dark-color: $body-bg !default;\n\n// Buttons\n$input-btn-padding-y: .375rem;\n$input-btn-padding-x: .838rem;\n//$input-btn-line-height: $line-height-base !default;\n\n//$input-btn-focus-width: .2rem !default;\n//$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n//$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .313rem;\n$input-btn-padding-x-sm: .625rem;\n//$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .438rem;\n$input-btn-padding-x-lg: .838rem;\n//$input-btn-line-height-lg: $line-height-lg !default;\n\n//$input-btn-border-width: $border-width !default;\n\n// Buttons\n$btn-padding-y: .5rem !default;\n$btn-padding-x: 1rem !default;\n//$btn-line-height: $input-btn-line-height !default;\n\n//$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n//$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n//$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n//$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n//$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n//$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n//$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-semibold;\n$btn-box-shadow: none;\n//$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: none;\n//$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: none;\n\n//$btn-link-disabled-color: $gray-600 !default;\n\n//$btn-block-spacing-y: .5rem !default;\n\n$btn-border-radius: 4px;\n//$btn-border-radius-lg: $border-radius-lg !default;\n//$btn-border-radius-sm: $border-radius-sm !default;\n\n//$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n// Forms\n$input-padding-y: .375rem;\n$input-padding-x: .4375rem;\n//$input-line-height: $input-btn-line-height !default;\n\n//$input-padding-y-sm: $input-btn-padding-y-sm !default;\n//$input-padding-x-sm: $input-btn-padding-x-sm !default;\n//$input-line-height-sm: $input-btn-line-height-sm !default;\n\n//$input-padding-y-lg: $input-btn-padding-y-lg !default;\n//$input-padding-x-lg: $input-btn-padding-x-lg !default;\n//$input-line-height-lg: $input-btn-line-height-lg !default;\n\n//$input-bg: $white !default;\n$input-disabled-bg: #eceeef;\n\n$input-color: $body-color;\n$input-border-color: $light-gray;\n//$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: none;\n\n//$input-border-radius: $border-radius !default;\n//$input-border-radius-lg: $border-radius-lg !default;\n//$input-border-radius-sm: $border-radius-sm !default;\n\n//$input-focus-bg: $input-bg !default;\n$input-focus-border-color: theme-color-hover("primary");\n//$input-focus-color: $input-color !default;\n//$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: none;\n\n$input-placeholder-color: $medium-gray;\n\n//$input-height-border: $input-border-width * 2 !default;\n\n//$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: 2.188rem;\n\n//$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n//$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n//$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: 2.188rem;\n\n//$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n//$form-text-margin-top: .25rem !default;\n\n//$form-check-input-gutter: 1.25rem !default;\n//$form-check-input-margin-y: .3rem !default;\n//$form-check-input-margin-x: .25rem !default;\n\n//$form-check-inline-margin-x: .75rem !default;\n//$form-check-inline-input-margin-x: .3125rem !default;\n\n//$form-group-margin-bottom: 1rem !default;\n\n//$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $extra-light-gray;\n//$input-group-addon-border-color: $input-border-color !default;\n\n//$custom-control-gutter: 1.5rem !default;\n//$custom-control-spacer-x: 1rem !default;\n\n//$custom-control-indicator-size: 1rem !default;\n//$custom-control-indicator-bg: $gray-300 !default;\n//$custom-control-indicator-bg-size: 50% 50% !default;\n//$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n//$custom-control-indicator-disabled-bg: $gray-200 !default;\n//$custom-control-label-disabled-color: $gray-600 !default;\n\n//$custom-control-indicator-checked-color: $component-active-color !default;\n//$custom-control-indicator-checked-bg: $component-active-bg !default;\n//$custom-control-indicator-checked-disabled-bg: rgba(theme-color("primary"), .5) !default;\n//$custom-control-indicator-checked-box-shadow: none !default;\n\n//$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n//$custom-control-indicator-active-color: $component-active-color !default;\n//$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n//$custom-control-indicator-active-box-shadow: none !default;\n\n//$custom-checkbox-indicator-border-radius: $border-radius !default;\n//$custom-checkbox-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 8 8\'%3E%3Cpath fill=\'#{$custom-control-indicator-checked-color}\' d=\'M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n//$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n//$custom-checkbox-indicator-icon-indeterminate: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 4\'%3E%3Cpath stroke=\'#{$custom-checkbox-indicator-indeterminate-color}\' d=\'M0 2h4\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n//$custom-radio-indicator-border-radius: 50% !default;\n//$custom-radio-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'-4 -4 8 8\'%3E%3Ccircle r=\'3\' fill=\'#{$custom-control-indicator-checked-color}\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$custom-select-padding-y: .375rem !default;\n//$custom-select-padding-x: .75rem !default;\n//$custom-select-height: $input-height !default;\n//$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n//$custom-select-line-height: $input-btn-line-height !default;\n//$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $medium-gray;\n//$custom-select-bg: $white !default;\n$custom-select-disabled-bg: $input-disabled-bg;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $input-color;\n//$custom-select-indicator: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 5\'%3E%3Cpath fill=\'#{$custom-select-indicator-color}\' d=\'M2 0L0 2h4zm0 5L0 3h4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$custom-select-border-width: $input-btn-border-width !default;\n//$custom-select-border-color: $input-border-color !default;\n//$custom-select-border-radius: $border-radius !default;\n\n$custom-select-focus-border-color: $input-focus-border-color;\n$custom-select-focus-box-shadow: $input-focus-box-shadow;\n\n//$custom-select-font-size-sm: 75% !default;\n//$custom-select-height-sm: $input-height-sm !default;\n\n//$custom-select-font-size-lg: 125% !default;\n//$custom-select-height-lg: $input-height-lg !default;\n\n//$custom-file-height: $input-height !default;\n//$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow;\n\n//$custom-file-padding-y: $input-btn-padding-y !default;\n//$custom-file-padding-x: $input-btn-padding-x !default;\n//$custom-file-line-height: $input-btn-line-height !default;\n//$custom-file-color: $input-color !default;\n//$custom-file-bg: $input-bg !default;\n//$custom-file-border-width: $input-btn-border-width !default;\n//$custom-file-border-color: $input-border-color !default;\n//$custom-file-border-radius: $input-border-radius !default;\n//$custom-file-box-shadow: $input-box-shadow !default;\n//$custom-file-button-color: $custom-file-color !default;\n//$custom-file-button-bg: $input-group-addon-bg !default;\n//$custom-file-text: (\n// en: "Browse"\n//) !default;\n\n$cursor-disabled: not-allowed; // PS custom\n\n// Form validation\n//$form-feedback-margin-top: $form-text-margin-top !default;\n//$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color("success");\n$form-feedback-invalid-color: theme-color("danger");\n$form-feedback-warning-color: theme-color("warning"); // PS custom\n\n// Dropdowns\n//$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: 0;\n//$dropdown-padding-y: .5rem !default;\n//$dropdown-spacer: .125rem !default;\n//$dropdown-bg: $white !default;\n$dropdown-border-color: $light-gray;\n//$dropdown-border-radius: $border-radius !default;\n//$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $light-gray;\n//$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $medium-gray;\n$dropdown-link-hover-color: theme-color("primary");\n$dropdown-link-hover-bg: $white;\n\n//$dropdown-link-active-color: $component-active-color !default;\n//$dropdown-link-active-bg: $component-active-bg !default;\n\n//$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-x: .3125rem;\n$dropdown-item-padding-y: .3125rem;\n\n//$dropdown-header-color: $gray-600 !default;\n\n// Navs\n$nav-link-padding-y: .9375rem;\n$nav-link-padding-x: 1.25rem;\n$nav-link-disabled-color: $light-gray;\n\n$nav-tabs-border-color: $white;\n//$nav-tabs-border-width: $border-width !default;\n//$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: theme-color("primary");\n$nav-tabs-link-active-color: $body-color;\n$nav-tabs-link-active-bg: $body-bg;\n$nav-tabs-link-active-border-color: theme-color("primary");\n\n$nav-pills-link-hover-border-color: $nav-tabs-link-hover-border-color;\n$nav-pills-link-active-color: $nav-tabs-link-active-color;\n$nav-pills-link-active-bg: #f4f9fb;\n$nav-pills-link-active-border-color: $nav-tabs-link-active-border-color; // PS custom\n\n//$nav-pills-border-radius: $border-radius !default;\n//$nav-pills-link-active-color: $component-active-color !default;\n//$nav-pills-link-active-bg: $component-active-bg !default;\n\n// Navbar\n//$navbar-padding-y: ($spacer / 2) !default;\n//$navbar-padding-x: $spacer !default;\n\n//$navbar-nav-link-padding-x: .5rem !default;\n\n//$navbar-brand-font-size: $font-size-lg !default;\n\n//$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n//$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n//$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n//$navbar-toggler-padding-y: .25rem !default;\n//$navbar-toggler-padding-x: .75rem !default;\n//$navbar-toggler-font-size: $font-size-lg !default;\n//$navbar-toggler-border-radius: $btn-border-radius !default;\n\n//$navbar-dark-color: rgba($white, .5) !default;\n//$navbar-dark-hover-color: rgba($white, .75) !default;\n//$navbar-dark-active-color: $white !default;\n//$navbar-dark-disabled-color: rgba($white, .25) !default;\n//$navbar-dark-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-dark-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n//$navbar-light-color: rgba($black, .5) !default;\n//$navbar-light-hover-color: rgba($black, .7) !default;\n//$navbar-light-active-color: rgba($black, .9) !default;\n//$navbar-light-disabled-color: rgba($black, .3) !default;\n//$navbar-light-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-light-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n// Pagination\n$pagination-padding-y: .65rem;\n$pagination-padding-x: .5rem;\n//$pagination-padding-y-sm: .25rem !default;\n//$pagination-padding-x-sm: .5rem !default;\n//$pagination-padding-y-lg: .75rem !default;\n//$pagination-padding-x-lg: 1.5rem !default;\n//$pagination-line-height: 1.25 !default;\n\n$pagination-color: $medium-gray;\n$pagination-bg: $white;\n//$pagination-border-width: $border-width !default;\n$pagination-border-color: $white;\n\n//$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$pagination-hover-color: $pagination-color;\n$pagination-hover-bg: $pagination-bg;\n$pagination-hover-border-color: $pagination-border-color;\n\n$pagination-active-color: theme-color("primary");\n$pagination-active-bg: $pagination-bg;\n$pagination-active-border-color: $pagination-border-color;\n\n$pagination-disabled-color: $light-gray;\n$pagination-disabled-bg: $pagination-bg;\n$pagination-disabled-border-color: $pagination-border-color;\n\n// Jumbotron\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $extra-light-gray;\n\n// Cards\n$card-spacer-x: .625rem !default;\n$card-spacer-y: .625rem !default;\n$card-border-width: 1px !default;\n$card-border-radius: 5px !default;\n$card-border-radius-inner: $card-border-radius !default;\n$card-cap-bg: $gray-200 !default;\n$card-bg: #fff !default;\n$card-link-hover-color: #fff !default;\n$card-border-color: #dbe6e9 !default;\n//$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n//$card-cap-bg: rgba($black, .03) !default;\n//$card-bg: $white !default;\n\n//$card-img-overlay-padding: 1.25rem !default;\n\n//$card-group-margin: ($grid-gutter-width / 2) !default;\n//$card-deck-margin: $card-group-margin !default;\n\n//$card-columns-count: 3 !default;\n//$card-columns-gap: 1.25rem !default;\n//$card-columns-margin: $card-spacer-y !default;\n\n// Tooltips\n//$tooltip-font-size: $font-size-sm !default;\n//$tooltip-max-width: 200px !default;\n//$tooltip-color: $white !default;\n$tooltip-bg: $medium-gray;\n//$tooltip-border-radius: $border-radius !default;\n//$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .625rem;\n$tooltip-padding-x: 1.25rem;\n//$tooltip-margin: 0 !default;\n\n//$tooltip-arrow-width: .8rem !default;\n//$tooltip-arrow-height: .4rem !default;\n//$tooltip-arrow-color: $tooltip-bg !default;\n\n// Popovers\n//$popover-font-size: $font-size-sm !default;\n//$popover-bg: $white !default;\n//$popover-max-width: 276px !default;\n//$popover-border-width: $border-width !default;\n$popover-border-color: $light-gray;\n//$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: none;\n\n$popover-header-bg: $extra-light-gray;\n//$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .625rem;\n$popover-header-padding-x: 1.25rem;\n\n//$popover-body-color: $body-color !default;\n$popover-body-padding-y: .625rem;\n$popover-body-padding-x: 1.25rem;\n\n//$popover-arrow-width: 1rem !default;\n//$popover-arrow-height: .5rem !default;\n//$popover-arrow-color: $popover-bg !default;\n\n//$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n// Badges\n$badge-font-size: .625rem !default;\n$badge-font-weight: 500 !default;\n$badge-padding-y: .25rem;\n$badge-padding-x: .5rem;\n//$badge-border-radius: $border-radius !default;\n\n//$badge-pill-padding-x: .6em !default;\n//$badge-pill-border-radius: 10rem !default;\n\n// Modals\n$modal-inner-padding: 1.875rem;\n\n//$modal-dialog-margin: .5rem !default;\n//$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n//$modal-title-line-height: $line-height-base !default;\n\n//$modal-content-bg: $white !default;\n$modal-content-border-color: none;\n//$modal-content-border-width: $border-width !default;\n$modal-content-box-shadow-xs: 0 8px 16px 0 rgba(0, 0, 0, .1);\n$modal-content-box-shadow-sm-up: 0 8px 16px 0 rgba(0, 0, 0, .1);\n\n//$modal-backdrop-bg: $black !default;\n//$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: none;\n//$modal-footer-border-color: $modal-header-border-color !default;\n//$modal-header-border-width: $modal-content-border-width !default;\n//$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: $modal-inner-padding;\n\n$modal-lg: 900px;\n$modal-md: 680px;\n$modal-sm: 400px;\n\n//$modal-transition: transform .3s ease-out !default;\n\n// Alerts\n$alert-padding-y: 1rem !default;\n$alert-padding-x: 1rem;\n//$alert-margin-bottom: 1rem !default;\n//$alert-border-radius: $border-radius !default;\n//$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: .125rem;\n\n//$alert-bg-level: -10 !default;\n//$alert-border-level: -9 !default;\n//$alert-color-level: 6 !default;\n\n// Progress bars\n//$progress-height: 1rem !default;\n//$progress-font-size: ($font-size-base * .75) !default;\n//$progress-bg: $gray-200 !default;\n//$progress-border-radius: $border-radius !default;\n//$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n//$progress-bar-color: $white !default;\n//$progress-bar-bg: theme-color("primary") !default;\n//$progress-bar-animation-timing: 1s linear infinite !default;\n//$progress-bar-transition: width .6s ease !default;\n\n// List group\n//$list-group-bg: $white !default;\n$list-group-border-color: $light-gray;\n//$list-group-border-width: $border-width !default;\n//$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $input-padding-y;\n$list-group-item-padding-x: $input-padding-x;\n\n$list-group-hover-bg: theme-color-hover("primary");\n//$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: theme-color-hover("primary");\n//$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $light-gray;\n//$list-group-disabled-bg: $list-group-bg !default;\n\n//$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $white;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n// Image thumbnails\n$thumbnail-padding: 0;\n//$thumbnail-bg: $body-bg !default;\n//$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $light-gray;\n//$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: none;\n\n// Figures\n//$figure-caption-font-size: 90% !default;\n$figure-caption-color: $medium-gray;\n\n// Breadcrumbs\n$breadcrumb-padding-y: .3125rem;\n$breadcrumb-padding-x: .3125rem;\n$breadcrumb-item-padding: .3rem;\n\n$breadcrumb-margin-bottom: 0;\n\n$breadcrumb-bg: none;\n$breadcrumb-divider-color: $dark-gray;\n$breadcrumb-active-color: $extra-dark-gray;\n$breadcrumb-divider: "/";\n\n// Carousel\n//$carousel-control-color: $white !default;\n//$carousel-control-width: 15% !default;\n//$carousel-control-opacity: .5 !default;\n\n//$carousel-indicator-width: 30px !default;\n//$carousel-indicator-height: 3px !default;\n//$carousel-indicator-spacer: 3px !default;\n//$carousel-indicator-active-bg: $white !default;\n\n//$carousel-caption-width: 70% !default;\n//$carousel-caption-color: $white !default;\n\n//$carousel-control-icon-width: 20px !default;\n\n//$carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$carousel-transition: transform .6s ease !default;\n\n// Close\n//$close-font-size: $font-size-base * 1.5 !default;\n//$close-font-weight: $font-weight-bold !default;\n//$close-color: $black !default;\n//$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n//$code-font-size: 87.5% !default;\n$code-color: $body-color;\n\n//$kbd-padding-y: .2rem !default;\n//$kbd-padding-x: .4rem !default;\n//$kbd-font-size: $code-font-size !default;\n$kbd-color: $white;\n$kbd-bg: $extra-dark-gray;\n\n$pre-color: $body-color;\n//$pre-scrollable-max-height: 340px !default;\n\n// Printing\n//$print-page-size: a3 !default;\n//$print-body-min-width: map-get($grid-breakpoints, "lg") !default;\n'],sourceRoot:""}]);const l=a},53909:(t,n,e)=>{"use strict";e.r(n),e.d(n,{default:()=>l});var r=e(94015),i=e.n(r),o=e(23645),a=e.n(o)()(i());a.push([t.id,'.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#25b9d7 !important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#1e94ab !important}.bg-secondary{background-color:#6c868e !important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#566b71 !important}.bg-success{background-color:#70b580 !important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#539f64 !important}.bg-info{background-color:#25b9d7 !important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#1e94ab !important}.bg-warning{background-color:#fab000 !important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#c78c00 !important}.bg-danger{background-color:#f54c3e !important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#f21f0e !important}.bg-light{background-color:#fafbfc !important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#dae2e9 !important}.bg-dark{background-color:#363a41 !important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#1f2125 !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #bbcdd2 !important}.border-top{border-top:1px solid #bbcdd2 !important}.border-right{border-right:1px solid #bbcdd2 !important}.border-bottom{border-bottom:1px solid #bbcdd2 !important}.border-left{border-left:1px solid #bbcdd2 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#25b9d7 !important}.border-secondary{border-color:#6c868e !important}.border-success{border-color:#70b580 !important}.border-info{border-color:#25b9d7 !important}.border-warning{border-color:#fab000 !important}.border-danger{border-color:#f54c3e !important}.border-light{border-color:#fafbfc !important}.border-dark{border-color:#363a41 !important}.border-white{border-color:#fff !important}.rounded{border-radius:4px !important}.rounded-top{border-top-left-radius:4px !important;border-top-right-radius:4px !important}.rounded-right{border-top-right-radius:4px !important;border-bottom-right-radius:4px !important}.rounded-bottom{border-bottom-right-radius:4px !important;border-bottom-left-radius:4px !important}.rounded-left{border-top-left-radius:4px !important;border-bottom-left-radius:4px !important}.rounded-circle{border-radius:50% !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}@media (min-width: 544px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}}@media (min-width: 768px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}}@media (min-width: 1024px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}}@media (min-width: 1300px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}}@media (min-width: 1600px){.d-xxl-none{display:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.85714%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}@media (min-width: 544px){.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}}@media (min-width: 768px){.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}}@media (min-width: 1024px){.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}}@media (min-width: 1300px){.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}}@media (min-width: 1600px){.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 544px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 768px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 1024px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 1300px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}@media (min-width: 1600px){.float-xxl-left{float:left !important}.float-xxl-right{float:right !important}.float-xxl-none{float:none !important}}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position: sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;clip-path:none}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.3125rem !important}.mt-1,.my-1{margin-top:.3125rem !important}.mr-1,.mx-1{margin-right:.3125rem !important}.mb-1,.my-1{margin-bottom:.3125rem !important}.ml-1,.mx-1{margin-left:.3125rem !important}.m-2{margin:.625rem !important}.mt-2,.my-2{margin-top:.625rem !important}.mr-2,.mx-2{margin-right:.625rem !important}.mb-2,.my-2{margin-bottom:.625rem !important}.ml-2,.mx-2{margin-left:.625rem !important}.m-3{margin:.9375rem !important}.mt-3,.my-3{margin-top:.9375rem !important}.mr-3,.mx-3{margin-right:.9375rem !important}.mb-3,.my-3{margin-bottom:.9375rem !important}.ml-3,.mx-3{margin-left:.9375rem !important}.m-4{margin:1.875rem !important}.mt-4,.my-4{margin-top:1.875rem !important}.mr-4,.mx-4{margin-right:1.875rem !important}.mb-4,.my-4{margin-bottom:1.875rem !important}.ml-4,.mx-4{margin-left:1.875rem !important}.m-5{margin:3.75rem !important}.mt-5,.my-5{margin-top:3.75rem !important}.mr-5,.mx-5{margin-right:3.75rem !important}.mb-5,.my-5{margin-bottom:3.75rem !important}.ml-5,.mx-5{margin-left:3.75rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.3125rem !important}.pt-1,.py-1{padding-top:.3125rem !important}.pr-1,.px-1{padding-right:.3125rem !important}.pb-1,.py-1{padding-bottom:.3125rem !important}.pl-1,.px-1{padding-left:.3125rem !important}.p-2{padding:.625rem !important}.pt-2,.py-2{padding-top:.625rem !important}.pr-2,.px-2{padding-right:.625rem !important}.pb-2,.py-2{padding-bottom:.625rem !important}.pl-2,.px-2{padding-left:.625rem !important}.p-3{padding:.9375rem !important}.pt-3,.py-3{padding-top:.9375rem !important}.pr-3,.px-3{padding-right:.9375rem !important}.pb-3,.py-3{padding-bottom:.9375rem !important}.pl-3,.px-3{padding-left:.9375rem !important}.p-4{padding:1.875rem !important}.pt-4,.py-4{padding-top:1.875rem !important}.pr-4,.px-4{padding-right:1.875rem !important}.pb-4,.py-4{padding-bottom:1.875rem !important}.pl-4,.px-4{padding-left:1.875rem !important}.p-5{padding:3.75rem !important}.pt-5,.py-5{padding-top:3.75rem !important}.pr-5,.px-5{padding-right:3.75rem !important}.pb-5,.py-5{padding-bottom:3.75rem !important}.pl-5,.px-5{padding-left:3.75rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media (min-width: 544px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:.3125rem !important}.mt-sm-1,.my-sm-1{margin-top:.3125rem !important}.mr-sm-1,.mx-sm-1{margin-right:.3125rem !important}.mb-sm-1,.my-sm-1{margin-bottom:.3125rem !important}.ml-sm-1,.mx-sm-1{margin-left:.3125rem !important}.m-sm-2{margin:.625rem !important}.mt-sm-2,.my-sm-2{margin-top:.625rem !important}.mr-sm-2,.mx-sm-2{margin-right:.625rem !important}.mb-sm-2,.my-sm-2{margin-bottom:.625rem !important}.ml-sm-2,.mx-sm-2{margin-left:.625rem !important}.m-sm-3{margin:.9375rem !important}.mt-sm-3,.my-sm-3{margin-top:.9375rem !important}.mr-sm-3,.mx-sm-3{margin-right:.9375rem !important}.mb-sm-3,.my-sm-3{margin-bottom:.9375rem !important}.ml-sm-3,.mx-sm-3{margin-left:.9375rem !important}.m-sm-4{margin:1.875rem !important}.mt-sm-4,.my-sm-4{margin-top:1.875rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.875rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.875rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.875rem !important}.m-sm-5{margin:3.75rem !important}.mt-sm-5,.my-sm-5{margin-top:3.75rem !important}.mr-sm-5,.mx-sm-5{margin-right:3.75rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3.75rem !important}.ml-sm-5,.mx-sm-5{margin-left:3.75rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:.3125rem !important}.pt-sm-1,.py-sm-1{padding-top:.3125rem !important}.pr-sm-1,.px-sm-1{padding-right:.3125rem !important}.pb-sm-1,.py-sm-1{padding-bottom:.3125rem !important}.pl-sm-1,.px-sm-1{padding-left:.3125rem !important}.p-sm-2{padding:.625rem !important}.pt-sm-2,.py-sm-2{padding-top:.625rem !important}.pr-sm-2,.px-sm-2{padding-right:.625rem !important}.pb-sm-2,.py-sm-2{padding-bottom:.625rem !important}.pl-sm-2,.px-sm-2{padding-left:.625rem !important}.p-sm-3{padding:.9375rem !important}.pt-sm-3,.py-sm-3{padding-top:.9375rem !important}.pr-sm-3,.px-sm-3{padding-right:.9375rem !important}.pb-sm-3,.py-sm-3{padding-bottom:.9375rem !important}.pl-sm-3,.px-sm-3{padding-left:.9375rem !important}.p-sm-4{padding:1.875rem !important}.pt-sm-4,.py-sm-4{padding-top:1.875rem !important}.pr-sm-4,.px-sm-4{padding-right:1.875rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.875rem !important}.pl-sm-4,.px-sm-4{padding-left:1.875rem !important}.p-sm-5{padding:3.75rem !important}.pt-sm-5,.py-sm-5{padding-top:3.75rem !important}.pr-sm-5,.px-sm-5{padding-right:3.75rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3.75rem !important}.pl-sm-5,.px-sm-5{padding-left:3.75rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media (min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:.3125rem !important}.mt-md-1,.my-md-1{margin-top:.3125rem !important}.mr-md-1,.mx-md-1{margin-right:.3125rem !important}.mb-md-1,.my-md-1{margin-bottom:.3125rem !important}.ml-md-1,.mx-md-1{margin-left:.3125rem !important}.m-md-2{margin:.625rem !important}.mt-md-2,.my-md-2{margin-top:.625rem !important}.mr-md-2,.mx-md-2{margin-right:.625rem !important}.mb-md-2,.my-md-2{margin-bottom:.625rem !important}.ml-md-2,.mx-md-2{margin-left:.625rem !important}.m-md-3{margin:.9375rem !important}.mt-md-3,.my-md-3{margin-top:.9375rem !important}.mr-md-3,.mx-md-3{margin-right:.9375rem !important}.mb-md-3,.my-md-3{margin-bottom:.9375rem !important}.ml-md-3,.mx-md-3{margin-left:.9375rem !important}.m-md-4{margin:1.875rem !important}.mt-md-4,.my-md-4{margin-top:1.875rem !important}.mr-md-4,.mx-md-4{margin-right:1.875rem !important}.mb-md-4,.my-md-4{margin-bottom:1.875rem !important}.ml-md-4,.mx-md-4{margin-left:1.875rem !important}.m-md-5{margin:3.75rem !important}.mt-md-5,.my-md-5{margin-top:3.75rem !important}.mr-md-5,.mx-md-5{margin-right:3.75rem !important}.mb-md-5,.my-md-5{margin-bottom:3.75rem !important}.ml-md-5,.mx-md-5{margin-left:3.75rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:.3125rem !important}.pt-md-1,.py-md-1{padding-top:.3125rem !important}.pr-md-1,.px-md-1{padding-right:.3125rem !important}.pb-md-1,.py-md-1{padding-bottom:.3125rem !important}.pl-md-1,.px-md-1{padding-left:.3125rem !important}.p-md-2{padding:.625rem !important}.pt-md-2,.py-md-2{padding-top:.625rem !important}.pr-md-2,.px-md-2{padding-right:.625rem !important}.pb-md-2,.py-md-2{padding-bottom:.625rem !important}.pl-md-2,.px-md-2{padding-left:.625rem !important}.p-md-3{padding:.9375rem !important}.pt-md-3,.py-md-3{padding-top:.9375rem !important}.pr-md-3,.px-md-3{padding-right:.9375rem !important}.pb-md-3,.py-md-3{padding-bottom:.9375rem !important}.pl-md-3,.px-md-3{padding-left:.9375rem !important}.p-md-4{padding:1.875rem !important}.pt-md-4,.py-md-4{padding-top:1.875rem !important}.pr-md-4,.px-md-4{padding-right:1.875rem !important}.pb-md-4,.py-md-4{padding-bottom:1.875rem !important}.pl-md-4,.px-md-4{padding-left:1.875rem !important}.p-md-5{padding:3.75rem !important}.pt-md-5,.py-md-5{padding-top:3.75rem !important}.pr-md-5,.px-md-5{padding-right:3.75rem !important}.pb-md-5,.py-md-5{padding-bottom:3.75rem !important}.pl-md-5,.px-md-5{padding-left:3.75rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media (min-width: 1024px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:.3125rem !important}.mt-lg-1,.my-lg-1{margin-top:.3125rem !important}.mr-lg-1,.mx-lg-1{margin-right:.3125rem !important}.mb-lg-1,.my-lg-1{margin-bottom:.3125rem !important}.ml-lg-1,.mx-lg-1{margin-left:.3125rem !important}.m-lg-2{margin:.625rem !important}.mt-lg-2,.my-lg-2{margin-top:.625rem !important}.mr-lg-2,.mx-lg-2{margin-right:.625rem !important}.mb-lg-2,.my-lg-2{margin-bottom:.625rem !important}.ml-lg-2,.mx-lg-2{margin-left:.625rem !important}.m-lg-3{margin:.9375rem !important}.mt-lg-3,.my-lg-3{margin-top:.9375rem !important}.mr-lg-3,.mx-lg-3{margin-right:.9375rem !important}.mb-lg-3,.my-lg-3{margin-bottom:.9375rem !important}.ml-lg-3,.mx-lg-3{margin-left:.9375rem !important}.m-lg-4{margin:1.875rem !important}.mt-lg-4,.my-lg-4{margin-top:1.875rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.875rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.875rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.875rem !important}.m-lg-5{margin:3.75rem !important}.mt-lg-5,.my-lg-5{margin-top:3.75rem !important}.mr-lg-5,.mx-lg-5{margin-right:3.75rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3.75rem !important}.ml-lg-5,.mx-lg-5{margin-left:3.75rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:.3125rem !important}.pt-lg-1,.py-lg-1{padding-top:.3125rem !important}.pr-lg-1,.px-lg-1{padding-right:.3125rem !important}.pb-lg-1,.py-lg-1{padding-bottom:.3125rem !important}.pl-lg-1,.px-lg-1{padding-left:.3125rem !important}.p-lg-2{padding:.625rem !important}.pt-lg-2,.py-lg-2{padding-top:.625rem !important}.pr-lg-2,.px-lg-2{padding-right:.625rem !important}.pb-lg-2,.py-lg-2{padding-bottom:.625rem !important}.pl-lg-2,.px-lg-2{padding-left:.625rem !important}.p-lg-3{padding:.9375rem !important}.pt-lg-3,.py-lg-3{padding-top:.9375rem !important}.pr-lg-3,.px-lg-3{padding-right:.9375rem !important}.pb-lg-3,.py-lg-3{padding-bottom:.9375rem !important}.pl-lg-3,.px-lg-3{padding-left:.9375rem !important}.p-lg-4{padding:1.875rem !important}.pt-lg-4,.py-lg-4{padding-top:1.875rem !important}.pr-lg-4,.px-lg-4{padding-right:1.875rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.875rem !important}.pl-lg-4,.px-lg-4{padding-left:1.875rem !important}.p-lg-5{padding:3.75rem !important}.pt-lg-5,.py-lg-5{padding-top:3.75rem !important}.pr-lg-5,.px-lg-5{padding-right:3.75rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3.75rem !important}.pl-lg-5,.px-lg-5{padding-left:3.75rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media (min-width: 1300px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:.3125rem !important}.mt-xl-1,.my-xl-1{margin-top:.3125rem !important}.mr-xl-1,.mx-xl-1{margin-right:.3125rem !important}.mb-xl-1,.my-xl-1{margin-bottom:.3125rem !important}.ml-xl-1,.mx-xl-1{margin-left:.3125rem !important}.m-xl-2{margin:.625rem !important}.mt-xl-2,.my-xl-2{margin-top:.625rem !important}.mr-xl-2,.mx-xl-2{margin-right:.625rem !important}.mb-xl-2,.my-xl-2{margin-bottom:.625rem !important}.ml-xl-2,.mx-xl-2{margin-left:.625rem !important}.m-xl-3{margin:.9375rem !important}.mt-xl-3,.my-xl-3{margin-top:.9375rem !important}.mr-xl-3,.mx-xl-3{margin-right:.9375rem !important}.mb-xl-3,.my-xl-3{margin-bottom:.9375rem !important}.ml-xl-3,.mx-xl-3{margin-left:.9375rem !important}.m-xl-4{margin:1.875rem !important}.mt-xl-4,.my-xl-4{margin-top:1.875rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.875rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.875rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.875rem !important}.m-xl-5{margin:3.75rem !important}.mt-xl-5,.my-xl-5{margin-top:3.75rem !important}.mr-xl-5,.mx-xl-5{margin-right:3.75rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3.75rem !important}.ml-xl-5,.mx-xl-5{margin-left:3.75rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:.3125rem !important}.pt-xl-1,.py-xl-1{padding-top:.3125rem !important}.pr-xl-1,.px-xl-1{padding-right:.3125rem !important}.pb-xl-1,.py-xl-1{padding-bottom:.3125rem !important}.pl-xl-1,.px-xl-1{padding-left:.3125rem !important}.p-xl-2{padding:.625rem !important}.pt-xl-2,.py-xl-2{padding-top:.625rem !important}.pr-xl-2,.px-xl-2{padding-right:.625rem !important}.pb-xl-2,.py-xl-2{padding-bottom:.625rem !important}.pl-xl-2,.px-xl-2{padding-left:.625rem !important}.p-xl-3{padding:.9375rem !important}.pt-xl-3,.py-xl-3{padding-top:.9375rem !important}.pr-xl-3,.px-xl-3{padding-right:.9375rem !important}.pb-xl-3,.py-xl-3{padding-bottom:.9375rem !important}.pl-xl-3,.px-xl-3{padding-left:.9375rem !important}.p-xl-4{padding:1.875rem !important}.pt-xl-4,.py-xl-4{padding-top:1.875rem !important}.pr-xl-4,.px-xl-4{padding-right:1.875rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.875rem !important}.pl-xl-4,.px-xl-4{padding-left:1.875rem !important}.p-xl-5{padding:3.75rem !important}.pt-xl-5,.py-xl-5{padding-top:3.75rem !important}.pr-xl-5,.px-xl-5{padding-right:3.75rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3.75rem !important}.pl-xl-5,.px-xl-5{padding-left:3.75rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}@media (min-width: 1600px){.m-xxl-0{margin:0 !important}.mt-xxl-0,.my-xxl-0{margin-top:0 !important}.mr-xxl-0,.mx-xxl-0{margin-right:0 !important}.mb-xxl-0,.my-xxl-0{margin-bottom:0 !important}.ml-xxl-0,.mx-xxl-0{margin-left:0 !important}.m-xxl-1{margin:.3125rem !important}.mt-xxl-1,.my-xxl-1{margin-top:.3125rem !important}.mr-xxl-1,.mx-xxl-1{margin-right:.3125rem !important}.mb-xxl-1,.my-xxl-1{margin-bottom:.3125rem !important}.ml-xxl-1,.mx-xxl-1{margin-left:.3125rem !important}.m-xxl-2{margin:.625rem !important}.mt-xxl-2,.my-xxl-2{margin-top:.625rem !important}.mr-xxl-2,.mx-xxl-2{margin-right:.625rem !important}.mb-xxl-2,.my-xxl-2{margin-bottom:.625rem !important}.ml-xxl-2,.mx-xxl-2{margin-left:.625rem !important}.m-xxl-3{margin:.9375rem !important}.mt-xxl-3,.my-xxl-3{margin-top:.9375rem !important}.mr-xxl-3,.mx-xxl-3{margin-right:.9375rem !important}.mb-xxl-3,.my-xxl-3{margin-bottom:.9375rem !important}.ml-xxl-3,.mx-xxl-3{margin-left:.9375rem !important}.m-xxl-4{margin:1.875rem !important}.mt-xxl-4,.my-xxl-4{margin-top:1.875rem !important}.mr-xxl-4,.mx-xxl-4{margin-right:1.875rem !important}.mb-xxl-4,.my-xxl-4{margin-bottom:1.875rem !important}.ml-xxl-4,.mx-xxl-4{margin-left:1.875rem !important}.m-xxl-5{margin:3.75rem !important}.mt-xxl-5,.my-xxl-5{margin-top:3.75rem !important}.mr-xxl-5,.mx-xxl-5{margin-right:3.75rem !important}.mb-xxl-5,.my-xxl-5{margin-bottom:3.75rem !important}.ml-xxl-5,.mx-xxl-5{margin-left:3.75rem !important}.p-xxl-0{padding:0 !important}.pt-xxl-0,.py-xxl-0{padding-top:0 !important}.pr-xxl-0,.px-xxl-0{padding-right:0 !important}.pb-xxl-0,.py-xxl-0{padding-bottom:0 !important}.pl-xxl-0,.px-xxl-0{padding-left:0 !important}.p-xxl-1{padding:.3125rem !important}.pt-xxl-1,.py-xxl-1{padding-top:.3125rem !important}.pr-xxl-1,.px-xxl-1{padding-right:.3125rem !important}.pb-xxl-1,.py-xxl-1{padding-bottom:.3125rem !important}.pl-xxl-1,.px-xxl-1{padding-left:.3125rem !important}.p-xxl-2{padding:.625rem !important}.pt-xxl-2,.py-xxl-2{padding-top:.625rem !important}.pr-xxl-2,.px-xxl-2{padding-right:.625rem !important}.pb-xxl-2,.py-xxl-2{padding-bottom:.625rem !important}.pl-xxl-2,.px-xxl-2{padding-left:.625rem !important}.p-xxl-3{padding:.9375rem !important}.pt-xxl-3,.py-xxl-3{padding-top:.9375rem !important}.pr-xxl-3,.px-xxl-3{padding-right:.9375rem !important}.pb-xxl-3,.py-xxl-3{padding-bottom:.9375rem !important}.pl-xxl-3,.px-xxl-3{padding-left:.9375rem !important}.p-xxl-4{padding:1.875rem !important}.pt-xxl-4,.py-xxl-4{padding-top:1.875rem !important}.pr-xxl-4,.px-xxl-4{padding-right:1.875rem !important}.pb-xxl-4,.py-xxl-4{padding-bottom:1.875rem !important}.pl-xxl-4,.px-xxl-4{padding-left:1.875rem !important}.p-xxl-5{padding:3.75rem !important}.pt-xxl-5,.py-xxl-5{padding-top:3.75rem !important}.pr-xxl-5,.px-xxl-5{padding-right:3.75rem !important}.pb-xxl-5,.py-xxl-5{padding-bottom:3.75rem !important}.pl-xxl-5,.px-xxl-5{padding-left:3.75rem !important}.m-xxl-auto{margin:auto !important}.mt-xxl-auto,.my-xxl-auto{margin-top:auto !important}.mr-xxl-auto,.mx-xxl-auto{margin-right:auto !important}.mb-xxl-auto,.my-xxl-auto{margin-bottom:auto !important}.ml-xxl-auto,.mx-xxl-auto{margin-left:auto !important}}.text-justify{text-align:justify !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 544px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 1024px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1300px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}@media (min-width: 1600px){.text-xxl-left{text-align:left !important}.text-xxl-right{text-align:right !important}.text-xxl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:700 !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#25b9d7 !important}a.text-primary:hover,a.text-primary:focus{color:#1e94ab !important}.text-secondary{color:#6c868e !important}a.text-secondary:hover,a.text-secondary:focus{color:#566b71 !important}.text-success{color:#70b580 !important}a.text-success:hover,a.text-success:focus{color:#539f64 !important}.text-info{color:#25b9d7 !important}a.text-info:hover,a.text-info:focus{color:#1e94ab !important}.text-warning{color:#fab000 !important}a.text-warning:hover,a.text-warning:focus{color:#c78c00 !important}.text-danger{color:#f54c3e !important}a.text-danger:hover,a.text-danger:focus{color:#f21f0e !important}.text-light{color:#fafbfc !important}a.text-light:hover,a.text-light:focus{color:#dae2e9 !important}.text-dark{color:#363a41 !important}a.text-dark:hover,a.text-dark:focus{color:#1f2125 !important}.text-muted{color:#6c868e !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.product-page #product-images-dropzone.full{cursor:pointer;width:100%}.product-page #product-images-dropzone .dropzone-loading{width:100%;display:flex;align-items:center;justify-content:center;min-height:10rem}.product-page #product-images-dropzone.dropzone-container .dz-preview{position:relative;cursor:pointer}.product-page #product-images-dropzone.dropzone-container .dz-preview .iscover{display:none;left:-2px;bottom:-3px;width:calc(100% + 4px);padding:9px}.product-page #product-images-dropzone.dropzone-container .dz-preview.is-cover .iscover{display:block}.product-page #product-images-dropzone.dropzone-container .dz-preview:not(.openfilemanager){border:3px solid transparent}.product-page #product-images-dropzone.dropzone-container .dz-preview:not(.openfilemanager):hover{border:3px solid #25b9d7}.product-page #product-images-dropzone.dropzone-container .dz-preview:not(.openfilemanager) .dz-image{border:1px solid #bbcdd2;width:130px;height:130px;margin:-3px}.product-page #product-images-dropzone.dropzone-container .dz-preview.openfilemanager{border-style:dashed;min-width:130px}.product-page #product-images-dropzone.dropzone-container .dz-preview.openfilemanager:hover{border-style:solid}.product-page #product-images-dropzone.dropzone-container .dz-preview.openfilemanager>div{border:none}.product-page #product-images-dropzone.dropzone-container .dz-preview.openfilemanager>div i{font-size:2.5rem}.product-page #product-images-dropzone.dropzone-container .dz-preview img{margin:0}.product-page #product-images-dropzone.dropzone-container .dz-preview:hover .dz-hover{background-color:rgba(0,0,0,0.7)}.product-page #product-images-dropzone.dropzone-container .dz-preview:hover .dz-hover .drag-indicator,.product-page #product-images-dropzone.dropzone-container .dz-preview:hover .dz-hover .md-checkbox{opacity:1}.product-page #product-images-dropzone.dropzone-container .dz-preview.selected .md-checkbox{opacity:1}.product-page #product-images-dropzone.dropzone-container .dz-hover{position:absolute;top:-3px;left:-3px;width:calc(100% + 6px);height:calc(100% + 6px);background-color:rgba(0,0,0,0);transition:0.25s ease-out;pointer-events:none;z-index:11}.product-page #product-images-dropzone.dropzone-container .dz-hover .drag-indicator{position:absolute;top:0.5rem;left:0.5rem;color:#ffffff;opacity:0;transition:0.25s ease-out}.product-page #product-images-dropzone.dropzone-container .dz-hover .md-checkbox{position:absolute;bottom:0.5rem;left:0.5rem;opacity:0;transition:0.25s ease-out}.product-page #product-images-dropzone.dropzone-container .dz-hover .md-checkbox .md-checkbox-control::before{background:transparent}.product-page #product-images-dropzone.dropzone-container .dz-hover .md-checkbox input:checked+.md-checkbox-control::before{background:#25b9d7}@media (max-width: 543.98px){.product-page #product-images-container{flex-wrap:wrap}}.product-page #product-images-container #product-images-dropzone.dropzone{display:flex;align-items:flex-start;justify-content:space-between;border-radius:4px;flex-wrap:wrap}@media (max-width: 543.98px){.product-page #product-images-container #product-images-dropzone.dropzone{flex-wrap:wrap;justify-content:space-around;width:100%}.product-page #product-images-container #product-images-dropzone.dropzone .dz-preview{width:100px;height:100px;min-height:100px;margin:0.5rem}.product-page #product-images-container #product-images-dropzone.dropzone .dz-preview.openfilemanager{min-width:100px}.product-page #product-images-container #product-images-dropzone.dropzone .dz-preview img{max-width:100%;max-height:100%}.product-page #product-images-container #product-images-dropzone.dropzone .dz-preview .dz-image{width:100px;height:100px}}\n',"",{version:3,sources:["webpack://./node_modules/bootstrap/scss/utilities/_align.scss","webpack://./node_modules/bootstrap/scss/mixins/_background-variant.scss","webpack://./node_modules/bootstrap/scss/mixins/_hover.scss","webpack://./node_modules/bootstrap/scss/utilities/_background.scss","webpack://./node_modules/bootstrap/scss/utilities/_borders.scss","webpack://./node_modules/bootstrap/scss/mixins/_clearfix.scss","webpack://./node_modules/bootstrap/scss/utilities/_display.scss","webpack://./node_modules/bootstrap/scss/mixins/_breakpoints.scss","webpack://./node_modules/bootstrap/scss/utilities/_embed.scss","webpack://./node_modules/bootstrap/scss/utilities/_flex.scss","webpack://./node_modules/bootstrap/scss/utilities/_float.scss","webpack://./node_modules/bootstrap/scss/mixins/_float.scss","webpack://./node_modules/bootstrap/scss/utilities/_position.scss","webpack://./node_modules/bootstrap/scss/_variables.scss","webpack://./node_modules/bootstrap/scss/utilities/_screenreaders.scss","webpack://./node_modules/bootstrap/scss/mixins/_screen-reader.scss","webpack://./node_modules/bootstrap/scss/utilities/_sizing.scss","webpack://./node_modules/bootstrap/scss/utilities/_spacing.scss","webpack://./node_modules/bootstrap/scss/utilities/_text.scss","webpack://./node_modules/bootstrap/scss/mixins/_text-truncate.scss","webpack://./node_modules/bootstrap/scss/mixins/_text-emphasis.scss","webpack://./node_modules/bootstrap/scss/mixins/_text-hide.scss","webpack://./node_modules/bootstrap/scss/mixins/_visibility.scss","webpack://./node_modules/bootstrap/scss/utilities/_visibility.scss","webpack://./js/pages/product/components/dropzone/Dropzone.vue","webpack://./node_modules/prestakit/scss/_variables.scss"],names:[],mappings:"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",sourcesContent:["// stylelint-disable declaration-no-important\n\n.align-baseline { vertical-align: baseline !important; } // Browser default\n.align-top { vertical-align: top !important; }\n.align-middle { vertical-align: middle !important; }\n.align-bottom { vertical-align: bottom !important; }\n.align-text-bottom { vertical-align: text-bottom !important; }\n.align-text-top { vertical-align: text-top !important; }\n","// stylelint-disable declaration-no-important\n\n// Contextual backgrounds\n\n@mixin bg-variant($parent, $color) {\n #{$parent} {\n background-color: $color !important;\n }\n a#{$parent},\n button#{$parent} {\n @include hover-focus {\n background-color: darken($color, 10%) !important;\n }\n }\n}\n\n@mixin bg-gradient-variant($parent, $color) {\n #{$parent} {\n background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important;\n }\n}\n","// stylelint-disable indentation\n\n// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Origally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS—an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular psuedo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover {\n &:hover { @content; }\n}\n\n@mixin hover-focus {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n",'// stylelint-disable declaration-no-important\n\n@each $color, $value in $theme-colors {\n @include bg-variant(".bg-#{$color}", $value);\n}\n\n@if $enable-gradients {\n @each $color, $value in $theme-colors {\n @include bg-gradient-variant(".bg-gradient-#{$color}", $value);\n }\n}\n\n.bg-white {\n background-color: $white !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n',"// stylelint-disable declaration-no-important\n\n//\n// Border\n//\n\n.border { border: $border-width solid $border-color !important; }\n.border-top { border-top: $border-width solid $border-color !important; }\n.border-right { border-right: $border-width solid $border-color !important; }\n.border-bottom { border-bottom: $border-width solid $border-color !important; }\n.border-left { border-left: $border-width solid $border-color !important; }\n\n.border-0 { border: 0 !important; }\n.border-top-0 { border-top: 0 !important; }\n.border-right-0 { border-right: 0 !important; }\n.border-bottom-0 { border-bottom: 0 !important; }\n.border-left-0 { border-left: 0 !important; }\n\n@each $color, $value in $theme-colors {\n .border-#{$color} {\n border-color: $value !important;\n }\n}\n\n.border-white {\n border-color: $white !important;\n}\n\n//\n// Border-radius\n//\n\n.rounded {\n border-radius: $border-radius !important;\n}\n.rounded-top {\n border-top-left-radius: $border-radius !important;\n border-top-right-radius: $border-radius !important;\n}\n.rounded-right {\n border-top-right-radius: $border-radius !important;\n border-bottom-right-radius: $border-radius !important;\n}\n.rounded-bottom {\n border-bottom-right-radius: $border-radius !important;\n border-bottom-left-radius: $border-radius !important;\n}\n.rounded-left {\n border-top-left-radius: $border-radius !important;\n border-bottom-left-radius: $border-radius !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n",'@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: "";\n }\n}\n',"// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .d#{$infix}-none { display: none !important; }\n .d#{$infix}-inline { display: inline !important; }\n .d#{$infix}-inline-block { display: inline-block !important; }\n .d#{$infix}-block { display: block !important; }\n .d#{$infix}-table { display: table !important; }\n .d#{$infix}-table-row { display: table-row !important; }\n .d#{$infix}-table-cell { display: table-cell !important; }\n .d#{$infix}-flex { display: flex !important; }\n .d#{$infix}-inline-flex { display: inline-flex !important; }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n .d-print-none { display: none !important; }\n .d-print-inline { display: inline !important; }\n .d-print-inline-block { display: inline-block !important; }\n .d-print-block { display: block !important; }\n .d-print-table { display: table !important; }\n .d-print-table-row { display: table-row !important; }\n .d-print-table-cell { display: table-cell !important; }\n .d-print-flex { display: flex !important; }\n .d-print-inline-flex { display: inline-flex !important; }\n}\n",'// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02px, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash infront.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// "" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// "-sm"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, "", "-#{$name}");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint\'s minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n','// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n\n &::before {\n display: block;\n content: "";\n }\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n }\n}\n\n.embed-responsive-21by9 {\n &::before {\n padding-top: percentage(9 / 21);\n }\n}\n\n.embed-responsive-16by9 {\n &::before {\n padding-top: percentage(9 / 16);\n }\n}\n\n.embed-responsive-4by3 {\n &::before {\n padding-top: percentage(3 / 4);\n }\n}\n\n.embed-responsive-1by1 {\n &::before {\n padding-top: percentage(1 / 1);\n }\n}\n',"// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n","@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .float#{$infix}-left { @include float-left; }\n .float#{$infix}-right { @include float-right; }\n .float#{$infix}-none { @include float-none; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n@mixin float-left {\n float: left !important;\n}\n@mixin float-right {\n float: right !important;\n}\n@mixin float-none {\n float: none !important;\n}\n","// stylelint-disable declaration-no-important\n\n// Common values\n\n// Sass list not in variables since it's not intended for customization.\n$positions: static, relative, absolute, fixed, sticky;\n\n@each $position in $positions {\n .position-#{$position} { position: $position !important; }\n}\n\n// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.sticky-top {\n @supports (position: sticky) {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n}\n",'// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n\n//\n// Color system\n//\n\n// stylelint-disable\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n$grays: map-merge((\n "100": $gray-100,\n "200": $gray-200,\n "300": $gray-300,\n "400": $gray-400,\n "500": $gray-500,\n "600": $gray-600,\n "700": $gray-700,\n "800": $gray-800,\n "900": $gray-900\n), $grays);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n$colors: map-merge((\n "blue": $blue,\n "indigo": $indigo,\n "purple": $purple,\n "pink": $pink,\n "red": $red,\n "orange": $orange,\n "yellow": $yellow,\n "green": $green,\n "teal": $teal,\n "cyan": $cyan,\n "white": $white,\n "gray": $gray-600,\n "gray-dark": $gray-800\n), $colors);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n$theme-colors: map-merge((\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": $warning,\n "danger": $danger,\n "light": $light,\n "dark": $dark\n), $theme-colors);\n// stylelint-enable\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from "dark" to "light". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// stylelint-disable\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map-merge((\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n), $spacers);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n$sizes: map-merge((\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%\n), $sizes);\n// stylelint-enable\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color("primary") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, "$container-max-widths");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color("primary") !default;\n\n$caret-width: .3em !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n\n// Fonts\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: ($font-size-base * 1.25) !default;\n$font-size-sm: ($font-size-base * .875) !default;\n\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: inherit !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: inherit !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: ($font-size-base * 1.25) !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-bg: transparent !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $gray-300 !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-bg: $gray-900 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($gray-900, 7.5%) !default;\n$table-dark-color: $body-bg !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap\'s buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-line-height: $input-btn-line-height !default;\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default;\n\n$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-control-gutter: 1.5rem !default;\n$custom-control-spacer-x: 1rem !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $gray-300 !default;\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-control-indicator-disabled-bg: $gray-200 !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color("primary"), .5) !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n\n$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 8 8\'%3E%3Cpath fill=\'#{$custom-control-indicator-checked-color}\' d=\'M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 4\'%3E%3Cpath stroke=\'#{$custom-checkbox-indicator-indeterminate-color}\' d=\'M0 2h4\'/%3E%3C/svg%3E"), "#", "%23") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'-4 -4 8 8\'%3E%3Ccircle r=\'3\' fill=\'#{$custom-control-indicator-checked-color}\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n$custom-select-padding-y: .375rem !default;\n$custom-select-padding-x: .75rem !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-line-height: $input-btn-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $white !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 5\'%3E%3Cpath fill=\'#{$custom-select-indicator-color}\' d=\'M2 0L0 2h4zm0 5L0 3h4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n$custom-select-border-width: $input-btn-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-box-shadow: inset 0 1px 2px rgba($black, .075), 0 0 5px rgba($custom-select-focus-border-color, .5) !default;\n\n$custom-select-font-size-sm: 75% !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-font-size-lg: 125% !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$custom-file-padding-y: $input-btn-padding-y !default;\n$custom-file-padding-x: $input-btn-padding-x !default;\n$custom-file-line-height: $input-btn-line-height !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-btn-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: "Browse"\n) !default;\n\n\n// Form validation\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color("success") !default;\n$form-feedback-invalid-color: theme-color("danger") !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They\'re used for a bird\'s eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n// Navbar\n\n$navbar-padding-y: ($spacer / 2) !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-dark-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-light-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: ($grid-gutter-width / 2) !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $gray-200 !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: 1rem !default;\n\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-transition: transform .3s ease-out !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: ($font-size-base * .75) !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color("primary") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n// List group\n\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: "/" !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n$carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n$carousel-transition: transform .6s ease !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Printing\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, "lg") !default;\n',"//\n// Screenreaders\n//\n\n.sr-only {\n @include sr-only();\n}\n\n.sr-only-focusable {\n @include sr-only-focusable();\n}\n",'// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n// See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n clip-path: inset(50%);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it\'s focused.\n//\n// Useful for "Skip to main content" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n//\n// Credit: HTML5 Boilerplate\n\n@mixin sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n clip-path: none;\n }\n}\n',"// stylelint-disable declaration-no-important\n\n// Width and height\n\n@each $prop, $abbrev in (width: w, height: h) {\n @each $size, $length in $sizes {\n .#{$abbrev}-#{$size} { #{$prop}: $length !important; }\n }\n}\n\n.mw-100 { max-width: 100% !important; }\n.mh-100 { max-height: 100% !important; }\n","// stylelint-disable declaration-no-important\n\n// Margin and Padding\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n\n .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }\n .#{$abbrev}t#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n }\n\n // Some special margin utils\n .m#{$infix}-auto { margin: auto !important; }\n .mt#{$infix}-auto,\n .my#{$infix}-auto {\n margin-top: auto !important;\n }\n .mr#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-right: auto !important;\n }\n .mb#{$infix}-auto,\n .my#{$infix}-auto {\n margin-bottom: auto !important;\n }\n .ml#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-left: auto !important;\n }\n }\n}\n",'// stylelint-disable declaration-no-important\n\n//\n// Text\n//\n\n// Alignment\n\n.text-justify { text-align: justify !important; }\n.text-nowrap { white-space: nowrap !important; }\n.text-truncate { @include text-truncate; }\n\n// Responsive alignment\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .text#{$infix}-left { text-align: left !important; }\n .text#{$infix}-right { text-align: right !important; }\n .text#{$infix}-center { text-align: center !important; }\n }\n}\n\n// Transformation\n\n.text-lowercase { text-transform: lowercase !important; }\n.text-uppercase { text-transform: uppercase !important; }\n.text-capitalize { text-transform: capitalize !important; }\n\n// Weight and italics\n\n.font-weight-light { font-weight: $font-weight-light !important; }\n.font-weight-normal { font-weight: $font-weight-normal !important; }\n.font-weight-bold { font-weight: $font-weight-bold !important; }\n.font-italic { font-style: italic !important; }\n\n// Contextual colors\n\n.text-white { color: #fff !important; }\n\n@each $color, $value in $theme-colors {\n @include text-emphasis-variant(".text-#{$color}", $value);\n}\n\n.text-muted { color: $text-muted !important; }\n\n// Misc\n\n.text-hide {\n @include text-hide();\n}\n',"// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","// stylelint-disable declaration-no-important\n\n// Typography\n\n@mixin text-emphasis-variant($parent, $color) {\n #{$parent} {\n color: $color !important;\n }\n a#{$parent} {\n @include hover-focus {\n color: darken($color, 10%) !important;\n }\n }\n}\n","// CSS image replacement\n@mixin text-hide() {\n // stylelint-disable-next-line font-family-no-missing-generic-family-keyword\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n","// stylelint-disable declaration-no-important\n\n// Visibility\n\n@mixin invisible($visibility) {\n visibility: $visibility !important;\n}\n","//\n// Visibility utilities\n//\n\n.visible {\n @include invisible(visible);\n}\n\n.invisible {\n @include invisible(hidden);\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@import '~@scss/config/_settings.scss';\n@import '~@scss/config/_bootstrap.scss';\n\n.product-page #product-images-dropzone {\n &.full {\n cursor: pointer;\n width: 100%;\n }\n\n .dropzone-loading {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 10rem;\n }\n\n &.dropzone-container {\n .dz-preview {\n position: relative;\n cursor: pointer;\n\n .iscover {\n display: none;\n left: -2px;\n bottom: -3px;\n width: calc(100% + 4px);\n padding: 9px;\n }\n &.is-cover {\n .iscover {\n display: block;\n }\n }\n\n &:not(.openfilemanager) {\n border: 3px solid transparent;\n\n &:hover {\n border: 3px solid $primary;\n }\n\n .dz-image {\n border: 1px solid $gray-300;\n width: 130px;\n height: 130px;\n margin: -3px;\n }\n }\n\n &.openfilemanager {\n border-style: dashed;\n min-width: 130px;\n\n &:hover {\n border-style: solid;\n }\n\n > div {\n border: none;\n\n i {\n font-size: 2.5rem;\n }\n }\n }\n\n img {\n margin: 0;\n }\n\n &:hover {\n .dz-hover {\n background-color: rgba(0, 0, 0, 0.7);\n\n .drag-indicator,\n .md-checkbox {\n opacity: 1;\n }\n }\n }\n\n &.selected {\n .md-checkbox {\n opacity: 1;\n }\n }\n }\n\n .dz-hover {\n position: absolute;\n top: -3px;\n left: -3px;\n width: calc(100% + 6px);\n height: calc(100% + 6px);\n background-color: rgba(0, 0, 0, 0);\n transition: 0.25s ease-out;\n pointer-events: none;\n z-index: 11;\n\n .drag-indicator {\n position: absolute;\n top: 0.5rem;\n left: 0.5rem;\n color: #ffffff;\n opacity: 0;\n transition: 0.25s ease-out;\n }\n\n .md-checkbox {\n position: absolute;\n bottom: 0.5rem;\n left: 0.5rem;\n opacity: 0;\n transition: 0.25s ease-out;\n\n .md-checkbox-control::before {\n background: transparent;\n }\n\n input:checked + .md-checkbox-control::before {\n background: $primary;\n }\n }\n }\n }\n}\n\n.product-page #product-images-container {\n @include media-breakpoint-down(xs) {\n flex-wrap: wrap;\n }\n\n #product-images-dropzone.dropzone {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n border-radius: 4px;\n flex-wrap: wrap;\n\n @include media-breakpoint-down(xs) {\n flex-wrap: wrap;\n justify-content: space-around;\n width: 100%;\n\n .dz-preview {\n width: 100px;\n height: 100px;\n min-height: 100px;\n margin: 0.5rem;\n\n &.openfilemanager {\n min-width: 100px;\n }\n\n img {\n max-width: 100%;\n max-height: 100%;\n }\n\n .dz-image {\n width: 100px;\n height: 100px;\n }\n }\n }\n }\n}\n",'/* stylelint-disable */\n\n// Color system\n$white: #fff;\n$gray-disabled: #eaebec;\n$gray-100: #fafbfc;\n$gray-200: #fafbfc;\n$gray-250: #fafbfc;\n$gray-300: #bbcdd2;\n$gray-400: #bbcdd2;\n$gray-450: #b3c7cd;\n$gray-500: #6c868e;\n$gray-550: #708090;\n$gray-600: #6c868e;\n$gray-700: #363a41;\n$gray-750: #363a41;\n$gray-800: #363a41;\n$gray-900: #282b30;\n$black: #000;\n\n// PS Vars\n$extra-light-gray: $gray-100;\n$light-gray: $gray-300;\n$medium-gray: $gray-500;\n$dark-gray: $gray-700;\n$extra-dark-gray: $gray-900;\n$gray-light: $light-gray;\n$gray-medium: $medium-gray;\n$gray-dark: $dark-gray;\n$gray-soft: $gray-200;\n$background-color: #eff1f2;\n$primary-lighten: #f4fcfd;\n$local-font: false !default;\n\n$blue: #25b9d7;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #f54c3e;\n$orange: #fd7e14 !default;\n$yellow: #fab000;\n$green: #70b580;\n$orange: #fd7e14 !default;\n$teal: #20c997 !default;\n$cyan: $blue;\n$light-blue: #f4fcfd;\n\n// main button background colors\n$primary-hover: #7cd5e7;\n$primary-active: #21a6c1;\n$primary-disabled: #d3f1f7;\n$secondary-hover: #b7ced3;\n$secondary-active: #889da2;\n$danger-hover: #fde1e1;\n$notice: #dff5f9;\n\n$primary: $blue !default;\n$secondary: $medium-gray;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$toast-success: #53d572 !default;\n$toast-warning: #fab000 !default;\n\n$brand-primary: $primary !default;\n$brand-secondary: $secondary !default;\n$brand-info: #5bc0de !default;\n$brand-warning: #f0ad4e !default;\n$brand-success: $success !default;\n$brand-danger: $danger !default;\n\n$btn-primary-bg: $primary-hover;\n$btn-secondary-border: #000;\n$btn-info-bg: $brand-info !default;\n$btn-success-bg: $brand-success !default;\n$btn-warning-bg: $brand-warning !default;\n$btn-danger-bg: $brand-danger !default;\n\n$theme-colors: (\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": $warning,\n "danger": $danger,\n "light": $light,\n "dark": $dark\n);\n\n$alerts-background-colors: (\n "success": #cbf2d4,\n "info": #beeaf3,\n "warning": #fffbd3,\n "danger": #fbc6c3\n);\n\n$alerts-second-colors: (\n "success": #53d572,\n "info": #25b9d7,\n "warning": #fab000,\n "danger": #f44336\n);\n\n$theme-alerts-icons: (\n success: "\\E5CA",\n info: "\\e88e",\n warning: "\\E002",\n danger: "\\e000"\n);\n\n$theme-colors-icons: (\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": #fab000,\n "danger": $danger,\n "light": $light\n);\n\n$theme-colors-hover: (\n primary: $primary-hover,\n secondary: $secondary-hover,\n success: #9bcba6,\n info: $primary-hover,\n warning: #e6b045,\n danger: #e76d7a,\n light: $gray-800,\n dark: $gray-100,\n default: $light-blue\n);\n\n$theme-colors-active: (\n primary: $primary-active,\n secondary: $secondary-active,\n success: #5a9166,\n info: darken(map-get($theme-colors, "info"), 10%),\n warning: darken(map-get($theme-colors, "warning"), 10%),\n danger: #c3362b,\n light: darken(map-get($theme-colors, "light"), 10%),\n dark: darken(map-get($theme-colors, "dark"), 10%),\n default: $primary\n);\n\n$theme-colors-background: (\n primary: #dff5f9,\n secondary: $black,\n success: #d6f0d8,\n info: #dff5f9,\n warning: #fffbd3,\n danger: #fde1e1,\n light: $gray-200,\n dark: $gray-700\n);\n\n$theme-colors-shadow: (\n primary: theme-color("primary"),\n secondary: $black,\n success: theme-color("success"),\n info: theme-color("info"),\n warning: theme-color("warning"),\n danger: theme-color("danger"),\n light: theme-color("light"),\n dark: theme-color("dark")\n);\n\n// Options\n$enable-caret: true !default;\n$enable-rounded: true;\n$enable-shadows: true;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n// Spacing\n$spacer: 1.875rem;\n\n$spacers: (\n 0: 0,\n 1: (\n $spacer / 6\n ),\n 2: (\n $spacer / 3\n ),\n 3: (\n $spacer / 2\n ),\n 4: $spacer,\n 5: (\n $spacer * 2\n )\n);\n\n// Body\n$body-bg: $white !default;\n$body-color: $dark-gray;\n\n// Links\n$link-hover-color: theme-color("primary") !default;\n$link-hover-decoration: underline;\n\n// Paragraphs\n$paragraph-margin-bottom: 1rem;\n\n// Grid breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 544px,\n md: 768px,\n lg: 1024px,\n xl: 1300px,\n xxl: 1600px // PS custom\n);\n@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n// Grid containers\n$container-max-widths: (\n sm: 576px,\n md: 720px,\n lg: 972px,\n xl: 1240px\n);\n@include _assert-ascending($container-max-widths, "$container-max-widths");\n\n// Grid columns\n//$grid-columns: 12 !default;\n$grid-gutter-width: 1.875rem !default;\n\n// Components\n//$line-height-lg: 1.5 !default;\n//$line-height-sm: 1.5 !default;\n\n//$border-width: 1px !default;\n//$border-color: $gray-300 !default;\n\n$border-radius: 4px !default;\n//$border-radius-lg: .3rem !default;\n//$border-radius-sm: .2rem !default;\n\n//$component-active-color: $white !default;\n//$component-active-bg: theme-color("primary") !default;\n\n$caret-width: .25rem;\n\n//$transition-base: all .2s ease-in-out !default;\n//$transition-fade: opacity .15s linear !default;\n//$transition-collapse: height .35s ease !default;\n\n// Fonts\n$font-family-sans-serif: "Open Sans", helvetica, arial, sans-serif;\n//$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;\n//$font-family-base: $font-family-sans-serif !default;\n\n$font-size-base: .875rem;\n$font-size-lg: 1rem;\n$font-size-sm: .75rem;\n$font-size-xs: .625rem; // PS custom\n\n//$font-weight-light: 300;\n//$font-weight-normal: 400;\n$font-weight-semibold: 600;\n$font-weight-bold: 700;\n\n$h1-font-size: 1.5rem;\n$h2-font-size: 1.25rem;\n$h3-font-size: 1rem;\n$h4-font-size: .875rem;\n$h5-font-size: .75rem;\n$h6-font-size: .625rem;\n\n//$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: $font-family-sans-serif;\n$headings-font-weight: $font-weight-bold;\n$headings-color: $body-color;\n\n//$display1-size: 6rem !default;\n//$display2-size: 5.5rem !default;\n//$display3-size: 4.5rem !default;\n//$display4-size: 3.5rem !default;\n\n//$display1-weight: 300 !default;\n//$display2-weight: 300 !default;\n//$display3-weight: 300 !default;\n//$display4-weight: 300 !default;\n//$display-line-height: $headings-line-height !default;\n\n//$lead-font-size: ($font-size-base * 1.25) !default;\n//$lead-font-weight: 300 !default;\n\n//$small-font-size: 80% !default;\n\n$text-muted: $medium-gray;\n\n//$blockquote-small-color: $gray-600 !default;\n//$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: $light-gray;\n//$hr-border-width: $border-width !default;\n\n//$mark-padding: .2em !default;\n\n//$dt-font-weight: $font-weight-bold !default;\n\n//$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n//$nested-kbd-font-weight: $font-weight-bold !default;\n\n//$list-inline-padding: .5rem !default;\n\n//$mark-bg: #fcf8e3 !default;\n\n//$hr-margin-y: $spacer !default;\n\n// Tables\n$table-cell-padding: .4rem;\n$table-cell-padding-sm: .25rem;\n\n//$table-bg: transparent !default;\n$table-accent-bg: $background-color;\n$table-hover-bg: theme-color-hover("primary");\n$table-active-bg: theme-color-hover("primary");\n\n//$table-border-width: $border-width !default;\n//$table-border-color: $gray-300 !default;\n\n$table-head-bg: $background-color;\n$table-head-color: $body-color;\n\n$table-dark-bg: $body-color;\n$table-dark-accent-bg: $extra-dark-gray;\n$table-dark-hover-bg: theme-color-hover("primary");\n$table-dark-border-color: $medium-gray;\n//$table-dark-color: $body-bg !default;\n\n// Buttons\n$input-btn-padding-y: .375rem;\n$input-btn-padding-x: .838rem;\n//$input-btn-line-height: $line-height-base !default;\n\n//$input-btn-focus-width: .2rem !default;\n//$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n//$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .313rem;\n$input-btn-padding-x-sm: .625rem;\n//$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .438rem;\n$input-btn-padding-x-lg: .838rem;\n//$input-btn-line-height-lg: $line-height-lg !default;\n\n//$input-btn-border-width: $border-width !default;\n\n// Buttons\n$btn-padding-y: .5rem !default;\n$btn-padding-x: 1rem !default;\n//$btn-line-height: $input-btn-line-height !default;\n\n//$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n//$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n//$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n//$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n//$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n//$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n//$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-semibold;\n$btn-box-shadow: none;\n//$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: none;\n//$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: none;\n\n//$btn-link-disabled-color: $gray-600 !default;\n\n//$btn-block-spacing-y: .5rem !default;\n\n$btn-border-radius: 4px;\n//$btn-border-radius-lg: $border-radius-lg !default;\n//$btn-border-radius-sm: $border-radius-sm !default;\n\n//$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n// Forms\n$input-padding-y: .375rem;\n$input-padding-x: .4375rem;\n//$input-line-height: $input-btn-line-height !default;\n\n//$input-padding-y-sm: $input-btn-padding-y-sm !default;\n//$input-padding-x-sm: $input-btn-padding-x-sm !default;\n//$input-line-height-sm: $input-btn-line-height-sm !default;\n\n//$input-padding-y-lg: $input-btn-padding-y-lg !default;\n//$input-padding-x-lg: $input-btn-padding-x-lg !default;\n//$input-line-height-lg: $input-btn-line-height-lg !default;\n\n//$input-bg: $white !default;\n$input-disabled-bg: #eceeef;\n\n$input-color: $body-color;\n$input-border-color: $light-gray;\n//$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: none;\n\n//$input-border-radius: $border-radius !default;\n//$input-border-radius-lg: $border-radius-lg !default;\n//$input-border-radius-sm: $border-radius-sm !default;\n\n//$input-focus-bg: $input-bg !default;\n$input-focus-border-color: theme-color-hover("primary");\n//$input-focus-color: $input-color !default;\n//$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: none;\n\n$input-placeholder-color: $medium-gray;\n\n//$input-height-border: $input-border-width * 2 !default;\n\n//$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: 2.188rem;\n\n//$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n//$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n//$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: 2.188rem;\n\n//$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n//$form-text-margin-top: .25rem !default;\n\n//$form-check-input-gutter: 1.25rem !default;\n//$form-check-input-margin-y: .3rem !default;\n//$form-check-input-margin-x: .25rem !default;\n\n//$form-check-inline-margin-x: .75rem !default;\n//$form-check-inline-input-margin-x: .3125rem !default;\n\n//$form-group-margin-bottom: 1rem !default;\n\n//$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $extra-light-gray;\n//$input-group-addon-border-color: $input-border-color !default;\n\n//$custom-control-gutter: 1.5rem !default;\n//$custom-control-spacer-x: 1rem !default;\n\n//$custom-control-indicator-size: 1rem !default;\n//$custom-control-indicator-bg: $gray-300 !default;\n//$custom-control-indicator-bg-size: 50% 50% !default;\n//$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n//$custom-control-indicator-disabled-bg: $gray-200 !default;\n//$custom-control-label-disabled-color: $gray-600 !default;\n\n//$custom-control-indicator-checked-color: $component-active-color !default;\n//$custom-control-indicator-checked-bg: $component-active-bg !default;\n//$custom-control-indicator-checked-disabled-bg: rgba(theme-color("primary"), .5) !default;\n//$custom-control-indicator-checked-box-shadow: none !default;\n\n//$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n//$custom-control-indicator-active-color: $component-active-color !default;\n//$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n//$custom-control-indicator-active-box-shadow: none !default;\n\n//$custom-checkbox-indicator-border-radius: $border-radius !default;\n//$custom-checkbox-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 8 8\'%3E%3Cpath fill=\'#{$custom-control-indicator-checked-color}\' d=\'M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n//$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n//$custom-checkbox-indicator-icon-indeterminate: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 4\'%3E%3Cpath stroke=\'#{$custom-checkbox-indicator-indeterminate-color}\' d=\'M0 2h4\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n//$custom-radio-indicator-border-radius: 50% !default;\n//$custom-radio-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'-4 -4 8 8\'%3E%3Ccircle r=\'3\' fill=\'#{$custom-control-indicator-checked-color}\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$custom-select-padding-y: .375rem !default;\n//$custom-select-padding-x: .75rem !default;\n//$custom-select-height: $input-height !default;\n//$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n//$custom-select-line-height: $input-btn-line-height !default;\n//$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $medium-gray;\n//$custom-select-bg: $white !default;\n$custom-select-disabled-bg: $input-disabled-bg;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $input-color;\n//$custom-select-indicator: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 5\'%3E%3Cpath fill=\'#{$custom-select-indicator-color}\' d=\'M2 0L0 2h4zm0 5L0 3h4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$custom-select-border-width: $input-btn-border-width !default;\n//$custom-select-border-color: $input-border-color !default;\n//$custom-select-border-radius: $border-radius !default;\n\n$custom-select-focus-border-color: $input-focus-border-color;\n$custom-select-focus-box-shadow: $input-focus-box-shadow;\n\n//$custom-select-font-size-sm: 75% !default;\n//$custom-select-height-sm: $input-height-sm !default;\n\n//$custom-select-font-size-lg: 125% !default;\n//$custom-select-height-lg: $input-height-lg !default;\n\n//$custom-file-height: $input-height !default;\n//$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow;\n\n//$custom-file-padding-y: $input-btn-padding-y !default;\n//$custom-file-padding-x: $input-btn-padding-x !default;\n//$custom-file-line-height: $input-btn-line-height !default;\n//$custom-file-color: $input-color !default;\n//$custom-file-bg: $input-bg !default;\n//$custom-file-border-width: $input-btn-border-width !default;\n//$custom-file-border-color: $input-border-color !default;\n//$custom-file-border-radius: $input-border-radius !default;\n//$custom-file-box-shadow: $input-box-shadow !default;\n//$custom-file-button-color: $custom-file-color !default;\n//$custom-file-button-bg: $input-group-addon-bg !default;\n//$custom-file-text: (\n// en: "Browse"\n//) !default;\n\n$cursor-disabled: not-allowed; // PS custom\n\n// Form validation\n//$form-feedback-margin-top: $form-text-margin-top !default;\n//$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color("success");\n$form-feedback-invalid-color: theme-color("danger");\n$form-feedback-warning-color: theme-color("warning"); // PS custom\n\n// Dropdowns\n//$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: 0;\n//$dropdown-padding-y: .5rem !default;\n//$dropdown-spacer: .125rem !default;\n//$dropdown-bg: $white !default;\n$dropdown-border-color: $light-gray;\n//$dropdown-border-radius: $border-radius !default;\n//$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $light-gray;\n//$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $medium-gray;\n$dropdown-link-hover-color: theme-color("primary");\n$dropdown-link-hover-bg: $white;\n\n//$dropdown-link-active-color: $component-active-color !default;\n//$dropdown-link-active-bg: $component-active-bg !default;\n\n//$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-x: .3125rem;\n$dropdown-item-padding-y: .3125rem;\n\n//$dropdown-header-color: $gray-600 !default;\n\n// Navs\n$nav-link-padding-y: .9375rem;\n$nav-link-padding-x: 1.25rem;\n$nav-link-disabled-color: $light-gray;\n\n$nav-tabs-border-color: $white;\n//$nav-tabs-border-width: $border-width !default;\n//$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: theme-color("primary");\n$nav-tabs-link-active-color: $body-color;\n$nav-tabs-link-active-bg: $body-bg;\n$nav-tabs-link-active-border-color: theme-color("primary");\n\n$nav-pills-link-hover-border-color: $nav-tabs-link-hover-border-color;\n$nav-pills-link-active-color: $nav-tabs-link-active-color;\n$nav-pills-link-active-bg: #f4f9fb;\n$nav-pills-link-active-border-color: $nav-tabs-link-active-border-color; // PS custom\n\n//$nav-pills-border-radius: $border-radius !default;\n//$nav-pills-link-active-color: $component-active-color !default;\n//$nav-pills-link-active-bg: $component-active-bg !default;\n\n// Navbar\n//$navbar-padding-y: ($spacer / 2) !default;\n//$navbar-padding-x: $spacer !default;\n\n//$navbar-nav-link-padding-x: .5rem !default;\n\n//$navbar-brand-font-size: $font-size-lg !default;\n\n//$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n//$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n//$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n//$navbar-toggler-padding-y: .25rem !default;\n//$navbar-toggler-padding-x: .75rem !default;\n//$navbar-toggler-font-size: $font-size-lg !default;\n//$navbar-toggler-border-radius: $btn-border-radius !default;\n\n//$navbar-dark-color: rgba($white, .5) !default;\n//$navbar-dark-hover-color: rgba($white, .75) !default;\n//$navbar-dark-active-color: $white !default;\n//$navbar-dark-disabled-color: rgba($white, .25) !default;\n//$navbar-dark-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-dark-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n//$navbar-light-color: rgba($black, .5) !default;\n//$navbar-light-hover-color: rgba($black, .7) !default;\n//$navbar-light-active-color: rgba($black, .9) !default;\n//$navbar-light-disabled-color: rgba($black, .3) !default;\n//$navbar-light-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-light-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n// Pagination\n$pagination-padding-y: .65rem;\n$pagination-padding-x: .5rem;\n//$pagination-padding-y-sm: .25rem !default;\n//$pagination-padding-x-sm: .5rem !default;\n//$pagination-padding-y-lg: .75rem !default;\n//$pagination-padding-x-lg: 1.5rem !default;\n//$pagination-line-height: 1.25 !default;\n\n$pagination-color: $medium-gray;\n$pagination-bg: $white;\n//$pagination-border-width: $border-width !default;\n$pagination-border-color: $white;\n\n//$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$pagination-hover-color: $pagination-color;\n$pagination-hover-bg: $pagination-bg;\n$pagination-hover-border-color: $pagination-border-color;\n\n$pagination-active-color: theme-color("primary");\n$pagination-active-bg: $pagination-bg;\n$pagination-active-border-color: $pagination-border-color;\n\n$pagination-disabled-color: $light-gray;\n$pagination-disabled-bg: $pagination-bg;\n$pagination-disabled-border-color: $pagination-border-color;\n\n// Jumbotron\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $extra-light-gray;\n\n// Cards\n$card-spacer-x: .625rem !default;\n$card-spacer-y: .625rem !default;\n$card-border-width: 1px !default;\n$card-border-radius: 5px !default;\n$card-border-radius-inner: $card-border-radius !default;\n$card-cap-bg: $gray-200 !default;\n$card-bg: #fff !default;\n$card-link-hover-color: #fff !default;\n$card-border-color: #dbe6e9 !default;\n//$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n//$card-cap-bg: rgba($black, .03) !default;\n//$card-bg: $white !default;\n\n//$card-img-overlay-padding: 1.25rem !default;\n\n//$card-group-margin: ($grid-gutter-width / 2) !default;\n//$card-deck-margin: $card-group-margin !default;\n\n//$card-columns-count: 3 !default;\n//$card-columns-gap: 1.25rem !default;\n//$card-columns-margin: $card-spacer-y !default;\n\n// Tooltips\n//$tooltip-font-size: $font-size-sm !default;\n//$tooltip-max-width: 200px !default;\n//$tooltip-color: $white !default;\n$tooltip-bg: $medium-gray;\n//$tooltip-border-radius: $border-radius !default;\n//$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .625rem;\n$tooltip-padding-x: 1.25rem;\n//$tooltip-margin: 0 !default;\n\n//$tooltip-arrow-width: .8rem !default;\n//$tooltip-arrow-height: .4rem !default;\n//$tooltip-arrow-color: $tooltip-bg !default;\n\n// Popovers\n//$popover-font-size: $font-size-sm !default;\n//$popover-bg: $white !default;\n//$popover-max-width: 276px !default;\n//$popover-border-width: $border-width !default;\n$popover-border-color: $light-gray;\n//$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: none;\n\n$popover-header-bg: $extra-light-gray;\n//$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .625rem;\n$popover-header-padding-x: 1.25rem;\n\n//$popover-body-color: $body-color !default;\n$popover-body-padding-y: .625rem;\n$popover-body-padding-x: 1.25rem;\n\n//$popover-arrow-width: 1rem !default;\n//$popover-arrow-height: .5rem !default;\n//$popover-arrow-color: $popover-bg !default;\n\n//$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n// Badges\n$badge-font-size: .625rem !default;\n$badge-font-weight: 500 !default;\n$badge-padding-y: .25rem;\n$badge-padding-x: .5rem;\n//$badge-border-radius: $border-radius !default;\n\n//$badge-pill-padding-x: .6em !default;\n//$badge-pill-border-radius: 10rem !default;\n\n// Modals\n$modal-inner-padding: 1.875rem;\n\n//$modal-dialog-margin: .5rem !default;\n//$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n//$modal-title-line-height: $line-height-base !default;\n\n//$modal-content-bg: $white !default;\n$modal-content-border-color: none;\n//$modal-content-border-width: $border-width !default;\n$modal-content-box-shadow-xs: 0 8px 16px 0 rgba(0, 0, 0, .1);\n$modal-content-box-shadow-sm-up: 0 8px 16px 0 rgba(0, 0, 0, .1);\n\n//$modal-backdrop-bg: $black !default;\n//$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: none;\n//$modal-footer-border-color: $modal-header-border-color !default;\n//$modal-header-border-width: $modal-content-border-width !default;\n//$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: $modal-inner-padding;\n\n$modal-lg: 900px;\n$modal-md: 680px;\n$modal-sm: 400px;\n\n//$modal-transition: transform .3s ease-out !default;\n\n// Alerts\n$alert-padding-y: 1rem !default;\n$alert-padding-x: 1rem;\n//$alert-margin-bottom: 1rem !default;\n//$alert-border-radius: $border-radius !default;\n//$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: .125rem;\n\n//$alert-bg-level: -10 !default;\n//$alert-border-level: -9 !default;\n//$alert-color-level: 6 !default;\n\n// Progress bars\n//$progress-height: 1rem !default;\n//$progress-font-size: ($font-size-base * .75) !default;\n//$progress-bg: $gray-200 !default;\n//$progress-border-radius: $border-radius !default;\n//$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n//$progress-bar-color: $white !default;\n//$progress-bar-bg: theme-color("primary") !default;\n//$progress-bar-animation-timing: 1s linear infinite !default;\n//$progress-bar-transition: width .6s ease !default;\n\n// List group\n//$list-group-bg: $white !default;\n$list-group-border-color: $light-gray;\n//$list-group-border-width: $border-width !default;\n//$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $input-padding-y;\n$list-group-item-padding-x: $input-padding-x;\n\n$list-group-hover-bg: theme-color-hover("primary");\n//$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: theme-color-hover("primary");\n//$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $light-gray;\n//$list-group-disabled-bg: $list-group-bg !default;\n\n//$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $white;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n// Image thumbnails\n$thumbnail-padding: 0;\n//$thumbnail-bg: $body-bg !default;\n//$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $light-gray;\n//$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: none;\n\n// Figures\n//$figure-caption-font-size: 90% !default;\n$figure-caption-color: $medium-gray;\n\n// Breadcrumbs\n$breadcrumb-padding-y: .3125rem;\n$breadcrumb-padding-x: .3125rem;\n$breadcrumb-item-padding: .3rem;\n\n$breadcrumb-margin-bottom: 0;\n\n$breadcrumb-bg: none;\n$breadcrumb-divider-color: $dark-gray;\n$breadcrumb-active-color: $extra-dark-gray;\n$breadcrumb-divider: "/";\n\n// Carousel\n//$carousel-control-color: $white !default;\n//$carousel-control-width: 15% !default;\n//$carousel-control-opacity: .5 !default;\n\n//$carousel-indicator-width: 30px !default;\n//$carousel-indicator-height: 3px !default;\n//$carousel-indicator-spacer: 3px !default;\n//$carousel-indicator-active-bg: $white !default;\n\n//$carousel-caption-width: 70% !default;\n//$carousel-caption-color: $white !default;\n\n//$carousel-control-icon-width: 20px !default;\n\n//$carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$carousel-transition: transform .6s ease !default;\n\n// Close\n//$close-font-size: $font-size-base * 1.5 !default;\n//$close-font-weight: $font-weight-bold !default;\n//$close-color: $black !default;\n//$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n//$code-font-size: 87.5% !default;\n$code-color: $body-color;\n\n//$kbd-padding-y: .2rem !default;\n//$kbd-padding-x: .4rem !default;\n//$kbd-font-size: $code-font-size !default;\n$kbd-color: $white;\n$kbd-bg: $extra-dark-gray;\n\n$pre-color: $body-color;\n//$pre-scrollable-max-height: 340px !default;\n\n// Printing\n//$print-page-size: a3 !default;\n//$print-body-min-width: map-get($grid-breakpoints, "lg") !default;\n'],sourceRoot:""}]);const l=a},99665:(t,n,e)=>{"use strict";e.r(n),e.d(n,{default:()=>l});var r=e(94015),i=e.n(r),o=e(23645),a=e.n(o)()(i());a.push([t.id,".product-page #product-images-container .pswp__button{background:none;color:white}.product-page #product-images-container .pswp__button::before{content:none}.product-page #product-images-container .pswp__button i{pointer-events:none}\n","",{version:3,sources:["webpack://./js/pages/product/components/dropzone/DropzonePhotoSwipe.vue"],names:[],mappings:"AAmLA,sDAEI,eAAgB,CAChB,WAAY,CAHhB,8DAMM,YAAa,CANnB,wDAUM,mBAAoB",sourcesContent:['\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@import "~@scss/config/_settings.scss";\n\n.product-page #product-images-container {\n .pswp__button {\n background: none;\n color: white;\n\n &::before {\n content: none;\n }\n\n i {\n pointer-events: none;\n }\n }\n}\n'],sourceRoot:""}]);const l=a},20350:(t,n,e)=>{"use strict";e.r(n),e.d(n,{default:()=>l});var r=e(94015),i=e.n(r),o=e(23645),a=e.n(o)()(i());a.push([t.id,'.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#25b9d7 !important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#1e94ab !important}.bg-secondary{background-color:#6c868e !important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#566b71 !important}.bg-success{background-color:#70b580 !important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#539f64 !important}.bg-info{background-color:#25b9d7 !important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#1e94ab !important}.bg-warning{background-color:#fab000 !important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#c78c00 !important}.bg-danger{background-color:#f54c3e !important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#f21f0e !important}.bg-light{background-color:#fafbfc !important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#dae2e9 !important}.bg-dark{background-color:#363a41 !important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#1f2125 !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #bbcdd2 !important}.border-top{border-top:1px solid #bbcdd2 !important}.border-right{border-right:1px solid #bbcdd2 !important}.border-bottom{border-bottom:1px solid #bbcdd2 !important}.border-left{border-left:1px solid #bbcdd2 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#25b9d7 !important}.border-secondary{border-color:#6c868e !important}.border-success{border-color:#70b580 !important}.border-info{border-color:#25b9d7 !important}.border-warning{border-color:#fab000 !important}.border-danger{border-color:#f54c3e !important}.border-light{border-color:#fafbfc !important}.border-dark{border-color:#363a41 !important}.border-white{border-color:#fff !important}.rounded{border-radius:4px !important}.rounded-top{border-top-left-radius:4px !important;border-top-right-radius:4px !important}.rounded-right{border-top-right-radius:4px !important;border-bottom-right-radius:4px !important}.rounded-bottom{border-bottom-right-radius:4px !important;border-bottom-left-radius:4px !important}.rounded-left{border-top-left-radius:4px !important;border-bottom-left-radius:4px !important}.rounded-circle{border-radius:50% !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}@media (min-width: 544px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}}@media (min-width: 768px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}}@media (min-width: 1024px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}}@media (min-width: 1300px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}}@media (min-width: 1600px){.d-xxl-none{display:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.85714%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}@media (min-width: 544px){.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}}@media (min-width: 768px){.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}}@media (min-width: 1024px){.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}}@media (min-width: 1300px){.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}}@media (min-width: 1600px){.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 544px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 768px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 1024px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 1300px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}@media (min-width: 1600px){.float-xxl-left{float:left !important}.float-xxl-right{float:right !important}.float-xxl-none{float:none !important}}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position: sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;clip-path:none}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.3125rem !important}.mt-1,.my-1{margin-top:.3125rem !important}.mr-1,.mx-1{margin-right:.3125rem !important}.mb-1,.my-1{margin-bottom:.3125rem !important}.ml-1,.mx-1{margin-left:.3125rem !important}.m-2{margin:.625rem !important}.mt-2,.my-2{margin-top:.625rem !important}.mr-2,.mx-2{margin-right:.625rem !important}.mb-2,.my-2{margin-bottom:.625rem !important}.ml-2,.mx-2{margin-left:.625rem !important}.m-3{margin:.9375rem !important}.mt-3,.my-3{margin-top:.9375rem !important}.mr-3,.mx-3{margin-right:.9375rem !important}.mb-3,.my-3{margin-bottom:.9375rem !important}.ml-3,.mx-3{margin-left:.9375rem !important}.m-4{margin:1.875rem !important}.mt-4,.my-4{margin-top:1.875rem !important}.mr-4,.mx-4{margin-right:1.875rem !important}.mb-4,.my-4{margin-bottom:1.875rem !important}.ml-4,.mx-4{margin-left:1.875rem !important}.m-5{margin:3.75rem !important}.mt-5,.my-5{margin-top:3.75rem !important}.mr-5,.mx-5{margin-right:3.75rem !important}.mb-5,.my-5{margin-bottom:3.75rem !important}.ml-5,.mx-5{margin-left:3.75rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.3125rem !important}.pt-1,.py-1{padding-top:.3125rem !important}.pr-1,.px-1{padding-right:.3125rem !important}.pb-1,.py-1{padding-bottom:.3125rem !important}.pl-1,.px-1{padding-left:.3125rem !important}.p-2{padding:.625rem !important}.pt-2,.py-2{padding-top:.625rem !important}.pr-2,.px-2{padding-right:.625rem !important}.pb-2,.py-2{padding-bottom:.625rem !important}.pl-2,.px-2{padding-left:.625rem !important}.p-3{padding:.9375rem !important}.pt-3,.py-3{padding-top:.9375rem !important}.pr-3,.px-3{padding-right:.9375rem !important}.pb-3,.py-3{padding-bottom:.9375rem !important}.pl-3,.px-3{padding-left:.9375rem !important}.p-4{padding:1.875rem !important}.pt-4,.py-4{padding-top:1.875rem !important}.pr-4,.px-4{padding-right:1.875rem !important}.pb-4,.py-4{padding-bottom:1.875rem !important}.pl-4,.px-4{padding-left:1.875rem !important}.p-5{padding:3.75rem !important}.pt-5,.py-5{padding-top:3.75rem !important}.pr-5,.px-5{padding-right:3.75rem !important}.pb-5,.py-5{padding-bottom:3.75rem !important}.pl-5,.px-5{padding-left:3.75rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media (min-width: 544px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:.3125rem !important}.mt-sm-1,.my-sm-1{margin-top:.3125rem !important}.mr-sm-1,.mx-sm-1{margin-right:.3125rem !important}.mb-sm-1,.my-sm-1{margin-bottom:.3125rem !important}.ml-sm-1,.mx-sm-1{margin-left:.3125rem !important}.m-sm-2{margin:.625rem !important}.mt-sm-2,.my-sm-2{margin-top:.625rem !important}.mr-sm-2,.mx-sm-2{margin-right:.625rem !important}.mb-sm-2,.my-sm-2{margin-bottom:.625rem !important}.ml-sm-2,.mx-sm-2{margin-left:.625rem !important}.m-sm-3{margin:.9375rem !important}.mt-sm-3,.my-sm-3{margin-top:.9375rem !important}.mr-sm-3,.mx-sm-3{margin-right:.9375rem !important}.mb-sm-3,.my-sm-3{margin-bottom:.9375rem !important}.ml-sm-3,.mx-sm-3{margin-left:.9375rem !important}.m-sm-4{margin:1.875rem !important}.mt-sm-4,.my-sm-4{margin-top:1.875rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.875rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.875rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.875rem !important}.m-sm-5{margin:3.75rem !important}.mt-sm-5,.my-sm-5{margin-top:3.75rem !important}.mr-sm-5,.mx-sm-5{margin-right:3.75rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3.75rem !important}.ml-sm-5,.mx-sm-5{margin-left:3.75rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:.3125rem !important}.pt-sm-1,.py-sm-1{padding-top:.3125rem !important}.pr-sm-1,.px-sm-1{padding-right:.3125rem !important}.pb-sm-1,.py-sm-1{padding-bottom:.3125rem !important}.pl-sm-1,.px-sm-1{padding-left:.3125rem !important}.p-sm-2{padding:.625rem !important}.pt-sm-2,.py-sm-2{padding-top:.625rem !important}.pr-sm-2,.px-sm-2{padding-right:.625rem !important}.pb-sm-2,.py-sm-2{padding-bottom:.625rem !important}.pl-sm-2,.px-sm-2{padding-left:.625rem !important}.p-sm-3{padding:.9375rem !important}.pt-sm-3,.py-sm-3{padding-top:.9375rem !important}.pr-sm-3,.px-sm-3{padding-right:.9375rem !important}.pb-sm-3,.py-sm-3{padding-bottom:.9375rem !important}.pl-sm-3,.px-sm-3{padding-left:.9375rem !important}.p-sm-4{padding:1.875rem !important}.pt-sm-4,.py-sm-4{padding-top:1.875rem !important}.pr-sm-4,.px-sm-4{padding-right:1.875rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.875rem !important}.pl-sm-4,.px-sm-4{padding-left:1.875rem !important}.p-sm-5{padding:3.75rem !important}.pt-sm-5,.py-sm-5{padding-top:3.75rem !important}.pr-sm-5,.px-sm-5{padding-right:3.75rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3.75rem !important}.pl-sm-5,.px-sm-5{padding-left:3.75rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media (min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:.3125rem !important}.mt-md-1,.my-md-1{margin-top:.3125rem !important}.mr-md-1,.mx-md-1{margin-right:.3125rem !important}.mb-md-1,.my-md-1{margin-bottom:.3125rem !important}.ml-md-1,.mx-md-1{margin-left:.3125rem !important}.m-md-2{margin:.625rem !important}.mt-md-2,.my-md-2{margin-top:.625rem !important}.mr-md-2,.mx-md-2{margin-right:.625rem !important}.mb-md-2,.my-md-2{margin-bottom:.625rem !important}.ml-md-2,.mx-md-2{margin-left:.625rem !important}.m-md-3{margin:.9375rem !important}.mt-md-3,.my-md-3{margin-top:.9375rem !important}.mr-md-3,.mx-md-3{margin-right:.9375rem !important}.mb-md-3,.my-md-3{margin-bottom:.9375rem !important}.ml-md-3,.mx-md-3{margin-left:.9375rem !important}.m-md-4{margin:1.875rem !important}.mt-md-4,.my-md-4{margin-top:1.875rem !important}.mr-md-4,.mx-md-4{margin-right:1.875rem !important}.mb-md-4,.my-md-4{margin-bottom:1.875rem !important}.ml-md-4,.mx-md-4{margin-left:1.875rem !important}.m-md-5{margin:3.75rem !important}.mt-md-5,.my-md-5{margin-top:3.75rem !important}.mr-md-5,.mx-md-5{margin-right:3.75rem !important}.mb-md-5,.my-md-5{margin-bottom:3.75rem !important}.ml-md-5,.mx-md-5{margin-left:3.75rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:.3125rem !important}.pt-md-1,.py-md-1{padding-top:.3125rem !important}.pr-md-1,.px-md-1{padding-right:.3125rem !important}.pb-md-1,.py-md-1{padding-bottom:.3125rem !important}.pl-md-1,.px-md-1{padding-left:.3125rem !important}.p-md-2{padding:.625rem !important}.pt-md-2,.py-md-2{padding-top:.625rem !important}.pr-md-2,.px-md-2{padding-right:.625rem !important}.pb-md-2,.py-md-2{padding-bottom:.625rem !important}.pl-md-2,.px-md-2{padding-left:.625rem !important}.p-md-3{padding:.9375rem !important}.pt-md-3,.py-md-3{padding-top:.9375rem !important}.pr-md-3,.px-md-3{padding-right:.9375rem !important}.pb-md-3,.py-md-3{padding-bottom:.9375rem !important}.pl-md-3,.px-md-3{padding-left:.9375rem !important}.p-md-4{padding:1.875rem !important}.pt-md-4,.py-md-4{padding-top:1.875rem !important}.pr-md-4,.px-md-4{padding-right:1.875rem !important}.pb-md-4,.py-md-4{padding-bottom:1.875rem !important}.pl-md-4,.px-md-4{padding-left:1.875rem !important}.p-md-5{padding:3.75rem !important}.pt-md-5,.py-md-5{padding-top:3.75rem !important}.pr-md-5,.px-md-5{padding-right:3.75rem !important}.pb-md-5,.py-md-5{padding-bottom:3.75rem !important}.pl-md-5,.px-md-5{padding-left:3.75rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media (min-width: 1024px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:.3125rem !important}.mt-lg-1,.my-lg-1{margin-top:.3125rem !important}.mr-lg-1,.mx-lg-1{margin-right:.3125rem !important}.mb-lg-1,.my-lg-1{margin-bottom:.3125rem !important}.ml-lg-1,.mx-lg-1{margin-left:.3125rem !important}.m-lg-2{margin:.625rem !important}.mt-lg-2,.my-lg-2{margin-top:.625rem !important}.mr-lg-2,.mx-lg-2{margin-right:.625rem !important}.mb-lg-2,.my-lg-2{margin-bottom:.625rem !important}.ml-lg-2,.mx-lg-2{margin-left:.625rem !important}.m-lg-3{margin:.9375rem !important}.mt-lg-3,.my-lg-3{margin-top:.9375rem !important}.mr-lg-3,.mx-lg-3{margin-right:.9375rem !important}.mb-lg-3,.my-lg-3{margin-bottom:.9375rem !important}.ml-lg-3,.mx-lg-3{margin-left:.9375rem !important}.m-lg-4{margin:1.875rem !important}.mt-lg-4,.my-lg-4{margin-top:1.875rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.875rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.875rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.875rem !important}.m-lg-5{margin:3.75rem !important}.mt-lg-5,.my-lg-5{margin-top:3.75rem !important}.mr-lg-5,.mx-lg-5{margin-right:3.75rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3.75rem !important}.ml-lg-5,.mx-lg-5{margin-left:3.75rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:.3125rem !important}.pt-lg-1,.py-lg-1{padding-top:.3125rem !important}.pr-lg-1,.px-lg-1{padding-right:.3125rem !important}.pb-lg-1,.py-lg-1{padding-bottom:.3125rem !important}.pl-lg-1,.px-lg-1{padding-left:.3125rem !important}.p-lg-2{padding:.625rem !important}.pt-lg-2,.py-lg-2{padding-top:.625rem !important}.pr-lg-2,.px-lg-2{padding-right:.625rem !important}.pb-lg-2,.py-lg-2{padding-bottom:.625rem !important}.pl-lg-2,.px-lg-2{padding-left:.625rem !important}.p-lg-3{padding:.9375rem !important}.pt-lg-3,.py-lg-3{padding-top:.9375rem !important}.pr-lg-3,.px-lg-3{padding-right:.9375rem !important}.pb-lg-3,.py-lg-3{padding-bottom:.9375rem !important}.pl-lg-3,.px-lg-3{padding-left:.9375rem !important}.p-lg-4{padding:1.875rem !important}.pt-lg-4,.py-lg-4{padding-top:1.875rem !important}.pr-lg-4,.px-lg-4{padding-right:1.875rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.875rem !important}.pl-lg-4,.px-lg-4{padding-left:1.875rem !important}.p-lg-5{padding:3.75rem !important}.pt-lg-5,.py-lg-5{padding-top:3.75rem !important}.pr-lg-5,.px-lg-5{padding-right:3.75rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3.75rem !important}.pl-lg-5,.px-lg-5{padding-left:3.75rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media (min-width: 1300px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:.3125rem !important}.mt-xl-1,.my-xl-1{margin-top:.3125rem !important}.mr-xl-1,.mx-xl-1{margin-right:.3125rem !important}.mb-xl-1,.my-xl-1{margin-bottom:.3125rem !important}.ml-xl-1,.mx-xl-1{margin-left:.3125rem !important}.m-xl-2{margin:.625rem !important}.mt-xl-2,.my-xl-2{margin-top:.625rem !important}.mr-xl-2,.mx-xl-2{margin-right:.625rem !important}.mb-xl-2,.my-xl-2{margin-bottom:.625rem !important}.ml-xl-2,.mx-xl-2{margin-left:.625rem !important}.m-xl-3{margin:.9375rem !important}.mt-xl-3,.my-xl-3{margin-top:.9375rem !important}.mr-xl-3,.mx-xl-3{margin-right:.9375rem !important}.mb-xl-3,.my-xl-3{margin-bottom:.9375rem !important}.ml-xl-3,.mx-xl-3{margin-left:.9375rem !important}.m-xl-4{margin:1.875rem !important}.mt-xl-4,.my-xl-4{margin-top:1.875rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.875rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.875rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.875rem !important}.m-xl-5{margin:3.75rem !important}.mt-xl-5,.my-xl-5{margin-top:3.75rem !important}.mr-xl-5,.mx-xl-5{margin-right:3.75rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3.75rem !important}.ml-xl-5,.mx-xl-5{margin-left:3.75rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:.3125rem !important}.pt-xl-1,.py-xl-1{padding-top:.3125rem !important}.pr-xl-1,.px-xl-1{padding-right:.3125rem !important}.pb-xl-1,.py-xl-1{padding-bottom:.3125rem !important}.pl-xl-1,.px-xl-1{padding-left:.3125rem !important}.p-xl-2{padding:.625rem !important}.pt-xl-2,.py-xl-2{padding-top:.625rem !important}.pr-xl-2,.px-xl-2{padding-right:.625rem !important}.pb-xl-2,.py-xl-2{padding-bottom:.625rem !important}.pl-xl-2,.px-xl-2{padding-left:.625rem !important}.p-xl-3{padding:.9375rem !important}.pt-xl-3,.py-xl-3{padding-top:.9375rem !important}.pr-xl-3,.px-xl-3{padding-right:.9375rem !important}.pb-xl-3,.py-xl-3{padding-bottom:.9375rem !important}.pl-xl-3,.px-xl-3{padding-left:.9375rem !important}.p-xl-4{padding:1.875rem !important}.pt-xl-4,.py-xl-4{padding-top:1.875rem !important}.pr-xl-4,.px-xl-4{padding-right:1.875rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.875rem !important}.pl-xl-4,.px-xl-4{padding-left:1.875rem !important}.p-xl-5{padding:3.75rem !important}.pt-xl-5,.py-xl-5{padding-top:3.75rem !important}.pr-xl-5,.px-xl-5{padding-right:3.75rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3.75rem !important}.pl-xl-5,.px-xl-5{padding-left:3.75rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}@media (min-width: 1600px){.m-xxl-0{margin:0 !important}.mt-xxl-0,.my-xxl-0{margin-top:0 !important}.mr-xxl-0,.mx-xxl-0{margin-right:0 !important}.mb-xxl-0,.my-xxl-0{margin-bottom:0 !important}.ml-xxl-0,.mx-xxl-0{margin-left:0 !important}.m-xxl-1{margin:.3125rem !important}.mt-xxl-1,.my-xxl-1{margin-top:.3125rem !important}.mr-xxl-1,.mx-xxl-1{margin-right:.3125rem !important}.mb-xxl-1,.my-xxl-1{margin-bottom:.3125rem !important}.ml-xxl-1,.mx-xxl-1{margin-left:.3125rem !important}.m-xxl-2{margin:.625rem !important}.mt-xxl-2,.my-xxl-2{margin-top:.625rem !important}.mr-xxl-2,.mx-xxl-2{margin-right:.625rem !important}.mb-xxl-2,.my-xxl-2{margin-bottom:.625rem !important}.ml-xxl-2,.mx-xxl-2{margin-left:.625rem !important}.m-xxl-3{margin:.9375rem !important}.mt-xxl-3,.my-xxl-3{margin-top:.9375rem !important}.mr-xxl-3,.mx-xxl-3{margin-right:.9375rem !important}.mb-xxl-3,.my-xxl-3{margin-bottom:.9375rem !important}.ml-xxl-3,.mx-xxl-3{margin-left:.9375rem !important}.m-xxl-4{margin:1.875rem !important}.mt-xxl-4,.my-xxl-4{margin-top:1.875rem !important}.mr-xxl-4,.mx-xxl-4{margin-right:1.875rem !important}.mb-xxl-4,.my-xxl-4{margin-bottom:1.875rem !important}.ml-xxl-4,.mx-xxl-4{margin-left:1.875rem !important}.m-xxl-5{margin:3.75rem !important}.mt-xxl-5,.my-xxl-5{margin-top:3.75rem !important}.mr-xxl-5,.mx-xxl-5{margin-right:3.75rem !important}.mb-xxl-5,.my-xxl-5{margin-bottom:3.75rem !important}.ml-xxl-5,.mx-xxl-5{margin-left:3.75rem !important}.p-xxl-0{padding:0 !important}.pt-xxl-0,.py-xxl-0{padding-top:0 !important}.pr-xxl-0,.px-xxl-0{padding-right:0 !important}.pb-xxl-0,.py-xxl-0{padding-bottom:0 !important}.pl-xxl-0,.px-xxl-0{padding-left:0 !important}.p-xxl-1{padding:.3125rem !important}.pt-xxl-1,.py-xxl-1{padding-top:.3125rem !important}.pr-xxl-1,.px-xxl-1{padding-right:.3125rem !important}.pb-xxl-1,.py-xxl-1{padding-bottom:.3125rem !important}.pl-xxl-1,.px-xxl-1{padding-left:.3125rem !important}.p-xxl-2{padding:.625rem !important}.pt-xxl-2,.py-xxl-2{padding-top:.625rem !important}.pr-xxl-2,.px-xxl-2{padding-right:.625rem !important}.pb-xxl-2,.py-xxl-2{padding-bottom:.625rem !important}.pl-xxl-2,.px-xxl-2{padding-left:.625rem !important}.p-xxl-3{padding:.9375rem !important}.pt-xxl-3,.py-xxl-3{padding-top:.9375rem !important}.pr-xxl-3,.px-xxl-3{padding-right:.9375rem !important}.pb-xxl-3,.py-xxl-3{padding-bottom:.9375rem !important}.pl-xxl-3,.px-xxl-3{padding-left:.9375rem !important}.p-xxl-4{padding:1.875rem !important}.pt-xxl-4,.py-xxl-4{padding-top:1.875rem !important}.pr-xxl-4,.px-xxl-4{padding-right:1.875rem !important}.pb-xxl-4,.py-xxl-4{padding-bottom:1.875rem !important}.pl-xxl-4,.px-xxl-4{padding-left:1.875rem !important}.p-xxl-5{padding:3.75rem !important}.pt-xxl-5,.py-xxl-5{padding-top:3.75rem !important}.pr-xxl-5,.px-xxl-5{padding-right:3.75rem !important}.pb-xxl-5,.py-xxl-5{padding-bottom:3.75rem !important}.pl-xxl-5,.px-xxl-5{padding-left:3.75rem !important}.m-xxl-auto{margin:auto !important}.mt-xxl-auto,.my-xxl-auto{margin-top:auto !important}.mr-xxl-auto,.mx-xxl-auto{margin-right:auto !important}.mb-xxl-auto,.my-xxl-auto{margin-bottom:auto !important}.ml-xxl-auto,.mx-xxl-auto{margin-left:auto !important}}.text-justify{text-align:justify !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 544px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 1024px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1300px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}@media (min-width: 1600px){.text-xxl-left{text-align:left !important}.text-xxl-right{text-align:right !important}.text-xxl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:700 !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#25b9d7 !important}a.text-primary:hover,a.text-primary:focus{color:#1e94ab !important}.text-secondary{color:#6c868e !important}a.text-secondary:hover,a.text-secondary:focus{color:#566b71 !important}.text-success{color:#70b580 !important}a.text-success:hover,a.text-success:focus{color:#539f64 !important}.text-info{color:#25b9d7 !important}a.text-info:hover,a.text-info:focus{color:#1e94ab !important}.text-warning{color:#fab000 !important}a.text-warning:hover,a.text-warning:focus{color:#c78c00 !important}.text-danger{color:#f54c3e !important}a.text-danger:hover,a.text-danger:focus{color:#f21f0e !important}.text-light{color:#fafbfc !important}a.text-light:hover,a.text-light:focus{color:#dae2e9 !important}.text-dark{color:#363a41 !important}a.text-dark:hover,a.text-dark:focus{color:#1f2125 !important}.text-muted{color:#6c868e !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.product-page .dropzone-window{width:45%;background-color:#fafafa;align-self:stretch;padding:1rem;min-width:20rem}.product-page .dropzone-window-filemanager{display:none}.product-page .dropzone-window-label{display:flex;align-items:center;justify-content:space-between;margin-bottom:0.5rem}.product-page .dropzone-window-label label{margin-bottom:0}.product-page .dropzone-window-label .dropdown>button{padding-right:0.25rem}.product-page .dropzone-window-label .dropdown-item{cursor:pointer}.product-page .dropzone-window textarea{margin-bottom:1rem}.product-page .dropzone-window-button-container{display:flex;justify-content:flex-end}.product-page .dropzone-window-checkbox{margin-bottom:1rem}.product-page .dropzone-window-checkbox label{font-size:0.875rem}.product-page .dropzone-window-select,.product-page .dropzone-window-unselect{font-weight:600;font-size:0.925rem;color:#25b9d7;cursor:pointer;margin-top:0.5rem}.product-page .dropzone-window-number{font-size:1rem}.product-page .dropzone-window-number span{color:#25b9d7;font-weight:600}.product-page .dropzone-window-header{display:flex;align-items:center;justify-content:space-between;padding:0 1rem}.product-page .dropzone-window-header p{margin-bottom:0}.product-page .dropzone-window-header .material-icons{cursor:pointer;color:#6c868e;transition:0.25s ease-out;font-size:1.5rem;margin:0 0.25rem}.product-page .dropzone-window-header .material-icons:last-child{margin-right:0}.product-page .dropzone-window-header .material-icons:first-child{margin-left:0}.product-page .dropzone-window-header .material-icons:hover{color:primary}@media (max-width: 543.98px){.product-page .dropzone-window{width:100%;min-width:100%}}\n',"",{version:3,sources:["webpack://./node_modules/bootstrap/scss/utilities/_align.scss","webpack://./node_modules/bootstrap/scss/mixins/_background-variant.scss","webpack://./node_modules/bootstrap/scss/mixins/_hover.scss","webpack://./node_modules/bootstrap/scss/utilities/_background.scss","webpack://./node_modules/bootstrap/scss/utilities/_borders.scss","webpack://./node_modules/bootstrap/scss/mixins/_clearfix.scss","webpack://./node_modules/bootstrap/scss/utilities/_display.scss","webpack://./node_modules/bootstrap/scss/mixins/_breakpoints.scss","webpack://./node_modules/bootstrap/scss/utilities/_embed.scss","webpack://./node_modules/bootstrap/scss/utilities/_flex.scss","webpack://./node_modules/bootstrap/scss/utilities/_float.scss","webpack://./node_modules/bootstrap/scss/mixins/_float.scss","webpack://./node_modules/bootstrap/scss/utilities/_position.scss","webpack://./node_modules/bootstrap/scss/_variables.scss","webpack://./node_modules/bootstrap/scss/utilities/_screenreaders.scss","webpack://./node_modules/bootstrap/scss/mixins/_screen-reader.scss","webpack://./node_modules/bootstrap/scss/utilities/_sizing.scss","webpack://./node_modules/bootstrap/scss/utilities/_spacing.scss","webpack://./node_modules/bootstrap/scss/utilities/_text.scss","webpack://./node_modules/bootstrap/scss/mixins/_text-truncate.scss","webpack://./node_modules/bootstrap/scss/mixins/_text-emphasis.scss","webpack://./node_modules/bootstrap/scss/mixins/_text-hide.scss","webpack://./node_modules/bootstrap/scss/mixins/_visibility.scss","webpack://./node_modules/bootstrap/scss/utilities/_visibility.scss","webpack://./js/pages/product/components/dropzone/DropzoneWindow.vue","webpack://./node_modules/prestakit/scss/_variables.scss"],names:[],mappings:"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",sourcesContent:["// stylelint-disable declaration-no-important\n\n.align-baseline { vertical-align: baseline !important; } // Browser default\n.align-top { vertical-align: top !important; }\n.align-middle { vertical-align: middle !important; }\n.align-bottom { vertical-align: bottom !important; }\n.align-text-bottom { vertical-align: text-bottom !important; }\n.align-text-top { vertical-align: text-top !important; }\n","// stylelint-disable declaration-no-important\n\n// Contextual backgrounds\n\n@mixin bg-variant($parent, $color) {\n #{$parent} {\n background-color: $color !important;\n }\n a#{$parent},\n button#{$parent} {\n @include hover-focus {\n background-color: darken($color, 10%) !important;\n }\n }\n}\n\n@mixin bg-gradient-variant($parent, $color) {\n #{$parent} {\n background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important;\n }\n}\n","// stylelint-disable indentation\n\n// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Origally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS—an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular psuedo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover {\n &:hover { @content; }\n}\n\n@mixin hover-focus {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n",'// stylelint-disable declaration-no-important\n\n@each $color, $value in $theme-colors {\n @include bg-variant(".bg-#{$color}", $value);\n}\n\n@if $enable-gradients {\n @each $color, $value in $theme-colors {\n @include bg-gradient-variant(".bg-gradient-#{$color}", $value);\n }\n}\n\n.bg-white {\n background-color: $white !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n',"// stylelint-disable declaration-no-important\n\n//\n// Border\n//\n\n.border { border: $border-width solid $border-color !important; }\n.border-top { border-top: $border-width solid $border-color !important; }\n.border-right { border-right: $border-width solid $border-color !important; }\n.border-bottom { border-bottom: $border-width solid $border-color !important; }\n.border-left { border-left: $border-width solid $border-color !important; }\n\n.border-0 { border: 0 !important; }\n.border-top-0 { border-top: 0 !important; }\n.border-right-0 { border-right: 0 !important; }\n.border-bottom-0 { border-bottom: 0 !important; }\n.border-left-0 { border-left: 0 !important; }\n\n@each $color, $value in $theme-colors {\n .border-#{$color} {\n border-color: $value !important;\n }\n}\n\n.border-white {\n border-color: $white !important;\n}\n\n//\n// Border-radius\n//\n\n.rounded {\n border-radius: $border-radius !important;\n}\n.rounded-top {\n border-top-left-radius: $border-radius !important;\n border-top-right-radius: $border-radius !important;\n}\n.rounded-right {\n border-top-right-radius: $border-radius !important;\n border-bottom-right-radius: $border-radius !important;\n}\n.rounded-bottom {\n border-bottom-right-radius: $border-radius !important;\n border-bottom-left-radius: $border-radius !important;\n}\n.rounded-left {\n border-top-left-radius: $border-radius !important;\n border-bottom-left-radius: $border-radius !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n",'@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: "";\n }\n}\n',"// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .d#{$infix}-none { display: none !important; }\n .d#{$infix}-inline { display: inline !important; }\n .d#{$infix}-inline-block { display: inline-block !important; }\n .d#{$infix}-block { display: block !important; }\n .d#{$infix}-table { display: table !important; }\n .d#{$infix}-table-row { display: table-row !important; }\n .d#{$infix}-table-cell { display: table-cell !important; }\n .d#{$infix}-flex { display: flex !important; }\n .d#{$infix}-inline-flex { display: inline-flex !important; }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n .d-print-none { display: none !important; }\n .d-print-inline { display: inline !important; }\n .d-print-inline-block { display: inline-block !important; }\n .d-print-block { display: block !important; }\n .d-print-table { display: table !important; }\n .d-print-table-row { display: table-row !important; }\n .d-print-table-cell { display: table-cell !important; }\n .d-print-flex { display: flex !important; }\n .d-print-inline-flex { display: inline-flex !important; }\n}\n",'// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02px, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash infront.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// "" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// "-sm"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, "", "-#{$name}");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint\'s minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n','// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n\n &::before {\n display: block;\n content: "";\n }\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n }\n}\n\n.embed-responsive-21by9 {\n &::before {\n padding-top: percentage(9 / 21);\n }\n}\n\n.embed-responsive-16by9 {\n &::before {\n padding-top: percentage(9 / 16);\n }\n}\n\n.embed-responsive-4by3 {\n &::before {\n padding-top: percentage(3 / 4);\n }\n}\n\n.embed-responsive-1by1 {\n &::before {\n padding-top: percentage(1 / 1);\n }\n}\n',"// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n","@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .float#{$infix}-left { @include float-left; }\n .float#{$infix}-right { @include float-right; }\n .float#{$infix}-none { @include float-none; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n@mixin float-left {\n float: left !important;\n}\n@mixin float-right {\n float: right !important;\n}\n@mixin float-none {\n float: none !important;\n}\n","// stylelint-disable declaration-no-important\n\n// Common values\n\n// Sass list not in variables since it's not intended for customization.\n$positions: static, relative, absolute, fixed, sticky;\n\n@each $position in $positions {\n .position-#{$position} { position: $position !important; }\n}\n\n// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.sticky-top {\n @supports (position: sticky) {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n}\n",'// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n\n//\n// Color system\n//\n\n// stylelint-disable\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n$grays: map-merge((\n "100": $gray-100,\n "200": $gray-200,\n "300": $gray-300,\n "400": $gray-400,\n "500": $gray-500,\n "600": $gray-600,\n "700": $gray-700,\n "800": $gray-800,\n "900": $gray-900\n), $grays);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n$colors: map-merge((\n "blue": $blue,\n "indigo": $indigo,\n "purple": $purple,\n "pink": $pink,\n "red": $red,\n "orange": $orange,\n "yellow": $yellow,\n "green": $green,\n "teal": $teal,\n "cyan": $cyan,\n "white": $white,\n "gray": $gray-600,\n "gray-dark": $gray-800\n), $colors);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n$theme-colors: map-merge((\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": $warning,\n "danger": $danger,\n "light": $light,\n "dark": $dark\n), $theme-colors);\n// stylelint-enable\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from "dark" to "light". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// stylelint-disable\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map-merge((\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n), $spacers);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n$sizes: map-merge((\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%\n), $sizes);\n// stylelint-enable\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color("primary") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, "$container-max-widths");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color("primary") !default;\n\n$caret-width: .3em !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n\n// Fonts\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: ($font-size-base * 1.25) !default;\n$font-size-sm: ($font-size-base * .875) !default;\n\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: inherit !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: inherit !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: ($font-size-base * 1.25) !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-bg: transparent !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $gray-300 !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-bg: $gray-900 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($gray-900, 7.5%) !default;\n$table-dark-color: $body-bg !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap\'s buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-line-height: $input-btn-line-height !default;\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default;\n\n$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-control-gutter: 1.5rem !default;\n$custom-control-spacer-x: 1rem !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $gray-300 !default;\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-control-indicator-disabled-bg: $gray-200 !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color("primary"), .5) !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n\n$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 8 8\'%3E%3Cpath fill=\'#{$custom-control-indicator-checked-color}\' d=\'M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 4\'%3E%3Cpath stroke=\'#{$custom-checkbox-indicator-indeterminate-color}\' d=\'M0 2h4\'/%3E%3C/svg%3E"), "#", "%23") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'-4 -4 8 8\'%3E%3Ccircle r=\'3\' fill=\'#{$custom-control-indicator-checked-color}\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n$custom-select-padding-y: .375rem !default;\n$custom-select-padding-x: .75rem !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-line-height: $input-btn-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $white !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 5\'%3E%3Cpath fill=\'#{$custom-select-indicator-color}\' d=\'M2 0L0 2h4zm0 5L0 3h4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n$custom-select-border-width: $input-btn-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-box-shadow: inset 0 1px 2px rgba($black, .075), 0 0 5px rgba($custom-select-focus-border-color, .5) !default;\n\n$custom-select-font-size-sm: 75% !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-font-size-lg: 125% !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$custom-file-padding-y: $input-btn-padding-y !default;\n$custom-file-padding-x: $input-btn-padding-x !default;\n$custom-file-line-height: $input-btn-line-height !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-btn-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: "Browse"\n) !default;\n\n\n// Form validation\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color("success") !default;\n$form-feedback-invalid-color: theme-color("danger") !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They\'re used for a bird\'s eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n// Navbar\n\n$navbar-padding-y: ($spacer / 2) !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-dark-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-light-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: ($grid-gutter-width / 2) !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $gray-200 !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: 1rem !default;\n\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-transition: transform .3s ease-out !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: ($font-size-base * .75) !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color("primary") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n// List group\n\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: "/" !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n$carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n$carousel-transition: transform .6s ease !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Printing\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, "lg") !default;\n',"//\n// Screenreaders\n//\n\n.sr-only {\n @include sr-only();\n}\n\n.sr-only-focusable {\n @include sr-only-focusable();\n}\n",'// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n// See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n clip-path: inset(50%);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it\'s focused.\n//\n// Useful for "Skip to main content" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n//\n// Credit: HTML5 Boilerplate\n\n@mixin sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n clip-path: none;\n }\n}\n',"// stylelint-disable declaration-no-important\n\n// Width and height\n\n@each $prop, $abbrev in (width: w, height: h) {\n @each $size, $length in $sizes {\n .#{$abbrev}-#{$size} { #{$prop}: $length !important; }\n }\n}\n\n.mw-100 { max-width: 100% !important; }\n.mh-100 { max-height: 100% !important; }\n","// stylelint-disable declaration-no-important\n\n// Margin and Padding\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n\n .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }\n .#{$abbrev}t#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n }\n\n // Some special margin utils\n .m#{$infix}-auto { margin: auto !important; }\n .mt#{$infix}-auto,\n .my#{$infix}-auto {\n margin-top: auto !important;\n }\n .mr#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-right: auto !important;\n }\n .mb#{$infix}-auto,\n .my#{$infix}-auto {\n margin-bottom: auto !important;\n }\n .ml#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-left: auto !important;\n }\n }\n}\n",'// stylelint-disable declaration-no-important\n\n//\n// Text\n//\n\n// Alignment\n\n.text-justify { text-align: justify !important; }\n.text-nowrap { white-space: nowrap !important; }\n.text-truncate { @include text-truncate; }\n\n// Responsive alignment\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .text#{$infix}-left { text-align: left !important; }\n .text#{$infix}-right { text-align: right !important; }\n .text#{$infix}-center { text-align: center !important; }\n }\n}\n\n// Transformation\n\n.text-lowercase { text-transform: lowercase !important; }\n.text-uppercase { text-transform: uppercase !important; }\n.text-capitalize { text-transform: capitalize !important; }\n\n// Weight and italics\n\n.font-weight-light { font-weight: $font-weight-light !important; }\n.font-weight-normal { font-weight: $font-weight-normal !important; }\n.font-weight-bold { font-weight: $font-weight-bold !important; }\n.font-italic { font-style: italic !important; }\n\n// Contextual colors\n\n.text-white { color: #fff !important; }\n\n@each $color, $value in $theme-colors {\n @include text-emphasis-variant(".text-#{$color}", $value);\n}\n\n.text-muted { color: $text-muted !important; }\n\n// Misc\n\n.text-hide {\n @include text-hide();\n}\n',"// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","// stylelint-disable declaration-no-important\n\n// Typography\n\n@mixin text-emphasis-variant($parent, $color) {\n #{$parent} {\n color: $color !important;\n }\n a#{$parent} {\n @include hover-focus {\n color: darken($color, 10%) !important;\n }\n }\n}\n","// CSS image replacement\n@mixin text-hide() {\n // stylelint-disable-next-line font-family-no-missing-generic-family-keyword\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n","// stylelint-disable declaration-no-important\n\n// Visibility\n\n@mixin invisible($visibility) {\n visibility: $visibility !important;\n}\n","//\n// Visibility utilities\n//\n\n.visible {\n @include invisible(visible);\n}\n\n.invisible {\n @include invisible(hidden);\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@import '~@scss/config/_settings.scss';\n@import '~@scss/config/_bootstrap.scss';\n\n.product-page {\n .dropzone-window {\n width: 45%;\n background-color: darken(#ffffff, 2%);\n align-self: stretch;\n padding: 1rem;\n min-width: 20rem;\n\n &-filemanager {\n display: none;\n }\n\n &-label {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 0.5rem;\n\n label {\n margin-bottom: 0;\n }\n\n .dropdown {\n > button {\n padding-right: 0.25rem;\n }\n\n &-item {\n cursor: pointer;\n }\n }\n }\n\n textarea {\n margin-bottom: 1rem;\n }\n\n &-button {\n &-container {\n display: flex;\n justify-content: flex-end;\n }\n }\n\n &-checkbox {\n margin-bottom: 1rem;\n\n label {\n font-size: 0.875rem;\n }\n }\n\n &-select,\n &-unselect {\n font-weight: 600;\n font-size: 0.925rem;\n color: $primary;\n cursor: pointer;\n margin-top: 0.5rem;\n }\n\n &-number {\n font-size: 1rem;\n\n span {\n color: $primary;\n font-weight: 600;\n }\n }\n\n &-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 1rem;\n\n p {\n margin-bottom: 0;\n }\n\n .material-icons {\n cursor: pointer;\n color: $gray-500;\n transition: 0.25s ease-out;\n font-size: 1.5rem;\n margin: 0 0.25rem;\n\n &:last-child {\n margin-right: 0;\n }\n\n &:first-child {\n margin-left: 0;\n }\n\n &:hover {\n color: primary;\n }\n }\n }\n\n @include media-breakpoint-down(xs) {\n width: 100%;\n min-width: 100%;\n }\n }\n}\n",'/* stylelint-disable */\n\n// Color system\n$white: #fff;\n$gray-disabled: #eaebec;\n$gray-100: #fafbfc;\n$gray-200: #fafbfc;\n$gray-250: #fafbfc;\n$gray-300: #bbcdd2;\n$gray-400: #bbcdd2;\n$gray-450: #b3c7cd;\n$gray-500: #6c868e;\n$gray-550: #708090;\n$gray-600: #6c868e;\n$gray-700: #363a41;\n$gray-750: #363a41;\n$gray-800: #363a41;\n$gray-900: #282b30;\n$black: #000;\n\n// PS Vars\n$extra-light-gray: $gray-100;\n$light-gray: $gray-300;\n$medium-gray: $gray-500;\n$dark-gray: $gray-700;\n$extra-dark-gray: $gray-900;\n$gray-light: $light-gray;\n$gray-medium: $medium-gray;\n$gray-dark: $dark-gray;\n$gray-soft: $gray-200;\n$background-color: #eff1f2;\n$primary-lighten: #f4fcfd;\n$local-font: false !default;\n\n$blue: #25b9d7;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #f54c3e;\n$orange: #fd7e14 !default;\n$yellow: #fab000;\n$green: #70b580;\n$orange: #fd7e14 !default;\n$teal: #20c997 !default;\n$cyan: $blue;\n$light-blue: #f4fcfd;\n\n// main button background colors\n$primary-hover: #7cd5e7;\n$primary-active: #21a6c1;\n$primary-disabled: #d3f1f7;\n$secondary-hover: #b7ced3;\n$secondary-active: #889da2;\n$danger-hover: #fde1e1;\n$notice: #dff5f9;\n\n$primary: $blue !default;\n$secondary: $medium-gray;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$toast-success: #53d572 !default;\n$toast-warning: #fab000 !default;\n\n$brand-primary: $primary !default;\n$brand-secondary: $secondary !default;\n$brand-info: #5bc0de !default;\n$brand-warning: #f0ad4e !default;\n$brand-success: $success !default;\n$brand-danger: $danger !default;\n\n$btn-primary-bg: $primary-hover;\n$btn-secondary-border: #000;\n$btn-info-bg: $brand-info !default;\n$btn-success-bg: $brand-success !default;\n$btn-warning-bg: $brand-warning !default;\n$btn-danger-bg: $brand-danger !default;\n\n$theme-colors: (\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": $warning,\n "danger": $danger,\n "light": $light,\n "dark": $dark\n);\n\n$alerts-background-colors: (\n "success": #cbf2d4,\n "info": #beeaf3,\n "warning": #fffbd3,\n "danger": #fbc6c3\n);\n\n$alerts-second-colors: (\n "success": #53d572,\n "info": #25b9d7,\n "warning": #fab000,\n "danger": #f44336\n);\n\n$theme-alerts-icons: (\n success: "\\E5CA",\n info: "\\e88e",\n warning: "\\E002",\n danger: "\\e000"\n);\n\n$theme-colors-icons: (\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": #fab000,\n "danger": $danger,\n "light": $light\n);\n\n$theme-colors-hover: (\n primary: $primary-hover,\n secondary: $secondary-hover,\n success: #9bcba6,\n info: $primary-hover,\n warning: #e6b045,\n danger: #e76d7a,\n light: $gray-800,\n dark: $gray-100,\n default: $light-blue\n);\n\n$theme-colors-active: (\n primary: $primary-active,\n secondary: $secondary-active,\n success: #5a9166,\n info: darken(map-get($theme-colors, "info"), 10%),\n warning: darken(map-get($theme-colors, "warning"), 10%),\n danger: #c3362b,\n light: darken(map-get($theme-colors, "light"), 10%),\n dark: darken(map-get($theme-colors, "dark"), 10%),\n default: $primary\n);\n\n$theme-colors-background: (\n primary: #dff5f9,\n secondary: $black,\n success: #d6f0d8,\n info: #dff5f9,\n warning: #fffbd3,\n danger: #fde1e1,\n light: $gray-200,\n dark: $gray-700\n);\n\n$theme-colors-shadow: (\n primary: theme-color("primary"),\n secondary: $black,\n success: theme-color("success"),\n info: theme-color("info"),\n warning: theme-color("warning"),\n danger: theme-color("danger"),\n light: theme-color("light"),\n dark: theme-color("dark")\n);\n\n// Options\n$enable-caret: true !default;\n$enable-rounded: true;\n$enable-shadows: true;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n// Spacing\n$spacer: 1.875rem;\n\n$spacers: (\n 0: 0,\n 1: (\n $spacer / 6\n ),\n 2: (\n $spacer / 3\n ),\n 3: (\n $spacer / 2\n ),\n 4: $spacer,\n 5: (\n $spacer * 2\n )\n);\n\n// Body\n$body-bg: $white !default;\n$body-color: $dark-gray;\n\n// Links\n$link-hover-color: theme-color("primary") !default;\n$link-hover-decoration: underline;\n\n// Paragraphs\n$paragraph-margin-bottom: 1rem;\n\n// Grid breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 544px,\n md: 768px,\n lg: 1024px,\n xl: 1300px,\n xxl: 1600px // PS custom\n);\n@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n// Grid containers\n$container-max-widths: (\n sm: 576px,\n md: 720px,\n lg: 972px,\n xl: 1240px\n);\n@include _assert-ascending($container-max-widths, "$container-max-widths");\n\n// Grid columns\n//$grid-columns: 12 !default;\n$grid-gutter-width: 1.875rem !default;\n\n// Components\n//$line-height-lg: 1.5 !default;\n//$line-height-sm: 1.5 !default;\n\n//$border-width: 1px !default;\n//$border-color: $gray-300 !default;\n\n$border-radius: 4px !default;\n//$border-radius-lg: .3rem !default;\n//$border-radius-sm: .2rem !default;\n\n//$component-active-color: $white !default;\n//$component-active-bg: theme-color("primary") !default;\n\n$caret-width: .25rem;\n\n//$transition-base: all .2s ease-in-out !default;\n//$transition-fade: opacity .15s linear !default;\n//$transition-collapse: height .35s ease !default;\n\n// Fonts\n$font-family-sans-serif: "Open Sans", helvetica, arial, sans-serif;\n//$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;\n//$font-family-base: $font-family-sans-serif !default;\n\n$font-size-base: .875rem;\n$font-size-lg: 1rem;\n$font-size-sm: .75rem;\n$font-size-xs: .625rem; // PS custom\n\n//$font-weight-light: 300;\n//$font-weight-normal: 400;\n$font-weight-semibold: 600;\n$font-weight-bold: 700;\n\n$h1-font-size: 1.5rem;\n$h2-font-size: 1.25rem;\n$h3-font-size: 1rem;\n$h4-font-size: .875rem;\n$h5-font-size: .75rem;\n$h6-font-size: .625rem;\n\n//$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: $font-family-sans-serif;\n$headings-font-weight: $font-weight-bold;\n$headings-color: $body-color;\n\n//$display1-size: 6rem !default;\n//$display2-size: 5.5rem !default;\n//$display3-size: 4.5rem !default;\n//$display4-size: 3.5rem !default;\n\n//$display1-weight: 300 !default;\n//$display2-weight: 300 !default;\n//$display3-weight: 300 !default;\n//$display4-weight: 300 !default;\n//$display-line-height: $headings-line-height !default;\n\n//$lead-font-size: ($font-size-base * 1.25) !default;\n//$lead-font-weight: 300 !default;\n\n//$small-font-size: 80% !default;\n\n$text-muted: $medium-gray;\n\n//$blockquote-small-color: $gray-600 !default;\n//$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: $light-gray;\n//$hr-border-width: $border-width !default;\n\n//$mark-padding: .2em !default;\n\n//$dt-font-weight: $font-weight-bold !default;\n\n//$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n//$nested-kbd-font-weight: $font-weight-bold !default;\n\n//$list-inline-padding: .5rem !default;\n\n//$mark-bg: #fcf8e3 !default;\n\n//$hr-margin-y: $spacer !default;\n\n// Tables\n$table-cell-padding: .4rem;\n$table-cell-padding-sm: .25rem;\n\n//$table-bg: transparent !default;\n$table-accent-bg: $background-color;\n$table-hover-bg: theme-color-hover("primary");\n$table-active-bg: theme-color-hover("primary");\n\n//$table-border-width: $border-width !default;\n//$table-border-color: $gray-300 !default;\n\n$table-head-bg: $background-color;\n$table-head-color: $body-color;\n\n$table-dark-bg: $body-color;\n$table-dark-accent-bg: $extra-dark-gray;\n$table-dark-hover-bg: theme-color-hover("primary");\n$table-dark-border-color: $medium-gray;\n//$table-dark-color: $body-bg !default;\n\n// Buttons\n$input-btn-padding-y: .375rem;\n$input-btn-padding-x: .838rem;\n//$input-btn-line-height: $line-height-base !default;\n\n//$input-btn-focus-width: .2rem !default;\n//$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n//$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .313rem;\n$input-btn-padding-x-sm: .625rem;\n//$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .438rem;\n$input-btn-padding-x-lg: .838rem;\n//$input-btn-line-height-lg: $line-height-lg !default;\n\n//$input-btn-border-width: $border-width !default;\n\n// Buttons\n$btn-padding-y: .5rem !default;\n$btn-padding-x: 1rem !default;\n//$btn-line-height: $input-btn-line-height !default;\n\n//$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n//$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n//$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n//$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n//$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n//$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n//$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-semibold;\n$btn-box-shadow: none;\n//$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: none;\n//$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: none;\n\n//$btn-link-disabled-color: $gray-600 !default;\n\n//$btn-block-spacing-y: .5rem !default;\n\n$btn-border-radius: 4px;\n//$btn-border-radius-lg: $border-radius-lg !default;\n//$btn-border-radius-sm: $border-radius-sm !default;\n\n//$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n// Forms\n$input-padding-y: .375rem;\n$input-padding-x: .4375rem;\n//$input-line-height: $input-btn-line-height !default;\n\n//$input-padding-y-sm: $input-btn-padding-y-sm !default;\n//$input-padding-x-sm: $input-btn-padding-x-sm !default;\n//$input-line-height-sm: $input-btn-line-height-sm !default;\n\n//$input-padding-y-lg: $input-btn-padding-y-lg !default;\n//$input-padding-x-lg: $input-btn-padding-x-lg !default;\n//$input-line-height-lg: $input-btn-line-height-lg !default;\n\n//$input-bg: $white !default;\n$input-disabled-bg: #eceeef;\n\n$input-color: $body-color;\n$input-border-color: $light-gray;\n//$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: none;\n\n//$input-border-radius: $border-radius !default;\n//$input-border-radius-lg: $border-radius-lg !default;\n//$input-border-radius-sm: $border-radius-sm !default;\n\n//$input-focus-bg: $input-bg !default;\n$input-focus-border-color: theme-color-hover("primary");\n//$input-focus-color: $input-color !default;\n//$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: none;\n\n$input-placeholder-color: $medium-gray;\n\n//$input-height-border: $input-border-width * 2 !default;\n\n//$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: 2.188rem;\n\n//$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n//$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n//$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: 2.188rem;\n\n//$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n//$form-text-margin-top: .25rem !default;\n\n//$form-check-input-gutter: 1.25rem !default;\n//$form-check-input-margin-y: .3rem !default;\n//$form-check-input-margin-x: .25rem !default;\n\n//$form-check-inline-margin-x: .75rem !default;\n//$form-check-inline-input-margin-x: .3125rem !default;\n\n//$form-group-margin-bottom: 1rem !default;\n\n//$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $extra-light-gray;\n//$input-group-addon-border-color: $input-border-color !default;\n\n//$custom-control-gutter: 1.5rem !default;\n//$custom-control-spacer-x: 1rem !default;\n\n//$custom-control-indicator-size: 1rem !default;\n//$custom-control-indicator-bg: $gray-300 !default;\n//$custom-control-indicator-bg-size: 50% 50% !default;\n//$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n//$custom-control-indicator-disabled-bg: $gray-200 !default;\n//$custom-control-label-disabled-color: $gray-600 !default;\n\n//$custom-control-indicator-checked-color: $component-active-color !default;\n//$custom-control-indicator-checked-bg: $component-active-bg !default;\n//$custom-control-indicator-checked-disabled-bg: rgba(theme-color("primary"), .5) !default;\n//$custom-control-indicator-checked-box-shadow: none !default;\n\n//$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n//$custom-control-indicator-active-color: $component-active-color !default;\n//$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n//$custom-control-indicator-active-box-shadow: none !default;\n\n//$custom-checkbox-indicator-border-radius: $border-radius !default;\n//$custom-checkbox-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 8 8\'%3E%3Cpath fill=\'#{$custom-control-indicator-checked-color}\' d=\'M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n//$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n//$custom-checkbox-indicator-icon-indeterminate: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 4\'%3E%3Cpath stroke=\'#{$custom-checkbox-indicator-indeterminate-color}\' d=\'M0 2h4\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n//$custom-radio-indicator-border-radius: 50% !default;\n//$custom-radio-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'-4 -4 8 8\'%3E%3Ccircle r=\'3\' fill=\'#{$custom-control-indicator-checked-color}\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$custom-select-padding-y: .375rem !default;\n//$custom-select-padding-x: .75rem !default;\n//$custom-select-height: $input-height !default;\n//$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n//$custom-select-line-height: $input-btn-line-height !default;\n//$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $medium-gray;\n//$custom-select-bg: $white !default;\n$custom-select-disabled-bg: $input-disabled-bg;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $input-color;\n//$custom-select-indicator: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 5\'%3E%3Cpath fill=\'#{$custom-select-indicator-color}\' d=\'M2 0L0 2h4zm0 5L0 3h4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$custom-select-border-width: $input-btn-border-width !default;\n//$custom-select-border-color: $input-border-color !default;\n//$custom-select-border-radius: $border-radius !default;\n\n$custom-select-focus-border-color: $input-focus-border-color;\n$custom-select-focus-box-shadow: $input-focus-box-shadow;\n\n//$custom-select-font-size-sm: 75% !default;\n//$custom-select-height-sm: $input-height-sm !default;\n\n//$custom-select-font-size-lg: 125% !default;\n//$custom-select-height-lg: $input-height-lg !default;\n\n//$custom-file-height: $input-height !default;\n//$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow;\n\n//$custom-file-padding-y: $input-btn-padding-y !default;\n//$custom-file-padding-x: $input-btn-padding-x !default;\n//$custom-file-line-height: $input-btn-line-height !default;\n//$custom-file-color: $input-color !default;\n//$custom-file-bg: $input-bg !default;\n//$custom-file-border-width: $input-btn-border-width !default;\n//$custom-file-border-color: $input-border-color !default;\n//$custom-file-border-radius: $input-border-radius !default;\n//$custom-file-box-shadow: $input-box-shadow !default;\n//$custom-file-button-color: $custom-file-color !default;\n//$custom-file-button-bg: $input-group-addon-bg !default;\n//$custom-file-text: (\n// en: "Browse"\n//) !default;\n\n$cursor-disabled: not-allowed; // PS custom\n\n// Form validation\n//$form-feedback-margin-top: $form-text-margin-top !default;\n//$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color("success");\n$form-feedback-invalid-color: theme-color("danger");\n$form-feedback-warning-color: theme-color("warning"); // PS custom\n\n// Dropdowns\n//$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: 0;\n//$dropdown-padding-y: .5rem !default;\n//$dropdown-spacer: .125rem !default;\n//$dropdown-bg: $white !default;\n$dropdown-border-color: $light-gray;\n//$dropdown-border-radius: $border-radius !default;\n//$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $light-gray;\n//$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $medium-gray;\n$dropdown-link-hover-color: theme-color("primary");\n$dropdown-link-hover-bg: $white;\n\n//$dropdown-link-active-color: $component-active-color !default;\n//$dropdown-link-active-bg: $component-active-bg !default;\n\n//$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-x: .3125rem;\n$dropdown-item-padding-y: .3125rem;\n\n//$dropdown-header-color: $gray-600 !default;\n\n// Navs\n$nav-link-padding-y: .9375rem;\n$nav-link-padding-x: 1.25rem;\n$nav-link-disabled-color: $light-gray;\n\n$nav-tabs-border-color: $white;\n//$nav-tabs-border-width: $border-width !default;\n//$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: theme-color("primary");\n$nav-tabs-link-active-color: $body-color;\n$nav-tabs-link-active-bg: $body-bg;\n$nav-tabs-link-active-border-color: theme-color("primary");\n\n$nav-pills-link-hover-border-color: $nav-tabs-link-hover-border-color;\n$nav-pills-link-active-color: $nav-tabs-link-active-color;\n$nav-pills-link-active-bg: #f4f9fb;\n$nav-pills-link-active-border-color: $nav-tabs-link-active-border-color; // PS custom\n\n//$nav-pills-border-radius: $border-radius !default;\n//$nav-pills-link-active-color: $component-active-color !default;\n//$nav-pills-link-active-bg: $component-active-bg !default;\n\n// Navbar\n//$navbar-padding-y: ($spacer / 2) !default;\n//$navbar-padding-x: $spacer !default;\n\n//$navbar-nav-link-padding-x: .5rem !default;\n\n//$navbar-brand-font-size: $font-size-lg !default;\n\n//$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n//$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n//$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n//$navbar-toggler-padding-y: .25rem !default;\n//$navbar-toggler-padding-x: .75rem !default;\n//$navbar-toggler-font-size: $font-size-lg !default;\n//$navbar-toggler-border-radius: $btn-border-radius !default;\n\n//$navbar-dark-color: rgba($white, .5) !default;\n//$navbar-dark-hover-color: rgba($white, .75) !default;\n//$navbar-dark-active-color: $white !default;\n//$navbar-dark-disabled-color: rgba($white, .25) !default;\n//$navbar-dark-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-dark-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n//$navbar-light-color: rgba($black, .5) !default;\n//$navbar-light-hover-color: rgba($black, .7) !default;\n//$navbar-light-active-color: rgba($black, .9) !default;\n//$navbar-light-disabled-color: rgba($black, .3) !default;\n//$navbar-light-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-light-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n// Pagination\n$pagination-padding-y: .65rem;\n$pagination-padding-x: .5rem;\n//$pagination-padding-y-sm: .25rem !default;\n//$pagination-padding-x-sm: .5rem !default;\n//$pagination-padding-y-lg: .75rem !default;\n//$pagination-padding-x-lg: 1.5rem !default;\n//$pagination-line-height: 1.25 !default;\n\n$pagination-color: $medium-gray;\n$pagination-bg: $white;\n//$pagination-border-width: $border-width !default;\n$pagination-border-color: $white;\n\n//$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$pagination-hover-color: $pagination-color;\n$pagination-hover-bg: $pagination-bg;\n$pagination-hover-border-color: $pagination-border-color;\n\n$pagination-active-color: theme-color("primary");\n$pagination-active-bg: $pagination-bg;\n$pagination-active-border-color: $pagination-border-color;\n\n$pagination-disabled-color: $light-gray;\n$pagination-disabled-bg: $pagination-bg;\n$pagination-disabled-border-color: $pagination-border-color;\n\n// Jumbotron\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $extra-light-gray;\n\n// Cards\n$card-spacer-x: .625rem !default;\n$card-spacer-y: .625rem !default;\n$card-border-width: 1px !default;\n$card-border-radius: 5px !default;\n$card-border-radius-inner: $card-border-radius !default;\n$card-cap-bg: $gray-200 !default;\n$card-bg: #fff !default;\n$card-link-hover-color: #fff !default;\n$card-border-color: #dbe6e9 !default;\n//$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n//$card-cap-bg: rgba($black, .03) !default;\n//$card-bg: $white !default;\n\n//$card-img-overlay-padding: 1.25rem !default;\n\n//$card-group-margin: ($grid-gutter-width / 2) !default;\n//$card-deck-margin: $card-group-margin !default;\n\n//$card-columns-count: 3 !default;\n//$card-columns-gap: 1.25rem !default;\n//$card-columns-margin: $card-spacer-y !default;\n\n// Tooltips\n//$tooltip-font-size: $font-size-sm !default;\n//$tooltip-max-width: 200px !default;\n//$tooltip-color: $white !default;\n$tooltip-bg: $medium-gray;\n//$tooltip-border-radius: $border-radius !default;\n//$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .625rem;\n$tooltip-padding-x: 1.25rem;\n//$tooltip-margin: 0 !default;\n\n//$tooltip-arrow-width: .8rem !default;\n//$tooltip-arrow-height: .4rem !default;\n//$tooltip-arrow-color: $tooltip-bg !default;\n\n// Popovers\n//$popover-font-size: $font-size-sm !default;\n//$popover-bg: $white !default;\n//$popover-max-width: 276px !default;\n//$popover-border-width: $border-width !default;\n$popover-border-color: $light-gray;\n//$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: none;\n\n$popover-header-bg: $extra-light-gray;\n//$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .625rem;\n$popover-header-padding-x: 1.25rem;\n\n//$popover-body-color: $body-color !default;\n$popover-body-padding-y: .625rem;\n$popover-body-padding-x: 1.25rem;\n\n//$popover-arrow-width: 1rem !default;\n//$popover-arrow-height: .5rem !default;\n//$popover-arrow-color: $popover-bg !default;\n\n//$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n// Badges\n$badge-font-size: .625rem !default;\n$badge-font-weight: 500 !default;\n$badge-padding-y: .25rem;\n$badge-padding-x: .5rem;\n//$badge-border-radius: $border-radius !default;\n\n//$badge-pill-padding-x: .6em !default;\n//$badge-pill-border-radius: 10rem !default;\n\n// Modals\n$modal-inner-padding: 1.875rem;\n\n//$modal-dialog-margin: .5rem !default;\n//$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n//$modal-title-line-height: $line-height-base !default;\n\n//$modal-content-bg: $white !default;\n$modal-content-border-color: none;\n//$modal-content-border-width: $border-width !default;\n$modal-content-box-shadow-xs: 0 8px 16px 0 rgba(0, 0, 0, .1);\n$modal-content-box-shadow-sm-up: 0 8px 16px 0 rgba(0, 0, 0, .1);\n\n//$modal-backdrop-bg: $black !default;\n//$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: none;\n//$modal-footer-border-color: $modal-header-border-color !default;\n//$modal-header-border-width: $modal-content-border-width !default;\n//$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: $modal-inner-padding;\n\n$modal-lg: 900px;\n$modal-md: 680px;\n$modal-sm: 400px;\n\n//$modal-transition: transform .3s ease-out !default;\n\n// Alerts\n$alert-padding-y: 1rem !default;\n$alert-padding-x: 1rem;\n//$alert-margin-bottom: 1rem !default;\n//$alert-border-radius: $border-radius !default;\n//$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: .125rem;\n\n//$alert-bg-level: -10 !default;\n//$alert-border-level: -9 !default;\n//$alert-color-level: 6 !default;\n\n// Progress bars\n//$progress-height: 1rem !default;\n//$progress-font-size: ($font-size-base * .75) !default;\n//$progress-bg: $gray-200 !default;\n//$progress-border-radius: $border-radius !default;\n//$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n//$progress-bar-color: $white !default;\n//$progress-bar-bg: theme-color("primary") !default;\n//$progress-bar-animation-timing: 1s linear infinite !default;\n//$progress-bar-transition: width .6s ease !default;\n\n// List group\n//$list-group-bg: $white !default;\n$list-group-border-color: $light-gray;\n//$list-group-border-width: $border-width !default;\n//$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $input-padding-y;\n$list-group-item-padding-x: $input-padding-x;\n\n$list-group-hover-bg: theme-color-hover("primary");\n//$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: theme-color-hover("primary");\n//$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $light-gray;\n//$list-group-disabled-bg: $list-group-bg !default;\n\n//$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $white;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n// Image thumbnails\n$thumbnail-padding: 0;\n//$thumbnail-bg: $body-bg !default;\n//$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $light-gray;\n//$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: none;\n\n// Figures\n//$figure-caption-font-size: 90% !default;\n$figure-caption-color: $medium-gray;\n\n// Breadcrumbs\n$breadcrumb-padding-y: .3125rem;\n$breadcrumb-padding-x: .3125rem;\n$breadcrumb-item-padding: .3rem;\n\n$breadcrumb-margin-bottom: 0;\n\n$breadcrumb-bg: none;\n$breadcrumb-divider-color: $dark-gray;\n$breadcrumb-active-color: $extra-dark-gray;\n$breadcrumb-divider: "/";\n\n// Carousel\n//$carousel-control-color: $white !default;\n//$carousel-control-width: 15% !default;\n//$carousel-control-opacity: .5 !default;\n\n//$carousel-indicator-width: 30px !default;\n//$carousel-indicator-height: 3px !default;\n//$carousel-indicator-spacer: 3px !default;\n//$carousel-indicator-active-bg: $white !default;\n\n//$carousel-caption-width: 70% !default;\n//$carousel-caption-color: $white !default;\n\n//$carousel-control-icon-width: 20px !default;\n\n//$carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$carousel-transition: transform .6s ease !default;\n\n// Close\n//$close-font-size: $font-size-base * 1.5 !default;\n//$close-font-weight: $font-weight-bold !default;\n//$close-color: $black !default;\n//$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n//$code-font-size: 87.5% !default;\n$code-color: $body-color;\n\n//$kbd-padding-y: .2rem !default;\n//$kbd-padding-x: .4rem !default;\n//$kbd-font-size: $code-font-size !default;\n$kbd-color: $white;\n$kbd-bg: $extra-dark-gray;\n\n$pre-color: $body-color;\n//$pre-scrollable-max-height: 340px !default;\n\n// Printing\n//$print-page-size: a3 !default;\n//$print-body-min-width: map-get($grid-breakpoints, "lg") !default;\n'],sourceRoot:""}]);const l=a},25436:(t,n,e)=>{"use strict";e.r(n),e.d(n,{default:()=>l});var r=e(94015),i=e.n(r),o=e(23645),a=e.n(o)()(i());a.push([t.id,'.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#25b9d7 !important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#1e94ab !important}.bg-secondary{background-color:#6c868e !important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#566b71 !important}.bg-success{background-color:#70b580 !important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#539f64 !important}.bg-info{background-color:#25b9d7 !important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#1e94ab !important}.bg-warning{background-color:#fab000 !important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#c78c00 !important}.bg-danger{background-color:#f54c3e !important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#f21f0e !important}.bg-light{background-color:#fafbfc !important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#dae2e9 !important}.bg-dark{background-color:#363a41 !important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#1f2125 !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #bbcdd2 !important}.border-top{border-top:1px solid #bbcdd2 !important}.border-right{border-right:1px solid #bbcdd2 !important}.border-bottom{border-bottom:1px solid #bbcdd2 !important}.border-left{border-left:1px solid #bbcdd2 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#25b9d7 !important}.border-secondary{border-color:#6c868e !important}.border-success{border-color:#70b580 !important}.border-info{border-color:#25b9d7 !important}.border-warning{border-color:#fab000 !important}.border-danger{border-color:#f54c3e !important}.border-light{border-color:#fafbfc !important}.border-dark{border-color:#363a41 !important}.border-white{border-color:#fff !important}.rounded{border-radius:4px !important}.rounded-top{border-top-left-radius:4px !important;border-top-right-radius:4px !important}.rounded-right{border-top-right-radius:4px !important;border-bottom-right-radius:4px !important}.rounded-bottom{border-bottom-right-radius:4px !important;border-bottom-left-radius:4px !important}.rounded-left{border-top-left-radius:4px !important;border-bottom-left-radius:4px !important}.rounded-circle{border-radius:50% !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}@media (min-width: 544px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}}@media (min-width: 768px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}}@media (min-width: 1024px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}}@media (min-width: 1300px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}}@media (min-width: 1600px){.d-xxl-none{display:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.85714%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}@media (min-width: 544px){.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}}@media (min-width: 768px){.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}}@media (min-width: 1024px){.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}}@media (min-width: 1300px){.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}}@media (min-width: 1600px){.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 544px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 768px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 1024px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 1300px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}@media (min-width: 1600px){.float-xxl-left{float:left !important}.float-xxl-right{float:right !important}.float-xxl-none{float:none !important}}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position: sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;clip-path:none}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.3125rem !important}.mt-1,.my-1{margin-top:.3125rem !important}.mr-1,.mx-1{margin-right:.3125rem !important}.mb-1,.my-1{margin-bottom:.3125rem !important}.ml-1,.mx-1{margin-left:.3125rem !important}.m-2{margin:.625rem !important}.mt-2,.my-2{margin-top:.625rem !important}.mr-2,.mx-2{margin-right:.625rem !important}.mb-2,.my-2{margin-bottom:.625rem !important}.ml-2,.mx-2{margin-left:.625rem !important}.m-3{margin:.9375rem !important}.mt-3,.my-3{margin-top:.9375rem !important}.mr-3,.mx-3{margin-right:.9375rem !important}.mb-3,.my-3{margin-bottom:.9375rem !important}.ml-3,.mx-3{margin-left:.9375rem !important}.m-4{margin:1.875rem !important}.mt-4,.my-4{margin-top:1.875rem !important}.mr-4,.mx-4{margin-right:1.875rem !important}.mb-4,.my-4{margin-bottom:1.875rem !important}.ml-4,.mx-4{margin-left:1.875rem !important}.m-5{margin:3.75rem !important}.mt-5,.my-5{margin-top:3.75rem !important}.mr-5,.mx-5{margin-right:3.75rem !important}.mb-5,.my-5{margin-bottom:3.75rem !important}.ml-5,.mx-5{margin-left:3.75rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.3125rem !important}.pt-1,.py-1{padding-top:.3125rem !important}.pr-1,.px-1{padding-right:.3125rem !important}.pb-1,.py-1{padding-bottom:.3125rem !important}.pl-1,.px-1{padding-left:.3125rem !important}.p-2{padding:.625rem !important}.pt-2,.py-2{padding-top:.625rem !important}.pr-2,.px-2{padding-right:.625rem !important}.pb-2,.py-2{padding-bottom:.625rem !important}.pl-2,.px-2{padding-left:.625rem !important}.p-3{padding:.9375rem !important}.pt-3,.py-3{padding-top:.9375rem !important}.pr-3,.px-3{padding-right:.9375rem !important}.pb-3,.py-3{padding-bottom:.9375rem !important}.pl-3,.px-3{padding-left:.9375rem !important}.p-4{padding:1.875rem !important}.pt-4,.py-4{padding-top:1.875rem !important}.pr-4,.px-4{padding-right:1.875rem !important}.pb-4,.py-4{padding-bottom:1.875rem !important}.pl-4,.px-4{padding-left:1.875rem !important}.p-5{padding:3.75rem !important}.pt-5,.py-5{padding-top:3.75rem !important}.pr-5,.px-5{padding-right:3.75rem !important}.pb-5,.py-5{padding-bottom:3.75rem !important}.pl-5,.px-5{padding-left:3.75rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media (min-width: 544px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:.3125rem !important}.mt-sm-1,.my-sm-1{margin-top:.3125rem !important}.mr-sm-1,.mx-sm-1{margin-right:.3125rem !important}.mb-sm-1,.my-sm-1{margin-bottom:.3125rem !important}.ml-sm-1,.mx-sm-1{margin-left:.3125rem !important}.m-sm-2{margin:.625rem !important}.mt-sm-2,.my-sm-2{margin-top:.625rem !important}.mr-sm-2,.mx-sm-2{margin-right:.625rem !important}.mb-sm-2,.my-sm-2{margin-bottom:.625rem !important}.ml-sm-2,.mx-sm-2{margin-left:.625rem !important}.m-sm-3{margin:.9375rem !important}.mt-sm-3,.my-sm-3{margin-top:.9375rem !important}.mr-sm-3,.mx-sm-3{margin-right:.9375rem !important}.mb-sm-3,.my-sm-3{margin-bottom:.9375rem !important}.ml-sm-3,.mx-sm-3{margin-left:.9375rem !important}.m-sm-4{margin:1.875rem !important}.mt-sm-4,.my-sm-4{margin-top:1.875rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.875rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.875rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.875rem !important}.m-sm-5{margin:3.75rem !important}.mt-sm-5,.my-sm-5{margin-top:3.75rem !important}.mr-sm-5,.mx-sm-5{margin-right:3.75rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3.75rem !important}.ml-sm-5,.mx-sm-5{margin-left:3.75rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:.3125rem !important}.pt-sm-1,.py-sm-1{padding-top:.3125rem !important}.pr-sm-1,.px-sm-1{padding-right:.3125rem !important}.pb-sm-1,.py-sm-1{padding-bottom:.3125rem !important}.pl-sm-1,.px-sm-1{padding-left:.3125rem !important}.p-sm-2{padding:.625rem !important}.pt-sm-2,.py-sm-2{padding-top:.625rem !important}.pr-sm-2,.px-sm-2{padding-right:.625rem !important}.pb-sm-2,.py-sm-2{padding-bottom:.625rem !important}.pl-sm-2,.px-sm-2{padding-left:.625rem !important}.p-sm-3{padding:.9375rem !important}.pt-sm-3,.py-sm-3{padding-top:.9375rem !important}.pr-sm-3,.px-sm-3{padding-right:.9375rem !important}.pb-sm-3,.py-sm-3{padding-bottom:.9375rem !important}.pl-sm-3,.px-sm-3{padding-left:.9375rem !important}.p-sm-4{padding:1.875rem !important}.pt-sm-4,.py-sm-4{padding-top:1.875rem !important}.pr-sm-4,.px-sm-4{padding-right:1.875rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.875rem !important}.pl-sm-4,.px-sm-4{padding-left:1.875rem !important}.p-sm-5{padding:3.75rem !important}.pt-sm-5,.py-sm-5{padding-top:3.75rem !important}.pr-sm-5,.px-sm-5{padding-right:3.75rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3.75rem !important}.pl-sm-5,.px-sm-5{padding-left:3.75rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media (min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:.3125rem !important}.mt-md-1,.my-md-1{margin-top:.3125rem !important}.mr-md-1,.mx-md-1{margin-right:.3125rem !important}.mb-md-1,.my-md-1{margin-bottom:.3125rem !important}.ml-md-1,.mx-md-1{margin-left:.3125rem !important}.m-md-2{margin:.625rem !important}.mt-md-2,.my-md-2{margin-top:.625rem !important}.mr-md-2,.mx-md-2{margin-right:.625rem !important}.mb-md-2,.my-md-2{margin-bottom:.625rem !important}.ml-md-2,.mx-md-2{margin-left:.625rem !important}.m-md-3{margin:.9375rem !important}.mt-md-3,.my-md-3{margin-top:.9375rem !important}.mr-md-3,.mx-md-3{margin-right:.9375rem !important}.mb-md-3,.my-md-3{margin-bottom:.9375rem !important}.ml-md-3,.mx-md-3{margin-left:.9375rem !important}.m-md-4{margin:1.875rem !important}.mt-md-4,.my-md-4{margin-top:1.875rem !important}.mr-md-4,.mx-md-4{margin-right:1.875rem !important}.mb-md-4,.my-md-4{margin-bottom:1.875rem !important}.ml-md-4,.mx-md-4{margin-left:1.875rem !important}.m-md-5{margin:3.75rem !important}.mt-md-5,.my-md-5{margin-top:3.75rem !important}.mr-md-5,.mx-md-5{margin-right:3.75rem !important}.mb-md-5,.my-md-5{margin-bottom:3.75rem !important}.ml-md-5,.mx-md-5{margin-left:3.75rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:.3125rem !important}.pt-md-1,.py-md-1{padding-top:.3125rem !important}.pr-md-1,.px-md-1{padding-right:.3125rem !important}.pb-md-1,.py-md-1{padding-bottom:.3125rem !important}.pl-md-1,.px-md-1{padding-left:.3125rem !important}.p-md-2{padding:.625rem !important}.pt-md-2,.py-md-2{padding-top:.625rem !important}.pr-md-2,.px-md-2{padding-right:.625rem !important}.pb-md-2,.py-md-2{padding-bottom:.625rem !important}.pl-md-2,.px-md-2{padding-left:.625rem !important}.p-md-3{padding:.9375rem !important}.pt-md-3,.py-md-3{padding-top:.9375rem !important}.pr-md-3,.px-md-3{padding-right:.9375rem !important}.pb-md-3,.py-md-3{padding-bottom:.9375rem !important}.pl-md-3,.px-md-3{padding-left:.9375rem !important}.p-md-4{padding:1.875rem !important}.pt-md-4,.py-md-4{padding-top:1.875rem !important}.pr-md-4,.px-md-4{padding-right:1.875rem !important}.pb-md-4,.py-md-4{padding-bottom:1.875rem !important}.pl-md-4,.px-md-4{padding-left:1.875rem !important}.p-md-5{padding:3.75rem !important}.pt-md-5,.py-md-5{padding-top:3.75rem !important}.pr-md-5,.px-md-5{padding-right:3.75rem !important}.pb-md-5,.py-md-5{padding-bottom:3.75rem !important}.pl-md-5,.px-md-5{padding-left:3.75rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media (min-width: 1024px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:.3125rem !important}.mt-lg-1,.my-lg-1{margin-top:.3125rem !important}.mr-lg-1,.mx-lg-1{margin-right:.3125rem !important}.mb-lg-1,.my-lg-1{margin-bottom:.3125rem !important}.ml-lg-1,.mx-lg-1{margin-left:.3125rem !important}.m-lg-2{margin:.625rem !important}.mt-lg-2,.my-lg-2{margin-top:.625rem !important}.mr-lg-2,.mx-lg-2{margin-right:.625rem !important}.mb-lg-2,.my-lg-2{margin-bottom:.625rem !important}.ml-lg-2,.mx-lg-2{margin-left:.625rem !important}.m-lg-3{margin:.9375rem !important}.mt-lg-3,.my-lg-3{margin-top:.9375rem !important}.mr-lg-3,.mx-lg-3{margin-right:.9375rem !important}.mb-lg-3,.my-lg-3{margin-bottom:.9375rem !important}.ml-lg-3,.mx-lg-3{margin-left:.9375rem !important}.m-lg-4{margin:1.875rem !important}.mt-lg-4,.my-lg-4{margin-top:1.875rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.875rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.875rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.875rem !important}.m-lg-5{margin:3.75rem !important}.mt-lg-5,.my-lg-5{margin-top:3.75rem !important}.mr-lg-5,.mx-lg-5{margin-right:3.75rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3.75rem !important}.ml-lg-5,.mx-lg-5{margin-left:3.75rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:.3125rem !important}.pt-lg-1,.py-lg-1{padding-top:.3125rem !important}.pr-lg-1,.px-lg-1{padding-right:.3125rem !important}.pb-lg-1,.py-lg-1{padding-bottom:.3125rem !important}.pl-lg-1,.px-lg-1{padding-left:.3125rem !important}.p-lg-2{padding:.625rem !important}.pt-lg-2,.py-lg-2{padding-top:.625rem !important}.pr-lg-2,.px-lg-2{padding-right:.625rem !important}.pb-lg-2,.py-lg-2{padding-bottom:.625rem !important}.pl-lg-2,.px-lg-2{padding-left:.625rem !important}.p-lg-3{padding:.9375rem !important}.pt-lg-3,.py-lg-3{padding-top:.9375rem !important}.pr-lg-3,.px-lg-3{padding-right:.9375rem !important}.pb-lg-3,.py-lg-3{padding-bottom:.9375rem !important}.pl-lg-3,.px-lg-3{padding-left:.9375rem !important}.p-lg-4{padding:1.875rem !important}.pt-lg-4,.py-lg-4{padding-top:1.875rem !important}.pr-lg-4,.px-lg-4{padding-right:1.875rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.875rem !important}.pl-lg-4,.px-lg-4{padding-left:1.875rem !important}.p-lg-5{padding:3.75rem !important}.pt-lg-5,.py-lg-5{padding-top:3.75rem !important}.pr-lg-5,.px-lg-5{padding-right:3.75rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3.75rem !important}.pl-lg-5,.px-lg-5{padding-left:3.75rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media (min-width: 1300px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:.3125rem !important}.mt-xl-1,.my-xl-1{margin-top:.3125rem !important}.mr-xl-1,.mx-xl-1{margin-right:.3125rem !important}.mb-xl-1,.my-xl-1{margin-bottom:.3125rem !important}.ml-xl-1,.mx-xl-1{margin-left:.3125rem !important}.m-xl-2{margin:.625rem !important}.mt-xl-2,.my-xl-2{margin-top:.625rem !important}.mr-xl-2,.mx-xl-2{margin-right:.625rem !important}.mb-xl-2,.my-xl-2{margin-bottom:.625rem !important}.ml-xl-2,.mx-xl-2{margin-left:.625rem !important}.m-xl-3{margin:.9375rem !important}.mt-xl-3,.my-xl-3{margin-top:.9375rem !important}.mr-xl-3,.mx-xl-3{margin-right:.9375rem !important}.mb-xl-3,.my-xl-3{margin-bottom:.9375rem !important}.ml-xl-3,.mx-xl-3{margin-left:.9375rem !important}.m-xl-4{margin:1.875rem !important}.mt-xl-4,.my-xl-4{margin-top:1.875rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.875rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.875rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.875rem !important}.m-xl-5{margin:3.75rem !important}.mt-xl-5,.my-xl-5{margin-top:3.75rem !important}.mr-xl-5,.mx-xl-5{margin-right:3.75rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3.75rem !important}.ml-xl-5,.mx-xl-5{margin-left:3.75rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:.3125rem !important}.pt-xl-1,.py-xl-1{padding-top:.3125rem !important}.pr-xl-1,.px-xl-1{padding-right:.3125rem !important}.pb-xl-1,.py-xl-1{padding-bottom:.3125rem !important}.pl-xl-1,.px-xl-1{padding-left:.3125rem !important}.p-xl-2{padding:.625rem !important}.pt-xl-2,.py-xl-2{padding-top:.625rem !important}.pr-xl-2,.px-xl-2{padding-right:.625rem !important}.pb-xl-2,.py-xl-2{padding-bottom:.625rem !important}.pl-xl-2,.px-xl-2{padding-left:.625rem !important}.p-xl-3{padding:.9375rem !important}.pt-xl-3,.py-xl-3{padding-top:.9375rem !important}.pr-xl-3,.px-xl-3{padding-right:.9375rem !important}.pb-xl-3,.py-xl-3{padding-bottom:.9375rem !important}.pl-xl-3,.px-xl-3{padding-left:.9375rem !important}.p-xl-4{padding:1.875rem !important}.pt-xl-4,.py-xl-4{padding-top:1.875rem !important}.pr-xl-4,.px-xl-4{padding-right:1.875rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.875rem !important}.pl-xl-4,.px-xl-4{padding-left:1.875rem !important}.p-xl-5{padding:3.75rem !important}.pt-xl-5,.py-xl-5{padding-top:3.75rem !important}.pr-xl-5,.px-xl-5{padding-right:3.75rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3.75rem !important}.pl-xl-5,.px-xl-5{padding-left:3.75rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}@media (min-width: 1600px){.m-xxl-0{margin:0 !important}.mt-xxl-0,.my-xxl-0{margin-top:0 !important}.mr-xxl-0,.mx-xxl-0{margin-right:0 !important}.mb-xxl-0,.my-xxl-0{margin-bottom:0 !important}.ml-xxl-0,.mx-xxl-0{margin-left:0 !important}.m-xxl-1{margin:.3125rem !important}.mt-xxl-1,.my-xxl-1{margin-top:.3125rem !important}.mr-xxl-1,.mx-xxl-1{margin-right:.3125rem !important}.mb-xxl-1,.my-xxl-1{margin-bottom:.3125rem !important}.ml-xxl-1,.mx-xxl-1{margin-left:.3125rem !important}.m-xxl-2{margin:.625rem !important}.mt-xxl-2,.my-xxl-2{margin-top:.625rem !important}.mr-xxl-2,.mx-xxl-2{margin-right:.625rem !important}.mb-xxl-2,.my-xxl-2{margin-bottom:.625rem !important}.ml-xxl-2,.mx-xxl-2{margin-left:.625rem !important}.m-xxl-3{margin:.9375rem !important}.mt-xxl-3,.my-xxl-3{margin-top:.9375rem !important}.mr-xxl-3,.mx-xxl-3{margin-right:.9375rem !important}.mb-xxl-3,.my-xxl-3{margin-bottom:.9375rem !important}.ml-xxl-3,.mx-xxl-3{margin-left:.9375rem !important}.m-xxl-4{margin:1.875rem !important}.mt-xxl-4,.my-xxl-4{margin-top:1.875rem !important}.mr-xxl-4,.mx-xxl-4{margin-right:1.875rem !important}.mb-xxl-4,.my-xxl-4{margin-bottom:1.875rem !important}.ml-xxl-4,.mx-xxl-4{margin-left:1.875rem !important}.m-xxl-5{margin:3.75rem !important}.mt-xxl-5,.my-xxl-5{margin-top:3.75rem !important}.mr-xxl-5,.mx-xxl-5{margin-right:3.75rem !important}.mb-xxl-5,.my-xxl-5{margin-bottom:3.75rem !important}.ml-xxl-5,.mx-xxl-5{margin-left:3.75rem !important}.p-xxl-0{padding:0 !important}.pt-xxl-0,.py-xxl-0{padding-top:0 !important}.pr-xxl-0,.px-xxl-0{padding-right:0 !important}.pb-xxl-0,.py-xxl-0{padding-bottom:0 !important}.pl-xxl-0,.px-xxl-0{padding-left:0 !important}.p-xxl-1{padding:.3125rem !important}.pt-xxl-1,.py-xxl-1{padding-top:.3125rem !important}.pr-xxl-1,.px-xxl-1{padding-right:.3125rem !important}.pb-xxl-1,.py-xxl-1{padding-bottom:.3125rem !important}.pl-xxl-1,.px-xxl-1{padding-left:.3125rem !important}.p-xxl-2{padding:.625rem !important}.pt-xxl-2,.py-xxl-2{padding-top:.625rem !important}.pr-xxl-2,.px-xxl-2{padding-right:.625rem !important}.pb-xxl-2,.py-xxl-2{padding-bottom:.625rem !important}.pl-xxl-2,.px-xxl-2{padding-left:.625rem !important}.p-xxl-3{padding:.9375rem !important}.pt-xxl-3,.py-xxl-3{padding-top:.9375rem !important}.pr-xxl-3,.px-xxl-3{padding-right:.9375rem !important}.pb-xxl-3,.py-xxl-3{padding-bottom:.9375rem !important}.pl-xxl-3,.px-xxl-3{padding-left:.9375rem !important}.p-xxl-4{padding:1.875rem !important}.pt-xxl-4,.py-xxl-4{padding-top:1.875rem !important}.pr-xxl-4,.px-xxl-4{padding-right:1.875rem !important}.pb-xxl-4,.py-xxl-4{padding-bottom:1.875rem !important}.pl-xxl-4,.px-xxl-4{padding-left:1.875rem !important}.p-xxl-5{padding:3.75rem !important}.pt-xxl-5,.py-xxl-5{padding-top:3.75rem !important}.pr-xxl-5,.px-xxl-5{padding-right:3.75rem !important}.pb-xxl-5,.py-xxl-5{padding-bottom:3.75rem !important}.pl-xxl-5,.px-xxl-5{padding-left:3.75rem !important}.m-xxl-auto{margin:auto !important}.mt-xxl-auto,.my-xxl-auto{margin-top:auto !important}.mr-xxl-auto,.mx-xxl-auto{margin-right:auto !important}.mb-xxl-auto,.my-xxl-auto{margin-bottom:auto !important}.ml-xxl-auto,.mx-xxl-auto{margin-left:auto !important}}.text-justify{text-align:justify !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 544px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 1024px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1300px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}@media (min-width: 1600px){.text-xxl-left{text-align:left !important}.text-xxl-right{text-align:right !important}.text-xxl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:700 !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#25b9d7 !important}a.text-primary:hover,a.text-primary:focus{color:#1e94ab !important}.text-secondary{color:#6c868e !important}a.text-secondary:hover,a.text-secondary:focus{color:#566b71 !important}.text-success{color:#70b580 !important}a.text-success:hover,a.text-success:focus{color:#539f64 !important}.text-info{color:#25b9d7 !important}a.text-info:hover,a.text-info:focus{color:#1e94ab !important}.text-warning{color:#fab000 !important}a.text-warning:hover,a.text-warning:focus{color:#c78c00 !important}.text-danger{color:#f54c3e !important}a.text-danger:hover,a.text-danger:focus{color:#f21f0e !important}.text-light{color:#fafbfc !important}a.text-light:hover,a.text-light:focus{color:#dae2e9 !important}.text-dark{color:#363a41 !important}a.text-dark:hover,a.text-dark:focus{color:#1f2125 !important}.text-muted{color:#6c868e !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.combinations-filters-dropdown{margin:0 0.35rem}@media (max-width: 543.98px){.combinations-filters-dropdown{margin-bottom:.5rem}}.combinations-filters-dropdown .dropdown-item{padding:0.438rem 0.938rem;padding-right:1rem;line-height:normal;color:inherit;border-bottom:0}.combinations-filters-dropdown .dropdown-item .md-checkbox-container{position:relative;padding-left:28px}\n',"",{version:3,sources:["webpack://./node_modules/bootstrap/scss/utilities/_align.scss","webpack://./node_modules/bootstrap/scss/mixins/_background-variant.scss","webpack://./node_modules/bootstrap/scss/mixins/_hover.scss","webpack://./node_modules/bootstrap/scss/utilities/_background.scss","webpack://./node_modules/bootstrap/scss/utilities/_borders.scss","webpack://./node_modules/bootstrap/scss/mixins/_clearfix.scss","webpack://./node_modules/bootstrap/scss/utilities/_display.scss","webpack://./node_modules/bootstrap/scss/mixins/_breakpoints.scss","webpack://./node_modules/bootstrap/scss/utilities/_embed.scss","webpack://./node_modules/bootstrap/scss/utilities/_flex.scss","webpack://./node_modules/bootstrap/scss/utilities/_float.scss","webpack://./node_modules/bootstrap/scss/mixins/_float.scss","webpack://./node_modules/bootstrap/scss/utilities/_position.scss","webpack://./node_modules/bootstrap/scss/_variables.scss","webpack://./node_modules/bootstrap/scss/utilities/_screenreaders.scss","webpack://./node_modules/bootstrap/scss/mixins/_screen-reader.scss","webpack://./node_modules/bootstrap/scss/utilities/_sizing.scss","webpack://./node_modules/bootstrap/scss/utilities/_spacing.scss","webpack://./node_modules/bootstrap/scss/utilities/_text.scss","webpack://./node_modules/bootstrap/scss/mixins/_text-truncate.scss","webpack://./node_modules/bootstrap/scss/mixins/_text-emphasis.scss","webpack://./node_modules/bootstrap/scss/mixins/_text-hide.scss","webpack://./node_modules/bootstrap/scss/mixins/_visibility.scss","webpack://./node_modules/bootstrap/scss/utilities/_visibility.scss","webpack://./js/pages/product/components/filters/FilterDropdown.vue"],names:[],mappings:"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",sourcesContent:["// stylelint-disable declaration-no-important\n\n.align-baseline { vertical-align: baseline !important; } // Browser default\n.align-top { vertical-align: top !important; }\n.align-middle { vertical-align: middle !important; }\n.align-bottom { vertical-align: bottom !important; }\n.align-text-bottom { vertical-align: text-bottom !important; }\n.align-text-top { vertical-align: text-top !important; }\n","// stylelint-disable declaration-no-important\n\n// Contextual backgrounds\n\n@mixin bg-variant($parent, $color) {\n #{$parent} {\n background-color: $color !important;\n }\n a#{$parent},\n button#{$parent} {\n @include hover-focus {\n background-color: darken($color, 10%) !important;\n }\n }\n}\n\n@mixin bg-gradient-variant($parent, $color) {\n #{$parent} {\n background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important;\n }\n}\n","// stylelint-disable indentation\n\n// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Origally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS—an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular psuedo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover {\n &:hover { @content; }\n}\n\n@mixin hover-focus {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n",'// stylelint-disable declaration-no-important\n\n@each $color, $value in $theme-colors {\n @include bg-variant(".bg-#{$color}", $value);\n}\n\n@if $enable-gradients {\n @each $color, $value in $theme-colors {\n @include bg-gradient-variant(".bg-gradient-#{$color}", $value);\n }\n}\n\n.bg-white {\n background-color: $white !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n',"// stylelint-disable declaration-no-important\n\n//\n// Border\n//\n\n.border { border: $border-width solid $border-color !important; }\n.border-top { border-top: $border-width solid $border-color !important; }\n.border-right { border-right: $border-width solid $border-color !important; }\n.border-bottom { border-bottom: $border-width solid $border-color !important; }\n.border-left { border-left: $border-width solid $border-color !important; }\n\n.border-0 { border: 0 !important; }\n.border-top-0 { border-top: 0 !important; }\n.border-right-0 { border-right: 0 !important; }\n.border-bottom-0 { border-bottom: 0 !important; }\n.border-left-0 { border-left: 0 !important; }\n\n@each $color, $value in $theme-colors {\n .border-#{$color} {\n border-color: $value !important;\n }\n}\n\n.border-white {\n border-color: $white !important;\n}\n\n//\n// Border-radius\n//\n\n.rounded {\n border-radius: $border-radius !important;\n}\n.rounded-top {\n border-top-left-radius: $border-radius !important;\n border-top-right-radius: $border-radius !important;\n}\n.rounded-right {\n border-top-right-radius: $border-radius !important;\n border-bottom-right-radius: $border-radius !important;\n}\n.rounded-bottom {\n border-bottom-right-radius: $border-radius !important;\n border-bottom-left-radius: $border-radius !important;\n}\n.rounded-left {\n border-top-left-radius: $border-radius !important;\n border-bottom-left-radius: $border-radius !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n",'@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: "";\n }\n}\n',"// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .d#{$infix}-none { display: none !important; }\n .d#{$infix}-inline { display: inline !important; }\n .d#{$infix}-inline-block { display: inline-block !important; }\n .d#{$infix}-block { display: block !important; }\n .d#{$infix}-table { display: table !important; }\n .d#{$infix}-table-row { display: table-row !important; }\n .d#{$infix}-table-cell { display: table-cell !important; }\n .d#{$infix}-flex { display: flex !important; }\n .d#{$infix}-inline-flex { display: inline-flex !important; }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n .d-print-none { display: none !important; }\n .d-print-inline { display: inline !important; }\n .d-print-inline-block { display: inline-block !important; }\n .d-print-block { display: block !important; }\n .d-print-table { display: table !important; }\n .d-print-table-row { display: table-row !important; }\n .d-print-table-cell { display: table-cell !important; }\n .d-print-flex { display: flex !important; }\n .d-print-inline-flex { display: inline-flex !important; }\n}\n",'// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02px, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash infront.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// "" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// "-sm"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, "", "-#{$name}");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint\'s minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n','// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n\n &::before {\n display: block;\n content: "";\n }\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n }\n}\n\n.embed-responsive-21by9 {\n &::before {\n padding-top: percentage(9 / 21);\n }\n}\n\n.embed-responsive-16by9 {\n &::before {\n padding-top: percentage(9 / 16);\n }\n}\n\n.embed-responsive-4by3 {\n &::before {\n padding-top: percentage(3 / 4);\n }\n}\n\n.embed-responsive-1by1 {\n &::before {\n padding-top: percentage(1 / 1);\n }\n}\n',"// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n","@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .float#{$infix}-left { @include float-left; }\n .float#{$infix}-right { @include float-right; }\n .float#{$infix}-none { @include float-none; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n@mixin float-left {\n float: left !important;\n}\n@mixin float-right {\n float: right !important;\n}\n@mixin float-none {\n float: none !important;\n}\n","// stylelint-disable declaration-no-important\n\n// Common values\n\n// Sass list not in variables since it's not intended for customization.\n$positions: static, relative, absolute, fixed, sticky;\n\n@each $position in $positions {\n .position-#{$position} { position: $position !important; }\n}\n\n// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.sticky-top {\n @supports (position: sticky) {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n}\n",'// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n\n//\n// Color system\n//\n\n// stylelint-disable\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n$grays: map-merge((\n "100": $gray-100,\n "200": $gray-200,\n "300": $gray-300,\n "400": $gray-400,\n "500": $gray-500,\n "600": $gray-600,\n "700": $gray-700,\n "800": $gray-800,\n "900": $gray-900\n), $grays);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n$colors: map-merge((\n "blue": $blue,\n "indigo": $indigo,\n "purple": $purple,\n "pink": $pink,\n "red": $red,\n "orange": $orange,\n "yellow": $yellow,\n "green": $green,\n "teal": $teal,\n "cyan": $cyan,\n "white": $white,\n "gray": $gray-600,\n "gray-dark": $gray-800\n), $colors);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n$theme-colors: map-merge((\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": $warning,\n "danger": $danger,\n "light": $light,\n "dark": $dark\n), $theme-colors);\n// stylelint-enable\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from "dark" to "light". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// stylelint-disable\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map-merge((\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n), $spacers);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n$sizes: map-merge((\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%\n), $sizes);\n// stylelint-enable\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color("primary") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, "$container-max-widths");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color("primary") !default;\n\n$caret-width: .3em !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n\n// Fonts\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: ($font-size-base * 1.25) !default;\n$font-size-sm: ($font-size-base * .875) !default;\n\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: inherit !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: inherit !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: ($font-size-base * 1.25) !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-bg: transparent !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $gray-300 !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-bg: $gray-900 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($gray-900, 7.5%) !default;\n$table-dark-color: $body-bg !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap\'s buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-line-height: $input-btn-line-height !default;\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default;\n\n$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-control-gutter: 1.5rem !default;\n$custom-control-spacer-x: 1rem !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $gray-300 !default;\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-control-indicator-disabled-bg: $gray-200 !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color("primary"), .5) !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n\n$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 8 8\'%3E%3Cpath fill=\'#{$custom-control-indicator-checked-color}\' d=\'M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 4\'%3E%3Cpath stroke=\'#{$custom-checkbox-indicator-indeterminate-color}\' d=\'M0 2h4\'/%3E%3C/svg%3E"), "#", "%23") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'-4 -4 8 8\'%3E%3Ccircle r=\'3\' fill=\'#{$custom-control-indicator-checked-color}\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n$custom-select-padding-y: .375rem !default;\n$custom-select-padding-x: .75rem !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-line-height: $input-btn-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $white !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 5\'%3E%3Cpath fill=\'#{$custom-select-indicator-color}\' d=\'M2 0L0 2h4zm0 5L0 3h4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n$custom-select-border-width: $input-btn-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-box-shadow: inset 0 1px 2px rgba($black, .075), 0 0 5px rgba($custom-select-focus-border-color, .5) !default;\n\n$custom-select-font-size-sm: 75% !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-font-size-lg: 125% !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$custom-file-padding-y: $input-btn-padding-y !default;\n$custom-file-padding-x: $input-btn-padding-x !default;\n$custom-file-line-height: $input-btn-line-height !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-btn-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: "Browse"\n) !default;\n\n\n// Form validation\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color("success") !default;\n$form-feedback-invalid-color: theme-color("danger") !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They\'re used for a bird\'s eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n// Navbar\n\n$navbar-padding-y: ($spacer / 2) !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-dark-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-light-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: ($grid-gutter-width / 2) !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $gray-200 !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: 1rem !default;\n\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-transition: transform .3s ease-out !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: ($font-size-base * .75) !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color("primary") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n// List group\n\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: "/" !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n$carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n$carousel-transition: transform .6s ease !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Printing\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, "lg") !default;\n',"//\n// Screenreaders\n//\n\n.sr-only {\n @include sr-only();\n}\n\n.sr-only-focusable {\n @include sr-only-focusable();\n}\n",'// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n// See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n clip-path: inset(50%);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it\'s focused.\n//\n// Useful for "Skip to main content" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n//\n// Credit: HTML5 Boilerplate\n\n@mixin sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n clip-path: none;\n }\n}\n',"// stylelint-disable declaration-no-important\n\n// Width and height\n\n@each $prop, $abbrev in (width: w, height: h) {\n @each $size, $length in $sizes {\n .#{$abbrev}-#{$size} { #{$prop}: $length !important; }\n }\n}\n\n.mw-100 { max-width: 100% !important; }\n.mh-100 { max-height: 100% !important; }\n","// stylelint-disable declaration-no-important\n\n// Margin and Padding\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n\n .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }\n .#{$abbrev}t#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n }\n\n // Some special margin utils\n .m#{$infix}-auto { margin: auto !important; }\n .mt#{$infix}-auto,\n .my#{$infix}-auto {\n margin-top: auto !important;\n }\n .mr#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-right: auto !important;\n }\n .mb#{$infix}-auto,\n .my#{$infix}-auto {\n margin-bottom: auto !important;\n }\n .ml#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-left: auto !important;\n }\n }\n}\n",'// stylelint-disable declaration-no-important\n\n//\n// Text\n//\n\n// Alignment\n\n.text-justify { text-align: justify !important; }\n.text-nowrap { white-space: nowrap !important; }\n.text-truncate { @include text-truncate; }\n\n// Responsive alignment\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .text#{$infix}-left { text-align: left !important; }\n .text#{$infix}-right { text-align: right !important; }\n .text#{$infix}-center { text-align: center !important; }\n }\n}\n\n// Transformation\n\n.text-lowercase { text-transform: lowercase !important; }\n.text-uppercase { text-transform: uppercase !important; }\n.text-capitalize { text-transform: capitalize !important; }\n\n// Weight and italics\n\n.font-weight-light { font-weight: $font-weight-light !important; }\n.font-weight-normal { font-weight: $font-weight-normal !important; }\n.font-weight-bold { font-weight: $font-weight-bold !important; }\n.font-italic { font-style: italic !important; }\n\n// Contextual colors\n\n.text-white { color: #fff !important; }\n\n@each $color, $value in $theme-colors {\n @include text-emphasis-variant(".text-#{$color}", $value);\n}\n\n.text-muted { color: $text-muted !important; }\n\n// Misc\n\n.text-hide {\n @include text-hide();\n}\n',"// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","// stylelint-disable declaration-no-important\n\n// Typography\n\n@mixin text-emphasis-variant($parent, $color) {\n #{$parent} {\n color: $color !important;\n }\n a#{$parent} {\n @include hover-focus {\n color: darken($color, 10%) !important;\n }\n }\n}\n","// CSS image replacement\n@mixin text-hide() {\n // stylelint-disable-next-line font-family-no-missing-generic-family-keyword\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n","// stylelint-disable declaration-no-important\n\n// Visibility\n\n@mixin invisible($visibility) {\n visibility: $visibility !important;\n}\n","//\n// Visibility utilities\n//\n\n.visible {\n @include invisible(visible);\n}\n\n.invisible {\n @include invisible(hidden);\n}\n",'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@import "~@scss/config/_settings.scss";\n@import "~@scss/config/_bootstrap.scss";\n\n.combinations-filters-dropdown {\n margin: 0 0.35rem;\n\n @include media-breakpoint-down(xs) {\n margin-bottom: .5rem;\n }\n\n .dropdown-item {\n padding: 0.438rem 0.938rem;\n padding-right: 1rem;\n line-height: normal;\n color: inherit;\n border-bottom: 0;\n\n .md-checkbox-container {\n position: relative;\n padding-left: 28px;\n }\n }\n}\n'],sourceRoot:""}]);const l=a},45240:(t,n,e)=>{"use strict";e.r(n),e.d(n,{default:()=>l});var r=e(94015),i=e.n(r),o=e(23645),a=e.n(o)()(i());a.push([t.id,".combinations-filters .control-label{font-weight:600;color:#000;margin-botton:1rem}.combinations-filters-line{display:flex;align-items:flex-start;flex-wrap:wrap;margin:0 -0.35rem}\n","",{version:3,sources:["webpack://./js/pages/product/components/filters/Filters.vue"],names:[],mappings:"AAsIA,qCAEI,eAAgB,CAChB,UAAW,CACX,kBAAmB,CACpB,2BAGC,YAAa,CACb,sBAAuB,CACvB,cAAe,CACf,iBAAkB",sourcesContent:['\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@import "~@scss/config/_settings.scss";\n\n.combinations-filters {\n .control-label {\n font-weight: 600;\n color: #000;\n margin-botton: 1rem;\n }\n\n &-line {\n display: flex;\n align-items: flex-start;\n flex-wrap: wrap;\n margin: 0 -0.35rem;\n }\n}\n'],sourceRoot:""}]);const l=a},14402:(t,n,e)=>{"use strict";e.r(n),e.d(n,{default:()=>l});var r=e(94015),i=e.n(r),o=e(23645),a=e.n(o)()(i());a.push([t.id,"#product-combinations-generate .modal .tags-input{margin-bottom:1rem}#product-combinations-generate .modal .tags-input .tag{margin-bottom:0.25rem}#product-combinations-generate .modal #attributes-list-selector{max-height:50vh}#product-combinations-generate .modal #attributes-list-selector .attribute-group{position:relative;margin-bottom:0.75rem;overflow:hidden;border:1px solid #bbcdd2;border-radius:4px}#product-combinations-generate .modal #attributes-list-selector .attribute-group-header{display:flex;background-color:#fafbfc}#product-combinations-generate .modal #attributes-list-selector .attribute-group-content{border-top:1px solid #bbcdd2}#product-combinations-generate .modal #attributes-list-selector .attribute-group-checkbox{position:absolute;top:0.5rem;left:0.5rem}#product-combinations-generate .modal #attributes-list-selector .attribute-group-name{width:100%;padding:0.4375rem 0.4375rem 0.4375rem 2.5rem;font-weight:600;color:#363a41}#product-combinations-generate .modal #attributes-list-selector .attribute-group-name:hover{text-decoration:none}#product-combinations-generate .modal #attributes-list-selector .attribute-group .attribute-item{margin:0.25rem;cursor:pointer;border-radius:3px}#product-combinations-generate .modal #attributes-list-selector .attribute-group .attribute-item-content{display:flex;align-items:center;padding:0.5rem}#product-combinations-generate .modal #attributes-list-selector .attribute-group .attribute-item.selected{background-color:#eaebec}#product-combinations-generate .modal #attributes-list-selector .attribute-group .attribute-item input{display:none}#product-combinations-generate .modal #attributes-list-selector .attribute-group .attribute-item-color{display:block;width:15px;height:15px;margin-right:0.5rem;border-radius:3px}#product-combinations-generate .modal #attributes-list-selector .attributes{height:auto;padding:0.4375rem}#product-combinations-generate .modal .product-combinations-modal-content{position:relative;padding-bottom:0.5rem}\n","",{version:3,sources:["webpack://./js/pages/product/components/generator/AttributesSelector.vue","webpack://./node_modules/prestakit/scss/_variables.scss"],names:[],mappings:"AAuTA,kDAGM,kBAAmB,CAHzB,uDAMQ,qBAAsB,CAN9B,gEAWM,eAAgB,CAXtB,iFAcQ,iBAAkB,CAClB,qBAAsB,CACtB,eAAgB,CAChB,wBChUU,CDiUV,iBAAkB,CAlB1B,wFAqBU,YAAa,CACb,wBCtUQ,CDgTlB,yFA0BU,4BCzUQ,CD+SlB,0FA8BU,iBAAkB,CAClB,UAAW,CACX,WAAY,CAhCtB,sFAoCU,UAAW,CACX,4CAA6C,CAC7C,eAAgB,CAChB,aAAc,CAvCxB,4FA0CY,oBAAqB,CA1CjC,iGA+CU,cAAe,CACf,cAAe,CACf,iBAAkB,CAjD5B,yGAoDY,YAAa,CACb,kBAAmB,CACnB,cAAe,CAtD3B,0GA0DY,wBC7WW,CDmTvB,uGA8DY,YAAa,CA9DzB,uGAkEY,aAAc,CACd,UAAW,CACX,WAAY,CACZ,mBAAoB,CACpB,iBAAkB,CAtE9B,4EA4EQ,WAAY,CACZ,iBAAkB,CA7E1B,0EAkFM,iBAAkB,CAClB,qBAAsB",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@import '~@scss/config/_settings.scss';\n\n#product-combinations-generate {\n .modal {\n .tags-input {\n margin-bottom: 1rem;\n\n .tag {\n margin-bottom: 0.25rem;\n }\n }\n\n #attributes-list-selector {\n max-height: 50vh;\n\n .attribute-group {\n position: relative;\n margin-bottom: 0.75rem;\n overflow: hidden;\n border: 1px solid $gray-300;\n border-radius: 4px;\n\n &-header {\n display: flex;\n background-color: $gray-250;\n }\n\n &-content {\n border-top: 1px solid $gray-300;\n }\n\n &-checkbox {\n position: absolute;\n top: 0.5rem;\n left: 0.5rem;\n }\n\n &-name {\n width: 100%;\n padding: 0.4375rem 0.4375rem 0.4375rem 2.5rem;\n font-weight: 600;\n color: #363a41;\n\n &:hover {\n text-decoration: none;\n }\n }\n\n .attribute-item {\n margin: 0.25rem;\n cursor: pointer;\n border-radius: 3px;\n\n &-content {\n display: flex;\n align-items: center;\n padding: 0.5rem;\n }\n\n &.selected {\n background-color: $gray-disabled;\n }\n\n input {\n display: none;\n }\n\n &-color {\n display: block;\n width: 15px;\n height: 15px;\n margin-right: 0.5rem;\n border-radius: 3px;\n }\n }\n }\n\n .attributes {\n height: auto;\n padding: 0.4375rem;\n }\n }\n\n .product-combinations-modal-content {\n position: relative;\n padding-bottom: 0.5rem;\n }\n }\n}\n",'/* stylelint-disable */\n\n// Color system\n$white: #fff;\n$gray-disabled: #eaebec;\n$gray-100: #fafbfc;\n$gray-200: #fafbfc;\n$gray-250: #fafbfc;\n$gray-300: #bbcdd2;\n$gray-400: #bbcdd2;\n$gray-450: #b3c7cd;\n$gray-500: #6c868e;\n$gray-550: #708090;\n$gray-600: #6c868e;\n$gray-700: #363a41;\n$gray-750: #363a41;\n$gray-800: #363a41;\n$gray-900: #282b30;\n$black: #000;\n\n// PS Vars\n$extra-light-gray: $gray-100;\n$light-gray: $gray-300;\n$medium-gray: $gray-500;\n$dark-gray: $gray-700;\n$extra-dark-gray: $gray-900;\n$gray-light: $light-gray;\n$gray-medium: $medium-gray;\n$gray-dark: $dark-gray;\n$gray-soft: $gray-200;\n$background-color: #eff1f2;\n$primary-lighten: #f4fcfd;\n$local-font: false !default;\n\n$blue: #25b9d7;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #f54c3e;\n$orange: #fd7e14 !default;\n$yellow: #fab000;\n$green: #70b580;\n$orange: #fd7e14 !default;\n$teal: #20c997 !default;\n$cyan: $blue;\n$light-blue: #f4fcfd;\n\n// main button background colors\n$primary-hover: #7cd5e7;\n$primary-active: #21a6c1;\n$primary-disabled: #d3f1f7;\n$secondary-hover: #b7ced3;\n$secondary-active: #889da2;\n$danger-hover: #fde1e1;\n$notice: #dff5f9;\n\n$primary: $blue !default;\n$secondary: $medium-gray;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$toast-success: #53d572 !default;\n$toast-warning: #fab000 !default;\n\n$brand-primary: $primary !default;\n$brand-secondary: $secondary !default;\n$brand-info: #5bc0de !default;\n$brand-warning: #f0ad4e !default;\n$brand-success: $success !default;\n$brand-danger: $danger !default;\n\n$btn-primary-bg: $primary-hover;\n$btn-secondary-border: #000;\n$btn-info-bg: $brand-info !default;\n$btn-success-bg: $brand-success !default;\n$btn-warning-bg: $brand-warning !default;\n$btn-danger-bg: $brand-danger !default;\n\n$theme-colors: (\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": $warning,\n "danger": $danger,\n "light": $light,\n "dark": $dark\n);\n\n$alerts-background-colors: (\n "success": #cbf2d4,\n "info": #beeaf3,\n "warning": #fffbd3,\n "danger": #fbc6c3\n);\n\n$alerts-second-colors: (\n "success": #53d572,\n "info": #25b9d7,\n "warning": #fab000,\n "danger": #f44336\n);\n\n$theme-alerts-icons: (\n success: "\\E5CA",\n info: "\\e88e",\n warning: "\\E002",\n danger: "\\e000"\n);\n\n$theme-colors-icons: (\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": #fab000,\n "danger": $danger,\n "light": $light\n);\n\n$theme-colors-hover: (\n primary: $primary-hover,\n secondary: $secondary-hover,\n success: #9bcba6,\n info: $primary-hover,\n warning: #e6b045,\n danger: #e76d7a,\n light: $gray-800,\n dark: $gray-100,\n default: $light-blue\n);\n\n$theme-colors-active: (\n primary: $primary-active,\n secondary: $secondary-active,\n success: #5a9166,\n info: darken(map-get($theme-colors, "info"), 10%),\n warning: darken(map-get($theme-colors, "warning"), 10%),\n danger: #c3362b,\n light: darken(map-get($theme-colors, "light"), 10%),\n dark: darken(map-get($theme-colors, "dark"), 10%),\n default: $primary\n);\n\n$theme-colors-background: (\n primary: #dff5f9,\n secondary: $black,\n success: #d6f0d8,\n info: #dff5f9,\n warning: #fffbd3,\n danger: #fde1e1,\n light: $gray-200,\n dark: $gray-700\n);\n\n$theme-colors-shadow: (\n primary: theme-color("primary"),\n secondary: $black,\n success: theme-color("success"),\n info: theme-color("info"),\n warning: theme-color("warning"),\n danger: theme-color("danger"),\n light: theme-color("light"),\n dark: theme-color("dark")\n);\n\n// Options\n$enable-caret: true !default;\n$enable-rounded: true;\n$enable-shadows: true;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n// Spacing\n$spacer: 1.875rem;\n\n$spacers: (\n 0: 0,\n 1: (\n $spacer / 6\n ),\n 2: (\n $spacer / 3\n ),\n 3: (\n $spacer / 2\n ),\n 4: $spacer,\n 5: (\n $spacer * 2\n )\n);\n\n// Body\n$body-bg: $white !default;\n$body-color: $dark-gray;\n\n// Links\n$link-hover-color: theme-color("primary") !default;\n$link-hover-decoration: underline;\n\n// Paragraphs\n$paragraph-margin-bottom: 1rem;\n\n// Grid breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 544px,\n md: 768px,\n lg: 1024px,\n xl: 1300px,\n xxl: 1600px // PS custom\n);\n@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n// Grid containers\n$container-max-widths: (\n sm: 576px,\n md: 720px,\n lg: 972px,\n xl: 1240px\n);\n@include _assert-ascending($container-max-widths, "$container-max-widths");\n\n// Grid columns\n//$grid-columns: 12 !default;\n$grid-gutter-width: 1.875rem !default;\n\n// Components\n//$line-height-lg: 1.5 !default;\n//$line-height-sm: 1.5 !default;\n\n//$border-width: 1px !default;\n//$border-color: $gray-300 !default;\n\n$border-radius: 4px !default;\n//$border-radius-lg: .3rem !default;\n//$border-radius-sm: .2rem !default;\n\n//$component-active-color: $white !default;\n//$component-active-bg: theme-color("primary") !default;\n\n$caret-width: .25rem;\n\n//$transition-base: all .2s ease-in-out !default;\n//$transition-fade: opacity .15s linear !default;\n//$transition-collapse: height .35s ease !default;\n\n// Fonts\n$font-family-sans-serif: "Open Sans", helvetica, arial, sans-serif;\n//$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;\n//$font-family-base: $font-family-sans-serif !default;\n\n$font-size-base: .875rem;\n$font-size-lg: 1rem;\n$font-size-sm: .75rem;\n$font-size-xs: .625rem; // PS custom\n\n//$font-weight-light: 300;\n//$font-weight-normal: 400;\n$font-weight-semibold: 600;\n$font-weight-bold: 700;\n\n$h1-font-size: 1.5rem;\n$h2-font-size: 1.25rem;\n$h3-font-size: 1rem;\n$h4-font-size: .875rem;\n$h5-font-size: .75rem;\n$h6-font-size: .625rem;\n\n//$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: $font-family-sans-serif;\n$headings-font-weight: $font-weight-bold;\n$headings-color: $body-color;\n\n//$display1-size: 6rem !default;\n//$display2-size: 5.5rem !default;\n//$display3-size: 4.5rem !default;\n//$display4-size: 3.5rem !default;\n\n//$display1-weight: 300 !default;\n//$display2-weight: 300 !default;\n//$display3-weight: 300 !default;\n//$display4-weight: 300 !default;\n//$display-line-height: $headings-line-height !default;\n\n//$lead-font-size: ($font-size-base * 1.25) !default;\n//$lead-font-weight: 300 !default;\n\n//$small-font-size: 80% !default;\n\n$text-muted: $medium-gray;\n\n//$blockquote-small-color: $gray-600 !default;\n//$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: $light-gray;\n//$hr-border-width: $border-width !default;\n\n//$mark-padding: .2em !default;\n\n//$dt-font-weight: $font-weight-bold !default;\n\n//$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n//$nested-kbd-font-weight: $font-weight-bold !default;\n\n//$list-inline-padding: .5rem !default;\n\n//$mark-bg: #fcf8e3 !default;\n\n//$hr-margin-y: $spacer !default;\n\n// Tables\n$table-cell-padding: .4rem;\n$table-cell-padding-sm: .25rem;\n\n//$table-bg: transparent !default;\n$table-accent-bg: $background-color;\n$table-hover-bg: theme-color-hover("primary");\n$table-active-bg: theme-color-hover("primary");\n\n//$table-border-width: $border-width !default;\n//$table-border-color: $gray-300 !default;\n\n$table-head-bg: $background-color;\n$table-head-color: $body-color;\n\n$table-dark-bg: $body-color;\n$table-dark-accent-bg: $extra-dark-gray;\n$table-dark-hover-bg: theme-color-hover("primary");\n$table-dark-border-color: $medium-gray;\n//$table-dark-color: $body-bg !default;\n\n// Buttons\n$input-btn-padding-y: .375rem;\n$input-btn-padding-x: .838rem;\n//$input-btn-line-height: $line-height-base !default;\n\n//$input-btn-focus-width: .2rem !default;\n//$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n//$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .313rem;\n$input-btn-padding-x-sm: .625rem;\n//$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .438rem;\n$input-btn-padding-x-lg: .838rem;\n//$input-btn-line-height-lg: $line-height-lg !default;\n\n//$input-btn-border-width: $border-width !default;\n\n// Buttons\n$btn-padding-y: .5rem !default;\n$btn-padding-x: 1rem !default;\n//$btn-line-height: $input-btn-line-height !default;\n\n//$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n//$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n//$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n//$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n//$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n//$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n//$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-semibold;\n$btn-box-shadow: none;\n//$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: none;\n//$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: none;\n\n//$btn-link-disabled-color: $gray-600 !default;\n\n//$btn-block-spacing-y: .5rem !default;\n\n$btn-border-radius: 4px;\n//$btn-border-radius-lg: $border-radius-lg !default;\n//$btn-border-radius-sm: $border-radius-sm !default;\n\n//$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n// Forms\n$input-padding-y: .375rem;\n$input-padding-x: .4375rem;\n//$input-line-height: $input-btn-line-height !default;\n\n//$input-padding-y-sm: $input-btn-padding-y-sm !default;\n//$input-padding-x-sm: $input-btn-padding-x-sm !default;\n//$input-line-height-sm: $input-btn-line-height-sm !default;\n\n//$input-padding-y-lg: $input-btn-padding-y-lg !default;\n//$input-padding-x-lg: $input-btn-padding-x-lg !default;\n//$input-line-height-lg: $input-btn-line-height-lg !default;\n\n//$input-bg: $white !default;\n$input-disabled-bg: #eceeef;\n\n$input-color: $body-color;\n$input-border-color: $light-gray;\n//$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: none;\n\n//$input-border-radius: $border-radius !default;\n//$input-border-radius-lg: $border-radius-lg !default;\n//$input-border-radius-sm: $border-radius-sm !default;\n\n//$input-focus-bg: $input-bg !default;\n$input-focus-border-color: theme-color-hover("primary");\n//$input-focus-color: $input-color !default;\n//$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: none;\n\n$input-placeholder-color: $medium-gray;\n\n//$input-height-border: $input-border-width * 2 !default;\n\n//$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: 2.188rem;\n\n//$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n//$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n//$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: 2.188rem;\n\n//$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n//$form-text-margin-top: .25rem !default;\n\n//$form-check-input-gutter: 1.25rem !default;\n//$form-check-input-margin-y: .3rem !default;\n//$form-check-input-margin-x: .25rem !default;\n\n//$form-check-inline-margin-x: .75rem !default;\n//$form-check-inline-input-margin-x: .3125rem !default;\n\n//$form-group-margin-bottom: 1rem !default;\n\n//$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $extra-light-gray;\n//$input-group-addon-border-color: $input-border-color !default;\n\n//$custom-control-gutter: 1.5rem !default;\n//$custom-control-spacer-x: 1rem !default;\n\n//$custom-control-indicator-size: 1rem !default;\n//$custom-control-indicator-bg: $gray-300 !default;\n//$custom-control-indicator-bg-size: 50% 50% !default;\n//$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n//$custom-control-indicator-disabled-bg: $gray-200 !default;\n//$custom-control-label-disabled-color: $gray-600 !default;\n\n//$custom-control-indicator-checked-color: $component-active-color !default;\n//$custom-control-indicator-checked-bg: $component-active-bg !default;\n//$custom-control-indicator-checked-disabled-bg: rgba(theme-color("primary"), .5) !default;\n//$custom-control-indicator-checked-box-shadow: none !default;\n\n//$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n//$custom-control-indicator-active-color: $component-active-color !default;\n//$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n//$custom-control-indicator-active-box-shadow: none !default;\n\n//$custom-checkbox-indicator-border-radius: $border-radius !default;\n//$custom-checkbox-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 8 8\'%3E%3Cpath fill=\'#{$custom-control-indicator-checked-color}\' d=\'M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n//$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n//$custom-checkbox-indicator-icon-indeterminate: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 4\'%3E%3Cpath stroke=\'#{$custom-checkbox-indicator-indeterminate-color}\' d=\'M0 2h4\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n//$custom-radio-indicator-border-radius: 50% !default;\n//$custom-radio-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'-4 -4 8 8\'%3E%3Ccircle r=\'3\' fill=\'#{$custom-control-indicator-checked-color}\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$custom-select-padding-y: .375rem !default;\n//$custom-select-padding-x: .75rem !default;\n//$custom-select-height: $input-height !default;\n//$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n//$custom-select-line-height: $input-btn-line-height !default;\n//$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $medium-gray;\n//$custom-select-bg: $white !default;\n$custom-select-disabled-bg: $input-disabled-bg;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $input-color;\n//$custom-select-indicator: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 5\'%3E%3Cpath fill=\'#{$custom-select-indicator-color}\' d=\'M2 0L0 2h4zm0 5L0 3h4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$custom-select-border-width: $input-btn-border-width !default;\n//$custom-select-border-color: $input-border-color !default;\n//$custom-select-border-radius: $border-radius !default;\n\n$custom-select-focus-border-color: $input-focus-border-color;\n$custom-select-focus-box-shadow: $input-focus-box-shadow;\n\n//$custom-select-font-size-sm: 75% !default;\n//$custom-select-height-sm: $input-height-sm !default;\n\n//$custom-select-font-size-lg: 125% !default;\n//$custom-select-height-lg: $input-height-lg !default;\n\n//$custom-file-height: $input-height !default;\n//$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow;\n\n//$custom-file-padding-y: $input-btn-padding-y !default;\n//$custom-file-padding-x: $input-btn-padding-x !default;\n//$custom-file-line-height: $input-btn-line-height !default;\n//$custom-file-color: $input-color !default;\n//$custom-file-bg: $input-bg !default;\n//$custom-file-border-width: $input-btn-border-width !default;\n//$custom-file-border-color: $input-border-color !default;\n//$custom-file-border-radius: $input-border-radius !default;\n//$custom-file-box-shadow: $input-box-shadow !default;\n//$custom-file-button-color: $custom-file-color !default;\n//$custom-file-button-bg: $input-group-addon-bg !default;\n//$custom-file-text: (\n// en: "Browse"\n//) !default;\n\n$cursor-disabled: not-allowed; // PS custom\n\n// Form validation\n//$form-feedback-margin-top: $form-text-margin-top !default;\n//$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color("success");\n$form-feedback-invalid-color: theme-color("danger");\n$form-feedback-warning-color: theme-color("warning"); // PS custom\n\n// Dropdowns\n//$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: 0;\n//$dropdown-padding-y: .5rem !default;\n//$dropdown-spacer: .125rem !default;\n//$dropdown-bg: $white !default;\n$dropdown-border-color: $light-gray;\n//$dropdown-border-radius: $border-radius !default;\n//$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $light-gray;\n//$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $medium-gray;\n$dropdown-link-hover-color: theme-color("primary");\n$dropdown-link-hover-bg: $white;\n\n//$dropdown-link-active-color: $component-active-color !default;\n//$dropdown-link-active-bg: $component-active-bg !default;\n\n//$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-x: .3125rem;\n$dropdown-item-padding-y: .3125rem;\n\n//$dropdown-header-color: $gray-600 !default;\n\n// Navs\n$nav-link-padding-y: .9375rem;\n$nav-link-padding-x: 1.25rem;\n$nav-link-disabled-color: $light-gray;\n\n$nav-tabs-border-color: $white;\n//$nav-tabs-border-width: $border-width !default;\n//$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: theme-color("primary");\n$nav-tabs-link-active-color: $body-color;\n$nav-tabs-link-active-bg: $body-bg;\n$nav-tabs-link-active-border-color: theme-color("primary");\n\n$nav-pills-link-hover-border-color: $nav-tabs-link-hover-border-color;\n$nav-pills-link-active-color: $nav-tabs-link-active-color;\n$nav-pills-link-active-bg: #f4f9fb;\n$nav-pills-link-active-border-color: $nav-tabs-link-active-border-color; // PS custom\n\n//$nav-pills-border-radius: $border-radius !default;\n//$nav-pills-link-active-color: $component-active-color !default;\n//$nav-pills-link-active-bg: $component-active-bg !default;\n\n// Navbar\n//$navbar-padding-y: ($spacer / 2) !default;\n//$navbar-padding-x: $spacer !default;\n\n//$navbar-nav-link-padding-x: .5rem !default;\n\n//$navbar-brand-font-size: $font-size-lg !default;\n\n//$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n//$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n//$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n//$navbar-toggler-padding-y: .25rem !default;\n//$navbar-toggler-padding-x: .75rem !default;\n//$navbar-toggler-font-size: $font-size-lg !default;\n//$navbar-toggler-border-radius: $btn-border-radius !default;\n\n//$navbar-dark-color: rgba($white, .5) !default;\n//$navbar-dark-hover-color: rgba($white, .75) !default;\n//$navbar-dark-active-color: $white !default;\n//$navbar-dark-disabled-color: rgba($white, .25) !default;\n//$navbar-dark-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-dark-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n//$navbar-light-color: rgba($black, .5) !default;\n//$navbar-light-hover-color: rgba($black, .7) !default;\n//$navbar-light-active-color: rgba($black, .9) !default;\n//$navbar-light-disabled-color: rgba($black, .3) !default;\n//$navbar-light-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-light-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n// Pagination\n$pagination-padding-y: .65rem;\n$pagination-padding-x: .5rem;\n//$pagination-padding-y-sm: .25rem !default;\n//$pagination-padding-x-sm: .5rem !default;\n//$pagination-padding-y-lg: .75rem !default;\n//$pagination-padding-x-lg: 1.5rem !default;\n//$pagination-line-height: 1.25 !default;\n\n$pagination-color: $medium-gray;\n$pagination-bg: $white;\n//$pagination-border-width: $border-width !default;\n$pagination-border-color: $white;\n\n//$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$pagination-hover-color: $pagination-color;\n$pagination-hover-bg: $pagination-bg;\n$pagination-hover-border-color: $pagination-border-color;\n\n$pagination-active-color: theme-color("primary");\n$pagination-active-bg: $pagination-bg;\n$pagination-active-border-color: $pagination-border-color;\n\n$pagination-disabled-color: $light-gray;\n$pagination-disabled-bg: $pagination-bg;\n$pagination-disabled-border-color: $pagination-border-color;\n\n// Jumbotron\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $extra-light-gray;\n\n// Cards\n$card-spacer-x: .625rem !default;\n$card-spacer-y: .625rem !default;\n$card-border-width: 1px !default;\n$card-border-radius: 5px !default;\n$card-border-radius-inner: $card-border-radius !default;\n$card-cap-bg: $gray-200 !default;\n$card-bg: #fff !default;\n$card-link-hover-color: #fff !default;\n$card-border-color: #dbe6e9 !default;\n//$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n//$card-cap-bg: rgba($black, .03) !default;\n//$card-bg: $white !default;\n\n//$card-img-overlay-padding: 1.25rem !default;\n\n//$card-group-margin: ($grid-gutter-width / 2) !default;\n//$card-deck-margin: $card-group-margin !default;\n\n//$card-columns-count: 3 !default;\n//$card-columns-gap: 1.25rem !default;\n//$card-columns-margin: $card-spacer-y !default;\n\n// Tooltips\n//$tooltip-font-size: $font-size-sm !default;\n//$tooltip-max-width: 200px !default;\n//$tooltip-color: $white !default;\n$tooltip-bg: $medium-gray;\n//$tooltip-border-radius: $border-radius !default;\n//$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .625rem;\n$tooltip-padding-x: 1.25rem;\n//$tooltip-margin: 0 !default;\n\n//$tooltip-arrow-width: .8rem !default;\n//$tooltip-arrow-height: .4rem !default;\n//$tooltip-arrow-color: $tooltip-bg !default;\n\n// Popovers\n//$popover-font-size: $font-size-sm !default;\n//$popover-bg: $white !default;\n//$popover-max-width: 276px !default;\n//$popover-border-width: $border-width !default;\n$popover-border-color: $light-gray;\n//$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: none;\n\n$popover-header-bg: $extra-light-gray;\n//$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .625rem;\n$popover-header-padding-x: 1.25rem;\n\n//$popover-body-color: $body-color !default;\n$popover-body-padding-y: .625rem;\n$popover-body-padding-x: 1.25rem;\n\n//$popover-arrow-width: 1rem !default;\n//$popover-arrow-height: .5rem !default;\n//$popover-arrow-color: $popover-bg !default;\n\n//$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n// Badges\n$badge-font-size: .625rem !default;\n$badge-font-weight: 500 !default;\n$badge-padding-y: .25rem;\n$badge-padding-x: .5rem;\n//$badge-border-radius: $border-radius !default;\n\n//$badge-pill-padding-x: .6em !default;\n//$badge-pill-border-radius: 10rem !default;\n\n// Modals\n$modal-inner-padding: 1.875rem;\n\n//$modal-dialog-margin: .5rem !default;\n//$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n//$modal-title-line-height: $line-height-base !default;\n\n//$modal-content-bg: $white !default;\n$modal-content-border-color: none;\n//$modal-content-border-width: $border-width !default;\n$modal-content-box-shadow-xs: 0 8px 16px 0 rgba(0, 0, 0, .1);\n$modal-content-box-shadow-sm-up: 0 8px 16px 0 rgba(0, 0, 0, .1);\n\n//$modal-backdrop-bg: $black !default;\n//$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: none;\n//$modal-footer-border-color: $modal-header-border-color !default;\n//$modal-header-border-width: $modal-content-border-width !default;\n//$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: $modal-inner-padding;\n\n$modal-lg: 900px;\n$modal-md: 680px;\n$modal-sm: 400px;\n\n//$modal-transition: transform .3s ease-out !default;\n\n// Alerts\n$alert-padding-y: 1rem !default;\n$alert-padding-x: 1rem;\n//$alert-margin-bottom: 1rem !default;\n//$alert-border-radius: $border-radius !default;\n//$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: .125rem;\n\n//$alert-bg-level: -10 !default;\n//$alert-border-level: -9 !default;\n//$alert-color-level: 6 !default;\n\n// Progress bars\n//$progress-height: 1rem !default;\n//$progress-font-size: ($font-size-base * .75) !default;\n//$progress-bg: $gray-200 !default;\n//$progress-border-radius: $border-radius !default;\n//$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n//$progress-bar-color: $white !default;\n//$progress-bar-bg: theme-color("primary") !default;\n//$progress-bar-animation-timing: 1s linear infinite !default;\n//$progress-bar-transition: width .6s ease !default;\n\n// List group\n//$list-group-bg: $white !default;\n$list-group-border-color: $light-gray;\n//$list-group-border-width: $border-width !default;\n//$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $input-padding-y;\n$list-group-item-padding-x: $input-padding-x;\n\n$list-group-hover-bg: theme-color-hover("primary");\n//$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: theme-color-hover("primary");\n//$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $light-gray;\n//$list-group-disabled-bg: $list-group-bg !default;\n\n//$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $white;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n// Image thumbnails\n$thumbnail-padding: 0;\n//$thumbnail-bg: $body-bg !default;\n//$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $light-gray;\n//$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: none;\n\n// Figures\n//$figure-caption-font-size: 90% !default;\n$figure-caption-color: $medium-gray;\n\n// Breadcrumbs\n$breadcrumb-padding-y: .3125rem;\n$breadcrumb-padding-x: .3125rem;\n$breadcrumb-item-padding: .3rem;\n\n$breadcrumb-margin-bottom: 0;\n\n$breadcrumb-bg: none;\n$breadcrumb-divider-color: $dark-gray;\n$breadcrumb-active-color: $extra-dark-gray;\n$breadcrumb-divider: "/";\n\n// Carousel\n//$carousel-control-color: $white !default;\n//$carousel-control-width: 15% !default;\n//$carousel-control-opacity: .5 !default;\n\n//$carousel-indicator-width: 30px !default;\n//$carousel-indicator-height: 3px !default;\n//$carousel-indicator-spacer: 3px !default;\n//$carousel-indicator-active-bg: $white !default;\n\n//$carousel-caption-width: 70% !default;\n//$carousel-caption-color: $white !default;\n\n//$carousel-control-icon-width: 20px !default;\n\n//$carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$carousel-transition: transform .6s ease !default;\n\n// Close\n//$close-font-size: $font-size-base * 1.5 !default;\n//$close-font-weight: $font-weight-bold !default;\n//$close-color: $black !default;\n//$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n//$code-font-size: 87.5% !default;\n$code-color: $body-color;\n\n//$kbd-padding-y: .2rem !default;\n//$kbd-padding-x: .4rem !default;\n//$kbd-font-size: $code-font-size !default;\n$kbd-color: $white;\n$kbd-bg: $extra-dark-gray;\n\n$pre-color: $body-color;\n//$pre-scrollable-max-height: 340px !default;\n\n// Printing\n//$print-page-size: a3 !default;\n//$print-body-min-width: map-get($grid-breakpoints, "lg") !default;\n'],sourceRoot:""}]);const l=a},85487:(t,n,e)=>{"use strict";e.r(n),e.d(n,{default:()=>l});var r=e(94015),i=e.n(r),o=e(23645),a=e.n(o)()(i());a.push([t.id,".modal.show[data-v-4f674025]{display:block}.modal-fade-enter-active[data-v-4f674025],.modal-fade-leave-active[data-v-4f674025]{transition:opacity .5s}.modal-fade-enter[data-v-4f674025],.modal-fade-leave-to[data-v-4f674025]{opacity:0}\n","",{version:3,sources:["webpack://./js/vue/components/Modal.vue"],names:[],mappings:"AAkKA,6BACE,aAAc,CACf,oFAEC,sBAAuB,CACxB,yEAEC,SAAU",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.modal.show {\n display: block;\n}\n.modal-fade-enter-active, .modal-fade-leave-active {\n transition: opacity .5s;\n}\n.modal-fade-enter, .modal-fade-leave-to /* .fade-leave-active below version 2.1.8 */ {\n opacity: 0;\n}\n"],sourceRoot:""}]);const l=a},85679:(t,n,e)=>{"use strict";e.r(n),e.d(n,{default:()=>l});var r=e(94015),i=e.n(r),o=e(23645),a=e.n(o)()(i());a.push([t.id,".pagination-list{display:flex;align-items:center;justify-content:center;padding:0;margin:0;width:100%}.pagination-item{list-style-type:none}.pagination-item button{font-size:1rem;padding:0.5rem;transition:0.25s ease-out;cursor:pointer;color:#6c868e;border:0;background-color:inherit}.pagination-item button:disabled{cursor:not-allowed;opacity:0.5}.pagination-item button:hover:not(:disabled){color:#25b9d7}.pagination-item.active button{color:#25b9d7}.pagination-previous,.pagination-next{font-size:1.25rem}\n","",{version:3,sources:["webpack://./js/vue/components/Pagination.vue","webpack://./node_modules/prestakit/scss/_variables.scss"],names:[],mappings:"AA2IE,iBACE,YAAa,CACb,kBAAmB,CACnB,sBAAuB,CACvB,SAAU,CACV,QAAS,CACT,UAAW,CACZ,iBAGC,oBAAqB,CADtB,wBAIG,cAAe,CACf,cAAe,CACf,yBAA0B,CAC1B,cAAe,CACf,aAAc,CACd,QAAS,CACT,wBAAyB,CAV5B,iCAaK,kBAAmB,CACnB,WAAY,CAdjB,6CAkBK,aCpIM,CDkHX,+BAwBK,aC1IM,CD2IP,sCAMH,iBAAkB",sourcesContent:['\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@import "~@scss/config/_settings.scss";\n\n.pagination {\n &-list {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n margin: 0;\n width: 100%;\n }\n\n &-item {\n list-style-type: none;\n\n button {\n font-size: 1rem;\n padding: 0.5rem;\n transition: 0.25s ease-out;\n cursor: pointer;\n color: #6c868e;\n border: 0;\n background-color: inherit;\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n &:hover:not(:disabled) {\n color: $primary;\n }\n }\n\n &.active {\n button {\n color: $primary;\n }\n }\n }\n\n &-previous,\n &-next {\n font-size: 1.25rem;\n }\n}\n','/* stylelint-disable */\n\n// Color system\n$white: #fff;\n$gray-disabled: #eaebec;\n$gray-100: #fafbfc;\n$gray-200: #fafbfc;\n$gray-250: #fafbfc;\n$gray-300: #bbcdd2;\n$gray-400: #bbcdd2;\n$gray-450: #b3c7cd;\n$gray-500: #6c868e;\n$gray-550: #708090;\n$gray-600: #6c868e;\n$gray-700: #363a41;\n$gray-750: #363a41;\n$gray-800: #363a41;\n$gray-900: #282b30;\n$black: #000;\n\n// PS Vars\n$extra-light-gray: $gray-100;\n$light-gray: $gray-300;\n$medium-gray: $gray-500;\n$dark-gray: $gray-700;\n$extra-dark-gray: $gray-900;\n$gray-light: $light-gray;\n$gray-medium: $medium-gray;\n$gray-dark: $dark-gray;\n$gray-soft: $gray-200;\n$background-color: #eff1f2;\n$primary-lighten: #f4fcfd;\n$local-font: false !default;\n\n$blue: #25b9d7;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #f54c3e;\n$orange: #fd7e14 !default;\n$yellow: #fab000;\n$green: #70b580;\n$orange: #fd7e14 !default;\n$teal: #20c997 !default;\n$cyan: $blue;\n$light-blue: #f4fcfd;\n\n// main button background colors\n$primary-hover: #7cd5e7;\n$primary-active: #21a6c1;\n$primary-disabled: #d3f1f7;\n$secondary-hover: #b7ced3;\n$secondary-active: #889da2;\n$danger-hover: #fde1e1;\n$notice: #dff5f9;\n\n$primary: $blue !default;\n$secondary: $medium-gray;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$toast-success: #53d572 !default;\n$toast-warning: #fab000 !default;\n\n$brand-primary: $primary !default;\n$brand-secondary: $secondary !default;\n$brand-info: #5bc0de !default;\n$brand-warning: #f0ad4e !default;\n$brand-success: $success !default;\n$brand-danger: $danger !default;\n\n$btn-primary-bg: $primary-hover;\n$btn-secondary-border: #000;\n$btn-info-bg: $brand-info !default;\n$btn-success-bg: $brand-success !default;\n$btn-warning-bg: $brand-warning !default;\n$btn-danger-bg: $brand-danger !default;\n\n$theme-colors: (\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": $warning,\n "danger": $danger,\n "light": $light,\n "dark": $dark\n);\n\n$alerts-background-colors: (\n "success": #cbf2d4,\n "info": #beeaf3,\n "warning": #fffbd3,\n "danger": #fbc6c3\n);\n\n$alerts-second-colors: (\n "success": #53d572,\n "info": #25b9d7,\n "warning": #fab000,\n "danger": #f44336\n);\n\n$theme-alerts-icons: (\n success: "\\E5CA",\n info: "\\e88e",\n warning: "\\E002",\n danger: "\\e000"\n);\n\n$theme-colors-icons: (\n "primary": $primary,\n "secondary": $secondary,\n "success": $success,\n "info": $info,\n "warning": #fab000,\n "danger": $danger,\n "light": $light\n);\n\n$theme-colors-hover: (\n primary: $primary-hover,\n secondary: $secondary-hover,\n success: #9bcba6,\n info: $primary-hover,\n warning: #e6b045,\n danger: #e76d7a,\n light: $gray-800,\n dark: $gray-100,\n default: $light-blue\n);\n\n$theme-colors-active: (\n primary: $primary-active,\n secondary: $secondary-active,\n success: #5a9166,\n info: darken(map-get($theme-colors, "info"), 10%),\n warning: darken(map-get($theme-colors, "warning"), 10%),\n danger: #c3362b,\n light: darken(map-get($theme-colors, "light"), 10%),\n dark: darken(map-get($theme-colors, "dark"), 10%),\n default: $primary\n);\n\n$theme-colors-background: (\n primary: #dff5f9,\n secondary: $black,\n success: #d6f0d8,\n info: #dff5f9,\n warning: #fffbd3,\n danger: #fde1e1,\n light: $gray-200,\n dark: $gray-700\n);\n\n$theme-colors-shadow: (\n primary: theme-color("primary"),\n secondary: $black,\n success: theme-color("success"),\n info: theme-color("info"),\n warning: theme-color("warning"),\n danger: theme-color("danger"),\n light: theme-color("light"),\n dark: theme-color("dark")\n);\n\n// Options\n$enable-caret: true !default;\n$enable-rounded: true;\n$enable-shadows: true;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n// Spacing\n$spacer: 1.875rem;\n\n$spacers: (\n 0: 0,\n 1: (\n $spacer / 6\n ),\n 2: (\n $spacer / 3\n ),\n 3: (\n $spacer / 2\n ),\n 4: $spacer,\n 5: (\n $spacer * 2\n )\n);\n\n// Body\n$body-bg: $white !default;\n$body-color: $dark-gray;\n\n// Links\n$link-hover-color: theme-color("primary") !default;\n$link-hover-decoration: underline;\n\n// Paragraphs\n$paragraph-margin-bottom: 1rem;\n\n// Grid breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 544px,\n md: 768px,\n lg: 1024px,\n xl: 1300px,\n xxl: 1600px // PS custom\n);\n@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n// Grid containers\n$container-max-widths: (\n sm: 576px,\n md: 720px,\n lg: 972px,\n xl: 1240px\n);\n@include _assert-ascending($container-max-widths, "$container-max-widths");\n\n// Grid columns\n//$grid-columns: 12 !default;\n$grid-gutter-width: 1.875rem !default;\n\n// Components\n//$line-height-lg: 1.5 !default;\n//$line-height-sm: 1.5 !default;\n\n//$border-width: 1px !default;\n//$border-color: $gray-300 !default;\n\n$border-radius: 4px !default;\n//$border-radius-lg: .3rem !default;\n//$border-radius-sm: .2rem !default;\n\n//$component-active-color: $white !default;\n//$component-active-bg: theme-color("primary") !default;\n\n$caret-width: .25rem;\n\n//$transition-base: all .2s ease-in-out !default;\n//$transition-fade: opacity .15s linear !default;\n//$transition-collapse: height .35s ease !default;\n\n// Fonts\n$font-family-sans-serif: "Open Sans", helvetica, arial, sans-serif;\n//$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;\n//$font-family-base: $font-family-sans-serif !default;\n\n$font-size-base: .875rem;\n$font-size-lg: 1rem;\n$font-size-sm: .75rem;\n$font-size-xs: .625rem; // PS custom\n\n//$font-weight-light: 300;\n//$font-weight-normal: 400;\n$font-weight-semibold: 600;\n$font-weight-bold: 700;\n\n$h1-font-size: 1.5rem;\n$h2-font-size: 1.25rem;\n$h3-font-size: 1rem;\n$h4-font-size: .875rem;\n$h5-font-size: .75rem;\n$h6-font-size: .625rem;\n\n//$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: $font-family-sans-serif;\n$headings-font-weight: $font-weight-bold;\n$headings-color: $body-color;\n\n//$display1-size: 6rem !default;\n//$display2-size: 5.5rem !default;\n//$display3-size: 4.5rem !default;\n//$display4-size: 3.5rem !default;\n\n//$display1-weight: 300 !default;\n//$display2-weight: 300 !default;\n//$display3-weight: 300 !default;\n//$display4-weight: 300 !default;\n//$display-line-height: $headings-line-height !default;\n\n//$lead-font-size: ($font-size-base * 1.25) !default;\n//$lead-font-weight: 300 !default;\n\n//$small-font-size: 80% !default;\n\n$text-muted: $medium-gray;\n\n//$blockquote-small-color: $gray-600 !default;\n//$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: $light-gray;\n//$hr-border-width: $border-width !default;\n\n//$mark-padding: .2em !default;\n\n//$dt-font-weight: $font-weight-bold !default;\n\n//$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n//$nested-kbd-font-weight: $font-weight-bold !default;\n\n//$list-inline-padding: .5rem !default;\n\n//$mark-bg: #fcf8e3 !default;\n\n//$hr-margin-y: $spacer !default;\n\n// Tables\n$table-cell-padding: .4rem;\n$table-cell-padding-sm: .25rem;\n\n//$table-bg: transparent !default;\n$table-accent-bg: $background-color;\n$table-hover-bg: theme-color-hover("primary");\n$table-active-bg: theme-color-hover("primary");\n\n//$table-border-width: $border-width !default;\n//$table-border-color: $gray-300 !default;\n\n$table-head-bg: $background-color;\n$table-head-color: $body-color;\n\n$table-dark-bg: $body-color;\n$table-dark-accent-bg: $extra-dark-gray;\n$table-dark-hover-bg: theme-color-hover("primary");\n$table-dark-border-color: $medium-gray;\n//$table-dark-color: $body-bg !default;\n\n// Buttons\n$input-btn-padding-y: .375rem;\n$input-btn-padding-x: .838rem;\n//$input-btn-line-height: $line-height-base !default;\n\n//$input-btn-focus-width: .2rem !default;\n//$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n//$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .313rem;\n$input-btn-padding-x-sm: .625rem;\n//$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .438rem;\n$input-btn-padding-x-lg: .838rem;\n//$input-btn-line-height-lg: $line-height-lg !default;\n\n//$input-btn-border-width: $border-width !default;\n\n// Buttons\n$btn-padding-y: .5rem !default;\n$btn-padding-x: 1rem !default;\n//$btn-line-height: $input-btn-line-height !default;\n\n//$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n//$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n//$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n//$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n//$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n//$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n//$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-semibold;\n$btn-box-shadow: none;\n//$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: none;\n//$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: none;\n\n//$btn-link-disabled-color: $gray-600 !default;\n\n//$btn-block-spacing-y: .5rem !default;\n\n$btn-border-radius: 4px;\n//$btn-border-radius-lg: $border-radius-lg !default;\n//$btn-border-radius-sm: $border-radius-sm !default;\n\n//$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n// Forms\n$input-padding-y: .375rem;\n$input-padding-x: .4375rem;\n//$input-line-height: $input-btn-line-height !default;\n\n//$input-padding-y-sm: $input-btn-padding-y-sm !default;\n//$input-padding-x-sm: $input-btn-padding-x-sm !default;\n//$input-line-height-sm: $input-btn-line-height-sm !default;\n\n//$input-padding-y-lg: $input-btn-padding-y-lg !default;\n//$input-padding-x-lg: $input-btn-padding-x-lg !default;\n//$input-line-height-lg: $input-btn-line-height-lg !default;\n\n//$input-bg: $white !default;\n$input-disabled-bg: #eceeef;\n\n$input-color: $body-color;\n$input-border-color: $light-gray;\n//$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: none;\n\n//$input-border-radius: $border-radius !default;\n//$input-border-radius-lg: $border-radius-lg !default;\n//$input-border-radius-sm: $border-radius-sm !default;\n\n//$input-focus-bg: $input-bg !default;\n$input-focus-border-color: theme-color-hover("primary");\n//$input-focus-color: $input-color !default;\n//$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: none;\n\n$input-placeholder-color: $medium-gray;\n\n//$input-height-border: $input-border-width * 2 !default;\n\n//$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: 2.188rem;\n\n//$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n//$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n//$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: 2.188rem;\n\n//$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n//$form-text-margin-top: .25rem !default;\n\n//$form-check-input-gutter: 1.25rem !default;\n//$form-check-input-margin-y: .3rem !default;\n//$form-check-input-margin-x: .25rem !default;\n\n//$form-check-inline-margin-x: .75rem !default;\n//$form-check-inline-input-margin-x: .3125rem !default;\n\n//$form-group-margin-bottom: 1rem !default;\n\n//$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $extra-light-gray;\n//$input-group-addon-border-color: $input-border-color !default;\n\n//$custom-control-gutter: 1.5rem !default;\n//$custom-control-spacer-x: 1rem !default;\n\n//$custom-control-indicator-size: 1rem !default;\n//$custom-control-indicator-bg: $gray-300 !default;\n//$custom-control-indicator-bg-size: 50% 50% !default;\n//$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n//$custom-control-indicator-disabled-bg: $gray-200 !default;\n//$custom-control-label-disabled-color: $gray-600 !default;\n\n//$custom-control-indicator-checked-color: $component-active-color !default;\n//$custom-control-indicator-checked-bg: $component-active-bg !default;\n//$custom-control-indicator-checked-disabled-bg: rgba(theme-color("primary"), .5) !default;\n//$custom-control-indicator-checked-box-shadow: none !default;\n\n//$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n//$custom-control-indicator-active-color: $component-active-color !default;\n//$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n//$custom-control-indicator-active-box-shadow: none !default;\n\n//$custom-checkbox-indicator-border-radius: $border-radius !default;\n//$custom-checkbox-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 8 8\'%3E%3Cpath fill=\'#{$custom-control-indicator-checked-color}\' d=\'M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n//$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n//$custom-checkbox-indicator-icon-indeterminate: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 4\'%3E%3Cpath stroke=\'#{$custom-checkbox-indicator-indeterminate-color}\' d=\'M0 2h4\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n//$custom-radio-indicator-border-radius: 50% !default;\n//$custom-radio-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'-4 -4 8 8\'%3E%3Ccircle r=\'3\' fill=\'#{$custom-control-indicator-checked-color}\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$custom-select-padding-y: .375rem !default;\n//$custom-select-padding-x: .75rem !default;\n//$custom-select-height: $input-height !default;\n//$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n//$custom-select-line-height: $input-btn-line-height !default;\n//$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $medium-gray;\n//$custom-select-bg: $white !default;\n$custom-select-disabled-bg: $input-disabled-bg;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $input-color;\n//$custom-select-indicator: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 4 5\'%3E%3Cpath fill=\'#{$custom-select-indicator-color}\' d=\'M2 0L0 2h4zm0 5L0 3h4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$custom-select-border-width: $input-btn-border-width !default;\n//$custom-select-border-color: $input-border-color !default;\n//$custom-select-border-radius: $border-radius !default;\n\n$custom-select-focus-border-color: $input-focus-border-color;\n$custom-select-focus-box-shadow: $input-focus-box-shadow;\n\n//$custom-select-font-size-sm: 75% !default;\n//$custom-select-height-sm: $input-height-sm !default;\n\n//$custom-select-font-size-lg: 125% !default;\n//$custom-select-height-lg: $input-height-lg !default;\n\n//$custom-file-height: $input-height !default;\n//$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow;\n\n//$custom-file-padding-y: $input-btn-padding-y !default;\n//$custom-file-padding-x: $input-btn-padding-x !default;\n//$custom-file-line-height: $input-btn-line-height !default;\n//$custom-file-color: $input-color !default;\n//$custom-file-bg: $input-bg !default;\n//$custom-file-border-width: $input-btn-border-width !default;\n//$custom-file-border-color: $input-border-color !default;\n//$custom-file-border-radius: $input-border-radius !default;\n//$custom-file-box-shadow: $input-box-shadow !default;\n//$custom-file-button-color: $custom-file-color !default;\n//$custom-file-button-bg: $input-group-addon-bg !default;\n//$custom-file-text: (\n// en: "Browse"\n//) !default;\n\n$cursor-disabled: not-allowed; // PS custom\n\n// Form validation\n//$form-feedback-margin-top: $form-text-margin-top !default;\n//$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color("success");\n$form-feedback-invalid-color: theme-color("danger");\n$form-feedback-warning-color: theme-color("warning"); // PS custom\n\n// Dropdowns\n//$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: 0;\n//$dropdown-padding-y: .5rem !default;\n//$dropdown-spacer: .125rem !default;\n//$dropdown-bg: $white !default;\n$dropdown-border-color: $light-gray;\n//$dropdown-border-radius: $border-radius !default;\n//$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $light-gray;\n//$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $medium-gray;\n$dropdown-link-hover-color: theme-color("primary");\n$dropdown-link-hover-bg: $white;\n\n//$dropdown-link-active-color: $component-active-color !default;\n//$dropdown-link-active-bg: $component-active-bg !default;\n\n//$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-x: .3125rem;\n$dropdown-item-padding-y: .3125rem;\n\n//$dropdown-header-color: $gray-600 !default;\n\n// Navs\n$nav-link-padding-y: .9375rem;\n$nav-link-padding-x: 1.25rem;\n$nav-link-disabled-color: $light-gray;\n\n$nav-tabs-border-color: $white;\n//$nav-tabs-border-width: $border-width !default;\n//$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: theme-color("primary");\n$nav-tabs-link-active-color: $body-color;\n$nav-tabs-link-active-bg: $body-bg;\n$nav-tabs-link-active-border-color: theme-color("primary");\n\n$nav-pills-link-hover-border-color: $nav-tabs-link-hover-border-color;\n$nav-pills-link-active-color: $nav-tabs-link-active-color;\n$nav-pills-link-active-bg: #f4f9fb;\n$nav-pills-link-active-border-color: $nav-tabs-link-active-border-color; // PS custom\n\n//$nav-pills-border-radius: $border-radius !default;\n//$nav-pills-link-active-color: $component-active-color !default;\n//$nav-pills-link-active-bg: $component-active-bg !default;\n\n// Navbar\n//$navbar-padding-y: ($spacer / 2) !default;\n//$navbar-padding-x: $spacer !default;\n\n//$navbar-nav-link-padding-x: .5rem !default;\n\n//$navbar-brand-font-size: $font-size-lg !default;\n\n//$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n//$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n//$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n//$navbar-toggler-padding-y: .25rem !default;\n//$navbar-toggler-padding-x: .75rem !default;\n//$navbar-toggler-font-size: $font-size-lg !default;\n//$navbar-toggler-border-radius: $btn-border-radius !default;\n\n//$navbar-dark-color: rgba($white, .5) !default;\n//$navbar-dark-hover-color: rgba($white, .75) !default;\n//$navbar-dark-active-color: $white !default;\n//$navbar-dark-disabled-color: rgba($white, .25) !default;\n//$navbar-dark-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-dark-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n//$navbar-light-color: rgba($black, .5) !default;\n//$navbar-light-hover-color: rgba($black, .7) !default;\n//$navbar-light-active-color: rgba($black, .9) !default;\n//$navbar-light-disabled-color: rgba($black, .3) !default;\n//$navbar-light-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox=\'0 0 30 30\' xmlns=\'http://www.w3.org/2000/svg\'%3E%3Cpath stroke=\'#{$navbar-light-color}\' stroke-width=\'2\' stroke-linecap=\'round\' stroke-miterlimit=\'10\' d=\'M4 7h22M4 15h22M4 23h22\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n// Pagination\n$pagination-padding-y: .65rem;\n$pagination-padding-x: .5rem;\n//$pagination-padding-y-sm: .25rem !default;\n//$pagination-padding-x-sm: .5rem !default;\n//$pagination-padding-y-lg: .75rem !default;\n//$pagination-padding-x-lg: 1.5rem !default;\n//$pagination-line-height: 1.25 !default;\n\n$pagination-color: $medium-gray;\n$pagination-bg: $white;\n//$pagination-border-width: $border-width !default;\n$pagination-border-color: $white;\n\n//$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$pagination-hover-color: $pagination-color;\n$pagination-hover-bg: $pagination-bg;\n$pagination-hover-border-color: $pagination-border-color;\n\n$pagination-active-color: theme-color("primary");\n$pagination-active-bg: $pagination-bg;\n$pagination-active-border-color: $pagination-border-color;\n\n$pagination-disabled-color: $light-gray;\n$pagination-disabled-bg: $pagination-bg;\n$pagination-disabled-border-color: $pagination-border-color;\n\n// Jumbotron\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $extra-light-gray;\n\n// Cards\n$card-spacer-x: .625rem !default;\n$card-spacer-y: .625rem !default;\n$card-border-width: 1px !default;\n$card-border-radius: 5px !default;\n$card-border-radius-inner: $card-border-radius !default;\n$card-cap-bg: $gray-200 !default;\n$card-bg: #fff !default;\n$card-link-hover-color: #fff !default;\n$card-border-color: #dbe6e9 !default;\n//$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n//$card-cap-bg: rgba($black, .03) !default;\n//$card-bg: $white !default;\n\n//$card-img-overlay-padding: 1.25rem !default;\n\n//$card-group-margin: ($grid-gutter-width / 2) !default;\n//$card-deck-margin: $card-group-margin !default;\n\n//$card-columns-count: 3 !default;\n//$card-columns-gap: 1.25rem !default;\n//$card-columns-margin: $card-spacer-y !default;\n\n// Tooltips\n//$tooltip-font-size: $font-size-sm !default;\n//$tooltip-max-width: 200px !default;\n//$tooltip-color: $white !default;\n$tooltip-bg: $medium-gray;\n//$tooltip-border-radius: $border-radius !default;\n//$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .625rem;\n$tooltip-padding-x: 1.25rem;\n//$tooltip-margin: 0 !default;\n\n//$tooltip-arrow-width: .8rem !default;\n//$tooltip-arrow-height: .4rem !default;\n//$tooltip-arrow-color: $tooltip-bg !default;\n\n// Popovers\n//$popover-font-size: $font-size-sm !default;\n//$popover-bg: $white !default;\n//$popover-max-width: 276px !default;\n//$popover-border-width: $border-width !default;\n$popover-border-color: $light-gray;\n//$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: none;\n\n$popover-header-bg: $extra-light-gray;\n//$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .625rem;\n$popover-header-padding-x: 1.25rem;\n\n//$popover-body-color: $body-color !default;\n$popover-body-padding-y: .625rem;\n$popover-body-padding-x: 1.25rem;\n\n//$popover-arrow-width: 1rem !default;\n//$popover-arrow-height: .5rem !default;\n//$popover-arrow-color: $popover-bg !default;\n\n//$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n// Badges\n$badge-font-size: .625rem !default;\n$badge-font-weight: 500 !default;\n$badge-padding-y: .25rem;\n$badge-padding-x: .5rem;\n//$badge-border-radius: $border-radius !default;\n\n//$badge-pill-padding-x: .6em !default;\n//$badge-pill-border-radius: 10rem !default;\n\n// Modals\n$modal-inner-padding: 1.875rem;\n\n//$modal-dialog-margin: .5rem !default;\n//$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n//$modal-title-line-height: $line-height-base !default;\n\n//$modal-content-bg: $white !default;\n$modal-content-border-color: none;\n//$modal-content-border-width: $border-width !default;\n$modal-content-box-shadow-xs: 0 8px 16px 0 rgba(0, 0, 0, .1);\n$modal-content-box-shadow-sm-up: 0 8px 16px 0 rgba(0, 0, 0, .1);\n\n//$modal-backdrop-bg: $black !default;\n//$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: none;\n//$modal-footer-border-color: $modal-header-border-color !default;\n//$modal-header-border-width: $modal-content-border-width !default;\n//$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: $modal-inner-padding;\n\n$modal-lg: 900px;\n$modal-md: 680px;\n$modal-sm: 400px;\n\n//$modal-transition: transform .3s ease-out !default;\n\n// Alerts\n$alert-padding-y: 1rem !default;\n$alert-padding-x: 1rem;\n//$alert-margin-bottom: 1rem !default;\n//$alert-border-radius: $border-radius !default;\n//$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: .125rem;\n\n//$alert-bg-level: -10 !default;\n//$alert-border-level: -9 !default;\n//$alert-color-level: 6 !default;\n\n// Progress bars\n//$progress-height: 1rem !default;\n//$progress-font-size: ($font-size-base * .75) !default;\n//$progress-bg: $gray-200 !default;\n//$progress-border-radius: $border-radius !default;\n//$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n//$progress-bar-color: $white !default;\n//$progress-bar-bg: theme-color("primary") !default;\n//$progress-bar-animation-timing: 1s linear infinite !default;\n//$progress-bar-transition: width .6s ease !default;\n\n// List group\n//$list-group-bg: $white !default;\n$list-group-border-color: $light-gray;\n//$list-group-border-width: $border-width !default;\n//$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $input-padding-y;\n$list-group-item-padding-x: $input-padding-x;\n\n$list-group-hover-bg: theme-color-hover("primary");\n//$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: theme-color-hover("primary");\n//$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $light-gray;\n//$list-group-disabled-bg: $list-group-bg !default;\n\n//$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $white;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n// Image thumbnails\n$thumbnail-padding: 0;\n//$thumbnail-bg: $body-bg !default;\n//$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $light-gray;\n//$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: none;\n\n// Figures\n//$figure-caption-font-size: 90% !default;\n$figure-caption-color: $medium-gray;\n\n// Breadcrumbs\n$breadcrumb-padding-y: .3125rem;\n$breadcrumb-padding-x: .3125rem;\n$breadcrumb-item-padding: .3rem;\n\n$breadcrumb-margin-bottom: 0;\n\n$breadcrumb-bg: none;\n$breadcrumb-divider-color: $dark-gray;\n$breadcrumb-active-color: $extra-dark-gray;\n$breadcrumb-divider: "/";\n\n// Carousel\n//$carousel-control-color: $white !default;\n//$carousel-control-width: 15% !default;\n//$carousel-control-opacity: .5 !default;\n\n//$carousel-indicator-width: 30px !default;\n//$carousel-indicator-height: 3px !default;\n//$carousel-indicator-spacer: 3px !default;\n//$carousel-indicator-active-bg: $white !default;\n\n//$carousel-caption-width: 70% !default;\n//$carousel-caption-color: $white !default;\n\n//$carousel-control-icon-width: 20px !default;\n\n//$carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n//$carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' fill=\'#{$carousel-control-color}\' viewBox=\'0 0 8 8\'%3E%3Cpath d=\'M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z\'/%3E%3C/svg%3E"), "#", "%23") !default;\n\n//$carousel-transition: transform .6s ease !default;\n\n// Close\n//$close-font-size: $font-size-base * 1.5 !default;\n//$close-font-weight: $font-weight-bold !default;\n//$close-color: $black !default;\n//$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n//$code-font-size: 87.5% !default;\n$code-color: $body-color;\n\n//$kbd-padding-y: .2rem !default;\n//$kbd-padding-x: .4rem !default;\n//$kbd-font-size: $code-font-size !default;\n$kbd-color: $white;\n$kbd-bg: $extra-dark-gray;\n\n$pre-color: $body-color;\n//$pre-scrollable-max-height: 340px !default;\n\n// Printing\n//$print-page-size: a3 !default;\n//$print-body-min-width: map-get($grid-breakpoints, "lg") !default;\n'],sourceRoot:""}]);const l=a},23645:t=>{"use strict";t.exports=function(t){var n=[];return n.toString=function(){return this.map((function(n){var e=t(n);return n[2]?"@media ".concat(n[2]," {").concat(e,"}"):e})).join("")},n.i=function(t,e,r){"string"==typeof t&&(t=[[null,t,""]]);var i={};if(r)for(var o=0;o<this.length;o++){var a=this[o][0];null!=a&&(i[a]=!0)}for(var l=0;l<t.length;l++){var s=[].concat(t[l]);r&&i[s[0]]||(e&&(s[2]?s[2]="".concat(e," and ").concat(s[2]):s[2]=e),n.push(s))}},n}},94015:t=>{"use strict";function n(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,r=new Array(n);e<n;e++)r[e]=t[e];return r}t.exports=function(t){var e,r,i=(r=4,function(t){if(Array.isArray(t))return t}(e=t)||function(t,n){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t)){var e=[],r=!0,i=!1,o=void 0;try{for(var a,l=t[Symbol.iterator]();!(r=(a=l.next()).done)&&(e.push(a.value),!n||e.length!==n);r=!0);}catch(t){i=!0,o=t}finally{try{r||null==l.return||l.return()}finally{if(i)throw o}}return e}}(e,r)||function(t,e){if(t){if("string"==typeof t)return n(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(t,e):void 0}}(e,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),o=i[1],a=i[3];if("function"==typeof btoa){var l=btoa(unescape(encodeURIComponent(JSON.stringify(a)))),s="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(l),d="/*# ".concat(s," */"),u=a.sources.map((function(t){return"/*# sourceURL=".concat(a.sourceRoot||"").concat(t," */")}));return[o].concat(u).concat([d]).join("\n")}return[o].join("\n")}},17187:t=>{"use strict";var n,e="object"==typeof Reflect?Reflect:null,r=e&&"function"==typeof e.apply?e.apply:function(t,n,e){return Function.prototype.apply.call(t,n,e)};n=e&&"function"==typeof e.ownKeys?e.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};var i=Number.isNaN||function(t){return t!=t};function o(){o.init.call(this)}t.exports=o,o.EventEmitter=o,o.prototype._events=void 0,o.prototype._eventsCount=0,o.prototype._maxListeners=void 0;var a=10;function l(t){if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}function s(t){return void 0===t._maxListeners?o.defaultMaxListeners:t._maxListeners}function d(t,n,e,r){var i,o,a,d;if(l(e),void 0===(o=t._events)?(o=t._events=Object.create(null),t._eventsCount=0):(void 0!==o.newListener&&(t.emit("newListener",n,e.listener?e.listener:e),o=t._events),a=o[n]),void 0===a)a=o[n]=e,++t._eventsCount;else if("function"==typeof a?a=o[n]=r?[e,a]:[a,e]:r?a.unshift(e):a.push(e),(i=s(t))>0&&a.length>i&&!a.warned){a.warned=!0;var u=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(n)+" listeners added. Use emitter.setMaxListeners() to increase limit");u.name="MaxListenersExceededWarning",u.emitter=t,u.type=n,u.count=a.length,d=u,console&&console.warn&&console.warn(d)}return t}function u(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function c(t,n,e){var r={fired:!1,wrapFn:void 0,target:t,type:n,listener:e},i=u.bind(r);return i.listener=e,r.wrapFn=i,i}function p(t,n,e){var r=t._events;if(void 0===r)return[];var i=r[n];return void 0===i?[]:"function"==typeof i?e?[i.listener||i]:[i]:e?function(t){for(var n=new Array(t.length),e=0;e<n.length;++e)n[e]=t[e].listener||t[e];return n}(i):f(i,i.length)}function m(t){var n=this._events;if(void 0!==n){var e=n[t];if("function"==typeof e)return 1;if(void 0!==e)return e.length}return 0}function f(t,n){for(var e=new Array(n),r=0;r<n;++r)e[r]=t[r];return e}Object.defineProperty(o,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(t){if("number"!=typeof t||t<0||i(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");a=t}}),o.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},o.prototype.setMaxListeners=function(t){if("number"!=typeof t||t<0||i(t))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+t+".");return this._maxListeners=t,this},o.prototype.getMaxListeners=function(){return s(this)},o.prototype.emit=function(t){for(var n=[],e=1;e<arguments.length;e++)n.push(arguments[e]);var i="error"===t,o=this._events;if(void 0!==o)i=i&&void 0===o.error;else if(!i)return!1;if(i){var a;if(n.length>0&&(a=n[0]),a instanceof Error)throw a;var l=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw l.context=a,l}var s=o[t];if(void 0===s)return!1;if("function"==typeof s)r(s,this,n);else{var d=s.length,u=f(s,d);for(e=0;e<d;++e)r(u[e],this,n)}return!0},o.prototype.addListener=function(t,n){return d(this,t,n,!1)},o.prototype.on=o.prototype.addListener,o.prototype.prependListener=function(t,n){return d(this,t,n,!0)},o.prototype.once=function(t,n){return l(n),this.on(t,c(this,t,n)),this},o.prototype.prependOnceListener=function(t,n){return l(n),this.prependListener(t,c(this,t,n)),this},o.prototype.removeListener=function(t,n){var e,r,i,o,a;if(l(n),void 0===(r=this._events))return this;if(void 0===(e=r[t]))return this;if(e===n||e.listener===n)0==--this._eventsCount?this._events=Object.create(null):(delete r[t],r.removeListener&&this.emit("removeListener",t,e.listener||n));else if("function"!=typeof e){for(i=-1,o=e.length-1;o>=0;o--)if(e[o]===n||e[o].listener===n){a=e[o].listener,i=o;break}if(i<0)return this;0===i?e.shift():function(t,n){for(;n+1<t.length;n++)t[n]=t[n+1];t.pop()}(e,i),1===e.length&&(r[t]=e[0]),void 0!==r.removeListener&&this.emit("removeListener",t,a||n)}return this},o.prototype.off=o.prototype.removeListener,o.prototype.removeAllListeners=function(t){var n,e,r;if(void 0===(e=this._events))return this;if(void 0===e.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==e[t]&&(0==--this._eventsCount?this._events=Object.create(null):delete e[t]),this;if(0===arguments.length){var i,o=Object.keys(e);for(r=0;r<o.length;++r)"removeListener"!==(i=o[r])&&this.removeAllListeners(i);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(n=e[t]))this.removeListener(t,n);else if(void 0!==n)for(r=n.length-1;r>=0;r--)this.removeListener(t,n[r]);return this},o.prototype.listeners=function(t){return p(this,t,!0)},o.prototype.rawListeners=function(t){return p(this,t,!1)},o.listenerCount=function(t,n){return"function"==typeof t.listenerCount?t.listenerCount(n):m.call(t,n)},o.prototype.listenerCount=m,o.prototype.eventNames=function(){return this._eventsCount>0?n(this._events):[]}},2564:t=>{"use strict";var n=Object.assign||function(t){for(var n,e=1;e<arguments.length;e++)for(var r in n=arguments[e])Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r]);return t},e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};t.exports=new function t(){var r=this;(function(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")})(this,t),this.setRoutes=function(t){r.routesRouting=t||[]},this.getRoutes=function(){return r.routesRouting},this.setBaseUrl=function(t){r.contextRouting.base_url=t},this.getBaseUrl=function(){return r.contextRouting.base_url},this.setPrefix=function(t){r.contextRouting.prefix=t},this.setScheme=function(t){r.contextRouting.scheme=t},this.getScheme=function(){return r.contextRouting.scheme},this.setHost=function(t){r.contextRouting.host=t},this.getHost=function(){return r.contextRouting.host},this.buildQueryParams=function(t,n,i){var o=new RegExp(/\[]$/);n instanceof Array?n.forEach((function(n,a){o.test(t)?i(t,n):r.buildQueryParams(t+"["+("object"===(void 0===n?"undefined":e(n))?a:"")+"]",n,i)})):"object"===(void 0===n?"undefined":e(n))?Object.keys(n).forEach((function(e){return r.buildQueryParams(t+"["+e+"]",n[e],i)})):i(t,n)},this.getRoute=function(t){var n=r.contextRouting.prefix+t;if(r.routesRouting[n])return r.routesRouting[n];if(!r.routesRouting[t])throw new Error('The route "'+t+'" does not exist.');return r.routesRouting[t]},this.generate=function(t,e,i){var o=r.getRoute(t),a=e||{},l=n({},a),s="_scheme",d="",u=!0,c="";if((o.tokens||[]).forEach((function(n){if("text"===n[0])return d=n[1]+d,void(u=!1);if("variable"!==n[0])throw new Error('The token type "'+n[0]+'" is not supported.');var e=(o.defaults||{})[n[3]];if(0==u||!e||(a||{})[n[3]]&&a[n[3]]!==o.defaults[n[3]]){var r;if((a||{})[n[3]])r=a[n[3]],delete l[n[3]];else{if(!e){if(u)return;throw new Error('The route "'+t+'" requires the parameter "'+n[3]+'".')}r=o.defaults[n[3]]}if(!0!==r&&!1!==r&&""!==r||!u){var i=encodeURIComponent(r).replace(/%2F/g,"/");"null"===i&&null===r&&(i=""),d=n[1]+i+d}u=!1}else e&&delete l[n[3]]})),""==d&&(d="/"),(o.hosttokens||[]).forEach((function(t){var n;return"text"===t[0]?void(c=t[1]+c):void("variable"===t[0]&&((a||{})[t[3]]?(n=a[t[3]],delete l[t[3]]):o.defaults[t[3]]&&(n=o.defaults[t[3]]),c=t[1]+n+c))})),d=r.contextRouting.base_url+d,o.requirements[s]&&r.getScheme()!==o.requirements[s]?d=o.requirements[s]+"://"+(c||r.getHost())+d:c&&r.getHost()!==c?d=r.getScheme()+"://"+c+d:!0===i&&(d=r.getScheme()+"://"+r.getHost()+d),0<Object.keys(l).length){var p=[],m=function(t,n){var e=n;e=null===(e="function"==typeof e?e():e)?"":e,p.push(encodeURIComponent(t)+"="+encodeURIComponent(e))};Object.keys(l).forEach((function(t){return r.buildQueryParams(t,l[t],m)})),d=d+"?"+p.join("&").replace(/%20/g,"+")}return d},this.setData=function(t){r.setBaseUrl(t.base_url),r.setRoutes(t.routes),"prefix"in t&&r.setPrefix(t.prefix),r.setHost(t.host),r.setScheme(t.scheme)},this.contextRouting={base_url:"",prefix:"",host:"",scheme:""}}},96486:function(t,n,e){var r;t=e.nmd(t),function(){var i,o="Expected a function",a="__lodash_hash_undefined__",l="__lodash_placeholder__",s=32,d=128,u=1/0,c=9007199254740991,p=NaN,m=4294967295,f=[["ary",d],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",s],["partialRight",64],["rearg",256]],g="[object Arguments]",A="[object Array]",h="[object Boolean]",C="[object Date]",b="[object Error]",$="[object Function]",v="[object GeneratorFunction]",x="[object Map]",y="[object Number]",w="[object Object]",B="[object Promise]",k="[object RegExp]",_="[object Set]",I="[object String]",D="[object Symbol]",S="[object WeakMap]",z="[object ArrayBuffer]",E="[object DataView]",G="[object Float32Array]",T="[object Float64Array]",M="[object Int8Array]",j="[object Int16Array]",O="[object Int32Array]",F="[object Uint8Array]",L="[object Uint8ClampedArray]",P="[object Uint16Array]",R="[object Uint32Array]",q=/\b__p \+= '';/g,N=/\b(__p \+=) '' \+/g,Y=/(__e\(.*?\)|\b__t\)) \+\n'';/g,U=/&(?:amp|lt|gt|quot|#39);/g,W=/[&<>"']/g,H=RegExp(U.source),Q=RegExp(W.source),V=/<%-([\s\S]+?)%>/g,K=/<%([\s\S]+?)%>/g,X=/<%=([\s\S]+?)%>/g,Z=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,J=/^\w*$/,tt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,nt=/[\\^$.*+?()[\]{}|]/g,et=RegExp(nt.source),rt=/^\s+/,it=/\s/,ot=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,at=/\{\n\/\* \[wrapped with (.+)\] \*/,lt=/,? & /,st=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,dt=/[()=,{}\[\]\/\s]/,ut=/\\(\\)?/g,ct=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,pt=/\w*$/,mt=/^[-+]0x[0-9a-f]+$/i,ft=/^0b[01]+$/i,gt=/^\[object .+?Constructor\]$/,At=/^0o[0-7]+$/i,ht=/^(?:0|[1-9]\d*)$/,Ct=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,bt=/($^)/,$t=/['\n\r\u2028\u2029\\]/g,vt="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",xt="a-z\\xdf-\\xf6\\xf8-\\xff",yt="A-Z\\xc0-\\xd6\\xd8-\\xde",wt="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Bt="["+wt+"]",kt="["+vt+"]",_t="\\d+",It="["+xt+"]",Dt="[^\\ud800-\\udfff"+wt+_t+"\\u2700-\\u27bf"+xt+yt+"]",St="\\ud83c[\\udffb-\\udfff]",zt="[^\\ud800-\\udfff]",Et="(?:\\ud83c[\\udde6-\\uddff]){2}",Gt="[\\ud800-\\udbff][\\udc00-\\udfff]",Tt="["+yt+"]",Mt="(?:"+It+"|"+Dt+")",jt="(?:"+Tt+"|"+Dt+")",Ot="(?:['’](?:d|ll|m|re|s|t|ve))?",Ft="(?:['’](?:D|LL|M|RE|S|T|VE))?",Lt="(?:"+kt+"|"+St+")?",Pt="[\\ufe0e\\ufe0f]?",Rt=Pt+Lt+"(?:\\u200d(?:"+[zt,Et,Gt].join("|")+")"+Pt+Lt+")*",qt="(?:"+["[\\u2700-\\u27bf]",Et,Gt].join("|")+")"+Rt,Nt="(?:"+[zt+kt+"?",kt,Et,Gt,"[\\ud800-\\udfff]"].join("|")+")",Yt=RegExp("['’]","g"),Ut=RegExp(kt,"g"),Wt=RegExp(St+"(?="+St+")|"+Nt+Rt,"g"),Ht=RegExp([Tt+"?"+It+"+"+Ot+"(?="+[Bt,Tt,"$"].join("|")+")",jt+"+"+Ft+"(?="+[Bt,Tt+Mt,"$"].join("|")+")",Tt+"?"+Mt+"+"+Ot,Tt+"+"+Ft,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",_t,qt].join("|"),"g"),Qt=RegExp("[\\u200d\\ud800-\\udfff"+vt+"\\ufe0e\\ufe0f]"),Vt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Kt=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Xt=-1,Zt={};Zt[G]=Zt[T]=Zt[M]=Zt[j]=Zt[O]=Zt[F]=Zt[L]=Zt[P]=Zt[R]=!0,Zt[g]=Zt[A]=Zt[z]=Zt[h]=Zt[E]=Zt[C]=Zt[b]=Zt[$]=Zt[x]=Zt[y]=Zt[w]=Zt[k]=Zt[_]=Zt[I]=Zt[S]=!1;var Jt={};Jt[g]=Jt[A]=Jt[z]=Jt[E]=Jt[h]=Jt[C]=Jt[G]=Jt[T]=Jt[M]=Jt[j]=Jt[O]=Jt[x]=Jt[y]=Jt[w]=Jt[k]=Jt[_]=Jt[I]=Jt[D]=Jt[F]=Jt[L]=Jt[P]=Jt[R]=!0,Jt[b]=Jt[$]=Jt[S]=!1;var tn={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},nn=parseFloat,en=parseInt,rn="object"==typeof e.g&&e.g&&e.g.Object===Object&&e.g,on="object"==typeof self&&self&&self.Object===Object&&self,an=rn||on||Function("return this")(),ln=n&&!n.nodeType&&n,sn=ln&&t&&!t.nodeType&&t,dn=sn&&sn.exports===ln,un=dn&&rn.process,cn=function(){try{return sn&&sn.require&&sn.require("util").types||un&&un.binding&&un.binding("util")}catch(t){}}(),pn=cn&&cn.isArrayBuffer,mn=cn&&cn.isDate,fn=cn&&cn.isMap,gn=cn&&cn.isRegExp,An=cn&&cn.isSet,hn=cn&&cn.isTypedArray;function Cn(t,n,e){switch(e.length){case 0:return t.call(n);case 1:return t.call(n,e[0]);case 2:return t.call(n,e[0],e[1]);case 3:return t.call(n,e[0],e[1],e[2])}return t.apply(n,e)}function bn(t,n,e,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var a=t[i];n(r,a,e(a),t)}return r}function $n(t,n){for(var e=-1,r=null==t?0:t.length;++e<r&&!1!==n(t[e],e,t););return t}function vn(t,n){for(var e=null==t?0:t.length;e--&&!1!==n(t[e],e,t););return t}function xn(t,n){for(var e=-1,r=null==t?0:t.length;++e<r;)if(!n(t[e],e,t))return!1;return!0}function yn(t,n){for(var e=-1,r=null==t?0:t.length,i=0,o=[];++e<r;){var a=t[e];n(a,e,t)&&(o[i++]=a)}return o}function wn(t,n){return!(null==t||!t.length)&&Tn(t,n,0)>-1}function Bn(t,n,e){for(var r=-1,i=null==t?0:t.length;++r<i;)if(e(n,t[r]))return!0;return!1}function kn(t,n){for(var e=-1,r=null==t?0:t.length,i=Array(r);++e<r;)i[e]=n(t[e],e,t);return i}function _n(t,n){for(var e=-1,r=n.length,i=t.length;++e<r;)t[i+e]=n[e];return t}function In(t,n,e,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(e=t[++i]);++i<o;)e=n(e,t[i],i,t);return e}function Dn(t,n,e,r){var i=null==t?0:t.length;for(r&&i&&(e=t[--i]);i--;)e=n(e,t[i],i,t);return e}function Sn(t,n){for(var e=-1,r=null==t?0:t.length;++e<r;)if(n(t[e],e,t))return!0;return!1}var zn=Fn("length");function En(t,n,e){var r;return e(t,(function(t,e,i){if(n(t,e,i))return r=e,!1})),r}function Gn(t,n,e,r){for(var i=t.length,o=e+(r?1:-1);r?o--:++o<i;)if(n(t[o],o,t))return o;return-1}function Tn(t,n,e){return n==n?function(t,n,e){for(var r=e-1,i=t.length;++r<i;)if(t[r]===n)return r;return-1}(t,n,e):Gn(t,jn,e)}function Mn(t,n,e,r){for(var i=e-1,o=t.length;++i<o;)if(r(t[i],n))return i;return-1}function jn(t){return t!=t}function On(t,n){var e=null==t?0:t.length;return e?Rn(t,n)/e:p}function Fn(t){return function(n){return null==n?i:n[t]}}function Ln(t){return function(n){return null==t?i:t[n]}}function Pn(t,n,e,r,i){return i(t,(function(t,i,o){e=r?(r=!1,t):n(e,t,i,o)})),e}function Rn(t,n){for(var e,r=-1,o=t.length;++r<o;){var a=n(t[r]);a!==i&&(e=e===i?a:e+a)}return e}function qn(t,n){for(var e=-1,r=Array(t);++e<t;)r[e]=n(e);return r}function Nn(t){return t?t.slice(0,le(t)+1).replace(rt,""):t}function Yn(t){return function(n){return t(n)}}function Un(t,n){return kn(n,(function(n){return t[n]}))}function Wn(t,n){return t.has(n)}function Hn(t,n){for(var e=-1,r=t.length;++e<r&&Tn(n,t[e],0)>-1;);return e}function Qn(t,n){for(var e=t.length;e--&&Tn(n,t[e],0)>-1;);return e}function Vn(t,n){for(var e=t.length,r=0;e--;)t[e]===n&&++r;return r}var Kn=Ln({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"}),Xn=Ln({"&":"&","<":"<",">":">",'"':""","'":"'"});function Zn(t){return"\\"+tn[t]}function Jn(t){return Qt.test(t)}function te(t){var n=-1,e=Array(t.size);return t.forEach((function(t,r){e[++n]=[r,t]})),e}function ne(t,n){return function(e){return t(n(e))}}function ee(t,n){for(var e=-1,r=t.length,i=0,o=[];++e<r;){var a=t[e];a!==n&&a!==l||(t[e]=l,o[i++]=e)}return o}function re(t){var n=-1,e=Array(t.size);return t.forEach((function(t){e[++n]=t})),e}function ie(t){var n=-1,e=Array(t.size);return t.forEach((function(t){e[++n]=[t,t]})),e}function oe(t){return Jn(t)?function(t){for(var n=Wt.lastIndex=0;Wt.test(t);)++n;return n}(t):zn(t)}function ae(t){return Jn(t)?function(t){return t.match(Wt)||[]}(t):function(t){return t.split("")}(t)}function le(t){for(var n=t.length;n--&&it.test(t.charAt(n)););return n}var se=Ln({"&":"&","<":"<",">":">",""":'"',"'":"'"}),de=function t(n){var e,r=(n=null==n?an:de.defaults(an.Object(),n,de.pick(an,Kt))).Array,it=n.Date,vt=n.Error,xt=n.Function,yt=n.Math,wt=n.Object,Bt=n.RegExp,kt=n.String,_t=n.TypeError,It=r.prototype,Dt=xt.prototype,St=wt.prototype,zt=n["__core-js_shared__"],Et=Dt.toString,Gt=St.hasOwnProperty,Tt=0,Mt=(e=/[^.]+$/.exec(zt&&zt.keys&&zt.keys.IE_PROTO||""))?"Symbol(src)_1."+e:"",jt=St.toString,Ot=Et.call(wt),Ft=an._,Lt=Bt("^"+Et.call(Gt).replace(nt,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Pt=dn?n.Buffer:i,Rt=n.Symbol,qt=n.Uint8Array,Nt=Pt?Pt.allocUnsafe:i,Wt=ne(wt.getPrototypeOf,wt),Qt=wt.create,tn=St.propertyIsEnumerable,rn=It.splice,on=Rt?Rt.isConcatSpreadable:i,ln=Rt?Rt.iterator:i,sn=Rt?Rt.toStringTag:i,un=function(){try{var t=uo(wt,"defineProperty");return t({},"",{}),t}catch(t){}}(),cn=n.clearTimeout!==an.clearTimeout&&n.clearTimeout,zn=it&&it.now!==an.Date.now&&it.now,Ln=n.setTimeout!==an.setTimeout&&n.setTimeout,ue=yt.ceil,ce=yt.floor,pe=wt.getOwnPropertySymbols,me=Pt?Pt.isBuffer:i,fe=n.isFinite,ge=It.join,Ae=ne(wt.keys,wt),he=yt.max,Ce=yt.min,be=it.now,$e=n.parseInt,ve=yt.random,xe=It.reverse,ye=uo(n,"DataView"),we=uo(n,"Map"),Be=uo(n,"Promise"),ke=uo(n,"Set"),_e=uo(n,"WeakMap"),Ie=uo(wt,"create"),De=_e&&new _e,Se={},ze=Lo(ye),Ee=Lo(we),Ge=Lo(Be),Te=Lo(ke),Me=Lo(_e),je=Rt?Rt.prototype:i,Oe=je?je.valueOf:i,Fe=je?je.toString:i;function Le(t){if(el(t)&&!Ua(t)&&!(t instanceof Ne)){if(t instanceof qe)return t;if(Gt.call(t,"__wrapped__"))return Po(t)}return new qe(t)}var Pe=function(){function t(){}return function(n){if(!nl(n))return{};if(Qt)return Qt(n);t.prototype=n;var e=new t;return t.prototype=i,e}}();function Re(){}function qe(t,n){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!n,this.__index__=0,this.__values__=i}function Ne(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=m,this.__views__=[]}function Ye(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function Ue(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function We(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n<e;){var r=t[n];this.set(r[0],r[1])}}function He(t){var n=-1,e=null==t?0:t.length;for(this.__data__=new We;++n<e;)this.add(t[n])}function Qe(t){var n=this.__data__=new Ue(t);this.size=n.size}function Ve(t,n){var e=Ua(t),r=!e&&Ya(t),i=!e&&!r&&Va(t),o=!e&&!r&&!i&&ul(t),a=e||r||i||o,l=a?qn(t.length,kt):[],s=l.length;for(var d in t)!n&&!Gt.call(t,d)||a&&("length"==d||i&&("offset"==d||"parent"==d)||o&&("buffer"==d||"byteLength"==d||"byteOffset"==d)||ho(d,s))||l.push(d);return l}function Ke(t){var n=t.length;return n?t[Wr(0,n-1)]:i}function Xe(t,n){return To(_i(t),ar(n,0,t.length))}function Ze(t){return To(_i(t))}function Je(t,n,e){(e!==i&&!Ra(t[n],e)||e===i&&!(n in t))&&ir(t,n,e)}function tr(t,n,e){var r=t[n];Gt.call(t,n)&&Ra(r,e)&&(e!==i||n in t)||ir(t,n,e)}function nr(t,n){for(var e=t.length;e--;)if(Ra(t[e][0],n))return e;return-1}function er(t,n,e,r){return cr(t,(function(t,i,o){n(r,t,e(t),o)})),r}function rr(t,n){return t&&Ii(n,El(n),t)}function ir(t,n,e){"__proto__"==n&&un?un(t,n,{configurable:!0,enumerable:!0,value:e,writable:!0}):t[n]=e}function or(t,n){for(var e=-1,o=n.length,a=r(o),l=null==t;++e<o;)a[e]=l?i:_l(t,n[e]);return a}function ar(t,n,e){return t==t&&(e!==i&&(t=t<=e?t:e),n!==i&&(t=t>=n?t:n)),t}function lr(t,n,e,r,o,a){var l,s=1&n,d=2&n,u=4&n;if(e&&(l=o?e(t,r,o,a):e(t)),l!==i)return l;if(!nl(t))return t;var c=Ua(t);if(c){if(l=function(t){var n=t.length,e=new t.constructor(n);return n&&"string"==typeof t[0]&&Gt.call(t,"index")&&(e.index=t.index,e.input=t.input),e}(t),!s)return _i(t,l)}else{var p=mo(t),m=p==$||p==v;if(Va(t))return vi(t,s);if(p==w||p==g||m&&!o){if(l=d||m?{}:go(t),!s)return d?function(t,n){return Ii(t,po(t),n)}(t,function(t,n){return t&&Ii(n,Gl(n),t)}(l,t)):function(t,n){return Ii(t,co(t),n)}(t,rr(l,t))}else{if(!Jt[p])return o?t:{};l=function(t,n,e){var r,i=t.constructor;switch(n){case z:return xi(t);case h:case C:return new i(+t);case E:return function(t,n){var e=n?xi(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.byteLength)}(t,e);case G:case T:case M:case j:case O:case F:case L:case P:case R:return yi(t,e);case x:return new i;case y:case I:return new i(t);case k:return function(t){var n=new t.constructor(t.source,pt.exec(t));return n.lastIndex=t.lastIndex,n}(t);case _:return new i;case D:return r=t,Oe?wt(Oe.call(r)):{}}}(t,p,s)}}a||(a=new Qe);var f=a.get(t);if(f)return f;a.set(t,l),ll(t)?t.forEach((function(r){l.add(lr(r,n,e,r,t,a))})):rl(t)&&t.forEach((function(r,i){l.set(i,lr(r,n,e,i,t,a))}));var A=c?i:(u?d?eo:no:d?Gl:El)(t);return $n(A||t,(function(r,i){A&&(r=t[i=r]),tr(l,i,lr(r,n,e,i,t,a))})),l}function sr(t,n,e){var r=e.length;if(null==t)return!r;for(t=wt(t);r--;){var o=e[r],a=n[o],l=t[o];if(l===i&&!(o in t)||!a(l))return!1}return!0}function dr(t,n,e){if("function"!=typeof t)throw new _t(o);return So((function(){t.apply(i,e)}),n)}function ur(t,n,e,r){var i=-1,o=wn,a=!0,l=t.length,s=[],d=n.length;if(!l)return s;e&&(n=kn(n,Yn(e))),r?(o=Bn,a=!1):n.length>=200&&(o=Wn,a=!1,n=new He(n));t:for(;++i<l;){var u=t[i],c=null==e?u:e(u);if(u=r||0!==u?u:0,a&&c==c){for(var p=d;p--;)if(n[p]===c)continue t;s.push(u)}else o(n,c,r)||s.push(u)}return s}Le.templateSettings={escape:V,evaluate:K,interpolate:X,variable:"",imports:{_:Le}},Le.prototype=Re.prototype,Le.prototype.constructor=Le,qe.prototype=Pe(Re.prototype),qe.prototype.constructor=qe,Ne.prototype=Pe(Re.prototype),Ne.prototype.constructor=Ne,Ye.prototype.clear=function(){this.__data__=Ie?Ie(null):{},this.size=0},Ye.prototype.delete=function(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n},Ye.prototype.get=function(t){var n=this.__data__;if(Ie){var e=n[t];return e===a?i:e}return Gt.call(n,t)?n[t]:i},Ye.prototype.has=function(t){var n=this.__data__;return Ie?n[t]!==i:Gt.call(n,t)},Ye.prototype.set=function(t,n){var e=this.__data__;return this.size+=this.has(t)?0:1,e[t]=Ie&&n===i?a:n,this},Ue.prototype.clear=function(){this.__data__=[],this.size=0},Ue.prototype.delete=function(t){var n=this.__data__,e=nr(n,t);return!(e<0||(e==n.length-1?n.pop():rn.call(n,e,1),--this.size,0))},Ue.prototype.get=function(t){var n=this.__data__,e=nr(n,t);return e<0?i:n[e][1]},Ue.prototype.has=function(t){return nr(this.__data__,t)>-1},Ue.prototype.set=function(t,n){var e=this.__data__,r=nr(e,t);return r<0?(++this.size,e.push([t,n])):e[r][1]=n,this},We.prototype.clear=function(){this.size=0,this.__data__={hash:new Ye,map:new(we||Ue),string:new Ye}},We.prototype.delete=function(t){var n=lo(this,t).delete(t);return this.size-=n?1:0,n},We.prototype.get=function(t){return lo(this,t).get(t)},We.prototype.has=function(t){return lo(this,t).has(t)},We.prototype.set=function(t,n){var e=lo(this,t),r=e.size;return e.set(t,n),this.size+=e.size==r?0:1,this},He.prototype.add=He.prototype.push=function(t){return this.__data__.set(t,a),this},He.prototype.has=function(t){return this.__data__.has(t)},Qe.prototype.clear=function(){this.__data__=new Ue,this.size=0},Qe.prototype.delete=function(t){var n=this.__data__,e=n.delete(t);return this.size=n.size,e},Qe.prototype.get=function(t){return this.__data__.get(t)},Qe.prototype.has=function(t){return this.__data__.has(t)},Qe.prototype.set=function(t,n){var e=this.__data__;if(e instanceof Ue){var r=e.__data__;if(!we||r.length<199)return r.push([t,n]),this.size=++e.size,this;e=this.__data__=new We(r)}return e.set(t,n),this.size=e.size,this};var cr=zi(br),pr=zi($r,!0);function mr(t,n){var e=!0;return cr(t,(function(t,r,i){return e=!!n(t,r,i)})),e}function fr(t,n,e){for(var r=-1,o=t.length;++r<o;){var a=t[r],l=n(a);if(null!=l&&(s===i?l==l&&!dl(l):e(l,s)))var s=l,d=a}return d}function gr(t,n){var e=[];return cr(t,(function(t,r,i){n(t,r,i)&&e.push(t)})),e}function Ar(t,n,e,r,i){var o=-1,a=t.length;for(e||(e=Ao),i||(i=[]);++o<a;){var l=t[o];n>0&&e(l)?n>1?Ar(l,n-1,e,r,i):_n(i,l):r||(i[i.length]=l)}return i}var hr=Ei(),Cr=Ei(!0);function br(t,n){return t&&hr(t,n,El)}function $r(t,n){return t&&Cr(t,n,El)}function vr(t,n){return yn(n,(function(n){return Za(t[n])}))}function xr(t,n){for(var e=0,r=(n=hi(n,t)).length;null!=t&&e<r;)t=t[Fo(n[e++])];return e&&e==r?t:i}function yr(t,n,e){var r=n(t);return Ua(t)?r:_n(r,e(t))}function wr(t){return null==t?t===i?"[object Undefined]":"[object Null]":sn&&sn in wt(t)?function(t){var n=Gt.call(t,sn),e=t[sn];try{t[sn]=i;var r=!0}catch(t){}var o=jt.call(t);return r&&(n?t[sn]=e:delete t[sn]),o}(t):function(t){return jt.call(t)}(t)}function Br(t,n){return t>n}function kr(t,n){return null!=t&&Gt.call(t,n)}function _r(t,n){return null!=t&&n in wt(t)}function Ir(t,n,e){for(var o=e?Bn:wn,a=t[0].length,l=t.length,s=l,d=r(l),u=1/0,c=[];s--;){var p=t[s];s&&n&&(p=kn(p,Yn(n))),u=Ce(p.length,u),d[s]=!e&&(n||a>=120&&p.length>=120)?new He(s&&p):i}p=t[0];var m=-1,f=d[0];t:for(;++m<a&&c.length<u;){var g=p[m],A=n?n(g):g;if(g=e||0!==g?g:0,!(f?Wn(f,A):o(c,A,e))){for(s=l;--s;){var h=d[s];if(!(h?Wn(h,A):o(t[s],A,e)))continue t}f&&f.push(A),c.push(g)}}return c}function Dr(t,n,e){var r=null==(t=ko(t,n=hi(n,t)))?t:t[Fo(Xo(n))];return null==r?i:Cn(r,t,e)}function Sr(t){return el(t)&&wr(t)==g}function zr(t,n,e,r,o){return t===n||(null==t||null==n||!el(t)&&!el(n)?t!=t&&n!=n:function(t,n,e,r,o,a){var l=Ua(t),s=Ua(n),d=l?A:mo(t),u=s?A:mo(n),c=(d=d==g?w:d)==w,p=(u=u==g?w:u)==w,m=d==u;if(m&&Va(t)){if(!Va(n))return!1;l=!0,c=!1}if(m&&!c)return a||(a=new Qe),l||ul(t)?Ji(t,n,e,r,o,a):function(t,n,e,r,i,o,a){switch(e){case E:if(t.byteLength!=n.byteLength||t.byteOffset!=n.byteOffset)return!1;t=t.buffer,n=n.buffer;case z:return!(t.byteLength!=n.byteLength||!o(new qt(t),new qt(n)));case h:case C:case y:return Ra(+t,+n);case b:return t.name==n.name&&t.message==n.message;case k:case I:return t==n+"";case x:var l=te;case _:var s=1&r;if(l||(l=re),t.size!=n.size&&!s)return!1;var d=a.get(t);if(d)return d==n;r|=2,a.set(t,n);var u=Ji(l(t),l(n),r,i,o,a);return a.delete(t),u;case D:if(Oe)return Oe.call(t)==Oe.call(n)}return!1}(t,n,d,e,r,o,a);if(!(1&e)){var f=c&&Gt.call(t,"__wrapped__"),$=p&&Gt.call(n,"__wrapped__");if(f||$){var v=f?t.value():t,B=$?n.value():n;return a||(a=new Qe),o(v,B,e,r,a)}}return!!m&&(a||(a=new Qe),function(t,n,e,r,o,a){var l=1&e,s=no(t),d=s.length;if(d!=no(n).length&&!l)return!1;for(var u=d;u--;){var c=s[u];if(!(l?c in n:Gt.call(n,c)))return!1}var p=a.get(t),m=a.get(n);if(p&&m)return p==n&&m==t;var f=!0;a.set(t,n),a.set(n,t);for(var g=l;++u<d;){var A=t[c=s[u]],h=n[c];if(r)var C=l?r(h,A,c,n,t,a):r(A,h,c,t,n,a);if(!(C===i?A===h||o(A,h,e,r,a):C)){f=!1;break}g||(g="constructor"==c)}if(f&&!g){var b=t.constructor,$=n.constructor;b==$||!("constructor"in t)||!("constructor"in n)||"function"==typeof b&&b instanceof b&&"function"==typeof $&&$ instanceof $||(f=!1)}return a.delete(t),a.delete(n),f}(t,n,e,r,o,a))}(t,n,e,r,zr,o))}function Er(t,n,e,r){var o=e.length,a=o,l=!r;if(null==t)return!a;for(t=wt(t);o--;){var s=e[o];if(l&&s[2]?s[1]!==t[s[0]]:!(s[0]in t))return!1}for(;++o<a;){var d=(s=e[o])[0],u=t[d],c=s[1];if(l&&s[2]){if(u===i&&!(d in t))return!1}else{var p=new Qe;if(r)var m=r(u,c,d,t,n,p);if(!(m===i?zr(c,u,3,r,p):m))return!1}}return!0}function Gr(t){return!(!nl(t)||(n=t,Mt&&Mt in n))&&(Za(t)?Lt:gt).test(Lo(t));var n}function Tr(t){return"function"==typeof t?t:null==t?is:"object"==typeof t?Ua(t)?Lr(t[0],t[1]):Fr(t):ms(t)}function Mr(t){if(!xo(t))return Ae(t);var n=[];for(var e in wt(t))Gt.call(t,e)&&"constructor"!=e&&n.push(e);return n}function jr(t,n){return t<n}function Or(t,n){var e=-1,i=Ha(t)?r(t.length):[];return cr(t,(function(t,r,o){i[++e]=n(t,r,o)})),i}function Fr(t){var n=so(t);return 1==n.length&&n[0][2]?wo(n[0][0],n[0][1]):function(e){return e===t||Er(e,t,n)}}function Lr(t,n){return bo(t)&&yo(n)?wo(Fo(t),n):function(e){var r=_l(e,t);return r===i&&r===n?Il(e,t):zr(n,r,3)}}function Pr(t,n,e,r,o){t!==n&&hr(n,(function(a,l){if(o||(o=new Qe),nl(a))!function(t,n,e,r,o,a,l){var s=Io(t,e),d=Io(n,e),u=l.get(d);if(u)Je(t,e,u);else{var c=a?a(s,d,e+"",t,n,l):i,p=c===i;if(p){var m=Ua(d),f=!m&&Va(d),g=!m&&!f&&ul(d);c=d,m||f||g?Ua(s)?c=s:Qa(s)?c=_i(s):f?(p=!1,c=vi(d,!0)):g?(p=!1,c=yi(d,!0)):c=[]:ol(d)||Ya(d)?(c=s,Ya(s)?c=Cl(s):nl(s)&&!Za(s)||(c=go(d))):p=!1}p&&(l.set(d,c),o(c,d,r,a,l),l.delete(d)),Je(t,e,c)}}(t,n,l,e,Pr,r,o);else{var s=r?r(Io(t,l),a,l+"",t,n,o):i;s===i&&(s=a),Je(t,l,s)}}),Gl)}function Rr(t,n){var e=t.length;if(e)return ho(n+=n<0?e:0,e)?t[n]:i}function qr(t,n,e){n=n.length?kn(n,(function(t){return Ua(t)?function(n){return xr(n,1===t.length?t[0]:t)}:t})):[is];var r=-1;return n=kn(n,Yn(ao())),function(t,n){var r=t.length;for(t.sort((function(t,n){return function(t,n,e){for(var r=-1,i=t.criteria,o=n.criteria,a=i.length,l=e.length;++r<a;){var s=wi(i[r],o[r]);if(s)return r>=l?s:s*("desc"==e[r]?-1:1)}return t.index-n.index}(t,n,e)}));r--;)t[r]=t[r].value;return t}(Or(t,(function(t,e,i){return{criteria:kn(n,(function(n){return n(t)})),index:++r,value:t}})))}function Nr(t,n,e){for(var r=-1,i=n.length,o={};++r<i;){var a=n[r],l=xr(t,a);e(l,a)&&Xr(o,hi(a,t),l)}return o}function Yr(t,n,e,r){var i=r?Mn:Tn,o=-1,a=n.length,l=t;for(t===n&&(n=_i(n)),e&&(l=kn(t,Yn(e)));++o<a;)for(var s=0,d=n[o],u=e?e(d):d;(s=i(l,u,s,r))>-1;)l!==t&&rn.call(l,s,1),rn.call(t,s,1);return t}function Ur(t,n){for(var e=t?n.length:0,r=e-1;e--;){var i=n[e];if(e==r||i!==o){var o=i;ho(i)?rn.call(t,i,1):di(t,i)}}return t}function Wr(t,n){return t+ce(ve()*(n-t+1))}function Hr(t,n){var e="";if(!t||n<1||n>c)return e;do{n%2&&(e+=t),(n=ce(n/2))&&(t+=t)}while(n);return e}function Qr(t,n){return zo(Bo(t,n,is),t+"")}function Vr(t){return Ke(Rl(t))}function Kr(t,n){var e=Rl(t);return To(e,ar(n,0,e.length))}function Xr(t,n,e,r){if(!nl(t))return t;for(var o=-1,a=(n=hi(n,t)).length,l=a-1,s=t;null!=s&&++o<a;){var d=Fo(n[o]),u=e;if("__proto__"===d||"constructor"===d||"prototype"===d)return t;if(o!=l){var c=s[d];(u=r?r(c,d,s):i)===i&&(u=nl(c)?c:ho(n[o+1])?[]:{})}tr(s,d,u),s=s[d]}return t}var Zr=De?function(t,n){return De.set(t,n),t}:is,Jr=un?function(t,n){return un(t,"toString",{configurable:!0,enumerable:!1,value:ns(n),writable:!0})}:is;function ti(t){return To(Rl(t))}function ni(t,n,e){var i=-1,o=t.length;n<0&&(n=-n>o?0:o+n),(e=e>o?o:e)<0&&(e+=o),o=n>e?0:e-n>>>0,n>>>=0;for(var a=r(o);++i<o;)a[i]=t[i+n];return a}function ei(t,n){var e;return cr(t,(function(t,r,i){return!(e=n(t,r,i))})),!!e}function ri(t,n,e){var r=0,i=null==t?r:t.length;if("number"==typeof n&&n==n&&i<=2147483647){for(;r<i;){var o=r+i>>>1,a=t[o];null!==a&&!dl(a)&&(e?a<=n:a<n)?r=o+1:i=o}return i}return ii(t,n,is,e)}function ii(t,n,e,r){var o=0,a=null==t?0:t.length;if(0===a)return 0;for(var l=(n=e(n))!=n,s=null===n,d=dl(n),u=n===i;o<a;){var c=ce((o+a)/2),p=e(t[c]),m=p!==i,f=null===p,g=p==p,A=dl(p);if(l)var h=r||g;else h=u?g&&(r||m):s?g&&m&&(r||!f):d?g&&m&&!f&&(r||!A):!f&&!A&&(r?p<=n:p<n);h?o=c+1:a=c}return Ce(a,4294967294)}function oi(t,n){for(var e=-1,r=t.length,i=0,o=[];++e<r;){var a=t[e],l=n?n(a):a;if(!e||!Ra(l,s)){var s=l;o[i++]=0===a?0:a}}return o}function ai(t){return"number"==typeof t?t:dl(t)?p:+t}function li(t){if("string"==typeof t)return t;if(Ua(t))return kn(t,li)+"";if(dl(t))return Fe?Fe.call(t):"";var n=t+"";return"0"==n&&1/t==-1/0?"-0":n}function si(t,n,e){var r=-1,i=wn,o=t.length,a=!0,l=[],s=l;if(e)a=!1,i=Bn;else if(o>=200){var d=n?null:Hi(t);if(d)return re(d);a=!1,i=Wn,s=new He}else s=n?[]:l;t:for(;++r<o;){var u=t[r],c=n?n(u):u;if(u=e||0!==u?u:0,a&&c==c){for(var p=s.length;p--;)if(s[p]===c)continue t;n&&s.push(c),l.push(u)}else i(s,c,e)||(s!==l&&s.push(c),l.push(u))}return l}function di(t,n){return null==(t=ko(t,n=hi(n,t)))||delete t[Fo(Xo(n))]}function ui(t,n,e,r){return Xr(t,n,e(xr(t,n)),r)}function ci(t,n,e,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&n(t[o],o,t););return e?ni(t,r?0:o,r?o+1:i):ni(t,r?o+1:0,r?i:o)}function pi(t,n){var e=t;return e instanceof Ne&&(e=e.value()),In(n,(function(t,n){return n.func.apply(n.thisArg,_n([t],n.args))}),e)}function mi(t,n,e){var i=t.length;if(i<2)return i?si(t[0]):[];for(var o=-1,a=r(i);++o<i;)for(var l=t[o],s=-1;++s<i;)s!=o&&(a[o]=ur(a[o]||l,t[s],n,e));return si(Ar(a,1),n,e)}function fi(t,n,e){for(var r=-1,o=t.length,a=n.length,l={};++r<o;){var s=r<a?n[r]:i;e(l,t[r],s)}return l}function gi(t){return Qa(t)?t:[]}function Ai(t){return"function"==typeof t?t:is}function hi(t,n){return Ua(t)?t:bo(t,n)?[t]:Oo(bl(t))}var Ci=Qr;function bi(t,n,e){var r=t.length;return e=e===i?r:e,!n&&e>=r?t:ni(t,n,e)}var $i=cn||function(t){return an.clearTimeout(t)};function vi(t,n){if(n)return t.slice();var e=t.length,r=Nt?Nt(e):new t.constructor(e);return t.copy(r),r}function xi(t){var n=new t.constructor(t.byteLength);return new qt(n).set(new qt(t)),n}function yi(t,n){var e=n?xi(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.length)}function wi(t,n){if(t!==n){var e=t!==i,r=null===t,o=t==t,a=dl(t),l=n!==i,s=null===n,d=n==n,u=dl(n);if(!s&&!u&&!a&&t>n||a&&l&&d&&!s&&!u||r&&l&&d||!e&&d||!o)return 1;if(!r&&!a&&!u&&t<n||u&&e&&o&&!r&&!a||s&&e&&o||!l&&o||!d)return-1}return 0}function Bi(t,n,e,i){for(var o=-1,a=t.length,l=e.length,s=-1,d=n.length,u=he(a-l,0),c=r(d+u),p=!i;++s<d;)c[s]=n[s];for(;++o<l;)(p||o<a)&&(c[e[o]]=t[o]);for(;u--;)c[s++]=t[o++];return c}function ki(t,n,e,i){for(var o=-1,a=t.length,l=-1,s=e.length,d=-1,u=n.length,c=he(a-s,0),p=r(c+u),m=!i;++o<c;)p[o]=t[o];for(var f=o;++d<u;)p[f+d]=n[d];for(;++l<s;)(m||o<a)&&(p[f+e[l]]=t[o++]);return p}function _i(t,n){var e=-1,i=t.length;for(n||(n=r(i));++e<i;)n[e]=t[e];return n}function Ii(t,n,e,r){var o=!e;e||(e={});for(var a=-1,l=n.length;++a<l;){var s=n[a],d=r?r(e[s],t[s],s,e,t):i;d===i&&(d=t[s]),o?ir(e,s,d):tr(e,s,d)}return e}function Di(t,n){return function(e,r){var i=Ua(e)?bn:er,o=n?n():{};return i(e,t,ao(r,2),o)}}function Si(t){return Qr((function(n,e){var r=-1,o=e.length,a=o>1?e[o-1]:i,l=o>2?e[2]:i;for(a=t.length>3&&"function"==typeof a?(o--,a):i,l&&Co(e[0],e[1],l)&&(a=o<3?i:a,o=1),n=wt(n);++r<o;){var s=e[r];s&&t(n,s,r,a)}return n}))}function zi(t,n){return function(e,r){if(null==e)return e;if(!Ha(e))return t(e,r);for(var i=e.length,o=n?i:-1,a=wt(e);(n?o--:++o<i)&&!1!==r(a[o],o,a););return e}}function Ei(t){return function(n,e,r){for(var i=-1,o=wt(n),a=r(n),l=a.length;l--;){var s=a[t?l:++i];if(!1===e(o[s],s,o))break}return n}}function Gi(t){return function(n){var e=Jn(n=bl(n))?ae(n):i,r=e?e[0]:n.charAt(0),o=e?bi(e,1).join(""):n.slice(1);return r[t]()+o}}function Ti(t){return function(n){return In(Zl(Yl(n).replace(Yt,"")),t,"")}}function Mi(t){return function(){var n=arguments;switch(n.length){case 0:return new t;case 1:return new t(n[0]);case 2:return new t(n[0],n[1]);case 3:return new t(n[0],n[1],n[2]);case 4:return new t(n[0],n[1],n[2],n[3]);case 5:return new t(n[0],n[1],n[2],n[3],n[4]);case 6:return new t(n[0],n[1],n[2],n[3],n[4],n[5]);case 7:return new t(n[0],n[1],n[2],n[3],n[4],n[5],n[6])}var e=Pe(t.prototype),r=t.apply(e,n);return nl(r)?r:e}}function ji(t){return function(n,e,r){var o=wt(n);if(!Ha(n)){var a=ao(e,3);n=El(n),e=function(t){return a(o[t],t,o)}}var l=t(n,e,r);return l>-1?o[a?n[l]:l]:i}}function Oi(t){return to((function(n){var e=n.length,r=e,a=qe.prototype.thru;for(t&&n.reverse();r--;){var l=n[r];if("function"!=typeof l)throw new _t(o);if(a&&!s&&"wrapper"==io(l))var s=new qe([],!0)}for(r=s?r:e;++r<e;){var d=io(l=n[r]),u="wrapper"==d?ro(l):i;s=u&&$o(u[0])&&424==u[1]&&!u[4].length&&1==u[9]?s[io(u[0])].apply(s,u[3]):1==l.length&&$o(l)?s[d]():s.thru(l)}return function(){var t=arguments,r=t[0];if(s&&1==t.length&&Ua(r))return s.plant(r).value();for(var i=0,o=e?n[i].apply(this,t):r;++i<e;)o=n[i].call(this,o);return o}}))}function Fi(t,n,e,o,a,l,s,u,c,p){var m=n&d,f=1&n,g=2&n,A=24&n,h=512&n,C=g?i:Mi(t);return function i(){for(var d=arguments.length,b=r(d),$=d;$--;)b[$]=arguments[$];if(A)var v=oo(i),x=Vn(b,v);if(o&&(b=Bi(b,o,a,A)),l&&(b=ki(b,l,s,A)),d-=x,A&&d<p){var y=ee(b,v);return Ui(t,n,Fi,i.placeholder,e,b,y,u,c,p-d)}var w=f?e:this,B=g?w[t]:t;return d=b.length,u?b=_o(b,u):h&&d>1&&b.reverse(),m&&c<d&&(b.length=c),this&&this!==an&&this instanceof i&&(B=C||Mi(B)),B.apply(w,b)}}function Li(t,n){return function(e,r){return function(t,n,e,r){return br(t,(function(t,i,o){n(r,e(t),i,o)})),r}(e,t,n(r),{})}}function Pi(t,n){return function(e,r){var o;if(e===i&&r===i)return n;if(e!==i&&(o=e),r!==i){if(o===i)return r;"string"==typeof e||"string"==typeof r?(e=li(e),r=li(r)):(e=ai(e),r=ai(r)),o=t(e,r)}return o}}function Ri(t){return to((function(n){return n=kn(n,Yn(ao())),Qr((function(e){var r=this;return t(n,(function(t){return Cn(t,r,e)}))}))}))}function qi(t,n){var e=(n=n===i?" ":li(n)).length;if(e<2)return e?Hr(n,t):n;var r=Hr(n,ue(t/oe(n)));return Jn(n)?bi(ae(r),0,t).join(""):r.slice(0,t)}function Ni(t){return function(n,e,o){return o&&"number"!=typeof o&&Co(n,e,o)&&(e=o=i),n=fl(n),e===i?(e=n,n=0):e=fl(e),function(t,n,e,i){for(var o=-1,a=he(ue((n-t)/(e||1)),0),l=r(a);a--;)l[i?a:++o]=t,t+=e;return l}(n,e,o=o===i?n<e?1:-1:fl(o),t)}}function Yi(t){return function(n,e){return"string"==typeof n&&"string"==typeof e||(n=hl(n),e=hl(e)),t(n,e)}}function Ui(t,n,e,r,o,a,l,d,u,c){var p=8&n;n|=p?s:64,4&(n&=~(p?64:s))||(n&=-4);var m=[t,n,o,p?a:i,p?l:i,p?i:a,p?i:l,d,u,c],f=e.apply(i,m);return $o(t)&&Do(f,m),f.placeholder=r,Eo(f,t,n)}function Wi(t){var n=yt[t];return function(t,e){if(t=hl(t),(e=null==e?0:Ce(gl(e),292))&&fe(t)){var r=(bl(t)+"e").split("e");return+((r=(bl(n(r[0]+"e"+(+r[1]+e)))+"e").split("e"))[0]+"e"+(+r[1]-e))}return n(t)}}var Hi=ke&&1/re(new ke([,-0]))[1]==u?function(t){return new ke(t)}:ds;function Qi(t){return function(n){var e=mo(n);return e==x?te(n):e==_?ie(n):function(t,n){return kn(n,(function(n){return[n,t[n]]}))}(n,t(n))}}function Vi(t,n,e,a,u,c,p,m){var f=2&n;if(!f&&"function"!=typeof t)throw new _t(o);var g=a?a.length:0;if(g||(n&=-97,a=u=i),p=p===i?p:he(gl(p),0),m=m===i?m:gl(m),g-=u?u.length:0,64&n){var A=a,h=u;a=u=i}var C=f?i:ro(t),b=[t,n,e,a,u,A,h,c,p,m];if(C&&function(t,n){var e=t[1],r=n[1],i=e|r,o=i<131,a=r==d&&8==e||r==d&&256==e&&t[7].length<=n[8]||384==r&&n[7].length<=n[8]&&8==e;if(!o&&!a)return t;1&r&&(t[2]=n[2],i|=1&e?0:4);var s=n[3];if(s){var u=t[3];t[3]=u?Bi(u,s,n[4]):s,t[4]=u?ee(t[3],l):n[4]}(s=n[5])&&(u=t[5],t[5]=u?ki(u,s,n[6]):s,t[6]=u?ee(t[5],l):n[6]),(s=n[7])&&(t[7]=s),r&d&&(t[8]=null==t[8]?n[8]:Ce(t[8],n[8])),null==t[9]&&(t[9]=n[9]),t[0]=n[0],t[1]=i}(b,C),t=b[0],n=b[1],e=b[2],a=b[3],u=b[4],!(m=b[9]=b[9]===i?f?0:t.length:he(b[9]-g,0))&&24&n&&(n&=-25),n&&1!=n)$=8==n||16==n?function(t,n,e){var o=Mi(t);return function a(){for(var l=arguments.length,s=r(l),d=l,u=oo(a);d--;)s[d]=arguments[d];var c=l<3&&s[0]!==u&&s[l-1]!==u?[]:ee(s,u);return(l-=c.length)<e?Ui(t,n,Fi,a.placeholder,i,s,c,i,i,e-l):Cn(this&&this!==an&&this instanceof a?o:t,this,s)}}(t,n,m):n!=s&&33!=n||u.length?Fi.apply(i,b):function(t,n,e,i){var o=1&n,a=Mi(t);return function n(){for(var l=-1,s=arguments.length,d=-1,u=i.length,c=r(u+s),p=this&&this!==an&&this instanceof n?a:t;++d<u;)c[d]=i[d];for(;s--;)c[d++]=arguments[++l];return Cn(p,o?e:this,c)}}(t,n,e,a);else var $=function(t,n,e){var r=1&n,i=Mi(t);return function n(){return(this&&this!==an&&this instanceof n?i:t).apply(r?e:this,arguments)}}(t,n,e);return Eo((C?Zr:Do)($,b),t,n)}function Ki(t,n,e,r){return t===i||Ra(t,St[e])&&!Gt.call(r,e)?n:t}function Xi(t,n,e,r,o,a){return nl(t)&&nl(n)&&(a.set(n,t),Pr(t,n,i,Xi,a),a.delete(n)),t}function Zi(t){return ol(t)?i:t}function Ji(t,n,e,r,o,a){var l=1&e,s=t.length,d=n.length;if(s!=d&&!(l&&d>s))return!1;var u=a.get(t),c=a.get(n);if(u&&c)return u==n&&c==t;var p=-1,m=!0,f=2&e?new He:i;for(a.set(t,n),a.set(n,t);++p<s;){var g=t[p],A=n[p];if(r)var h=l?r(A,g,p,n,t,a):r(g,A,p,t,n,a);if(h!==i){if(h)continue;m=!1;break}if(f){if(!Sn(n,(function(t,n){if(!Wn(f,n)&&(g===t||o(g,t,e,r,a)))return f.push(n)}))){m=!1;break}}else if(g!==A&&!o(g,A,e,r,a)){m=!1;break}}return a.delete(t),a.delete(n),m}function to(t){return zo(Bo(t,i,Wo),t+"")}function no(t){return yr(t,El,co)}function eo(t){return yr(t,Gl,po)}var ro=De?function(t){return De.get(t)}:ds;function io(t){for(var n=t.name+"",e=Se[n],r=Gt.call(Se,n)?e.length:0;r--;){var i=e[r],o=i.func;if(null==o||o==t)return i.name}return n}function oo(t){return(Gt.call(Le,"placeholder")?Le:t).placeholder}function ao(){var t=Le.iteratee||os;return t=t===os?Tr:t,arguments.length?t(arguments[0],arguments[1]):t}function lo(t,n){var e,r,i=t.__data__;return("string"==(r=typeof(e=n))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==e:null===e)?i["string"==typeof n?"string":"hash"]:i.map}function so(t){for(var n=El(t),e=n.length;e--;){var r=n[e],i=t[r];n[e]=[r,i,yo(i)]}return n}function uo(t,n){var e=function(t,n){return null==t?i:t[n]}(t,n);return Gr(e)?e:i}var co=pe?function(t){return null==t?[]:(t=wt(t),yn(pe(t),(function(n){return tn.call(t,n)})))}:As,po=pe?function(t){for(var n=[];t;)_n(n,co(t)),t=Wt(t);return n}:As,mo=wr;function fo(t,n,e){for(var r=-1,i=(n=hi(n,t)).length,o=!1;++r<i;){var a=Fo(n[r]);if(!(o=null!=t&&e(t,a)))break;t=t[a]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&tl(i)&&ho(a,i)&&(Ua(t)||Ya(t))}function go(t){return"function"!=typeof t.constructor||xo(t)?{}:Pe(Wt(t))}function Ao(t){return Ua(t)||Ya(t)||!!(on&&t&&t[on])}function ho(t,n){var e=typeof t;return!!(n=null==n?c:n)&&("number"==e||"symbol"!=e&&ht.test(t))&&t>-1&&t%1==0&&t<n}function Co(t,n,e){if(!nl(e))return!1;var r=typeof n;return!!("number"==r?Ha(e)&&ho(n,e.length):"string"==r&&n in e)&&Ra(e[n],t)}function bo(t,n){if(Ua(t))return!1;var e=typeof t;return!("number"!=e&&"symbol"!=e&&"boolean"!=e&&null!=t&&!dl(t))||J.test(t)||!Z.test(t)||null!=n&&t in wt(n)}function $o(t){var n=io(t),e=Le[n];if("function"!=typeof e||!(n in Ne.prototype))return!1;if(t===e)return!0;var r=ro(e);return!!r&&t===r[0]}(ye&&mo(new ye(new ArrayBuffer(1)))!=E||we&&mo(new we)!=x||Be&&mo(Be.resolve())!=B||ke&&mo(new ke)!=_||_e&&mo(new _e)!=S)&&(mo=function(t){var n=wr(t),e=n==w?t.constructor:i,r=e?Lo(e):"";if(r)switch(r){case ze:return E;case Ee:return x;case Ge:return B;case Te:return _;case Me:return S}return n});var vo=zt?Za:hs;function xo(t){var n=t&&t.constructor;return t===("function"==typeof n&&n.prototype||St)}function yo(t){return t==t&&!nl(t)}function wo(t,n){return function(e){return null!=e&&e[t]===n&&(n!==i||t in wt(e))}}function Bo(t,n,e){return n=he(n===i?t.length-1:n,0),function(){for(var i=arguments,o=-1,a=he(i.length-n,0),l=r(a);++o<a;)l[o]=i[n+o];o=-1;for(var s=r(n+1);++o<n;)s[o]=i[o];return s[n]=e(l),Cn(t,this,s)}}function ko(t,n){return n.length<2?t:xr(t,ni(n,0,-1))}function _o(t,n){for(var e=t.length,r=Ce(n.length,e),o=_i(t);r--;){var a=n[r];t[r]=ho(a,e)?o[a]:i}return t}function Io(t,n){if(("constructor"!==n||"function"!=typeof t[n])&&"__proto__"!=n)return t[n]}var Do=Go(Zr),So=Ln||function(t,n){return an.setTimeout(t,n)},zo=Go(Jr);function Eo(t,n,e){var r=n+"";return zo(t,function(t,n){var e=n.length;if(!e)return t;var r=e-1;return n[r]=(e>1?"& ":"")+n[r],n=n.join(e>2?", ":" "),t.replace(ot,"{\n/* [wrapped with "+n+"] */\n")}(r,function(t,n){return $n(f,(function(e){var r="_."+e[0];n&e[1]&&!wn(t,r)&&t.push(r)})),t.sort()}(function(t){var n=t.match(at);return n?n[1].split(lt):[]}(r),e)))}function Go(t){var n=0,e=0;return function(){var r=be(),o=16-(r-e);if(e=r,o>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(i,arguments)}}function To(t,n){var e=-1,r=t.length,o=r-1;for(n=n===i?r:n;++e<n;){var a=Wr(e,o),l=t[a];t[a]=t[e],t[e]=l}return t.length=n,t}var Mo,jo,Oo=(Mo=Ma((function(t){var n=[];return 46===t.charCodeAt(0)&&n.push(""),t.replace(tt,(function(t,e,r,i){n.push(r?i.replace(ut,"$1"):e||t)})),n}),(function(t){return 500===jo.size&&jo.clear(),t})),jo=Mo.cache,Mo);function Fo(t){if("string"==typeof t||dl(t))return t;var n=t+"";return"0"==n&&1/t==-1/0?"-0":n}function Lo(t){if(null!=t){try{return Et.call(t)}catch(t){}try{return t+""}catch(t){}}return""}function Po(t){if(t instanceof Ne)return t.clone();var n=new qe(t.__wrapped__,t.__chain__);return n.__actions__=_i(t.__actions__),n.__index__=t.__index__,n.__values__=t.__values__,n}var Ro=Qr((function(t,n){return Qa(t)?ur(t,Ar(n,1,Qa,!0)):[]})),qo=Qr((function(t,n){var e=Xo(n);return Qa(e)&&(e=i),Qa(t)?ur(t,Ar(n,1,Qa,!0),ao(e,2)):[]})),No=Qr((function(t,n){var e=Xo(n);return Qa(e)&&(e=i),Qa(t)?ur(t,Ar(n,1,Qa,!0),i,e):[]}));function Yo(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var i=null==e?0:gl(e);return i<0&&(i=he(r+i,0)),Gn(t,ao(n,3),i)}function Uo(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var o=r-1;return e!==i&&(o=gl(e),o=e<0?he(r+o,0):Ce(o,r-1)),Gn(t,ao(n,3),o,!0)}function Wo(t){return null!=t&&t.length?Ar(t,1):[]}function Ho(t){return t&&t.length?t[0]:i}var Qo=Qr((function(t){var n=kn(t,gi);return n.length&&n[0]===t[0]?Ir(n):[]})),Vo=Qr((function(t){var n=Xo(t),e=kn(t,gi);return n===Xo(e)?n=i:e.pop(),e.length&&e[0]===t[0]?Ir(e,ao(n,2)):[]})),Ko=Qr((function(t){var n=Xo(t),e=kn(t,gi);return(n="function"==typeof n?n:i)&&e.pop(),e.length&&e[0]===t[0]?Ir(e,i,n):[]}));function Xo(t){var n=null==t?0:t.length;return n?t[n-1]:i}var Zo=Qr(Jo);function Jo(t,n){return t&&t.length&&n&&n.length?Yr(t,n):t}var ta=to((function(t,n){var e=null==t?0:t.length,r=or(t,n);return Ur(t,kn(n,(function(t){return ho(t,e)?+t:t})).sort(wi)),r}));function na(t){return null==t?t:xe.call(t)}var ea=Qr((function(t){return si(Ar(t,1,Qa,!0))})),ra=Qr((function(t){var n=Xo(t);return Qa(n)&&(n=i),si(Ar(t,1,Qa,!0),ao(n,2))})),ia=Qr((function(t){var n=Xo(t);return n="function"==typeof n?n:i,si(Ar(t,1,Qa,!0),i,n)}));function oa(t){if(!t||!t.length)return[];var n=0;return t=yn(t,(function(t){if(Qa(t))return n=he(t.length,n),!0})),qn(n,(function(n){return kn(t,Fn(n))}))}function aa(t,n){if(!t||!t.length)return[];var e=oa(t);return null==n?e:kn(e,(function(t){return Cn(n,i,t)}))}var la=Qr((function(t,n){return Qa(t)?ur(t,n):[]})),sa=Qr((function(t){return mi(yn(t,Qa))})),da=Qr((function(t){var n=Xo(t);return Qa(n)&&(n=i),mi(yn(t,Qa),ao(n,2))})),ua=Qr((function(t){var n=Xo(t);return n="function"==typeof n?n:i,mi(yn(t,Qa),i,n)})),ca=Qr(oa),pa=Qr((function(t){var n=t.length,e=n>1?t[n-1]:i;return e="function"==typeof e?(t.pop(),e):i,aa(t,e)}));function ma(t){var n=Le(t);return n.__chain__=!0,n}function fa(t,n){return n(t)}var ga=to((function(t){var n=t.length,e=n?t[0]:0,r=this.__wrapped__,o=function(n){return or(n,t)};return!(n>1||this.__actions__.length)&&r instanceof Ne&&ho(e)?((r=r.slice(e,+e+(n?1:0))).__actions__.push({func:fa,args:[o],thisArg:i}),new qe(r,this.__chain__).thru((function(t){return n&&!t.length&&t.push(i),t}))):this.thru(o)})),Aa=Di((function(t,n,e){Gt.call(t,e)?++t[e]:ir(t,e,1)})),ha=ji(Yo),Ca=ji(Uo);function ba(t,n){return(Ua(t)?$n:cr)(t,ao(n,3))}function $a(t,n){return(Ua(t)?vn:pr)(t,ao(n,3))}var va=Di((function(t,n,e){Gt.call(t,e)?t[e].push(n):ir(t,e,[n])})),xa=Qr((function(t,n,e){var i=-1,o="function"==typeof n,a=Ha(t)?r(t.length):[];return cr(t,(function(t){a[++i]=o?Cn(n,t,e):Dr(t,n,e)})),a})),ya=Di((function(t,n,e){ir(t,e,n)}));function wa(t,n){return(Ua(t)?kn:Or)(t,ao(n,3))}var Ba=Di((function(t,n,e){t[e?0:1].push(n)}),(function(){return[[],[]]})),ka=Qr((function(t,n){if(null==t)return[];var e=n.length;return e>1&&Co(t,n[0],n[1])?n=[]:e>2&&Co(n[0],n[1],n[2])&&(n=[n[0]]),qr(t,Ar(n,1),[])})),_a=zn||function(){return an.Date.now()};function Ia(t,n,e){return n=e?i:n,n=t&&null==n?t.length:n,Vi(t,d,i,i,i,i,n)}function Da(t,n){var e;if("function"!=typeof n)throw new _t(o);return t=gl(t),function(){return--t>0&&(e=n.apply(this,arguments)),t<=1&&(n=i),e}}var Sa=Qr((function(t,n,e){var r=1;if(e.length){var i=ee(e,oo(Sa));r|=s}return Vi(t,r,n,e,i)})),za=Qr((function(t,n,e){var r=3;if(e.length){var i=ee(e,oo(za));r|=s}return Vi(n,r,t,e,i)}));function Ea(t,n,e){var r,a,l,s,d,u,c=0,p=!1,m=!1,f=!0;if("function"!=typeof t)throw new _t(o);function g(n){var e=r,o=a;return r=a=i,c=n,s=t.apply(o,e)}function A(t){return c=t,d=So(C,n),p?g(t):s}function h(t){var e=t-u;return u===i||e>=n||e<0||m&&t-c>=l}function C(){var t=_a();if(h(t))return b(t);d=So(C,function(t){var e=n-(t-u);return m?Ce(e,l-(t-c)):e}(t))}function b(t){return d=i,f&&r?g(t):(r=a=i,s)}function $(){var t=_a(),e=h(t);if(r=arguments,a=this,u=t,e){if(d===i)return A(u);if(m)return $i(d),d=So(C,n),g(u)}return d===i&&(d=So(C,n)),s}return n=hl(n)||0,nl(e)&&(p=!!e.leading,l=(m="maxWait"in e)?he(hl(e.maxWait)||0,n):l,f="trailing"in e?!!e.trailing:f),$.cancel=function(){d!==i&&$i(d),c=0,r=u=a=d=i},$.flush=function(){return d===i?s:b(_a())},$}var Ga=Qr((function(t,n){return dr(t,1,n)})),Ta=Qr((function(t,n,e){return dr(t,hl(n)||0,e)}));function Ma(t,n){if("function"!=typeof t||null!=n&&"function"!=typeof n)throw new _t(o);var e=function(){var r=arguments,i=n?n.apply(this,r):r[0],o=e.cache;if(o.has(i))return o.get(i);var a=t.apply(this,r);return e.cache=o.set(i,a)||o,a};return e.cache=new(Ma.Cache||We),e}function ja(t){if("function"!=typeof t)throw new _t(o);return function(){var n=arguments;switch(n.length){case 0:return!t.call(this);case 1:return!t.call(this,n[0]);case 2:return!t.call(this,n[0],n[1]);case 3:return!t.call(this,n[0],n[1],n[2])}return!t.apply(this,n)}}Ma.Cache=We;var Oa=Ci((function(t,n){var e=(n=1==n.length&&Ua(n[0])?kn(n[0],Yn(ao())):kn(Ar(n,1),Yn(ao()))).length;return Qr((function(r){for(var i=-1,o=Ce(r.length,e);++i<o;)r[i]=n[i].call(this,r[i]);return Cn(t,this,r)}))})),Fa=Qr((function(t,n){var e=ee(n,oo(Fa));return Vi(t,s,i,n,e)})),La=Qr((function(t,n){var e=ee(n,oo(La));return Vi(t,64,i,n,e)})),Pa=to((function(t,n){return Vi(t,256,i,i,i,n)}));function Ra(t,n){return t===n||t!=t&&n!=n}var qa=Yi(Br),Na=Yi((function(t,n){return t>=n})),Ya=Sr(function(){return arguments}())?Sr:function(t){return el(t)&&Gt.call(t,"callee")&&!tn.call(t,"callee")},Ua=r.isArray,Wa=pn?Yn(pn):function(t){return el(t)&&wr(t)==z};function Ha(t){return null!=t&&tl(t.length)&&!Za(t)}function Qa(t){return el(t)&&Ha(t)}var Va=me||hs,Ka=mn?Yn(mn):function(t){return el(t)&&wr(t)==C};function Xa(t){if(!el(t))return!1;var n=wr(t);return n==b||"[object DOMException]"==n||"string"==typeof t.message&&"string"==typeof t.name&&!ol(t)}function Za(t){if(!nl(t))return!1;var n=wr(t);return n==$||n==v||"[object AsyncFunction]"==n||"[object Proxy]"==n}function Ja(t){return"number"==typeof t&&t==gl(t)}function tl(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=c}function nl(t){var n=typeof t;return null!=t&&("object"==n||"function"==n)}function el(t){return null!=t&&"object"==typeof t}var rl=fn?Yn(fn):function(t){return el(t)&&mo(t)==x};function il(t){return"number"==typeof t||el(t)&&wr(t)==y}function ol(t){if(!el(t)||wr(t)!=w)return!1;var n=Wt(t);if(null===n)return!0;var e=Gt.call(n,"constructor")&&n.constructor;return"function"==typeof e&&e instanceof e&&Et.call(e)==Ot}var al=gn?Yn(gn):function(t){return el(t)&&wr(t)==k},ll=An?Yn(An):function(t){return el(t)&&mo(t)==_};function sl(t){return"string"==typeof t||!Ua(t)&&el(t)&&wr(t)==I}function dl(t){return"symbol"==typeof t||el(t)&&wr(t)==D}var ul=hn?Yn(hn):function(t){return el(t)&&tl(t.length)&&!!Zt[wr(t)]},cl=Yi(jr),pl=Yi((function(t,n){return t<=n}));function ml(t){if(!t)return[];if(Ha(t))return sl(t)?ae(t):_i(t);if(ln&&t[ln])return function(t){for(var n,e=[];!(n=t.next()).done;)e.push(n.value);return e}(t[ln]());var n=mo(t);return(n==x?te:n==_?re:Rl)(t)}function fl(t){return t?(t=hl(t))===u||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function gl(t){var n=fl(t),e=n%1;return n==n?e?n-e:n:0}function Al(t){return t?ar(gl(t),0,m):0}function hl(t){if("number"==typeof t)return t;if(dl(t))return p;if(nl(t)){var n="function"==typeof t.valueOf?t.valueOf():t;t=nl(n)?n+"":n}if("string"!=typeof t)return 0===t?t:+t;t=Nn(t);var e=ft.test(t);return e||At.test(t)?en(t.slice(2),e?2:8):mt.test(t)?p:+t}function Cl(t){return Ii(t,Gl(t))}function bl(t){return null==t?"":li(t)}var $l=Si((function(t,n){if(xo(n)||Ha(n))Ii(n,El(n),t);else for(var e in n)Gt.call(n,e)&&tr(t,e,n[e])})),vl=Si((function(t,n){Ii(n,Gl(n),t)})),xl=Si((function(t,n,e,r){Ii(n,Gl(n),t,r)})),yl=Si((function(t,n,e,r){Ii(n,El(n),t,r)})),wl=to(or),Bl=Qr((function(t,n){t=wt(t);var e=-1,r=n.length,o=r>2?n[2]:i;for(o&&Co(n[0],n[1],o)&&(r=1);++e<r;)for(var a=n[e],l=Gl(a),s=-1,d=l.length;++s<d;){var u=l[s],c=t[u];(c===i||Ra(c,St[u])&&!Gt.call(t,u))&&(t[u]=a[u])}return t})),kl=Qr((function(t){return t.push(i,Xi),Cn(Ml,i,t)}));function _l(t,n,e){var r=null==t?i:xr(t,n);return r===i?e:r}function Il(t,n){return null!=t&&fo(t,n,_r)}var Dl=Li((function(t,n,e){null!=n&&"function"!=typeof n.toString&&(n=jt.call(n)),t[n]=e}),ns(is)),Sl=Li((function(t,n,e){null!=n&&"function"!=typeof n.toString&&(n=jt.call(n)),Gt.call(t,n)?t[n].push(e):t[n]=[e]}),ao),zl=Qr(Dr);function El(t){return Ha(t)?Ve(t):Mr(t)}function Gl(t){return Ha(t)?Ve(t,!0):function(t){if(!nl(t))return function(t){var n=[];if(null!=t)for(var e in wt(t))n.push(e);return n}(t);var n=xo(t),e=[];for(var r in t)("constructor"!=r||!n&&Gt.call(t,r))&&e.push(r);return e}(t)}var Tl=Si((function(t,n,e){Pr(t,n,e)})),Ml=Si((function(t,n,e,r){Pr(t,n,e,r)})),jl=to((function(t,n){var e={};if(null==t)return e;var r=!1;n=kn(n,(function(n){return n=hi(n,t),r||(r=n.length>1),n})),Ii(t,eo(t),e),r&&(e=lr(e,7,Zi));for(var i=n.length;i--;)di(e,n[i]);return e})),Ol=to((function(t,n){return null==t?{}:function(t,n){return Nr(t,n,(function(n,e){return Il(t,e)}))}(t,n)}));function Fl(t,n){if(null==t)return{};var e=kn(eo(t),(function(t){return[t]}));return n=ao(n),Nr(t,e,(function(t,e){return n(t,e[0])}))}var Ll=Qi(El),Pl=Qi(Gl);function Rl(t){return null==t?[]:Un(t,El(t))}var ql=Ti((function(t,n,e){return n=n.toLowerCase(),t+(e?Nl(n):n)}));function Nl(t){return Xl(bl(t).toLowerCase())}function Yl(t){return(t=bl(t))&&t.replace(Ct,Kn).replace(Ut,"")}var Ul=Ti((function(t,n,e){return t+(e?"-":"")+n.toLowerCase()})),Wl=Ti((function(t,n,e){return t+(e?" ":"")+n.toLowerCase()})),Hl=Gi("toLowerCase"),Ql=Ti((function(t,n,e){return t+(e?"_":"")+n.toLowerCase()})),Vl=Ti((function(t,n,e){return t+(e?" ":"")+Xl(n)})),Kl=Ti((function(t,n,e){return t+(e?" ":"")+n.toUpperCase()})),Xl=Gi("toUpperCase");function Zl(t,n,e){return t=bl(t),(n=e?i:n)===i?function(t){return Vt.test(t)}(t)?function(t){return t.match(Ht)||[]}(t):function(t){return t.match(st)||[]}(t):t.match(n)||[]}var Jl=Qr((function(t,n){try{return Cn(t,i,n)}catch(t){return Xa(t)?t:new vt(t)}})),ts=to((function(t,n){return $n(n,(function(n){n=Fo(n),ir(t,n,Sa(t[n],t))})),t}));function ns(t){return function(){return t}}var es=Oi(),rs=Oi(!0);function is(t){return t}function os(t){return Tr("function"==typeof t?t:lr(t,1))}var as=Qr((function(t,n){return function(e){return Dr(e,t,n)}})),ls=Qr((function(t,n){return function(e){return Dr(t,e,n)}}));function ss(t,n,e){var r=El(n),i=vr(n,r);null!=e||nl(n)&&(i.length||!r.length)||(e=n,n=t,t=this,i=vr(n,El(n)));var o=!(nl(e)&&"chain"in e&&!e.chain),a=Za(t);return $n(i,(function(e){var r=n[e];t[e]=r,a&&(t.prototype[e]=function(){var n=this.__chain__;if(o||n){var e=t(this.__wrapped__),i=e.__actions__=_i(this.__actions__);return i.push({func:r,args:arguments,thisArg:t}),e.__chain__=n,e}return r.apply(t,_n([this.value()],arguments))})})),t}function ds(){}var us=Ri(kn),cs=Ri(xn),ps=Ri(Sn);function ms(t){return bo(t)?Fn(Fo(t)):function(t){return function(n){return xr(n,t)}}(t)}var fs=Ni(),gs=Ni(!0);function As(){return[]}function hs(){return!1}var Cs,bs=Pi((function(t,n){return t+n}),0),$s=Wi("ceil"),vs=Pi((function(t,n){return t/n}),1),xs=Wi("floor"),ys=Pi((function(t,n){return t*n}),1),ws=Wi("round"),Bs=Pi((function(t,n){return t-n}),0);return Le.after=function(t,n){if("function"!=typeof n)throw new _t(o);return t=gl(t),function(){if(--t<1)return n.apply(this,arguments)}},Le.ary=Ia,Le.assign=$l,Le.assignIn=vl,Le.assignInWith=xl,Le.assignWith=yl,Le.at=wl,Le.before=Da,Le.bind=Sa,Le.bindAll=ts,Le.bindKey=za,Le.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Ua(t)?t:[t]},Le.chain=ma,Le.chunk=function(t,n,e){n=(e?Co(t,n,e):n===i)?1:he(gl(n),0);var o=null==t?0:t.length;if(!o||n<1)return[];for(var a=0,l=0,s=r(ue(o/n));a<o;)s[l++]=ni(t,a,a+=n);return s},Le.compact=function(t){for(var n=-1,e=null==t?0:t.length,r=0,i=[];++n<e;){var o=t[n];o&&(i[r++]=o)}return i},Le.concat=function(){var t=arguments.length;if(!t)return[];for(var n=r(t-1),e=arguments[0],i=t;i--;)n[i-1]=arguments[i];return _n(Ua(e)?_i(e):[e],Ar(n,1))},Le.cond=function(t){var n=null==t?0:t.length,e=ao();return t=n?kn(t,(function(t){if("function"!=typeof t[1])throw new _t(o);return[e(t[0]),t[1]]})):[],Qr((function(e){for(var r=-1;++r<n;){var i=t[r];if(Cn(i[0],this,e))return Cn(i[1],this,e)}}))},Le.conforms=function(t){return function(t){var n=El(t);return function(e){return sr(e,t,n)}}(lr(t,1))},Le.constant=ns,Le.countBy=Aa,Le.create=function(t,n){var e=Pe(t);return null==n?e:rr(e,n)},Le.curry=function t(n,e,r){var o=Vi(n,8,i,i,i,i,i,e=r?i:e);return o.placeholder=t.placeholder,o},Le.curryRight=function t(n,e,r){var o=Vi(n,16,i,i,i,i,i,e=r?i:e);return o.placeholder=t.placeholder,o},Le.debounce=Ea,Le.defaults=Bl,Le.defaultsDeep=kl,Le.defer=Ga,Le.delay=Ta,Le.difference=Ro,Le.differenceBy=qo,Le.differenceWith=No,Le.drop=function(t,n,e){var r=null==t?0:t.length;return r?ni(t,(n=e||n===i?1:gl(n))<0?0:n,r):[]},Le.dropRight=function(t,n,e){var r=null==t?0:t.length;return r?ni(t,0,(n=r-(n=e||n===i?1:gl(n)))<0?0:n):[]},Le.dropRightWhile=function(t,n){return t&&t.length?ci(t,ao(n,3),!0,!0):[]},Le.dropWhile=function(t,n){return t&&t.length?ci(t,ao(n,3),!0):[]},Le.fill=function(t,n,e,r){var o=null==t?0:t.length;return o?(e&&"number"!=typeof e&&Co(t,n,e)&&(e=0,r=o),function(t,n,e,r){var o=t.length;for((e=gl(e))<0&&(e=-e>o?0:o+e),(r=r===i||r>o?o:gl(r))<0&&(r+=o),r=e>r?0:Al(r);e<r;)t[e++]=n;return t}(t,n,e,r)):[]},Le.filter=function(t,n){return(Ua(t)?yn:gr)(t,ao(n,3))},Le.flatMap=function(t,n){return Ar(wa(t,n),1)},Le.flatMapDeep=function(t,n){return Ar(wa(t,n),u)},Le.flatMapDepth=function(t,n,e){return e=e===i?1:gl(e),Ar(wa(t,n),e)},Le.flatten=Wo,Le.flattenDeep=function(t){return null!=t&&t.length?Ar(t,u):[]},Le.flattenDepth=function(t,n){return null!=t&&t.length?Ar(t,n=n===i?1:gl(n)):[]},Le.flip=function(t){return Vi(t,512)},Le.flow=es,Le.flowRight=rs,Le.fromPairs=function(t){for(var n=-1,e=null==t?0:t.length,r={};++n<e;){var i=t[n];r[i[0]]=i[1]}return r},Le.functions=function(t){return null==t?[]:vr(t,El(t))},Le.functionsIn=function(t){return null==t?[]:vr(t,Gl(t))},Le.groupBy=va,Le.initial=function(t){return null!=t&&t.length?ni(t,0,-1):[]},Le.intersection=Qo,Le.intersectionBy=Vo,Le.intersectionWith=Ko,Le.invert=Dl,Le.invertBy=Sl,Le.invokeMap=xa,Le.iteratee=os,Le.keyBy=ya,Le.keys=El,Le.keysIn=Gl,Le.map=wa,Le.mapKeys=function(t,n){var e={};return n=ao(n,3),br(t,(function(t,r,i){ir(e,n(t,r,i),t)})),e},Le.mapValues=function(t,n){var e={};return n=ao(n,3),br(t,(function(t,r,i){ir(e,r,n(t,r,i))})),e},Le.matches=function(t){return Fr(lr(t,1))},Le.matchesProperty=function(t,n){return Lr(t,lr(n,1))},Le.memoize=Ma,Le.merge=Tl,Le.mergeWith=Ml,Le.method=as,Le.methodOf=ls,Le.mixin=ss,Le.negate=ja,Le.nthArg=function(t){return t=gl(t),Qr((function(n){return Rr(n,t)}))},Le.omit=jl,Le.omitBy=function(t,n){return Fl(t,ja(ao(n)))},Le.once=function(t){return Da(2,t)},Le.orderBy=function(t,n,e,r){return null==t?[]:(Ua(n)||(n=null==n?[]:[n]),Ua(e=r?i:e)||(e=null==e?[]:[e]),qr(t,n,e))},Le.over=us,Le.overArgs=Oa,Le.overEvery=cs,Le.overSome=ps,Le.partial=Fa,Le.partialRight=La,Le.partition=Ba,Le.pick=Ol,Le.pickBy=Fl,Le.property=ms,Le.propertyOf=function(t){return function(n){return null==t?i:xr(t,n)}},Le.pull=Zo,Le.pullAll=Jo,Le.pullAllBy=function(t,n,e){return t&&t.length&&n&&n.length?Yr(t,n,ao(e,2)):t},Le.pullAllWith=function(t,n,e){return t&&t.length&&n&&n.length?Yr(t,n,i,e):t},Le.pullAt=ta,Le.range=fs,Le.rangeRight=gs,Le.rearg=Pa,Le.reject=function(t,n){return(Ua(t)?yn:gr)(t,ja(ao(n,3)))},Le.remove=function(t,n){var e=[];if(!t||!t.length)return e;var r=-1,i=[],o=t.length;for(n=ao(n,3);++r<o;){var a=t[r];n(a,r,t)&&(e.push(a),i.push(r))}return Ur(t,i),e},Le.rest=function(t,n){if("function"!=typeof t)throw new _t(o);return Qr(t,n=n===i?n:gl(n))},Le.reverse=na,Le.sampleSize=function(t,n,e){return n=(e?Co(t,n,e):n===i)?1:gl(n),(Ua(t)?Xe:Kr)(t,n)},Le.set=function(t,n,e){return null==t?t:Xr(t,n,e)},Le.setWith=function(t,n,e,r){return r="function"==typeof r?r:i,null==t?t:Xr(t,n,e,r)},Le.shuffle=function(t){return(Ua(t)?Ze:ti)(t)},Le.slice=function(t,n,e){var r=null==t?0:t.length;return r?(e&&"number"!=typeof e&&Co(t,n,e)?(n=0,e=r):(n=null==n?0:gl(n),e=e===i?r:gl(e)),ni(t,n,e)):[]},Le.sortBy=ka,Le.sortedUniq=function(t){return t&&t.length?oi(t):[]},Le.sortedUniqBy=function(t,n){return t&&t.length?oi(t,ao(n,2)):[]},Le.split=function(t,n,e){return e&&"number"!=typeof e&&Co(t,n,e)&&(n=e=i),(e=e===i?m:e>>>0)?(t=bl(t))&&("string"==typeof n||null!=n&&!al(n))&&!(n=li(n))&&Jn(t)?bi(ae(t),0,e):t.split(n,e):[]},Le.spread=function(t,n){if("function"!=typeof t)throw new _t(o);return n=null==n?0:he(gl(n),0),Qr((function(e){var r=e[n],i=bi(e,0,n);return r&&_n(i,r),Cn(t,this,i)}))},Le.tail=function(t){var n=null==t?0:t.length;return n?ni(t,1,n):[]},Le.take=function(t,n,e){return t&&t.length?ni(t,0,(n=e||n===i?1:gl(n))<0?0:n):[]},Le.takeRight=function(t,n,e){var r=null==t?0:t.length;return r?ni(t,(n=r-(n=e||n===i?1:gl(n)))<0?0:n,r):[]},Le.takeRightWhile=function(t,n){return t&&t.length?ci(t,ao(n,3),!1,!0):[]},Le.takeWhile=function(t,n){return t&&t.length?ci(t,ao(n,3)):[]},Le.tap=function(t,n){return n(t),t},Le.throttle=function(t,n,e){var r=!0,i=!0;if("function"!=typeof t)throw new _t(o);return nl(e)&&(r="leading"in e?!!e.leading:r,i="trailing"in e?!!e.trailing:i),Ea(t,n,{leading:r,maxWait:n,trailing:i})},Le.thru=fa,Le.toArray=ml,Le.toPairs=Ll,Le.toPairsIn=Pl,Le.toPath=function(t){return Ua(t)?kn(t,Fo):dl(t)?[t]:_i(Oo(bl(t)))},Le.toPlainObject=Cl,Le.transform=function(t,n,e){var r=Ua(t),i=r||Va(t)||ul(t);if(n=ao(n,4),null==e){var o=t&&t.constructor;e=i?r?new o:[]:nl(t)&&Za(o)?Pe(Wt(t)):{}}return(i?$n:br)(t,(function(t,r,i){return n(e,t,r,i)})),e},Le.unary=function(t){return Ia(t,1)},Le.union=ea,Le.unionBy=ra,Le.unionWith=ia,Le.uniq=function(t){return t&&t.length?si(t):[]},Le.uniqBy=function(t,n){return t&&t.length?si(t,ao(n,2)):[]},Le.uniqWith=function(t,n){return n="function"==typeof n?n:i,t&&t.length?si(t,i,n):[]},Le.unset=function(t,n){return null==t||di(t,n)},Le.unzip=oa,Le.unzipWith=aa,Le.update=function(t,n,e){return null==t?t:ui(t,n,Ai(e))},Le.updateWith=function(t,n,e,r){return r="function"==typeof r?r:i,null==t?t:ui(t,n,Ai(e),r)},Le.values=Rl,Le.valuesIn=function(t){return null==t?[]:Un(t,Gl(t))},Le.without=la,Le.words=Zl,Le.wrap=function(t,n){return Fa(Ai(n),t)},Le.xor=sa,Le.xorBy=da,Le.xorWith=ua,Le.zip=ca,Le.zipObject=function(t,n){return fi(t||[],n||[],tr)},Le.zipObjectDeep=function(t,n){return fi(t||[],n||[],Xr)},Le.zipWith=pa,Le.entries=Ll,Le.entriesIn=Pl,Le.extend=vl,Le.extendWith=xl,ss(Le,Le),Le.add=bs,Le.attempt=Jl,Le.camelCase=ql,Le.capitalize=Nl,Le.ceil=$s,Le.clamp=function(t,n,e){return e===i&&(e=n,n=i),e!==i&&(e=(e=hl(e))==e?e:0),n!==i&&(n=(n=hl(n))==n?n:0),ar(hl(t),n,e)},Le.clone=function(t){return lr(t,4)},Le.cloneDeep=function(t){return lr(t,5)},Le.cloneDeepWith=function(t,n){return lr(t,5,n="function"==typeof n?n:i)},Le.cloneWith=function(t,n){return lr(t,4,n="function"==typeof n?n:i)},Le.conformsTo=function(t,n){return null==n||sr(t,n,El(n))},Le.deburr=Yl,Le.defaultTo=function(t,n){return null==t||t!=t?n:t},Le.divide=vs,Le.endsWith=function(t,n,e){t=bl(t),n=li(n);var r=t.length,o=e=e===i?r:ar(gl(e),0,r);return(e-=n.length)>=0&&t.slice(e,o)==n},Le.eq=Ra,Le.escape=function(t){return(t=bl(t))&&Q.test(t)?t.replace(W,Xn):t},Le.escapeRegExp=function(t){return(t=bl(t))&&et.test(t)?t.replace(nt,"\\$&"):t},Le.every=function(t,n,e){var r=Ua(t)?xn:mr;return e&&Co(t,n,e)&&(n=i),r(t,ao(n,3))},Le.find=ha,Le.findIndex=Yo,Le.findKey=function(t,n){return En(t,ao(n,3),br)},Le.findLast=Ca,Le.findLastIndex=Uo,Le.findLastKey=function(t,n){return En(t,ao(n,3),$r)},Le.floor=xs,Le.forEach=ba,Le.forEachRight=$a,Le.forIn=function(t,n){return null==t?t:hr(t,ao(n,3),Gl)},Le.forInRight=function(t,n){return null==t?t:Cr(t,ao(n,3),Gl)},Le.forOwn=function(t,n){return t&&br(t,ao(n,3))},Le.forOwnRight=function(t,n){return t&&$r(t,ao(n,3))},Le.get=_l,Le.gt=qa,Le.gte=Na,Le.has=function(t,n){return null!=t&&fo(t,n,kr)},Le.hasIn=Il,Le.head=Ho,Le.identity=is,Le.includes=function(t,n,e,r){t=Ha(t)?t:Rl(t),e=e&&!r?gl(e):0;var i=t.length;return e<0&&(e=he(i+e,0)),sl(t)?e<=i&&t.indexOf(n,e)>-1:!!i&&Tn(t,n,e)>-1},Le.indexOf=function(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var i=null==e?0:gl(e);return i<0&&(i=he(r+i,0)),Tn(t,n,i)},Le.inRange=function(t,n,e){return n=fl(n),e===i?(e=n,n=0):e=fl(e),function(t,n,e){return t>=Ce(n,e)&&t<he(n,e)}(t=hl(t),n,e)},Le.invoke=zl,Le.isArguments=Ya,Le.isArray=Ua,Le.isArrayBuffer=Wa,Le.isArrayLike=Ha,Le.isArrayLikeObject=Qa,Le.isBoolean=function(t){return!0===t||!1===t||el(t)&&wr(t)==h},Le.isBuffer=Va,Le.isDate=Ka,Le.isElement=function(t){return el(t)&&1===t.nodeType&&!ol(t)},Le.isEmpty=function(t){if(null==t)return!0;if(Ha(t)&&(Ua(t)||"string"==typeof t||"function"==typeof t.splice||Va(t)||ul(t)||Ya(t)))return!t.length;var n=mo(t);if(n==x||n==_)return!t.size;if(xo(t))return!Mr(t).length;for(var e in t)if(Gt.call(t,e))return!1;return!0},Le.isEqual=function(t,n){return zr(t,n)},Le.isEqualWith=function(t,n,e){var r=(e="function"==typeof e?e:i)?e(t,n):i;return r===i?zr(t,n,i,e):!!r},Le.isError=Xa,Le.isFinite=function(t){return"number"==typeof t&&fe(t)},Le.isFunction=Za,Le.isInteger=Ja,Le.isLength=tl,Le.isMap=rl,Le.isMatch=function(t,n){return t===n||Er(t,n,so(n))},Le.isMatchWith=function(t,n,e){return e="function"==typeof e?e:i,Er(t,n,so(n),e)},Le.isNaN=function(t){return il(t)&&t!=+t},Le.isNative=function(t){if(vo(t))throw new vt("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return Gr(t)},Le.isNil=function(t){return null==t},Le.isNull=function(t){return null===t},Le.isNumber=il,Le.isObject=nl,Le.isObjectLike=el,Le.isPlainObject=ol,Le.isRegExp=al,Le.isSafeInteger=function(t){return Ja(t)&&t>=-9007199254740991&&t<=c},Le.isSet=ll,Le.isString=sl,Le.isSymbol=dl,Le.isTypedArray=ul,Le.isUndefined=function(t){return t===i},Le.isWeakMap=function(t){return el(t)&&mo(t)==S},Le.isWeakSet=function(t){return el(t)&&"[object WeakSet]"==wr(t)},Le.join=function(t,n){return null==t?"":ge.call(t,n)},Le.kebabCase=Ul,Le.last=Xo,Le.lastIndexOf=function(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var o=r;return e!==i&&(o=(o=gl(e))<0?he(r+o,0):Ce(o,r-1)),n==n?function(t,n,e){for(var r=e+1;r--;)if(t[r]===n)return r;return r}(t,n,o):Gn(t,jn,o,!0)},Le.lowerCase=Wl,Le.lowerFirst=Hl,Le.lt=cl,Le.lte=pl,Le.max=function(t){return t&&t.length?fr(t,is,Br):i},Le.maxBy=function(t,n){return t&&t.length?fr(t,ao(n,2),Br):i},Le.mean=function(t){return On(t,is)},Le.meanBy=function(t,n){return On(t,ao(n,2))},Le.min=function(t){return t&&t.length?fr(t,is,jr):i},Le.minBy=function(t,n){return t&&t.length?fr(t,ao(n,2),jr):i},Le.stubArray=As,Le.stubFalse=hs,Le.stubObject=function(){return{}},Le.stubString=function(){return""},Le.stubTrue=function(){return!0},Le.multiply=ys,Le.nth=function(t,n){return t&&t.length?Rr(t,gl(n)):i},Le.noConflict=function(){return an._===this&&(an._=Ft),this},Le.noop=ds,Le.now=_a,Le.pad=function(t,n,e){t=bl(t);var r=(n=gl(n))?oe(t):0;if(!n||r>=n)return t;var i=(n-r)/2;return qi(ce(i),e)+t+qi(ue(i),e)},Le.padEnd=function(t,n,e){t=bl(t);var r=(n=gl(n))?oe(t):0;return n&&r<n?t+qi(n-r,e):t},Le.padStart=function(t,n,e){t=bl(t);var r=(n=gl(n))?oe(t):0;return n&&r<n?qi(n-r,e)+t:t},Le.parseInt=function(t,n,e){return e||null==n?n=0:n&&(n=+n),$e(bl(t).replace(rt,""),n||0)},Le.random=function(t,n,e){if(e&&"boolean"!=typeof e&&Co(t,n,e)&&(n=e=i),e===i&&("boolean"==typeof n?(e=n,n=i):"boolean"==typeof t&&(e=t,t=i)),t===i&&n===i?(t=0,n=1):(t=fl(t),n===i?(n=t,t=0):n=fl(n)),t>n){var r=t;t=n,n=r}if(e||t%1||n%1){var o=ve();return Ce(t+o*(n-t+nn("1e-"+((o+"").length-1))),n)}return Wr(t,n)},Le.reduce=function(t,n,e){var r=Ua(t)?In:Pn,i=arguments.length<3;return r(t,ao(n,4),e,i,cr)},Le.reduceRight=function(t,n,e){var r=Ua(t)?Dn:Pn,i=arguments.length<3;return r(t,ao(n,4),e,i,pr)},Le.repeat=function(t,n,e){return n=(e?Co(t,n,e):n===i)?1:gl(n),Hr(bl(t),n)},Le.replace=function(){var t=arguments,n=bl(t[0]);return t.length<3?n:n.replace(t[1],t[2])},Le.result=function(t,n,e){var r=-1,o=(n=hi(n,t)).length;for(o||(o=1,t=i);++r<o;){var a=null==t?i:t[Fo(n[r])];a===i&&(r=o,a=e),t=Za(a)?a.call(t):a}return t},Le.round=ws,Le.runInContext=t,Le.sample=function(t){return(Ua(t)?Ke:Vr)(t)},Le.size=function(t){if(null==t)return 0;if(Ha(t))return sl(t)?oe(t):t.length;var n=mo(t);return n==x||n==_?t.size:Mr(t).length},Le.snakeCase=Ql,Le.some=function(t,n,e){var r=Ua(t)?Sn:ei;return e&&Co(t,n,e)&&(n=i),r(t,ao(n,3))},Le.sortedIndex=function(t,n){return ri(t,n)},Le.sortedIndexBy=function(t,n,e){return ii(t,n,ao(e,2))},Le.sortedIndexOf=function(t,n){var e=null==t?0:t.length;if(e){var r=ri(t,n);if(r<e&&Ra(t[r],n))return r}return-1},Le.sortedLastIndex=function(t,n){return ri(t,n,!0)},Le.sortedLastIndexBy=function(t,n,e){return ii(t,n,ao(e,2),!0)},Le.sortedLastIndexOf=function(t,n){if(null!=t&&t.length){var e=ri(t,n,!0)-1;if(Ra(t[e],n))return e}return-1},Le.startCase=Vl,Le.startsWith=function(t,n,e){return t=bl(t),e=null==e?0:ar(gl(e),0,t.length),n=li(n),t.slice(e,e+n.length)==n},Le.subtract=Bs,Le.sum=function(t){return t&&t.length?Rn(t,is):0},Le.sumBy=function(t,n){return t&&t.length?Rn(t,ao(n,2)):0},Le.template=function(t,n,e){var r=Le.templateSettings;e&&Co(t,n,e)&&(n=i),t=bl(t),n=xl({},n,r,Ki);var o,a,l=xl({},n.imports,r.imports,Ki),s=El(l),d=Un(l,s),u=0,c=n.interpolate||bt,p="__p += '",m=Bt((n.escape||bt).source+"|"+c.source+"|"+(c===X?ct:bt).source+"|"+(n.evaluate||bt).source+"|$","g"),f="//# sourceURL="+(Gt.call(n,"sourceURL")?(n.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Xt+"]")+"\n";t.replace(m,(function(n,e,r,i,l,s){return r||(r=i),p+=t.slice(u,s).replace($t,Zn),e&&(o=!0,p+="' +\n__e("+e+") +\n'"),l&&(a=!0,p+="';\n"+l+";\n__p += '"),r&&(p+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),u=s+n.length,n})),p+="';\n";var g=Gt.call(n,"variable")&&n.variable;if(g){if(dt.test(g))throw new vt("Invalid `variable` option passed into `_.template`")}else p="with (obj) {\n"+p+"\n}\n";p=(a?p.replace(q,""):p).replace(N,"$1").replace(Y,"$1;"),p="function("+(g||"obj")+") {\n"+(g?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(o?", __e = _.escape":"")+(a?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+p+"return __p\n}";var A=Jl((function(){return xt(s,f+"return "+p).apply(i,d)}));if(A.source=p,Xa(A))throw A;return A},Le.times=function(t,n){if((t=gl(t))<1||t>c)return[];var e=m,r=Ce(t,m);n=ao(n),t-=m;for(var i=qn(r,n);++e<t;)n(e);return i},Le.toFinite=fl,Le.toInteger=gl,Le.toLength=Al,Le.toLower=function(t){return bl(t).toLowerCase()},Le.toNumber=hl,Le.toSafeInteger=function(t){return t?ar(gl(t),-9007199254740991,c):0===t?t:0},Le.toString=bl,Le.toUpper=function(t){return bl(t).toUpperCase()},Le.trim=function(t,n,e){if((t=bl(t))&&(e||n===i))return Nn(t);if(!t||!(n=li(n)))return t;var r=ae(t),o=ae(n);return bi(r,Hn(r,o),Qn(r,o)+1).join("")},Le.trimEnd=function(t,n,e){if((t=bl(t))&&(e||n===i))return t.slice(0,le(t)+1);if(!t||!(n=li(n)))return t;var r=ae(t);return bi(r,0,Qn(r,ae(n))+1).join("")},Le.trimStart=function(t,n,e){if((t=bl(t))&&(e||n===i))return t.replace(rt,"");if(!t||!(n=li(n)))return t;var r=ae(t);return bi(r,Hn(r,ae(n))).join("")},Le.truncate=function(t,n){var e=30,r="...";if(nl(n)){var o="separator"in n?n.separator:o;e="length"in n?gl(n.length):e,r="omission"in n?li(n.omission):r}var a=(t=bl(t)).length;if(Jn(t)){var l=ae(t);a=l.length}if(e>=a)return t;var s=e-oe(r);if(s<1)return r;var d=l?bi(l,0,s).join(""):t.slice(0,s);if(o===i)return d+r;if(l&&(s+=d.length-s),al(o)){if(t.slice(s).search(o)){var u,c=d;for(o.global||(o=Bt(o.source,bl(pt.exec(o))+"g")),o.lastIndex=0;u=o.exec(c);)var p=u.index;d=d.slice(0,p===i?s:p)}}else if(t.indexOf(li(o),s)!=s){var m=d.lastIndexOf(o);m>-1&&(d=d.slice(0,m))}return d+r},Le.unescape=function(t){return(t=bl(t))&&H.test(t)?t.replace(U,se):t},Le.uniqueId=function(t){var n=++Tt;return bl(t)+n},Le.upperCase=Kl,Le.upperFirst=Xl,Le.each=ba,Le.eachRight=$a,Le.first=Ho,ss(Le,(Cs={},br(Le,(function(t,n){Gt.call(Le.prototype,n)||(Cs[n]=t)})),Cs),{chain:!1}),Le.VERSION="4.17.21",$n(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(t){Le[t].placeholder=Le})),$n(["drop","take"],(function(t,n){Ne.prototype[t]=function(e){e=e===i?1:he(gl(e),0);var r=this.__filtered__&&!n?new Ne(this):this.clone();return r.__filtered__?r.__takeCount__=Ce(e,r.__takeCount__):r.__views__.push({size:Ce(e,m),type:t+(r.__dir__<0?"Right":"")}),r},Ne.prototype[t+"Right"]=function(n){return this.reverse()[t](n).reverse()}})),$n(["filter","map","takeWhile"],(function(t,n){var e=n+1,r=1==e||3==e;Ne.prototype[t]=function(t){var n=this.clone();return n.__iteratees__.push({iteratee:ao(t,3),type:e}),n.__filtered__=n.__filtered__||r,n}})),$n(["head","last"],(function(t,n){var e="take"+(n?"Right":"");Ne.prototype[t]=function(){return this[e](1).value()[0]}})),$n(["initial","tail"],(function(t,n){var e="drop"+(n?"":"Right");Ne.prototype[t]=function(){return this.__filtered__?new Ne(this):this[e](1)}})),Ne.prototype.compact=function(){return this.filter(is)},Ne.prototype.find=function(t){return this.filter(t).head()},Ne.prototype.findLast=function(t){return this.reverse().find(t)},Ne.prototype.invokeMap=Qr((function(t,n){return"function"==typeof t?new Ne(this):this.map((function(e){return Dr(e,t,n)}))})),Ne.prototype.reject=function(t){return this.filter(ja(ao(t)))},Ne.prototype.slice=function(t,n){t=gl(t);var e=this;return e.__filtered__&&(t>0||n<0)?new Ne(e):(t<0?e=e.takeRight(-t):t&&(e=e.drop(t)),n!==i&&(e=(n=gl(n))<0?e.dropRight(-n):e.take(n-t)),e)},Ne.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Ne.prototype.toArray=function(){return this.take(m)},br(Ne.prototype,(function(t,n){var e=/^(?:filter|find|map|reject)|While$/.test(n),r=/^(?:head|last)$/.test(n),o=Le[r?"take"+("last"==n?"Right":""):n],a=r||/^find/.test(n);o&&(Le.prototype[n]=function(){var n=this.__wrapped__,l=r?[1]:arguments,s=n instanceof Ne,d=l[0],u=s||Ua(n),c=function(t){var n=o.apply(Le,_n([t],l));return r&&p?n[0]:n};u&&e&&"function"==typeof d&&1!=d.length&&(s=u=!1);var p=this.__chain__,m=!!this.__actions__.length,f=a&&!p,g=s&&!m;if(!a&&u){n=g?n:new Ne(this);var A=t.apply(n,l);return A.__actions__.push({func:fa,args:[c],thisArg:i}),new qe(A,p)}return f&&g?t.apply(this,l):(A=this.thru(c),f?r?A.value()[0]:A.value():A)})})),$n(["pop","push","shift","sort","splice","unshift"],(function(t){var n=It[t],e=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",r=/^(?:pop|shift)$/.test(t);Le.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return n.apply(Ua(i)?i:[],t)}return this[e]((function(e){return n.apply(Ua(e)?e:[],t)}))}})),br(Ne.prototype,(function(t,n){var e=Le[n];if(e){var r=e.name+"";Gt.call(Se,r)||(Se[r]=[]),Se[r].push({name:n,func:e})}})),Se[Fi(i,2).name]=[{name:"wrapper",func:i}],Ne.prototype.clone=function(){var t=new Ne(this.__wrapped__);return t.__actions__=_i(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=_i(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=_i(this.__views__),t},Ne.prototype.reverse=function(){if(this.__filtered__){var t=new Ne(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Ne.prototype.value=function(){var t=this.__wrapped__.value(),n=this.__dir__,e=Ua(t),r=n<0,i=e?t.length:0,o=function(t,n,e){for(var r=-1,i=e.length;++r<i;){var o=e[r],a=o.size;switch(o.type){case"drop":t+=a;break;case"dropRight":n-=a;break;case"take":n=Ce(n,t+a);break;case"takeRight":t=he(t,n-a)}}return{start:t,end:n}}(0,i,this.__views__),a=o.start,l=o.end,s=l-a,d=r?l:a-1,u=this.__iteratees__,c=u.length,p=0,m=Ce(s,this.__takeCount__);if(!e||!r&&i==s&&m==s)return pi(t,this.__actions__);var f=[];t:for(;s--&&p<m;){for(var g=-1,A=t[d+=n];++g<c;){var h=u[g],C=h.iteratee,b=h.type,$=C(A);if(2==b)A=$;else if(!$){if(1==b)continue t;break t}}f[p++]=A}return f},Le.prototype.at=ga,Le.prototype.chain=function(){return ma(this)},Le.prototype.commit=function(){return new qe(this.value(),this.__chain__)},Le.prototype.next=function(){this.__values__===i&&(this.__values__=ml(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?i:this.__values__[this.__index__++]}},Le.prototype.plant=function(t){for(var n,e=this;e instanceof Re;){var r=Po(e);r.__index__=0,r.__values__=i,n?o.__wrapped__=r:n=r;var o=r;e=e.__wrapped__}return o.__wrapped__=t,n},Le.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Ne){var n=t;return this.__actions__.length&&(n=new Ne(this)),(n=n.reverse()).__actions__.push({func:fa,args:[na],thisArg:i}),new qe(n,this.__chain__)}return this.thru(na)},Le.prototype.toJSON=Le.prototype.valueOf=Le.prototype.value=function(){return pi(this.__wrapped__,this.__actions__)},Le.prototype.first=Le.prototype.head,ln&&(Le.prototype[ln]=function(){return this}),Le}();an._=de,(r=function(){return de}.call(n,e,n,t))===i||(t.exports=r)}.call(this)},84772:(t,n,e)=>{"use strict";function r(t){return getComputedStyle(t)}function i(t,n){for(var e in n){var r=n[e];"number"==typeof r&&(r+="px"),t.style[e]=r}return t}function o(t){var n=document.createElement("div");return n.className=t,n}e.r(n),e.d(n,{default:()=>E});var a="undefined"!=typeof Element&&(Element.prototype.matches||Element.prototype.webkitMatchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector);function l(t,n){if(!a)throw new Error("No element matching method supported");return a.call(t,n)}function s(t){t.remove?t.remove():t.parentNode&&t.parentNode.removeChild(t)}function d(t,n){return Array.prototype.filter.call(t.children,(function(t){return l(t,n)}))}var u=function(t){return"ps__thumb-"+t},c=function(t){return"ps__rail-"+t},p="ps__child--consume",m="ps--focus",f="ps--clicking",g=function(t){return"ps--active-"+t},A=function(t){return"ps--scrolling-"+t},h={x:null,y:null};function C(t,n){var e=t.element.classList,r=A(n);e.contains(r)?clearTimeout(h[n]):e.add(r)}function b(t,n){h[n]=setTimeout((function(){return t.isAlive&&t.element.classList.remove(A(n))}),t.settings.scrollingThreshold)}var $=function(t){this.element=t,this.handlers={}},v={isEmpty:{configurable:!0}};$.prototype.bind=function(t,n){void 0===this.handlers[t]&&(this.handlers[t]=[]),this.handlers[t].push(n),this.element.addEventListener(t,n,!1)},$.prototype.unbind=function(t,n){var e=this;this.handlers[t]=this.handlers[t].filter((function(r){return!(!n||r===n)||(e.element.removeEventListener(t,r,!1),!1)}))},$.prototype.unbindAll=function(){for(var t in this.handlers)this.unbind(t)},v.isEmpty.get=function(){var t=this;return Object.keys(this.handlers).every((function(n){return 0===t.handlers[n].length}))},Object.defineProperties($.prototype,v);var x=function(){this.eventElements=[]};function y(t){if("function"==typeof window.CustomEvent)return new CustomEvent(t);var n=document.createEvent("CustomEvent");return n.initCustomEvent(t,!1,!1,void 0),n}function w(t,n,e,r,i){var o;if(void 0===r&&(r=!0),void 0===i&&(i=!1),"top"===n)o=["contentHeight","containerHeight","scrollTop","y","up","down"];else{if("left"!==n)throw new Error("A proper axis should be provided");o=["contentWidth","containerWidth","scrollLeft","x","left","right"]}!function(t,n,e,r,i){var o=e[0],a=e[1],l=e[2],s=e[3],d=e[4],u=e[5];void 0===r&&(r=!0),void 0===i&&(i=!1);var c=t.element;t.reach[s]=null,c[l]<1&&(t.reach[s]="start"),c[l]>t[o]-t[a]-1&&(t.reach[s]="end"),n&&(c.dispatchEvent(y("ps-scroll-"+s)),n<0?c.dispatchEvent(y("ps-scroll-"+d)):n>0&&c.dispatchEvent(y("ps-scroll-"+u)),r&&function(t,n){C(t,n),b(t,n)}(t,s)),t.reach[s]&&(n||i)&&c.dispatchEvent(y("ps-"+s+"-reach-"+t.reach[s]))}(t,e,o,r,i)}function B(t){return parseInt(t,10)||0}x.prototype.eventElement=function(t){var n=this.eventElements.filter((function(n){return n.element===t}))[0];return n||(n=new $(t),this.eventElements.push(n)),n},x.prototype.bind=function(t,n,e){this.eventElement(t).bind(n,e)},x.prototype.unbind=function(t,n,e){var r=this.eventElement(t);r.unbind(n,e),r.isEmpty&&this.eventElements.splice(this.eventElements.indexOf(r),1)},x.prototype.unbindAll=function(){this.eventElements.forEach((function(t){return t.unbindAll()})),this.eventElements=[]},x.prototype.once=function(t,n,e){var r=this.eventElement(t),i=function(t){r.unbind(n,i),e(t)};r.bind(n,i)};var k={isWebKit:"undefined"!=typeof document&&"WebkitAppearance"in document.documentElement.style,supportsTouch:"undefined"!=typeof window&&("ontouchstart"in window||"maxTouchPoints"in window.navigator&&window.navigator.maxTouchPoints>0||window.DocumentTouch&&document instanceof window.DocumentTouch),supportsIePointer:"undefined"!=typeof navigator&&navigator.msMaxTouchPoints,isChrome:"undefined"!=typeof navigator&&/Chrome/i.test(navigator&&navigator.userAgent)};function _(t){var n=t.element,e=Math.floor(n.scrollTop),r=n.getBoundingClientRect();t.containerWidth=Math.ceil(r.width),t.containerHeight=Math.ceil(r.height),t.contentWidth=n.scrollWidth,t.contentHeight=n.scrollHeight,n.contains(t.scrollbarXRail)||(d(n,c("x")).forEach((function(t){return s(t)})),n.appendChild(t.scrollbarXRail)),n.contains(t.scrollbarYRail)||(d(n,c("y")).forEach((function(t){return s(t)})),n.appendChild(t.scrollbarYRail)),!t.settings.suppressScrollX&&t.containerWidth+t.settings.scrollXMarginOffset<t.contentWidth?(t.scrollbarXActive=!0,t.railXWidth=t.containerWidth-t.railXMarginWidth,t.railXRatio=t.containerWidth/t.railXWidth,t.scrollbarXWidth=I(t,B(t.railXWidth*t.containerWidth/t.contentWidth)),t.scrollbarXLeft=B((t.negativeScrollAdjustment+n.scrollLeft)*(t.railXWidth-t.scrollbarXWidth)/(t.contentWidth-t.containerWidth))):t.scrollbarXActive=!1,!t.settings.suppressScrollY&&t.containerHeight+t.settings.scrollYMarginOffset<t.contentHeight?(t.scrollbarYActive=!0,t.railYHeight=t.containerHeight-t.railYMarginHeight,t.railYRatio=t.containerHeight/t.railYHeight,t.scrollbarYHeight=I(t,B(t.railYHeight*t.containerHeight/t.contentHeight)),t.scrollbarYTop=B(e*(t.railYHeight-t.scrollbarYHeight)/(t.contentHeight-t.containerHeight))):t.scrollbarYActive=!1,t.scrollbarXLeft>=t.railXWidth-t.scrollbarXWidth&&(t.scrollbarXLeft=t.railXWidth-t.scrollbarXWidth),t.scrollbarYTop>=t.railYHeight-t.scrollbarYHeight&&(t.scrollbarYTop=t.railYHeight-t.scrollbarYHeight),function(t,n){var e={width:n.railXWidth},r=Math.floor(t.scrollTop);n.isRtl?e.left=n.negativeScrollAdjustment+t.scrollLeft+n.containerWidth-n.contentWidth:e.left=t.scrollLeft,n.isScrollbarXUsingBottom?e.bottom=n.scrollbarXBottom-r:e.top=n.scrollbarXTop+r,i(n.scrollbarXRail,e);var o={top:r,height:n.railYHeight};n.isScrollbarYUsingRight?n.isRtl?o.right=n.contentWidth-(n.negativeScrollAdjustment+t.scrollLeft)-n.scrollbarYRight-n.scrollbarYOuterWidth-9:o.right=n.scrollbarYRight-t.scrollLeft:n.isRtl?o.left=n.negativeScrollAdjustment+t.scrollLeft+2*n.containerWidth-n.contentWidth-n.scrollbarYLeft-n.scrollbarYOuterWidth:o.left=n.scrollbarYLeft+t.scrollLeft,i(n.scrollbarYRail,o),i(n.scrollbarX,{left:n.scrollbarXLeft,width:n.scrollbarXWidth-n.railBorderXWidth}),i(n.scrollbarY,{top:n.scrollbarYTop,height:n.scrollbarYHeight-n.railBorderYWidth})}(n,t),t.scrollbarXActive?n.classList.add(g("x")):(n.classList.remove(g("x")),t.scrollbarXWidth=0,t.scrollbarXLeft=0,n.scrollLeft=!0===t.isRtl?t.contentWidth:0),t.scrollbarYActive?n.classList.add(g("y")):(n.classList.remove(g("y")),t.scrollbarYHeight=0,t.scrollbarYTop=0,n.scrollTop=0)}function I(t,n){return t.settings.minScrollbarLength&&(n=Math.max(n,t.settings.minScrollbarLength)),t.settings.maxScrollbarLength&&(n=Math.min(n,t.settings.maxScrollbarLength)),n}function D(t,n){var e=n[0],r=n[1],i=n[2],o=n[3],a=n[4],l=n[5],s=n[6],d=n[7],u=n[8],c=t.element,p=null,m=null,g=null;function A(n){n.touches&&n.touches[0]&&(n[i]=n.touches[0].pageY),c[s]=p+g*(n[i]-m),C(t,d),_(t),n.stopPropagation(),n.preventDefault()}function h(){b(t,d),t[u].classList.remove(f),t.event.unbind(t.ownerDocument,"mousemove",A)}function $(n,a){p=c[s],a&&n.touches&&(n[i]=n.touches[0].pageY),m=n[i],g=(t[r]-t[e])/(t[o]-t[l]),a?t.event.bind(t.ownerDocument,"touchmove",A):(t.event.bind(t.ownerDocument,"mousemove",A),t.event.once(t.ownerDocument,"mouseup",h),n.preventDefault()),t[u].classList.add(f),n.stopPropagation()}t.event.bind(t[a],"mousedown",(function(t){$(t)})),t.event.bind(t[a],"touchstart",(function(t){$(t,!0)}))}var S={"click-rail":function(t){t.element,t.event.bind(t.scrollbarY,"mousedown",(function(t){return t.stopPropagation()})),t.event.bind(t.scrollbarYRail,"mousedown",(function(n){var e=n.pageY-window.pageYOffset-t.scrollbarYRail.getBoundingClientRect().top>t.scrollbarYTop?1:-1;t.element.scrollTop+=e*t.containerHeight,_(t),n.stopPropagation()})),t.event.bind(t.scrollbarX,"mousedown",(function(t){return t.stopPropagation()})),t.event.bind(t.scrollbarXRail,"mousedown",(function(n){var e=n.pageX-window.pageXOffset-t.scrollbarXRail.getBoundingClientRect().left>t.scrollbarXLeft?1:-1;t.element.scrollLeft+=e*t.containerWidth,_(t),n.stopPropagation()}))},"drag-thumb":function(t){D(t,["containerWidth","contentWidth","pageX","railXWidth","scrollbarX","scrollbarXWidth","scrollLeft","x","scrollbarXRail"]),D(t,["containerHeight","contentHeight","pageY","railYHeight","scrollbarY","scrollbarYHeight","scrollTop","y","scrollbarYRail"])},keyboard:function(t){var n=t.element;t.event.bind(t.ownerDocument,"keydown",(function(e){if(!(e.isDefaultPrevented&&e.isDefaultPrevented()||e.defaultPrevented)&&(l(n,":hover")||l(t.scrollbarX,":focus")||l(t.scrollbarY,":focus"))){var r,i=document.activeElement?document.activeElement:t.ownerDocument.activeElement;if(i){if("IFRAME"===i.tagName)i=i.contentDocument.activeElement;else for(;i.shadowRoot;)i=i.shadowRoot.activeElement;if(l(r=i,"input,[contenteditable]")||l(r,"select,[contenteditable]")||l(r,"textarea,[contenteditable]")||l(r,"button,[contenteditable]"))return}var o=0,a=0;switch(e.which){case 37:o=e.metaKey?-t.contentWidth:e.altKey?-t.containerWidth:-30;break;case 38:a=e.metaKey?t.contentHeight:e.altKey?t.containerHeight:30;break;case 39:o=e.metaKey?t.contentWidth:e.altKey?t.containerWidth:30;break;case 40:a=e.metaKey?-t.contentHeight:e.altKey?-t.containerHeight:-30;break;case 32:a=e.shiftKey?t.containerHeight:-t.containerHeight;break;case 33:a=t.containerHeight;break;case 34:a=-t.containerHeight;break;case 36:a=t.contentHeight;break;case 35:a=-t.contentHeight;break;default:return}t.settings.suppressScrollX&&0!==o||t.settings.suppressScrollY&&0!==a||(n.scrollTop-=a,n.scrollLeft+=o,_(t),function(e,r){var i=Math.floor(n.scrollTop);if(0===e){if(!t.scrollbarYActive)return!1;if(0===i&&r>0||i>=t.contentHeight-t.containerHeight&&r<0)return!t.settings.wheelPropagation}var o=n.scrollLeft;if(0===r){if(!t.scrollbarXActive)return!1;if(0===o&&e<0||o>=t.contentWidth-t.containerWidth&&e>0)return!t.settings.wheelPropagation}return!0}(o,a)&&e.preventDefault())}}))},wheel:function(t){var n=t.element;function e(e){var i=function(t){var n=t.deltaX,e=-1*t.deltaY;return void 0!==n&&void 0!==e||(n=-1*t.wheelDeltaX/6,e=t.wheelDeltaY/6),t.deltaMode&&1===t.deltaMode&&(n*=10,e*=10),n!=n&&e!=e&&(n=0,e=t.wheelDelta),t.shiftKey?[-e,-n]:[n,e]}(e),o=i[0],a=i[1];if(!function(t,e,i){if(!k.isWebKit&&n.querySelector("select:focus"))return!0;if(!n.contains(t))return!1;for(var o=t;o&&o!==n;){if(o.classList.contains(p))return!0;var a=r(o);if(i&&a.overflowY.match(/(scroll|auto)/)){var l=o.scrollHeight-o.clientHeight;if(l>0&&(o.scrollTop>0&&i<0||o.scrollTop<l&&i>0))return!0}if(e&&a.overflowX.match(/(scroll|auto)/)){var s=o.scrollWidth-o.clientWidth;if(s>0&&(o.scrollLeft>0&&e<0||o.scrollLeft<s&&e>0))return!0}o=o.parentNode}return!1}(e.target,o,a)){var l=!1;t.settings.useBothWheelAxes?t.scrollbarYActive&&!t.scrollbarXActive?(a?n.scrollTop-=a*t.settings.wheelSpeed:n.scrollTop+=o*t.settings.wheelSpeed,l=!0):t.scrollbarXActive&&!t.scrollbarYActive&&(o?n.scrollLeft+=o*t.settings.wheelSpeed:n.scrollLeft-=a*t.settings.wheelSpeed,l=!0):(n.scrollTop-=a*t.settings.wheelSpeed,n.scrollLeft+=o*t.settings.wheelSpeed),_(t),(l=l||function(e,r){var i=Math.floor(n.scrollTop),o=0===n.scrollTop,a=i+n.offsetHeight===n.scrollHeight,l=0===n.scrollLeft,s=n.scrollLeft+n.offsetWidth===n.scrollWidth;return!(Math.abs(r)>Math.abs(e)?o||a:l||s)||!t.settings.wheelPropagation}(o,a))&&!e.ctrlKey&&(e.stopPropagation(),e.preventDefault())}}void 0!==window.onwheel?t.event.bind(n,"wheel",e):void 0!==window.onmousewheel&&t.event.bind(n,"mousewheel",e)},touch:function(t){if(k.supportsTouch||k.supportsIePointer){var n=t.element,e={},i=0,o={},a=null;k.supportsTouch?(t.event.bind(n,"touchstart",u),t.event.bind(n,"touchmove",c),t.event.bind(n,"touchend",m)):k.supportsIePointer&&(window.PointerEvent?(t.event.bind(n,"pointerdown",u),t.event.bind(n,"pointermove",c),t.event.bind(n,"pointerup",m)):window.MSPointerEvent&&(t.event.bind(n,"MSPointerDown",u),t.event.bind(n,"MSPointerMove",c),t.event.bind(n,"MSPointerUp",m)))}function l(e,r){n.scrollTop-=r,n.scrollLeft-=e,_(t)}function s(t){return t.targetTouches?t.targetTouches[0]:t}function d(t){return!(t.pointerType&&"pen"===t.pointerType&&0===t.buttons||(!t.targetTouches||1!==t.targetTouches.length)&&(!t.pointerType||"mouse"===t.pointerType||t.pointerType===t.MSPOINTER_TYPE_MOUSE))}function u(t){if(d(t)){var n=s(t);e.pageX=n.pageX,e.pageY=n.pageY,i=(new Date).getTime(),null!==a&&clearInterval(a)}}function c(a){if(d(a)){var u=s(a),c={pageX:u.pageX,pageY:u.pageY},m=c.pageX-e.pageX,f=c.pageY-e.pageY;if(function(t,e,i){if(!n.contains(t))return!1;for(var o=t;o&&o!==n;){if(o.classList.contains(p))return!0;var a=r(o);if(i&&a.overflowY.match(/(scroll|auto)/)){var l=o.scrollHeight-o.clientHeight;if(l>0&&(o.scrollTop>0&&i<0||o.scrollTop<l&&i>0))return!0}if(e&&a.overflowX.match(/(scroll|auto)/)){var s=o.scrollWidth-o.clientWidth;if(s>0&&(o.scrollLeft>0&&e<0||o.scrollLeft<s&&e>0))return!0}o=o.parentNode}return!1}(a.target,m,f))return;l(m,f),e=c;var g=(new Date).getTime(),A=g-i;A>0&&(o.x=m/A,o.y=f/A,i=g),function(e,r){var i=Math.floor(n.scrollTop),o=n.scrollLeft,a=Math.abs(e),l=Math.abs(r);if(l>a){if(r<0&&i===t.contentHeight-t.containerHeight||r>0&&0===i)return 0===window.scrollY&&r>0&&k.isChrome}else if(a>l&&(e<0&&o===t.contentWidth-t.containerWidth||e>0&&0===o))return!0;return!0}(m,f)&&a.preventDefault()}}function m(){t.settings.swipeEasing&&(clearInterval(a),a=setInterval((function(){t.isInitialized?clearInterval(a):o.x||o.y?Math.abs(o.x)<.01&&Math.abs(o.y)<.01?clearInterval(a):(l(30*o.x,30*o.y),o.x*=.8,o.y*=.8):clearInterval(a)}),10))}}},z=function(t,n){var e=this;if(void 0===n&&(n={}),"string"==typeof t&&(t=document.querySelector(t)),!t||!t.nodeName)throw new Error("no element is specified to initialize PerfectScrollbar");for(var a in this.element=t,t.classList.add("ps"),this.settings={handlers:["click-rail","drag-thumb","keyboard","wheel","touch"],maxScrollbarLength:null,minScrollbarLength:null,scrollingThreshold:1e3,scrollXMarginOffset:0,scrollYMarginOffset:0,suppressScrollX:!1,suppressScrollY:!1,swipeEasing:!0,useBothWheelAxes:!1,wheelPropagation:!0,wheelSpeed:1},n)this.settings[a]=n[a];this.containerWidth=null,this.containerHeight=null,this.contentWidth=null,this.contentHeight=null;var l,s,d=function(){return t.classList.add(m)},p=function(){return t.classList.remove(m)};this.isRtl="rtl"===r(t).direction,!0===this.isRtl&&t.classList.add("ps__rtl"),this.isNegativeScroll=(s=t.scrollLeft,t.scrollLeft=-1,l=t.scrollLeft<0,t.scrollLeft=s,l),this.negativeScrollAdjustment=this.isNegativeScroll?t.scrollWidth-t.clientWidth:0,this.event=new x,this.ownerDocument=t.ownerDocument||document,this.scrollbarXRail=o(c("x")),t.appendChild(this.scrollbarXRail),this.scrollbarX=o(u("x")),this.scrollbarXRail.appendChild(this.scrollbarX),this.scrollbarX.setAttribute("tabindex",0),this.event.bind(this.scrollbarX,"focus",d),this.event.bind(this.scrollbarX,"blur",p),this.scrollbarXActive=null,this.scrollbarXWidth=null,this.scrollbarXLeft=null;var f=r(this.scrollbarXRail);this.scrollbarXBottom=parseInt(f.bottom,10),isNaN(this.scrollbarXBottom)?(this.isScrollbarXUsingBottom=!1,this.scrollbarXTop=B(f.top)):this.isScrollbarXUsingBottom=!0,this.railBorderXWidth=B(f.borderLeftWidth)+B(f.borderRightWidth),i(this.scrollbarXRail,{display:"block"}),this.railXMarginWidth=B(f.marginLeft)+B(f.marginRight),i(this.scrollbarXRail,{display:""}),this.railXWidth=null,this.railXRatio=null,this.scrollbarYRail=o(c("y")),t.appendChild(this.scrollbarYRail),this.scrollbarY=o(u("y")),this.scrollbarYRail.appendChild(this.scrollbarY),this.scrollbarY.setAttribute("tabindex",0),this.event.bind(this.scrollbarY,"focus",d),this.event.bind(this.scrollbarY,"blur",p),this.scrollbarYActive=null,this.scrollbarYHeight=null,this.scrollbarYTop=null;var g=r(this.scrollbarYRail);this.scrollbarYRight=parseInt(g.right,10),isNaN(this.scrollbarYRight)?(this.isScrollbarYUsingRight=!1,this.scrollbarYLeft=B(g.left)):this.isScrollbarYUsingRight=!0,this.scrollbarYOuterWidth=this.isRtl?function(t){var n=r(t);return B(n.width)+B(n.paddingLeft)+B(n.paddingRight)+B(n.borderLeftWidth)+B(n.borderRightWidth)}(this.scrollbarY):null,this.railBorderYWidth=B(g.borderTopWidth)+B(g.borderBottomWidth),i(this.scrollbarYRail,{display:"block"}),this.railYMarginHeight=B(g.marginTop)+B(g.marginBottom),i(this.scrollbarYRail,{display:""}),this.railYHeight=null,this.railYRatio=null,this.reach={x:t.scrollLeft<=0?"start":t.scrollLeft>=this.contentWidth-this.containerWidth?"end":null,y:t.scrollTop<=0?"start":t.scrollTop>=this.contentHeight-this.containerHeight?"end":null},this.isAlive=!0,this.settings.handlers.forEach((function(t){return S[t](e)})),this.lastScrollTop=Math.floor(t.scrollTop),this.lastScrollLeft=t.scrollLeft,this.event.bind(this.element,"scroll",(function(t){return e.onScroll(t)})),_(this)};z.prototype.update=function(){this.isAlive&&(this.negativeScrollAdjustment=this.isNegativeScroll?this.element.scrollWidth-this.element.clientWidth:0,i(this.scrollbarXRail,{display:"block"}),i(this.scrollbarYRail,{display:"block"}),this.railXMarginWidth=B(r(this.scrollbarXRail).marginLeft)+B(r(this.scrollbarXRail).marginRight),this.railYMarginHeight=B(r(this.scrollbarYRail).marginTop)+B(r(this.scrollbarYRail).marginBottom),i(this.scrollbarXRail,{display:"none"}),i(this.scrollbarYRail,{display:"none"}),_(this),w(this,"top",0,!1,!0),w(this,"left",0,!1,!0),i(this.scrollbarXRail,{display:""}),i(this.scrollbarYRail,{display:""}))},z.prototype.onScroll=function(t){this.isAlive&&(_(this),w(this,"top",this.element.scrollTop-this.lastScrollTop),w(this,"left",this.element.scrollLeft-this.lastScrollLeft),this.lastScrollTop=Math.floor(this.element.scrollTop),this.lastScrollLeft=this.element.scrollLeft)},z.prototype.destroy=function(){this.isAlive&&(this.event.unbindAll(),s(this.scrollbarX),s(this.scrollbarY),s(this.scrollbarXRail),s(this.scrollbarYRail),this.removePsClasses(),this.element=null,this.scrollbarX=null,this.scrollbarY=null,this.scrollbarXRail=null,this.scrollbarYRail=null,this.isAlive=!1)},z.prototype.removePsClasses=function(){this.element.className=this.element.className.split(" ").filter((function(t){return!t.match(/^ps([-_].+|)$/)})).join(" ")};const E=z},38411:function(t,n,e){var r,i;void 0===(i="function"==typeof(r=function(){"use strict";return function(t,n){var e,r,i,o,a,l,s,d,u,c,p,m,f,g,A,h,C,b,$=this,v=!1,x=!0,y=!0,w={barsSize:{top:44,bottom:"auto"},closeElClasses:["item","caption","zoom-wrap","ui","top-bar"],timeToIdle:4e3,timeToIdleOutside:1e3,loadingIndicatorDelay:1e3,addCaptionHTMLFn:function(t,n){return t.title?(n.children[0].innerHTML=t.title,!0):(n.children[0].innerHTML="",!1)},closeEl:!0,captionEl:!0,fullscreenEl:!0,zoomEl:!0,shareEl:!0,counterEl:!0,arrowEl:!0,preloaderEl:!0,tapToClose:!1,tapToToggleControls:!0,clickToCloseNonZoomable:!0,shareButtons:[{id:"facebook",label:"Share on Facebook",url:"https://www.facebook.com/sharer/sharer.php?u={{url}}"},{id:"twitter",label:"Tweet",url:"https://twitter.com/intent/tweet?text={{text}}&url={{url}}"},{id:"pinterest",label:"Pin it",url:"http://www.pinterest.com/pin/create/button/?url={{url}}&media={{image_url}}&description={{text}}"},{id:"download",label:"Download image",url:"{{raw_image_url}}",download:!0}],getImageURLForShare:function(){return t.currItem.src||""},getPageURLForShare:function(){return window.location.href},getTextForShare:function(){return t.currItem.title||""},indexIndicatorSep:" / ",fitControlsWidth:1200},B=function(t){if(h)return!0;t=t||window.event,A.timeToIdle&&A.mouseUsed&&!u&&T();for(var e,r,i=(t.target||t.srcElement).getAttribute("class")||"",o=0;o<F.length;o++)(e=F[o]).onTap&&i.indexOf("pswp__"+e.name)>-1&&(e.onTap(),r=!0);if(r){t.stopPropagation&&t.stopPropagation(),h=!0;var a=n.features.isOldAndroid?600:30;setTimeout((function(){h=!1}),a)}},k=function(t,e,r){n[(r?"add":"remove")+"Class"](t,"pswp__"+e)},_=function(){var t=1===A.getNumItemsFn();t!==g&&(k(r,"ui--one-slide",t),g=t)},I=function(){k(s,"share-modal--hidden",y)},D=function(){return(y=!y)?(n.removeClass(s,"pswp__share-modal--fade-in"),setTimeout((function(){y&&I()}),300)):(I(),setTimeout((function(){y||n.addClass(s,"pswp__share-modal--fade-in")}),30)),y||z(),!1},S=function(n){var e=(n=n||window.event).target||n.srcElement;return t.shout("shareLinkClick",n,e),!(!e.href||!e.hasAttribute("download")&&(window.open(e.href,"pswp_share","scrollbars=yes,resizable=yes,toolbar=no,location=yes,width=550,height=420,top=100,left="+(window.screen?Math.round(screen.width/2-275):100)),y||D(),1))},z=function(){for(var t,n,e,r,i="",o=0;o<A.shareButtons.length;o++)t=A.shareButtons[o],n=A.getImageURLForShare(t),e=A.getPageURLForShare(t),r=A.getTextForShare(t),i+='<a href="'+t.url.replace("{{url}}",encodeURIComponent(e)).replace("{{image_url}}",encodeURIComponent(n)).replace("{{raw_image_url}}",n).replace("{{text}}",encodeURIComponent(r))+'" target="_blank" class="pswp__share--'+t.id+'"'+(t.download?"download":"")+">"+t.label+"</a>",A.parseShareButtonOut&&(i=A.parseShareButtonOut(t,i));s.children[0].innerHTML=i,s.children[0].onclick=S},E=function(t){for(var e=0;e<A.closeElClasses.length;e++)if(n.hasClass(t,"pswp__"+A.closeElClasses[e]))return!0},G=0,T=function(){clearTimeout(b),G=0,u&&$.setIdle(!1)},M=function(t){var n=(t=t||window.event).relatedTarget||t.toElement;n&&"HTML"!==n.nodeName||(clearTimeout(b),b=setTimeout((function(){$.setIdle(!0)}),A.timeToIdleOutside))},j=function(t){m!==t&&(k(p,"preloader--active",!t),m=t)},O=function(e){var a=e.vGap;if(!t.likelyTouchDevice||A.mouseUsed||screen.width>A.fitControlsWidth){var l=A.barsSize;if(A.captionEl&&"auto"===l.bottom)if(o||((o=n.createEl("pswp__caption pswp__caption--fake")).appendChild(n.createEl("pswp__caption__center")),r.insertBefore(o,i),n.addClass(r,"pswp__ui--fit")),A.addCaptionHTMLFn(e,o,!0)){var s=o.clientHeight;a.bottom=parseInt(s,10)||44}else a.bottom=l.top;else a.bottom="auto"===l.bottom?0:l.bottom;a.top=l.top}else a.top=a.bottom=0},F=[{name:"caption",option:"captionEl",onInit:function(t){i=t}},{name:"share-modal",option:"shareEl",onInit:function(t){s=t},onTap:function(){D()}},{name:"button--share",option:"shareEl",onInit:function(t){l=t},onTap:function(){D()}},{name:"button--zoom",option:"zoomEl",onTap:t.toggleDesktopZoom},{name:"counter",option:"counterEl",onInit:function(t){a=t}},{name:"button--close",option:"closeEl",onTap:t.close},{name:"button--arrow--left",option:"arrowEl",onTap:t.prev},{name:"button--arrow--right",option:"arrowEl",onTap:t.next},{name:"button--fs",option:"fullscreenEl",onTap:function(){e.isFullscreen()?e.exit():e.enter()}},{name:"preloader",option:"preloaderEl",onInit:function(t){p=t}}];$.init=function(){var a;n.extend(t.options,w,!0),A=t.options,r=n.getChildByClass(t.scrollWrap,"pswp__ui"),(c=t.listen)("onVerticalDrag",(function(t){x&&t<.95?$.hideControls():!x&&t>=.95&&$.showControls()})),c("onPinchClose",(function(t){x&&t<.9?($.hideControls(),a=!0):a&&!x&&t>.9&&$.showControls()})),c("zoomGestureEnded",(function(){(a=!1)&&!x&&$.showControls()})),c("beforeChange",$.update),c("doubleTap",(function(n){var e=t.currItem.initialZoomLevel;t.getZoomLevel()!==e?t.zoomTo(e,n,333):t.zoomTo(A.getDoubleTapZoom(!1,t.currItem),n,333)})),c("preventDragEvent",(function(t,n,e){var r=t.target||t.srcElement;r&&r.getAttribute("class")&&t.type.indexOf("mouse")>-1&&(r.getAttribute("class").indexOf("__caption")>0||/(SMALL|STRONG|EM)/i.test(r.tagName))&&(e.prevent=!1)})),c("bindEvents",(function(){n.bind(r,"pswpTap click",B),n.bind(t.scrollWrap,"pswpTap",$.onGlobalTap),t.likelyTouchDevice||n.bind(t.scrollWrap,"mouseover",$.onMouseOver)})),c("unbindEvents",(function(){y||D(),C&&clearInterval(C),n.unbind(document,"mouseout",M),n.unbind(document,"mousemove",T),n.unbind(r,"pswpTap click",B),n.unbind(t.scrollWrap,"pswpTap",$.onGlobalTap),n.unbind(t.scrollWrap,"mouseover",$.onMouseOver),e&&(n.unbind(document,e.eventK,$.updateFullscreen),e.isFullscreen()&&(A.hideAnimationDuration=0,e.exit()),e=null)})),c("destroy",(function(){A.captionEl&&(o&&r.removeChild(o),n.removeClass(i,"pswp__caption--empty")),s&&(s.children[0].onclick=null),n.removeClass(r,"pswp__ui--over-close"),n.addClass(r,"pswp__ui--hidden"),$.setIdle(!1)})),A.showAnimationDuration||n.removeClass(r,"pswp__ui--hidden"),c("initialZoomIn",(function(){A.showAnimationDuration&&n.removeClass(r,"pswp__ui--hidden")})),c("initialZoomOut",(function(){n.addClass(r,"pswp__ui--hidden")})),c("parseVerticalMargin",O),function(){var t,e,i,o=function(r){if(r)for(var o=r.length,a=0;a<o;a++){t=r[a],e=t.className;for(var l=0;l<F.length;l++)i=F[l],e.indexOf("pswp__"+i.name)>-1&&(A[i.option]?(n.removeClass(t,"pswp__element--disabled"),i.onInit&&i.onInit(t)):n.addClass(t,"pswp__element--disabled"))}};o(r.children);var a=n.getChildByClass(r,"pswp__top-bar");a&&o(a.children)}(),A.shareEl&&l&&s&&(y=!0),_(),A.timeToIdle&&c("mouseUsed",(function(){n.bind(document,"mousemove",T),n.bind(document,"mouseout",M),C=setInterval((function(){2==++G&&$.setIdle(!0)}),A.timeToIdle/2)})),A.fullscreenEl&&!n.features.isOldAndroid&&(e||(e=$.getFullscreenAPI()),e?(n.bind(document,e.eventK,$.updateFullscreen),$.updateFullscreen(),n.addClass(t.template,"pswp--supports-fs")):n.removeClass(t.template,"pswp--supports-fs")),A.preloaderEl&&(j(!0),c("beforeChange",(function(){clearTimeout(f),f=setTimeout((function(){t.currItem&&t.currItem.loading?(!t.allowProgressiveImg()||t.currItem.img&&!t.currItem.img.naturalWidth)&&j(!1):j(!0)}),A.loadingIndicatorDelay)})),c("imageLoadComplete",(function(n,e){t.currItem===e&&j(!0)})))},$.setIdle=function(t){u=t,k(r,"ui--idle",t)},$.update=function(){x&&t.currItem?($.updateIndexIndicator(),A.captionEl&&(A.addCaptionHTMLFn(t.currItem,i),k(i,"caption--empty",!t.currItem.title)),v=!0):v=!1,y||D(),_()},$.updateFullscreen=function(r){r&&setTimeout((function(){t.setScrollOffset(0,n.getScrollY())}),50),n[(e.isFullscreen()?"add":"remove")+"Class"](t.template,"pswp--fs")},$.updateIndexIndicator=function(){A.counterEl&&(a.innerHTML=t.getCurrentIndex()+1+A.indexIndicatorSep+A.getNumItemsFn())},$.onGlobalTap=function(e){var r=(e=e||window.event).target||e.srcElement;if(!h)if(e.detail&&"mouse"===e.detail.pointerType){if(E(r))return void t.close();n.hasClass(r,"pswp__img")&&(1===t.getZoomLevel()&&t.getZoomLevel()<=t.currItem.fitRatio?A.clickToCloseNonZoomable&&t.close():t.toggleDesktopZoom(e.detail.releasePoint))}else if(A.tapToToggleControls&&(x?$.hideControls():$.showControls()),A.tapToClose&&(n.hasClass(r,"pswp__img")||E(r)))return void t.close()},$.onMouseOver=function(t){var n=(t=t||window.event).target||t.srcElement;k(r,"ui--over-close",E(n))},$.hideControls=function(){n.addClass(r,"pswp__ui--hidden"),x=!1},$.showControls=function(){x=!0,v||$.update(),n.removeClass(r,"pswp__ui--hidden")},$.supportsFullscreen=function(){var t=document;return!!(t.exitFullscreen||t.mozCancelFullScreen||t.webkitExitFullscreen||t.msExitFullscreen)},$.getFullscreenAPI=function(){var n,e=document.documentElement,r="fullscreenchange";return e.requestFullscreen?n={enterK:"requestFullscreen",exitK:"exitFullscreen",elementK:"fullscreenElement",eventK:r}:e.mozRequestFullScreen?n={enterK:"mozRequestFullScreen",exitK:"mozCancelFullScreen",elementK:"mozFullScreenElement",eventK:"moz"+r}:e.webkitRequestFullscreen?n={enterK:"webkitRequestFullscreen",exitK:"webkitExitFullscreen",elementK:"webkitFullscreenElement",eventK:"webkit"+r}:e.msRequestFullscreen&&(n={enterK:"msRequestFullscreen",exitK:"msExitFullscreen",elementK:"msFullscreenElement",eventK:"MSFullscreenChange"}),n&&(n.enter=function(){if(d=A.closeOnScroll,A.closeOnScroll=!1,"webkitRequestFullscreen"!==this.enterK)return t.template[this.enterK]();t.template[this.enterK](Element.ALLOW_KEYBOARD_INPUT)},n.exit=function(){return A.closeOnScroll=d,document[this.exitK]()},n.isFullscreen=function(){return document[this.elementK]}),n}}})?r.call(n,e,n,t):r)||(t.exports=i)},58832:function(t,n,e){var r,i;void 0===(i="function"==typeof(r=function(){"use strict";return function(t,n,e,r){var i={features:null,bind:function(t,n,e,r){var i=(r?"remove":"add")+"EventListener";n=n.split(" ");for(var o=0;o<n.length;o++)n[o]&&t[i](n[o],e,!1)},isArray:function(t){return t instanceof Array},createEl:function(t,n){var e=document.createElement(n||"div");return t&&(e.className=t),e},getScrollY:function(){var t=window.pageYOffset;return void 0!==t?t:document.documentElement.scrollTop},unbind:function(t,n,e){i.bind(t,n,e,!0)},removeClass:function(t,n){var e=new RegExp("(\\s|^)"+n+"(\\s|$)");t.className=t.className.replace(e," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")},addClass:function(t,n){i.hasClass(t,n)||(t.className+=(t.className?" ":"")+n)},hasClass:function(t,n){return t.className&&new RegExp("(^|\\s)"+n+"(\\s|$)").test(t.className)},getChildByClass:function(t,n){for(var e=t.firstChild;e;){if(i.hasClass(e,n))return e;e=e.nextSibling}},arraySearch:function(t,n,e){for(var r=t.length;r--;)if(t[r][e]===n)return r;return-1},extend:function(t,n,e){for(var r in n)if(n.hasOwnProperty(r)){if(e&&t.hasOwnProperty(r))continue;t[r]=n[r]}},easing:{sine:{out:function(t){return Math.sin(t*(Math.PI/2))},inOut:function(t){return-(Math.cos(Math.PI*t)-1)/2}},cubic:{out:function(t){return--t*t*t+1}}},detectFeatures:function(){if(i.features)return i.features;var t=i.createEl().style,n="",e={};if(e.oldIE=document.all&&!document.addEventListener,e.touch="ontouchstart"in window,window.requestAnimationFrame&&(e.raf=window.requestAnimationFrame,e.caf=window.cancelAnimationFrame),e.pointerEvent=!!window.PointerEvent||navigator.msPointerEnabled,!e.pointerEvent){var r=navigator.userAgent;if(/iP(hone|od)/.test(navigator.platform)){var o=navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);o&&o.length>0&&(o=parseInt(o[1],10))>=1&&o<8&&(e.isOldIOSPhone=!0)}var a=r.match(/Android\s([0-9\.]*)/),l=a?a[1]:0;(l=parseFloat(l))>=1&&(l<4.4&&(e.isOldAndroid=!0),e.androidVersion=l),e.isMobileOpera=/opera mini|opera mobi/i.test(r)}for(var s,d,u=["transform","perspective","animationName"],c=["","webkit","Moz","ms","O"],p=0;p<4;p++){n=c[p];for(var m=0;m<3;m++)s=u[m],d=n+(n?s.charAt(0).toUpperCase()+s.slice(1):s),!e[s]&&d in t&&(e[s]=d);n&&!e.raf&&(n=n.toLowerCase(),e.raf=window[n+"RequestAnimationFrame"],e.raf&&(e.caf=window[n+"CancelAnimationFrame"]||window[n+"CancelRequestAnimationFrame"]))}if(!e.raf){var f=0;e.raf=function(t){var n=(new Date).getTime(),e=Math.max(0,16-(n-f)),r=window.setTimeout((function(){t(n+e)}),e);return f=n+e,r},e.caf=function(t){clearTimeout(t)}}return e.svg=!!document.createElementNS&&!!document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect,i.features=e,e}};i.detectFeatures(),i.features.oldIE&&(i.bind=function(t,n,e,r){n=n.split(" ");for(var i,o=(r?"detach":"attach")+"Event",a=function(){e.handleEvent.call(e)},l=0;l<n.length;l++)if(i=n[l])if("object"==typeof e&&e.handleEvent){if(r){if(!e["oldIE"+i])return!1}else e["oldIE"+i]=a;t[o]("on"+i,e["oldIE"+i])}else t[o]("on"+i,e)});var o=this,a={allowPanToNext:!0,spacing:.12,bgOpacity:1,mouseUsed:!1,loop:!0,pinchToClose:!0,closeOnScroll:!0,closeOnVerticalDrag:!0,verticalDragRange:.75,hideAnimationDuration:333,showAnimationDuration:333,showHideOpacity:!1,focus:!0,escKey:!0,arrowKeys:!0,mainScrollEndFriction:.35,panEndFriction:.35,isClickableElement:function(t){return"A"===t.tagName},getDoubleTapZoom:function(t,n){return t||n.initialZoomLevel<.7?1:1.33},maxSpreadZoom:1.33,modal:!0,scaleMode:"fit"};i.extend(a,r);var l,s,d,u,c,p,m,f,g,A,h,C,b,$,v,x,y,w,B,k,_,I,D,S,z,E,G,T,M,j,O,F,L,P,R,q,N,Y,U,W,H,Q,V,K,X,Z,J,tt,nt,et,rt,it,ot,at,lt,st,dt={x:0,y:0},ut={x:0,y:0},ct={x:0,y:0},pt={},mt=0,ft={},gt={x:0,y:0},At=0,ht=!0,Ct=[],bt={},$t=!1,vt=function(t,n){i.extend(o,n.publicMethods),Ct.push(t)},xt=function(t){var n=qn();return t>n-1?t-n:t<0?n+t:t},yt={},wt=function(t,n){return yt[t]||(yt[t]=[]),yt[t].push(n)},Bt=function(t){var n=yt[t];if(n){var e=Array.prototype.slice.call(arguments);e.shift();for(var r=0;r<n.length;r++)n[r].apply(o,e)}},kt=function(){return(new Date).getTime()},_t=function(t){at=t,o.bg.style.opacity=t*a.bgOpacity},It=function(t,n,e,r,i){(!$t||i&&i!==o.currItem)&&(r/=i?i.fitRatio:o.currItem.fitRatio),t[I]=C+n+"px, "+e+"px"+b+" scale("+r+")"},Dt=function(t){nt&&(t&&(A>o.currItem.fitRatio?$t||(Xn(o.currItem,!1,!0),$t=!0):$t&&(Xn(o.currItem),$t=!1)),It(nt,ct.x,ct.y,A))},St=function(t){t.container&&It(t.container.style,t.initialPosition.x,t.initialPosition.y,t.initialZoomLevel,t)},zt=function(t,n){n[I]=C+t+"px, 0px"+b},Et=function(t,n){if(!a.loop&&n){var e=u+(gt.x*mt-t)/gt.x,r=Math.round(t-cn.x);(e<0&&r>0||e>=qn()-1&&r<0)&&(t=cn.x+r*a.mainScrollEndFriction)}cn.x=t,zt(t,c)},Gt=function(t,n){var e=pn[t]-ft[t];return ut[t]+dt[t]+e-e*(n/h)},Tt=function(t,n){t.x=n.x,t.y=n.y,n.id&&(t.id=n.id)},Mt=function(t){t.x=Math.round(t.x),t.y=Math.round(t.y)},jt=null,Ot=function(){jt&&(i.unbind(document,"mousemove",Ot),i.addClass(t,"pswp--has_mouse"),a.mouseUsed=!0,Bt("mouseUsed")),jt=setTimeout((function(){jt=null}),100)},Ft=function(t,n){var e=Hn(o.currItem,pt,t);return n&&(tt=e),e},Lt=function(t){return t||(t=o.currItem),t.initialZoomLevel},Pt=function(t){return t||(t=o.currItem),t.w>0?a.maxSpreadZoom:1},Rt=function(t,n,e,r){return r===o.currItem.initialZoomLevel?(e[t]=o.currItem.initialPosition[t],!0):(e[t]=Gt(t,r),e[t]>n.min[t]?(e[t]=n.min[t],!0):e[t]<n.max[t]&&(e[t]=n.max[t],!0))},qt=function(t){var n="";a.escKey&&27===t.keyCode?n="close":a.arrowKeys&&(37===t.keyCode?n="prev":39===t.keyCode&&(n="next")),n&&(t.ctrlKey||t.altKey||t.shiftKey||t.metaKey||(t.preventDefault?t.preventDefault():t.returnValue=!1,o[n]()))},Nt=function(t){t&&(Q||H||et||N)&&(t.preventDefault(),t.stopPropagation())},Yt=function(){o.setScrollOffset(0,i.getScrollY())},Ut={},Wt=0,Ht=function(t){Ut[t]&&(Ut[t].raf&&E(Ut[t].raf),Wt--,delete Ut[t])},Qt=function(t){Ut[t]&&Ht(t),Ut[t]||(Wt++,Ut[t]={})},Vt=function(){for(var t in Ut)Ut.hasOwnProperty(t)&&Ht(t)},Kt=function(t,n,e,r,i,o,a){var l,s=kt();Qt(t);var d=function(){if(Ut[t]){if((l=kt()-s)>=r)return Ht(t),o(e),void(a&&a());o((e-n)*i(l/r)+n),Ut[t].raf=z(d)}};d()},Xt={shout:Bt,listen:wt,viewportSize:pt,options:a,isMainScrollAnimating:function(){return et},getZoomLevel:function(){return A},getCurrentIndex:function(){return u},isDragging:function(){return U},isZooming:function(){return Z},setScrollOffset:function(t,n){ft.x=t,j=ft.y=n,Bt("updateScrollOffset",ft)},applyZoomPan:function(t,n,e,r){ct.x=n,ct.y=e,A=t,Dt(r)},init:function(){if(!l&&!s){var e;o.framework=i,o.template=t,o.bg=i.getChildByClass(t,"pswp__bg"),G=t.className,l=!0,O=i.detectFeatures(),z=O.raf,E=O.caf,I=O.transform,M=O.oldIE,o.scrollWrap=i.getChildByClass(t,"pswp__scroll-wrap"),o.container=i.getChildByClass(o.scrollWrap,"pswp__container"),c=o.container.style,o.itemHolders=x=[{el:o.container.children[0],wrap:0,index:-1},{el:o.container.children[1],wrap:0,index:-1},{el:o.container.children[2],wrap:0,index:-1}],x[0].el.style.display=x[2].el.style.display="none",function(){if(I){var n=O.perspective&&!S;return C="translate"+(n?"3d(":"("),void(b=O.perspective?", 0px)":")")}I="left",i.addClass(t,"pswp--ie"),zt=function(t,n){n.left=t+"px"},St=function(t){var n=t.fitRatio>1?1:t.fitRatio,e=t.container.style,r=n*t.w,i=n*t.h;e.width=r+"px",e.height=i+"px",e.left=t.initialPosition.x+"px",e.top=t.initialPosition.y+"px"},Dt=function(){if(nt){var t=nt,n=o.currItem,e=n.fitRatio>1?1:n.fitRatio,r=e*n.w,i=e*n.h;t.width=r+"px",t.height=i+"px",t.left=ct.x+"px",t.top=ct.y+"px"}}}(),g={resize:o.updateSize,orientationchange:function(){clearTimeout(F),F=setTimeout((function(){pt.x!==o.scrollWrap.clientWidth&&o.updateSize()}),500)},scroll:Yt,keydown:qt,click:Nt};var r=O.isOldIOSPhone||O.isOldAndroid||O.isMobileOpera;for(O.animationName&&O.transform&&!r||(a.showAnimationDuration=a.hideAnimationDuration=0),e=0;e<Ct.length;e++)o["init"+Ct[e]]();n&&(o.ui=new n(o,i)).init(),Bt("firstUpdate"),u=u||a.index||0,(isNaN(u)||u<0||u>=qn())&&(u=0),o.currItem=Rn(u),(O.isOldIOSPhone||O.isOldAndroid)&&(ht=!1),t.setAttribute("aria-hidden","false"),a.modal&&(ht?t.style.position="fixed":(t.style.position="absolute",t.style.top=i.getScrollY()+"px")),void 0===j&&(Bt("initialLayout"),j=T=i.getScrollY());var d="pswp--open ";for(a.mainClass&&(d+=a.mainClass+" "),a.showHideOpacity&&(d+="pswp--animate_opacity "),d+=S?"pswp--touch":"pswp--notouch",d+=O.animationName?" pswp--css_animation":"",d+=O.svg?" pswp--svg":"",i.addClass(t,d),o.updateSize(),p=-1,At=null,e=0;e<3;e++)zt((e+p)*gt.x,x[e].el.style);M||i.bind(o.scrollWrap,f,o),wt("initialZoomInEnd",(function(){o.setContent(x[0],u-1),o.setContent(x[2],u+1),x[0].el.style.display=x[2].el.style.display="block",a.focus&&t.focus(),i.bind(document,"keydown",o),O.transform&&i.bind(o.scrollWrap,"click",o),a.mouseUsed||i.bind(document,"mousemove",Ot),i.bind(window,"resize scroll orientationchange",o),Bt("bindEvents")})),o.setContent(x[1],u),o.updateCurrItem(),Bt("afterInit"),ht||($=setInterval((function(){Wt||U||Z||A!==o.currItem.initialZoomLevel||o.updateSize()}),1e3)),i.addClass(t,"pswp--visible")}},close:function(){l&&(l=!1,s=!0,Bt("close"),i.unbind(window,"resize scroll orientationchange",o),i.unbind(window,"scroll",g.scroll),i.unbind(document,"keydown",o),i.unbind(document,"mousemove",Ot),O.transform&&i.unbind(o.scrollWrap,"click",o),U&&i.unbind(window,m,o),clearTimeout(F),Bt("unbindEvents"),Nn(o.currItem,null,!0,o.destroy))},destroy:function(){Bt("destroy"),On&&clearTimeout(On),t.setAttribute("aria-hidden","true"),t.className=G,$&&clearInterval($),i.unbind(o.scrollWrap,f,o),i.unbind(window,"scroll",o),gn(),Vt(),yt=null},panTo:function(t,n,e){e||(t>tt.min.x?t=tt.min.x:t<tt.max.x&&(t=tt.max.x),n>tt.min.y?n=tt.min.y:n<tt.max.y&&(n=tt.max.y)),ct.x=t,ct.y=n,Dt()},handleEvent:function(t){t=t||window.event,g[t.type]&&g[t.type](t)},goTo:function(t){var n=(t=xt(t))-u;At=n,u=t,o.currItem=Rn(u),mt-=n,Et(gt.x*mt),Vt(),et=!1,o.updateCurrItem()},next:function(){o.goTo(u+1)},prev:function(){o.goTo(u-1)},updateCurrZoomItem:function(t){if(t&&Bt("beforeChange",0),x[1].el.children.length){var n=x[1].el.children[0];nt=i.hasClass(n,"pswp__zoom-wrap")?n.style:null}else nt=null;tt=o.currItem.bounds,h=A=o.currItem.initialZoomLevel,ct.x=tt.center.x,ct.y=tt.center.y,t&&Bt("afterChange")},invalidateCurrItems:function(){v=!0;for(var t=0;t<3;t++)x[t].item&&(x[t].item.needsUpdate=!0)},updateCurrItem:function(t){if(0!==At){var n,e=Math.abs(At);if(!(t&&e<2)){o.currItem=Rn(u),$t=!1,Bt("beforeChange",At),e>=3&&(p+=At+(At>0?-3:3),e=3);for(var r=0;r<e;r++)At>0?(n=x.shift(),x[2]=n,p++,zt((p+2)*gt.x,n.el.style),o.setContent(n,u-e+r+1+1)):(n=x.pop(),x.unshift(n),p--,zt(p*gt.x,n.el.style),o.setContent(n,u+e-r-1-1));if(nt&&1===Math.abs(At)){var i=Rn(y);i.initialZoomLevel!==A&&(Hn(i,pt),Xn(i),St(i))}At=0,o.updateCurrZoomItem(),y=u,Bt("afterChange")}}},updateSize:function(n){if(!ht&&a.modal){var e=i.getScrollY();if(j!==e&&(t.style.top=e+"px",j=e),!n&&bt.x===window.innerWidth&&bt.y===window.innerHeight)return;bt.x=window.innerWidth,bt.y=window.innerHeight,t.style.height=bt.y+"px"}if(pt.x=o.scrollWrap.clientWidth,pt.y=o.scrollWrap.clientHeight,Yt(),gt.x=pt.x+Math.round(pt.x*a.spacing),gt.y=pt.y,Et(gt.x*mt),Bt("beforeResize"),void 0!==p){for(var r,l,s,d=0;d<3;d++)r=x[d],zt((d+p)*gt.x,r.el.style),s=u+d-1,a.loop&&qn()>2&&(s=xt(s)),(l=Rn(s))&&(v||l.needsUpdate||!l.bounds)?(o.cleanSlide(l),o.setContent(r,s),1===d&&(o.currItem=l,o.updateCurrZoomItem(!0)),l.needsUpdate=!1):-1===r.index&&s>=0&&o.setContent(r,s),l&&l.container&&(Hn(l,pt),Xn(l),St(l));v=!1}h=A=o.currItem.initialZoomLevel,(tt=o.currItem.bounds)&&(ct.x=tt.center.x,ct.y=tt.center.y,Dt(!0)),Bt("resize")},zoomTo:function(t,n,e,r,o){n&&(h=A,pn.x=Math.abs(n.x)-ct.x,pn.y=Math.abs(n.y)-ct.y,Tt(ut,ct));var a=Ft(t,!1),l={};Rt("x",a,l,t),Rt("y",a,l,t);var s=A,d=ct.x,u=ct.y;Mt(l);var c=function(n){1===n?(A=t,ct.x=l.x,ct.y=l.y):(A=(t-s)*n+s,ct.x=(l.x-d)*n+d,ct.y=(l.y-u)*n+u),o&&o(n),Dt(1===n)};e?Kt("customZoomTo",0,1,e,r||i.easing.sine.inOut,c):c(1)}},Zt={},Jt={},tn={},nn={},en={},rn=[],on={},an=[],ln={},sn=0,dn={x:0,y:0},un=0,cn={x:0,y:0},pn={x:0,y:0},mn={x:0,y:0},fn=function(t,n){return ln.x=Math.abs(t.x-n.x),ln.y=Math.abs(t.y-n.y),Math.sqrt(ln.x*ln.x+ln.y*ln.y)},gn=function(){V&&(E(V),V=null)},An=function(){U&&(V=z(An),Sn())},hn=function(t,n){return!(!t||t===document)&&!(t.getAttribute("class")&&t.getAttribute("class").indexOf("pswp__scroll-wrap")>-1)&&(n(t)?t:hn(t.parentNode,n))},Cn={},bn=function(t,n){return Cn.prevent=!hn(t.target,a.isClickableElement),Bt("preventDragEvent",t,n,Cn),Cn.prevent},$n=function(t,n){return n.x=t.pageX,n.y=t.pageY,n.id=t.identifier,n},vn=function(t,n,e){e.x=.5*(t.x+n.x),e.y=.5*(t.y+n.y)},xn=function(){var t=ct.y-o.currItem.initialPosition.y;return 1-Math.abs(t/(pt.y/2))},yn={},wn={},Bn=[],kn=function(t){for(;Bn.length>0;)Bn.pop();return D?(st=0,rn.forEach((function(t){0===st?Bn[0]=t:1===st&&(Bn[1]=t),st++}))):t.type.indexOf("touch")>-1?t.touches&&t.touches.length>0&&(Bn[0]=$n(t.touches[0],yn),t.touches.length>1&&(Bn[1]=$n(t.touches[1],wn))):(yn.x=t.pageX,yn.y=t.pageY,yn.id="",Bn[0]=yn),Bn},_n=function(t,n){var e,r,i,l,s=ct[t]+n[t],d=n[t]>0,u=cn.x+n.x,c=cn.x-on.x;if(e=s>tt.min[t]||s<tt.max[t]?a.panEndFriction:1,s=ct[t]+n[t]*e,(a.allowPanToNext||A===o.currItem.initialZoomLevel)&&(nt?"h"!==rt||"x"!==t||H||(d?(s>tt.min[t]&&(e=a.panEndFriction,tt.min[t],r=tt.min[t]-ut[t]),(r<=0||c<0)&&qn()>1?(l=u,c<0&&u>on.x&&(l=on.x)):tt.min.x!==tt.max.x&&(i=s)):(s<tt.max[t]&&(e=a.panEndFriction,tt.max[t],r=ut[t]-tt.max[t]),(r<=0||c>0)&&qn()>1?(l=u,c>0&&u<on.x&&(l=on.x)):tt.min.x!==tt.max.x&&(i=s))):l=u,"x"===t))return void 0!==l&&(Et(l,!0),K=l!==on.x),tt.min.x!==tt.max.x&&(void 0!==i?ct.x=i:K||(ct.x+=n.x*e)),void 0!==l;et||K||A>o.currItem.fitRatio&&(ct[t]+=n[t]*e)},In=function(t){if(!("mousedown"===t.type&&t.button>0))if(Pn)t.preventDefault();else if(!Y||"mousedown"!==t.type){if(bn(t,!0)&&t.preventDefault(),Bt("pointerDown"),D){var n=i.arraySearch(rn,t.pointerId,"id");n<0&&(n=rn.length),rn[n]={x:t.pageX,y:t.pageY,id:t.pointerId}}var e=kn(t),r=e.length;X=null,Vt(),U&&1!==r||(U=it=!0,i.bind(window,m,o),q=lt=ot=N=K=Q=W=H=!1,rt=null,Bt("firstTouchStart",e),Tt(ut,ct),dt.x=dt.y=0,Tt(nn,e[0]),Tt(en,nn),on.x=gt.x*mt,an=[{x:nn.x,y:nn.y}],P=L=kt(),Ft(A,!0),gn(),An()),!Z&&r>1&&!et&&!K&&(h=A,H=!1,Z=W=!0,dt.y=dt.x=0,Tt(ut,ct),Tt(Zt,e[0]),Tt(Jt,e[1]),vn(Zt,Jt,mn),pn.x=Math.abs(mn.x)-ct.x,pn.y=Math.abs(mn.y)-ct.y,J=fn(Zt,Jt))}},Dn=function(t){if(t.preventDefault(),D){var n=i.arraySearch(rn,t.pointerId,"id");if(n>-1){var e=rn[n];e.x=t.pageX,e.y=t.pageY}}if(U){var r=kn(t);if(rt||Q||Z)X=r;else if(cn.x!==gt.x*mt)rt="h";else{var o=Math.abs(r[0].x-nn.x)-Math.abs(r[0].y-nn.y);Math.abs(o)>=10&&(rt=o>0?"h":"v",X=r)}}},Sn=function(){if(X){var t=X.length;if(0!==t)if(Tt(Zt,X[0]),tn.x=Zt.x-nn.x,tn.y=Zt.y-nn.y,Z&&t>1){if(nn.x=Zt.x,nn.y=Zt.y,!tn.x&&!tn.y&&function(t,n){return t.x===n.x&&t.y===n.y}(X[1],Jt))return;Tt(Jt,X[1]),H||(H=!0,Bt("zoomGestureStarted"));var n=fn(Zt,Jt),e=Mn(n);e>o.currItem.initialZoomLevel+o.currItem.initialZoomLevel/15&&(lt=!0);var r=1,i=Lt(),l=Pt();if(e<i)if(a.pinchToClose&&!lt&&h<=o.currItem.initialZoomLevel){var s=1-(i-e)/(i/1.2);_t(s),Bt("onPinchClose",s),ot=!0}else(r=(i-e)/i)>1&&(r=1),e=i-r*(i/3);else e>l&&((r=(e-l)/(6*i))>1&&(r=1),e=l+r*i);r<0&&(r=0),vn(Zt,Jt,dn),dt.x+=dn.x-mn.x,dt.y+=dn.y-mn.y,Tt(mn,dn),ct.x=Gt("x",e),ct.y=Gt("y",e),q=e>A,A=e,Dt()}else{if(!rt)return;if(it&&(it=!1,Math.abs(tn.x)>=10&&(tn.x-=X[0].x-en.x),Math.abs(tn.y)>=10&&(tn.y-=X[0].y-en.y)),nn.x=Zt.x,nn.y=Zt.y,0===tn.x&&0===tn.y)return;if("v"===rt&&a.closeOnVerticalDrag&&"fit"===a.scaleMode&&A===o.currItem.initialZoomLevel){dt.y+=tn.y,ct.y+=tn.y;var d=xn();return N=!0,Bt("onVerticalDrag",d),_t(d),void Dt()}(function(t,n,e){if(t-P>50){var r=an.length>2?an.shift():{};r.x=n,r.y=e,an.push(r),P=t}})(kt(),Zt.x,Zt.y),Q=!0,tt=o.currItem.bounds,_n("x",tn)||(_n("y",tn),Mt(ct),Dt())}}},zn=function(t){if(O.isOldAndroid){if(Y&&"mouseup"===t.type)return;t.type.indexOf("touch")>-1&&(clearTimeout(Y),Y=setTimeout((function(){Y=0}),600))}var n;if(Bt("pointerUp"),bn(t,!1)&&t.preventDefault(),D){var e=i.arraySearch(rn,t.pointerId,"id");if(e>-1)if(n=rn.splice(e,1)[0],navigator.msPointerEnabled){n.type={4:"mouse",2:"touch",3:"pen"}[t.pointerType],n.type||(n.type=t.pointerType||"mouse")}else n.type=t.pointerType||"mouse"}var r,l=kn(t),s=l.length;if("mouseup"===t.type&&(s=0),2===s)return X=null,!0;1===s&&Tt(en,l[0]),0!==s||rt||et||(n||("mouseup"===t.type?n={x:t.pageX,y:t.pageY,type:"mouse"}:t.changedTouches&&t.changedTouches[0]&&(n={x:t.changedTouches[0].pageX,y:t.changedTouches[0].pageY,type:"touch"})),Bt("touchRelease",t,n));var d=-1;if(0===s&&(U=!1,i.unbind(window,m,o),gn(),Z?d=0:-1!==un&&(d=kt()-un)),un=1===s?kt():-1,r=-1!==d&&d<150?"zoom":"swipe",Z&&s<2&&(Z=!1,1===s&&(r="zoomPointerUp"),Bt("zoomGestureEnded")),X=null,Q||H||et||N)if(Vt(),R||(R=En()),R.calculateSwipeSpeed("x"),N)if(xn()<a.verticalDragRange)o.close();else{var u=ct.y,c=at;Kt("verticalDrag",0,1,300,i.easing.cubic.out,(function(t){ct.y=(o.currItem.initialPosition.y-u)*t+u,_t((1-c)*t+c),Dt()})),Bt("onVerticalDrag",1)}else{if((K||et)&&0===s){if(Tn(r,R))return;r="zoomPointerUp"}et||("swipe"===r?!K&&A>o.currItem.fitRatio&&Gn(R):jn())}},En=function(){var t,n,e={lastFlickOffset:{},lastFlickDist:{},lastFlickSpeed:{},slowDownRatio:{},slowDownRatioReverse:{},speedDecelerationRatio:{},speedDecelerationRatioAbs:{},distanceOffset:{},backAnimDestination:{},backAnimStarted:{},calculateSwipeSpeed:function(r){an.length>1?(t=kt()-P+50,n=an[an.length-2][r]):(t=kt()-L,n=en[r]),e.lastFlickOffset[r]=nn[r]-n,e.lastFlickDist[r]=Math.abs(e.lastFlickOffset[r]),e.lastFlickDist[r]>20?e.lastFlickSpeed[r]=e.lastFlickOffset[r]/t:e.lastFlickSpeed[r]=0,Math.abs(e.lastFlickSpeed[r])<.1&&(e.lastFlickSpeed[r]=0),e.slowDownRatio[r]=.95,e.slowDownRatioReverse[r]=1-e.slowDownRatio[r],e.speedDecelerationRatio[r]=1},calculateOverBoundsAnimOffset:function(t,n){e.backAnimStarted[t]||(ct[t]>tt.min[t]?e.backAnimDestination[t]=tt.min[t]:ct[t]<tt.max[t]&&(e.backAnimDestination[t]=tt.max[t]),void 0!==e.backAnimDestination[t]&&(e.slowDownRatio[t]=.7,e.slowDownRatioReverse[t]=1-e.slowDownRatio[t],e.speedDecelerationRatioAbs[t]<.05&&(e.lastFlickSpeed[t]=0,e.backAnimStarted[t]=!0,Kt("bounceZoomPan"+t,ct[t],e.backAnimDestination[t],n||300,i.easing.sine.out,(function(n){ct[t]=n,Dt()})))))},calculateAnimOffset:function(t){e.backAnimStarted[t]||(e.speedDecelerationRatio[t]=e.speedDecelerationRatio[t]*(e.slowDownRatio[t]+e.slowDownRatioReverse[t]-e.slowDownRatioReverse[t]*e.timeDiff/10),e.speedDecelerationRatioAbs[t]=Math.abs(e.lastFlickSpeed[t]*e.speedDecelerationRatio[t]),e.distanceOffset[t]=e.lastFlickSpeed[t]*e.speedDecelerationRatio[t]*e.timeDiff,ct[t]+=e.distanceOffset[t])},panAnimLoop:function(){if(Ut.zoomPan&&(Ut.zoomPan.raf=z(e.panAnimLoop),e.now=kt(),e.timeDiff=e.now-e.lastNow,e.lastNow=e.now,e.calculateAnimOffset("x"),e.calculateAnimOffset("y"),Dt(),e.calculateOverBoundsAnimOffset("x"),e.calculateOverBoundsAnimOffset("y"),e.speedDecelerationRatioAbs.x<.05&&e.speedDecelerationRatioAbs.y<.05))return ct.x=Math.round(ct.x),ct.y=Math.round(ct.y),Dt(),void Ht("zoomPan")}};return e},Gn=function(t){if(t.calculateSwipeSpeed("y"),tt=o.currItem.bounds,t.backAnimDestination={},t.backAnimStarted={},Math.abs(t.lastFlickSpeed.x)<=.05&&Math.abs(t.lastFlickSpeed.y)<=.05)return t.speedDecelerationRatioAbs.x=t.speedDecelerationRatioAbs.y=0,t.calculateOverBoundsAnimOffset("x"),t.calculateOverBoundsAnimOffset("y"),!0;Qt("zoomPan"),t.lastNow=kt(),t.panAnimLoop()},Tn=function(t,n){var e,r,l;if(et||(sn=u),"swipe"===t){var s=nn.x-en.x,d=n.lastFlickDist.x<10;s>30&&(d||n.lastFlickOffset.x>20)?r=-1:s<-30&&(d||n.lastFlickOffset.x<-20)&&(r=1)}r&&((u+=r)<0?(u=a.loop?qn()-1:0,l=!0):u>=qn()&&(u=a.loop?0:qn()-1,l=!0),l&&!a.loop||(At+=r,mt-=r,e=!0));var c,p=gt.x*mt,m=Math.abs(p-cn.x);return e||p>cn.x==n.lastFlickSpeed.x>0?(c=Math.abs(n.lastFlickSpeed.x)>0?m/Math.abs(n.lastFlickSpeed.x):333,c=Math.min(c,400),c=Math.max(c,250)):c=333,sn===u&&(e=!1),et=!0,Bt("mainScrollAnimStart"),Kt("mainScroll",cn.x,p,c,i.easing.cubic.out,Et,(function(){Vt(),et=!1,sn=-1,(e||sn!==u)&&o.updateCurrItem(),Bt("mainScrollAnimComplete")})),e&&o.updateCurrItem(!0),e},Mn=function(t){return 1/J*t*h},jn=function(){var t=A,n=Lt(),e=Pt();A<n?t=n:A>e&&(t=e);var r,a=at;return ot&&!q&&!lt&&A<n?(o.close(),!0):(ot&&(r=function(t){_t((1-a)*t+a)}),o.zoomTo(t,0,200,i.easing.cubic.out,r),!0)};vt("Gestures",{publicMethods:{initGestures:function(){var t=function(t,n,e,r,i){w=t+n,B=t+e,k=t+r,_=i?t+i:""};(D=O.pointerEvent)&&O.touch&&(O.touch=!1),D?navigator.msPointerEnabled?t("MSPointer","Down","Move","Up","Cancel"):t("pointer","down","move","up","cancel"):O.touch?(t("touch","start","move","end","cancel"),S=!0):t("mouse","down","move","up"),m=B+" "+k+" "+_,f=w,D&&!S&&(S=navigator.maxTouchPoints>1||navigator.msMaxTouchPoints>1),o.likelyTouchDevice=S,g[w]=In,g[B]=Dn,g[k]=zn,_&&(g[_]=g[k]),O.touch&&(f+=" mousedown",m+=" mousemove mouseup",g.mousedown=g[w],g.mousemove=g[B],g.mouseup=g[k]),S||(a.allowPanToNext=!1)}}});var On,Fn,Ln,Pn,Rn,qn,Nn=function(n,e,r,l){var s;On&&clearTimeout(On),Pn=!0,Ln=!0,n.initialLayout?(s=n.initialLayout,n.initialLayout=null):s=a.getThumbBoundsFn&&a.getThumbBoundsFn(u);var c,p,m=r?a.hideAnimationDuration:a.showAnimationDuration,f=function(){Ht("initialZoom"),r?(o.template.removeAttribute("style"),o.bg.removeAttribute("style")):(_t(1),e&&(e.style.display="block"),i.addClass(t,"pswp--animated-in"),Bt("initialZoom"+(r?"OutEnd":"InEnd"))),l&&l(),Pn=!1};if(!m||!s||void 0===s.x)return Bt("initialZoom"+(r?"Out":"In")),A=n.initialZoomLevel,Tt(ct,n.initialPosition),Dt(),t.style.opacity=r?0:1,_t(1),void(m?setTimeout((function(){f()}),m):f());c=d,p=!o.currItem.src||o.currItem.loadError||a.showHideOpacity,n.miniImg&&(n.miniImg.style.webkitBackfaceVisibility="hidden"),r||(A=s.w/n.w,ct.x=s.x,ct.y=s.y-T,o[p?"template":"bg"].style.opacity=.001,Dt()),Qt("initialZoom"),r&&!c&&i.removeClass(t,"pswp--animated-in"),p&&(r?i[(c?"remove":"add")+"Class"](t,"pswp--animate_opacity"):setTimeout((function(){i.addClass(t,"pswp--animate_opacity")}),30)),On=setTimeout((function(){if(Bt("initialZoom"+(r?"Out":"In")),r){var e=s.w/n.w,o={x:ct.x,y:ct.y},a=A,l=at,d=function(n){1===n?(A=e,ct.x=s.x,ct.y=s.y-j):(A=(e-a)*n+a,ct.x=(s.x-o.x)*n+o.x,ct.y=(s.y-j-o.y)*n+o.y),Dt(),p?t.style.opacity=1-n:_t(l-n*l)};c?Kt("initialZoom",0,1,m,i.easing.cubic.out,d,f):(d(1),On=setTimeout(f,m+20))}else A=n.initialZoomLevel,Tt(ct,n.initialPosition),Dt(),_t(1),p?t.style.opacity=1:_t(1),On=setTimeout(f,m+20)}),r?25:90)},Yn={},Un=[],Wn={index:0,errorMsg:'<div class="pswp__error-msg"><a href="%url%" target="_blank">The image</a> could not be loaded.</div>',forceProgressiveLoading:!1,preload:[1,1],getNumItemsFn:function(){return Fn.length}},Hn=function(t,n,e){if(t.src&&!t.loadError){var r=!e;if(r&&(t.vGap||(t.vGap={top:0,bottom:0}),Bt("parseVerticalMargin",t)),Yn.x=n.x,Yn.y=n.y-t.vGap.top-t.vGap.bottom,r){var i=Yn.x/t.w,o=Yn.y/t.h;t.fitRatio=i<o?i:o;var l=a.scaleMode;"orig"===l?e=1:"fit"===l&&(e=t.fitRatio),e>1&&(e=1),t.initialZoomLevel=e,t.bounds||(t.bounds={center:{x:0,y:0},max:{x:0,y:0},min:{x:0,y:0}})}if(!e)return;return function(t,n,e){var r=t.bounds;r.center.x=Math.round((Yn.x-n)/2),r.center.y=Math.round((Yn.y-e)/2)+t.vGap.top,r.max.x=n>Yn.x?Math.round(Yn.x-n):r.center.x,r.max.y=e>Yn.y?Math.round(Yn.y-e)+t.vGap.top:r.center.y,r.min.x=n>Yn.x?0:r.center.x,r.min.y=e>Yn.y?t.vGap.top:r.center.y}(t,t.w*e,t.h*e),r&&e===t.initialZoomLevel&&(t.initialPosition=t.bounds.center),t.bounds}return t.w=t.h=0,t.initialZoomLevel=t.fitRatio=1,t.bounds={center:{x:0,y:0},max:{x:0,y:0},min:{x:0,y:0}},t.initialPosition=t.bounds.center,t.bounds},Qn=function(t,n,e,r,i,a){n.loadError||r&&(n.imageAppended=!0,Xn(n,r,n===o.currItem&&$t),e.appendChild(r),a&&setTimeout((function(){n&&n.loaded&&n.placeholder&&(n.placeholder.style.display="none",n.placeholder=null)}),500))},Vn=function(t){t.loading=!0,t.loaded=!1;var n=t.img=i.createEl("pswp__img","img"),e=function(){t.loading=!1,t.loaded=!0,t.loadComplete?t.loadComplete(t):t.img=null,n.onload=n.onerror=null,n=null};return n.onload=e,n.onerror=function(){t.loadError=!0,e()},n.src=t.src,n},Kn=function(t,n){if(t.src&&t.loadError&&t.container)return n&&(t.container.innerHTML=""),t.container.innerHTML=a.errorMsg.replace("%url%",t.src),!0},Xn=function(t,n,e){if(t.src){n||(n=t.container.lastChild);var r=e?t.w:Math.round(t.w*t.fitRatio),i=e?t.h:Math.round(t.h*t.fitRatio);t.placeholder&&!t.loaded&&(t.placeholder.style.width=r+"px",t.placeholder.style.height=i+"px"),n.style.width=r+"px",n.style.height=i+"px"}},Zn=function(){if(Un.length){for(var t,n=0;n<Un.length;n++)(t=Un[n]).holder.index===t.index&&Qn(t.index,t.item,t.baseDiv,t.img,0,t.clearPlaceholder);Un=[]}};vt("Controller",{publicMethods:{lazyLoadItem:function(t){t=xt(t);var n=Rn(t);n&&(!n.loaded&&!n.loading||v)&&(Bt("gettingData",t,n),n.src&&Vn(n))},initController:function(){i.extend(a,Wn,!0),o.items=Fn=e,Rn=o.getItemAt,qn=a.getNumItemsFn,a.loop,qn()<3&&(a.loop=!1),wt("beforeChange",(function(t){var n,e=a.preload,r=null===t||t>=0,i=Math.min(e[0],qn()),l=Math.min(e[1],qn());for(n=1;n<=(r?l:i);n++)o.lazyLoadItem(u+n);for(n=1;n<=(r?i:l);n++)o.lazyLoadItem(u-n)})),wt("initialLayout",(function(){o.currItem.initialLayout=a.getThumbBoundsFn&&a.getThumbBoundsFn(u)})),wt("mainScrollAnimComplete",Zn),wt("initialZoomInEnd",Zn),wt("destroy",(function(){for(var t,n=0;n<Fn.length;n++)(t=Fn[n]).container&&(t.container=null),t.placeholder&&(t.placeholder=null),t.img&&(t.img=null),t.preloader&&(t.preloader=null),t.loadError&&(t.loaded=t.loadError=!1);Un=null}))},getItemAt:function(t){return t>=0&&void 0!==Fn[t]&&Fn[t]},allowProgressiveImg:function(){return a.forceProgressiveLoading||!S||a.mouseUsed||screen.width>1200},setContent:function(t,n){a.loop&&(n=xt(n));var e=o.getItemAt(t.index);e&&(e.container=null);var r,s=o.getItemAt(n);if(s){Bt("gettingData",n,s),t.index=n,t.item=s;var d=s.container=i.createEl("pswp__zoom-wrap");if(!s.src&&s.html&&(s.html.tagName?d.appendChild(s.html):d.innerHTML=s.html),Kn(s),Hn(s,pt),!s.src||s.loadError||s.loaded)s.src&&!s.loadError&&((r=i.createEl("pswp__img","img")).style.opacity=1,r.src=s.src,Xn(s,r),Qn(0,s,d,r));else{if(s.loadComplete=function(e){if(l){if(t&&t.index===n){if(Kn(e,!0))return e.loadComplete=e.img=null,Hn(e,pt),St(e),void(t.index===u&&o.updateCurrZoomItem());e.imageAppended?!Pn&&e.placeholder&&(e.placeholder.style.display="none",e.placeholder=null):O.transform&&(et||Pn)?Un.push({item:e,baseDiv:d,img:e.img,index:n,holder:t,clearPlaceholder:!0}):Qn(0,e,d,e.img,0,!0)}e.loadComplete=null,e.img=null,Bt("imageLoadComplete",n,e)}},i.features.transform){var c="pswp__img pswp__img--placeholder";c+=s.msrc?"":" pswp__img--placeholder--blank";var p=i.createEl(c,s.msrc?"img":"");s.msrc&&(p.src=s.msrc),Xn(s,p),d.appendChild(p),s.placeholder=p}s.loading||Vn(s),o.allowProgressiveImg()&&(!Ln&&O.transform?Un.push({item:s,baseDiv:d,img:s.img,index:n,holder:t}):Qn(0,s,d,s.img,0,!0))}Ln||n!==u?St(s):(nt=d.style,Nn(s,r||s.img)),t.el.innerHTML="",t.el.appendChild(d)}else t.el.innerHTML=""},cleanSlide:function(t){t.img&&(t.img.onload=t.img.onerror=null),t.loaded=t.loading=t.img=t.imageAppended=!1}}});var Jn,te,ne={},ee=function(t,n,e){var r=document.createEvent("CustomEvent"),i={origEvent:t,target:t.target,releasePoint:n,pointerType:e||"touch"};r.initCustomEvent("pswpTap",!0,!0,i),t.target.dispatchEvent(r)};vt("Tap",{publicMethods:{initTap:function(){wt("firstTouchStart",o.onTapStart),wt("touchRelease",o.onTapRelease),wt("destroy",(function(){ne={},Jn=null}))},onTapStart:function(t){t.length>1&&(clearTimeout(Jn),Jn=null)},onTapRelease:function(t,n){if(n&&!Q&&!W&&!Wt){var e=n;if(Jn&&(clearTimeout(Jn),Jn=null,r=e,o=ne,Math.abs(r.x-o.x)<25&&Math.abs(r.y-o.y)<25))return void Bt("doubleTap",e);if("mouse"===n.type)return void ee(t,n,"mouse");if("BUTTON"===t.target.tagName.toUpperCase()||i.hasClass(t.target,"pswp__single-tap"))return void ee(t,n);Tt(ne,e),Jn=setTimeout((function(){ee(t,n),Jn=null}),300)}var r,o}}}),vt("DesktopZoom",{publicMethods:{initDesktopZoom:function(){M||(S?wt("mouseUsed",(function(){o.setupDesktopZoom()})):o.setupDesktopZoom(!0))},setupDesktopZoom:function(n){te={};var e="wheel mousewheel DOMMouseScroll";wt("bindEvents",(function(){i.bind(t,e,o.handleMouseWheel)})),wt("unbindEvents",(function(){te&&i.unbind(t,e,o.handleMouseWheel)})),o.mouseZoomedIn=!1;var r,a=function(){o.mouseZoomedIn&&(i.removeClass(t,"pswp--zoomed-in"),o.mouseZoomedIn=!1),A<1?i.addClass(t,"pswp--zoom-allowed"):i.removeClass(t,"pswp--zoom-allowed"),l()},l=function(){r&&(i.removeClass(t,"pswp--dragging"),r=!1)};wt("resize",a),wt("afterChange",a),wt("pointerDown",(function(){o.mouseZoomedIn&&(r=!0,i.addClass(t,"pswp--dragging"))})),wt("pointerUp",l),n||a()},handleMouseWheel:function(t){if(A<=o.currItem.fitRatio)return a.modal&&(!a.closeOnScroll||Wt||U?t.preventDefault():I&&Math.abs(t.deltaY)>2&&(d=!0,o.close())),!0;if(t.stopPropagation(),te.x=0,"deltaX"in t)1===t.deltaMode?(te.x=18*t.deltaX,te.y=18*t.deltaY):(te.x=t.deltaX,te.y=t.deltaY);else if("wheelDelta"in t)t.wheelDeltaX&&(te.x=-.16*t.wheelDeltaX),t.wheelDeltaY?te.y=-.16*t.wheelDeltaY:te.y=-.16*t.wheelDelta;else{if(!("detail"in t))return;te.y=t.detail}Ft(A,!0);var n=ct.x-te.x,e=ct.y-te.y;(a.modal||n<=tt.min.x&&n>=tt.max.x&&e<=tt.min.y&&e>=tt.max.y)&&t.preventDefault(),o.panTo(n,e)},toggleDesktopZoom:function(n){n=n||{x:pt.x/2+ft.x,y:pt.y/2+ft.y};var e=a.getDoubleTapZoom(!0,o.currItem),r=A===e;o.mouseZoomedIn=!r,o.zoomTo(r?o.currItem.initialZoomLevel:e,n,333),i[(r?"remove":"add")+"Class"](t,"pswp--zoomed-in")}}});var re,ie,oe,ae,le,se,de,ue,ce,pe,me,fe,ge={history:!0,galleryUID:1},Ae=function(){return me.hash.substring(1)},he=function(){re&&clearTimeout(re),oe&&clearTimeout(oe)},Ce=function(){var t=Ae(),n={};if(t.length<5)return n;var e,r=t.split("&");for(e=0;e<r.length;e++)if(r[e]){var i=r[e].split("=");i.length<2||(n[i[0]]=i[1])}if(a.galleryPIDs){var o=n.pid;for(n.pid=0,e=0;e<Fn.length;e++)if(Fn[e].pid===o){n.pid=e;break}}else n.pid=parseInt(n.pid,10)-1;return n.pid<0&&(n.pid=0),n},be=function(){if(oe&&clearTimeout(oe),Wt||U)oe=setTimeout(be,500);else{ae?clearTimeout(ie):ae=!0;var t=u+1,n=Rn(u);n.hasOwnProperty("pid")&&(t=n.pid);var e=de+"&gid="+a.galleryUID+"&pid="+t;ue||-1===me.hash.indexOf(e)&&(pe=!0);var r=me.href.split("#")[0]+"#"+e;fe?"#"+e!==window.location.hash&&history[ue?"replaceState":"pushState"]("",document.title,r):ue?me.replace(r):me.hash=e,ue=!0,ie=setTimeout((function(){ae=!1}),60)}};vt("History",{publicMethods:{initHistory:function(){if(i.extend(a,ge,!0),a.history){me=window.location,pe=!1,ce=!1,ue=!1,de=Ae(),fe="pushState"in history,de.indexOf("gid=")>-1&&(de=(de=de.split("&gid=")[0]).split("?gid=")[0]),wt("afterChange",o.updateURL),wt("unbindEvents",(function(){i.unbind(window,"hashchange",o.onHashChange)}));var t=function(){se=!0,ce||(pe?history.back():de?me.hash=de:fe?history.pushState("",document.title,me.pathname+me.search):me.hash=""),he()};wt("unbindEvents",(function(){d&&t()})),wt("destroy",(function(){se||t()})),wt("firstUpdate",(function(){u=Ce().pid}));var n=de.indexOf("pid=");n>-1&&"&"===(de=de.substring(0,n)).slice(-1)&&(de=de.slice(0,-1)),setTimeout((function(){l&&i.bind(window,"hashchange",o.onHashChange)}),40)}},onHashChange:function(){if(Ae()===de)return ce=!0,void o.close();ae||(le=!0,o.goTo(Ce().pid),le=!1)},updateURL:function(){he(),le||(ue?re=setTimeout(be,800):be())}}}),i.extend(o,Xt)}})?r.call(n,e,n,t):r)||(t.exports=i)},20205:(t,n,e)=>{var r=function(){return this}()||Function("return this")(),i=r.regeneratorRuntime&&Object.getOwnPropertyNames(r).indexOf("regeneratorRuntime")>=0,o=i&&r.regeneratorRuntime;if(r.regeneratorRuntime=void 0,t.exports=e(35666),i)r.regeneratorRuntime=o;else try{delete r.regeneratorRuntime}catch(t){r.regeneratorRuntime=void 0}},35666:t=>{!function(n){"use strict";var e,r=Object.prototype,i=r.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",l=o.asyncIterator||"@@asyncIterator",s=o.toStringTag||"@@toStringTag",d=n.regeneratorRuntime;if(d)t.exports=d;else{(d=n.regeneratorRuntime=t.exports).wrap=b;var u="suspendedStart",c="suspendedYield",p="executing",m="completed",f={},g={};g[a]=function(){return this};var A=Object.getPrototypeOf,h=A&&A(A(S([])));h&&h!==r&&i.call(h,a)&&(g=h);var C=y.prototype=v.prototype=Object.create(g);x.prototype=C.constructor=y,y.constructor=x,y[s]=x.displayName="GeneratorFunction",d.isGeneratorFunction=function(t){var n="function"==typeof t&&t.constructor;return!!n&&(n===x||"GeneratorFunction"===(n.displayName||n.name))},d.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,y):(t.__proto__=y,s in t||(t[s]="GeneratorFunction")),t.prototype=Object.create(C),t},d.awrap=function(t){return{__await:t}},w(B.prototype),B.prototype[l]=function(){return this},d.AsyncIterator=B,d.async=function(t,n,e,r){var i=new B(b(t,n,e,r));return d.isGeneratorFunction(n)?i:i.next().then((function(t){return t.done?t.value:i.next()}))},w(C),C[s]="Generator",C[a]=function(){return this},C.toString=function(){return"[object Generator]"},d.keys=function(t){var n=[];for(var e in t)n.push(e);return n.reverse(),function e(){for(;n.length;){var r=n.pop();if(r in t)return e.value=r,e.done=!1,e}return e.done=!0,e}},d.values=S,D.prototype={constructor:D,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(I),!t)for(var n in this)"t"===n.charAt(0)&&i.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function r(r,i){return l.type="throw",l.arg=t,n.next=r,i&&(n.method="next",n.arg=e),!!i}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],l=a.completion;if("root"===a.tryLoc)return r("end");if(a.tryLoc<=this.prev){var s=i.call(a,"catchLoc"),d=i.call(a,"finallyLoc");if(s&&d){if(this.prev<a.catchLoc)return r(a.catchLoc,!0);if(this.prev<a.finallyLoc)return r(a.finallyLoc)}else if(s){if(this.prev<a.catchLoc)return r(a.catchLoc,!0)}else{if(!d)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return r(a.finallyLoc)}}}},abrupt:function(t,n){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc<=this.prev&&i.call(r,"finallyLoc")&&this.prev<r.finallyLoc){var o=r;break}}o&&("break"===t||"continue"===t)&&o.tryLoc<=n&&n<=o.finallyLoc&&(o=null);var a=o?o.completion:{};return a.type=t,a.arg=n,o?(this.method="next",this.next=o.finallyLoc,f):this.complete(a)},complete:function(t,n){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&n&&(this.next=n),f},finish:function(t){for(var n=this.tryEntries.length-1;n>=0;--n){var e=this.tryEntries[n];if(e.finallyLoc===t)return this.complete(e.completion,e.afterLoc),I(e),f}},catch:function(t){for(var n=this.tryEntries.length-1;n>=0;--n){var e=this.tryEntries[n];if(e.tryLoc===t){var r=e.completion;if("throw"===r.type){var i=r.arg;I(e)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:S(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),f}}}function b(t,n,e,r){var i=n&&n.prototype instanceof v?n:v,o=Object.create(i.prototype),a=new D(r||[]);return o._invoke=function(t,n,e){var r=u;return function(i,o){if(r===p)throw new Error("Generator is already running");if(r===m){if("throw"===i)throw o;return z()}for(e.method=i,e.arg=o;;){var a=e.delegate;if(a){var l=k(a,e);if(l){if(l===f)continue;return l}}if("next"===e.method)e.sent=e._sent=e.arg;else if("throw"===e.method){if(r===u)throw r=m,e.arg;e.dispatchException(e.arg)}else"return"===e.method&&e.abrupt("return",e.arg);r=p;var s=$(t,n,e);if("normal"===s.type){if(r=e.done?m:c,s.arg===f)continue;return{value:s.arg,done:e.done}}"throw"===s.type&&(r=m,e.method="throw",e.arg=s.arg)}}}(t,e,a),o}function $(t,n,e){try{return{type:"normal",arg:t.call(n,e)}}catch(t){return{type:"throw",arg:t}}}function v(){}function x(){}function y(){}function w(t){["next","throw","return"].forEach((function(n){t[n]=function(t){return this._invoke(n,t)}}))}function B(t){function n(e,r,o,a){var l=$(t[e],t,r);if("throw"!==l.type){var s=l.arg,d=s.value;return d&&"object"==typeof d&&i.call(d,"__await")?Promise.resolve(d.__await).then((function(t){n("next",t,o,a)}),(function(t){n("throw",t,o,a)})):Promise.resolve(d).then((function(t){s.value=t,o(s)}),a)}a(l.arg)}var e;this._invoke=function(t,r){function i(){return new Promise((function(e,i){n(t,r,e,i)}))}return e=e?e.then(i,i):i()}}function k(t,n){var r=t.iterator[n.method];if(r===e){if(n.delegate=null,"throw"===n.method){if(t.iterator.return&&(n.method="return",n.arg=e,k(t,n),"throw"===n.method))return f;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return f}var i=$(r,t.iterator,n.arg);if("throw"===i.type)return n.method="throw",n.arg=i.arg,n.delegate=null,f;var o=i.arg;return o?o.done?(n[t.resultName]=o.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,f):o:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,f)}function _(t){var n={tryLoc:t[0]};1 in t&&(n.catchLoc=t[1]),2 in t&&(n.finallyLoc=t[2],n.afterLoc=t[3]),this.tryEntries.push(n)}function I(t){var n=t.completion||{};n.type="normal",delete n.arg,t.completion=n}function D(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(_,this),this.reset(!0)}function S(t){if(t){var n=t[a];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,o=function n(){for(;++r<t.length;)if(i.call(t,r))return n.value=t[r],n.done=!1,n;return n.value=e,n.done=!0,n};return o.next=o}}return{next:z}}function z(){return{value:e,done:!0}}}(function(){return this}()||Function("return this")())},53943:function(t,n,e){var r,i,o;o=this,r=[e(73609)],void 0===(i=function(t){return o.Bloodhound=(n=t,e=function(){"use strict";return{isMsie:function(){return!!/(msie|trident)/i.test(navigator.userAgent)&&navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]},isBlankString:function(t){return!t||/^\s*$/.test(t)},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:n.isArray,isFunction:n.isFunction,isObject:n.isPlainObject,isUndefined:function(t){return void 0===t},isElement:function(t){return!(!t||1!==t.nodeType)},isJQuery:function(t){return t instanceof n},toStr:function(t){return e.isUndefined(t)||null===t?"":t+""},bind:n.proxy,each:function(t,e){n.each(t,(function(t,n){return e(n,t)}))},map:n.map,filter:n.grep,every:function(t,e){var r=!0;return t?(n.each(t,(function(n,i){if(!(r=e.call(null,i,n,t)))return!1})),!!r):r},some:function(t,e){var r=!1;return t?(n.each(t,(function(n,i){if(r=e.call(null,i,n,t))return!1})),!!r):r},mixin:n.extend,identity:function(t){return t},clone:function(t){return n.extend(!0,{},t)},getIdGenerator:function(){var t=0;return function(){return t++}},templatify:function(t){return n.isFunction(t)?t:function(){return String(t)}},defer:function(t){setTimeout(t,0)},debounce:function(t,n,e){var r,i;return function(){var o,a,l=this,s=arguments;return o=function(){r=null,e||(i=t.apply(l,s))},a=e&&!r,clearTimeout(r),r=setTimeout(o,n),a&&(i=t.apply(l,s)),i}},throttle:function(t,n){var e,r,i,o,a,l;return a=0,l=function(){a=new Date,i=null,o=t.apply(e,r)},function(){var s=new Date,d=n-(s-a);return e=this,r=arguments,d<=0?(clearTimeout(i),i=null,a=s,o=t.apply(e,r)):i||(i=setTimeout(l,d)),o}},stringify:function(t){return e.isString(t)?t:JSON.stringify(t)},noop:function(){}}}(),r="0.11.1",i=function(){"use strict";return{nonword:n,whitespace:t,obj:{nonword:r(n),whitespace:r(t)}};function t(t){return(t=e.toStr(t))?t.split(/\s+/):[]}function n(t){return(t=e.toStr(t))?t.split(/\W+/):[]}function r(t){return function(n){return n=e.isArray(n)?n:[].slice.call(arguments,0),function(r){var i=[];return e.each(n,(function(n){i=i.concat(t(e.toStr(r[n])))})),i}}}}(),a=function(){"use strict";function t(t){this.maxSize=e.isNumber(t)?t:100,this.reset(),this.maxSize<=0&&(this.set=this.get=n.noop)}function r(){this.head=this.tail=null}function i(t,n){this.key=t,this.val=n,this.prev=this.next=null}return e.mixin(t.prototype,{set:function(t,n){var e,r=this.list.tail;this.size>=this.maxSize&&(this.list.remove(r),delete this.hash[r.key],this.size--),(e=this.hash[t])?(e.val=n,this.list.moveToFront(e)):(e=new i(t,n),this.list.add(e),this.hash[t]=e,this.size++)},get:function(t){var n=this.hash[t];if(n)return this.list.moveToFront(n),n.val},reset:function(){this.size=0,this.hash={},this.list=new r}}),e.mixin(r.prototype,{add:function(t){this.head&&(t.next=this.head,this.head.prev=t),this.head=t,this.tail=this.tail||t},remove:function(t){t.prev?t.prev.next=t.next:this.head=t.next,t.next?t.next.prev=t.prev:this.tail=t.prev},moveToFront:function(t){this.remove(t),this.add(t)}}),t}(),l=function(){"use strict";var t;try{(t=window.localStorage).setItem("~~~","!"),t.removeItem("~~~")}catch(n){t=null}function r(n,r){this.prefix=["__",n,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=new RegExp("^"+e.escapeRegExChars(this.prefix)),this.ls=r||t,!this.ls&&this._noop()}return e.mixin(r.prototype,{_prefix:function(t){return this.prefix+t},_ttlKey:function(t){return this._prefix(t)+this.ttlKey},_noop:function(){this.get=this.set=this.remove=this.clear=this.isExpired=e.noop},_safeSet:function(t,n){try{this.ls.setItem(t,n)}catch(t){"QuotaExceededError"===t.name&&(this.clear(),this._noop())}},get:function(t){return this.isExpired(t)&&this.remove(t),a(this.ls.getItem(this._prefix(t)))},set:function(t,n,r){return e.isNumber(r)?this._safeSet(this._ttlKey(t),o(i()+r)):this.ls.removeItem(this._ttlKey(t)),this._safeSet(this._prefix(t),o(n))},remove:function(t){return this.ls.removeItem(this._ttlKey(t)),this.ls.removeItem(this._prefix(t)),this},clear:function(){var n,e=function(n){var e,r,i=[],o=t.length;for(e=0;e<o;e++)(r=t.key(e)).match(n)&&i.push(r.replace(n,""));return i}(this.keyMatcher);for(n=e.length;n--;)this.remove(e[n]);return this},isExpired:function(t){var n=a(this.ls.getItem(this._ttlKey(t)));return!!(e.isNumber(n)&&i()>n)}}),r;function i(){return(new Date).getTime()}function o(t){return JSON.stringify(e.isUndefined(t)?null:t)}function a(t){return n.parseJSON(t)}}(),s=function(){"use strict";var t=0,r={},i=6,o=new a(10);function l(t){t=t||{},this.cancelled=!1,this.lastReq=null,this._send=t.transport,this._get=t.limiter?t.limiter(this._get):this._get,this._cache=!1===t.cache?new a(0):o}return l.setMaxPendingRequests=function(t){i=t},l.resetCache=function(){o.reset()},e.mixin(l.prototype,{_fingerprint:function(t){return(t=t||{}).url+t.type+n.param(t.data||{})},_get:function(n,e){var o,a,l=this;function s(t){e(null,t),l._cache.set(o,t)}function d(){e(!0)}function u(){t--,delete r[o],l.onDeckRequestArgs&&(l._get.apply(l,l.onDeckRequestArgs),l.onDeckRequestArgs=null)}o=this._fingerprint(n),this.cancelled||o!==this.lastReq||((a=r[o])?a.done(s).fail(d):t<i?(t++,r[o]=this._send(n).done(s).fail(d).always(u)):this.onDeckRequestArgs=[].slice.call(arguments,0))},get:function(t,r){var i,o;r=r||n.noop,t=e.isString(t)?{url:t}:t||{},o=this._fingerprint(t),this.cancelled=!1,this.lastReq=o,(i=this._cache.get(o))?r(null,i):this._get(t,r)},cancel:function(){this.cancelled=!0}}),l}(),d=window.SearchIndex=function(){"use strict";function t(t){(t=t||{}).datumTokenizer&&t.queryTokenizer||n.error("datumTokenizer and queryTokenizer are both required"),this.identify=t.identify||e.stringify,this.datumTokenizer=t.datumTokenizer,this.queryTokenizer=t.queryTokenizer,this.reset()}return e.mixin(t.prototype,{bootstrap:function(t){this.datums=t.datums,this.trie=t.trie},add:function(t){var n=this;t=e.isArray(t)?t:[t],e.each(t,(function(t){var o,a;n.datums[o=n.identify(t)]=t,a=r(n.datumTokenizer(t)),e.each(a,(function(t){var e,r,a;for(e=n.trie,r=t.split("");a=r.shift();)(e=e.c[a]||(e.c[a]=i())).i.push(o)}))}))},get:function(t){var n=this;return e.map(t,(function(t){return n.datums[t]}))},search:function(t){var n,i,o=this;return n=r(this.queryTokenizer(t)),e.each(n,(function(t){var n,e,r,a;if(i&&0===i.length)return!1;for(n=o.trie,e=t.split("");n&&(r=e.shift());)n=n.c[r];if(!n||0!==e.length)return i=[],!1;a=n.i.slice(0),i=i?function(t,n){var e=0,r=0,i=[];t=t.sort(),n=n.sort();for(var o=t.length,a=n.length;e<o&&r<a;)t[e]<n[r]?e++:(t[e]>n[r]||(i.push(t[e]),e++),r++);return i}(i,a):a})),i?e.map(function(t){for(var n={},e=[],r=0,i=t.length;r<i;r++)n[t[r]]||(n[t[r]]=!0,e.push(t[r]));return e}(i),(function(t){return o.datums[t]})):[]},all:function(){var t=[];for(var n in this.datums)t.push(this.datums[n]);return t},reset:function(){this.datums={},this.trie=i()},serialize:function(){return{datums:this.datums,trie:this.trie}}}),t;function r(t){return t=e.filter(t,(function(t){return!!t})),e.map(t,(function(t){return t.toLowerCase()}))}function i(){var t={i:[],c:{}};return t}}(),u=function(){"use strict";var t;function n(t){this.url=t.url,this.ttl=t.ttl,this.cache=t.cache,this.prepare=t.prepare,this.transform=t.transform,this.transport=t.transport,this.thumbprint=t.thumbprint,this.storage=new l(t.cacheKey)}return t={data:"data",protocol:"protocol",thumbprint:"thumbprint"},e.mixin(n.prototype,{_settings:function(){return{url:this.url,type:"GET",dataType:"json"}},store:function(n){this.cache&&(this.storage.set(t.data,n,this.ttl),this.storage.set(t.protocol,location.protocol,this.ttl),this.storage.set(t.thumbprint,this.thumbprint,this.ttl))},fromCache:function(){var n,e={};return this.cache?(e.data=this.storage.get(t.data),e.protocol=this.storage.get(t.protocol),e.thumbprint=this.storage.get(t.thumbprint),n=e.thumbprint!==this.thumbprint||e.protocol!==location.protocol,e.data&&!n?e.data:null):null},fromNetwork:function(t){var n,e=this;t&&(n=this.prepare(this._settings()),this.transport(n).fail((function(){t(!0)})).done((function(n){t(null,e.transform(n))})))},clear:function(){return this.storage.clear(),this}}),n}(),c=function(){"use strict";function t(t){this.url=t.url,this.prepare=t.prepare,this.transform=t.transform,this.transport=new s({cache:t.cache,limiter:t.limiter,transport:t.transport})}return e.mixin(t.prototype,{_settings:function(){return{url:this.url,type:"GET",dataType:"json"}},get:function(t,n){var e,r=this;if(n)return t=t||"",e=this.prepare(t,this._settings()),this.transport.get(e,(function(t,e){n(t?[]:r.transform(e))}))},cancelLastRequest:function(){this.transport.cancel()}}),t}(),p=function(){"use strict";return function(i){var o,a;return o={initialize:!0,identify:e.stringify,datumTokenizer:null,queryTokenizer:null,sufficient:5,sorter:null,local:[],prefetch:null,remote:null},!(i=e.mixin(o,i||{})).datumTokenizer&&n.error("datumTokenizer is required"),!i.queryTokenizer&&n.error("queryTokenizer is required"),a=i.sorter,i.sorter=a?function(t){return t.sort(a)}:e.identity,i.local=e.isFunction(i.local)?i.local():i.local,i.prefetch=function(i){var o;return i?(o={url:null,ttl:864e5,cache:!0,cacheKey:null,thumbprint:"",prepare:e.identity,transform:e.identity,transport:null},i=e.isString(i)?{url:i}:i,!(i=e.mixin(o,i)).url&&n.error("prefetch requires url to be set"),i.transform=i.filter||i.transform,i.cacheKey=i.cacheKey||i.url,i.thumbprint=r+i.thumbprint,i.transport=i.transport?t(i.transport):n.ajax,i):null}(i.prefetch),i.remote=function(r){var i;if(r)return i={url:null,cache:!0,prepare:null,replace:null,wildcard:null,limiter:null,rateLimitBy:"debounce",rateLimitWait:300,transform:e.identity,transport:null},r=e.isString(r)?{url:r}:r,!(r=e.mixin(i,r)).url&&n.error("remote requires url to be set"),r.transform=r.filter||r.transform,r.prepare=function(t){var n,e,r;return n=t.prepare,e=t.replace,r=t.wildcard,n||(e?i:t.wildcard?o:a);function i(t,n){return n.url=e(n.url,t),n}function o(t,n){return n.url=n.url.replace(r,encodeURIComponent(t)),n}function a(t,n){return n}}(r),r.limiter=function(t){var n,r,i;return n=t.limiter,r=t.rateLimitBy,i=t.rateLimitWait,n||(n=/^throttle$/i.test(r)?a(i):o(i)),n;function o(t){return function(n){return e.debounce(n,t)}}function a(t){return function(n){return e.throttle(n,t)}}}(r),r.transport=r.transport?t(r.transport):n.ajax,delete r.replace,delete r.wildcard,delete r.rateLimitBy,delete r.rateLimitWait,r}(i.remote),i};function t(t){return function(r){var i=n.Deferred();return t(r,(function(t){e.defer((function(){i.resolve(t)}))}),(function(t){e.defer((function(){i.reject(t)}))})),i}}}(),function(){"use strict";var t;function r(t){t=p(t),this.sorter=t.sorter,this.identify=t.identify,this.sufficient=t.sufficient,this.local=t.local,this.remote=t.remote?new c(t.remote):null,this.prefetch=t.prefetch?new u(t.prefetch):null,this.index=new d({identify:this.identify,datumTokenizer:t.datumTokenizer,queryTokenizer:t.queryTokenizer}),!1!==t.initialize&&this.initialize()}return t=window&&window.Bloodhound,r.noConflict=function(){return window&&(window.Bloodhound=t),r},r.tokenizers=i,e.mixin(r.prototype,{__ttAdapter:function(){var t=this;return this.remote?function(n,e,r){return t.search(n,e,r)}:function(n,e){return t.search(n,e)}},_loadPrefetch:function(){var t,e,r=this;return t=n.Deferred(),this.prefetch?(e=this.prefetch.fromCache())?(this.index.bootstrap(e),t.resolve()):this.prefetch.fromNetwork((function(n,e){if(n)return t.reject();r.add(e),r.prefetch.store(r.index.serialize()),t.resolve()})):t.resolve(),t.promise()},_initialize:function(){var t=this;return this.clear(),(this.initPromise=this._loadPrefetch()).done((function(){t.add(t.local)})),this.initPromise},initialize:function(t){return!this.initPromise||t?this._initialize():this.initPromise},add:function(t){return this.index.add(t),this},get:function(t){return t=e.isArray(t)?t:[].slice.call(arguments),this.index.get(t)},search:function(t,n,r){var i,o=this;return i=this.sorter(this.index.search(t)),n(this.remote?i.slice():i),this.remote&&i.length<this.sufficient?this.remote.get(t,(function(t){var n=[];e.each(t,(function(t){!e.some(i,(function(n){return o.identify(t)===o.identify(n)}))&&n.push(t)})),r&&r(n)})):this.remote&&this.remote.cancelLastRequest(),this},all:function(){return this.index.all()},clear:function(){return this.index.reset(),this},clearPrefetchCache:function(){return this.prefetch&&this.prefetch.clear(),this},clearRemoteCache:function(){return s.resetCache(),this},ttAdapter:function(){return this.__ttAdapter()}}),r}());var n,e,r,i,a,l,s,d,u,c,p}.apply(n,r))||(t.exports=i),r=[e(73609)],void 0===(i=function(t){return n=t,e=function(){"use strict";return{isMsie:function(){return!!/(msie|trident)/i.test(navigator.userAgent)&&navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]},isBlankString:function(t){return!t||/^\s*$/.test(t)},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:n.isArray,isFunction:n.isFunction,isObject:n.isPlainObject,isUndefined:function(t){return void 0===t},isElement:function(t){return!(!t||1!==t.nodeType)},isJQuery:function(t){return t instanceof n},toStr:function(t){return e.isUndefined(t)||null===t?"":t+""},bind:n.proxy,each:function(t,e){n.each(t,(function(t,n){return e(n,t)}))},map:n.map,filter:n.grep,every:function(t,e){var r=!0;return t?(n.each(t,(function(n,i){if(!(r=e.call(null,i,n,t)))return!1})),!!r):r},some:function(t,e){var r=!1;return t?(n.each(t,(function(n,i){if(r=e.call(null,i,n,t))return!1})),!!r):r},mixin:n.extend,identity:function(t){return t},clone:function(t){return n.extend(!0,{},t)},getIdGenerator:function(){var t=0;return function(){return t++}},templatify:function(t){return n.isFunction(t)?t:function(){return String(t)}},defer:function(t){setTimeout(t,0)},debounce:function(t,n,e){var r,i;return function(){var o,a,l=this,s=arguments;return o=function(){r=null,e||(i=t.apply(l,s))},a=e&&!r,clearTimeout(r),r=setTimeout(o,n),a&&(i=t.apply(l,s)),i}},throttle:function(t,n){var e,r,i,o,a,l;return a=0,l=function(){a=new Date,i=null,o=t.apply(e,r)},function(){var s=new Date,d=n-(s-a);return e=this,r=arguments,d<=0?(clearTimeout(i),i=null,a=s,o=t.apply(e,r)):i||(i=setTimeout(l,d)),o}},stringify:function(t){return e.isString(t)?t:JSON.stringify(t)},noop:function(){}}}(),r=function(){"use strict";var t={wrapper:"twitter-typeahead",input:"tt-input",hint:"tt-hint",menu:"tt-menu",dataset:"tt-dataset",suggestion:"tt-suggestion",selectable:"tt-selectable",empty:"tt-empty",open:"tt-open",cursor:"tt-cursor",highlight:"tt-highlight"};return function(r){var i,o;return o=e.mixin({},t,r),{css:(i={css:(l={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},menu:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:" 0"}},e.isMsie()&&e.mixin(l.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),l),classes:o,html:(a=o,{wrapper:'<span class="'+a.wrapper+'"></span>',menu:'<div class="'+a.menu+'"></div>'}),selectors:n(o)}).css,html:i.html,classes:i.classes,selectors:i.selectors,mixin:function(t){e.mixin(t,i)}};var a;var l};function n(t){var n={};return e.each(t,(function(t,e){n[e]="."+t})),n}}(),i=function(){"use strict";var t;function r(t){t&&t.el||n.error("EventBus initialized without el"),this.$el=n(t.el)}return"typeahead:",t={render:"rendered",cursorchange:"cursorchanged",select:"selected",autocomplete:"autocompleted"},e.mixin(r.prototype,{_trigger:function(t,e){var r;return r=n.Event("typeahead:"+t),(e=e||[]).unshift(r),this.$el.trigger.apply(this.$el,e),r},before:function(t){var n;return n=[].slice.call(arguments,1),this._trigger("before"+t,n).isDefaultPrevented()},trigger:function(n){var e;this._trigger(n,[].slice.call(arguments,1)),(e=t[n])&&this._trigger(e,[].slice.call(arguments,1))}}),r}(),o=function(){"use strict";var t=/\s+/,n=window.setImmediate?function(t){setImmediate((function(){t()}))}:function(t){setTimeout((function(){t()}),0)};return{onSync:function(t,n,r){return e.call(this,"sync",t,n,r)},onAsync:function(t,n,r){return e.call(this,"async",t,n,r)},off:function(n){var e;if(!this._callbacks)return this;for(n=n.split(t);e=n.shift();)delete this._callbacks[e];return this},trigger:function(e){var i,o,a,l,s;if(!this._callbacks)return this;for(e=e.split(t),a=[].slice.call(arguments,1);(i=e.shift())&&(o=this._callbacks[i]);)l=r(o.sync,this,[i].concat(a)),s=r(o.async,this,[i].concat(a)),l()&&n(s);return this}};function e(n,e,r,i){var o;if(!r)return this;for(e=e.split(t),r=i?function(t,n){return t.bind?t.bind(n):function(){t.apply(n,[].slice.call(arguments,0))}}(r,i):r,this._callbacks=this._callbacks||{};o=e.shift();)this._callbacks[o]=this._callbacks[o]||{sync:[],async:[]},this._callbacks[o][n].push(r);return this}function r(t,n,e){return function(){for(var r,i=0,o=t.length;!r&&i<o;i+=1)r=!1===t[i].apply(n,e);return!r}}}(),a=function(t){"use strict";var n={node:null,pattern:null,tagName:"strong",className:null,wordsOnly:!1,caseSensitive:!1};return function(r){var i;(r=e.mixin({},n,r)).node&&r.pattern&&(r.pattern=e.isArray(r.pattern)?r.pattern:[r.pattern],i=function(t,n,r){for(var i,o=[],a=0,l=t.length;a<l;a++)o.push(e.escapeRegExChars(t[a]));return i=r?"\\b("+o.join("|")+")\\b":"("+o.join("|")+")",n?new RegExp(i):new RegExp(i,"i")}(r.pattern,r.caseSensitive,r.wordsOnly),function t(n,e){for(var r,i=0;i<n.childNodes.length;i++)3===(r=n.childNodes[i]).nodeType?i+=e(r)?1:0:t(r,e)}(r.node,(function(n){var e,o,a;return(e=i.exec(n.data))&&(a=t.createElement(r.tagName),r.className&&(a.className=r.className),(o=n.splitText(e.index)).splitText(e[0].length),a.appendChild(o.cloneNode(!0)),n.parentNode.replaceChild(a,o)),!!e})))}}(window.document),l=function(){"use strict";var t;function r(t,r){var i;(t=t||{}).input||n.error("input is missing"),r.mixin(this),this.$hint=n(t.hint),this.$input=n(t.input),this.query=this.$input.val(),this.queryWhenFocused=this.hasFocus()?this.query:null,this.$overflowHelper=(i=this.$input,n('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:i.css("font-family"),fontSize:i.css("font-size"),fontStyle:i.css("font-style"),fontVariant:i.css("font-variant"),fontWeight:i.css("font-weight"),wordSpacing:i.css("word-spacing"),letterSpacing:i.css("letter-spacing"),textIndent:i.css("text-indent"),textRendering:i.css("text-rendering"),textTransform:i.css("text-transform")}).insertAfter(i)),this._checkLanguageDirection(),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=e.noop)}return t={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"},r.normalizeQuery=function(t){return e.toStr(t).replace(/^\s*/g,"").replace(/\s{2,}/g," ")},e.mixin(r.prototype,o,{_onBlur:function(){this.resetInputValue(),this.trigger("blurred")},_onFocus:function(){this.queryWhenFocused=this.query,this.trigger("focused")},_onKeydown:function(n){var e=t[n.which||n.keyCode];this._managePreventDefault(e,n),e&&this._shouldTrigger(e,n)&&this.trigger(e+"Keyed",n)},_onInput:function(){this._setQuery(this.getInputValue()),this.clearHintIfInvalid(),this._checkLanguageDirection()},_managePreventDefault:function(t,n){var e;switch(t){case"up":case"down":e=!i(n);break;default:e=!1}e&&n.preventDefault()},_shouldTrigger:function(t,n){var e;switch(t){case"tab":e=!i(n);break;default:e=!0}return e},_checkLanguageDirection:function(){var t=(this.$input.css("direction")||"ltr").toLowerCase();this.dir!==t&&(this.dir=t,this.$hint.attr("dir",t),this.trigger("langDirChanged",t))},_setQuery:function(t,n){var e,i,o,a;o=t,a=this.query,i=!!(e=r.normalizeQuery(o)===r.normalizeQuery(a))&&this.query.length!==t.length,this.query=t,n||e?!n&&i&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},bind:function(){var n,r,i,o,a=this;return n=e.bind(this._onBlur,this),r=e.bind(this._onFocus,this),i=e.bind(this._onKeydown,this),o=e.bind(this._onInput,this),this.$input.on("blur.tt",n).on("focus.tt",r).on("keydown.tt",i),!e.isMsie()||e.isMsie()>9?this.$input.on("input.tt",o):this.$input.on("keydown.tt keypress.tt cut.tt paste.tt",(function(n){t[n.which||n.keyCode]||e.defer(e.bind(a._onInput,a,n))})),this},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getLangDir:function(){return this.dir},getQuery:function(){return this.query||""},setQuery:function(t,n){this.setInputValue(t),this._setQuery(t,n)},hasQueryChangedSinceLastFocus:function(){return this.query!==this.queryWhenFocused},getInputValue:function(){return this.$input.val()},setInputValue:function(t){this.$input.val(t),this.clearHintIfInvalid(),this._checkLanguageDirection()},resetInputValue:function(){this.setInputValue(this.query)},getHint:function(){return this.$hint.val()},setHint:function(t){this.$hint.val(t)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var t,n,e;e=(t=this.getInputValue())!==(n=this.getHint())&&0===n.indexOf(t),(""===t||!e||this.hasOverflow())&&this.clearHint()},hasFocus:function(){return this.$input.is(":focus")},hasOverflow:function(){var t=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=t},isCursorAtEnd:function(){var t,n,r;return t=this.$input.val().length,n=this.$input[0].selectionStart,e.isNumber(n)?n===t:!document.selection||((r=document.selection.createRange()).moveStart("character",-t),t===r.text.length)},destroy:function(){this.$hint.off(".tt"),this.$input.off(".tt"),this.$overflowHelper.remove(),this.$hint=this.$input=this.$overflowHelper=n("<div>")}}),r;function i(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}}(),s=function(){"use strict";var t,r;function i(t,i){var o;(t=t||{}).templates=t.templates||{},t.templates.notFound=t.templates.notFound||t.templates.empty,t.source||n.error("missing source"),t.node||n.error("missing node"),t.name&&(o=t.name,!/^[_a-zA-Z0-9-]+$/.test(o))&&n.error("invalid dataset name: "+t.name),i.mixin(this),this.highlight=!!t.highlight,this.name=t.name||r(),this.limit=t.limit||5,this.displayFn=function(t){return t=t||e.stringify,e.isFunction(t)?t:n;function n(n){return n[t]}}(t.display||t.displayKey),this.templates=function(t,r){return{notFound:t.notFound&&e.templatify(t.notFound),pending:t.pending&&e.templatify(t.pending),header:t.header&&e.templatify(t.header),footer:t.footer&&e.templatify(t.footer),suggestion:t.suggestion||i};function i(t){return n("<div>").text(r(t))}}(t.templates,this.displayFn),this.source=t.source.__ttAdapter?t.source.__ttAdapter():t.source,this.async=e.isUndefined(t.async)?this.source.length>2:!!t.async,this._resetLastSuggestion(),this.$el=n(t.node).addClass(this.classes.dataset).addClass(this.classes.dataset+"-"+this.name)}return t={val:"tt-selectable-display",obj:"tt-selectable-object"},r=e.getIdGenerator(),i.extractData=function(e){var r=n(e);return r.data(t.obj)?{val:r.data(t.val)||"",obj:r.data(t.obj)||null}:null},e.mixin(i.prototype,o,{_overwrite:function(t,n){(n=n||[]).length?this._renderSuggestions(t,n):this.async&&this.templates.pending?this._renderPending(t):!this.async&&this.templates.notFound?this._renderNotFound(t):this._empty(),this.trigger("rendered",this.name,n,!1)},_append:function(t,n){(n=n||[]).length&&this.$lastSuggestion.length?this._appendSuggestions(t,n):n.length?this._renderSuggestions(t,n):!this.$lastSuggestion.length&&this.templates.notFound&&this._renderNotFound(t),this.trigger("rendered",this.name,n,!0)},_renderSuggestions:function(t,n){var e;e=this._getSuggestionsFragment(t,n),this.$lastSuggestion=e.children().last(),this.$el.html(e).prepend(this._getHeader(t,n)).append(this._getFooter(t,n))},_appendSuggestions:function(t,n){var e,r;r=(e=this._getSuggestionsFragment(t,n)).children().last(),this.$lastSuggestion.after(e),this.$lastSuggestion=r},_renderPending:function(t){var n=this.templates.pending;this._resetLastSuggestion(),n&&this.$el.html(n({query:t,dataset:this.name}))},_renderNotFound:function(t){var n=this.templates.notFound;this._resetLastSuggestion(),n&&this.$el.html(n({query:t,dataset:this.name}))},_empty:function(){this.$el.empty(),this._resetLastSuggestion()},_getSuggestionsFragment:function(r,i){var o,l=this;return o=document.createDocumentFragment(),e.each(i,(function(e){var i,a;a=l._injectQuery(r,e),i=n(l.templates.suggestion(a)).data(t.obj,e).data(t.val,l.displayFn(e)).addClass(l.classes.suggestion+" "+l.classes.selectable),o.appendChild(i[0])})),this.highlight&&a({className:this.classes.highlight,node:o,pattern:r}),n(o)},_getFooter:function(t,n){return this.templates.footer?this.templates.footer({query:t,suggestions:n,dataset:this.name}):null},_getHeader:function(t,n){return this.templates.header?this.templates.header({query:t,suggestions:n,dataset:this.name}):null},_resetLastSuggestion:function(){this.$lastSuggestion=n()},_injectQuery:function(t,n){return e.isObject(n)?e.mixin({_query:t},n):n},update:function(t){var e=this,r=!1,i=!1,o=0;function a(n){i||(i=!0,n=(n||[]).slice(0,e.limit),o=n.length,e._overwrite(t,n),o<e.limit&&e.async&&e.trigger("asyncRequested",t))}this.cancel(),this.cancel=function(){r=!0,e.cancel=n.noop,e.async&&e.trigger("asyncCanceled",t)},this.source(t,a,(function(i){i=i||[],!r&&o<e.limit&&(e.cancel=n.noop,o+=i.length,e._append(t,i.slice(0,e.limit-o)),e.async&&e.trigger("asyncReceived",t))})),!i&&a([])},cancel:n.noop,clear:function(){this._empty(),this.cancel(),this.trigger("cleared")},isEmpty:function(){return this.$el.is(":empty")},destroy:function(){this.$el=n("<div>")}}),i}(),d=function(){"use strict";function t(t,r){var i=this;(t=t||{}).node||n.error("node is required"),r.mixin(this),this.$node=n(t.node),this.query=null,this.datasets=e.map(t.datasets,(function(t){var e=i.$node.find(t.node).first();return t.node=e.length?e:n("<div>").appendTo(i.$node),new s(t,r)}))}return e.mixin(t.prototype,o,{_onSelectableClick:function(t){this.trigger("selectableClicked",n(t.currentTarget))},_onRendered:function(t,n,e,r){this.$node.toggleClass(this.classes.empty,this._allDatasetsEmpty()),this.trigger("datasetRendered",n,e,r)},_onCleared:function(){this.$node.toggleClass(this.classes.empty,this._allDatasetsEmpty()),this.trigger("datasetCleared")},_propagate:function(){this.trigger.apply(this,arguments)},_allDatasetsEmpty:function(){return e.every(this.datasets,(function(t){return t.isEmpty()}))},_getSelectables:function(){return this.$node.find(this.selectors.selectable)},_removeCursor:function(){var t=this.getActiveSelectable();t&&t.removeClass(this.classes.cursor)},_ensureVisible:function(t){var n,e,r,i;e=(n=t.position().top)+t.outerHeight(!0),r=this.$node.scrollTop(),i=this.$node.height()+parseInt(this.$node.css("paddingTop"),10)+parseInt(this.$node.css("paddingBottom"),10),n<0?this.$node.scrollTop(r+n):i<e&&this.$node.scrollTop(r+(e-i))},bind:function(){var t,n=this;return t=e.bind(this._onSelectableClick,this),this.$node.on("click.tt",this.selectors.selectable,t),e.each(this.datasets,(function(t){t.onSync("asyncRequested",n._propagate,n).onSync("asyncCanceled",n._propagate,n).onSync("asyncReceived",n._propagate,n).onSync("rendered",n._onRendered,n).onSync("cleared",n._onCleared,n)})),this},isOpen:function(){return this.$node.hasClass(this.classes.open)},open:function(){this.$node.addClass(this.classes.open)},close:function(){this.$node.removeClass(this.classes.open),this._removeCursor()},setLanguageDirection:function(t){this.$node.attr("dir",t)},selectableRelativeToCursor:function(t){var n,e,r;return e=this.getActiveSelectable(),n=this._getSelectables(),-1===(r=(r=((r=(e?n.index(e):-1)+t)+1)%(n.length+1)-1)<-1?n.length-1:r)?null:n.eq(r)},setCursor:function(t){this._removeCursor(),(t=t&&t.first())&&(t.addClass(this.classes.cursor),this._ensureVisible(t))},getSelectableData:function(t){return t&&t.length?s.extractData(t):null},getActiveSelectable:function(){var t=this._getSelectables().filter(this.selectors.cursor).first();return t.length?t:null},getTopSelectable:function(){var t=this._getSelectables().first();return t.length?t:null},update:function(t){var n=t!==this.query;return n&&(this.query=t,e.each(this.datasets,(function(n){n.update(t)}))),n},empty:function(){e.each(this.datasets,(function(t){t.clear()})),this.query=null,this.$node.addClass(this.classes.empty)},destroy:function(){this.$node.off(".tt"),this.$node=n("<div>"),e.each(this.datasets,(function(t){t.destroy()}))}}),t}(),u=function(){"use strict";var t=d.prototype;function n(){d.apply(this,[].slice.call(arguments,0))}return e.mixin(n.prototype,d.prototype,{open:function(){return!this._allDatasetsEmpty()&&this._show(),t.open.apply(this,[].slice.call(arguments,0))},close:function(){return this._hide(),t.close.apply(this,[].slice.call(arguments,0))},_onRendered:function(){return this._allDatasetsEmpty()?this._hide():this.isOpen()&&this._show(),t._onRendered.apply(this,[].slice.call(arguments,0))},_onCleared:function(){return this._allDatasetsEmpty()?this._hide():this.isOpen()&&this._show(),t._onCleared.apply(this,[].slice.call(arguments,0))},setLanguageDirection:function(n){return this.$node.css("ltr"===n?this.css.ltr:this.css.rtl),t.setLanguageDirection.apply(this,[].slice.call(arguments,0))},_hide:function(){this.$node.hide()},_show:function(){this.$node.css("display","block")}}),n}(),c=function(){"use strict";function t(t,i){var o,a,l,s,d,u,c,p,m,f,g;(t=t||{}).input||n.error("missing input"),t.menu||n.error("missing menu"),t.eventBus||n.error("missing event bus"),i.mixin(this),this.eventBus=t.eventBus,this.minLength=e.isNumber(t.minLength)?t.minLength:1,this.input=t.input,this.menu=t.menu,this.enabled=!0,this.active=!1,this.input.hasFocus()&&this.activate(),this.dir=this.input.getLangDir(),this._hacks(),this.menu.bind().onSync("selectableClicked",this._onSelectableClicked,this).onSync("asyncRequested",this._onAsyncRequested,this).onSync("asyncCanceled",this._onAsyncCanceled,this).onSync("asyncReceived",this._onAsyncReceived,this).onSync("datasetRendered",this._onDatasetRendered,this).onSync("datasetCleared",this._onDatasetCleared,this),o=r(this,"activate","open","_onFocused"),a=r(this,"deactivate","_onBlurred"),l=r(this,"isActive","isOpen","_onEnterKeyed"),s=r(this,"isActive","isOpen","_onTabKeyed"),d=r(this,"isActive","_onEscKeyed"),u=r(this,"isActive","open","_onUpKeyed"),c=r(this,"isActive","open","_onDownKeyed"),p=r(this,"isActive","isOpen","_onLeftKeyed"),m=r(this,"isActive","isOpen","_onRightKeyed"),f=r(this,"_openIfActive","_onQueryChanged"),g=r(this,"_openIfActive","_onWhitespaceChanged"),this.input.bind().onSync("focused",o,this).onSync("blurred",a,this).onSync("enterKeyed",l,this).onSync("tabKeyed",s,this).onSync("escKeyed",d,this).onSync("upKeyed",u,this).onSync("downKeyed",c,this).onSync("leftKeyed",p,this).onSync("rightKeyed",m,this).onSync("queryChanged",f,this).onSync("whitespaceChanged",g,this).onSync("langDirChanged",this._onLangDirChanged,this)}return e.mixin(t.prototype,{_hacks:function(){var t,r;t=this.input.$input||n("<div>"),r=this.menu.$node||n("<div>"),t.on("blur.tt",(function(n){var i,o,a;i=document.activeElement,o=r.is(i),a=r.has(i).length>0,e.isMsie()&&(o||a)&&(n.preventDefault(),n.stopImmediatePropagation(),e.defer((function(){t.focus()})))})),r.on("mousedown.tt",(function(t){t.preventDefault()}))},_onSelectableClicked:function(t,n){this.select(n)},_onDatasetCleared:function(){this._updateHint()},_onDatasetRendered:function(t,n,e,r){this._updateHint(),this.eventBus.trigger("render",e,r,n)},_onAsyncRequested:function(t,n,e){this.eventBus.trigger("asyncrequest",e,n)},_onAsyncCanceled:function(t,n,e){this.eventBus.trigger("asynccancel",e,n)},_onAsyncReceived:function(t,n,e){this.eventBus.trigger("asyncreceive",e,n)},_onFocused:function(){this._minLengthMet()&&this.menu.update(this.input.getQuery())},_onBlurred:function(){this.input.hasQueryChangedSinceLastFocus()&&this.eventBus.trigger("change",this.input.getQuery())},_onEnterKeyed:function(t,n){var e;(e=this.menu.getActiveSelectable())&&this.select(e)&&n.preventDefault()},_onTabKeyed:function(t,n){var e;(e=this.menu.getActiveSelectable())?this.select(e)&&n.preventDefault():(e=this.menu.getTopSelectable())&&this.autocomplete(e)&&n.preventDefault()},_onEscKeyed:function(){this.close()},_onUpKeyed:function(){this.moveCursor(-1)},_onDownKeyed:function(){this.moveCursor(1)},_onLeftKeyed:function(){"rtl"===this.dir&&this.input.isCursorAtEnd()&&this.autocomplete(this.menu.getTopSelectable())},_onRightKeyed:function(){"ltr"===this.dir&&this.input.isCursorAtEnd()&&this.autocomplete(this.menu.getTopSelectable())},_onQueryChanged:function(t,n){this._minLengthMet(n)?this.menu.update(n):this.menu.empty()},_onWhitespaceChanged:function(){this._updateHint()},_onLangDirChanged:function(t,n){this.dir!==n&&(this.dir=n,this.menu.setLanguageDirection(n))},_openIfActive:function(){this.isActive()&&this.open()},_minLengthMet:function(t){return(t=e.isString(t)?t:this.input.getQuery()||"").length>=this.minLength},_updateHint:function(){var t,n,r,i,o,a;t=this.menu.getTopSelectable(),n=this.menu.getSelectableData(t),r=this.input.getInputValue(),!n||e.isBlankString(r)||this.input.hasOverflow()?this.input.clearHint():(i=l.normalizeQuery(r),o=e.escapeRegExChars(i),(a=new RegExp("^(?:"+o+")(.+$)","i").exec(n.val))&&this.input.setHint(r+a[1]))},isEnabled:function(){return this.enabled},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},isActive:function(){return this.active},activate:function(){return!!this.isActive()||!(!this.isEnabled()||this.eventBus.before("active"))&&(this.active=!0,this.eventBus.trigger("active"),!0)},deactivate:function(){return!this.isActive()||!this.eventBus.before("idle")&&(this.active=!1,this.close(),this.eventBus.trigger("idle"),!0)},isOpen:function(){return this.menu.isOpen()},open:function(){return this.isOpen()||this.eventBus.before("open")||(this.menu.open(),this._updateHint(),this.eventBus.trigger("open")),this.isOpen()},close:function(){return this.isOpen()&&!this.eventBus.before("close")&&(this.menu.close(),this.input.clearHint(),this.input.resetInputValue(),this.eventBus.trigger("close")),!this.isOpen()},setVal:function(t){this.input.setQuery(e.toStr(t))},getVal:function(){return this.input.getQuery()},select:function(t){var n=this.menu.getSelectableData(t);return!(!n||this.eventBus.before("select",n.obj)||(this.input.setQuery(n.val,!0),this.eventBus.trigger("select",n.obj),this.close(),0))},autocomplete:function(t){var n,e;return n=this.input.getQuery(),!(!(e=this.menu.getSelectableData(t))||n===e.val||this.eventBus.before("autocomplete",e.obj)||(this.input.setQuery(e.val),this.eventBus.trigger("autocomplete",e.obj),0))},moveCursor:function(t){var n,e,r,i;return n=this.input.getQuery(),e=this.menu.selectableRelativeToCursor(t),i=(r=this.menu.getSelectableData(e))?r.obj:null,!(this._minLengthMet()&&this.menu.update(n)||this.eventBus.before("cursorchange",i)||(this.menu.setCursor(e),r?this.input.setInputValue(r.val):(this.input.resetInputValue(),this._updateHint()),this.eventBus.trigger("cursorchange",i),0))},destroy:function(){this.input.destroy(),this.menu.destroy()}}),t;function r(t){var n=[].slice.call(arguments,1);return function(){var r=[].slice.call(arguments);e.each(n,(function(n){return t[n].apply(t,r)}))}}}(),void function(){"use strict";var t,o,a;function s(t,e){t.each((function(){var t,r=n(this);(t=r.data(o.typeahead))&&e(t,r)}))}function p(t,n){return t.clone().addClass(n.classes.hint).removeData().css(n.css.hint).css((e=t,{backgroundAttachment:e.css("background-attachment"),backgroundClip:e.css("background-clip"),backgroundColor:e.css("background-color"),backgroundImage:e.css("background-image"),backgroundOrigin:e.css("background-origin"),backgroundPosition:e.css("background-position"),backgroundRepeat:e.css("background-repeat"),backgroundSize:e.css("background-size")})).prop("readonly",!0).removeAttr("id name placeholder required").attr({autocomplete:"off",spellcheck:"false",tabindex:-1});var e}function m(t,n){t.data(o.attrs,{dir:t.attr("dir"),autocomplete:t.attr("autocomplete"),spellcheck:t.attr("spellcheck"),style:t.attr("style")}),t.addClass(n.classes.input).attr({autocomplete:"off",spellcheck:!1});try{!t.attr("dir")&&t.attr("dir","auto")}catch(t){}return t}function f(t){var r;return(r=e.isJQuery(t)||e.isElement(t)?n(t).first():[]).length?r:null}t=n.fn.typeahead,o={www:"tt-www",attrs:"tt-attrs",typeahead:"tt-typeahead"},a={initialize:function(t,a){var s;return a=e.isArray(a)?a:[].slice.call(arguments,1),s=r((t=t||{}).classNames),this.each(g);function g(){var r,g,A,h,C,b,$,v,x,y,w;e.each(a,(function(n){n.highlight=!!t.highlight})),r=n(this),g=n(s.html.wrapper),A=f(t.hint),h=f(t.menu),C=!1!==t.hint&&!A,b=!1!==t.menu&&!h,C&&(A=p(r,s)),b&&(h=n(s.html.menu).css(s.css.menu)),A&&A.val(""),r=m(r,s),(C||b)&&(g.css(s.css.wrapper),r.css(C?s.css.input:s.css.inputWithNoHint),r.wrap(g).parent().prepend(C?A:null).append(b?h:null)),w=b?u:d,$=new i({el:r}),v=new l({hint:A,input:r},s),x=new w({node:h,datasets:a},s),y=new c({input:v,menu:x,eventBus:$,minLength:t.minLength},s),r.data(o.www,s),r.data(o.typeahead,y)}},isEnabled:function(){var t;return s(this.first(),(function(n){t=n.isEnabled()})),t},enable:function(){return s(this,(function(t){t.enable()})),this},disable:function(){return s(this,(function(t){t.disable()})),this},isActive:function(){var t;return s(this.first(),(function(n){t=n.isActive()})),t},activate:function(){return s(this,(function(t){t.activate()})),this},deactivate:function(){return s(this,(function(t){t.deactivate()})),this},isOpen:function(){var t;return s(this.first(),(function(n){t=n.isOpen()})),t},open:function(){return s(this,(function(t){t.open()})),this},close:function(){return s(this,(function(t){t.close()})),this},select:function(t){var e=!1,r=n(t);return s(this.first(),(function(t){e=t.select(r)})),e},autocomplete:function(t){var e=!1,r=n(t);return s(this.first(),(function(t){e=t.autocomplete(r)})),e},moveCursor:function(t){var n=!1;return s(this.first(),(function(e){n=e.moveCursor(t)})),n},val:function(t){var n;return arguments.length?(s(this,(function(n){n.setVal(t)})),this):(s(this.first(),(function(t){n=t.getVal()})),n)},destroy:function(){return s(this,(function(t,n){(function(t){var n,r;n=t.data(o.www),r=t.parent().filter(n.selectors.wrapper),e.each(t.data(o.attrs),(function(n,r){e.isUndefined(n)?t.removeAttr(r):t.attr(r,n)})),t.removeData(o.typeahead).removeData(o.www).removeData(o.attr).removeClass(n.classes.input),r.length&&(t.detach().insertAfter(r),r.remove())})(n),t.destroy()})),this}},n.fn.typeahead=function(t){return a[t]?a[t].apply(this,[].slice.call(arguments,1)):a.initialize.apply(this,arguments)},n.fn.typeahead.noConflict=function(){return n.fn.typeahead=t,this}}();var n,e,r,i,o,a,l,s,d,u,c}.apply(n,r))||(t.exports=i)},17152:(t,n,e)=>{"use strict";e.r(n),e.d(n,{default:()=>W});var r=["style","currency","currencyDisplay","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","localeMatcher","formatMatcher","unit"];function i(t,n){"undefined"!=typeof console&&(console.warn("[vue-i18n] "+t),n&&console.warn(n.stack))}function o(t){return null!==t&&"object"==typeof t}var a=Object.prototype.toString;function l(t){return"[object Object]"===a.call(t)}function s(t){return null==t}function d(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var e=null,r=null;return 1===t.length?o(t[0])||Array.isArray(t[0])?r=t[0]:"string"==typeof t[0]&&(e=t[0]):2===t.length&&("string"==typeof t[0]&&(e=t[0]),(o(t[1])||Array.isArray(t[1]))&&(r=t[1])),{locale:e,params:r}}function u(t){return JSON.parse(JSON.stringify(t))}function c(t,n){return!!~t.indexOf(n)}var p=Object.prototype.hasOwnProperty;function m(t,n){return p.call(t,n)}function f(t){for(var n=arguments,e=Object(t),r=1;r<arguments.length;r++){var i=n[r];if(null!=i){var a=void 0;for(a in i)m(i,a)&&(o(i[a])?e[a]=f(e[a],i[a]):e[a]=i[a])}}return e}function g(t,n){if(t===n)return!0;var e=o(t),r=o(n);if(!e||!r)return!e&&!r&&String(t)===String(n);try{var i=Array.isArray(t),a=Array.isArray(n);if(i&&a)return t.length===n.length&&t.every((function(t,e){return g(t,n[e])}));if(i||a)return!1;var l=Object.keys(t),s=Object.keys(n);return l.length===s.length&&l.every((function(e){return g(t[e],n[e])}))}catch(t){return!1}}var A={beforeCreate:function(){var t=this.$options;if(t.i18n=t.i18n||(t.__i18n?{}:null),t.i18n){if(t.i18n instanceof Y){if(t.__i18n)try{var n={};t.__i18n.forEach((function(t){n=f(n,JSON.parse(t))})),Object.keys(n).forEach((function(e){t.i18n.mergeLocaleMessage(e,n[e])}))}catch(t){}this._i18n=t.i18n,this._i18nWatcher=this._i18n.watchI18nData()}else if(l(t.i18n)){if(this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof Y&&(t.i18n.root=this.$root,t.i18n.formatter=this.$root.$i18n.formatter,t.i18n.fallbackLocale=this.$root.$i18n.fallbackLocale,t.i18n.formatFallbackMessages=this.$root.$i18n.formatFallbackMessages,t.i18n.silentTranslationWarn=this.$root.$i18n.silentTranslationWarn,t.i18n.silentFallbackWarn=this.$root.$i18n.silentFallbackWarn,t.i18n.pluralizationRules=this.$root.$i18n.pluralizationRules,t.i18n.preserveDirectiveContent=this.$root.$i18n.preserveDirectiveContent),t.__i18n)try{var e={};t.__i18n.forEach((function(t){e=f(e,JSON.parse(t))})),t.i18n.messages=e}catch(t){}var r=t.i18n.sharedMessages;r&&l(r)&&(t.i18n.messages=f(t.i18n.messages,r)),this._i18n=new Y(t.i18n),this._i18nWatcher=this._i18n.watchI18nData(),(void 0===t.i18n.sync||t.i18n.sync)&&(this._localeWatcher=this.$i18n.watchLocale())}}else this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof Y?this._i18n=this.$root.$i18n:t.parent&&t.parent.$i18n&&t.parent.$i18n instanceof Y&&(this._i18n=t.parent.$i18n)},beforeMount:function(){var t=this.$options;t.i18n=t.i18n||(t.__i18n?{}:null),t.i18n?(t.i18n instanceof Y||l(t.i18n))&&(this._i18n.subscribeDataChanging(this),this._subscribing=!0):(this.$root&&this.$root.$i18n&&this.$root.$i18n instanceof Y||t.parent&&t.parent.$i18n&&t.parent.$i18n instanceof Y)&&(this._i18n.subscribeDataChanging(this),this._subscribing=!0)},beforeDestroy:function(){if(this._i18n){var t=this;this.$nextTick((function(){t._subscribing&&(t._i18n.unsubscribeDataChanging(t),delete t._subscribing),t._i18nWatcher&&(t._i18nWatcher(),t._i18n.destroyVM(),delete t._i18nWatcher),t._localeWatcher&&(t._localeWatcher(),delete t._localeWatcher),t._i18n=null}))}}},h={name:"i18n",functional:!0,props:{tag:{type:String},path:{type:String,required:!0},locale:{type:String},places:{type:[Array,Object]}},render:function(t,n){var e=n.data,r=n.parent,i=n.props,o=n.slots,a=r.$i18n;if(a){var l=i.path,s=i.locale,d=i.places,u=o(),c=a.i(l,s,function(t){var n;for(n in t)if("default"!==n)return!1;return Boolean(n)}(u)||d?function(t,n){var e=n?function(t){return Array.isArray(t)?t.reduce(b,{}):Object.assign({},t)}(n):{};if(!t)return e;var r=(t=t.filter((function(t){return t.tag||""!==t.text.trim()}))).every($);return t.reduce(r?C:b,e)}(u.default,d):u),p=i.tag||"span";return p?t(p,e,c):c}}};function C(t,n){return n.data&&n.data.attrs&&n.data.attrs.place&&(t[n.data.attrs.place]=n),t}function b(t,n,e){return t[e]=n,t}function $(t){return Boolean(t.data&&t.data.attrs&&t.data.attrs.place)}var v,x={name:"i18n-n",functional:!0,props:{tag:{type:String,default:"span"},value:{type:Number,required:!0},format:{type:[String,Object]},locale:{type:String}},render:function(t,n){var e=n.props,i=n.parent,a=n.data,l=i.$i18n;if(!l)return null;var s=null,d=null;"string"==typeof e.format?s=e.format:o(e.format)&&(e.format.key&&(s=e.format.key),d=Object.keys(e.format).reduce((function(t,n){var i;return c(r,n)?Object.assign({},t,((i={})[n]=e.format[n],i)):t}),null));var u=e.locale||l.locale,p=l._ntp(e.value,u,s,d),m=p.map((function(t,n){var e,r=a.scopedSlots&&a.scopedSlots[t.type];return r?r(((e={})[t.type]=t.value,e.index=n,e.parts=p,e)):t.value}));return t(e.tag,{attrs:a.attrs,class:a.class,staticClass:a.staticClass},m)}};function y(t,n,e){k(0,e)&&_(t,n,e)}function w(t,n,e,r){if(k(0,e)){var i=e.context.$i18n;(function(t,n){var e=n.context;return t._locale===e.$i18n.locale})(t,e)&&g(n.value,n.oldValue)&&g(t._localeMessage,i.getLocaleMessage(i.locale))||_(t,n,e)}}function B(t,n,e,r){if(e.context){var o=e.context.$i18n||{};n.modifiers.preserve||o.preserveDirectiveContent||(t.textContent=""),t._vt=void 0,delete t._vt,t._locale=void 0,delete t._locale,t._localeMessage=void 0,delete t._localeMessage}else i("Vue instance does not exists in VNode context")}function k(t,n){var e=n.context;return e?!!e.$i18n||(i("VueI18n instance does not exists in Vue instance"),!1):(i("Vue instance does not exists in VNode context"),!1)}function _(t,n,e){var r,o,a=function(t){var n,e,r,i;return"string"==typeof t?n=t:l(t)&&(n=t.path,e=t.locale,r=t.args,i=t.choice),{path:n,locale:e,args:r,choice:i}}(n.value),s=a.path,d=a.locale,u=a.args,c=a.choice;if(s||d||u)if(s){var p=e.context;t._vt=t.textContent=c?(r=p.$i18n).tc.apply(r,[s,c].concat(I(d,u))):(o=p.$i18n).t.apply(o,[s].concat(I(d,u))),t._locale=p.$i18n.locale,t._localeMessage=p.$i18n.getLocaleMessage(p.$i18n.locale)}else i("`path` is required in v-t directive");else i("value type not supported")}function I(t,n){var e=[];return t&&e.push(t),n&&(Array.isArray(n)||l(n))&&e.push(n),e}function D(t){D.installed=!0,(v=t).version&&Number(v.version.split(".")[0]),function(t){t.prototype.hasOwnProperty("$i18n")||Object.defineProperty(t.prototype,"$i18n",{get:function(){return this._i18n}}),t.prototype.$t=function(t){for(var n=[],e=arguments.length-1;e-- >0;)n[e]=arguments[e+1];var r=this.$i18n;return r._t.apply(r,[t,r.locale,r._getMessages(),this].concat(n))},t.prototype.$tc=function(t,n){for(var e=[],r=arguments.length-2;r-- >0;)e[r]=arguments[r+2];var i=this.$i18n;return i._tc.apply(i,[t,i.locale,i._getMessages(),this,n].concat(e))},t.prototype.$te=function(t,n){var e=this.$i18n;return e._te(t,e.locale,e._getMessages(),n)},t.prototype.$d=function(t){for(var n,e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];return(n=this.$i18n).d.apply(n,[t].concat(e))},t.prototype.$n=function(t){for(var n,e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];return(n=this.$i18n).n.apply(n,[t].concat(e))}}(v),v.mixin(A),v.directive("t",{bind:y,update:w,unbind:B}),v.component(h.name,h),v.component(x.name,x),v.config.optionMergeStrategies.i18n=function(t,n){return void 0===n?t:n}}var S=function(){this._caches=Object.create(null)};S.prototype.interpolate=function(t,n){if(!n)return[t];var e=this._caches[t];return e||(e=function(t){for(var n=[],e=0,r="";e<t.length;){var i=t[e++];if("{"===i){r&&n.push({type:"text",value:r}),r="";var o="";for(i=t[e++];void 0!==i&&"}"!==i;)o+=i,i=t[e++];var a="}"===i,l=z.test(o)?"list":a&&E.test(o)?"named":"unknown";n.push({value:o,type:l})}else"%"===i?"{"!==t[e]&&(r+=i):r+=i}return r&&n.push({type:"text",value:r}),n}(t),this._caches[t]=e),function(t,n){var e=[],r=0,i=Array.isArray(n)?"list":o(n)?"named":"unknown";if("unknown"===i)return e;for(;r<t.length;){var a=t[r];switch(a.type){case"text":e.push(a.value);break;case"list":e.push(n[parseInt(a.value,10)]);break;case"named":"named"===i&&e.push(n[a.value])}r++}return e}(e,n)};var z=/^(?:\d)+/,E=/^(?:\w)+/,G=[];G[0]={ws:[0],ident:[3,0],"[":[4],eof:[7]},G[1]={ws:[1],".":[2],"[":[4],eof:[7]},G[2]={ws:[2],ident:[3,0],0:[3,0],number:[3,0]},G[3]={ident:[3,0],0:[3,0],number:[3,0],ws:[1,1],".":[2,1],"[":[4,1],eof:[7,1]},G[4]={"'":[5,0],'"':[6,0],"[":[4,2],"]":[1,3],eof:8,else:[4,0]},G[5]={"'":[4,0],eof:8,else:[5,0]},G[6]={'"':[4,0],eof:8,else:[6,0]};var T=/^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;function M(t){if(null==t)return"eof";switch(t.charCodeAt(0)){case 91:case 93:case 46:case 34:case 39:return t;case 95:case 36:case 45:return"ident";case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"ws"}return"ident"}var j=function(){this._cache=Object.create(null)};j.prototype.parsePath=function(t){var n=this._cache[t];return n||(n=function(t){var n,e,r,i,o,a,l,s=[],d=-1,u=0,c=0,p=[];function m(){var n=t[d+1];if(5===u&&"'"===n||6===u&&'"'===n)return d++,r="\\"+n,p[0](),!0}for(p[1]=function(){void 0!==e&&(s.push(e),e=void 0)},p[0]=function(){void 0===e?e=r:e+=r},p[2]=function(){p[0](),c++},p[3]=function(){if(c>0)c--,u=4,p[0]();else{if(c=0,void 0===e)return!1;if(!1===(e=function(t){var n,e,r,i=t.trim();return("0"!==t.charAt(0)||!isNaN(t))&&(r=i,T.test(r)?(e=(n=i).charCodeAt(0))!==n.charCodeAt(n.length-1)||34!==e&&39!==e?n:n.slice(1,-1):"*"+i)}(e)))return!1;p[1]()}};null!==u;)if(d++,"\\"!==(n=t[d])||!m()){if(i=M(n),8===(o=(l=G[u])[i]||l.else||8))return;if(u=o[0],(a=p[o[1]])&&(r=void 0===(r=o[2])?n:r,!1===a()))return;if(7===u)return s}}(t))&&(this._cache[t]=n),n||[]},j.prototype.getPathValue=function(t,n){if(!o(t))return null;var e=this.parsePath(n);if(0===e.length)return null;for(var r=e.length,i=t,a=0;a<r;){var l=i[e[a]];if(void 0===l)return null;i=l,a++}return i};var O,F=/<\/?[\w\s="/.':;#-\/]+>/,L=/(?:@(?:\.[a-z]+)?:(?:[\w\-_|.]+|\([\w\-_|.]+\)))/g,P=/^@(?:\.([a-z]+))?:/,R=/[()]/g,q={upper:function(t){return t.toLocaleUpperCase()},lower:function(t){return t.toLocaleLowerCase()},capitalize:function(t){return""+t.charAt(0).toLocaleUpperCase()+t.substr(1)}},N=new S,Y=function(t){var n=this;void 0===t&&(t={}),!v&&"undefined"!=typeof window&&window.Vue&&D(window.Vue);var e=t.locale||"en-US",r=!1!==t.fallbackLocale&&(t.fallbackLocale||"en-US"),i=t.messages||{},o=t.dateTimeFormats||{},a=t.numberFormats||{};this._vm=null,this._formatter=t.formatter||N,this._modifiers=t.modifiers||{},this._missing=t.missing||null,this._root=t.root||null,this._sync=void 0===t.sync||!!t.sync,this._fallbackRoot=void 0===t.fallbackRoot||!!t.fallbackRoot,this._formatFallbackMessages=void 0!==t.formatFallbackMessages&&!!t.formatFallbackMessages,this._silentTranslationWarn=void 0!==t.silentTranslationWarn&&t.silentTranslationWarn,this._silentFallbackWarn=void 0!==t.silentFallbackWarn&&!!t.silentFallbackWarn,this._dateTimeFormatters={},this._numberFormatters={},this._path=new j,this._dataListeners=[],this._preserveDirectiveContent=void 0!==t.preserveDirectiveContent&&!!t.preserveDirectiveContent,this.pluralizationRules=t.pluralizationRules||{},this._warnHtmlInMessage=t.warnHtmlInMessage||"off",this._postTranslation=t.postTranslation||null,this._exist=function(t,e){return!(!t||!e||s(n._path.getPathValue(t,e))&&!t[e])},"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||Object.keys(i).forEach((function(t){n._checkLocaleMessage(t,n._warnHtmlInMessage,i[t])})),this._initVM({locale:e,fallbackLocale:r,messages:i,dateTimeFormats:o,numberFormats:a})},U={vm:{configurable:!0},messages:{configurable:!0},dateTimeFormats:{configurable:!0},numberFormats:{configurable:!0},availableLocales:{configurable:!0},locale:{configurable:!0},fallbackLocale:{configurable:!0},formatFallbackMessages:{configurable:!0},missing:{configurable:!0},formatter:{configurable:!0},silentTranslationWarn:{configurable:!0},silentFallbackWarn:{configurable:!0},preserveDirectiveContent:{configurable:!0},warnHtmlInMessage:{configurable:!0},postTranslation:{configurable:!0}};Y.prototype._checkLocaleMessage=function(t,n,e){var r=function(t,n,e,o){if(l(e))Object.keys(e).forEach((function(i){var a=e[i];l(a)?(o.push(i),o.push("."),r(t,n,a,o),o.pop(),o.pop()):(o.push(i),r(t,n,a,o),o.pop())}));else if(Array.isArray(e))e.forEach((function(e,i){l(e)?(o.push("["+i+"]"),o.push("."),r(t,n,e,o),o.pop(),o.pop()):(o.push("["+i+"]"),r(t,n,e,o),o.pop())}));else if("string"==typeof e&&F.test(e)){var a="Detected HTML in message '"+e+"' of keypath '"+o.join("")+"' at '"+n+"'. Consider component interpolation with '<i18n>' to avoid XSS. See https://bit.ly/2ZqJzkp";"warn"===t?i(a):"error"===t&&function(t,n){"undefined"!=typeof console&&console.error("[vue-i18n] "+t)}(a)}};r(n,t,e,[])},Y.prototype._initVM=function(t){var n=v.config.silent;v.config.silent=!0,this._vm=new v({data:t}),v.config.silent=n},Y.prototype.destroyVM=function(){this._vm.$destroy()},Y.prototype.subscribeDataChanging=function(t){this._dataListeners.push(t)},Y.prototype.unsubscribeDataChanging=function(t){!function(t,n){if(t.length){var e=t.indexOf(n);e>-1&&t.splice(e,1)}}(this._dataListeners,t)},Y.prototype.watchI18nData=function(){var t=this;return this._vm.$watch("$data",(function(){for(var n=t._dataListeners.length;n--;)v.nextTick((function(){t._dataListeners[n]&&t._dataListeners[n].$forceUpdate()}))}),{deep:!0})},Y.prototype.watchLocale=function(){if(!this._sync||!this._root)return null;var t=this._vm;return this._root.$i18n.vm.$watch("locale",(function(n){t.$set(t,"locale",n),t.$forceUpdate()}),{immediate:!0})},U.vm.get=function(){return this._vm},U.messages.get=function(){return u(this._getMessages())},U.dateTimeFormats.get=function(){return u(this._getDateTimeFormats())},U.numberFormats.get=function(){return u(this._getNumberFormats())},U.availableLocales.get=function(){return Object.keys(this.messages).sort()},U.locale.get=function(){return this._vm.locale},U.locale.set=function(t){this._vm.$set(this._vm,"locale",t)},U.fallbackLocale.get=function(){return this._vm.fallbackLocale},U.fallbackLocale.set=function(t){this._localeChainCache={},this._vm.$set(this._vm,"fallbackLocale",t)},U.formatFallbackMessages.get=function(){return this._formatFallbackMessages},U.formatFallbackMessages.set=function(t){this._formatFallbackMessages=t},U.missing.get=function(){return this._missing},U.missing.set=function(t){this._missing=t},U.formatter.get=function(){return this._formatter},U.formatter.set=function(t){this._formatter=t},U.silentTranslationWarn.get=function(){return this._silentTranslationWarn},U.silentTranslationWarn.set=function(t){this._silentTranslationWarn=t},U.silentFallbackWarn.get=function(){return this._silentFallbackWarn},U.silentFallbackWarn.set=function(t){this._silentFallbackWarn=t},U.preserveDirectiveContent.get=function(){return this._preserveDirectiveContent},U.preserveDirectiveContent.set=function(t){this._preserveDirectiveContent=t},U.warnHtmlInMessage.get=function(){return this._warnHtmlInMessage},U.warnHtmlInMessage.set=function(t){var n=this,e=this._warnHtmlInMessage;if(this._warnHtmlInMessage=t,e!==t&&("warn"===t||"error"===t)){var r=this._getMessages();Object.keys(r).forEach((function(t){n._checkLocaleMessage(t,n._warnHtmlInMessage,r[t])}))}},U.postTranslation.get=function(){return this._postTranslation},U.postTranslation.set=function(t){this._postTranslation=t},Y.prototype._getMessages=function(){return this._vm.messages},Y.prototype._getDateTimeFormats=function(){return this._vm.dateTimeFormats},Y.prototype._getNumberFormats=function(){return this._vm.numberFormats},Y.prototype._warnDefault=function(t,n,e,r,i,o){if(!s(e))return e;if(this._missing){var a=this._missing.apply(null,[t,n,r,i]);if("string"==typeof a)return a}if(this._formatFallbackMessages){var l=d.apply(void 0,i);return this._render(n,o,l.params,n)}return n},Y.prototype._isFallbackRoot=function(t){return!t&&!s(this._root)&&this._fallbackRoot},Y.prototype._isSilentFallbackWarn=function(t){return this._silentFallbackWarn instanceof RegExp?this._silentFallbackWarn.test(t):this._silentFallbackWarn},Y.prototype._isSilentFallback=function(t,n){return this._isSilentFallbackWarn(n)&&(this._isFallbackRoot()||t!==this.fallbackLocale)},Y.prototype._isSilentTranslationWarn=function(t){return this._silentTranslationWarn instanceof RegExp?this._silentTranslationWarn.test(t):this._silentTranslationWarn},Y.prototype._interpolate=function(t,n,e,r,i,o,a){if(!n)return null;var d,u=this._path.getPathValue(n,e);if(Array.isArray(u)||l(u))return u;if(s(u)){if(!l(n))return null;if("string"!=typeof(d=n[e]))return null}else{if("string"!=typeof u)return null;d=u}return(d.indexOf("@:")>=0||d.indexOf("@.")>=0)&&(d=this._link(t,n,d,r,"raw",o,a)),this._render(d,i,o,e)},Y.prototype._link=function(t,n,e,r,i,o,a){var l=e,s=l.match(L);for(var d in s)if(s.hasOwnProperty(d)){var u=s[d],p=u.match(P),m=p[0],f=p[1],g=u.replace(m,"").replace(R,"");if(c(a,g))return l;a.push(g);var A=this._interpolate(t,n,g,r,"raw"===i?"string":i,"raw"===i?void 0:o,a);if(this._isFallbackRoot(A)){if(!this._root)throw Error("unexpected error");var h=this._root.$i18n;A=h._translate(h._getMessages(),h.locale,h.fallbackLocale,g,r,i,o)}A=this._warnDefault(t,g,A,r,Array.isArray(o)?o:[o],i),this._modifiers.hasOwnProperty(f)?A=this._modifiers[f](A):q.hasOwnProperty(f)&&(A=q[f](A)),a.pop(),l=A?l.replace(u,A):l}return l},Y.prototype._render=function(t,n,e,r){var i=this._formatter.interpolate(t,e,r);return i||(i=N.interpolate(t,e,r)),"string"===n&&"string"!=typeof i?i.join(""):i},Y.prototype._appendItemToChain=function(t,n,e){var r=!1;return c(t,n)||(r=!0,n&&(r="!"!==n[n.length-1],n=n.replace(/!/g,""),t.push(n),e&&e[n]&&(r=e[n]))),r},Y.prototype._appendLocaleToChain=function(t,n,e){var r,i=n.split("-");do{var o=i.join("-");r=this._appendItemToChain(t,o,e),i.splice(-1,1)}while(i.length&&!0===r);return r},Y.prototype._appendBlockToChain=function(t,n,e){for(var r=!0,i=0;i<n.length&&"boolean"==typeof r;i++){var o=n[i];r=this._appendLocaleToChain(t,o,e)}return r},Y.prototype._getLocaleChain=function(t,n){if(""===t)return[];this._localeChainCache||(this._localeChainCache={});var e=this._localeChainCache[t];if(!e){n||(n=this.fallbackLocale),e=[];for(var r,i=[t];Array.isArray(i);)i=this._appendBlockToChain(e,i,n);(i="string"==typeof(r=Array.isArray(n)?n:n instanceof Object?n.default?n.default:null:n)?[r]:r)&&this._appendBlockToChain(e,i,null),this._localeChainCache[t]=e}return e},Y.prototype._translate=function(t,n,e,r,i,o,a){for(var l,d=this._getLocaleChain(n,e),u=0;u<d.length;u++){var c=d[u];if(!s(l=this._interpolate(c,t[c],r,i,o,a,[r])))return l}return null},Y.prototype._t=function(t,n,e,r){for(var i,o=[],a=arguments.length-4;a-- >0;)o[a]=arguments[a+4];if(!t)return"";var l=d.apply(void 0,o),s=l.locale||n,u=this._translate(e,s,this.fallbackLocale,t,r,"string",l.params);if(this._isFallbackRoot(u)){if(!this._root)throw Error("unexpected error");return(i=this._root).$t.apply(i,[t].concat(o))}return u=this._warnDefault(s,t,u,r,o,"string"),this._postTranslation&&null!=u&&(u=this._postTranslation(u,t)),u},Y.prototype.t=function(t){for(var n,e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];return(n=this)._t.apply(n,[t,this.locale,this._getMessages(),null].concat(e))},Y.prototype._i=function(t,n,e,r,i){var o=this._translate(e,n,this.fallbackLocale,t,r,"raw",i);if(this._isFallbackRoot(o)){if(!this._root)throw Error("unexpected error");return this._root.$i18n.i(t,n,i)}return this._warnDefault(n,t,o,r,[i],"raw")},Y.prototype.i=function(t,n,e){return t?("string"!=typeof n&&(n=this.locale),this._i(t,n,this._getMessages(),null,e)):""},Y.prototype._tc=function(t,n,e,r,i){for(var o,a=[],l=arguments.length-5;l-- >0;)a[l]=arguments[l+5];if(!t)return"";void 0===i&&(i=1);var s={count:i,n:i},u=d.apply(void 0,a);return u.params=Object.assign(s,u.params),a=null===u.locale?[u.params]:[u.locale,u.params],this.fetchChoice((o=this)._t.apply(o,[t,n,e,r].concat(a)),i)},Y.prototype.fetchChoice=function(t,n){if(!t&&"string"!=typeof t)return null;var e=t.split("|");return e[n=this.getChoiceIndex(n,e.length)]?e[n].trim():t},Y.prototype.getChoiceIndex=function(t,n){var e,r;return this.locale in this.pluralizationRules?this.pluralizationRules[this.locale].apply(this,[t,n]):(e=t,r=n,e=Math.abs(e),2===r?e?e>1?1:0:1:e?Math.min(e,2):0)},Y.prototype.tc=function(t,n){for(var e,r=[],i=arguments.length-2;i-- >0;)r[i]=arguments[i+2];return(e=this)._tc.apply(e,[t,this.locale,this._getMessages(),null,n].concat(r))},Y.prototype._te=function(t,n,e){for(var r=[],i=arguments.length-3;i-- >0;)r[i]=arguments[i+3];var o=d.apply(void 0,r).locale||n;return this._exist(e[o],t)},Y.prototype.te=function(t,n){return this._te(t,this.locale,this._getMessages(),n)},Y.prototype.getLocaleMessage=function(t){return u(this._vm.messages[t]||{})},Y.prototype.setLocaleMessage=function(t,n){"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||this._checkLocaleMessage(t,this._warnHtmlInMessage,n),this._vm.$set(this._vm.messages,t,n)},Y.prototype.mergeLocaleMessage=function(t,n){"warn"!==this._warnHtmlInMessage&&"error"!==this._warnHtmlInMessage||this._checkLocaleMessage(t,this._warnHtmlInMessage,n),this._vm.$set(this._vm.messages,t,f({},this._vm.messages[t]||{},n))},Y.prototype.getDateTimeFormat=function(t){return u(this._vm.dateTimeFormats[t]||{})},Y.prototype.setDateTimeFormat=function(t,n){this._vm.$set(this._vm.dateTimeFormats,t,n),this._clearDateTimeFormat(t,n)},Y.prototype.mergeDateTimeFormat=function(t,n){this._vm.$set(this._vm.dateTimeFormats,t,f(this._vm.dateTimeFormats[t]||{},n)),this._clearDateTimeFormat(t,n)},Y.prototype._clearDateTimeFormat=function(t,n){for(var e in n){var r=t+"__"+e;this._dateTimeFormatters.hasOwnProperty(r)&&delete this._dateTimeFormatters[r]}},Y.prototype._localizeDateTime=function(t,n,e,r,i){for(var o=n,a=r[o],l=this._getLocaleChain(n,e),d=0;d<l.length;d++){var u=l[d];if(o=u,!s(a=r[u])&&!s(a[i]))break}if(s(a)||s(a[i]))return null;var c=a[i],p=o+"__"+i,m=this._dateTimeFormatters[p];return m||(m=this._dateTimeFormatters[p]=new Intl.DateTimeFormat(o,c)),m.format(t)},Y.prototype._d=function(t,n,e){if(!e)return new Intl.DateTimeFormat(n).format(t);var r=this._localizeDateTime(t,n,this.fallbackLocale,this._getDateTimeFormats(),e);if(this._isFallbackRoot(r)){if(!this._root)throw Error("unexpected error");return this._root.$i18n.d(t,e,n)}return r||""},Y.prototype.d=function(t){for(var n=[],e=arguments.length-1;e-- >0;)n[e]=arguments[e+1];var r=this.locale,i=null;return 1===n.length?"string"==typeof n[0]?i=n[0]:o(n[0])&&(n[0].locale&&(r=n[0].locale),n[0].key&&(i=n[0].key)):2===n.length&&("string"==typeof n[0]&&(i=n[0]),"string"==typeof n[1]&&(r=n[1])),this._d(t,r,i)},Y.prototype.getNumberFormat=function(t){return u(this._vm.numberFormats[t]||{})},Y.prototype.setNumberFormat=function(t,n){this._vm.$set(this._vm.numberFormats,t,n),this._clearNumberFormat(t,n)},Y.prototype.mergeNumberFormat=function(t,n){this._vm.$set(this._vm.numberFormats,t,f(this._vm.numberFormats[t]||{},n)),this._clearNumberFormat(t,n)},Y.prototype._clearNumberFormat=function(t,n){for(var e in n){var r=t+"__"+e;this._numberFormatters.hasOwnProperty(r)&&delete this._numberFormatters[r]}},Y.prototype._getNumberFormatter=function(t,n,e,r,i,o){for(var a=n,l=r[a],d=this._getLocaleChain(n,e),u=0;u<d.length;u++){var c=d[u];if(a=c,!s(l=r[c])&&!s(l[i]))break}if(s(l)||s(l[i]))return null;var p,m=l[i];if(o)p=new Intl.NumberFormat(a,Object.assign({},m,o));else{var f=a+"__"+i;(p=this._numberFormatters[f])||(p=this._numberFormatters[f]=new Intl.NumberFormat(a,m))}return p},Y.prototype._n=function(t,n,e,r){if(!Y.availabilities.numberFormat)return"";if(!e)return(r?new Intl.NumberFormat(n,r):new Intl.NumberFormat(n)).format(t);var i=this._getNumberFormatter(t,n,this.fallbackLocale,this._getNumberFormats(),e,r),o=i&&i.format(t);if(this._isFallbackRoot(o)){if(!this._root)throw Error("unexpected error");return this._root.$i18n.n(t,Object.assign({},{key:e,locale:n},r))}return o||""},Y.prototype.n=function(t){for(var n=[],e=arguments.length-1;e-- >0;)n[e]=arguments[e+1];var i=this.locale,a=null,l=null;return 1===n.length?"string"==typeof n[0]?a=n[0]:o(n[0])&&(n[0].locale&&(i=n[0].locale),n[0].key&&(a=n[0].key),l=Object.keys(n[0]).reduce((function(t,e){var i;return c(r,e)?Object.assign({},t,((i={})[e]=n[0][e],i)):t}),null)):2===n.length&&("string"==typeof n[0]&&(a=n[0]),"string"==typeof n[1]&&(i=n[1])),this._n(t,i,a,l)},Y.prototype._ntp=function(t,n,e,r){if(!Y.availabilities.numberFormat)return[];if(!e)return(r?new Intl.NumberFormat(n,r):new Intl.NumberFormat(n)).formatToParts(t);var i=this._getNumberFormatter(t,n,this.fallbackLocale,this._getNumberFormats(),e,r),o=i&&i.formatToParts(t);if(this._isFallbackRoot(o)){if(!this._root)throw Error("unexpected error");return this._root.$i18n._ntp(t,n,e,r)}return o||[]},Object.defineProperties(Y.prototype,U),Object.defineProperty(Y,"availabilities",{get:function(){if(!O){var t="undefined"!=typeof Intl;O={dateTimeFormat:t&&void 0!==Intl.DateTimeFormat,numberFormat:t&&void 0!==Intl.NumberFormat}}return O}}),Y.install=D,Y.version="8.17.4";const W=Y},25121:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>l});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{attrs:{id:"serp"}},[e("div",{staticClass:"serp-preview"},[e("div",{staticClass:"serp-title"},[t._v("\n "+t._s(t.displayedTitle)+"\n ")]),t._v(" "),e("div",{staticClass:"serp-url"},[t._v("\n "+t._s(t.url)),e("span",{staticClass:"serp-arrow"})]),t._v(" "),e("div",{staticClass:"serp-description"},[t._v("\n "+t._s(t.displayedDescription)+"\n ")])])])};r._withStripped=!0;var i=e(66313);const o=i.Z;e(69492);var a=(0,e(51900).Z)(o,r,[],!1,null,"66c4c5ab",null);a.options.__file="js/app/utils/serp/serp.vue";const l=a.exports},1535:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>l});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{attrs:{id:"combination-edit-modal"}},[null!==t.selectedCombinationId?e("modal",{staticClass:"combination-modal",on:{close:t.closeModal},scopedSlots:t._u([{key:"body",fn:function(){return[t.loadingCombinationForm?e("div",{staticClass:"combination-loading"},[e("div",{staticClass:"spinner"})]):t._e(),t._v(" "),e("iframe",{ref:"iframe",staticClass:"combination-iframe",attrs:{src:t.editCombinationUrl,vspace:"0",hspace:"0",scrolling:"auto"},on:{loadstart:t.frameLoading,load:t.onFrameLoaded}})]},proxy:!0},{key:"footer",fn:function(){return[e("button",{staticClass:"btn btn-secondary btn-close",attrs:{type:"button","aria-label":t.$t("modal.close"),disabled:t.submittingCombinationForm},on:{click:function(n){return n.preventDefault(),n.stopPropagation(),t.tryClose(n)}}},[t._v("\n "+t._s(t.$t("modal.cancel"))+"\n ")]),t._v(" "),e("button",{staticClass:"btn btn-outline-secondary",attrs:{type:"button","aria-label":t.$t("modal.previous"),disabled:null===t.previousCombinationId||t.submittingCombinationForm},on:{click:function(n){return n.preventDefault(),n.stopPropagation(),t.showPrevious(n)}}},[e("i",{staticClass:"material-icons"},[t._v("keyboard_arrow_left")]),t._v("\n "+t._s(t.$t("modal.previous"))+"\n ")]),t._v(" "),e("button",{staticClass:"btn btn-outline-secondary",attrs:{type:"button","aria-label":t.$t("modal.next"),disabled:null===t.nextCombinationId||t.submittingCombinationForm},on:{click:function(n){return n.preventDefault(),n.stopPropagation(),t.showNext(n)}}},[t._v("\n "+t._s(t.$t("modal.next"))+"\n "),e("i",{staticClass:"material-icons"},[t._v("keyboard_arrow_right")])]),t._v(" "),e("button",{staticClass:"btn btn-primary",attrs:{type:"button","aria-label":t.$t("modal.save"),disabled:t.submittingCombinationForm||!t.isFormUpdated},on:{click:function(n){return n.preventDefault(),n.stopPropagation(),t.submitForm(n)}}},[t.submittingCombinationForm?t._e():e("span",[t._v("\n "+t._s(t.$t("modal.save"))+"\n ")]),t._v(" "),t.submittingCombinationForm?e("span",{staticClass:"spinner-border spinner-border-sm",attrs:{role:"status","aria-hidden":"true"}}):t._e()])]},proxy:!0},{key:"outside",fn:function(){return[e("history",{attrs:{"combinations-list":t.combinationsHistory,"selected-combination":t.selectedCombinationId,"empty-image-url":t.emptyImageUrl},on:{selectCombination:t.selectCombination}})]},proxy:!0}],null,!1,3589452979)}):t._e(),t._v(" "),e("div",{staticClass:"modal-prevent-close",on:{click:function(n){return n.preventDefault(),n.stopPropagation(),t.preventClose(n)}}},[t.showConfirm?e("modal",{attrs:{"modal-title":t.$t("modal.history.confirmTitle"),"cancel-label":t.$t("modal.cancel"),"confirm-label":t.$t("modal.confirm"),"close-label":t.$t("modal.close"),confirmation:!0},on:{close:t.hideConfirmModal,confirm:t.confirmSelection},scopedSlots:t._u([{key:"body",fn:function(){return[e("p",{domProps:{innerHTML:t._s(t.$t("modal.history.confirmBody",{"%combinationName%":t.selectedCombinationName}))}})]},proxy:!0}],null,!1,2614375117)}):t._e()],1)],1)};r._withStripped=!0;var i=e(13517);const o=i.Z;e(33045);var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/pages/product/components/combination-modal/CombinationModal.vue";const l=a.exports},36125:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>l});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"card history",on:{click:t.preventClose}},[e("div",{staticClass:"card-header"},[t._v("\n "+t._s(t.$t("modal.history.editedCombination",{"%editedNb%":t.combinationsList.length}))+"\n ")]),t._v(" "),e("div",{staticClass:"card-block"},[t.areCombinationsNotEmpty?e("ul",{staticClass:"history-list"},t._l(t.paginatedDatas[t.currentPage-1],(function(n,r){return e("li",{key:r,class:["history-item",t.isSelected(n.id)],on:{click:function(e){return t.selectCombination(n)}}},[t._v("\n "+t._s(n.title)+"\n "),e("i",{staticClass:"material-icons"},[t._v("edit")])])})),0):e("div",{staticClass:"history-empty"},[e("img",{attrs:{src:t.emptyImageUrl}}),t._v(" "),e("p",{staticClass:"history-empty-tip"},[t._v("\n "+t._s(t.$t("modal.history.empty"))+"\n ")])])]),t._v(" "),t.areCombinationsNotEmpty?e("div",{staticClass:"card-footer"},[e("pagination",{attrs:{"pagination-length":14,datas:t.combinationsList},on:{paginated:t.constructDatas}})],1):t._e()])};r._withStripped=!0;var i=e(19177);const o=i.Z;e(67445);var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/pages/product/components/combination-modal/History.vue";const l=a.exports},95075:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>l});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{attrs:{id:"product-images-container"}},[e("div",{class:["dropzone","dropzone-container",{full:t.files.length<=0}],attrs:{id:"product-images-dropzone"}},[e("div",{class:["dz-preview","openfilemanager",{"d-none":t.loading||t.files.length<=0}]},[t._m(0)]),t._v(" "),e("div",{class:["dz-default","dz-message","openfilemanager","dz-clickable",{"d-none":t.loading||t.files.length>0}]},[e("i",{staticClass:"material-icons"},[t._v("add_a_photo")]),e("br"),t._v("\n "+t._s(t.$t("window.dropImages"))),e("br"),t._v(" "),e("a",[t._v(t._s(t.$t("window.selectFiles")))]),e("br"),t._v(" "),e("small",[t._v("\n "+t._s(t.$t("window.recommendedSize"))),e("br"),t._v("\n "+t._s(t.$t("window.recommendedFormats"))+"\n ")])]),t._v(" "),t.loading?e("div",{staticClass:"dropzone-loading"},[e("div",{staticClass:"spinner"})]):t._e()]),t._v(" "),t.selectedFiles.length>0?e("dropzone-window",{staticClass:"dropzone-window",attrs:{"selected-files":t.selectedFiles,dropzone:t.dropzone,files:t.files,locales:t.locales,"selected-locale":t.selectedLocale,loading:t.buttonLoading},on:{unselectAll:t.unselectAll,removeSelection:t.showModal,selectAll:t.selectAll,saveSelectedFile:t.saveSelectedFile,replacedFile:t.manageReplacedFile,openGallery:t.toggleGallery}}):t._e(),t._v(" "),t.isModalShown?e("modal",{attrs:{confirmation:!0,"modal-title":t.$tc("modal.title",this.selectedFiles.length,{"%filesNb%":this.selectedFiles.length}),"confirm-label":t.$t("modal.accept"),"cancel-label":t.$t("modal.close")},on:{confirm:t.removeSelection,close:t.hideModal}}):t._e(),t._v(" "),e("div",{staticClass:"dz-template d-none"},[e("div",{staticClass:"dz-preview dz-file-preview"},[t._m(1),t._v(" "),t._m(2),t._v(" "),t._m(3),t._v(" "),t._m(4),t._v(" "),t._m(5),t._v(" "),t._m(6),t._v(" "),e("div",{staticClass:"iscover"},[t._v("\n "+t._s(t.$t("window.cover"))+"\n ")])])]),t._v(" "),t.selectedFiles.length>0&&t.galleryOpened?e("dropzone-photo-swipe",{attrs:{files:t.selectedFiles},on:{closeGallery:t.toggleGallery}}):t._e()],1)};r._withStripped=!0;var i=e(76182);const o=i.Z;e(45207);var a=(0,e(51900).Z)(o,r,[function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",[e("span",[e("i",{staticClass:"material-icons"},[t._v("add_a_photo")])])])},function(){var t=this.$createElement,n=this._self._c||t;return n("div",{staticClass:"dz-image"},[n("img",{attrs:{"data-dz-thumbnail":""}})])},function(){var t=this.$createElement,n=this._self._c||t;return n("div",{staticClass:"dz-progress"},[n("span",{staticClass:"dz-upload",attrs:{"data-dz-uploadprogress":""}})])},function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"dz-success-mark"},[e("span",[t._v("✔")])])},function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"dz-error-mark"},[e("span",[t._v("✘")])])},function(){var t=this.$createElement,n=this._self._c||t;return n("div",{staticClass:"dz-error-message"},[n("span",{attrs:{"data-dz-errormessage":""}})])},function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"dz-hover"},[e("i",{staticClass:"material-icons drag-indicator"},[t._v("drag_indicator")]),t._v(" "),e("div",{staticClass:"md-checkbox"},[e("label",[e("input",{attrs:{type:"checkbox"}}),t._v(" "),e("i",{staticClass:"md-checkbox-control"})])])])}],!1,null,null,null);a.options.__file="js/pages/product/components/dropzone/Dropzone.vue";const l=a.exports},9080:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>l});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"pswp",attrs:{tabindex:"-1",role:"dialog","aria-hidden":"true"}},[e("div",{staticClass:"pswp__bg"}),t._v(" "),e("div",{staticClass:"pswp__scroll-wrap"},[t._m(0),t._v(" "),e("div",{staticClass:"pswp__ui pswp__ui--hidden"},[e("div",{staticClass:"pswp__top-bar"},[e("div",{staticClass:"pswp__counter"}),t._v(" "),e("button",{staticClass:"pswp__button pswp__button--close",attrs:{type:"button",title:t.$t("window.closePhotoSwipe")}},[e("i",{staticClass:"material-icons"},[t._v("close")])]),t._v(" "),e("button",{staticClass:"pswp__button pswp__button--share",attrs:{type:"button",title:t.$t("window.download")}},[e("i",{staticClass:"material-icons"},[t._v("file_download")])]),t._v(" "),e("button",{staticClass:"pswp__button pswp__button--fs",attrs:{type:"button",title:t.$t("window.toggleFullscreen")}},[e("i",{staticClass:"material-icons"},[t._v("fullscreen")])]),t._v(" "),e("button",{staticClass:"pswp__button pswp__button--zoom",attrs:{type:"button",title:t.$t("window.zoomPhotoSwipe")}},[e("i",{staticClass:"material-icons"},[t._v("zoom_in")])]),t._v(" "),t._m(1)]),t._v(" "),t._m(2),t._v(" "),e("button",{staticClass:"pswp__button pswp__button--arrow--left",attrs:{type:"button",title:t.$t("window.previousPhotoSwipe")}},[e("i",{staticClass:"material-icons"},[t._v("arrow_back")])]),t._v(" "),e("button",{staticClass:"pswp__button pswp__button--arrow--right",attrs:{type:"button",title:t.$t("window.nextPhotoSwipe")}},[e("i",{staticClass:"material-icons"},[t._v("arrow_forward")])]),t._v(" "),t._m(3)])])])};r._withStripped=!0;var i=e(99681);const o=i.Z;e(82516);var a=(0,e(51900).Z)(o,r,[function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"pswp__container"},[e("div",{staticClass:"pswp__item"}),t._v(" "),e("div",{staticClass:"pswp__item"}),t._v(" "),e("div",{staticClass:"pswp__item"})])},function(){var t=this.$createElement,n=this._self._c||t;return n("div",{staticClass:"pswp__preloader"},[n("div",{staticClass:"pswp__preloader__icn"},[n("div",{staticClass:"pswp__preloader__cut"},[n("div",{staticClass:"pswp__preloader__donut"})])])])},function(){var t=this.$createElement,n=this._self._c||t;return n("div",{staticClass:"pswp__share-modal pswp__share-modal--hidden pswp__single-tap"},[n("div",{staticClass:"pswp__share-tooltip"})])},function(){var t=this.$createElement,n=this._self._c||t;return n("div",{staticClass:"pswp__caption"},[n("div",{staticClass:"pswp__caption__center"})])}],!1,null,null,null);a.options.__file="js/pages/product/components/dropzone/DropzonePhotoSwipe.vue";const l=a.exports},69671:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>l});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"dropzone-window"},[e("div",{staticClass:"dropzone-window-header row"},[e("div",{staticClass:"dropzone-window-header-left"},[e("p",{staticClass:"dropzone-window-number",domProps:{innerHTML:t._s(t.$t("window.selectedFiles",{"%filesNb%":t.selectedFiles.length}))}})]),t._v(" "),e("div",{staticClass:"dropzone-window-header-right"},[e("i",{staticClass:"material-icons",attrs:{"data-toggle":"pstooltip","data-original-title":t.$t("window.zoom")},on:{click:function(n){return t.$emit("openGallery")}}},[t._v("search")]),t._v(" "),t.selectedFile?e("i",{staticClass:"material-icons",attrs:{"data-toggle":"pstooltip","data-original-title":t.$t("window.replaceSelection")},on:{click:t.openFileManager}},[t._v("find_replace")]):t._e(),t._v(" "),e("i",{staticClass:"material-icons",attrs:{"data-toggle":"pstooltip","data-original-title":t.$t("window.delete")},on:{click:function(n){return n.stopPropagation(),t.$emit("removeSelection")}}},[t._v("delete")]),t._v(" "),e("i",{staticClass:"material-icons",attrs:{"data-toggle":"pstooltip","data-original-title":t.$t("window.close")},on:{click:function(n){return t.$emit("unselectAll")}}},[t._v("close")])])]),t._v(" "),t.files.length>0&&t.selectedFiles.length!==t.files.length?e("p",{staticClass:"dropzone-window-select",on:{click:function(n){return t.$emit("selectAll")}}},[t._v("\n "+t._s(t.$t("window.selectAll"))+"\n ")]):t._e(),t._v(" "),t.selectedFiles.length===t.files.length?e("p",{staticClass:"dropzone-window-unselect",on:{click:function(n){return t.$emit("unselectAll")}}},[t._v("\n "+t._s(t.$t("window.unselectAll"))+"\n ")]):t._e(),t._v(" "),null!==t.selectedFile?e("div",{staticClass:"md-checkbox dropzone-window-checkbox",attrs:{"data-toggle":t.showCoverTooltip,"data-original-title":t.$t("window.cantDisableCover")}},[e("label",[e("input",{attrs:{type:"checkbox",disabled:t.isCover},domProps:{checked:t.isCover},on:{change:function(n){return n.preventDefault(),n.stopPropagation(),t.coverChanged(n)}}}),t._v(" "),e("i",{staticClass:"md-checkbox-control"}),t._v("\n "+t._s(t.$t("window.useAsCover"))+"\n ")])]):t._e(),t._v(" "),e("input",{staticClass:"dropzone-window-filemanager",attrs:{type:"file"},on:{change:function(n){return n.preventDefault(),n.stopPropagation(),t.watchFiles(n)}}}),t._v(" "),null!==t.selectedFile?e("div",{staticClass:"dropzone-window-label"},[e("label",{staticClass:"control-label",attrs:{for:"caption-textarea"}},[t._v(t._s(t.$t("window.caption")))]),t._v(" "),t.locales.length>1?e("div",{staticClass:"dropdown"},[e("button",{staticClass:"btn btn-outline-secondary btn-sm dropdown-toggle js-locale-btn",attrs:{type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",id:"product_dropzone_lang"}},[t._v("\n "+t._s(t.selectedLocale.iso_code)+"\n ")]),t._v(" "),e("div",{staticClass:"dropdown-menu locale-dropdown-menu",attrs:{"aria-labelledby":"form_invoice_prefix"}},t._l(t.locales,(function(n){return e("span",{key:n.name,staticClass:"dropdown-item js-locale-item",attrs:{"data-locale":n.iso_code}},[t._v("\n "+t._s(n.name)+"\n ")])})),0)]):t._e()]):t._e(),t._v(" "),null!==t.selectedFile?e("textarea",{directives:[{name:"model",rawName:"v-model",value:t.captionValue[t.selectedLocale.id_lang],expression:"captionValue[selectedLocale.id_lang]"}],staticClass:"form-control",attrs:{id:"caption-textarea",name:"caption-textarea"},domProps:{value:t.captionValue[t.selectedLocale.id_lang]},on:{change:function(n){return n.preventDefault(),n.stopPropagation(),t.prevent(n)},keyup:function(n){return n.preventDefault(),n.stopPropagation(),t.prevent(n)},input:function(n){n.target.composing||t.$set(t.captionValue,t.selectedLocale.id_lang,n.target.value)}}}):t._e(),t._v(" "),t.selectedFile?e("div",{staticClass:"dropzone-window-button-container"},[e("button",{staticClass:"btn btn-primary save-image-settings",attrs:{type:"button"},on:{click:function(n){return t.$emit("saveSelectedFile",t.captionValue,t.coverData)}}},[t.loading?t._e():e("span",[t._v("\n "+t._s(t.$t("window.saveImage"))+"\n ")]),t._v(" "),t.loading?e("span",{staticClass:"spinner-border spinner-border-sm",attrs:{role:"status","aria-hidden":"true"}}):t._e()])]):t._e()])};r._withStripped=!0;var i=e(30356);const o=i.Z;e(75471);var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/pages/product/components/dropzone/DropzoneWindow.vue";const l=a.exports},93858:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>l});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"combinations-filters-dropdown"},[e("div",{staticClass:"dropdown"},[e("button",{class:["btn","dropdown-toggle",t.selectedFilters.length>0?"btn-primary":"btn-outline-secondary","btn"],attrs:{type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",id:"form_invoice_prefix"}},[t._v("\n "+t._s(t.label)+" "+t._s(t.nbFiles)+"\n ")]),t._v(" "),e("div",{staticClass:"dropdown-menu",attrs:{"aria-labelledby":"form_invoice_prefix"},on:{click:function(n){return t.preventClose(n)}}},t._l(t.children,(function(n){return e("div",{key:n.id,staticClass:"md-checkbox"},[e("label",{staticClass:"dropdown-item"},[e("div",{staticClass:"md-checkbox-container"},[e("input",{attrs:{type:"checkbox"},domProps:{checked:t.isChecked(n)},on:{change:function(e){return t.toggleFilter(n)}}}),t._v(" "),e("i",{staticClass:"md-checkbox-control"}),t._v("\n "+t._s(n.name)+"\n ")])])])})),0)])])};r._withStripped=!0;var i=e(84813);const o=i.Z;e(16002);var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/pages/product/components/filters/FilterDropdown.vue";const l=a.exports},4205:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>l});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"combinations-filters"},[t.filters.length?e("label",{staticClass:"control-label"},[t._v(t._s(t.$t("filters.label")))]):t._e(),t._v(" "),t.filters.length?e("div",{staticClass:"combinations-filters-line"},[t._l(t.filters,(function(n){return e("filter-dropdown",{key:n.id,attrs:{children:n.attributes,"parent-id":n.id,label:n.name},on:{addFilter:t.addFilter,removeFilter:t.removeFilter}})})),t._v(" "),t.selectedFiltersNumber>0?e("button",{staticClass:"btn btn-outline-secondary combinations-filters-clear",attrs:{type:"button"},on:{click:t.clearAll}},[e("i",{staticClass:"material-icons"},[t._v("close")]),t._v("\n "+t._s(t.$tc("filters.clear",t.selectedFiltersNumber,{"%filtersNb%":t.selectedFiltersNumber}))+"\n ")]):t._e()],2):t._e()])};r._withStripped=!0;var i=e(80003);const o=i.Z;e(60663);var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/pages/product/components/filters/Filters.vue";const l=a.exports},23681:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>l});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"generate-modal-content"},[e("div",{staticClass:"tags-input d-flex flex-wrap"},[e("div",{staticClass:"tags-wrapper"},[t._l(t.selectedAttributeGroups,(function(n){return t._l(n.attributes,(function(r){return e("span",{key:r.id,staticClass:"tag"},[t._v("\n "+t._s(n.name)+": "+t._s(r.name)+"\n "),e("i",{staticClass:"material-icons",on:{click:function(e){return e.preventDefault(),e.stopPropagation(),t.sendRemoveEvent(r,n)}}},[t._v("close")])])}))}))],2),t._v(" "),e("input",{staticClass:"form-control input attributes-search",attrs:{type:"text",placeholder:t.$t("search.placeholder")}})]),t._v(" "),e("div",{staticClass:"product-combinations-modal-content"},[e("div",{staticClass:"attributes-list-overflow",attrs:{id:"attributes-list-selector"}},[e("div",{staticClass:"attributes-content"},t._l(t.attributeGroups,(function(n){return e("div",{key:n.id,staticClass:"attribute-group"},[e("div",{staticClass:"attribute-group-header"},[e("div",{staticClass:"md-checkbox attribute-group-checkbox"},[e("label",[e("input",{staticClass:"attribute-group-checkbox",attrs:{type:"checkbox",name:"checkbox_"+n.id},domProps:{checked:t.checkboxList.includes(n)},on:{change:function(e){return e.preventDefault(),e.stopPropagation(),t.toggleAll(n)}}}),t._v(" "),e("i",{staticClass:"md-checkbox-control"})])]),t._v(" "),e("a",{staticClass:"attribute-group-name collapsed",attrs:{"data-toggle":"collapse",href:"#attribute-group-"+n.id}},[t._v("\n "+t._s(n.name)+"\n ")])]),t._v(" "),e("div",{staticClass:"attribute-group-content attributes collapse",attrs:{id:"attribute-group-"+n.id}},t._l(n.attributes,(function(r){return e("label",{key:r.id,class:["attribute-item",t.getSelectedClass(r,n)],attrs:{for:"attribute_"+r.id}},[e("input",{attrs:{type:"checkbox",name:"attribute_"+r.id,id:"attribute_"+r.id},on:{change:function(e){return t.sendChangeEvent(r,n)}}}),t._v(" "),e("div",{staticClass:"attribute-item-content"},[r.color?e("span",{staticClass:"attribute-item-color",style:"background-color: "+r.color}):t._e(),t._v(" "),e("span",{staticClass:"attribute-item-name"},[t._v(t._s(r.name))])])])})),0)])})),0)])])])};r._withStripped=!0;var i=e(58530);const o=i.Z;e(92469);var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/pages/product/components/generator/AttributesSelector.vue";const l=a.exports},83510:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>l});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{attrs:{id:"product-combinations-generate"}},[t.isModalShown?e("modal",{attrs:{"modal-title":t.$t("modal.title"),confirmation:!0},on:{close:t.closeModal},scopedSlots:t._u([{key:"body",fn:function(){return[t.attributeGroups?e("attributes-selector",{attrs:{"attribute-groups":t.attributeGroups,"selected-attribute-groups":t.selectedAttributeGroups},on:{changeSelected:t.changeSelected,removeSelected:t.removeSelected,addSelected:t.addSelected,toggleAll:t.toggleAll}}):t._e()]},proxy:!0},{key:"footer-confirmation",fn:function(){return[e("button",{staticClass:"btn btn-outline-secondary",attrs:{type:"button","aria-label":t.$t("modal.close")},on:{click:function(n){return n.preventDefault(),n.stopPropagation(),t.closeModal(n)}}},[t._v("\n "+t._s(t.$t("modal.close"))+"\n ")]),t._v(" "),e("button",{staticClass:"btn btn-primary",attrs:{type:"button",disabled:!t.generatedCombinationsNb||t.loading},on:{click:function(n){return n.preventDefault(),n.stopPropagation(),t.generateCombinations(n)}}},[t.loading?t._e():e("span",[t._v("\n "+t._s(t.$tc("generator.action",t.generatedCombinationsNb,{"%combinationsNb%":t.generatedCombinationsNb}))+"\n ")]),t._v(" "),t.loading?e("span",{staticClass:"spinner-border spinner-border-sm",attrs:{role:"status","aria-hidden":"true"}}):t._e()])]},proxy:!0}],null,!1,3663358199)}):t._e()],1)};r._withStripped=!0;var i=e(60054);const o=i.Z;var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/pages/product/components/generator/CombinationGenerator.vue";const l=a.exports},56995:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>l});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",[e("transition",{attrs:{name:"fade"}},[e("div",{staticClass:"modal show"},[e("div",{staticClass:"modal-dialog modal-dialog-centered",attrs:{role:"document"}},[e("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.close,expression:"close"}],staticClass:"modal-content",attrs:{"aria-labelledby":"modalTitle","aria-describedby":"modalDescription"}},[e("header",{staticClass:"modal-header"},[t._t("header",[e("h5",{staticClass:"modal-title"},[t._v("\n "+t._s(t.modalTitle)+"\n ")]),t._v(" "),e("button",{staticClass:"close",attrs:{type:"button","data-dismiss":"modal","aria-label":"Close"},on:{click:function(n){return n.preventDefault(),n.stopPropagation(),t.close(n)}}},[e("span",{attrs:{"aria-hidden":"true"}},[t._v("×")])])])],2),t._v(" "),e("section",{staticClass:"modal-body"},[t._t("body")],2),t._v(" "),e("footer",{staticClass:"modal-footer"},[t.confirmation?t._e():t._t("footer",[e("button",{staticClass:"btn btn-outline-secondary",attrs:{type:"button","aria-label":"Close modal"},on:{click:function(n){return n.preventDefault(),n.stopPropagation(),t.close(n)}}},[t._v("\n "+t._s(t.closeLabel)+"\n ")])]),t._v(" "),t.confirmation?t._t("footer-confirmation",[e("button",{staticClass:"btn btn-outline-secondary",attrs:{type:"button","aria-label":"Close modal"},on:{click:function(n){return n.preventDefault(),n.stopPropagation(),t.close(n)}}},[t._v("\n "+t._s(t.cancelLabel)+"\n ")]),t._v(" "),e("button",{staticClass:"btn btn-primary",attrs:{type:"button"},on:{click:function(n){return n.preventDefault(),n.stopPropagation(),t.confirm(n)}}},[t._v("\n "+t._s(t.confirmLabel)+"\n ")])]):t._e()],2)])]),t._v(" "),t._t("outside")],2)]),t._v(" "),e("div",{staticClass:"modal-backdrop show",on:{click:function(n){return n.preventDefault(),n.stopPropagation(),t.close(n)}}})],1)};r._withStripped=!0;var i=e(59845);const o=i.Z;e(91312);var a=(0,e(51900).Z)(o,r,[],!1,null,"4f674025",null);a.options.__file="js/vue/components/Modal.vue";const l=a.exports},51063:(t,n,e)=>{"use strict";e.r(n),e.d(n,{__esModule:()=>i.X,default:()=>l});var r=function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"pagination"},[e("ul",{staticClass:"pagination-list"},[e("li",{staticClass:"pagination-item pagination-previous"},[e("button",{attrs:{disabled:1===t.currentPage},on:{click:function(n){return t.goToPage(t.currentPage-1)}}},[e("i",{staticClass:"material-icons"},[t._v("chevron_left")])])]),t._v(" "),t._l(t.paginatedDatas,(function(n,r){return e("li",{key:r,class:["pagination-item",t.isActive(r)]},[e("button",{on:{click:function(n){return t.goToPage(r+1)}}},[t._v("\n "+t._s(r+1)+"\n ")])])})),t._v(" "),e("li",{staticClass:"pagination-item pagination-next"},[e("button",{attrs:{disabled:t.currentPage===t.paginatedDatas.length},on:{click:function(n){return t.goToPage(t.currentPage+1)}}},[e("i",{staticClass:"material-icons"},[t._v("chevron_right")])])])],2)])};r._withStripped=!0;var i=e(93356);const o=i.Z;e(14775);var a=(0,e(51900).Z)(o,r,[],!1,null,null,null);a.options.__file="js/vue/components/Pagination.vue";const l=a.exports},51900:(t,n,e)=>{"use strict";function r(t,n,e,r,i,o,a,l){var s,d="function"==typeof t?t.options:t;if(n&&(d.render=n,d.staticRenderFns=e,d._compiled=!0),r&&(d.functional=!0),o&&(d._scopeId="data-v-"+o),a?(s=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),i&&i.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(a)},d._ssrRegister=s):i&&(s=l?function(){i.call(this,(d.functional?this.parent:this).$root.$options.shadowRoot)}:i),s)if(d.functional){d._injectStyles=s;var u=d.render;d.render=function(t,n){return s.call(n),u(t,n)}}else{var c=d.beforeCreate;d.beforeCreate=c?[].concat(c,s):[s]}return{exports:t,options:d}}e.d(n,{Z:()=>r})},69492:(t,n,e)=>{var r=e(20251);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[t.id,r,""]]),r.locals&&(t.exports=r.locals),(0,e(45346).Z)("2c83d4db",r,!1,{})},33045:(t,n,e)=>{var r=e(77454);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[t.id,r,""]]),r.locals&&(t.exports=r.locals),(0,e(45346).Z)("7e623ca6",r,!1,{})},67445:(t,n,e)=>{var r=e(15279);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[t.id,r,""]]),r.locals&&(t.exports=r.locals),(0,e(45346).Z)("21c115da",r,!1,{})},45207:(t,n,e)=>{var r=e(53909);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[t.id,r,""]]),r.locals&&(t.exports=r.locals),(0,e(45346).Z)("8affd3a6",r,!1,{})},82516:(t,n,e)=>{var r=e(99665);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[t.id,r,""]]),r.locals&&(t.exports=r.locals),(0,e(45346).Z)("ca31b886",r,!1,{})},75471:(t,n,e)=>{var r=e(20350);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[t.id,r,""]]),r.locals&&(t.exports=r.locals),(0,e(45346).Z)("d8448566",r,!1,{})},16002:(t,n,e)=>{var r=e(25436);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[t.id,r,""]]),r.locals&&(t.exports=r.locals),(0,e(45346).Z)("2ff1e2fe",r,!1,{})},60663:(t,n,e)=>{var r=e(45240);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[t.id,r,""]]),r.locals&&(t.exports=r.locals),(0,e(45346).Z)("72dab726",r,!1,{})},92469:(t,n,e)=>{var r=e(14402);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[t.id,r,""]]),r.locals&&(t.exports=r.locals),(0,e(45346).Z)("440a206e",r,!1,{})},91312:(t,n,e)=>{var r=e(85487);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[t.id,r,""]]),r.locals&&(t.exports=r.locals),(0,e(45346).Z)("0bdb9180",r,!1,{})},14775:(t,n,e)=>{var r=e(85679);r.__esModule&&(r=r.default),"string"==typeof r&&(r=[[t.id,r,""]]),r.locals&&(t.exports=r.locals),(0,e(45346).Z)("16eaf7ef",r,!1,{})},45346:(t,n,e)=>{"use strict";function r(t,n){for(var e=[],r={},i=0;i<n.length;i++){var o=n[i],a=o[0],l={id:t+":"+i,css:o[1],media:o[2],sourceMap:o[3]};r[a]?r[a].parts.push(l):e.push(r[a]={id:a,parts:[l]})}return e}e.d(n,{Z:()=>f});var i="undefined"!=typeof document;if("undefined"!=typeof DEBUG&&DEBUG&&!i)throw new Error("vue-style-loader cannot be used in a non-browser environment. Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.");var o={},a=i&&(document.head||document.getElementsByTagName("head")[0]),l=null,s=0,d=!1,u=function(){},c=null,p="data-vue-ssr-id",m="undefined"!=typeof navigator&&/msie [6-9]\b/.test(navigator.userAgent.toLowerCase());function f(t,n,e,i){d=e,c=i||{};var a=r(t,n);return g(a),function(n){for(var e=[],i=0;i<a.length;i++){var l=a[i];(s=o[l.id]).refs--,e.push(s)}for(n?g(a=r(t,n)):a=[],i=0;i<e.length;i++){var s;if(0===(s=e[i]).refs){for(var d=0;d<s.parts.length;d++)s.parts[d]();delete o[s.id]}}}}function g(t){for(var n=0;n<t.length;n++){var e=t[n],r=o[e.id];if(r){r.refs++;for(var i=0;i<r.parts.length;i++)r.parts[i](e.parts[i]);for(;i<e.parts.length;i++)r.parts.push(h(e.parts[i]));r.parts.length>e.parts.length&&(r.parts.length=e.parts.length)}else{var a=[];for(i=0;i<e.parts.length;i++)a.push(h(e.parts[i]));o[e.id]={id:e.id,refs:1,parts:a}}}}function A(){var t=document.createElement("style");return t.type="text/css",a.appendChild(t),t}function h(t){var n,e,r=document.querySelector("style["+p+'~="'+t.id+'"]');if(r){if(d)return u;r.parentNode.removeChild(r)}if(m){var i=s++;r=l||(l=A()),n=$.bind(null,r,i,!1),e=$.bind(null,r,i,!0)}else r=A(),n=v.bind(null,r),e=function(){r.parentNode.removeChild(r)};return n(t),function(r){if(r){if(r.css===t.css&&r.media===t.media&&r.sourceMap===t.sourceMap)return;n(t=r)}else e()}}var C,b=(C=[],function(t,n){return C[t]=n,C.filter(Boolean).join("\n")});function $(t,n,e,r){var i=e?"":r.css;if(t.styleSheet)t.styleSheet.cssText=b(n,i);else{var o=document.createTextNode(i),a=t.childNodes;a[n]&&t.removeChild(a[n]),a.length?t.insertBefore(o,a[n]):t.appendChild(o)}}function v(t,n){var e=n.css,r=n.media,i=n.sourceMap;if(r&&t.setAttribute("media",r),c.ssrId&&t.setAttribute(p,n.id),i&&(e+="\n/*# sourceURL="+i.sources[0]+" */",e+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(i))))+" */"),t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},72100:(t,n,e)=>{t.exports=e(91317)},91317:(t,n,e)=>{"use strict";var r=Object.freeze({});function i(t){return null==t}function o(t){return null!=t}function a(t){return!0===t}function l(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function s(t){return null!==t&&"object"==typeof t}var d=Object.prototype.toString;function u(t){return"[object Object]"===d.call(t)}function c(t){var n=parseFloat(String(t));return n>=0&&Math.floor(n)===n&&isFinite(t)}function p(t){return o(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function m(t){return null==t?"":Array.isArray(t)||u(t)&&t.toString===d?JSON.stringify(t,null,2):String(t)}function f(t){var n=parseFloat(t);return isNaN(n)?t:n}function g(t,n){for(var e=Object.create(null),r=t.split(","),i=0;i<r.length;i++)e[r[i]]=!0;return n?function(t){return e[t.toLowerCase()]}:function(t){return e[t]}}var A=g("slot,component",!0),h=g("key,ref,slot,slot-scope,is");function C(t,n){if(t.length){var e=t.indexOf(n);if(e>-1)return t.splice(e,1)}}var b=Object.prototype.hasOwnProperty;function $(t,n){return b.call(t,n)}function v(t){var n=Object.create(null);return function(e){return n[e]||(n[e]=t(e))}}var x=/-(\w)/g,y=v((function(t){return t.replace(x,(function(t,n){return n?n.toUpperCase():""}))})),w=v((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),B=/\B([A-Z])/g,k=v((function(t){return t.replace(B,"-$1").toLowerCase()})),_=Function.prototype.bind?function(t,n){return t.bind(n)}:function(t,n){function e(e){var r=arguments.length;return r?r>1?t.apply(n,arguments):t.call(n,e):t.call(n)}return e._length=t.length,e};function I(t,n){n=n||0;for(var e=t.length-n,r=new Array(e);e--;)r[e]=t[e+n];return r}function D(t,n){for(var e in n)t[e]=n[e];return t}function S(t){for(var n={},e=0;e<t.length;e++)t[e]&&D(n,t[e]);return n}function z(t,n,e){}var E=function(t,n,e){return!1},G=function(t){return t};function T(t,n){if(t===n)return!0;var e=s(t),r=s(n);if(!e||!r)return!e&&!r&&String(t)===String(n);try{var i=Array.isArray(t),o=Array.isArray(n);if(i&&o)return t.length===n.length&&t.every((function(t,e){return T(t,n[e])}));if(t instanceof Date&&n instanceof Date)return t.getTime()===n.getTime();if(i||o)return!1;var a=Object.keys(t),l=Object.keys(n);return a.length===l.length&&a.every((function(e){return T(t[e],n[e])}))}catch(t){return!1}}function M(t,n){for(var e=0;e<t.length;e++)if(T(t[e],n))return e;return-1}function j(t){var n=!1;return function(){n||(n=!0,t.apply(this,arguments))}}var O="data-server-rendered",F=["component","directive","filter"],L=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch"],P={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:E,isReservedAttr:E,isUnknownElement:E,getTagNamespace:z,parsePlatformTagName:G,mustUseProp:E,async:!0,_lifecycleHooks:L},R=/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;function q(t,n,e,r){Object.defineProperty(t,n,{value:e,enumerable:!!r,writable:!0,configurable:!0})}var N,Y=new RegExp("[^"+R.source+".$_\\d]"),U="__proto__"in{},W="undefined"!=typeof window,H="undefined"!=typeof WXEnvironment&&!!WXEnvironment.platform,Q=H&&WXEnvironment.platform.toLowerCase(),V=W&&window.navigator.userAgent.toLowerCase(),K=V&&/msie|trident/.test(V),X=V&&V.indexOf("msie 9.0")>0,Z=V&&V.indexOf("edge/")>0,J=(V&&V.indexOf("android"),V&&/iphone|ipad|ipod|ios/.test(V)||"ios"===Q),tt=(V&&/chrome\/\d+/.test(V),V&&/phantomjs/.test(V),V&&V.match(/firefox\/(\d+)/)),nt={}.watch,et=!1;if(W)try{var rt={};Object.defineProperty(rt,"passive",{get:function(){et=!0}}),window.addEventListener("test-passive",null,rt)}catch(r){}var it=function(){return void 0===N&&(N=!W&&!H&&void 0!==e.g&&e.g.process&&"server"===e.g.process.env.VUE_ENV),N},ot=W&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function at(t){return"function"==typeof t&&/native code/.test(t.toString())}var lt,st="undefined"!=typeof Symbol&&at(Symbol)&&"undefined"!=typeof Reflect&&at(Reflect.ownKeys);lt="undefined"!=typeof Set&&at(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var dt=z,ut=0,ct=function(){this.id=ut++,this.subs=[]};ct.prototype.addSub=function(t){this.subs.push(t)},ct.prototype.removeSub=function(t){C(this.subs,t)},ct.prototype.depend=function(){ct.target&&ct.target.addDep(this)},ct.prototype.notify=function(){for(var t=this.subs.slice(),n=0,e=t.length;n<e;n++)t[n].update()},ct.target=null;var pt=[];function mt(t){pt.push(t),ct.target=t}function ft(){pt.pop(),ct.target=pt[pt.length-1]}var gt=function(t,n,e,r,i,o,a,l){this.tag=t,this.data=n,this.children=e,this.text=r,this.elm=i,this.ns=void 0,this.context=o,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=n&&n.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=l,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1},At={child:{configurable:!0}};At.child.get=function(){return this.componentInstance},Object.defineProperties(gt.prototype,At);var ht=function(t){void 0===t&&(t="");var n=new gt;return n.text=t,n.isComment=!0,n};function Ct(t){return new gt(void 0,void 0,void 0,String(t))}function bt(t){var n=new gt(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return n.ns=t.ns,n.isStatic=t.isStatic,n.key=t.key,n.isComment=t.isComment,n.fnContext=t.fnContext,n.fnOptions=t.fnOptions,n.fnScopeId=t.fnScopeId,n.asyncMeta=t.asyncMeta,n.isCloned=!0,n}var $t=Array.prototype,vt=Object.create($t);["push","pop","shift","unshift","splice","sort","reverse"].forEach((function(t){var n=$t[t];q(vt,t,(function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];var i,o=n.apply(this,e),a=this.__ob__;switch(t){case"push":case"unshift":i=e;break;case"splice":i=e.slice(2)}return i&&a.observeArray(i),a.dep.notify(),o}))}));var xt=Object.getOwnPropertyNames(vt),yt=!0;function wt(t){yt=t}var Bt=function(t){var n;this.value=t,this.dep=new ct,this.vmCount=0,q(t,"__ob__",this),Array.isArray(t)?(U?(n=vt,t.__proto__=n):function(t,n,e){for(var r=0,i=e.length;r<i;r++){var o=e[r];q(t,o,n[o])}}(t,vt,xt),this.observeArray(t)):this.walk(t)};function kt(t,n){var e;if(s(t)&&!(t instanceof gt))return $(t,"__ob__")&&t.__ob__ instanceof Bt?e=t.__ob__:yt&&!it()&&(Array.isArray(t)||u(t))&&Object.isExtensible(t)&&!t._isVue&&(e=new Bt(t)),n&&e&&e.vmCount++,e}function _t(t,n,e,r,i){var o=new ct,a=Object.getOwnPropertyDescriptor(t,n);if(!a||!1!==a.configurable){var l=a&&a.get,s=a&&a.set;l&&!s||2!==arguments.length||(e=t[n]);var d=!i&&kt(e);Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:function(){var n=l?l.call(t):e;return ct.target&&(o.depend(),d&&(d.dep.depend(),Array.isArray(n)&&function t(n){for(var e=void 0,r=0,i=n.length;r<i;r++)(e=n[r])&&e.__ob__&&e.__ob__.dep.depend(),Array.isArray(e)&&t(e)}(n))),n},set:function(n){var r=l?l.call(t):e;n===r||n!=n&&r!=r||l&&!s||(s?s.call(t,n):e=n,d=!i&&kt(n),o.notify())}})}}function It(t,n,e){if(Array.isArray(t)&&c(n))return t.length=Math.max(t.length,n),t.splice(n,1,e),e;if(n in t&&!(n in Object.prototype))return t[n]=e,e;var r=t.__ob__;return t._isVue||r&&r.vmCount?e:r?(_t(r.value,n,e),r.dep.notify(),e):(t[n]=e,e)}function Dt(t,n){if(Array.isArray(t)&&c(n))t.splice(n,1);else{var e=t.__ob__;t._isVue||e&&e.vmCount||$(t,n)&&(delete t[n],e&&e.dep.notify())}}Bt.prototype.walk=function(t){for(var n=Object.keys(t),e=0;e<n.length;e++)_t(t,n[e])},Bt.prototype.observeArray=function(t){for(var n=0,e=t.length;n<e;n++)kt(t[n])};var St=P.optionMergeStrategies;function zt(t,n){if(!n)return t;for(var e,r,i,o=st?Reflect.ownKeys(n):Object.keys(n),a=0;a<o.length;a++)"__ob__"!==(e=o[a])&&(r=t[e],i=n[e],$(t,e)?r!==i&&u(r)&&u(i)&&zt(r,i):It(t,e,i));return t}function Et(t,n,e){return e?function(){var r="function"==typeof n?n.call(e,e):n,i="function"==typeof t?t.call(e,e):t;return r?zt(r,i):i}:n?t?function(){return zt("function"==typeof n?n.call(this,this):n,"function"==typeof t?t.call(this,this):t)}:n:t}function Gt(t,n){var e=n?t?t.concat(n):Array.isArray(n)?n:[n]:t;return e?function(t){for(var n=[],e=0;e<t.length;e++)-1===n.indexOf(t[e])&&n.push(t[e]);return n}(e):e}function Tt(t,n,e,r){var i=Object.create(t||null);return n?D(i,n):i}St.data=function(t,n,e){return e?Et(t,n,e):n&&"function"!=typeof n?t:Et(t,n)},L.forEach((function(t){St[t]=Gt})),F.forEach((function(t){St[t+"s"]=Tt})),St.watch=function(t,n,e,r){if(t===nt&&(t=void 0),n===nt&&(n=void 0),!n)return Object.create(t||null);if(!t)return n;var i={};for(var o in D(i,t),n){var a=i[o],l=n[o];a&&!Array.isArray(a)&&(a=[a]),i[o]=a?a.concat(l):Array.isArray(l)?l:[l]}return i},St.props=St.methods=St.inject=St.computed=function(t,n,e,r){if(!t)return n;var i=Object.create(null);return D(i,t),n&&D(i,n),i},St.provide=Et;var Mt=function(t,n){return void 0===n?t:n};function jt(t,n,e){if("function"==typeof n&&(n=n.options),function(t,n){var e=t.props;if(e){var r,i,o={};if(Array.isArray(e))for(r=e.length;r--;)"string"==typeof(i=e[r])&&(o[y(i)]={type:null});else if(u(e))for(var a in e)i=e[a],o[y(a)]=u(i)?i:{type:i};t.props=o}}(n),function(t,n){var e=t.inject;if(e){var r=t.inject={};if(Array.isArray(e))for(var i=0;i<e.length;i++)r[e[i]]={from:e[i]};else if(u(e))for(var o in e){var a=e[o];r[o]=u(a)?D({from:o},a):{from:a}}}}(n),function(t){var n=t.directives;if(n)for(var e in n){var r=n[e];"function"==typeof r&&(n[e]={bind:r,update:r})}}(n),!n._base&&(n.extends&&(t=jt(t,n.extends,e)),n.mixins))for(var r=0,i=n.mixins.length;r<i;r++)t=jt(t,n.mixins[r],e);var o,a={};for(o in t)l(o);for(o in n)$(t,o)||l(o);function l(r){var i=St[r]||Mt;a[r]=i(t[r],n[r],e,r)}return a}function Ot(t,n,e,r){if("string"==typeof e){var i=t[n];if($(i,e))return i[e];var o=y(e);if($(i,o))return i[o];var a=w(o);return $(i,a)?i[a]:i[e]||i[o]||i[a]}}function Ft(t,n,e,r){var i=n[t],o=!$(e,t),a=e[t],l=Rt(Boolean,i.type);if(l>-1)if(o&&!$(i,"default"))a=!1;else if(""===a||a===k(t)){var s=Rt(String,i.type);(s<0||l<s)&&(a=!0)}if(void 0===a){a=function(t,n,e){if($(n,"default")){var r=n.default;return t&&t.$options.propsData&&void 0===t.$options.propsData[e]&&void 0!==t._props[e]?t._props[e]:"function"==typeof r&&"Function"!==Lt(n.type)?r.call(t):r}}(r,i,t);var d=yt;wt(!0),kt(a),wt(d)}return a}function Lt(t){var n=t&&t.toString().match(/^\s*function (\w+)/);return n?n[1]:""}function Pt(t,n){return Lt(t)===Lt(n)}function Rt(t,n){if(!Array.isArray(n))return Pt(n,t)?0:-1;for(var e=0,r=n.length;e<r;e++)if(Pt(n[e],t))return e;return-1}function qt(t,n,e){mt();try{if(n)for(var r=n;r=r.$parent;){var i=r.$options.errorCaptured;if(i)for(var o=0;o<i.length;o++)try{if(!1===i[o].call(r,t,n,e))return}catch(t){Yt(t,r,"errorCaptured hook")}}Yt(t,n,e)}finally{ft()}}function Nt(t,n,e,r,i){var o;try{(o=e?t.apply(n,e):t.call(n))&&!o._isVue&&p(o)&&!o._handled&&(o.catch((function(t){return qt(t,r,i+" (Promise/async)")})),o._handled=!0)}catch(t){qt(t,r,i)}return o}function Yt(t,n,e){if(P.errorHandler)try{return P.errorHandler.call(null,t,n,e)}catch(n){n!==t&&Ut(n)}Ut(t)}function Ut(t,n,e){if(!W&&!H||"undefined"==typeof console)throw t;console.error(t)}var Wt,Ht=!1,Qt=[],Vt=!1;function Kt(){Vt=!1;var t=Qt.slice(0);Qt.length=0;for(var n=0;n<t.length;n++)t[n]()}if("undefined"!=typeof Promise&&at(Promise)){var Xt=Promise.resolve();Wt=function(){Xt.then(Kt),J&&setTimeout(z)},Ht=!0}else if(K||"undefined"==typeof MutationObserver||!at(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())Wt="undefined"!=typeof setImmediate&&at(setImmediate)?function(){setImmediate(Kt)}:function(){setTimeout(Kt,0)};else{var Zt=1,Jt=new MutationObserver(Kt),tn=document.createTextNode(String(Zt));Jt.observe(tn,{characterData:!0}),Wt=function(){Zt=(Zt+1)%2,tn.data=String(Zt)},Ht=!0}function nn(t,n){var e;if(Qt.push((function(){if(t)try{t.call(n)}catch(t){qt(t,n,"nextTick")}else e&&e(n)})),Vt||(Vt=!0,Wt()),!t&&"undefined"!=typeof Promise)return new Promise((function(t){e=t}))}var en=new lt;function rn(t){!function t(n,e){var r,i,o=Array.isArray(n);if(!(!o&&!s(n)||Object.isFrozen(n)||n instanceof gt)){if(n.__ob__){var a=n.__ob__.dep.id;if(e.has(a))return;e.add(a)}if(o)for(r=n.length;r--;)t(n[r],e);else for(r=(i=Object.keys(n)).length;r--;)t(n[i[r]],e)}}(t,en),en.clear()}var on=v((function(t){var n="&"===t.charAt(0),e="~"===(t=n?t.slice(1):t).charAt(0),r="!"===(t=e?t.slice(1):t).charAt(0);return{name:t=r?t.slice(1):t,once:e,capture:r,passive:n}}));function an(t,n){function e(){var t=arguments,r=e.fns;if(!Array.isArray(r))return Nt(r,null,arguments,n,"v-on handler");for(var i=r.slice(),o=0;o<i.length;o++)Nt(i[o],null,t,n,"v-on handler")}return e.fns=t,e}function ln(t,n,e,r,o,l){var s,d,u,c;for(s in t)d=t[s],u=n[s],c=on(s),i(d)||(i(u)?(i(d.fns)&&(d=t[s]=an(d,l)),a(c.once)&&(d=t[s]=o(c.name,d,c.capture)),e(c.name,d,c.capture,c.passive,c.params)):d!==u&&(u.fns=d,t[s]=u));for(s in n)i(t[s])&&r((c=on(s)).name,n[s],c.capture)}function sn(t,n,e){var r;t instanceof gt&&(t=t.data.hook||(t.data.hook={}));var l=t[n];function s(){e.apply(this,arguments),C(r.fns,s)}i(l)?r=an([s]):o(l.fns)&&a(l.merged)?(r=l).fns.push(s):r=an([l,s]),r.merged=!0,t[n]=r}function dn(t,n,e,r,i){if(o(n)){if($(n,e))return t[e]=n[e],i||delete n[e],!0;if($(n,r))return t[e]=n[r],i||delete n[r],!0}return!1}function un(t){return l(t)?[Ct(t)]:Array.isArray(t)?function t(n,e){var r,s,d,u,c=[];for(r=0;r<n.length;r++)i(s=n[r])||"boolean"==typeof s||(u=c[d=c.length-1],Array.isArray(s)?s.length>0&&(cn((s=t(s,(e||"")+"_"+r))[0])&&cn(u)&&(c[d]=Ct(u.text+s[0].text),s.shift()),c.push.apply(c,s)):l(s)?cn(u)?c[d]=Ct(u.text+s):""!==s&&c.push(Ct(s)):cn(s)&&cn(u)?c[d]=Ct(u.text+s.text):(a(n._isVList)&&o(s.tag)&&i(s.key)&&o(e)&&(s.key="__vlist"+e+"_"+r+"__"),c.push(s)));return c}(t):void 0}function cn(t){return o(t)&&o(t.text)&&!1===t.isComment}function pn(t,n){if(t){for(var e=Object.create(null),r=st?Reflect.ownKeys(t):Object.keys(t),i=0;i<r.length;i++){var o=r[i];if("__ob__"!==o){for(var a=t[o].from,l=n;l;){if(l._provided&&$(l._provided,a)){e[o]=l._provided[a];break}l=l.$parent}if(!l&&"default"in t[o]){var s=t[o].default;e[o]="function"==typeof s?s.call(n):s}}}return e}}function mn(t,n){if(!t||!t.length)return{};for(var e={},r=0,i=t.length;r<i;r++){var o=t[r],a=o.data;if(a&&a.attrs&&a.attrs.slot&&delete a.attrs.slot,o.context!==n&&o.fnContext!==n||!a||null==a.slot)(e.default||(e.default=[])).push(o);else{var l=a.slot,s=e[l]||(e[l]=[]);"template"===o.tag?s.push.apply(s,o.children||[]):s.push(o)}}for(var d in e)e[d].every(fn)&&delete e[d];return e}function fn(t){return t.isComment&&!t.asyncFactory||" "===t.text}function gn(t,n,e){var i,o=Object.keys(n).length>0,a=t?!!t.$stable:!o,l=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&e&&e!==r&&l===e.$key&&!o&&!e.$hasNormal)return e;for(var s in i={},t)t[s]&&"$"!==s[0]&&(i[s]=An(n,s,t[s]))}else i={};for(var d in n)d in i||(i[d]=hn(n,d));return t&&Object.isExtensible(t)&&(t._normalized=i),q(i,"$stable",a),q(i,"$key",l),q(i,"$hasNormal",o),i}function An(t,n,e){var r=function(){var t=arguments.length?e.apply(null,arguments):e({});return(t=t&&"object"==typeof t&&!Array.isArray(t)?[t]:un(t))&&(0===t.length||1===t.length&&t[0].isComment)?void 0:t};return e.proxy&&Object.defineProperty(t,n,{get:r,enumerable:!0,configurable:!0}),r}function hn(t,n){return function(){return t[n]}}function Cn(t,n){var e,r,i,a,l;if(Array.isArray(t)||"string"==typeof t)for(e=new Array(t.length),r=0,i=t.length;r<i;r++)e[r]=n(t[r],r);else if("number"==typeof t)for(e=new Array(t),r=0;r<t;r++)e[r]=n(r+1,r);else if(s(t))if(st&&t[Symbol.iterator]){e=[];for(var d=t[Symbol.iterator](),u=d.next();!u.done;)e.push(n(u.value,e.length)),u=d.next()}else for(a=Object.keys(t),e=new Array(a.length),r=0,i=a.length;r<i;r++)l=a[r],e[r]=n(t[l],l,r);return o(e)||(e=[]),e._isVList=!0,e}function bn(t,n,e,r){var i,o=this.$scopedSlots[t];o?(e=e||{},r&&(e=D(D({},r),e)),i=o(e)||n):i=this.$slots[t]||n;var a=e&&e.slot;return a?this.$createElement("template",{slot:a},i):i}function $n(t){return Ot(this.$options,"filters",t)||G}function vn(t,n){return Array.isArray(t)?-1===t.indexOf(n):t!==n}function xn(t,n,e,r,i){var o=P.keyCodes[n]||e;return i&&r&&!P.keyCodes[n]?vn(i,r):o?vn(o,t):r?k(r)!==n:void 0}function yn(t,n,e,r,i){if(e&&s(e)){var o;Array.isArray(e)&&(e=S(e));var a=function(a){if("class"===a||"style"===a||h(a))o=t;else{var l=t.attrs&&t.attrs.type;o=r||P.mustUseProp(n,l,a)?t.domProps||(t.domProps={}):t.attrs||(t.attrs={})}var s=y(a),d=k(a);s in o||d in o||(o[a]=e[a],i&&((t.on||(t.on={}))["update:"+a]=function(t){e[a]=t}))};for(var l in e)a(l)}return t}function wn(t,n){var e=this._staticTrees||(this._staticTrees=[]),r=e[t];return r&&!n||kn(r=e[t]=this.$options.staticRenderFns[t].call(this._renderProxy,null,this),"__static__"+t,!1),r}function Bn(t,n,e){return kn(t,"__once__"+n+(e?"_"+e:""),!0),t}function kn(t,n,e){if(Array.isArray(t))for(var r=0;r<t.length;r++)t[r]&&"string"!=typeof t[r]&&_n(t[r],n+"_"+r,e);else _n(t,n,e)}function _n(t,n,e){t.isStatic=!0,t.key=n,t.isOnce=e}function In(t,n){if(n&&u(n)){var e=t.on=t.on?D({},t.on):{};for(var r in n){var i=e[r],o=n[r];e[r]=i?[].concat(i,o):o}}return t}function Dn(t,n,e,r){n=n||{$stable:!e};for(var i=0;i<t.length;i++){var o=t[i];Array.isArray(o)?Dn(o,n,e):o&&(o.proxy&&(o.fn.proxy=!0),n[o.key]=o.fn)}return r&&(n.$key=r),n}function Sn(t,n){for(var e=0;e<n.length;e+=2){var r=n[e];"string"==typeof r&&r&&(t[n[e]]=n[e+1])}return t}function zn(t,n){return"string"==typeof t?n+t:t}function En(t){t._o=Bn,t._n=f,t._s=m,t._l=Cn,t._t=bn,t._q=T,t._i=M,t._m=wn,t._f=$n,t._k=xn,t._b=yn,t._v=Ct,t._e=ht,t._u=Dn,t._g=In,t._d=Sn,t._p=zn}function Gn(t,n,e,i,o){var l,s=this,d=o.options;$(i,"_uid")?(l=Object.create(i))._original=i:(l=i,i=i._original);var u=a(d._compiled),c=!u;this.data=t,this.props=n,this.children=e,this.parent=i,this.listeners=t.on||r,this.injections=pn(d.inject,i),this.slots=function(){return s.$slots||gn(t.scopedSlots,s.$slots=mn(e,i)),s.$slots},Object.defineProperty(this,"scopedSlots",{enumerable:!0,get:function(){return gn(t.scopedSlots,this.slots())}}),u&&(this.$options=d,this.$slots=this.slots(),this.$scopedSlots=gn(t.scopedSlots,this.$slots)),d._scopeId?this._c=function(t,n,e,r){var o=Pn(l,t,n,e,r,c);return o&&!Array.isArray(o)&&(o.fnScopeId=d._scopeId,o.fnContext=i),o}:this._c=function(t,n,e,r){return Pn(l,t,n,e,r,c)}}function Tn(t,n,e,r,i){var o=bt(t);return o.fnContext=e,o.fnOptions=r,n.slot&&((o.data||(o.data={})).slot=n.slot),o}function Mn(t,n){for(var e in n)t[y(e)]=n[e]}En(Gn.prototype);var jn={init:function(t,n){if(t.componentInstance&&!t.componentInstance._isDestroyed&&t.data.keepAlive){var e=t;jn.prepatch(e,e)}else(t.componentInstance=function(t,n){var e={_isComponent:!0,_parentVnode:t,parent:n},r=t.data.inlineTemplate;return o(r)&&(e.render=r.render,e.staticRenderFns=r.staticRenderFns),new t.componentOptions.Ctor(e)}(t,Kn)).$mount(n?t.elm:void 0,n)},prepatch:function(t,n){var e=n.componentOptions;!function(t,n,e,i,o){var a=i.data.scopedSlots,l=t.$scopedSlots,s=!!(a&&!a.$stable||l!==r&&!l.$stable||a&&t.$scopedSlots.$key!==a.$key),d=!!(o||t.$options._renderChildren||s);if(t.$options._parentVnode=i,t.$vnode=i,t._vnode&&(t._vnode.parent=i),t.$options._renderChildren=o,t.$attrs=i.data.attrs||r,t.$listeners=e||r,n&&t.$options.props){wt(!1);for(var u=t._props,c=t.$options._propKeys||[],p=0;p<c.length;p++){var m=c[p],f=t.$options.props;u[m]=Ft(m,f,n,t)}wt(!0),t.$options.propsData=n}e=e||r;var g=t.$options._parentListeners;t.$options._parentListeners=e,Vn(t,e,g),d&&(t.$slots=mn(o,i.context),t.$forceUpdate())}(n.componentInstance=t.componentInstance,e.propsData,e.listeners,n,e.children)},insert:function(t){var n,e=t.context,r=t.componentInstance;r._isMounted||(r._isMounted=!0,te(r,"mounted")),t.data.keepAlive&&(e._isMounted?((n=r)._inactive=!1,ee.push(n)):Jn(r,!0))},destroy:function(t){var n=t.componentInstance;n._isDestroyed||(t.data.keepAlive?function t(n,e){if(!(e&&(n._directInactive=!0,Zn(n))||n._inactive)){n._inactive=!0;for(var r=0;r<n.$children.length;r++)t(n.$children[r]);te(n,"deactivated")}}(n,!0):n.$destroy())}},On=Object.keys(jn);function Fn(t,n,e,l,d){if(!i(t)){var u=e.$options._base;if(s(t)&&(t=u.extend(t)),"function"==typeof t){var c;if(i(t.cid)&&void 0===(t=function(t,n){if(a(t.error)&&o(t.errorComp))return t.errorComp;if(o(t.resolved))return t.resolved;var e=qn;if(e&&o(t.owners)&&-1===t.owners.indexOf(e)&&t.owners.push(e),a(t.loading)&&o(t.loadingComp))return t.loadingComp;if(e&&!o(t.owners)){var r=t.owners=[e],l=!0,d=null,u=null;e.$on("hook:destroyed",(function(){return C(r,e)}));var c=function(t){for(var n=0,e=r.length;n<e;n++)r[n].$forceUpdate();t&&(r.length=0,null!==d&&(clearTimeout(d),d=null),null!==u&&(clearTimeout(u),u=null))},m=j((function(e){t.resolved=Nn(e,n),l?r.length=0:c(!0)})),f=j((function(n){o(t.errorComp)&&(t.error=!0,c(!0))})),g=t(m,f);return s(g)&&(p(g)?i(t.resolved)&&g.then(m,f):p(g.component)&&(g.component.then(m,f),o(g.error)&&(t.errorComp=Nn(g.error,n)),o(g.loading)&&(t.loadingComp=Nn(g.loading,n),0===g.delay?t.loading=!0:d=setTimeout((function(){d=null,i(t.resolved)&&i(t.error)&&(t.loading=!0,c(!1))}),g.delay||200)),o(g.timeout)&&(u=setTimeout((function(){u=null,i(t.resolved)&&f(null)}),g.timeout)))),l=!1,t.loading?t.loadingComp:t.resolved}}(c=t,u)))return function(t,n,e,r,i){var o=ht();return o.asyncFactory=t,o.asyncMeta={data:n,context:e,children:r,tag:i},o}(c,n,e,l,d);n=n||{},ve(t),o(n.model)&&function(t,n){var e=t.model&&t.model.prop||"value",r=t.model&&t.model.event||"input";(n.attrs||(n.attrs={}))[e]=n.model.value;var i=n.on||(n.on={}),a=i[r],l=n.model.callback;o(a)?(Array.isArray(a)?-1===a.indexOf(l):a!==l)&&(i[r]=[l].concat(a)):i[r]=l}(t.options,n);var m=function(t,n,e){var r=n.options.props;if(!i(r)){var a={},l=t.attrs,s=t.props;if(o(l)||o(s))for(var d in r){var u=k(d);dn(a,s,d,u,!0)||dn(a,l,d,u,!1)}return a}}(n,t);if(a(t.options.functional))return function(t,n,e,i,a){var l=t.options,s={},d=l.props;if(o(d))for(var u in d)s[u]=Ft(u,d,n||r);else o(e.attrs)&&Mn(s,e.attrs),o(e.props)&&Mn(s,e.props);var c=new Gn(e,s,a,i,t),p=l.render.call(null,c._c,c);if(p instanceof gt)return Tn(p,e,c.parent,l);if(Array.isArray(p)){for(var m=un(p)||[],f=new Array(m.length),g=0;g<m.length;g++)f[g]=Tn(m[g],e,c.parent,l);return f}}(t,m,n,e,l);var f=n.on;if(n.on=n.nativeOn,a(t.options.abstract)){var g=n.slot;n={},g&&(n.slot=g)}!function(t){for(var n=t.hook||(t.hook={}),e=0;e<On.length;e++){var r=On[e],i=n[r],o=jn[r];i===o||i&&i._merged||(n[r]=i?Ln(o,i):o)}}(n);var A=t.options.name||d;return new gt("vue-component-"+t.cid+(A?"-"+A:""),n,void 0,void 0,void 0,e,{Ctor:t,propsData:m,listeners:f,tag:d,children:l},c)}}}function Ln(t,n){var e=function(e,r){t(e,r),n(e,r)};return e._merged=!0,e}function Pn(t,n,e,r,d,u){return(Array.isArray(e)||l(e))&&(d=r,r=e,e=void 0),a(u)&&(d=2),function(t,n,e,r,l){return o(e)&&o(e.__ob__)?ht():(o(e)&&o(e.is)&&(n=e.is),n?(Array.isArray(r)&&"function"==typeof r[0]&&((e=e||{}).scopedSlots={default:r[0]},r.length=0),2===l?r=un(r):1===l&&(r=function(t){for(var n=0;n<t.length;n++)if(Array.isArray(t[n]))return Array.prototype.concat.apply([],t);return t}(r)),"string"==typeof n?(u=t.$vnode&&t.$vnode.ns||P.getTagNamespace(n),d=P.isReservedTag(n)?new gt(P.parsePlatformTagName(n),e,r,void 0,void 0,t):e&&e.pre||!o(c=Ot(t.$options,"components",n))?new gt(n,e,r,void 0,void 0,t):Fn(c,e,t,r,n)):d=Fn(n,e,t,r),Array.isArray(d)?d:o(d)?(o(u)&&function t(n,e,r){if(n.ns=e,"foreignObject"===n.tag&&(e=void 0,r=!0),o(n.children))for(var l=0,s=n.children.length;l<s;l++){var d=n.children[l];o(d.tag)&&(i(d.ns)||a(r)&&"svg"!==d.tag)&&t(d,e,r)}}(d,u),o(e)&&function(t){s(t.style)&&rn(t.style),s(t.class)&&rn(t.class)}(e),d):ht()):ht());var d,u,c}(t,n,e,r,d)}var Rn,qn=null;function Nn(t,n){return(t.__esModule||st&&"Module"===t[Symbol.toStringTag])&&(t=t.default),s(t)?n.extend(t):t}function Yn(t){return t.isComment&&t.asyncFactory}function Un(t){if(Array.isArray(t))for(var n=0;n<t.length;n++){var e=t[n];if(o(e)&&(o(e.componentOptions)||Yn(e)))return e}}function Wn(t,n){Rn.$on(t,n)}function Hn(t,n){Rn.$off(t,n)}function Qn(t,n){var e=Rn;return function r(){null!==n.apply(null,arguments)&&e.$off(t,r)}}function Vn(t,n,e){Rn=t,ln(n,e||{},Wn,Hn,Qn,t),Rn=void 0}var Kn=null;function Xn(t){var n=Kn;return Kn=t,function(){Kn=n}}function Zn(t){for(;t&&(t=t.$parent);)if(t._inactive)return!0;return!1}function Jn(t,n){if(n){if(t._directInactive=!1,Zn(t))return}else if(t._directInactive)return;if(t._inactive||null===t._inactive){t._inactive=!1;for(var e=0;e<t.$children.length;e++)Jn(t.$children[e]);te(t,"activated")}}function te(t,n){mt();var e=t.$options[n],r=n+" hook";if(e)for(var i=0,o=e.length;i<o;i++)Nt(e[i],t,null,t,r);t._hasHookEvent&&t.$emit("hook:"+n),ft()}var ne=[],ee=[],re={},ie=!1,oe=!1,ae=0,le=0,se=Date.now;if(W&&!K){var de=window.performance;de&&"function"==typeof de.now&&se()>document.createEvent("Event").timeStamp&&(se=function(){return de.now()})}function ue(){var t,n;for(le=se(),oe=!0,ne.sort((function(t,n){return t.id-n.id})),ae=0;ae<ne.length;ae++)(t=ne[ae]).before&&t.before(),n=t.id,re[n]=null,t.run();var e=ee.slice(),r=ne.slice();ae=ne.length=ee.length=0,re={},ie=oe=!1,function(t){for(var n=0;n<t.length;n++)t[n]._inactive=!0,Jn(t[n],!0)}(e),function(t){for(var n=t.length;n--;){var e=t[n],r=e.vm;r._watcher===e&&r._isMounted&&!r._isDestroyed&&te(r,"updated")}}(r),ot&&P.devtools&&ot.emit("flush")}var ce=0,pe=function(t,n,e,r,i){this.vm=t,i&&(t._watcher=this),t._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=e,this.id=++ce,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new lt,this.newDepIds=new lt,this.expression="","function"==typeof n?this.getter=n:(this.getter=function(t){if(!Y.test(t)){var n=t.split(".");return function(t){for(var e=0;e<n.length;e++){if(!t)return;t=t[n[e]]}return t}}}(n),this.getter||(this.getter=z)),this.value=this.lazy?void 0:this.get()};pe.prototype.get=function(){var t;mt(this);var n=this.vm;try{t=this.getter.call(n,n)}catch(t){if(!this.user)throw t;qt(t,n,'getter for watcher "'+this.expression+'"')}finally{this.deep&&rn(t),ft(),this.cleanupDeps()}return t},pe.prototype.addDep=function(t){var n=t.id;this.newDepIds.has(n)||(this.newDepIds.add(n),this.newDeps.push(t),this.depIds.has(n)||t.addSub(this))},pe.prototype.cleanupDeps=function(){for(var t=this.deps.length;t--;){var n=this.deps[t];this.newDepIds.has(n.id)||n.removeSub(this)}var e=this.depIds;this.depIds=this.newDepIds,this.newDepIds=e,this.newDepIds.clear(),e=this.deps,this.deps=this.newDeps,this.newDeps=e,this.newDeps.length=0},pe.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():function(t){var n=t.id;if(null==re[n]){if(re[n]=!0,oe){for(var e=ne.length-1;e>ae&&ne[e].id>t.id;)e--;ne.splice(e+1,0,t)}else ne.push(t);ie||(ie=!0,nn(ue))}}(this)},pe.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||s(t)||this.deep){var n=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,n)}catch(t){qt(t,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,t,n)}}},pe.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},pe.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},pe.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||C(this.vm._watchers,this);for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1}};var me={enumerable:!0,configurable:!0,get:z,set:z};function fe(t,n,e){me.get=function(){return this[n][e]},me.set=function(t){this[n][e]=t},Object.defineProperty(t,e,me)}var ge={lazy:!0};function Ae(t,n,e){var r=!it();"function"==typeof e?(me.get=r?he(n):Ce(e),me.set=z):(me.get=e.get?r&&!1!==e.cache?he(n):Ce(e.get):z,me.set=e.set||z),Object.defineProperty(t,n,me)}function he(t){return function(){var n=this._computedWatchers&&this._computedWatchers[t];if(n)return n.dirty&&n.evaluate(),ct.target&&n.depend(),n.value}}function Ce(t){return function(){return t.call(this,this)}}function be(t,n,e,r){return u(e)&&(r=e,e=e.handler),"string"==typeof e&&(e=t[e]),t.$watch(n,e,r)}var $e=0;function ve(t){var n=t.options;if(t.super){var e=ve(t.super);if(e!==t.superOptions){t.superOptions=e;var r=function(t){var n,e=t.options,r=t.sealedOptions;for(var i in e)e[i]!==r[i]&&(n||(n={}),n[i]=e[i]);return n}(t);r&&D(t.extendOptions,r),(n=t.options=jt(e,t.extendOptions)).name&&(n.components[n.name]=t)}}return n}function xe(t){this._init(t)}function ye(t){return t&&(t.Ctor.options.name||t.tag)}function we(t,n){return Array.isArray(t)?t.indexOf(n)>-1:"string"==typeof t?t.split(",").indexOf(n)>-1:(e=t,"[object RegExp]"===d.call(e)&&t.test(n));var e}function Be(t,n){var e=t.cache,r=t.keys,i=t._vnode;for(var o in e){var a=e[o];if(a){var l=ye(a.componentOptions);l&&!n(l)&&ke(e,o,r,i)}}}function ke(t,n,e,r){var i=t[n];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),t[n]=null,C(e,n)}!function(t){t.prototype._init=function(t){var n=this;n._uid=$e++,n._isVue=!0,t&&t._isComponent?function(t,n){var e=t.$options=Object.create(t.constructor.options),r=n._parentVnode;e.parent=n.parent,e._parentVnode=r;var i=r.componentOptions;e.propsData=i.propsData,e._parentListeners=i.listeners,e._renderChildren=i.children,e._componentTag=i.tag,n.render&&(e.render=n.render,e.staticRenderFns=n.staticRenderFns)}(n,t):n.$options=jt(ve(n.constructor),t||{},n),n._renderProxy=n,n._self=n,function(t){var n=t.$options,e=n.parent;if(e&&!n.abstract){for(;e.$options.abstract&&e.$parent;)e=e.$parent;e.$children.push(t)}t.$parent=e,t.$root=e?e.$root:t,t.$children=[],t.$refs={},t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(n),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var n=t.$options._parentListeners;n&&Vn(t,n)}(n),function(t){t._vnode=null,t._staticTrees=null;var n=t.$options,e=t.$vnode=n._parentVnode,i=e&&e.context;t.$slots=mn(n._renderChildren,i),t.$scopedSlots=r,t._c=function(n,e,r,i){return Pn(t,n,e,r,i,!1)},t.$createElement=function(n,e,r,i){return Pn(t,n,e,r,i,!0)};var o=e&&e.data;_t(t,"$attrs",o&&o.attrs||r,null,!0),_t(t,"$listeners",n._parentListeners||r,null,!0)}(n),te(n,"beforeCreate"),function(t){var n=pn(t.$options.inject,t);n&&(wt(!1),Object.keys(n).forEach((function(e){_t(t,e,n[e])})),wt(!0))}(n),function(t){t._watchers=[];var n=t.$options;n.props&&function(t,n){var e=t.$options.propsData||{},r=t._props={},i=t.$options._propKeys=[];t.$parent&&wt(!1);var o=function(o){i.push(o);var a=Ft(o,n,e,t);_t(r,o,a),o in t||fe(t,"_props",o)};for(var a in n)o(a);wt(!0)}(t,n.props),n.methods&&function(t,n){for(var e in t.$options.props,n)t[e]="function"!=typeof n[e]?z:_(n[e],t)}(t,n.methods),n.data?function(t){var n=t.$options.data;u(n=t._data="function"==typeof n?function(t,n){mt();try{return t.call(n,n)}catch(t){return qt(t,n,"data()"),{}}finally{ft()}}(n,t):n||{})||(n={});for(var e,r=Object.keys(n),i=t.$options.props,o=(t.$options.methods,r.length);o--;){var a=r[o];i&&$(i,a)||36!==(e=(a+"").charCodeAt(0))&&95!==e&&fe(t,"_data",a)}kt(n,!0)}(t):kt(t._data={},!0),n.computed&&function(t,n){var e=t._computedWatchers=Object.create(null),r=it();for(var i in n){var o=n[i],a="function"==typeof o?o:o.get;r||(e[i]=new pe(t,a||z,z,ge)),i in t||Ae(t,i,o)}}(t,n.computed),n.watch&&n.watch!==nt&&function(t,n){for(var e in n){var r=n[e];if(Array.isArray(r))for(var i=0;i<r.length;i++)be(t,e,r[i]);else be(t,e,r)}}(t,n.watch)}(n),function(t){var n=t.$options.provide;n&&(t._provided="function"==typeof n?n.call(t):n)}(n),te(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(xe),function(t){Object.defineProperty(t.prototype,"$data",{get:function(){return this._data}}),Object.defineProperty(t.prototype,"$props",{get:function(){return this._props}}),t.prototype.$set=It,t.prototype.$delete=Dt,t.prototype.$watch=function(t,n,e){if(u(n))return be(this,t,n,e);(e=e||{}).user=!0;var r=new pe(this,t,n,e);if(e.immediate)try{n.call(this,r.value)}catch(t){qt(t,this,'callback for immediate watcher "'+r.expression+'"')}return function(){r.teardown()}}}(xe),function(t){var n=/^hook:/;t.prototype.$on=function(t,e){var r=this;if(Array.isArray(t))for(var i=0,o=t.length;i<o;i++)r.$on(t[i],e);else(r._events[t]||(r._events[t]=[])).push(e),n.test(t)&&(r._hasHookEvent=!0);return r},t.prototype.$once=function(t,n){var e=this;function r(){e.$off(t,r),n.apply(e,arguments)}return r.fn=n,e.$on(t,r),e},t.prototype.$off=function(t,n){var e=this;if(!arguments.length)return e._events=Object.create(null),e;if(Array.isArray(t)){for(var r=0,i=t.length;r<i;r++)e.$off(t[r],n);return e}var o,a=e._events[t];if(!a)return e;if(!n)return e._events[t]=null,e;for(var l=a.length;l--;)if((o=a[l])===n||o.fn===n){a.splice(l,1);break}return e},t.prototype.$emit=function(t){var n=this._events[t];if(n){n=n.length>1?I(n):n;for(var e=I(arguments,1),r='event handler for "'+t+'"',i=0,o=n.length;i<o;i++)Nt(n[i],this,e,this,r)}return this}}(xe),function(t){t.prototype._update=function(t,n){var e=this,r=e.$el,i=e._vnode,o=Xn(e);e._vnode=t,e.$el=i?e.__patch__(i,t):e.__patch__(e.$el,t,n,!1),o(),r&&(r.__vue__=null),e.$el&&(e.$el.__vue__=e),e.$vnode&&e.$parent&&e.$vnode===e.$parent._vnode&&(e.$parent.$el=e.$el)},t.prototype.$forceUpdate=function(){this._watcher&&this._watcher.update()},t.prototype.$destroy=function(){var t=this;if(!t._isBeingDestroyed){te(t,"beforeDestroy"),t._isBeingDestroyed=!0;var n=t.$parent;!n||n._isBeingDestroyed||t.$options.abstract||C(n.$children,t),t._watcher&&t._watcher.teardown();for(var e=t._watchers.length;e--;)t._watchers[e].teardown();t._data.__ob__&&t._data.__ob__.vmCount--,t._isDestroyed=!0,t.__patch__(t._vnode,null),te(t,"destroyed"),t.$off(),t.$el&&(t.$el.__vue__=null),t.$vnode&&(t.$vnode.parent=null)}}}(xe),function(t){En(t.prototype),t.prototype.$nextTick=function(t){return nn(t,this)},t.prototype._render=function(){var t,n=this,e=n.$options,r=e.render,i=e._parentVnode;i&&(n.$scopedSlots=gn(i.data.scopedSlots,n.$slots,n.$scopedSlots)),n.$vnode=i;try{qn=n,t=r.call(n._renderProxy,n.$createElement)}catch(e){qt(e,n,"render"),t=n._vnode}finally{qn=null}return Array.isArray(t)&&1===t.length&&(t=t[0]),t instanceof gt||(t=ht()),t.parent=i,t}}(xe);var _e=[String,RegExp,Array],Ie={KeepAlive:{name:"keep-alive",abstract:!0,props:{include:_e,exclude:_e,max:[String,Number]},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)ke(this.cache,t,this.keys)},mounted:function(){var t=this;this.$watch("include",(function(n){Be(t,(function(t){return we(n,t)}))})),this.$watch("exclude",(function(n){Be(t,(function(t){return!we(n,t)}))}))},render:function(){var t=this.$slots.default,n=Un(t),e=n&&n.componentOptions;if(e){var r=ye(e),i=this.include,o=this.exclude;if(i&&(!r||!we(i,r))||o&&r&&we(o,r))return n;var a=this.cache,l=this.keys,s=null==n.key?e.Ctor.cid+(e.tag?"::"+e.tag:""):n.key;a[s]?(n.componentInstance=a[s].componentInstance,C(l,s),l.push(s)):(a[s]=n,l.push(s),this.max&&l.length>parseInt(this.max)&&ke(a,l[0],l,this._vnode)),n.data.keepAlive=!0}return n||t&&t[0]}}};!function(t){var n={get:function(){return P}};Object.defineProperty(t,"config",n),t.util={warn:dt,extend:D,mergeOptions:jt,defineReactive:_t},t.set=It,t.delete=Dt,t.nextTick=nn,t.observable=function(t){return kt(t),t},t.options=Object.create(null),F.forEach((function(n){t.options[n+"s"]=Object.create(null)})),t.options._base=t,D(t.options.components,Ie),function(t){t.use=function(t){var n=this._installedPlugins||(this._installedPlugins=[]);if(n.indexOf(t)>-1)return this;var e=I(arguments,1);return e.unshift(this),"function"==typeof t.install?t.install.apply(t,e):"function"==typeof t&&t.apply(null,e),n.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=jt(this.options,t),this}}(t),function(t){t.cid=0;var n=1;t.extend=function(t){t=t||{};var e=this,r=e.cid,i=t._Ctor||(t._Ctor={});if(i[r])return i[r];var o=t.name||e.options.name,a=function(t){this._init(t)};return(a.prototype=Object.create(e.prototype)).constructor=a,a.cid=n++,a.options=jt(e.options,t),a.super=e,a.options.props&&function(t){var n=t.options.props;for(var e in n)fe(t.prototype,"_props",e)}(a),a.options.computed&&function(t){var n=t.options.computed;for(var e in n)Ae(t.prototype,e,n[e])}(a),a.extend=e.extend,a.mixin=e.mixin,a.use=e.use,F.forEach((function(t){a[t]=e[t]})),o&&(a.options.components[o]=a),a.superOptions=e.options,a.extendOptions=t,a.sealedOptions=D({},a.options),i[r]=a,a}}(t),function(t){F.forEach((function(n){t[n]=function(t,e){return e?("component"===n&&u(e)&&(e.name=e.name||t,e=this.options._base.extend(e)),"directive"===n&&"function"==typeof e&&(e={bind:e,update:e}),this.options[n+"s"][t]=e,e):this.options[n+"s"][t]}}))}(t)}(xe),Object.defineProperty(xe.prototype,"$isServer",{get:it}),Object.defineProperty(xe.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(xe,"FunctionalRenderContext",{value:Gn}),xe.version="2.6.12";var De=g("style,class"),Se=g("input,textarea,option,select,progress"),ze=function(t,n,e){return"value"===e&&Se(t)&&"button"!==n||"selected"===e&&"option"===t||"checked"===e&&"input"===t||"muted"===e&&"video"===t},Ee=g("contenteditable,draggable,spellcheck"),Ge=g("events,caret,typing,plaintext-only"),Te=g("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Me="http://www.w3.org/1999/xlink",je=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},Oe=function(t){return je(t)?t.slice(6,t.length):""},Fe=function(t){return null==t||!1===t};function Le(t,n){return{staticClass:Pe(t.staticClass,n.staticClass),class:o(t.class)?[t.class,n.class]:n.class}}function Pe(t,n){return t?n?t+" "+n:t:n||""}function Re(t){return Array.isArray(t)?function(t){for(var n,e="",r=0,i=t.length;r<i;r++)o(n=Re(t[r]))&&""!==n&&(e&&(e+=" "),e+=n);return e}(t):s(t)?function(t){var n="";for(var e in t)t[e]&&(n&&(n+=" "),n+=e);return n}(t):"string"==typeof t?t:""}var qe={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},Ne=g("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),Ye=g("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),Ue=function(t){return Ne(t)||Ye(t)};function We(t){return Ye(t)?"svg":"math"===t?"math":void 0}var He=Object.create(null),Qe=g("text,number,password,search,email,tel,url");function Ve(t){return"string"==typeof t?document.querySelector(t)||document.createElement("div"):t}var Ke=Object.freeze({createElement:function(t,n){var e=document.createElement(t);return"select"!==t||n.data&&n.data.attrs&&void 0!==n.data.attrs.multiple&&e.setAttribute("multiple","multiple"),e},createElementNS:function(t,n){return document.createElementNS(qe[t],n)},createTextNode:function(t){return document.createTextNode(t)},createComment:function(t){return document.createComment(t)},insertBefore:function(t,n,e){t.insertBefore(n,e)},removeChild:function(t,n){t.removeChild(n)},appendChild:function(t,n){t.appendChild(n)},parentNode:function(t){return t.parentNode},nextSibling:function(t){return t.nextSibling},tagName:function(t){return t.tagName},setTextContent:function(t,n){t.textContent=n},setStyleScope:function(t,n){t.setAttribute(n,"")}}),Xe={create:function(t,n){Ze(n)},update:function(t,n){t.data.ref!==n.data.ref&&(Ze(t,!0),Ze(n))},destroy:function(t){Ze(t,!0)}};function Ze(t,n){var e=t.data.ref;if(o(e)){var r=t.context,i=t.componentInstance||t.elm,a=r.$refs;n?Array.isArray(a[e])?C(a[e],i):a[e]===i&&(a[e]=void 0):t.data.refInFor?Array.isArray(a[e])?a[e].indexOf(i)<0&&a[e].push(i):a[e]=[i]:a[e]=i}}var Je=new gt("",{},[]),tr=["create","activate","update","remove","destroy"];function nr(t,n){return t.key===n.key&&(t.tag===n.tag&&t.isComment===n.isComment&&o(t.data)===o(n.data)&&function(t,n){if("input"!==t.tag)return!0;var e,r=o(e=t.data)&&o(e=e.attrs)&&e.type,i=o(e=n.data)&&o(e=e.attrs)&&e.type;return r===i||Qe(r)&&Qe(i)}(t,n)||a(t.isAsyncPlaceholder)&&t.asyncFactory===n.asyncFactory&&i(n.asyncFactory.error))}function er(t,n,e){var r,i,a={};for(r=n;r<=e;++r)o(i=t[r].key)&&(a[i]=r);return a}var rr={create:ir,update:ir,destroy:function(t){ir(t,Je)}};function ir(t,n){(t.data.directives||n.data.directives)&&function(t,n){var e,r,i,o=t===Je,a=n===Je,l=ar(t.data.directives,t.context),s=ar(n.data.directives,n.context),d=[],u=[];for(e in s)r=l[e],i=s[e],r?(i.oldValue=r.value,i.oldArg=r.arg,sr(i,"update",n,t),i.def&&i.def.componentUpdated&&u.push(i)):(sr(i,"bind",n,t),i.def&&i.def.inserted&&d.push(i));if(d.length){var c=function(){for(var e=0;e<d.length;e++)sr(d[e],"inserted",n,t)};o?sn(n,"insert",c):c()}if(u.length&&sn(n,"postpatch",(function(){for(var e=0;e<u.length;e++)sr(u[e],"componentUpdated",n,t)})),!o)for(e in l)s[e]||sr(l[e],"unbind",t,t,a)}(t,n)}var or=Object.create(null);function ar(t,n){var e,r,i=Object.create(null);if(!t)return i;for(e=0;e<t.length;e++)(r=t[e]).modifiers||(r.modifiers=or),i[lr(r)]=r,r.def=Ot(n.$options,"directives",r.name);return i}function lr(t){return t.rawName||t.name+"."+Object.keys(t.modifiers||{}).join(".")}function sr(t,n,e,r,i){var o=t.def&&t.def[n];if(o)try{o(e.elm,t,e,r,i)}catch(r){qt(r,e.context,"directive "+t.name+" "+n+" hook")}}var dr=[Xe,rr];function ur(t,n){var e=n.componentOptions;if(!(o(e)&&!1===e.Ctor.options.inheritAttrs||i(t.data.attrs)&&i(n.data.attrs))){var r,a,l=n.elm,s=t.data.attrs||{},d=n.data.attrs||{};for(r in o(d.__ob__)&&(d=n.data.attrs=D({},d)),d)a=d[r],s[r]!==a&&cr(l,r,a);for(r in(K||Z)&&d.value!==s.value&&cr(l,"value",d.value),s)i(d[r])&&(je(r)?l.removeAttributeNS(Me,Oe(r)):Ee(r)||l.removeAttribute(r))}}function cr(t,n,e){t.tagName.indexOf("-")>-1?pr(t,n,e):Te(n)?Fe(e)?t.removeAttribute(n):(e="allowfullscreen"===n&&"EMBED"===t.tagName?"true":n,t.setAttribute(n,e)):Ee(n)?t.setAttribute(n,function(t,n){return Fe(n)||"false"===n?"false":"contenteditable"===t&&Ge(n)?n:"true"}(n,e)):je(n)?Fe(e)?t.removeAttributeNS(Me,Oe(n)):t.setAttributeNS(Me,n,e):pr(t,n,e)}function pr(t,n,e){if(Fe(e))t.removeAttribute(n);else{if(K&&!X&&"TEXTAREA"===t.tagName&&"placeholder"===n&&""!==e&&!t.__ieph){var r=function(n){n.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(n,e)}}var mr={create:ur,update:ur};function fr(t,n){var e=n.elm,r=n.data,a=t.data;if(!(i(r.staticClass)&&i(r.class)&&(i(a)||i(a.staticClass)&&i(a.class)))){var l=function(t){for(var n=t.data,e=t,r=t;o(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(n=Le(r.data,n));for(;o(e=e.parent);)e&&e.data&&(n=Le(n,e.data));return function(t,n){return o(t)||o(n)?Pe(t,Re(n)):""}(n.staticClass,n.class)}(n),s=e._transitionClasses;o(s)&&(l=Pe(l,Re(s))),l!==e._prevClass&&(e.setAttribute("class",l),e._prevClass=l)}}var gr,Ar,hr,Cr,br,$r,vr={create:fr,update:fr},xr=/[\w).+\-_$\]]/;function yr(t){var n,e,r,i,o,a=!1,l=!1,s=!1,d=!1,u=0,c=0,p=0,m=0;for(r=0;r<t.length;r++)if(e=n,n=t.charCodeAt(r),a)39===n&&92!==e&&(a=!1);else if(l)34===n&&92!==e&&(l=!1);else if(s)96===n&&92!==e&&(s=!1);else if(d)47===n&&92!==e&&(d=!1);else if(124!==n||124===t.charCodeAt(r+1)||124===t.charCodeAt(r-1)||u||c||p){switch(n){case 34:l=!0;break;case 39:a=!0;break;case 96:s=!0;break;case 40:p++;break;case 41:p--;break;case 91:c++;break;case 93:c--;break;case 123:u++;break;case 125:u--}if(47===n){for(var f=r-1,g=void 0;f>=0&&" "===(g=t.charAt(f));f--);g&&xr.test(g)||(d=!0)}}else void 0===i?(m=r+1,i=t.slice(0,r).trim()):A();function A(){(o||(o=[])).push(t.slice(m,r).trim()),m=r+1}if(void 0===i?i=t.slice(0,r).trim():0!==m&&A(),o)for(r=0;r<o.length;r++)i=wr(i,o[r]);return i}function wr(t,n){var e=n.indexOf("(");if(e<0)return'_f("'+n+'")('+t+")";var r=n.slice(0,e),i=n.slice(e+1);return'_f("'+r+'")('+t+(")"!==i?","+i:i)}function Br(t,n){console.error("[Vue compiler]: "+t)}function kr(t,n){return t?t.map((function(t){return t[n]})).filter((function(t){return t})):[]}function _r(t,n,e,r,i){(t.props||(t.props=[])).push(jr({name:n,value:e,dynamic:i},r)),t.plain=!1}function Ir(t,n,e,r,i){(i?t.dynamicAttrs||(t.dynamicAttrs=[]):t.attrs||(t.attrs=[])).push(jr({name:n,value:e,dynamic:i},r)),t.plain=!1}function Dr(t,n,e,r){t.attrsMap[n]=e,t.attrsList.push(jr({name:n,value:e},r))}function Sr(t,n,e,r,i,o,a,l){(t.directives||(t.directives=[])).push(jr({name:n,rawName:e,value:r,arg:i,isDynamicArg:o,modifiers:a},l)),t.plain=!1}function zr(t,n,e){return e?"_p("+n+',"'+t+'")':t+n}function Er(t,n,e,i,o,a,l,s){var d;(i=i||r).right?s?n="("+n+")==='click'?'contextmenu':("+n+")":"click"===n&&(n="contextmenu",delete i.right):i.middle&&(s?n="("+n+")==='click'?'mouseup':("+n+")":"click"===n&&(n="mouseup")),i.capture&&(delete i.capture,n=zr("!",n,s)),i.once&&(delete i.once,n=zr("~",n,s)),i.passive&&(delete i.passive,n=zr("&",n,s)),i.native?(delete i.native,d=t.nativeEvents||(t.nativeEvents={})):d=t.events||(t.events={});var u=jr({value:e.trim(),dynamic:s},l);i!==r&&(u.modifiers=i);var c=d[n];Array.isArray(c)?o?c.unshift(u):c.push(u):d[n]=c?o?[u,c]:[c,u]:u,t.plain=!1}function Gr(t,n,e){var r=Tr(t,":"+n)||Tr(t,"v-bind:"+n);if(null!=r)return yr(r);if(!1!==e){var i=Tr(t,n);if(null!=i)return JSON.stringify(i)}}function Tr(t,n,e){var r;if(null!=(r=t.attrsMap[n]))for(var i=t.attrsList,o=0,a=i.length;o<a;o++)if(i[o].name===n){i.splice(o,1);break}return e&&delete t.attrsMap[n],r}function Mr(t,n){for(var e=t.attrsList,r=0,i=e.length;r<i;r++){var o=e[r];if(n.test(o.name))return e.splice(r,1),o}}function jr(t,n){return n&&(null!=n.start&&(t.start=n.start),null!=n.end&&(t.end=n.end)),t}function Or(t,n,e){var r=e||{},i=r.number,o="$$v";r.trim&&(o="(typeof $$v === 'string'? $$v.trim(): $$v)"),i&&(o="_n("+o+")");var a=Fr(n,o);t.model={value:"("+n+")",expression:JSON.stringify(n),callback:"function ($$v) {"+a+"}"}}function Fr(t,n){var e=function(t){if(t=t.trim(),gr=t.length,t.indexOf("[")<0||t.lastIndexOf("]")<gr-1)return(Cr=t.lastIndexOf("."))>-1?{exp:t.slice(0,Cr),key:'"'+t.slice(Cr+1)+'"'}:{exp:t,key:null};for(Ar=t,Cr=br=$r=0;!Pr();)Rr(hr=Lr())?Nr(hr):91===hr&&qr(hr);return{exp:t.slice(0,br),key:t.slice(br+1,$r)}}(t);return null===e.key?t+"="+n:"$set("+e.exp+", "+e.key+", "+n+")"}function Lr(){return Ar.charCodeAt(++Cr)}function Pr(){return Cr>=gr}function Rr(t){return 34===t||39===t}function qr(t){var n=1;for(br=Cr;!Pr();)if(Rr(t=Lr()))Nr(t);else if(91===t&&n++,93===t&&n--,0===n){$r=Cr;break}}function Nr(t){for(var n=t;!Pr()&&(t=Lr())!==n;);}var Yr;function Ur(t,n,e){var r=Yr;return function i(){null!==n.apply(null,arguments)&&Qr(t,i,e,r)}}var Wr=Ht&&!(tt&&Number(tt[1])<=53);function Hr(t,n,e,r){if(Wr){var i=le,o=n;n=o._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=i||t.timeStamp<=0||t.target.ownerDocument!==document)return o.apply(this,arguments)}}Yr.addEventListener(t,n,et?{capture:e,passive:r}:e)}function Qr(t,n,e,r){(r||Yr).removeEventListener(t,n._wrapper||n,e)}function Vr(t,n){if(!i(t.data.on)||!i(n.data.on)){var e=n.data.on||{},r=t.data.on||{};Yr=n.elm,function(t){if(o(t.__r)){var n=K?"change":"input";t[n]=[].concat(t.__r,t[n]||[]),delete t.__r}o(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(e),ln(e,r,Hr,Qr,Ur,n.context),Yr=void 0}}var Kr,Xr={create:Vr,update:Vr};function Zr(t,n){if(!i(t.data.domProps)||!i(n.data.domProps)){var e,r,a=n.elm,l=t.data.domProps||{},s=n.data.domProps||{};for(e in o(s.__ob__)&&(s=n.data.domProps=D({},s)),l)e in s||(a[e]="");for(e in s){if(r=s[e],"textContent"===e||"innerHTML"===e){if(n.children&&(n.children.length=0),r===l[e])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===e&&"PROGRESS"!==a.tagName){a._value=r;var d=i(r)?"":String(r);Jr(a,d)&&(a.value=d)}else if("innerHTML"===e&&Ye(a.tagName)&&i(a.innerHTML)){(Kr=Kr||document.createElement("div")).innerHTML="<svg>"+r+"</svg>";for(var u=Kr.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;u.firstChild;)a.appendChild(u.firstChild)}else if(r!==l[e])try{a[e]=r}catch(t){}}}}function Jr(t,n){return!t.composing&&("OPTION"===t.tagName||function(t,n){var e=!0;try{e=document.activeElement!==t}catch(t){}return e&&t.value!==n}(t,n)||function(t,n){var e=t.value,r=t._vModifiers;if(o(r)){if(r.number)return f(e)!==f(n);if(r.trim)return e.trim()!==n.trim()}return e!==n}(t,n))}var ti={create:Zr,update:Zr},ni=v((function(t){var n={},e=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(e);r.length>1&&(n[r[0].trim()]=r[1].trim())}})),n}));function ei(t){var n=ri(t.style);return t.staticStyle?D(t.staticStyle,n):n}function ri(t){return Array.isArray(t)?S(t):"string"==typeof t?ni(t):t}var ii,oi=/^--/,ai=/\s*!important$/,li=function(t,n,e){if(oi.test(n))t.style.setProperty(n,e);else if(ai.test(e))t.style.setProperty(k(n),e.replace(ai,""),"important");else{var r=di(n);if(Array.isArray(e))for(var i=0,o=e.length;i<o;i++)t.style[r]=e[i];else t.style[r]=e}},si=["Webkit","Moz","ms"],di=v((function(t){if(ii=ii||document.createElement("div").style,"filter"!==(t=y(t))&&t in ii)return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),e=0;e<si.length;e++){var r=si[e]+n;if(r in ii)return r}}));function ui(t,n){var e=n.data,r=t.data;if(!(i(e.staticStyle)&&i(e.style)&&i(r.staticStyle)&&i(r.style))){var a,l,s=n.elm,d=r.staticStyle,u=r.normalizedStyle||r.style||{},c=d||u,p=ri(n.data.style)||{};n.data.normalizedStyle=o(p.__ob__)?D({},p):p;var m=function(t,n){for(var e,r={},i=t;i.componentInstance;)(i=i.componentInstance._vnode)&&i.data&&(e=ei(i.data))&&D(r,e);(e=ei(t.data))&&D(r,e);for(var o=t;o=o.parent;)o.data&&(e=ei(o.data))&&D(r,e);return r}(n);for(l in c)i(m[l])&&li(s,l,"");for(l in m)(a=m[l])!==c[l]&&li(s,l,null==a?"":a)}}var ci={create:ui,update:ui},pi=/\s+/;function mi(t,n){if(n&&(n=n.trim()))if(t.classList)n.indexOf(" ")>-1?n.split(pi).forEach((function(n){return t.classList.add(n)})):t.classList.add(n);else{var e=" "+(t.getAttribute("class")||"")+" ";e.indexOf(" "+n+" ")<0&&t.setAttribute("class",(e+n).trim())}}function fi(t,n){if(n&&(n=n.trim()))if(t.classList)n.indexOf(" ")>-1?n.split(pi).forEach((function(n){return t.classList.remove(n)})):t.classList.remove(n),t.classList.length||t.removeAttribute("class");else{for(var e=" "+(t.getAttribute("class")||"")+" ",r=" "+n+" ";e.indexOf(r)>=0;)e=e.replace(r," ");(e=e.trim())?t.setAttribute("class",e):t.removeAttribute("class")}}function gi(t){if(t){if("object"==typeof t){var n={};return!1!==t.css&&D(n,Ai(t.name||"v")),D(n,t),n}return"string"==typeof t?Ai(t):void 0}}var Ai=v((function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}})),hi=W&&!X,Ci="transition",bi="animation",$i="transition",vi="transitionend",xi="animation",yi="animationend";hi&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&($i="WebkitTransition",vi="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(xi="WebkitAnimation",yi="webkitAnimationEnd"));var wi=W?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function Bi(t){wi((function(){wi(t)}))}function ki(t,n){var e=t._transitionClasses||(t._transitionClasses=[]);e.indexOf(n)<0&&(e.push(n),mi(t,n))}function _i(t,n){t._transitionClasses&&C(t._transitionClasses,n),fi(t,n)}function Ii(t,n,e){var r=Si(t,n),i=r.type,o=r.timeout,a=r.propCount;if(!i)return e();var l=i===Ci?vi:yi,s=0,d=function(){t.removeEventListener(l,u),e()},u=function(n){n.target===t&&++s>=a&&d()};setTimeout((function(){s<a&&d()}),o+1),t.addEventListener(l,u)}var Di=/\b(transform|all)(,|$)/;function Si(t,n){var e,r=window.getComputedStyle(t),i=(r[$i+"Delay"]||"").split(", "),o=(r[$i+"Duration"]||"").split(", "),a=zi(i,o),l=(r[xi+"Delay"]||"").split(", "),s=(r[xi+"Duration"]||"").split(", "),d=zi(l,s),u=0,c=0;return n===Ci?a>0&&(e=Ci,u=a,c=o.length):n===bi?d>0&&(e=bi,u=d,c=s.length):c=(e=(u=Math.max(a,d))>0?a>d?Ci:bi:null)?e===Ci?o.length:s.length:0,{type:e,timeout:u,propCount:c,hasTransform:e===Ci&&Di.test(r[$i+"Property"])}}function zi(t,n){for(;t.length<n.length;)t=t.concat(t);return Math.max.apply(null,n.map((function(n,e){return Ei(n)+Ei(t[e])})))}function Ei(t){return 1e3*Number(t.slice(0,-1).replace(",","."))}function Gi(t,n){var e=t.elm;o(e._leaveCb)&&(e._leaveCb.cancelled=!0,e._leaveCb());var r=gi(t.data.transition);if(!i(r)&&!o(e._enterCb)&&1===e.nodeType){for(var a=r.css,l=r.type,d=r.enterClass,u=r.enterToClass,c=r.enterActiveClass,p=r.appearClass,m=r.appearToClass,g=r.appearActiveClass,A=r.beforeEnter,h=r.enter,C=r.afterEnter,b=r.enterCancelled,$=r.beforeAppear,v=r.appear,x=r.afterAppear,y=r.appearCancelled,w=r.duration,B=Kn,k=Kn.$vnode;k&&k.parent;)B=k.context,k=k.parent;var _=!B._isMounted||!t.isRootInsert;if(!_||v||""===v){var I=_&&p?p:d,D=_&&g?g:c,S=_&&m?m:u,z=_&&$||A,E=_&&"function"==typeof v?v:h,G=_&&x||C,T=_&&y||b,M=f(s(w)?w.enter:w),O=!1!==a&&!X,F=ji(E),L=e._enterCb=j((function(){O&&(_i(e,S),_i(e,D)),L.cancelled?(O&&_i(e,I),T&&T(e)):G&&G(e),e._enterCb=null}));t.data.show||sn(t,"insert",(function(){var n=e.parentNode,r=n&&n._pending&&n._pending[t.key];r&&r.tag===t.tag&&r.elm._leaveCb&&r.elm._leaveCb(),E&&E(e,L)})),z&&z(e),O&&(ki(e,I),ki(e,D),Bi((function(){_i(e,I),L.cancelled||(ki(e,S),F||(Mi(M)?setTimeout(L,M):Ii(e,l,L)))}))),t.data.show&&(n&&n(),E&&E(e,L)),O||F||L()}}}function Ti(t,n){var e=t.elm;o(e._enterCb)&&(e._enterCb.cancelled=!0,e._enterCb());var r=gi(t.data.transition);if(i(r)||1!==e.nodeType)return n();if(!o(e._leaveCb)){var a=r.css,l=r.type,d=r.leaveClass,u=r.leaveToClass,c=r.leaveActiveClass,p=r.beforeLeave,m=r.leave,g=r.afterLeave,A=r.leaveCancelled,h=r.delayLeave,C=r.duration,b=!1!==a&&!X,$=ji(m),v=f(s(C)?C.leave:C),x=e._leaveCb=j((function(){e.parentNode&&e.parentNode._pending&&(e.parentNode._pending[t.key]=null),b&&(_i(e,u),_i(e,c)),x.cancelled?(b&&_i(e,d),A&&A(e)):(n(),g&&g(e)),e._leaveCb=null}));h?h(y):y()}function y(){x.cancelled||(!t.data.show&&e.parentNode&&((e.parentNode._pending||(e.parentNode._pending={}))[t.key]=t),p&&p(e),b&&(ki(e,d),ki(e,c),Bi((function(){_i(e,d),x.cancelled||(ki(e,u),$||(Mi(v)?setTimeout(x,v):Ii(e,l,x)))}))),m&&m(e,x),b||$||x())}}function Mi(t){return"number"==typeof t&&!isNaN(t)}function ji(t){if(i(t))return!1;var n=t.fns;return o(n)?ji(Array.isArray(n)?n[0]:n):(t._length||t.length)>1}function Oi(t,n){!0!==n.data.show&&Gi(n)}var Fi=function(t){var n,e,r={},s=t.modules,d=t.nodeOps;for(n=0;n<tr.length;++n)for(r[tr[n]]=[],e=0;e<s.length;++e)o(s[e][tr[n]])&&r[tr[n]].push(s[e][tr[n]]);function u(t){var n=d.parentNode(t);o(n)&&d.removeChild(n,t)}function c(t,n,e,i,l,s,u){if(o(t.elm)&&o(s)&&(t=s[u]=bt(t)),t.isRootInsert=!l,!function(t,n,e,i){var l=t.data;if(o(l)){var s=o(t.componentInstance)&&l.keepAlive;if(o(l=l.hook)&&o(l=l.init)&&l(t,!1),o(t.componentInstance))return p(t,n),m(e,t.elm,i),a(s)&&function(t,n,e,i){for(var a,l=t;l.componentInstance;)if(o(a=(l=l.componentInstance._vnode).data)&&o(a=a.transition)){for(a=0;a<r.activate.length;++a)r.activate[a](Je,l);n.push(l);break}m(e,t.elm,i)}(t,n,e,i),!0}}(t,n,e,i)){var c=t.data,g=t.children,A=t.tag;o(A)?(t.elm=t.ns?d.createElementNS(t.ns,A):d.createElement(A,t),C(t),f(t,g,n),o(c)&&h(t,n),m(e,t.elm,i)):a(t.isComment)?(t.elm=d.createComment(t.text),m(e,t.elm,i)):(t.elm=d.createTextNode(t.text),m(e,t.elm,i))}}function p(t,n){o(t.data.pendingInsert)&&(n.push.apply(n,t.data.pendingInsert),t.data.pendingInsert=null),t.elm=t.componentInstance.$el,A(t)?(h(t,n),C(t)):(Ze(t),n.push(t))}function m(t,n,e){o(t)&&(o(e)?d.parentNode(e)===t&&d.insertBefore(t,n,e):d.appendChild(t,n))}function f(t,n,e){if(Array.isArray(n))for(var r=0;r<n.length;++r)c(n[r],e,t.elm,null,!0,n,r);else l(t.text)&&d.appendChild(t.elm,d.createTextNode(String(t.text)))}function A(t){for(;t.componentInstance;)t=t.componentInstance._vnode;return o(t.tag)}function h(t,e){for(var i=0;i<r.create.length;++i)r.create[i](Je,t);o(n=t.data.hook)&&(o(n.create)&&n.create(Je,t),o(n.insert)&&e.push(t))}function C(t){var n;if(o(n=t.fnScopeId))d.setStyleScope(t.elm,n);else for(var e=t;e;)o(n=e.context)&&o(n=n.$options._scopeId)&&d.setStyleScope(t.elm,n),e=e.parent;o(n=Kn)&&n!==t.context&&n!==t.fnContext&&o(n=n.$options._scopeId)&&d.setStyleScope(t.elm,n)}function b(t,n,e,r,i,o){for(;r<=i;++r)c(e[r],o,t,n,!1,e,r)}function $(t){var n,e,i=t.data;if(o(i))for(o(n=i.hook)&&o(n=n.destroy)&&n(t),n=0;n<r.destroy.length;++n)r.destroy[n](t);if(o(n=t.children))for(e=0;e<t.children.length;++e)$(t.children[e])}function v(t,n,e){for(;n<=e;++n){var r=t[n];o(r)&&(o(r.tag)?(x(r),$(r)):u(r.elm))}}function x(t,n){if(o(n)||o(t.data)){var e,i=r.remove.length+1;for(o(n)?n.listeners+=i:n=function(t,n){function e(){0==--e.listeners&&u(t)}return e.listeners=n,e}(t.elm,i),o(e=t.componentInstance)&&o(e=e._vnode)&&o(e.data)&&x(e,n),e=0;e<r.remove.length;++e)r.remove[e](t,n);o(e=t.data.hook)&&o(e=e.remove)?e(t,n):n()}else u(t.elm)}function y(t,n,e,r){for(var i=e;i<r;i++){var a=n[i];if(o(a)&&nr(t,a))return i}}function w(t,n,e,l,s,u){if(t!==n){o(n.elm)&&o(l)&&(n=l[s]=bt(n));var p=n.elm=t.elm;if(a(t.isAsyncPlaceholder))o(n.asyncFactory.resolved)?_(t.elm,n,e):n.isAsyncPlaceholder=!0;else if(a(n.isStatic)&&a(t.isStatic)&&n.key===t.key&&(a(n.isCloned)||a(n.isOnce)))n.componentInstance=t.componentInstance;else{var m,f=n.data;o(f)&&o(m=f.hook)&&o(m=m.prepatch)&&m(t,n);var g=t.children,h=n.children;if(o(f)&&A(n)){for(m=0;m<r.update.length;++m)r.update[m](t,n);o(m=f.hook)&&o(m=m.update)&&m(t,n)}i(n.text)?o(g)&&o(h)?g!==h&&function(t,n,e,r,a){for(var l,s,u,p=0,m=0,f=n.length-1,g=n[0],A=n[f],h=e.length-1,C=e[0],$=e[h],x=!a;p<=f&&m<=h;)i(g)?g=n[++p]:i(A)?A=n[--f]:nr(g,C)?(w(g,C,r,e,m),g=n[++p],C=e[++m]):nr(A,$)?(w(A,$,r,e,h),A=n[--f],$=e[--h]):nr(g,$)?(w(g,$,r,e,h),x&&d.insertBefore(t,g.elm,d.nextSibling(A.elm)),g=n[++p],$=e[--h]):nr(A,C)?(w(A,C,r,e,m),x&&d.insertBefore(t,A.elm,g.elm),A=n[--f],C=e[++m]):(i(l)&&(l=er(n,p,f)),i(s=o(C.key)?l[C.key]:y(C,n,p,f))?c(C,r,t,g.elm,!1,e,m):nr(u=n[s],C)?(w(u,C,r,e,m),n[s]=void 0,x&&d.insertBefore(t,u.elm,g.elm)):c(C,r,t,g.elm,!1,e,m),C=e[++m]);p>f?b(t,i(e[h+1])?null:e[h+1].elm,e,m,h,r):m>h&&v(n,p,f)}(p,g,h,e,u):o(h)?(o(t.text)&&d.setTextContent(p,""),b(p,null,h,0,h.length-1,e)):o(g)?v(g,0,g.length-1):o(t.text)&&d.setTextContent(p,""):t.text!==n.text&&d.setTextContent(p,n.text),o(f)&&o(m=f.hook)&&o(m=m.postpatch)&&m(t,n)}}}function B(t,n,e){if(a(e)&&o(t.parent))t.parent.data.pendingInsert=n;else for(var r=0;r<n.length;++r)n[r].data.hook.insert(n[r])}var k=g("attrs,class,staticClass,staticStyle,key");function _(t,n,e,r){var i,l=n.tag,s=n.data,d=n.children;if(r=r||s&&s.pre,n.elm=t,a(n.isComment)&&o(n.asyncFactory))return n.isAsyncPlaceholder=!0,!0;if(o(s)&&(o(i=s.hook)&&o(i=i.init)&&i(n,!0),o(i=n.componentInstance)))return p(n,e),!0;if(o(l)){if(o(d))if(t.hasChildNodes())if(o(i=s)&&o(i=i.domProps)&&o(i=i.innerHTML)){if(i!==t.innerHTML)return!1}else{for(var u=!0,c=t.firstChild,m=0;m<d.length;m++){if(!c||!_(c,d[m],e,r)){u=!1;break}c=c.nextSibling}if(!u||c)return!1}else f(n,d,e);if(o(s)){var g=!1;for(var A in s)if(!k(A)){g=!0,h(n,e);break}!g&&s.class&&rn(s.class)}}else t.data!==n.text&&(t.data=n.text);return!0}return function(t,n,e,l){if(!i(n)){var s,u=!1,p=[];if(i(t))u=!0,c(n,p);else{var m=o(t.nodeType);if(!m&&nr(t,n))w(t,n,p,null,null,l);else{if(m){if(1===t.nodeType&&t.hasAttribute(O)&&(t.removeAttribute(O),e=!0),a(e)&&_(t,n,p))return B(n,p,!0),t;s=t,t=new gt(d.tagName(s).toLowerCase(),{},[],void 0,s)}var f=t.elm,g=d.parentNode(f);if(c(n,p,f._leaveCb?null:g,d.nextSibling(f)),o(n.parent))for(var h=n.parent,C=A(n);h;){for(var b=0;b<r.destroy.length;++b)r.destroy[b](h);if(h.elm=n.elm,C){for(var x=0;x<r.create.length;++x)r.create[x](Je,h);var y=h.data.hook.insert;if(y.merged)for(var k=1;k<y.fns.length;k++)y.fns[k]()}else Ze(h);h=h.parent}o(g)?v([t],0,0):o(t.tag)&&$(t)}}return B(n,p,u),n.elm}o(t)&&$(t)}}({nodeOps:Ke,modules:[mr,vr,Xr,ti,ci,W?{create:Oi,activate:Oi,remove:function(t,n){!0!==t.data.show?Ti(t,n):n()}}:{}].concat(dr)});X&&document.addEventListener("selectionchange",(function(){var t=document.activeElement;t&&t.vmodel&&Wi(t,"input")}));var Li={inserted:function(t,n,e,r){"select"===e.tag?(r.elm&&!r.elm._vOptions?sn(e,"postpatch",(function(){Li.componentUpdated(t,n,e)})):Pi(t,n,e.context),t._vOptions=[].map.call(t.options,Ni)):("textarea"===e.tag||Qe(t.type))&&(t._vModifiers=n.modifiers,n.modifiers.lazy||(t.addEventListener("compositionstart",Yi),t.addEventListener("compositionend",Ui),t.addEventListener("change",Ui),X&&(t.vmodel=!0)))},componentUpdated:function(t,n,e){if("select"===e.tag){Pi(t,n,e.context);var r=t._vOptions,i=t._vOptions=[].map.call(t.options,Ni);i.some((function(t,n){return!T(t,r[n])}))&&(t.multiple?n.value.some((function(t){return qi(t,i)})):n.value!==n.oldValue&&qi(n.value,i))&&Wi(t,"change")}}};function Pi(t,n,e){Ri(t,n),(K||Z)&&setTimeout((function(){Ri(t,n)}),0)}function Ri(t,n,e){var r=n.value,i=t.multiple;if(!i||Array.isArray(r)){for(var o,a,l=0,s=t.options.length;l<s;l++)if(a=t.options[l],i)o=M(r,Ni(a))>-1,a.selected!==o&&(a.selected=o);else if(T(Ni(a),r))return void(t.selectedIndex!==l&&(t.selectedIndex=l));i||(t.selectedIndex=-1)}}function qi(t,n){return n.every((function(n){return!T(n,t)}))}function Ni(t){return"_value"in t?t._value:t.value}function Yi(t){t.target.composing=!0}function Ui(t){t.target.composing&&(t.target.composing=!1,Wi(t.target,"input"))}function Wi(t,n){var e=document.createEvent("HTMLEvents");e.initEvent(n,!0,!0),t.dispatchEvent(e)}function Hi(t){return!t.componentInstance||t.data&&t.data.transition?t:Hi(t.componentInstance._vnode)}var Qi={model:Li,show:{bind:function(t,n,e){var r=n.value,i=(e=Hi(e)).data&&e.data.transition,o=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&i?(e.data.show=!0,Gi(e,(function(){t.style.display=o}))):t.style.display=r?o:"none"},update:function(t,n,e){var r=n.value;!r!=!n.oldValue&&((e=Hi(e)).data&&e.data.transition?(e.data.show=!0,r?Gi(e,(function(){t.style.display=t.__vOriginalDisplay})):Ti(e,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,n,e,r,i){i||(t.style.display=t.__vOriginalDisplay)}}},Vi={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Ki(t){var n=t&&t.componentOptions;return n&&n.Ctor.options.abstract?Ki(Un(n.children)):t}function Xi(t){var n={},e=t.$options;for(var r in e.propsData)n[r]=t[r];var i=e._parentListeners;for(var o in i)n[y(o)]=i[o];return n}function Zi(t,n){if(/\d-keep-alive$/.test(n.tag))return t("keep-alive",{props:n.componentOptions.propsData})}var Ji=function(t){return t.tag||Yn(t)},to=function(t){return"show"===t.name},no={name:"transition",props:Vi,abstract:!0,render:function(t){var n=this,e=this.$slots.default;if(e&&(e=e.filter(Ji)).length){var r=this.mode,i=e[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return i;var o=Ki(i);if(!o)return i;if(this._leaving)return Zi(t,i);var a="__transition-"+this._uid+"-";o.key=null==o.key?o.isComment?a+"comment":a+o.tag:l(o.key)?0===String(o.key).indexOf(a)?o.key:a+o.key:o.key;var s=(o.data||(o.data={})).transition=Xi(this),d=this._vnode,u=Ki(d);if(o.data.directives&&o.data.directives.some(to)&&(o.data.show=!0),u&&u.data&&!function(t,n){return n.key===t.key&&n.tag===t.tag}(o,u)&&!Yn(u)&&(!u.componentInstance||!u.componentInstance._vnode.isComment)){var c=u.data.transition=D({},s);if("out-in"===r)return this._leaving=!0,sn(c,"afterLeave",(function(){n._leaving=!1,n.$forceUpdate()})),Zi(t,i);if("in-out"===r){if(Yn(o))return d;var p,m=function(){p()};sn(s,"afterEnter",m),sn(s,"enterCancelled",m),sn(c,"delayLeave",(function(t){p=t}))}}return i}}},eo=D({tag:String,moveClass:String},Vi);function ro(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function io(t){t.data.newPos=t.elm.getBoundingClientRect()}function oo(t){var n=t.data.pos,e=t.data.newPos,r=n.left-e.left,i=n.top-e.top;if(r||i){t.data.moved=!0;var o=t.elm.style;o.transform=o.WebkitTransform="translate("+r+"px,"+i+"px)",o.transitionDuration="0s"}}delete eo.mode;var ao={Transition:no,TransitionGroup:{props:eo,beforeMount:function(){var t=this,n=this._update;this._update=function(e,r){var i=Xn(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,i(),n.call(t,e,r)}},render:function(t){for(var n=this.tag||this.$vnode.data.tag||"span",e=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=Xi(this),l=0;l<i.length;l++){var s=i[l];s.tag&&null!=s.key&&0!==String(s.key).indexOf("__vlist")&&(o.push(s),e[s.key]=s,(s.data||(s.data={})).transition=a)}if(r){for(var d=[],u=[],c=0;c<r.length;c++){var p=r[c];p.data.transition=a,p.data.pos=p.elm.getBoundingClientRect(),e[p.key]?d.push(p):u.push(p)}this.kept=t(n,null,d),this.removed=u}return t(n,null,o)},updated:function(){var t=this.prevChildren,n=this.moveClass||(this.name||"v")+"-move";t.length&&this.hasMove(t[0].elm,n)&&(t.forEach(ro),t.forEach(io),t.forEach(oo),this._reflow=document.body.offsetHeight,t.forEach((function(t){if(t.data.moved){var e=t.elm,r=e.style;ki(e,n),r.transform=r.WebkitTransform=r.transitionDuration="",e.addEventListener(vi,e._moveCb=function t(r){r&&r.target!==e||r&&!/transform$/.test(r.propertyName)||(e.removeEventListener(vi,t),e._moveCb=null,_i(e,n))})}})))},methods:{hasMove:function(t,n){if(!hi)return!1;if(this._hasMove)return this._hasMove;var e=t.cloneNode();t._transitionClasses&&t._transitionClasses.forEach((function(t){fi(e,t)})),mi(e,n),e.style.display="none",this.$el.appendChild(e);var r=Si(e);return this.$el.removeChild(e),this._hasMove=r.hasTransform}}}};xe.config.mustUseProp=ze,xe.config.isReservedTag=Ue,xe.config.isReservedAttr=De,xe.config.getTagNamespace=We,xe.config.isUnknownElement=function(t){if(!W)return!0;if(Ue(t))return!1;if(t=t.toLowerCase(),null!=He[t])return He[t];var n=document.createElement(t);return t.indexOf("-")>-1?He[t]=n.constructor===window.HTMLUnknownElement||n.constructor===window.HTMLElement:He[t]=/HTMLUnknownElement/.test(n.toString())},D(xe.options.directives,Qi),D(xe.options.components,ao),xe.prototype.__patch__=W?Fi:z,xe.prototype.$mount=function(t,n){return function(t,n,e){var r;return t.$el=n,t.$options.render||(t.$options.render=ht),te(t,"beforeMount"),r=function(){t._update(t._render(),e)},new pe(t,r,z,{before:function(){t._isMounted&&!t._isDestroyed&&te(t,"beforeUpdate")}},!0),e=!1,null==t.$vnode&&(t._isMounted=!0,te(t,"mounted")),t}(this,t=t&&W?Ve(t):void 0,n)},W&&setTimeout((function(){P.devtools&&ot&&ot.emit("init",xe)}),0);var lo,so=/\{\{((?:.|\r?\n)+?)\}\}/g,uo=/[-.*+?^${}()|[\]\/\\]/g,co=v((function(t){var n=t[0].replace(uo,"\\$&"),e=t[1].replace(uo,"\\$&");return new RegExp(n+"((?:.|\\n)+?)"+e,"g")})),po={staticKeys:["staticClass"],transformNode:function(t,n){n.warn;var e=Tr(t,"class");e&&(t.staticClass=JSON.stringify(e));var r=Gr(t,"class",!1);r&&(t.classBinding=r)},genData:function(t){var n="";return t.staticClass&&(n+="staticClass:"+t.staticClass+","),t.classBinding&&(n+="class:"+t.classBinding+","),n}},mo={staticKeys:["staticStyle"],transformNode:function(t,n){n.warn;var e=Tr(t,"style");e&&(t.staticStyle=JSON.stringify(ni(e)));var r=Gr(t,"style",!1);r&&(t.styleBinding=r)},genData:function(t){var n="";return t.staticStyle&&(n+="staticStyle:"+t.staticStyle+","),t.styleBinding&&(n+="style:("+t.styleBinding+"),"),n}},fo=g("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),go=g("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),Ao=g("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),ho=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Co=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,bo="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+R.source+"]*",$o="((?:"+bo+"\\:)?"+bo+")",vo=new RegExp("^<"+$o),xo=/^\s*(\/?)>/,yo=new RegExp("^<\\/"+$o+"[^>]*>"),wo=/^<!DOCTYPE [^>]+>/i,Bo=/^<!\--/,ko=/^<!\[/,_o=g("script,style,textarea",!0),Io={},Do={"<":"<",">":">",""":'"',"&":"&"," ":"\n","	":"\t","'":"'"},So=/&(?:lt|gt|quot|amp|#39);/g,zo=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Eo=g("pre,textarea",!0),Go=function(t,n){return t&&Eo(t)&&"\n"===n[0]};function To(t,n){var e=n?zo:So;return t.replace(e,(function(t){return Do[t]}))}var Mo,jo,Oo,Fo,Lo,Po,Ro,qo,No=/^@|^v-on:/,Yo=/^v-|^@|^:|^#/,Uo=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Wo=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Ho=/^\(|\)$/g,Qo=/^\[.*\]$/,Vo=/:(.*)$/,Ko=/^:|^\.|^v-bind:/,Xo=/\.[^.\]]+(?=[^\]]*$)/g,Zo=/^v-slot(:|$)|^#/,Jo=/[\r\n]/,ta=/\s+/g,na=v((function(t){return(lo=lo||document.createElement("div")).innerHTML=t,lo.textContent})),ea="_empty_";function ra(t,n,e){return{type:1,tag:t,attrsList:n,attrsMap:da(n),rawAttrsMap:{},parent:e,children:[]}}function ia(t,n){var e,r;(r=Gr(e=t,"key"))&&(e.key=r),t.plain=!t.key&&!t.scopedSlots&&!t.attrsList.length,function(t){var n=Gr(t,"ref");n&&(t.ref=n,t.refInFor=function(t){for(var n=t;n;){if(void 0!==n.for)return!0;n=n.parent}return!1}(t))}(t),function(t){var n;"template"===t.tag?(n=Tr(t,"scope"),t.slotScope=n||Tr(t,"slot-scope")):(n=Tr(t,"slot-scope"))&&(t.slotScope=n);var e=Gr(t,"slot");if(e&&(t.slotTarget='""'===e?'"default"':e,t.slotTargetDynamic=!(!t.attrsMap[":slot"]&&!t.attrsMap["v-bind:slot"]),"template"===t.tag||t.slotScope||Ir(t,"slot",e,function(t,n){return t.rawAttrsMap[":"+n]||t.rawAttrsMap["v-bind:"+n]||t.rawAttrsMap[n]}(t,"slot"))),"template"===t.tag){var r=Mr(t,Zo);if(r){var i=la(r),o=i.name,a=i.dynamic;t.slotTarget=o,t.slotTargetDynamic=a,t.slotScope=r.value||ea}}else{var l=Mr(t,Zo);if(l){var s=t.scopedSlots||(t.scopedSlots={}),d=la(l),u=d.name,c=d.dynamic,p=s[u]=ra("template",[],t);p.slotTarget=u,p.slotTargetDynamic=c,p.children=t.children.filter((function(t){if(!t.slotScope)return t.parent=p,!0})),p.slotScope=l.value||ea,t.children=[],t.plain=!1}}}(t),function(t){"slot"===t.tag&&(t.slotName=Gr(t,"name"))}(t),function(t){var n;(n=Gr(t,"is"))&&(t.component=n),null!=Tr(t,"inline-template")&&(t.inlineTemplate=!0)}(t);for(var i=0;i<Oo.length;i++)t=Oo[i](t,n)||t;return function(t){var n,e,r,i,o,a,l,s,d=t.attrsList;for(n=0,e=d.length;n<e;n++)if(r=i=d[n].name,o=d[n].value,Yo.test(r))if(t.hasBindings=!0,(a=sa(r.replace(Yo,"")))&&(r=r.replace(Xo,"")),Ko.test(r))r=r.replace(Ko,""),o=yr(o),(s=Qo.test(r))&&(r=r.slice(1,-1)),a&&(a.prop&&!s&&"innerHtml"===(r=y(r))&&(r="innerHTML"),a.camel&&!s&&(r=y(r)),a.sync&&(l=Fr(o,"$event"),s?Er(t,'"update:"+('+r+")",l,null,!1,0,d[n],!0):(Er(t,"update:"+y(r),l,null,!1,0,d[n]),k(r)!==y(r)&&Er(t,"update:"+k(r),l,null,!1,0,d[n])))),a&&a.prop||!t.component&&Ro(t.tag,t.attrsMap.type,r)?_r(t,r,o,d[n],s):Ir(t,r,o,d[n],s);else if(No.test(r))r=r.replace(No,""),(s=Qo.test(r))&&(r=r.slice(1,-1)),Er(t,r,o,a,!1,0,d[n],s);else{var u=(r=r.replace(Yo,"")).match(Vo),c=u&&u[1];s=!1,c&&(r=r.slice(0,-(c.length+1)),Qo.test(c)&&(c=c.slice(1,-1),s=!0)),Sr(t,r,i,o,c,s,a,d[n])}else Ir(t,r,JSON.stringify(o),d[n]),!t.component&&"muted"===r&&Ro(t.tag,t.attrsMap.type,r)&&_r(t,r,"true",d[n])}(t),t}function oa(t){var n;if(n=Tr(t,"v-for")){var e=function(t){var n=t.match(Uo);if(n){var e={};e.for=n[2].trim();var r=n[1].trim().replace(Ho,""),i=r.match(Wo);return i?(e.alias=r.replace(Wo,"").trim(),e.iterator1=i[1].trim(),i[2]&&(e.iterator2=i[2].trim())):e.alias=r,e}}(n);e&&D(t,e)}}function aa(t,n){t.ifConditions||(t.ifConditions=[]),t.ifConditions.push(n)}function la(t){var n=t.name.replace(Zo,"");return n||"#"!==t.name[0]&&(n="default"),Qo.test(n)?{name:n.slice(1,-1),dynamic:!0}:{name:'"'+n+'"',dynamic:!1}}function sa(t){var n=t.match(Xo);if(n){var e={};return n.forEach((function(t){e[t.slice(1)]=!0})),e}}function da(t){for(var n={},e=0,r=t.length;e<r;e++)n[t[e].name]=t[e].value;return n}var ua=/^xmlns:NS\d+/,ca=/^NS\d+:/;function pa(t){return ra(t.tag,t.attrsList.slice(),t.parent)}var ma,fa,ga=[po,mo,{preTransformNode:function(t,n){if("input"===t.tag){var e,r=t.attrsMap;if(!r["v-model"])return;if((r[":type"]||r["v-bind:type"])&&(e=Gr(t,"type")),r.type||e||!r["v-bind"]||(e="("+r["v-bind"]+").type"),e){var i=Tr(t,"v-if",!0),o=i?"&&("+i+")":"",a=null!=Tr(t,"v-else",!0),l=Tr(t,"v-else-if",!0),s=pa(t);oa(s),Dr(s,"type","checkbox"),ia(s,n),s.processed=!0,s.if="("+e+")==='checkbox'"+o,aa(s,{exp:s.if,block:s});var d=pa(t);Tr(d,"v-for",!0),Dr(d,"type","radio"),ia(d,n),aa(s,{exp:"("+e+")==='radio'"+o,block:d});var u=pa(t);return Tr(u,"v-for",!0),Dr(u,":type",e),ia(u,n),aa(s,{exp:i,block:u}),a?s.else=!0:l&&(s.elseif=l),s}}}}],Aa={expectHTML:!0,modules:ga,directives:{model:function(t,n,e){var r=n.value,i=n.modifiers,o=t.tag,a=t.attrsMap.type;if(t.component)return Or(t,r,i),!1;if("select"===o)!function(t,n,e){var r='var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(e&&e.number?"_n(val)":"val")+"});";Er(t,"change",r=r+" "+Fr(n,"$event.target.multiple ? $$selectedVal : $$selectedVal[0]"),null,!0)}(t,r,i);else if("input"===o&&"checkbox"===a)!function(t,n,e){var r=e&&e.number,i=Gr(t,"value")||"null",o=Gr(t,"true-value")||"true",a=Gr(t,"false-value")||"false";_r(t,"checked","Array.isArray("+n+")?_i("+n+","+i+")>-1"+("true"===o?":("+n+")":":_q("+n+","+o+")")),Er(t,"change","var $$a="+n+",$$el=$event.target,$$c=$$el.checked?("+o+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+i+")":i)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Fr(n,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Fr(n,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Fr(n,"$$c")+"}",null,!0)}(t,r,i);else if("input"===o&&"radio"===a)!function(t,n,e){var r=e&&e.number,i=Gr(t,"value")||"null";_r(t,"checked","_q("+n+","+(i=r?"_n("+i+")":i)+")"),Er(t,"change",Fr(n,i),null,!0)}(t,r,i);else if("input"===o||"textarea"===o)!function(t,n,e){var r=t.attrsMap.type,i=e||{},o=i.lazy,a=i.number,l=i.trim,s=!o&&"range"!==r,d=o?"change":"range"===r?"__r":"input",u="$event.target.value";l&&(u="$event.target.value.trim()"),a&&(u="_n("+u+")");var c=Fr(n,u);s&&(c="if($event.target.composing)return;"+c),_r(t,"value","("+n+")"),Er(t,d,c,null,!0),(l||a)&&Er(t,"blur","$forceUpdate()")}(t,r,i);else if(!P.isReservedTag(o))return Or(t,r,i),!1;return!0},text:function(t,n){n.value&&_r(t,"textContent","_s("+n.value+")",n)},html:function(t,n){n.value&&_r(t,"innerHTML","_s("+n.value+")",n)}},isPreTag:function(t){return"pre"===t},isUnaryTag:fo,mustUseProp:ze,canBeLeftOpenTag:go,isReservedTag:Ue,getTagNamespace:We,staticKeys:function(t){return t.reduce((function(t,n){return t.concat(n.staticKeys||[])}),[]).join(",")}(ga)},ha=v((function(t){return g("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(t?","+t:""))})),Ca=/^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/,ba=/\([^)]*?\);*$/,$a=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,va={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},xa={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},ya=function(t){return"if("+t+")return null;"},wa={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:ya("$event.target !== $event.currentTarget"),ctrl:ya("!$event.ctrlKey"),shift:ya("!$event.shiftKey"),alt:ya("!$event.altKey"),meta:ya("!$event.metaKey"),left:ya("'button' in $event && $event.button !== 0"),middle:ya("'button' in $event && $event.button !== 1"),right:ya("'button' in $event && $event.button !== 2")};function Ba(t,n){var e=n?"nativeOn:":"on:",r="",i="";for(var o in t){var a=ka(t[o]);t[o]&&t[o].dynamic?i+=o+","+a+",":r+='"'+o+'":'+a+","}return r="{"+r.slice(0,-1)+"}",i?e+"_d("+r+",["+i.slice(0,-1)+"])":e+r}function ka(t){if(!t)return"function(){}";if(Array.isArray(t))return"["+t.map((function(t){return ka(t)})).join(",")+"]";var n=$a.test(t.value),e=Ca.test(t.value),r=$a.test(t.value.replace(ba,""));if(t.modifiers){var i="",o="",a=[];for(var l in t.modifiers)if(wa[l])o+=wa[l],va[l]&&a.push(l);else if("exact"===l){var s=t.modifiers;o+=ya(["ctrl","shift","alt","meta"].filter((function(t){return!s[t]})).map((function(t){return"$event."+t+"Key"})).join("||"))}else a.push(l);return a.length&&(i+=function(t){return"if(!$event.type.indexOf('key')&&"+t.map(_a).join("&&")+")return null;"}(a)),o&&(i+=o),"function($event){"+i+(n?"return "+t.value+"($event)":e?"return ("+t.value+")($event)":r?"return "+t.value:t.value)+"}"}return n||e?t.value:"function($event){"+(r?"return "+t.value:t.value)+"}"}function _a(t){var n=parseInt(t,10);if(n)return"$event.keyCode!=="+n;var e=va[t],r=xa[t];return"_k($event.keyCode,"+JSON.stringify(t)+","+JSON.stringify(e)+",$event.key,"+JSON.stringify(r)+")"}var Ia={on:function(t,n){t.wrapListeners=function(t){return"_g("+t+","+n.value+")"}},bind:function(t,n){t.wrapData=function(e){return"_b("+e+",'"+t.tag+"',"+n.value+","+(n.modifiers&&n.modifiers.prop?"true":"false")+(n.modifiers&&n.modifiers.sync?",true":"")+")"}},cloak:z},Da=function(t){this.options=t,this.warn=t.warn||Br,this.transforms=kr(t.modules,"transformCode"),this.dataGenFns=kr(t.modules,"genData"),this.directives=D(D({},Ia),t.directives);var n=t.isReservedTag||E;this.maybeComponent=function(t){return!!t.component||!n(t.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Sa(t,n){var e=new Da(n);return{render:"with(this){return "+(t?za(t,e):'_c("div")')+"}",staticRenderFns:e.staticRenderFns}}function za(t,n){if(t.parent&&(t.pre=t.pre||t.parent.pre),t.staticRoot&&!t.staticProcessed)return Ea(t,n);if(t.once&&!t.onceProcessed)return Ga(t,n);if(t.for&&!t.forProcessed)return Ma(t,n);if(t.if&&!t.ifProcessed)return Ta(t,n);if("template"!==t.tag||t.slotTarget||n.pre){if("slot"===t.tag)return function(t,n){var e=t.slotName||'"default"',r=La(t,n),i="_t("+e+(r?","+r:""),o=t.attrs||t.dynamicAttrs?qa((t.attrs||[]).concat(t.dynamicAttrs||[]).map((function(t){return{name:y(t.name),value:t.value,dynamic:t.dynamic}}))):null,a=t.attrsMap["v-bind"];return!o&&!a||r||(i+=",null"),o&&(i+=","+o),a&&(i+=(o?"":",null")+","+a),i+")"}(t,n);var e;if(t.component)e=function(t,n,e){var r=n.inlineTemplate?null:La(n,e,!0);return"_c("+t+","+ja(n,e)+(r?","+r:"")+")"}(t.component,t,n);else{var r;(!t.plain||t.pre&&n.maybeComponent(t))&&(r=ja(t,n));var i=t.inlineTemplate?null:La(t,n,!0);e="_c('"+t.tag+"'"+(r?","+r:"")+(i?","+i:"")+")"}for(var o=0;o<n.transforms.length;o++)e=n.transforms[o](t,e);return e}return La(t,n)||"void 0"}function Ea(t,n){t.staticProcessed=!0;var e=n.pre;return t.pre&&(n.pre=t.pre),n.staticRenderFns.push("with(this){return "+za(t,n)+"}"),n.pre=e,"_m("+(n.staticRenderFns.length-1)+(t.staticInFor?",true":"")+")"}function Ga(t,n){if(t.onceProcessed=!0,t.if&&!t.ifProcessed)return Ta(t,n);if(t.staticInFor){for(var e="",r=t.parent;r;){if(r.for){e=r.key;break}r=r.parent}return e?"_o("+za(t,n)+","+n.onceId+++","+e+")":za(t,n)}return Ea(t,n)}function Ta(t,n,e,r){return t.ifProcessed=!0,function t(n,e,r,i){if(!n.length)return i||"_e()";var o=n.shift();return o.exp?"("+o.exp+")?"+a(o.block)+":"+t(n,e,r,i):""+a(o.block);function a(t){return r?r(t,e):t.once?Ga(t,e):za(t,e)}}(t.ifConditions.slice(),n,e,r)}function Ma(t,n,e,r){var i=t.for,o=t.alias,a=t.iterator1?","+t.iterator1:"",l=t.iterator2?","+t.iterator2:"";return t.forProcessed=!0,(r||"_l")+"(("+i+"),function("+o+a+l+"){return "+(e||za)(t,n)+"})"}function ja(t,n){var e="{",r=function(t,n){var e=t.directives;if(e){var r,i,o,a,l="directives:[",s=!1;for(r=0,i=e.length;r<i;r++){o=e[r],a=!0;var d=n.directives[o.name];d&&(a=!!d(t,o,n.warn)),a&&(s=!0,l+='{name:"'+o.name+'",rawName:"'+o.rawName+'"'+(o.value?",value:("+o.value+"),expression:"+JSON.stringify(o.value):"")+(o.arg?",arg:"+(o.isDynamicArg?o.arg:'"'+o.arg+'"'):"")+(o.modifiers?",modifiers:"+JSON.stringify(o.modifiers):"")+"},")}return s?l.slice(0,-1)+"]":void 0}}(t,n);r&&(e+=r+","),t.key&&(e+="key:"+t.key+","),t.ref&&(e+="ref:"+t.ref+","),t.refInFor&&(e+="refInFor:true,"),t.pre&&(e+="pre:true,"),t.component&&(e+='tag:"'+t.tag+'",');for(var i=0;i<n.dataGenFns.length;i++)e+=n.dataGenFns[i](t);if(t.attrs&&(e+="attrs:"+qa(t.attrs)+","),t.props&&(e+="domProps:"+qa(t.props)+","),t.events&&(e+=Ba(t.events,!1)+","),t.nativeEvents&&(e+=Ba(t.nativeEvents,!0)+","),t.slotTarget&&!t.slotScope&&(e+="slot:"+t.slotTarget+","),t.scopedSlots&&(e+=function(t,n,e){var r=t.for||Object.keys(n).some((function(t){var e=n[t];return e.slotTargetDynamic||e.if||e.for||Oa(e)})),i=!!t.if;if(!r)for(var o=t.parent;o;){if(o.slotScope&&o.slotScope!==ea||o.for){r=!0;break}o.if&&(i=!0),o=o.parent}var a=Object.keys(n).map((function(t){return Fa(n[t],e)})).join(",");return"scopedSlots:_u(["+a+"]"+(r?",null,true":"")+(!r&&i?",null,false,"+function(t){for(var n=5381,e=t.length;e;)n=33*n^t.charCodeAt(--e);return n>>>0}(a):"")+")"}(t,t.scopedSlots,n)+","),t.model&&(e+="model:{value:"+t.model.value+",callback:"+t.model.callback+",expression:"+t.model.expression+"},"),t.inlineTemplate){var o=function(t,n){var e=t.children[0];if(e&&1===e.type){var r=Sa(e,n.options);return"inlineTemplate:{render:function(){"+r.render+"},staticRenderFns:["+r.staticRenderFns.map((function(t){return"function(){"+t+"}"})).join(",")+"]}"}}(t,n);o&&(e+=o+",")}return e=e.replace(/,$/,"")+"}",t.dynamicAttrs&&(e="_b("+e+',"'+t.tag+'",'+qa(t.dynamicAttrs)+")"),t.wrapData&&(e=t.wrapData(e)),t.wrapListeners&&(e=t.wrapListeners(e)),e}function Oa(t){return 1===t.type&&("slot"===t.tag||t.children.some(Oa))}function Fa(t,n){var e=t.attrsMap["slot-scope"];if(t.if&&!t.ifProcessed&&!e)return Ta(t,n,Fa,"null");if(t.for&&!t.forProcessed)return Ma(t,n,Fa);var r=t.slotScope===ea?"":String(t.slotScope),i="function("+r+"){return "+("template"===t.tag?t.if&&e?"("+t.if+")?"+(La(t,n)||"undefined")+":undefined":La(t,n)||"undefined":za(t,n))+"}",o=r?"":",proxy:true";return"{key:"+(t.slotTarget||'"default"')+",fn:"+i+o+"}"}function La(t,n,e,r,i){var o=t.children;if(o.length){var a=o[0];if(1===o.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var l=e?n.maybeComponent(a)?",1":",0":"";return""+(r||za)(a,n)+l}var s=e?function(t,n){for(var e=0,r=0;r<t.length;r++){var i=t[r];if(1===i.type){if(Pa(i)||i.ifConditions&&i.ifConditions.some((function(t){return Pa(t.block)}))){e=2;break}(n(i)||i.ifConditions&&i.ifConditions.some((function(t){return n(t.block)})))&&(e=1)}}return e}(o,n.maybeComponent):0,d=i||Ra;return"["+o.map((function(t){return d(t,n)})).join(",")+"]"+(s?","+s:"")}}function Pa(t){return void 0!==t.for||"template"===t.tag||"slot"===t.tag}function Ra(t,n){return 1===t.type?za(t,n):3===t.type&&t.isComment?(r=t,"_e("+JSON.stringify(r.text)+")"):"_v("+(2===(e=t).type?e.expression:Na(JSON.stringify(e.text)))+")";var e,r}function qa(t){for(var n="",e="",r=0;r<t.length;r++){var i=t[r],o=Na(i.value);i.dynamic?e+=i.name+","+o+",":n+='"'+i.name+'":'+o+","}return n="{"+n.slice(0,-1)+"}",e?"_d("+n+",["+e.slice(0,-1)+"])":n}function Na(t){return t.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function Ya(t,n){try{return new Function(t)}catch(e){return n.push({err:e,code:t}),z}}function Ua(t){var n=Object.create(null);return function(e,r,i){(r=D({},r)).warn,delete r.warn;var o=r.delimiters?String(r.delimiters)+e:e;if(n[o])return n[o];var a=t(e,r),l={},s=[];return l.render=Ya(a.render,s),l.staticRenderFns=a.staticRenderFns.map((function(t){return Ya(t,s)})),n[o]=l}}new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b");var Wa,Ha,Qa=(Wa=function(t,n){var e=function(t,n){Mo=n.warn||Br,Po=n.isPreTag||E,Ro=n.mustUseProp||E,qo=n.getTagNamespace||E,n.isReservedTag,Oo=kr(n.modules,"transformNode"),Fo=kr(n.modules,"preTransformNode"),Lo=kr(n.modules,"postTransformNode"),jo=n.delimiters;var e,r,i=[],o=!1!==n.preserveWhitespace,a=n.whitespace,l=!1,s=!1;function d(t){if(u(t),l||t.processed||(t=ia(t,n)),i.length||t===e||e.if&&(t.elseif||t.else)&&aa(e,{exp:t.elseif,block:t}),r&&!t.forbidden)if(t.elseif||t.else)a=t,(d=function(t){for(var n=t.length;n--;){if(1===t[n].type)return t[n];t.pop()}}(r.children))&&d.if&&aa(d,{exp:a.elseif,block:a});else{if(t.slotScope){var o=t.slotTarget||'"default"';(r.scopedSlots||(r.scopedSlots={}))[o]=t}r.children.push(t),t.parent=r}var a,d;t.children=t.children.filter((function(t){return!t.slotScope})),u(t),t.pre&&(l=!1),Po(t.tag)&&(s=!1);for(var c=0;c<Lo.length;c++)Lo[c](t,n)}function u(t){if(!s)for(var n;(n=t.children[t.children.length-1])&&3===n.type&&" "===n.text;)t.children.pop()}return function(t,n){for(var e,r,i=[],o=n.expectHTML,a=n.isUnaryTag||E,l=n.canBeLeftOpenTag||E,s=0;t;){if(e=t,r&&_o(r)){var d=0,u=r.toLowerCase(),c=Io[u]||(Io[u]=new RegExp("([\\s\\S]*?)(</"+u+"[^>]*>)","i")),p=t.replace(c,(function(t,e,r){return d=r.length,_o(u)||"noscript"===u||(e=e.replace(/<!\--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)]]>/g,"$1")),Go(u,e)&&(e=e.slice(1)),n.chars&&n.chars(e),""}));s+=t.length-p.length,t=p,k(u,s-d,s)}else{var m=t.indexOf("<");if(0===m){if(Bo.test(t)){var f=t.indexOf("--\x3e");if(f>=0){n.shouldKeepComment&&n.comment(t.substring(4,f),s,s+f+3),y(f+3);continue}}if(ko.test(t)){var g=t.indexOf("]>");if(g>=0){y(g+2);continue}}var A=t.match(wo);if(A){y(A[0].length);continue}var h=t.match(yo);if(h){var C=s;y(h[0].length),k(h[1],C,s);continue}var b=w();if(b){B(b),Go(b.tagName,t)&&y(1);continue}}var $=void 0,v=void 0,x=void 0;if(m>=0){for(v=t.slice(m);!(yo.test(v)||vo.test(v)||Bo.test(v)||ko.test(v)||(x=v.indexOf("<",1))<0);)m+=x,v=t.slice(m);$=t.substring(0,m)}m<0&&($=t),$&&y($.length),n.chars&&$&&n.chars($,s-$.length,s)}if(t===e){n.chars&&n.chars(t);break}}function y(n){s+=n,t=t.substring(n)}function w(){var n=t.match(vo);if(n){var e,r,i={tagName:n[1],attrs:[],start:s};for(y(n[0].length);!(e=t.match(xo))&&(r=t.match(Co)||t.match(ho));)r.start=s,y(r[0].length),r.end=s,i.attrs.push(r);if(e)return i.unarySlash=e[1],y(e[0].length),i.end=s,i}}function B(t){var e=t.tagName,s=t.unarySlash;o&&("p"===r&&Ao(e)&&k(r),l(e)&&r===e&&k(e));for(var d=a(e)||!!s,u=t.attrs.length,c=new Array(u),p=0;p<u;p++){var m=t.attrs[p],f=m[3]||m[4]||m[5]||"",g="a"===e&&"href"===m[1]?n.shouldDecodeNewlinesForHref:n.shouldDecodeNewlines;c[p]={name:m[1],value:To(f,g)}}d||(i.push({tag:e,lowerCasedTag:e.toLowerCase(),attrs:c,start:t.start,end:t.end}),r=e),n.start&&n.start(e,c,d,t.start,t.end)}function k(t,e,o){var a,l;if(null==e&&(e=s),null==o&&(o=s),t)for(l=t.toLowerCase(),a=i.length-1;a>=0&&i[a].lowerCasedTag!==l;a--);else a=0;if(a>=0){for(var d=i.length-1;d>=a;d--)n.end&&n.end(i[d].tag,e,o);i.length=a,r=a&&i[a-1].tag}else"br"===l?n.start&&n.start(t,[],!0,e,o):"p"===l&&(n.start&&n.start(t,[],!1,e,o),n.end&&n.end(t,e,o))}k()}(t,{warn:Mo,expectHTML:n.expectHTML,isUnaryTag:n.isUnaryTag,canBeLeftOpenTag:n.canBeLeftOpenTag,shouldDecodeNewlines:n.shouldDecodeNewlines,shouldDecodeNewlinesForHref:n.shouldDecodeNewlinesForHref,shouldKeepComment:n.comments,outputSourceRange:n.outputSourceRange,start:function(t,o,a,u,c){var p=r&&r.ns||qo(t);K&&"svg"===p&&(o=function(t){for(var n=[],e=0;e<t.length;e++){var r=t[e];ua.test(r.name)||(r.name=r.name.replace(ca,""),n.push(r))}return n}(o));var m,f=ra(t,o,r);p&&(f.ns=p),"style"!==(m=f).tag&&("script"!==m.tag||m.attrsMap.type&&"text/javascript"!==m.attrsMap.type)||it()||(f.forbidden=!0);for(var g=0;g<Fo.length;g++)f=Fo[g](f,n)||f;l||(function(t){null!=Tr(t,"v-pre")&&(t.pre=!0)}(f),f.pre&&(l=!0)),Po(f.tag)&&(s=!0),l?function(t){var n=t.attrsList,e=n.length;if(e)for(var r=t.attrs=new Array(e),i=0;i<e;i++)r[i]={name:n[i].name,value:JSON.stringify(n[i].value)},null!=n[i].start&&(r[i].start=n[i].start,r[i].end=n[i].end);else t.pre||(t.plain=!0)}(f):f.processed||(oa(f),function(t){var n=Tr(t,"v-if");if(n)t.if=n,aa(t,{exp:n,block:t});else{null!=Tr(t,"v-else")&&(t.else=!0);var e=Tr(t,"v-else-if");e&&(t.elseif=e)}}(f),function(t){null!=Tr(t,"v-once")&&(t.once=!0)}(f)),e||(e=f),a?d(f):(r=f,i.push(f))},end:function(t,n,e){var o=i[i.length-1];i.length-=1,r=i[i.length-1],d(o)},chars:function(t,n,e){if(r&&(!K||"textarea"!==r.tag||r.attrsMap.placeholder!==t)){var i,d,u,c=r.children;(t=s||t.trim()?"script"===(i=r).tag||"style"===i.tag?t:na(t):c.length?a?"condense"===a&&Jo.test(t)?"":" ":o?" ":"":"")&&(s||"condense"!==a||(t=t.replace(ta," ")),!l&&" "!==t&&(d=function(t,n){var e=n?co(n):so;if(e.test(t)){for(var r,i,o,a=[],l=[],s=e.lastIndex=0;r=e.exec(t);){(i=r.index)>s&&(l.push(o=t.slice(s,i)),a.push(JSON.stringify(o)));var d=yr(r[1].trim());a.push("_s("+d+")"),l.push({"@binding":d}),s=i+r[0].length}return s<t.length&&(l.push(o=t.slice(s)),a.push(JSON.stringify(o))),{expression:a.join("+"),tokens:l}}}(t,jo))?u={type:2,expression:d.expression,tokens:d.tokens,text:t}:" "===t&&c.length&&" "===c[c.length-1].text||(u={type:3,text:t}),u&&c.push(u))}},comment:function(t,n,e){if(r){var i={type:3,text:t,isComment:!0};r.children.push(i)}}}),e}(t.trim(),n);!1!==n.optimize&&function(t,n){t&&(ma=ha(n.staticKeys||""),fa=n.isReservedTag||E,function t(n){if(n.static=function(t){return 2!==t.type&&(3===t.type||!(!t.pre&&(t.hasBindings||t.if||t.for||A(t.tag)||!fa(t.tag)||function(t){for(;t.parent;){if("template"!==(t=t.parent).tag)return!1;if(t.for)return!0}return!1}(t)||!Object.keys(t).every(ma))))}(n),1===n.type){if(!fa(n.tag)&&"slot"!==n.tag&&null==n.attrsMap["inline-template"])return;for(var e=0,r=n.children.length;e<r;e++){var i=n.children[e];t(i),i.static||(n.static=!1)}if(n.ifConditions)for(var o=1,a=n.ifConditions.length;o<a;o++){var l=n.ifConditions[o].block;t(l),l.static||(n.static=!1)}}}(t),function t(n,e){if(1===n.type){if((n.static||n.once)&&(n.staticInFor=e),n.static&&n.children.length&&(1!==n.children.length||3!==n.children[0].type))return void(n.staticRoot=!0);if(n.staticRoot=!1,n.children)for(var r=0,i=n.children.length;r<i;r++)t(n.children[r],e||!!n.for);if(n.ifConditions)for(var o=1,a=n.ifConditions.length;o<a;o++)t(n.ifConditions[o].block,e)}}(t,!1))}(e,n);var r=Sa(e,n);return{ast:e,render:r.render,staticRenderFns:r.staticRenderFns}},function(t){function n(n,e){var r=Object.create(t),i=[],o=[];if(e)for(var a in e.modules&&(r.modules=(t.modules||[]).concat(e.modules)),e.directives&&(r.directives=D(Object.create(t.directives||null),e.directives)),e)"modules"!==a&&"directives"!==a&&(r[a]=e[a]);r.warn=function(t,n,e){(e?o:i).push(t)};var l=Wa(n.trim(),r);return l.errors=i,l.tips=o,l}return{compile:n,compileToFunctions:Ua(n)}})(Aa),Va=(Qa.compile,Qa.compileToFunctions);function Ka(t){return(Ha=Ha||document.createElement("div")).innerHTML=t?'<a href="\n"/>':'<div a="\n"/>',Ha.innerHTML.indexOf(" ")>0}var Xa=!!W&&Ka(!1),Za=!!W&&Ka(!0),Ja=v((function(t){var n=Ve(t);return n&&n.innerHTML})),tl=xe.prototype.$mount;xe.prototype.$mount=function(t,n){if((t=t&&Ve(t))===document.body||t===document.documentElement)return this;var e=this.$options;if(!e.render){var r=e.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&(r=Ja(r));else{if(!r.nodeType)return this;r=r.innerHTML}else t&&(r=function(t){if(t.outerHTML)return t.outerHTML;var n=document.createElement("div");return n.appendChild(t.cloneNode(!0)),n.innerHTML}(t));if(r){var i=Va(r,{outputSourceRange:!1,shouldDecodeNewlines:Xa,shouldDecodeNewlinesForHref:Za,delimiters:e.delimiters,comments:e.comments},this),o=i.render,a=i.staticRenderFns;e.render=o,e.staticRenderFns=a}}return tl.call(this,t,n)},xe.compile=Va,t.exports=xe},73609:t=>{"use strict";t.exports=window.jQuery}},n={};function e(r){var i=n[r];if(void 0!==i)return i.exports;var o=n[r]={id:r,loaded:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}e.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},e.d=(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),e.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),e.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},e.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),(()=>{"use strict";var t=h(e(49551)),n=h(e(26141)),r=h(e(57661)),i=h(e(40734)),o=h(e(51588)),a=h(e(22386)),l=h(e(59150)),s=h(e(30975)),d=h(e(85682)),u=h(e(10093)),c=h(e(10318)),p=h(e(8690)),m=h(e(92950)),f=h(e(40720)),g=h(e(47154)),A=h(e(20259));function h(t){return t&&t.__esModule?t:{default:t}}var C=window.$;C((function(){window.prestashop.component.initComponents(["TranslatableField","TinyMCEEditor","TranslatableInput","EventEmitter","TextWithLengthCounter"]);var e=C(n.default.productForm),h=parseInt(e.data("productId"),10),b=e.data("productType");(0,A.default)();var $=window.prestashop.instance.eventEmitter,v=new s.default(e,$);h&&b===n.default.productType.COMBINATIONS&&new i.default(h),new t.default(n.default.navigationBar),new c.default,new m.default(C(n.default.productTypeSelector),e),new r.default($),new l.default,new d.default;var x=C(n.default.productFormSubmitButton);new u.default($,e,x).watch(),h&&((0,g.default)(n.default.dropzoneImagesContainer),new a.default($),new o.default,b!==n.default.productType.COMBINATIONS&&new p.default(n.default.suppliers.productSuppliers,!0),b===n.default.productType.VIRTUAL&&new f.default(v))}))})(),window.product_edit={}})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvdXRpbHMvZ3Jvd2wuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3V0aWxzL3NlcnAvaW5kZXguanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy9hdXRvLWNvbXBsZXRlLXNlYXJjaC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9jb21wb25lbnRzL2Jsb29kaG91bmQvdG9rZW5pemVycy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9jb21wb25lbnRzL2VudGl0eS1zZWFyY2gtaW5wdXQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy9ldmVudC1lbWl0dGVyLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2NvbXBvbmVudHMvZm9ybS9mb3JtLW9iamVjdC1tYXBwZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy9mb3JtL3N1Ym1pdHRhYmxlLWlucHV0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2NvbXBvbmVudHMvbW9kYWwuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy9uYXZiYXItaGFuZGxlci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9jb21wb25lbnRzL3BhZ2luYXRpb24vZHluYW1pYy1wYWdpbmF0b3IuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy9yb3V0ZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2NhdGVnb3JpZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2NvbWJpbmF0aW9uLW1vZGFsL2luZGV4LmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9kcm9wem9uZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvZmlsdGVycy9pbmRleC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvZ2VuZXJhdG9yL2luZGV4LmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9uYXYtdGFicy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2VkaXQvY29tYmluYXRpb25zLWdyaWQtcmVuZGVyZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9lZGl0L2NvbWJpbmF0aW9ucy1tYW5hZ2VyLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL3Byb2R1Y3QvZWRpdC9jdXN0b21pemF0aW9ucy1tYW5hZ2VyLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL3Byb2R1Y3QvZWRpdC9mZWF0dXJlLXZhbHVlcy1tYW5hZ2VyLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL3Byb2R1Y3QvZWRpdC9wcm9kdWN0LWZvb3Rlci1tYW5hZ2VyLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL3Byb2R1Y3QvZWRpdC9wcm9kdWN0LWZvcm0tbWFwcGluZy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2VkaXQvcHJvZHVjdC1mb3JtLW1vZGVsLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL3Byb2R1Y3QvZWRpdC9wcm9kdWN0LW1vZHVsZXMtbWFuYWdlci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2VkaXQvcHJvZHVjdC1wYXJ0aWFsLXVwZGF0ZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9lZGl0L3Byb2R1Y3Qtc2VvLW1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9lZGl0L3Byb2R1Y3Qtc3VwcGxpZXJzLW1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9lZGl0L3Byb2R1Y3QtdHlwZS1tYW5hZ2VyLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL3Byb2R1Y3QvZWRpdC9yZWRpcmVjdC1vcHRpb24tbWFuYWdlci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2VkaXQvdmlydHVhbC1wcm9kdWN0LW1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9taXhpbnMvaXMtYXR0cmlidXRlLXNlbGVjdGVkLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL3Byb2R1Y3QvcHJvZHVjdC1ldmVudC1tYXAuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9wcm9kdWN0LW1hcC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L3NlcnZpY2VzL2F0dHJpYnV0ZS1ncm91cHMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9zZXJ2aWNlcy9jYXRlZ29yaWVzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL3Byb2R1Y3Qvc2VydmljZXMvY29tYmluYXRpb25zLXNlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9zZXJ2aWNlcy9pbWFnZXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9zdXBwbGllcnMtbWFwLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3Z1ZS9kaXJlY3RpdmVzL2NsaWNrLW91dHNpZGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvdnVlL3BsdWdpbnMvdnVlLWkxOG4vcmVwbGFjZS1mb3JtYXR0ZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdL2pzL2FwcC91dGlscy9zZXJwL3NlcnAudnVlIiwid2VicGFjazovL1tuYW1lXS9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvY29tYmluYXRpb24tbW9kYWwvQ29tYmluYXRpb25Nb2RhbC52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdL2pzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9jb21iaW5hdGlvbi1tb2RhbC9IaXN0b3J5LnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2Ryb3B6b25lL0Ryb3B6b25lLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2Ryb3B6b25lL0Ryb3B6b25lUGhvdG9Td2lwZS52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdL2pzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9kcm9wem9uZS9Ecm9wem9uZVdpbmRvdy52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdL2pzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9maWx0ZXJzL0ZpbHRlckRyb3Bkb3duLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2ZpbHRlcnMvRmlsdGVycy52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdL2pzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9nZW5lcmF0b3IvQXR0cmlidXRlc1NlbGVjdG9yLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2dlbmVyYXRvci9Db21iaW5hdGlvbkdlbmVyYXRvci52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdL2pzL3Z1ZS9jb21wb25lbnRzL01vZGFsLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vanMvdnVlL2NvbXBvbmVudHMvUGFnaW5hdGlvbi52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9hcnJheS9mcm9tLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2Fzc2lnbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3QvdmFsdWVzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvcmVnZW5lcmF0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JpZ251bWJlci5qcy9iaWdudW1iZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9hcnJheS9mcm9tLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2Fzc2lnbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvdmFsdWVzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vcHJvbWlzZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvZi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jcmVhdGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jdHguanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZm9yLW9mLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZ2xvYmFsLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2h0bWwuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lvYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1jYWxsLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1zdGVwLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlcmF0b3JzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbGlicmFyeS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX21pY3JvdGFzay5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1zYXAuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wZXJmb3JtLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdGFzay5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191aWQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191c2VyLWFnZW50LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5hcnJheS5mcm9tLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LnByb21pc2UuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3V0aWxzL3NlcnAvc2VycC52dWU/ZmE4YyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvY29tYmluYXRpb24tbW9kYWwvQ29tYmluYXRpb25Nb2RhbC52dWU/NDZiMCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvY29tYmluYXRpb24tbW9kYWwvSGlzdG9yeS52dWU/NDFhNyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvZHJvcHpvbmUvRHJvcHpvbmUudnVlP2JiNTIiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2Ryb3B6b25lL0Ryb3B6b25lUGhvdG9Td2lwZS52dWU/NTkwZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvZHJvcHpvbmUvRHJvcHpvbmVXaW5kb3cudnVlPzNkMjIiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2ZpbHRlcnMvRmlsdGVyRHJvcGRvd24udnVlP2Y1ZWMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2ZpbHRlcnMvRmlsdGVycy52dWU/OTAxNCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvZ2VuZXJhdG9yL0F0dHJpYnV0ZXNTZWxlY3Rvci52dWU/MWI3YiIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy92dWUvY29tcG9uZW50cy9Nb2RhbC52dWU/Yzk5YSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy92dWUvY29tcG9uZW50cy9QYWdpbmF0aW9uLnZ1ZT8zM2M0Iiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2Zvcy1yb3V0aW5nL2Rpc3Qvcm91dGluZy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvbG9kYXNoL2xvZGFzaC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvcGVyZmVjdC1zY3JvbGxiYXIvZGlzdC9wZXJmZWN0LXNjcm9sbGJhci5lc20uanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL3Bob3Rvc3dpcGUvZGlzdC9waG90b3N3aXBlLXVpLWRlZmF1bHQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL3Bob3Rvc3dpcGUvZGlzdC9waG90b3N3aXBlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUtbW9kdWxlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL3R5cGVhaGVhZC5qcy9kaXN0L3R5cGVhaGVhZC5idW5kbGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL3Z1ZS1pMThuL2Rpc3QvdnVlLWkxOG4uZXNtLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2FwcC91dGlscy9zZXJwL3NlcnAudnVlPzNkODUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3V0aWxzL3NlcnAvc2VycC52dWU/YmY2MiIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9hcHAvdXRpbHMvc2VycC9zZXJwLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvY29tYmluYXRpb24tbW9kYWwvQ29tYmluYXRpb25Nb2RhbC52dWU/NzBmZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvY29tYmluYXRpb24tbW9kYWwvQ29tYmluYXRpb25Nb2RhbC52dWU/YzMxMiIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvY29tYmluYXRpb24tbW9kYWwvQ29tYmluYXRpb25Nb2RhbC52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2NvbWJpbmF0aW9uLW1vZGFsL0hpc3RvcnkudnVlPzlkMTMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2NvbWJpbmF0aW9uLW1vZGFsL0hpc3RvcnkudnVlP2MxMmMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2NvbWJpbmF0aW9uLW1vZGFsL0hpc3RvcnkudnVlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9kcm9wem9uZS9Ecm9wem9uZS52dWU/MjUzMiIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvZHJvcHpvbmUvRHJvcHpvbmUudnVlP2NiMzciLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2Ryb3B6b25lL0Ryb3B6b25lLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvZHJvcHpvbmUvRHJvcHpvbmVQaG90b1N3aXBlLnZ1ZT9mNjAzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9kcm9wem9uZS9Ecm9wem9uZVBob3RvU3dpcGUudnVlP2RiYWEiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2Ryb3B6b25lL0Ryb3B6b25lUGhvdG9Td2lwZS52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2Ryb3B6b25lL0Ryb3B6b25lV2luZG93LnZ1ZT9lMjNmIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9kcm9wem9uZS9Ecm9wem9uZVdpbmRvdy52dWU/NjljYSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvZHJvcHpvbmUvRHJvcHpvbmVXaW5kb3cudnVlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9maWx0ZXJzL0ZpbHRlckRyb3Bkb3duLnZ1ZT8wZTY0Iiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9maWx0ZXJzL0ZpbHRlckRyb3Bkb3duLnZ1ZT8xNjgyIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9maWx0ZXJzL0ZpbHRlckRyb3Bkb3duLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvZmlsdGVycy9GaWx0ZXJzLnZ1ZT9jYThmIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9maWx0ZXJzL0ZpbHRlcnMudnVlP2I1MTAiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2ZpbHRlcnMvRmlsdGVycy52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2dlbmVyYXRvci9BdHRyaWJ1dGVzU2VsZWN0b3IudnVlPzUyZGYiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2dlbmVyYXRvci9BdHRyaWJ1dGVzU2VsZWN0b3IudnVlP2VjOTkiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2dlbmVyYXRvci9BdHRyaWJ1dGVzU2VsZWN0b3IudnVlIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9nZW5lcmF0b3IvQ29tYmluYXRpb25HZW5lcmF0b3IudnVlPzNiMzciLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2dlbmVyYXRvci9Db21iaW5hdGlvbkdlbmVyYXRvci52dWU/NjFhYyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvZ2VuZXJhdG9yL0NvbWJpbmF0aW9uR2VuZXJhdG9yLnZ1ZSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy92dWUvY29tcG9uZW50cy9Nb2RhbC52dWU/YWEzNCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy92dWUvY29tcG9uZW50cy9Nb2RhbC52dWU/MzEyOSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy92dWUvY29tcG9uZW50cy9Nb2RhbC52dWUiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvdnVlL2NvbXBvbmVudHMvUGFnaW5hdGlvbi52dWU/MDQwYSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy92dWUvY29tcG9uZW50cy9QYWdpbmF0aW9uLnZ1ZT9jMTZjIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3Z1ZS9jb21wb25lbnRzL1BhZ2luYXRpb24udnVlIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvYXBwL3V0aWxzL3NlcnAvc2VycC52dWU/YjAyMCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvY29tYmluYXRpb24tbW9kYWwvQ29tYmluYXRpb25Nb2RhbC52dWU/MmY1YyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvY29tYmluYXRpb24tbW9kYWwvSGlzdG9yeS52dWU/ZWI2NyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvZHJvcHpvbmUvRHJvcHpvbmUudnVlPzhkMmEiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2Ryb3B6b25lL0Ryb3B6b25lUGhvdG9Td2lwZS52dWU/MGVmNSIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvZHJvcHpvbmUvRHJvcHpvbmVXaW5kb3cudnVlP2Q1OTYiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2ZpbHRlcnMvRmlsdGVyRHJvcGRvd24udnVlP2YwNmEiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2ZpbHRlcnMvRmlsdGVycy52dWU/ZDFkZCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvZ2VuZXJhdG9yL0F0dHJpYnV0ZXNTZWxlY3Rvci52dWU/ZTA0MCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy92dWUvY29tcG9uZW50cy9Nb2RhbC52dWU/Y2M4OCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy92dWUvY29tcG9uZW50cy9QYWdpbmF0aW9uLnZ1ZT9jYmQxIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2xpYi9saXN0VG9TdHlsZXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLmNvbW1vbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLmNvbW1vbi5wcm9kLmpzIiwid2VicGFjazovL1tuYW1lXS9leHRlcm5hbCBcImpRdWVyeVwiIiwid2VicGFjazovL1tuYW1lXS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9bbmFtZV0vd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vW25hbWVdL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9bbmFtZV0vd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9bbmFtZV0vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9bbmFtZV0vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9bbmFtZV0vd2VicGFjay9ydW50aW1lL25vZGUgbW9kdWxlIGRlY29yYXRvciIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9wcm9kdWN0L2VkaXQvaW5kZXguanMiXSwibmFtZXMiOlsic2hvd0dyb3dsIiwidHlwZSIsIm1lc3NhZ2UiLCJkdXJhdGlvblRpbWUiLCJkdXJhdGlvbiIsInVuZGVmaW5lZCIsIndpbmRvdyIsIiQiLCJncm93bCIsInRpdGxlIiwic2l6ZSIsIlNlcnBBcHAiLCJzZWxlY3RvcnMiLCJ1cmwiLCJjb250YWluZXIiLCJsZW5ndGgiLCJ0aGlzIiwib3JpZ2luYWxVcmwiLCJ1c2VNdWx0aUxhbmciLCJtdWx0aUxhbmd1YWdlSW5wdXQiLCJtdWx0aUxhbmd1YWdlRmllbGQiLCJwb3NzaWJsZVNlbGVjdG9ycyIsInB1c2giLCJtdWx0aUxhbmdTZWxlY3RvciIsImpvaW4iLCJhdHRhY2hNdWx0aUxhbmdFdmVudHMiLCJkYXRhIiwiZGVzY3JpcHRpb24iLCJ2bSIsIlZ1ZSIsImVsIiwidGVtcGxhdGUiLCJjb21wb25lbnRzIiwic2VycCIsImluaXRpYWxpemVTZWxlY3RvcnMiLCJhdHRhY2hJbnB1dEV2ZW50cyIsIml0ZW1TZWxlY3RvciIsIm9uIiwiY2hlY2tUaXRsZSIsImNoZWNrRGVzYyIsImNoZWNrVXJsIiwiRXZlbnRFbWl0dGVyIiwiZGVmYXVsdFRpdGxlIiwid2F0Y2hlZFRpdGxlIiwiZGVmYXVsdERlc2NyaXB0aW9uIiwid2F0Y2hlZERlc2NyaXB0aW9uIiwid2F0Y2hlZE1ldGFVcmwiLCJyZXdyaXRlIiwicmVwbGFjZSIsImNsb3Nlc3QiLCJmaW5kIiwidGl0bGUxIiwidmFsIiwidGl0bGUyIiwic2V0VGl0bGUiLCJpcyIsImRlc2MxIiwiaW5uZXJUZXh0IiwiZGVzYzIiLCJ0ZXh0Iiwic2V0RGVzY3JpcHRpb24iLCJzZXRVcmwiLCJBdXRvQ29tcGxldGVTZWFyY2giLCIkc2VhcmNoSW5wdXQiLCJjb25maWciLCJzZWFyY2hJbnB1dElkIiwicHJvcCIsImlucHV0Q29uZmlnIiwibWluTGVuZ3RoIiwiaGlnaGxpZ2h0IiwiY2FjaGUiLCJoaW50IiwiZGF0YVNldENvbmZpZyIsImRpc3BsYXkiLCJ2YWx1ZSIsImxpbWl0IiwiZGF0YUxpbWl0Iiwib25TZWxlY3QiLCJzZWxlY3RlZEl0ZW0iLCJldmVudCIsIm9uQ2xvc2UiLCJkZWZhdWx0VGVtcGxhdGVzIiwic3VnZ2VzdGlvbiIsIml0ZW0iLCJkaXNwbGF5U3VnZ2VzdGlvbiIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInBlbmRpbmciLCJxdWVyeSIsIm5vdEZvdW5kIiwidGVtcGxhdGVzIiwiYnVpbGRUeXBlYWhlYWQiLCJ0eXBlYWhlYWQiLCJiaW5kIiwiZSIsInRva2VuaXplciIsImxldHRlcnMiLCJ0b2tlbnMiLCJCbG9vZGhvdW5kIiwidG9rZW5pemVycyIsIm5vbndvcmQiLCJmb3JFYWNoIiwidG9rZW4iLCJpIiwic3Vic3RyIiwib2JqIiwia2V5cyIsImFyZ3MiLCJ0b2tlbml6ZXJLZXlzIiwiXyIsImlzQXJyYXkiLCJzbGljZSIsImtleSIsImNvbmNhdCIsInRvU3RyaW5nIiwiRW50aXR5U2VhcmNoSW5wdXQiLCIkZW50aXR5U2VhcmNoSW5wdXQiLCJvcHRpb25zIiwiZW50aXR5U2VhcmNoSW5wdXRJZCIsIiRhdXRvQ29tcGxldGVTZWFyY2hDb250YWluZXIiLCIkc2VsZWN0aW9uQ29udGFpbmVyIiwic2VhcmNoSW5wdXRGdWxsTmFtZSIsImlucHV0T3B0aW9ucyIsImJ1aWxkUmVtb3RlU291cmNlIiwiYnVpbGRBdXRvQ29tcGxldGVTZWFyY2giLCJyZW1vdGVVcmwiLCJlbnRpdHlSZW1vdGVTb3VyY2UiLCJyZW1vdGUiLCJ2YWx1ZXMiLCJjbGVhclNlbGVjdGVkSXRlbXMiLCJlYWNoIiwiYXBwZW5kU2VsZWN0ZWRJdGVtIiwiYXV0b1NlYXJjaENvbmZpZyIsInNvdXJjZSIsImVudGl0eSIsImVudGl0eUltYWdlIiwiaW1hZ2UiLCJuYW1lIiwib25TZWxlY3Rpb25DbG9zZSIsInJlcGxhY2VTZWxlY3RlZEl0ZW0iLCJhdXRvU2VhcmNoIiwic291cmNlQ29uZmlnIiwibWFwcGluZ1ZhbHVlIiwiZGF0dW1Ub2tlbml6ZXIiLCJ3aGl0ZXNwYWNlIiwicXVlcnlUb2tlbml6ZXIiLCJpZGVudGlmeSIsIndpbGRjYXJkIiwidHJhbnNmb3JtIiwicmVzcG9uc2UiLCJ0YXJnZXQiLCJyZW1vdmUiLCJhZGRTZWxlY3RlZENvbnRlbnRUb0NvbnRhaW5lciIsImZvcm1JZEl0ZW0iLCJzZWxlY3RlZEh0bWwiLCJyZW5kZXJTZWxlY3RlZCIsIiRzZWxlY3RlZE5vZGUiLCIkaGlkZGVuSW5wdXQiLCJhcHBlbmQiLCJ0cmlnZ2VyIiwiaW5uZXJUZW1wbGF0ZUh0bWwiLCJodG1sIiwiRXZlbnRFbWl0dGVyQ2xhc3MiLCJGb3JtT2JqZWN0TWFwcGVyIiwiJGZvcm0iLCJtb2RlbE1hcHBpbmciLCJldmVudEVtaXR0ZXIiLCJmdWxsTW9kZWxNYXBwaW5nIiwidXBkYXRlTW9kZWxFdmVudE5hbWUiLCJ1cGRhdGVNb2RlbCIsIm1vZGVsVXBkYXRlZEV2ZW50TmFtZSIsIm1vZGVsVXBkYXRlZCIsIm1vZGVsRmllbGRVcGRhdGVkRXZlbnROYW1lIiwibW9kZWxGaWVsZFVwZGF0ZWQiLCJ3YXRjaGVkUHJvcGVydGllcyIsImluaXRGb3JtTWFwcGluZyIsInVwZGF0ZUZ1bGxPYmplY3QiLCJ3YXRjaFVwZGF0ZXMiLCJnZXRNb2RlbCIsIm1vZGVsIiwiZ2V0SW5wdXRzRm9yIiwibW9kZWxLZXkiLCJpbnB1dE5hbWVzIiwiaW5wdXRzIiwiZG9tRm9ybSIsImdldCIsImlucHV0TmFtZSIsImlucHV0c0J5TmFtZSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpbnB1dCIsInNldCIsImdldFZhbHVlIiwidXBkYXRlSW5wdXRWYWx1ZSIsInVwZGF0ZU9iamVjdEJ5S2V5IiwiZW1pdCIsIndhdGNoIiwiY2FsbGJhY2siLCJtb2RlbEtleXMiLCJzcGxpdCIsInNlcmlhbGl6ZUpTT04iLCJkZWVwR2V0IiwiZGVib3VuY2UiLCJpbnB1dFVwZGF0ZWQiLCJtYXhXYWl0IiwiY3VycmVudFRhcmdldCIsImZvcm1NYXBwaW5nIiwidXBkYXRlZFZhbHVlIiwidXBkYXRlZE1vZGVsS2V5Iiwic291cmNlSW5wdXROYW1lIiwibW9kZWxJbnB1dHMiLCJBcnJheSIsInVwZGF0ZUlucHV0QnlOYW1lIiwiJGlucHV0IiwiY29uc29sZSIsImVycm9yIiwic2VyaWFsaXplZEZvcm0iLCJmb3JtS2V5cyIsInNwbGl0SW5wdXROYW1lSW50b0tleXNBcnJheSIsImZvcm1WYWx1ZSIsInByZXZpb3VzVmFsdWUiLCJkZWVwU2V0IiwidXBkYXRlRXZlbnQiLCJvYmplY3QiLCJhbGlhc0Zvcm1NYXBwaW5nIiwiYWRkRm9ybU1hcHBpbmciLCJmb3JtTmFtZSIsIlN1Ym1pdHRhYmxlSW5wdXQiLCJ3cmFwcGVyU2VsZWN0b3IiLCJpbnB1dFNlbGVjdG9yIiwiYnV0dG9uU2VsZWN0b3IiLCJpbml0IiwidGhhdCIsImRvY3VtZW50IiwicmVmcmVzaEJ1dHRvblN0YXRlIiwic3VibWl0SW5wdXQiLCJrZXlDb2RlIiwicHJldmVudERlZmF1bHQiLCJidXR0b24iLCJmaW5kQnV0dG9uIiwiZmluZElucHV0IiwidG9nZ2xlTG9hZGluZyIsInRoZW4iLCJ0b2dnbGVCdXR0b25WaXNpYmlsaXR5IiwiY2F0Y2giLCJ0b2dnbGVFcnJvciIsInJlc3BvbnNlSlNPTiIsImVycm9ycyIsIm1lc3NhZ2VzIiwidmlzaWJsZSIsInZhbHVlV2FzQ2hhbmdlZCIsImlucHV0VmFsdWVDaGFuZ2VkIiwidG9nZ2xlQnV0dG9uQWN0aXZpdHkiLCJhY3RpdmUiLCJ0b2dnbGVDbGFzcyIsImxvYWRpbmciLCJkb21FbGVtZW50IiwiaW5pdGlhbFZhbHVlIiwibmV3VmFsdWUiLCJoYXNDbGFzcyIsInJlbW92ZUNsYXNzIiwiTnVtYmVyIiwicGFyYW1zIiwiY29uZmlybUNhbGxiYWNrIiwiY2FuY2VsQ2FsbGJhY2siLCJpZCIsImNsb3NhYmxlIiwibW9kYWwiLCJjb25maXJtVGl0bGUiLCJjb25maXJtTWVzc2FnZSIsImNsb3NlQnV0dG9uTGFiZWwiLCJjb25maXJtQnV0dG9uTGFiZWwiLCJjb25maXJtQnV0dG9uQ2xhc3MiLCJjdXN0b21CdXR0b25zIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTGlzdCIsImFkZCIsImRpYWxvZyIsImNvbnRlbnQiLCJoZWFkZXIiLCJpbm5lckhUTUwiLCJjbG9zZUljb24iLCJzZXRBdHRyaWJ1dGUiLCJkYXRhc2V0IiwiZGlzbWlzcyIsImJvZHkiLCJmb290ZXIiLCJjbG9zZUJ1dHRvbiIsImNvbmZpcm1CdXR0b24iLCJhcHBlbmRDaGlsZCIsIk1vZGFsIiwiJG1vZGFsIiwic2hvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJiYWNrZHJvcCIsImtleWJvYXJkIiwicXVlcnlTZWxlY3RvciIsIk5hdmJhckhhbmRsZXIiLCIkbmF2aWdhdGlvbkNvbnRhaW5lciIsInRhYlByZWZpeCIsIndhdGNoTmF2YmFyIiwid2F0Y2hUYWJMaW5rcyIsInN3aXRjaE9uUGFnZUxvYWQiLCJtYXRjaGluZ1RhYnMiLCJ0YWJMaW5rIiwiZmlyc3QiLCJzd2l0Y2hUb1RhYiIsInRhYiIsImNsaWNrIiwidXBkYXRlQnJvd3Nlckhhc2giLCJhdHRyIiwiaGFzaE5hbWUiLCJoaXN0b3J5IiwicHVzaFN0YXRlIiwibG9jYXRpb24iLCJoYXNoIiwic3dpdGNoVG9UYXJnZXQiLCJlcnJvclRhYnMiLCJlcnJvclRhYiIsIkR5bmFtaWNQYWdpbmF0b3IiLCJjb250YWluZXJTZWxlY3RvciIsInBhZ2luYXRpb25TZXJ2aWNlIiwicmVuZGVyZXIiLCJzdGFydGluZ1BhZ2UiLCJzZWxlY3RvcnNNYXAiLCIkcGFnaW5hdGlvbkNvbnRhaW5lciIsInNldFNlbGVjdG9yc01hcCIsImN1cnJlbnRQYWdlIiwicGFnaW5hdGUiLCJwYWdlIiwiZ2V0Q3VycmVudFBhZ2UiLCJwYWdlTGluayIsImp1bXBUb1BhZ2VJbnB1dCIsImtleXByZXNzIiwid2hpY2giLCJnZXRWYWxpZFBhZ2VOdW1iZXIiLCJsaW1pdFNlbGVjdCIsImdldExpbWl0IiwiZmV0Y2giLCJjYWxjdWxhdGVPZmZzZXQiLCJjb3VudFBhZ2VzIiwidG90YWwiLCJyZWZyZXNoQnV0dG9uc0RhdGEiLCJyZWZyZXNoSW5mb0xhYmVsIiwidG9nZ2xlVGFyZ2V0QXZhaWxhYmlsaXR5IiwiZmlyc3RQYWdlSXRlbSIsInByZXZpb3VzUGFnZUl0ZW0iLCJuZXh0UGFnZUl0ZW0iLCJwYWdlc0NvdW50IiwibGFzdFBhZ2VJdGVtIiwicmVuZGVyIiwicHJlc3RhU2hvcFVpS2l0IiwiaW5pdFRvb2xUaXBzIiwibmV4dFBhZ2VCdG4iLCJwcmV2aW91c1BhZ2VCdG4iLCJsYXN0UGFnZUJ0biIsImluZm9MYWJlbCIsInBhZ2luYXRpb25JbmZvTGFiZWwiLCJmcm9tIiwiTWF0aCIsInJvdW5kIiwidG8iLCJtb2RpZmllZEluZm9UZXh0IiwidGFyZ2V0U2VsZWN0b3IiLCJlbmFibGUiLCJhZGRDbGFzcyIsImNlaWwiLCJmaXJzdFBhZ2VCdG4iLCJSb3V0ZXIiLCJwcmVzdGFzaG9wIiwiY3VzdG9tUm91dGVzIiwicm91dGVzIiwiUm91dGluZyIsInNldERhdGEiLCJzZXRCYXNlVXJsIiwicm91dGUiLCJ0b2tlbml6ZWRQYXJhbXMiLCJfdG9rZW4iLCJnZW5lcmF0ZSIsIlByb2R1Y3RDYXRlZ29yeU1hcCIsIlByb2R1Y3RNYXAiLCJjYXRlZ29yaWVzIiwiQ2F0ZWdvcmllc01hbmFnZXIiLCJjYXRlZ29yaWVzQ29udGFpbmVyIiwidHlwZWFoZWFkRGF0YXMiLCJjYXRlZ29yeVRyZWUiLCJwcm90b3R5cGVUZW1wbGF0ZSIsInByb3RvdHlwZU5hbWUiLCJleHBhbmRBbGxCdXR0b24iLCJyZWR1Y2VBbGxCdXR0b24iLCJpbml0Q2F0ZWdvcmllcyIsImdldENhdGVnb3JpZXMiLCJyZWdleHBTdHJpbmciLCJjaGVja2JveE5hbWUiLCJlc2NhcGVSZWdFeHAiLCJjaGVja2JveElkUmVnZXhwIiwiUmVnRXhwIiwicmFkaW9OYW1lIiwicmFkaW9JZFJlZ2V4cCIsImluaXRUeXBlYWhlYWREYXRhIiwiaW5pdFR5cGVhaGVhZCIsImluaXRUcmVlIiwidXBkYXRlQ2F0ZWdvcmllc1RhZ3MiLCJpbml0aWFsRWxlbWVudHMiLCJ0cmVlRWxlbWVudCIsImNoZWNrYm94SW5wdXQiLCJjYXRlZ29yeUlkIiwiZ2V0SWRGcm9tQ2hlY2tib3giLCJjYXRlZ29yeSIsImdlbmVyYXRlQ2F0ZWdvcnlUcmVlIiwidG9nZ2xlQWxsIiwiY2hlY2tib3giLCJwYXJlbnROb2RlIiwicmFkaW9JbnB1dCIsImNoZWNrZWQiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJ1cGRhdGVDaGVja2JveCIsInNlbGVjdGVkRGVmYXVsdENhdGVnb3J5IiwidXBkYXRlRGVmYXVsdENoZWNrYm94IiwiZmllbGRzZXQiLCJsb2FkZXIiLCJjYXRlZ29yeU5vZGUiLCJnZW5lcmF0ZVRyZWVFbGVtZW50IiwiY2hpbGRyZW5MaXN0IiwiaGFzQ2hpbGRyZW4iLCJjaGlsZHJlbiIsInRvZ2dsZSIsInRyZWVFbGVtZW50SW5wdXRzIiwiaXNFeHBhbmRlZCIsImNvbnRhaW5zIiwiY2hpbGRDYXRlZ29yeSIsImNoaWxkVHJlZSIsImNyZWF0ZVJhbmdlIiwiY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IiwidHJpbSIsImZpcnN0Q2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJjcmVhdGVUZXh0Tm9kZSIsInJhZGlvVHJlZUVsZW1lbnQiLCJjaGVja2JveFRyZWVFbGVtZW50IiwibWF0ZXJpYWxDaGVja2JveCIsIlByb2R1Y3RFdmVudE1hcCIsInVwZGF0ZVN1Ym1pdEJ1dHRvblN0YXRlIiwiZXhwYW5kZWQiLCJzdHlsZSIsImV2ZXJ5SXRlbXMiLCJvcGVuQ2F0ZWdvcnlQYXJlbnRzIiwicGFyZW50SXRlbSIsImNoaWxkTm9kZXMiLCJwYXJlbnRCcmVhZGNydW1iIiwiYnJlYWRjcnVtYiIsIlRva2VuaXplcnMiLCJsb2NhbCIsInNlbGVjdENhdGVnb3J5Iiwic2VhcmNoSW5wdXQiLCJjaGVja2VkQ2hlY2tib3hlcyIsImNoZWNrZWRDaGVja2JveElucHV0cyIsInRhZ3NDb250YWluZXIiLCJkZWZhdWx0Q2F0ZWdvcnlJZCIsImdldERlZmF1bHRDYXRlZ29yeUlkIiwiZ2V0Q2F0ZWdvcnlCeUlkIiwicmVtb3ZlQ3Jvc3NUZW1wbGF0ZSIsImZyYWciLCJjbG9zZUxpbmsiLCJ1bnNlbGVjdENhdGVnb3J5Iiwic2VhcmNoQ2F0ZWdvcnkiLCJzZWFyY2hlZENhdGVnb3J5IiwiZGVmYXVsdFJhZGlvSW5wdXQiLCJnZXRJZEZyb21SYWRpbyIsIm1hdGNoZXMiLCJtYXRjaCIsImNvbWJpbmF0aW9uTW9kYWxTZWxlY3RvciIsInByb2R1Y3RJZCIsImVtcHR5SW1hZ2UiLCJ0cmFuc2xhdGlvbnMiLCJKU09OIiwicGFyc2UiLCJpMThuIiwiVnVlSTE4biIsImxvY2FsZSIsImZvcm1hdHRlciIsIlJlcGxhY2VGb3JtYXR0ZXIiLCJlbiIsIkNvbWJpbmF0aW9uTW9kYWwiLCJ1c2UiLCJpbWFnZXNDb250YWluZXJTZWxlY3RvciIsImxvY2FsZXMiLCJEcm9wem9uZSIsImNvbWJpbmF0aW9uc0ZpbHRlcnNTZWxlY3RvciIsImZpbHRlcnMiLCJGaWx0ZXJzIiwiY29tYmluYXRpb25HZW5lcmF0b3JTZWxlY3RvciIsIkNvbWJpbmF0aW9uR2VuZXJhdG9yIiwiJHdpZHRoV2l0aFRhYnMiLCIkYXJyb3ciLCJqc0Fycm93IiwiJHRhYnMiLCJqc1RhYnMiLCIkbmF2VGFicyIsImpzTmF2VGFicyIsIiRwb3NpdGlvbnMiLCIkbW92ZVRvIiwiJHRhYldpZHRoIiwiJG5hdldpZHRoIiwiaW5kZXgiLCJ3aWR0aCIsIiRkZWZhdWx0QXJyb3dXaWR0aCIsInRvZ2dsZVRhYiIsImZvcm1Db250ZW50VGFiIiwicG9zaXRpb24iLCJsZWZ0IiwiYW5pbWF0ZSIsImxlZnRBcnJvdyIsInJpZ2h0QXJyb3ciLCJDb21iaW5hdGlvbnNHcmlkUmVuZGVyZXIiLCIkY29tYmluYXRpb25zVGFibGUiLCJjb21iaW5hdGlvbnMiLCJjb21iaW5hdGlvbnNUYWJsZSIsIiRjb21iaW5hdGlvbnNUYWJsZUJvZHkiLCJjb21iaW5hdGlvbnNUYWJsZUJvZHkiLCIkbG9hZGluZ1NwaW5uZXIiLCJsb2FkaW5nU3Bpbm5lciIsInJlbmRlckNvbWJpbmF0aW9ucyIsImVtcHR5Iiwicm93SW5kZXgiLCJjb21iaW5hdGlvbiIsIiRyb3ciLCJnZXRQcm90b3R5cGVSb3ciLCIkY29tYmluYXRpb25DaGVja2JveCIsInRhYmxlUm93IiwiY29tYmluYXRpb25DaGVja2JveCIsIiRjb21iaW5hdGlvbklkSW5wdXQiLCJjb21iaW5hdGlvbklkSW5wdXQiLCIkY29tYmluYXRpb25OYW1lSW5wdXQiLCJjb21iaW5hdGlvbk5hbWVJbnB1dCIsIiRxdWFudGl0eUlucHV0IiwicXVhbnRpdHlJbnB1dCIsIiRpbXBhY3RPblByaWNlSW5wdXQiLCJpbXBhY3RPblByaWNlSW5wdXQiLCIkcmVmZXJlbmNlSW5wdXQiLCJyZWZlcmVuY2VJbnB1dCIsIiRmaW5hbFByaWNlSW5wdXQiLCJmaW5hbFByaWNlVGVJbnB1dCIsImZpbmFsUHJpY2VUZSIsInJlZmVyZW5jZSIsInF1YW50aXR5IiwiaW1wYWN0T25QcmljZSIsImVkaXRCdXR0b24iLCJkZWxldGVCdXR0b24iLCJjb21iaW5hdGlvbkltZyIsImltYWdlVXJsIiwiaXNEZWZhdWx0IiwiaXNEZWZhdWx0SW5wdXQiLCJDb21iaW5hdGlvbkV2ZW50cyIsIkNvbWJpbmF0aW9uc01hcCIsIkNvbWJpbmF0aW9uc01hbmFnZXIiLCJpbnN0YW5jZSIsIiRwcm9kdWN0Rm9ybSIsInByb2R1Y3RGb3JtIiwiJGNvbWJpbmF0aW9uc0NvbnRhaW5lciIsImNvbWJpbmF0aW9uc0NvbnRhaW5lciIsImNvbWJpbmF0aW9uSWRJbnB1dHNTZWxlY3RvciIsIiRleHRlcm5hbENvbWJpbmF0aW9uVGFiIiwiZXh0ZXJuYWxDb21iaW5hdGlvblRhYiIsIiRwcmVsb2FkZXIiLCJwcmVsb2FkZXIiLCIkcGFnaW5hdGVkTGlzdCIsImNvbWJpbmF0aW9uc1BhZ2luYXRlZExpc3QiLCIkZW1wdHlTdGF0ZSIsImVtcHR5U3RhdGUiLCJwYWdpbmF0b3IiLCJjb21iaW5hdGlvbnNSZW5kZXJlciIsImZpbHRlcnNBcHAiLCJjb21iaW5hdGlvbk1vZGFsQXBwIiwiY29tYmluYXRpb25HZW5lcmF0b3JBcHAiLCJpbml0aWFsaXplZCIsImNvbWJpbmF0aW9uc1NlcnZpY2UiLCJDb21iaW5hdGlvbnNTZXJ2aWNlIiwicHJvZHVjdEF0dHJpYnV0ZUdyb3VwcyIsIm5hdmlnYXRpb25UYWIiLCJzaG93Q29tYmluYXRpb25UYWIiLCJoaWRlQ29tYmluYXRpb25UYWIiLCJ3YXRjaEV2ZW50cyIsImZpcnN0SW5pdCIsImNvbWJpbmF0aW9uc0dlbmVyYXRvckNvbnRhaW5lciIsImVkaXRNb2RhbCIsImNvbWJpbmF0aW9uc0ZpbHRlcnNDb250YWluZXIiLCJpbml0UGFnaW5hdGVkTGlzdCIsInJlZnJlc2hDb21iaW5hdGlvbkxpc3QiLCJmaXJzdFRpbWUiLCJnZXRQcm9kdWN0QXR0cmlidXRlR3JvdXBzIiwiY2xlYXJGaWx0ZXJzIiwiaGFzQ29tYmluYXRpb25zIiwicGFnaW5hdGlvbkNvbnRhaW5lciIsImluaXRTdWJtaXR0YWJsZUlucHV0cyIsImlzRGVmYXVsdElucHV0c1NlbGVjdG9yIiwidXBkYXRlRGVmYXVsdENvbWJpbmF0aW9uIiwicmVtb3ZlQ29tYmluYXRpb25TZWxlY3RvciIsInJlbW92ZUNvbWJpbmF0aW9uIiwiaW5pdFNvcnRpbmdDb2x1bW5zIiwicmVmcmVzaFBhZ2UiLCJ1cGRhdGVBdHRyaWJ1dGVHcm91cHMiLCJhdHRyaWJ1dGVHcm91cHMiLCJjdXJyZW50RmlsdGVycyIsImdldEZpbHRlcnMiLCJhdHRyaWJ1dGVzIiwiYXR0cmlidXRlR3JvdXBJZCIsImF0dHJpYnV0ZSIsInNldEZpbHRlcnMiLCJjb21iaW5hdGlvbkdlbmVyYXRvclJlYWR5IiwiZ2VuZXJhdGVDb21iaW5hdGlvbnNCdXR0b24iLCJvcGVuQ29tYmluYXRpb25zR2VuZXJhdG9yIiwiY29tYmluYXRpb25Ub2tlbiIsImdldENvbWJpbmF0aW9uVG9rZW4iLCJxdWFudGl0eUtleSIsImNvbWJpbmF0aW9uSXRlbUZvcm0iLCJpbXBhY3RPblByaWNlS2V5IiwicmVmZXJlbmNlS2V5IiwidG9rZW5LZXkiLCJxdWFudGl0eUlucHV0V3JhcHBlciIsInVwZGF0ZUxpc3RlZENvbWJpbmF0aW9uIiwiZmluZENvbWJpbmF0aW9uSWQiLCJpbXBhY3RPblByaWNlSW5wdXRXcmFwcGVyIiwicmVmZXJlbmNlSW5wdXRXcmFwcGVyIiwic29ydGFibGVDb2x1bW5zIiwiJHNvcnRhYmxlQ29sdW1uIiwiY29sdW1uTmFtZSIsImRpcmVjdGlvbiIsInJlbW92ZURhdGEiLCJyZW1vdmVBdHRyIiwic2V0T3JkZXJCeSIsIiRkZWxldGVCdXR0b24iLCJDb25maXJtTW9kYWwiLCJlcnJvck1lc3NhZ2UiLCJjaGVja2VkSW5wdXQiLCJjaGVja2VkSW5wdXRzIiwiY2hlY2tlZERlZmF1bHRJZCIsIkN1c3RvbWl6YXRpb25zTWFuYWdlciIsIiRjdXN0b21pemF0aW9uc0NvbnRhaW5lciIsImN1c3RvbWl6YXRpb25zIiwiY3VzdG9taXphdGlvbnNDb250YWluZXIiLCIkY3VzdG9taXphdGlvbkZpZWxkc0xpc3QiLCJjdXN0b21pemF0aW9uRmllbGRzTGlzdCIsImFkZEN1c3RvbWl6YXRpb25CdG4iLCJhZGRDdXN0b21pemF0aW9uRmllbGQiLCJyZW1vdmVDdXN0b21pemF0aW9uQnRuIiwicmVtb3ZlQ3VzdG9taXphdGlvbkZpZWxkIiwiZ2V0SW5kZXgiLCJuZXdJdGVtIiwidHJhbnNsYXRhYmxlSW5wdXQiLCJyZWZyZXNoRm9ybUlucHV0cyIsInJvd0FkZGVkIiwiY3VzdG9taXphdGlvbkZpZWxkUm93Iiwicm93UmVtb3ZlZCIsIkZlYXR1cmVWYWx1ZXNNYW5hZ2VyIiwicm91dGVyIiwiJGNvbGxlY3Rpb25Db250YWluZXIiLCJmZWF0dXJlVmFsdWVzIiwiY29sbGVjdGlvbkNvbnRhaW5lciIsIiRjb2xsZWN0aW9uUm93c0NvbnRhaW5lciIsImNvbGxlY3Rpb25Sb3dzQ29udGFpbmVyIiwid2F0Y2hGZWF0dXJlU2VsZWN0b3JzIiwid2F0Y2hDdXN0b21JbnB1dHMiLCJ3YXRjaERlbGV0ZUJ1dHRvbnMiLCJ3YXRjaEFkZEJ1dHRvbiIsImFkZEZlYXR1cmVWYWx1ZSIsIm5ld0luZGV4IiwiY29sbGVjdGlvblJvdyIsIiRuZXdSb3ciLCJzZWxlY3QyIiwiZGVsZXRlRmVhdHVyZVZhbHVlIiwiJGNvbGxlY3Rpb25Sb3ciLCJjdXN0b21WYWx1ZUlucHV0IiwiaGFzQ3VzdG9tVmFsdWUiLCIkZmVhdHVyZVZhbHVlU2VsZWN0b3IiLCJmZWF0dXJlVmFsdWVTZWxlY3QiLCJmZWF0dXJlU2VsZWN0IiwiJHNlbGVjdG9yIiwiaWRGZWF0dXJlIiwiJGN1c3RvbVZhbHVlSW5wdXRzIiwiJGN1c3RvbUZlYXR1cmVJZElucHV0IiwiY3VzdG9tRmVhdHVyZUlkSW5wdXQiLCJmZWF0dXJlVmFsdWVzRGF0YSIsImZlYXR1cmVWYWx1ZSIsIlByb2R1Y3RGb290ZXJNYW5hZ2VyIiwiJGRlbGV0ZVByb2R1Y3RCdXR0b24iLCJkZWxldGVQcm9kdWN0QnV0dG9uIiwiZGVsZXRlUHJvZHVjdCIsInJlbW92ZVVybCIsInByb2R1Y3RGb3JtU3VibWl0QnV0dG9uIiwiUHJvZHVjdEZvcm1Nb2RlbCIsIm1hcHBlciIsIk9iamVjdEZvcm1NYXBwZXIiLCJQcm9kdWN0Rm9ybU1hcHBpbmciLCJwcm9kdWN0TW9kZWxVcGRhdGVkIiwidXBkYXRlZFByb2R1Y3RNb2RlbCIsInVwZGF0ZWRQcm9kdWN0RmllbGQiLCIkcHJpY2VUYXhFeGNsdWRlZElucHV0IiwicHJlY2lzaW9uIiwicHJvZHVjdEZpZWxkVXBkYXRlZCIsImdldFByb2R1Y3QiLCJwcm9kdWN0TW9kZWxLZXkiLCJ3YXRjaFByb2R1Y3RNb2RlbCIsInByb2R1Y3QiLCJ1cGRhdGVQcm9kdWN0UHJpY2VzIiwiaW5jbHVkZXMiLCIkdGF4UnVsZXNHcm91cElkSW5wdXQiLCIkc2VsZWN0ZWRUYXhPcHRpb24iLCJ0YXhSYXRlIiwiQmlnTnVtYmVyIiwiTmFOIiwiaXNOYU4iLCJ0YXhSYXRpbyIsImRpdmlkZWRCeSIsInBsdXMiLCJwcmljZVRheEluY2x1ZGVkIiwicHJpY2UiLCJ0b0ZpeGVkIiwicHJpY2VUYXhFeGNsdWRlZCIsInRpbWVzIiwiUHJvZHVjdE1vZHVsZXNNYW5hZ2VyIiwiJHByZXZpZXdDb250YWluZXIiLCJtb2R1bGVzIiwicHJldmlld0NvbnRhaW5lciIsIiRzZWxlY3RvckNvbnRhaW5lciIsInNlbGVjdG9yQ29udGFpbmVyIiwiJGNvbnRlbnRDb250YWluZXIiLCJjb250ZW50Q29udGFpbmVyIiwiJG1vZHVsZVNlbGVjdG9yIiwibW9kdWxlU2VsZWN0b3IiLCIkc2VsZWN0b3JQcmV2aWV3cyIsInNlbGVjdG9yUHJldmlld3MiLCIkbW9kdWxlQ29udGVudHMiLCJtb2R1bGVDb250ZW50cyIsInByZXZpZXdCdXR0b24iLCIkYnV0dG9uIiwic2VsZWN0TW9kdWxlIiwic2hvd1NlbGVjdGVkTW9kdWxlIiwibW9kdWxlSWQiLCJzZWxlY3RvclByZXZpZXciLCJtb2R1bGVDb250ZW50IiwiUHJvZHVjdFBhcnRpYWxVcGRhdGVyIiwiJHByb2R1Y3RGb3JtU3VibWl0QnV0dG9uIiwiaW5pdGlhbERhdGEiLCJnZXRGb3JtRGF0YUFzT2JqZWN0Iiwic3VibWl0IiwidXBkYXRlUGFydGlhbEZvcm0iLCJ3YXRjaEN1c3RvbWl6YXRpb25zIiwiaW5pdEZvcm1hdHRlZFRleHRhcmVhIiwiZWRpdG9yIiwidXBkYXRlZERhdGEiLCJnZXRVcGRhdGVkRm9ybURhdGEiLCJmb3JtTWV0aG9kIiwic3VibWl0VXBkYXRlZERhdGEiLCJhbGVydCIsIiR1cGRhdGVkRm9ybSIsImNyZWF0ZVNoYWRvd0Zvcm0iLCJhcHBlbmRUbyIsImNsb25lIiwiZmllbGROYW1lIiwiYXBwZW5kSW5wdXRUb0Zvcm0iLCJjdXJyZW50RGF0YSIsImZpZWxkVmFsdWUiLCJpc0VxdWFsIiwicGVybWFuZW50UGFyYW1ldGVyIiwiZm9ybUFycmF5Iiwic2VyaWFsaXplQXJyYXkiLCJmb3JtRmllbGQiLCJlbmRzV2l0aCIsIm11bHRpRmllbGQiLCJpbnB1dEluZGV4IiwiZmlsZUlucHV0IiwiZmlsZXMiLCJmaWxlSW5kZXgiLCJmaWxlIiwiUHJvZHVjdFNFT01hbmFnZXIiLCIkcHJldmlld0J1dHRvbiIsInByZXZpZXdVcmxCdXR0b24iLCIkcmVkaXJlY3RUeXBlSW5wdXQiLCJzZW8iLCJyZWRpcmVjdE9wdGlvbiIsInR5cGVJbnB1dCIsIiRyZWRpcmVjdFRhcmdldElucHV0IiwidGFyZ2V0SW5wdXQiLCJSZWRpcmVjdE9wdGlvbk1hbmFnZXIiLCJ0cmFuc2xhdGFibGVGaWVsZCIsInByZXZpZXdVcmwiLCJTZXJwIiwibG9jYWxlSW5wdXRTZWxlY3RvciIsInRyYW5zbGF0aW9uRmllbGRTZWxlY3RvciIsIlByb2R1Y3RTdXBwbGllcnNNYW5hZ2VyIiwic3VwcGxpZXJzRm9ybUlkIiwiZm9yY2VVcGRhdGVEZWZhdWx0Iiwic3VwcGxpZXJzTWFwIiwiJHByb2R1Y3RTdXBwbGllcnNDb2xsZWN0aW9uIiwicHJvZHVjdFN1cHBsaWVyc0NvbGxlY3Rpb24iLCIkc3VwcGxpZXJJZHNHcm91cCIsInN1cHBsaWVySWRzSW5wdXQiLCIkZGVmYXVsdFN1cHBsaWVyR3JvdXAiLCJkZWZhdWx0U3VwcGxpZXJJbnB1dCIsIiRwcm9kdWN0c1RhYmxlIiwicHJvZHVjdFN1cHBsaWVyc1RhYmxlIiwiJHByb2R1Y3RzVGFibGVCb2R5IiwicHJvZHVjdHNTdXBwbGllcnNUYWJsZUJvZHkiLCJzdXBwbGllcnMiLCJkZWZhdWx0RGF0YUZvclN1cHBsaWVyIiwiZ2V0RGVmYXVsdERhdGFGb3JTdXBwbGllciIsIm1lbW9yaXplQ3VycmVudFN1cHBsaWVycyIsInRvZ2dsZVRhYmxlVmlzaWJpbGl0eSIsInJlZnJlc2hEZWZhdWx0U3VwcGxpZXJCbG9jayIsIiRpbml0aWFsRGVmYXVsdCIsImNoZWNrYm94Q29udGFpbmVyIiwiZGVmYXVsdFN1cHBsaWVyQ2xhc3MiLCJhZGRTdXBwbGllciIsInN1cHBsaWVySWQiLCJzdXBwbGllck5hbWUiLCJsYWJlbCIsInJlbW92ZVN1cHBsaWVyIiwicmVuZGVyU3VwcGxpZXJzIiwiZ2V0U2VsZWN0ZWRTdXBwbGllcnMiLCJzaG93VGFibGUiLCJoaWRlVGFibGUiLCJzdXBwbGllciIsIm5ld1N1cHBsaWVyIiwicmVtb3ZlZCIsInNlbGVjdGVkU3VwcGxpZXIiLCJwcm9kdWN0U3VwcGxpZXJSb3ciLCJyb3dNYXAiLCJzdXBwbGllcklkSW5wdXQiLCJzdXBwbGllck5hbWVQcmV2aWV3Iiwic3VwcGxpZXJOYW1lSW5wdXQiLCJwcm9kdWN0U3VwcGxpZXJJZElucHV0IiwicHJvZHVjdFN1cHBsaWVySWQiLCJwcmljZUlucHV0IiwiY3VycmVuY3lJZElucHV0IiwiY3VycmVuY3lJZCIsInNlbGVjdGVkU3VwcGxpZXJzIiwiaGlkZURlZmF1bHRTdXBwbGllcnMiLCJzaG93RGVmYXVsdFN1cHBsaWVycyIsInNlbGVjdGVkU3VwcGxpZXJJZHMiLCJtYXAiLCJpc1ZhbGlkIiwiZGlzYWJsZWQiLCJjaGVja0ZpcnN0QXZhaWxhYmxlRGVmYXVsdFN1cHBsaWVyIiwiZmlyc3RTdXBwbGllcklkIiwicm93UHJvdG90eXBlIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiZ2V0RGF0YUZyb21Sb3ciLCJzZWxlY3RvckdlbmVyYXRvciIsIlByb2R1Y3RUeXBlTWFuYWdlciIsIiR0eXBlU2VsZWN0b3IiLCJwYXJzZUludCIsImluaXRpYWxUeXBlIiwiY29uZmlybVR5cGVTdWJtaXQiLCJjb25maXJtV2FybmluZyIsInByb2R1Y3RUeXBlIiwiQ09NQklOQVRJT05TIiwiUEFDSyIsIlZJUlRVQUwiLCJTVEFOREFSRCIsIiRyZWRpcmVjdFRhcmdldFJvdyIsIiRyZWRpcmVjdFRhcmdldExhYmVsIiwiJHJlZGlyZWN0VGFyZ2V0SGludCIsImJ1aWxkQXV0b0NvbXBsZXRlU2VhcmNoSW5wdXQiLCJ3YXRjaFJlZGlyZWN0VHlwZSIsImxhc3RTZWxlY3RlZFR5cGUiLCJjaGFuZ2UiLCJlbnRpdHlTZWFyY2hJbnB1dCIsInNldFJlbW90ZVVybCIsInNldFZhbHVlIiwic2hvd1RhcmdldCIsImhpZGVUYXJnZXQiLCJWaXJ0dWFsUHJvZHVjdE1hbmFnZXIiLCJwcm9kdWN0Rm9ybU1vZGVsIiwiJHZpcnR1YWxQcm9kdWN0Q29udGFpbmVyIiwidmlydHVhbFByb2R1Y3QiLCIkZmlsZUNvbnRlbnRDb250YWluZXIiLCJmaWxlQ29udGVudENvbnRhaW5lciIsInRvZ2dsZUNvbnRlbnRWaXNpYmlsaXR5IiwiaGFzVmlydHVhbEZpbGUiLCJzdG9jayIsImhhc1ZpcnR1YWxQcm9kdWN0RmlsZSIsImhhc0Vycm9ycyIsImludmFsaWRGaWVsZCIsInNob3dDb250ZW50IiwiaGlkZUNvbnRlbnQiLCJtZXRob2RzIiwiaXNTZWxlY3RlZCIsImF0dHJpYnV0ZUdyb3VwIiwiZHJvcHpvbmUiLCJhZGRlZEZpbGUiLCJzdWNjZXNzIiwibGFuZ3VhZ2VTZWxlY3RlZCIsInBob3Rvc3dpcGUiLCJkZXN0cm95IiwiY2xvc2VHYWxsZXJ5Iiwic2VsZWN0Q29tYmluYXRpb24iLCJwcm9kdWN0VHlwZVNlbGVjdG9yIiwibmF2aWdhdGlvbkJhciIsImRyb3B6b25lSW1hZ2VzQ29udGFpbmVyIiwiY29tYmluYXRpb25MaXN0SWQiLCJjb21iaW5hdGlvbk5hbWUiLCJlZGl0aW9uRm9ybSIsImVkaXRpb25Gb3JtSW5wdXRzIiwiZWRpdENvbWJpbmF0aW9uQnV0dG9ucyIsImltYWdlcyIsImltYWdlQ2hvaWNlIiwic2Nyb2xsQmFyIiwiY29uZmlndXJhdGlvbiIsImZpbGVNYW5hZ2VyIiwiZWxlbWVudCIsImR6VGVtcGxhdGUiLCJkelByZXZpZXciLCJzb3J0YWJsZUNvbnRhaW5lciIsInNvcnRhYmxlSXRlbXMiLCJkcm9wem9uZUNvbnRhaW5lciIsInNob3duVG9vbHRpcHMiLCJzYXZlZEltYWdlQ29udGFpbmVyIiwiaW1hZ2VJZCIsInNhdmVkSW1hZ2UiLCJjb3ZlcmVkUHJldmlldyIsIndpbmRvd0ZpbGVNYW5hZ2VyIiwicHJvZHVjdFN1cHBsaWVycyIsImNvbWJpbmF0aW9uU3VwcGxpZXJzIiwiZ2V0QWxsQXR0cmlidXRlR3JvdXBzIiwib3JkZXJCeSIsIm9yZGVyV2F5Iiwib2Zmc2V0IiwiZmlsdGVySWQiLCJyZXF1ZXN0UGFyYW1zIiwic29ydE9yZGVyIiwiY29tYmluYXRpb25JZCIsImFqYXgiLCJtZXRob2QiLCJ0b0xvd2VyQ2FzZSIsImdldFByb2R1Y3RJbWFnZXMiLCJpbWFnZXNVcmwiLCJzYXZlSW1hZ2VJbmZvcm1hdGlvbnMiLCJzZWxlY3RlZEZpbGUiLCJzYXZlVXJsIiwicHJvZHVjdEltYWdlSWQiLCJpbWFnZV9pZCIsImlzX2NvdmVyIiwibGVnZW5kcyIsImxhbmdJZCIsInJlcGxhY2VJbWFnZSIsIm5ld0ZpbGUiLCJyZXBsYWNlVXJsIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsInByb2Nlc3NEYXRhIiwiY29udGVudFR5cGUiLCJzYXZlSW1hZ2VQb3NpdGlvbiIsIm5ld1Bvc2l0aW9uIiwic29ydFVybCIsInJlbW92ZVByb2R1Y3RJbWFnZSIsImRlbGV0ZVVybCIsInBvc3QiLCJwcm9kdWN0U3VwcGxpZXJzSWQiLCJwcm9kdWN0U3VwcGxpZXJJbnB1dElkIiwic3VwcGxpZXJJbmRleCIsImJpbmRlZCIsImhhbmRsZXIiLCJwYXRoIiwibm9kZSIsImFkZExpc3RlbmVyIiwicmVtb3ZlTGlzdGVuZXIiLCJmaWx0ZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZGlyZWN0aXZlIiwiYmluZGluZyIsInVwZGF0ZSIsIm9sZFZhbHVlIiwidW5iaW5kIiwibXNnIiwicGFyYW0iLCJwbGFjZWhvbGRlciIsImluZGV4T2YiLCJtb2R1bGUiLCJleHBvcnRzIiwiX19lc01vZHVsZSIsIl9wcm9taXNlMiIsImRlZmF1bHQiLCJmbiIsImdlbiIsImFwcGx5IiwiYXJndW1lbnRzIiwicmVzb2x2ZSIsInJlamVjdCIsInN0ZXAiLCJhcmciLCJpbmZvIiwiZG9uZSIsImVyciIsIkNvbnN0cnVjdG9yIiwiVHlwZUVycm9yIiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmluZVByb3BlcnRpZXMiLCJwcm9wcyIsImRlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJfYXNzaWduMiIsIl9mcm9tMiIsImFyciIsImFycjIiLCJnbG9iYWxPYmplY3QiLCJpc051bWVyaWMiLCJtYXRoY2VpbCIsIm1hdGhmbG9vciIsImZsb29yIiwiYmlnbnVtYmVyRXJyb3IiLCJ0b29NYW55RGlnaXRzIiwiQkFTRSIsIkxPR19CQVNFIiwiTUFYX1NBRkVfSU5URUdFUiIsIlBPV1NfVEVOIiwiU1FSVF9CQVNFIiwiTUFYIiwiYml0Rmxvb3IiLCJuIiwiY29lZmZUb1N0cmluZyIsImEiLCJzIiwieiIsImoiLCJyIiwiY2hhckNvZGVBdCIsImNvbXBhcmUiLCJ4IiwieSIsImIiLCJ4YyIsImMiLCJ5YyIsImsiLCJsIiwiaW50Q2hlY2siLCJtaW4iLCJtYXgiLCJFcnJvciIsIlN0cmluZyIsImlzT2RkIiwidG9FeHBvbmVudGlhbCIsInN0ciIsImNoYXJBdCIsInRvRml4ZWRQb2ludCIsImxlbiIsInpzIiwiY29uZmlnT2JqZWN0IiwiZGl2IiwiY29udmVydEJhc2UiLCJwYXJzZU51bWVyaWMiLCJwb3cyXzUzIiwicmFuZG9tNTNiaXRJbnQiLCJiYXNlUHJlZml4IiwiZG90QWZ0ZXIiLCJkb3RCZWZvcmUiLCJpc0luZmluaXR5T3JOYU4iLCJ3aGl0ZXNwYWNlT3JQbHVzIiwiUCIsImNvbnN0cnVjdG9yIiwidmFsdWVPZiIsIk9ORSIsIkRFQ0lNQUxfUExBQ0VTIiwiUk9VTkRJTkdfTU9ERSIsIlRPX0VYUF9ORUciLCJUT19FWFBfUE9TIiwiTUlOX0VYUCIsIk1BWF9FWFAiLCJDUllQVE8iLCJNT0RVTE9fTU9ERSIsIlBPV19QUkVDSVNJT04iLCJGT1JNQVQiLCJwcmVmaXgiLCJncm91cFNpemUiLCJzZWNvbmRhcnlHcm91cFNpemUiLCJncm91cFNlcGFyYXRvciIsImRlY2ltYWxTZXBhcmF0b3IiLCJmcmFjdGlvbkdyb3VwU2l6ZSIsImZyYWN0aW9uR3JvdXBTZXBhcmF0b3IiLCJzdWZmaXgiLCJBTFBIQUJFVCIsInYiLCJhbHBoYWJldCIsImNhc2VDaGFuZ2VkIiwiaXNOdW0iLCJfaXNCaWdOdW1iZXIiLCJ0ZXN0Iiwic2VhcmNoIiwic3Vic3RyaW5nIiwiREVCVUciLCJ0b1VwcGVyQ2FzZSIsImZvcm1hdCIsInJtIiwiYzAiLCJuZSIsIm1heE9yTWluIiwibSIsIm5vcm1hbGlzZSIsInBvcCIsInNkIiwiZCIsIm5pIiwicmQiLCJwb3dzMTAiLCJvdXQiLCJST1VORF9VUCIsIlJPVU5EX0RPV04iLCJST1VORF9DRUlMIiwiUk9VTkRfRkxPT1IiLCJST1VORF9IQUxGX1VQIiwiUk9VTkRfSEFMRl9ET1dOIiwiUk9VTkRfSEFMRl9FVkVOIiwiUk9VTkRfSEFMRl9DRUlMIiwiUk9VTkRfSEFMRl9GTE9PUiIsIkVVQ0xJRCIsInAiLCJjcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJyYW5kb21CeXRlcyIsIkVYUE9ORU5USUFMX0FUIiwiUkFOR0UiLCJpc0JpZ051bWJlciIsIm1heGltdW0iLCJsdCIsIm1pbmltdW0iLCJndCIsInJhbmRvbSIsImRwIiwicmFuZCIsIlVpbnQzMkFycmF5IiwiY29weSIsInNwbGljZSIsInN1bSIsImRlY2ltYWwiLCJ0b0Jhc2VPdXQiLCJiYXNlSW4iLCJiYXNlT3V0IiwiYXJyTCIsInJldmVyc2UiLCJzaWduIiwiY2FsbGVySXNUb1N0cmluZyIsInBvdyIsIm11bHRpcGx5IiwiYmFzZSIsInRlbXAiLCJ4bG8iLCJ4aGkiLCJjYXJyeSIsImtsbyIsImtoaSIsImFMIiwiYkwiLCJjbXAiLCJzdWJ0cmFjdCIsIm1vcmUiLCJwcm9kIiwicHJvZEwiLCJxIiwicWMiLCJyZW0iLCJyZW1MIiwicmVtMCIsInhpIiwieEwiLCJ5YzAiLCJ5TCIsInl6IiwicDEiLCJwMiIsImFic29sdXRlVmFsdWUiLCJhYnMiLCJjb21wYXJlZFRvIiwiZGVjaW1hbFBsYWNlcyIsImRpdmlkZWRUb0ludGVnZXJCeSIsImlkaXYiLCJleHBvbmVudGlhdGVkQnkiLCJoYWxmIiwiaXNNb2RFeHAiLCJuSXNCaWciLCJuSXNOZWciLCJuSXNPZGQiLCJpc0ludGVnZXIiLCJtb2QiLCJpbnRlZ2VyVmFsdWUiLCJpc0VxdWFsVG8iLCJlcSIsImlzRmluaXRlIiwiaXNHcmVhdGVyVGhhbiIsImlzR3JlYXRlclRoYW5PckVxdWFsVG8iLCJndGUiLCJpc0xlc3NUaGFuIiwiaXNMZXNzVGhhbk9yRXF1YWxUbyIsImx0ZSIsImlzTmVnYXRpdmUiLCJpc1Bvc2l0aXZlIiwiaXNaZXJvIiwibWludXMiLCJ0IiwieExUeSIsInhlIiwieWUiLCJtb2R1bG8iLCJtdWx0aXBsaWVkQnkiLCJ4Y0wiLCJ5Y0wiLCJ5bG8iLCJ5aGkiLCJ6YyIsInNxcnRCYXNlIiwibmVnYXRlZCIsInNoaWZ0ZWRCeSIsInNxdWFyZVJvb3QiLCJzcXJ0IiwicmVwIiwidG9Gb3JtYXQiLCJnMSIsImcyIiwiaW50UGFydCIsImZyYWN0aW9uUGFydCIsImlzTmVnIiwiaW50RGlnaXRzIiwidG9GcmFjdGlvbiIsIm1kIiwiZDAiLCJkMSIsImQyIiwiZXhwIiwibjAiLCJuMSIsInRvTnVtYmVyIiwidG9QcmVjaXNpb24iLCJ0b0pTT04iLCIkT2JqZWN0IiwiRCIsImNyZWF0ZSIsIml0IiwiZGVzYyIsImRlZmluZVByb3BlcnR5IiwiZm9yYmlkZGVuRmllbGQiLCJpc09iamVjdCIsInRvSU9iamVjdCIsInRvTGVuZ3RoIiwidG9BYnNvbHV0ZUluZGV4IiwiSVNfSU5DTFVERVMiLCIkdGhpcyIsImZyb21JbmRleCIsIk8iLCJjb2YiLCJUQUciLCJBUkciLCJUIiwiQiIsInRyeUdldCIsImNhbGxlZSIsImNvcmUiLCJ2ZXJzaW9uIiwiX19lIiwiJGRlZmluZVByb3BlcnR5IiwiY3JlYXRlRGVzYyIsImYiLCJhRnVuY3Rpb24iLCJnbG9iYWwiLCJjdHgiLCJoaWRlIiwiaGFzIiwiJGV4cG9ydCIsIm93biIsIklTX0ZPUkNFRCIsIkYiLCJJU19HTE9CQUwiLCJHIiwiSVNfU1RBVElDIiwiUyIsIklTX1BST1RPIiwiSVNfQklORCIsIklTX1dSQVAiLCJXIiwiZXhwUHJvdG8iLCJDIiwiRnVuY3Rpb24iLCJ2aXJ0dWFsIiwiUiIsIlUiLCJleGVjIiwiaXNBcnJheUl0ZXIiLCJhbk9iamVjdCIsImdldEl0ZXJGbiIsIkJSRUFLIiwiUkVUVVJOIiwiaXRlcmFibGUiLCJlbnRyaWVzIiwiSVRFUkFUT1IiLCJpdGVyYXRvciIsInJlc3VsdCIsIml0ZXJGbiIsIm5leHQiLCJzZWxmIiwiX19nIiwiZFAiLCJkb2N1bWVudEVsZW1lbnQiLCJ1biIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiSXRlcmF0b3JzIiwiQXJyYXlQcm90byIsInJldCIsInNldFRvU3RyaW5nVGFnIiwiSXRlcmF0b3JQcm90b3R5cGUiLCJOQU1FIiwiTElCUkFSWSIsInJlZGVmaW5lIiwiJGl0ZXJDcmVhdGUiLCJnZXRQcm90b3R5cGVPZiIsIkJVR0dZIiwiS0VZUyIsIlZBTFVFUyIsInJldHVyblRoaXMiLCJCYXNlIiwiREVGQVVMVCIsIklTX1NFVCIsIkZPUkNFRCIsImdldE1ldGhvZCIsImtpbmQiLCJwcm90byIsIkRFRl9WQUxVRVMiLCJWQUxVRVNfQlVHIiwiJG5hdGl2ZSIsIiRkZWZhdWx0IiwiJGVudHJpZXMiLCIkYW55TmF0aXZlIiwiU0FGRV9DTE9TSU5HIiwicml0ZXIiLCJza2lwQ2xvc2luZyIsInNhZmUiLCJpdGVyIiwibWFjcm90YXNrIiwiT2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIsInByb2Nlc3MiLCJQcm9taXNlIiwiaXNOb2RlIiwiaGVhZCIsImxhc3QiLCJub3RpZnkiLCJmbHVzaCIsInBhcmVudCIsImRvbWFpbiIsImV4aXQiLCJlbnRlciIsIm5leHRUaWNrIiwibmF2aWdhdG9yIiwic3RhbmRhbG9uZSIsInByb21pc2UiLCJvYnNlcnZlIiwiY2hhcmFjdGVyRGF0YSIsInRhc2siLCJQcm9taXNlQ2FwYWJpbGl0eSIsIiQkcmVzb2x2ZSIsIiQkcmVqZWN0IiwiREVTQ1JJUFRPUlMiLCJnZXRLZXlzIiwiZ09QUyIsInBJRSIsInRvT2JqZWN0IiwiSU9iamVjdCIsIiRhc3NpZ24iLCJhc3NpZ24iLCJBIiwiU3ltYm9sIiwiSyIsImFMZW4iLCJnZXRTeW1ib2xzIiwiaXNFbnVtIiwiZFBzIiwiZW51bUJ1Z0tleXMiLCJJRV9QUk9UTyIsIkVtcHR5IiwiY3JlYXRlRGljdCIsImlmcmFtZURvY3VtZW50IiwiaWZyYW1lIiwic3JjIiwiY29udGVudFdpbmRvdyIsIm9wZW4iLCJ3cml0ZSIsImNsb3NlIiwiUHJvcGVydGllcyIsIklFOF9ET01fREVGSU5FIiwidG9QcmltaXRpdmUiLCJBdHRyaWJ1dGVzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiT2JqZWN0UHJvdG8iLCJhcnJheUluZGV4T2YiLCJuYW1lcyIsIiRrZXlzIiwiZmFpbHMiLCJLRVkiLCJpc0VudHJpZXMiLCJuZXdQcm9taXNlQ2FwYWJpbGl0eSIsInByb21pc2VDYXBhYmlsaXR5IiwiYml0bWFwIiwiU1BFQ0lFUyIsImRlZiIsInRhZyIsInN0YXQiLCJzaGFyZWQiLCJ1aWQiLCJTSEFSRUQiLCJzdG9yZSIsIm1vZGUiLCJjb3B5cmlnaHQiLCJ0b0ludGVnZXIiLCJkZWZpbmVkIiwiVE9fU1RSSU5HIiwicG9zIiwiZGVmZXIiLCJjaGFubmVsIiwicG9ydCIsImludm9rZSIsImNlbCIsInNldFRhc2siLCJzZXRJbW1lZGlhdGUiLCJjbGVhclRhc2siLCJjbGVhckltbWVkaWF0ZSIsIk1lc3NhZ2VDaGFubmVsIiwiRGlzcGF0Y2giLCJjb3VudGVyIiwicXVldWUiLCJydW4iLCJsaXN0ZW5lciIsIm5vdyIsInBvcnQyIiwicG9ydDEiLCJvbm1lc3NhZ2UiLCJwb3N0TWVzc2FnZSIsImltcG9ydFNjcmlwdHMiLCJyZW1vdmVDaGlsZCIsInNldFRpbWVvdXQiLCJjbGVhciIsInB4IiwidXNlckFnZW50IiwiVVNFX1NZTUJPTCIsImNsYXNzb2YiLCJjcmVhdGVQcm9wZXJ0eSIsImFycmF5TGlrZSIsIm1hcGZuIiwibWFwcGluZyIsImFkZFRvVW5zY29wYWJsZXMiLCJpdGVyYXRlZCIsIl90IiwiX2kiLCJfayIsIkFyZ3VtZW50cyIsIkludGVybmFsIiwibmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5IiwiT3duUHJvbWlzZUNhcGFiaWxpdHkiLCJXcmFwcGVyIiwiYW5JbnN0YW5jZSIsImZvck9mIiwic3BlY2llc0NvbnN0cnVjdG9yIiwibWljcm90YXNrIiwibmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUiLCJwZXJmb3JtIiwicHJvbWlzZVJlc29sdmUiLCJQUk9NSVNFIiwidmVyc2lvbnMiLCJ2OCIsIiRQcm9taXNlIiwiVVNFX05BVElWRSIsIkZha2VQcm9taXNlIiwiUHJvbWlzZVJlamVjdGlvbkV2ZW50IiwiaXNUaGVuYWJsZSIsImlzUmVqZWN0IiwiX24iLCJjaGFpbiIsIl9jIiwiX3YiLCJvayIsIl9zIiwicmVhY3Rpb24iLCJleGl0ZWQiLCJmYWlsIiwiX2giLCJvbkhhbmRsZVVuaGFuZGxlZCIsIm9uVW5oYW5kbGVkIiwidW5oYW5kbGVkIiwiaXNVbmhhbmRsZWQiLCJvbnVuaGFuZGxlZHJlamVjdGlvbiIsInJlYXNvbiIsIl9hIiwib25yZWplY3Rpb25oYW5kbGVkIiwiJHJlamVjdCIsIl9kIiwiX3ciLCIkcmVzb2x2ZSIsIndyYXBwZXIiLCJleGVjdXRvciIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsImNhcGFiaWxpdHkiLCJhbGwiLCJyZW1haW5pbmciLCIkaW5kZXgiLCJhbHJlYWR5Q2FsbGVkIiwicmFjZSIsIiRhdCIsInBvaW50IiwiJHZhbHVlcyIsIm9uRmluYWxseSIsImlzRnVuY3Rpb24iLCJjYWxsYmFja2ZuIiwiVE9fU1RSSU5HX1RBRyIsIkRPTUl0ZXJhYmxlcyIsIkNvbGxlY3Rpb24iLCJfX19DU1NfTE9BREVSX0VYUE9SVF9fXyIsImNzc1dpdGhNYXBwaW5nVG9TdHJpbmciLCJsaXN0IiwibWVkaWFRdWVyeSIsImRlZHVwZSIsImFscmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJfYXJyYXlMaWtlVG9BcnJheSIsIl9pdGVtIiwiX2FycmF5V2l0aEhvbGVzIiwiX2FyciIsIl9lIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwibyIsIm1pbkxlbiIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJjc3NNYXBwaW5nIiwiYnRvYSIsImJhc2U2NCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwic3RyaW5naWZ5Iiwic291cmNlTWFwcGluZyIsInNvdXJjZVVSTHMiLCJzb3VyY2VzIiwic291cmNlUm9vdCIsIlJlZmxlY3RPd25LZXlzIiwiUmVmbGVjdCIsIlJlZmxlY3RBcHBseSIsInJlY2VpdmVyIiwib3duS2V5cyIsImdldE93blByb3BlcnR5TmFtZXMiLCJOdW1iZXJJc05hTiIsIl9ldmVudHMiLCJfZXZlbnRzQ291bnQiLCJfbWF4TGlzdGVuZXJzIiwiZGVmYXVsdE1heExpc3RlbmVycyIsImNoZWNrTGlzdGVuZXIiLCJfZ2V0TWF4TGlzdGVuZXJzIiwiX2FkZExpc3RlbmVyIiwicHJlcGVuZCIsImV2ZW50cyIsImV4aXN0aW5nIiwid2FybmluZyIsIm5ld0xpc3RlbmVyIiwidW5zaGlmdCIsIndhcm5lZCIsInciLCJlbWl0dGVyIiwiY291bnQiLCJ3YXJuIiwib25jZVdyYXBwZXIiLCJmaXJlZCIsIndyYXBGbiIsIl9vbmNlV3JhcCIsInN0YXRlIiwid3JhcHBlZCIsIl9saXN0ZW5lcnMiLCJ1bndyYXAiLCJldmxpc3RlbmVyIiwidW53cmFwTGlzdGVuZXJzIiwiYXJyYXlDbG9uZSIsImxpc3RlbmVyQ291bnQiLCJSYW5nZUVycm9yIiwic2V0TWF4TGlzdGVuZXJzIiwiZ2V0TWF4TGlzdGVuZXJzIiwiZG9FcnJvciIsImVyIiwiY29udGV4dCIsImxpc3RlbmVycyIsInByZXBlbmRMaXN0ZW5lciIsIm9uY2UiLCJwcmVwZW5kT25jZUxpc3RlbmVyIiwib3JpZ2luYWxMaXN0ZW5lciIsInNoaWZ0Iiwic3BsaWNlT25lIiwib2ZmIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwicmF3TGlzdGVuZXJzIiwiZXZlbnROYW1lcyIsIl9leHRlbmRzIiwiX3R5cGVvZiIsIl9jbGFzc0NhbGxDaGVjayIsInNldFJvdXRlcyIsInJvdXRlc1JvdXRpbmciLCJnZXRSb3V0ZXMiLCJjb250ZXh0Um91dGluZyIsImJhc2VfdXJsIiwiZ2V0QmFzZVVybCIsInNldFByZWZpeCIsInNldFNjaGVtZSIsInNjaGVtZSIsImdldFNjaGVtZSIsInNldEhvc3QiLCJob3N0IiwiZ2V0SG9zdCIsImJ1aWxkUXVlcnlQYXJhbXMiLCJnZXRSb3V0ZSIsImciLCJoIiwiZGVmYXVsdHMiLCJob3N0dG9rZW5zIiwicmVxdWlyZW1lbnRzIiwiRlVOQ19FUlJPUl9URVhUIiwiSEFTSF9VTkRFRklORUQiLCJQTEFDRUhPTERFUiIsIldSQVBfUEFSVElBTF9GTEFHIiwiV1JBUF9BUllfRkxBRyIsIklORklOSVRZIiwiTkFOIiwiTUFYX0FSUkFZX0xFTkdUSCIsIndyYXBGbGFncyIsImFyZ3NUYWciLCJhcnJheVRhZyIsImJvb2xUYWciLCJkYXRlVGFnIiwiZXJyb3JUYWciLCJmdW5jVGFnIiwiZ2VuVGFnIiwibWFwVGFnIiwibnVtYmVyVGFnIiwib2JqZWN0VGFnIiwicHJvbWlzZVRhZyIsInJlZ2V4cFRhZyIsInNldFRhZyIsInN0cmluZ1RhZyIsInN5bWJvbFRhZyIsIndlYWtNYXBUYWciLCJhcnJheUJ1ZmZlclRhZyIsImRhdGFWaWV3VGFnIiwiZmxvYXQzMlRhZyIsImZsb2F0NjRUYWciLCJpbnQ4VGFnIiwiaW50MTZUYWciLCJpbnQzMlRhZyIsInVpbnQ4VGFnIiwidWludDhDbGFtcGVkVGFnIiwidWludDE2VGFnIiwidWludDMyVGFnIiwicmVFbXB0eVN0cmluZ0xlYWRpbmciLCJyZUVtcHR5U3RyaW5nTWlkZGxlIiwicmVFbXB0eVN0cmluZ1RyYWlsaW5nIiwicmVFc2NhcGVkSHRtbCIsInJlVW5lc2NhcGVkSHRtbCIsInJlSGFzRXNjYXBlZEh0bWwiLCJyZUhhc1VuZXNjYXBlZEh0bWwiLCJyZUVzY2FwZSIsInJlRXZhbHVhdGUiLCJyZUludGVycG9sYXRlIiwicmVJc0RlZXBQcm9wIiwicmVJc1BsYWluUHJvcCIsInJlUHJvcE5hbWUiLCJyZVJlZ0V4cENoYXIiLCJyZUhhc1JlZ0V4cENoYXIiLCJyZVRyaW1TdGFydCIsInJlV2hpdGVzcGFjZSIsInJlV3JhcENvbW1lbnQiLCJyZVdyYXBEZXRhaWxzIiwicmVTcGxpdERldGFpbHMiLCJyZUFzY2lpV29yZCIsInJlRm9yYmlkZGVuSWRlbnRpZmllckNoYXJzIiwicmVFc2NhcGVDaGFyIiwicmVFc1RlbXBsYXRlIiwicmVGbGFncyIsInJlSXNCYWRIZXgiLCJyZUlzQmluYXJ5IiwicmVJc0hvc3RDdG9yIiwicmVJc09jdGFsIiwicmVJc1VpbnQiLCJyZUxhdGluIiwicmVOb01hdGNoIiwicmVVbmVzY2FwZWRTdHJpbmciLCJyc0NvbWJvUmFuZ2UiLCJyc0NvbWJvTWFya3NSYW5nZSIsInJzTG93ZXJSYW5nZSIsInJzVXBwZXJSYW5nZSIsInJzQnJlYWtSYW5nZSIsInJzTWF0aE9wUmFuZ2UiLCJyc0JyZWFrIiwicnNDb21ibyIsInJzRGlnaXRzIiwicnNMb3dlciIsInJzTWlzYyIsInJzRml0eiIsInJzTm9uQXN0cmFsIiwicnNSZWdpb25hbCIsInJzU3VyclBhaXIiLCJyc1VwcGVyIiwicnNNaXNjTG93ZXIiLCJyc01pc2NVcHBlciIsInJzT3B0Q29udHJMb3dlciIsInJzT3B0Q29udHJVcHBlciIsInJlT3B0TW9kIiwicnNNb2RpZmllciIsInJzT3B0VmFyIiwicnNTZXEiLCJyc0Vtb2ppIiwicnNTeW1ib2wiLCJyZUFwb3MiLCJyZUNvbWJvTWFyayIsInJlVW5pY29kZSIsInJlVW5pY29kZVdvcmQiLCJyZUhhc1VuaWNvZGUiLCJyZUhhc1VuaWNvZGVXb3JkIiwiY29udGV4dFByb3BzIiwidGVtcGxhdGVDb3VudGVyIiwidHlwZWRBcnJheVRhZ3MiLCJjbG9uZWFibGVUYWdzIiwic3RyaW5nRXNjYXBlcyIsImZyZWVQYXJzZUZsb2F0IiwicGFyc2VGbG9hdCIsImZyZWVQYXJzZUludCIsImZyZWVHbG9iYWwiLCJmcmVlU2VsZiIsInJvb3QiLCJmcmVlRXhwb3J0cyIsIm5vZGVUeXBlIiwiZnJlZU1vZHVsZSIsIm1vZHVsZUV4cG9ydHMiLCJmcmVlUHJvY2VzcyIsIm5vZGVVdGlsIiwicmVxdWlyZSIsInR5cGVzIiwibm9kZUlzQXJyYXlCdWZmZXIiLCJpc0FycmF5QnVmZmVyIiwibm9kZUlzRGF0ZSIsImlzRGF0ZSIsIm5vZGVJc01hcCIsImlzTWFwIiwibm9kZUlzUmVnRXhwIiwiaXNSZWdFeHAiLCJub2RlSXNTZXQiLCJpc1NldCIsIm5vZGVJc1R5cGVkQXJyYXkiLCJpc1R5cGVkQXJyYXkiLCJmdW5jIiwidGhpc0FyZyIsImFycmF5QWdncmVnYXRvciIsImFycmF5Iiwic2V0dGVyIiwiaXRlcmF0ZWUiLCJhY2N1bXVsYXRvciIsImFycmF5RWFjaCIsImFycmF5RWFjaFJpZ2h0IiwiYXJyYXlFdmVyeSIsInByZWRpY2F0ZSIsImFycmF5RmlsdGVyIiwicmVzSW5kZXgiLCJhcnJheUluY2x1ZGVzIiwiYmFzZUluZGV4T2YiLCJhcnJheUluY2x1ZGVzV2l0aCIsImNvbXBhcmF0b3IiLCJhcnJheU1hcCIsImFycmF5UHVzaCIsImFycmF5UmVkdWNlIiwiaW5pdEFjY3VtIiwiYXJyYXlSZWR1Y2VSaWdodCIsImFycmF5U29tZSIsImFzY2lpU2l6ZSIsImJhc2VQcm9wZXJ0eSIsImJhc2VGaW5kS2V5IiwiY29sbGVjdGlvbiIsImVhY2hGdW5jIiwiYmFzZUZpbmRJbmRleCIsImZyb21SaWdodCIsInN0cmljdEluZGV4T2YiLCJiYXNlSXNOYU4iLCJiYXNlSW5kZXhPZldpdGgiLCJiYXNlTWVhbiIsImJhc2VTdW0iLCJiYXNlUHJvcGVydHlPZiIsImJhc2VSZWR1Y2UiLCJjdXJyZW50IiwiYmFzZVRpbWVzIiwiYmFzZVRyaW0iLCJzdHJpbmciLCJ0cmltbWVkRW5kSW5kZXgiLCJiYXNlVW5hcnkiLCJiYXNlVmFsdWVzIiwiY2FjaGVIYXMiLCJjaGFyc1N0YXJ0SW5kZXgiLCJzdHJTeW1ib2xzIiwiY2hyU3ltYm9scyIsImNoYXJzRW5kSW5kZXgiLCJjb3VudEhvbGRlcnMiLCJkZWJ1cnJMZXR0ZXIiLCJlc2NhcGVIdG1sQ2hhciIsImVzY2FwZVN0cmluZ0NoYXIiLCJjaHIiLCJoYXNVbmljb2RlIiwibWFwVG9BcnJheSIsIm92ZXJBcmciLCJyZXBsYWNlSG9sZGVycyIsInNldFRvQXJyYXkiLCJzZXRUb1BhaXJzIiwic3RyaW5nU2l6ZSIsImxhc3RJbmRleCIsInVuaWNvZGVTaXplIiwic3RyaW5nVG9BcnJheSIsInVuaWNvZGVUb0FycmF5IiwiYXNjaWlUb0FycmF5IiwidW5lc2NhcGVIdG1sQ2hhciIsInJ1bkluQ29udGV4dCIsInBpY2siLCJEYXRlIiwiYXJyYXlQcm90byIsImZ1bmNQcm90byIsIm9iamVjdFByb3RvIiwiY29yZUpzRGF0YSIsImZ1bmNUb1N0cmluZyIsImlkQ291bnRlciIsIm1hc2tTcmNLZXkiLCJuYXRpdmVPYmplY3RUb1N0cmluZyIsIm9iamVjdEN0b3JTdHJpbmciLCJvbGREYXNoIiwicmVJc05hdGl2ZSIsIkJ1ZmZlciIsIlVpbnQ4QXJyYXkiLCJhbGxvY1Vuc2FmZSIsImdldFByb3RvdHlwZSIsIm9iamVjdENyZWF0ZSIsInNwcmVhZGFibGVTeW1ib2wiLCJpc0NvbmNhdFNwcmVhZGFibGUiLCJzeW1JdGVyYXRvciIsInN5bVRvU3RyaW5nVGFnIiwidG9TdHJpbmdUYWciLCJnZXROYXRpdmUiLCJjdHhDbGVhclRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJjdHhOb3ciLCJjdHhTZXRUaW1lb3V0IiwibmF0aXZlQ2VpbCIsIm5hdGl2ZUZsb29yIiwibmF0aXZlR2V0U3ltYm9scyIsIm5hdGl2ZUlzQnVmZmVyIiwiaXNCdWZmZXIiLCJuYXRpdmVJc0Zpbml0ZSIsIm5hdGl2ZUpvaW4iLCJuYXRpdmVLZXlzIiwibmF0aXZlTWF4IiwibmF0aXZlTWluIiwibmF0aXZlTm93IiwibmF0aXZlUGFyc2VJbnQiLCJuYXRpdmVSYW5kb20iLCJuYXRpdmVSZXZlcnNlIiwiRGF0YVZpZXciLCJNYXAiLCJTZXQiLCJXZWFrTWFwIiwibmF0aXZlQ3JlYXRlIiwibWV0YU1hcCIsInJlYWxOYW1lcyIsImRhdGFWaWV3Q3RvclN0cmluZyIsInRvU291cmNlIiwibWFwQ3RvclN0cmluZyIsInByb21pc2VDdG9yU3RyaW5nIiwic2V0Q3RvclN0cmluZyIsIndlYWtNYXBDdG9yU3RyaW5nIiwic3ltYm9sUHJvdG8iLCJzeW1ib2xWYWx1ZU9mIiwic3ltYm9sVG9TdHJpbmciLCJsb2Rhc2giLCJpc09iamVjdExpa2UiLCJMYXp5V3JhcHBlciIsIkxvZGFzaFdyYXBwZXIiLCJ3cmFwcGVyQ2xvbmUiLCJiYXNlQ3JlYXRlIiwiYmFzZUxvZGFzaCIsImNoYWluQWxsIiwiX193cmFwcGVkX18iLCJfX2FjdGlvbnNfXyIsIl9fY2hhaW5fXyIsIl9faW5kZXhfXyIsIl9fdmFsdWVzX18iLCJfX2Rpcl9fIiwiX19maWx0ZXJlZF9fIiwiX19pdGVyYXRlZXNfXyIsIl9fdGFrZUNvdW50X18iLCJfX3ZpZXdzX18iLCJIYXNoIiwiZW50cnkiLCJMaXN0Q2FjaGUiLCJNYXBDYWNoZSIsIlNldENhY2hlIiwiX19kYXRhX18iLCJTdGFjayIsImFycmF5TGlrZUtleXMiLCJpbmhlcml0ZWQiLCJpc0FyciIsImlzQXJnIiwiaXNBcmd1bWVudHMiLCJpc0J1ZmYiLCJpc1R5cGUiLCJza2lwSW5kZXhlcyIsImlzSW5kZXgiLCJhcnJheVNhbXBsZSIsImJhc2VSYW5kb20iLCJhcnJheVNhbXBsZVNpemUiLCJzaHVmZmxlU2VsZiIsImNvcHlBcnJheSIsImJhc2VDbGFtcCIsImFycmF5U2h1ZmZsZSIsImFzc2lnbk1lcmdlVmFsdWUiLCJiYXNlQXNzaWduVmFsdWUiLCJhc3NpZ25WYWx1ZSIsIm9ialZhbHVlIiwiYXNzb2NJbmRleE9mIiwiYmFzZUFnZ3JlZ2F0b3IiLCJiYXNlRWFjaCIsImJhc2VBc3NpZ24iLCJjb3B5T2JqZWN0IiwiYmFzZUF0IiwicGF0aHMiLCJza2lwIiwibnVtYmVyIiwibG93ZXIiLCJ1cHBlciIsImJhc2VDbG9uZSIsImJpdG1hc2siLCJjdXN0b21pemVyIiwic3RhY2siLCJpc0RlZXAiLCJpc0ZsYXQiLCJpc0Z1bGwiLCJpbml0Q2xvbmVBcnJheSIsImdldFRhZyIsImlzRnVuYyIsImNsb25lQnVmZmVyIiwiaW5pdENsb25lT2JqZWN0IiwiZ2V0U3ltYm9sc0luIiwiY29weVN5bWJvbHNJbiIsImtleXNJbiIsImJhc2VBc3NpZ25JbiIsImNvcHlTeW1ib2xzIiwic3ltYm9sIiwiQ3RvciIsImNsb25lQXJyYXlCdWZmZXIiLCJkYXRhVmlldyIsImJ1ZmZlciIsImJ5dGVPZmZzZXQiLCJieXRlTGVuZ3RoIiwiY2xvbmVEYXRhVmlldyIsImNsb25lVHlwZWRBcnJheSIsInJlZ2V4cCIsImNsb25lUmVnRXhwIiwiaW5pdENsb25lQnlUYWciLCJzdGFja2VkIiwic3ViVmFsdWUiLCJnZXRBbGxLZXlzSW4iLCJnZXRBbGxLZXlzIiwiYmFzZUNvbmZvcm1zVG8iLCJiYXNlRGVsYXkiLCJ3YWl0IiwiYmFzZURpZmZlcmVuY2UiLCJpc0NvbW1vbiIsInZhbHVlc0xlbmd0aCIsIm91dGVyIiwiY29tcHV0ZWQiLCJ2YWx1ZXNJbmRleCIsInRlbXBsYXRlU2V0dGluZ3MiLCJnZXRNYXBEYXRhIiwicGFpcnMiLCJMQVJHRV9BUlJBWV9TSVpFIiwiY3JlYXRlQmFzZUVhY2giLCJiYXNlRm9yT3duIiwiYmFzZUVhY2hSaWdodCIsImJhc2VGb3JPd25SaWdodCIsImJhc2VFdmVyeSIsImJhc2VFeHRyZW11bSIsImlzU3ltYm9sIiwiYmFzZUZpbHRlciIsImJhc2VGbGF0dGVuIiwiZGVwdGgiLCJpc1N0cmljdCIsImlzRmxhdHRlbmFibGUiLCJiYXNlRm9yIiwiY3JlYXRlQmFzZUZvciIsImJhc2VGb3JSaWdodCIsImJhc2VGdW5jdGlvbnMiLCJiYXNlR2V0IiwiY2FzdFBhdGgiLCJ0b0tleSIsImJhc2VHZXRBbGxLZXlzIiwia2V5c0Z1bmMiLCJzeW1ib2xzRnVuYyIsImJhc2VHZXRUYWciLCJpc093biIsInVubWFza2VkIiwiZ2V0UmF3VGFnIiwib2JqZWN0VG9TdHJpbmciLCJiYXNlR3QiLCJvdGhlciIsImJhc2VIYXMiLCJiYXNlSGFzSW4iLCJiYXNlSW50ZXJzZWN0aW9uIiwiYXJyYXlzIiwib3RoTGVuZ3RoIiwib3RoSW5kZXgiLCJjYWNoZXMiLCJtYXhMZW5ndGgiLCJJbmZpbml0eSIsInNlZW4iLCJiYXNlSW52b2tlIiwiYmFzZUlzQXJndW1lbnRzIiwiYmFzZUlzRXF1YWwiLCJlcXVhbEZ1bmMiLCJvYmpJc0FyciIsIm90aElzQXJyIiwib2JqVGFnIiwib3RoVGFnIiwib2JqSXNPYmoiLCJvdGhJc09iaiIsImlzU2FtZVRhZyIsImVxdWFsQXJyYXlzIiwiY29udmVydCIsImlzUGFydGlhbCIsImVxdWFsQnlUYWciLCJvYmpJc1dyYXBwZWQiLCJvdGhJc1dyYXBwZWQiLCJvYmpVbndyYXBwZWQiLCJvdGhVbndyYXBwZWQiLCJvYmpQcm9wcyIsIm9iakxlbmd0aCIsIm9ialN0YWNrZWQiLCJvdGhTdGFja2VkIiwic2tpcEN0b3IiLCJvdGhWYWx1ZSIsImNvbXBhcmVkIiwib2JqQ3RvciIsIm90aEN0b3IiLCJlcXVhbE9iamVjdHMiLCJiYXNlSXNFcXVhbERlZXAiLCJiYXNlSXNNYXRjaCIsIm1hdGNoRGF0YSIsIm5vQ3VzdG9taXplciIsInNyY1ZhbHVlIiwiQ09NUEFSRV9QQVJUSUFMX0ZMQUciLCJiYXNlSXNOYXRpdmUiLCJiYXNlSXRlcmF0ZWUiLCJpZGVudGl0eSIsImJhc2VNYXRjaGVzUHJvcGVydHkiLCJiYXNlTWF0Y2hlcyIsInByb3BlcnR5IiwiYmFzZUtleXMiLCJpc1Byb3RvdHlwZSIsImJhc2VMdCIsImJhc2VNYXAiLCJpc0FycmF5TGlrZSIsImdldE1hdGNoRGF0YSIsIm1hdGNoZXNTdHJpY3RDb21wYXJhYmxlIiwiaXNLZXkiLCJpc1N0cmljdENvbXBhcmFibGUiLCJoYXNJbiIsImJhc2VNZXJnZSIsInNyY0luZGV4IiwibWVyZ2VGdW5jIiwic2FmZUdldCIsImlzVHlwZWQiLCJpc0FycmF5TGlrZU9iamVjdCIsImlzUGxhaW5PYmplY3QiLCJ0b1BsYWluT2JqZWN0IiwiYmFzZU1lcmdlRGVlcCIsImJhc2VOdGgiLCJiYXNlT3JkZXJCeSIsIml0ZXJhdGVlcyIsIm9yZGVycyIsImdldEl0ZXJhdGVlIiwiY29tcGFyZXIiLCJzb3J0Iiwib2JqQ3JpdGVyaWEiLCJjcml0ZXJpYSIsIm90aENyaXRlcmlhIiwib3JkZXJzTGVuZ3RoIiwiY29tcGFyZUFzY2VuZGluZyIsImNvbXBhcmVNdWx0aXBsZSIsImJhc2VTb3J0QnkiLCJiYXNlUGlja0J5IiwiYmFzZVNldCIsImJhc2VQdWxsQWxsIiwiYmFzZVB1bGxBdCIsImluZGV4ZXMiLCJwcmV2aW91cyIsImJhc2VVbnNldCIsImJhc2VSZXBlYXQiLCJiYXNlUmVzdCIsInN0YXJ0Iiwic2V0VG9TdHJpbmciLCJvdmVyUmVzdCIsImJhc2VTYW1wbGUiLCJiYXNlU2FtcGxlU2l6ZSIsIm5lc3RlZCIsImJhc2VTZXREYXRhIiwiYmFzZVNldFRvU3RyaW5nIiwiY29uc3RhbnQiLCJiYXNlU2h1ZmZsZSIsImJhc2VTbGljZSIsImVuZCIsImJhc2VTb21lIiwiYmFzZVNvcnRlZEluZGV4IiwicmV0SGlnaGVzdCIsImxvdyIsImhpZ2giLCJtaWQiLCJiYXNlU29ydGVkSW5kZXhCeSIsInZhbElzTmFOIiwidmFsSXNOdWxsIiwidmFsSXNTeW1ib2wiLCJ2YWxJc1VuZGVmaW5lZCIsIm90aElzRGVmaW5lZCIsIm90aElzTnVsbCIsIm90aElzUmVmbGV4aXZlIiwib3RoSXNTeW1ib2wiLCJzZXRMb3ciLCJiYXNlU29ydGVkVW5pcSIsImJhc2VUb051bWJlciIsImJhc2VUb1N0cmluZyIsImJhc2VVbmlxIiwiY3JlYXRlU2V0Iiwic2VlbkluZGV4IiwiYmFzZVVwZGF0ZSIsInVwZGF0ZXIiLCJiYXNlV2hpbGUiLCJpc0Ryb3AiLCJiYXNlV3JhcHBlclZhbHVlIiwiYWN0aW9ucyIsImFjdGlvbiIsImJhc2VYb3IiLCJiYXNlWmlwT2JqZWN0IiwiYXNzaWduRnVuYyIsInZhbHNMZW5ndGgiLCJjYXN0QXJyYXlMaWtlT2JqZWN0IiwiY2FzdEZ1bmN0aW9uIiwic3RyaW5nVG9QYXRoIiwiY2FzdFJlc3QiLCJjYXN0U2xpY2UiLCJhcnJheUJ1ZmZlciIsInR5cGVkQXJyYXkiLCJ2YWxJc0RlZmluZWQiLCJ2YWxJc1JlZmxleGl2ZSIsImNvbXBvc2VBcmdzIiwicGFydGlhbHMiLCJob2xkZXJzIiwiaXNDdXJyaWVkIiwiYXJnc0luZGV4IiwiYXJnc0xlbmd0aCIsImhvbGRlcnNMZW5ndGgiLCJsZWZ0SW5kZXgiLCJsZWZ0TGVuZ3RoIiwicmFuZ2VMZW5ndGgiLCJpc1VuY3VycmllZCIsImNvbXBvc2VBcmdzUmlnaHQiLCJob2xkZXJzSW5kZXgiLCJyaWdodEluZGV4IiwicmlnaHRMZW5ndGgiLCJpc05ldyIsImNyZWF0ZUFnZ3JlZ2F0b3IiLCJpbml0aWFsaXplciIsImNyZWF0ZUFzc2lnbmVyIiwiYXNzaWduZXIiLCJndWFyZCIsImlzSXRlcmF0ZWVDYWxsIiwiY3JlYXRlQ2FzZUZpcnN0IiwibWV0aG9kTmFtZSIsInRyYWlsaW5nIiwiY3JlYXRlQ29tcG91bmRlciIsIndvcmRzIiwiZGVidXJyIiwiY3JlYXRlQ3RvciIsInRoaXNCaW5kaW5nIiwiY3JlYXRlRmluZCIsImZpbmRJbmRleEZ1bmMiLCJjcmVhdGVGbG93IiwiZmxhdFJlc3QiLCJmdW5jcyIsInByZXJlcSIsInRocnUiLCJnZXRGdW5jTmFtZSIsImZ1bmNOYW1lIiwiZ2V0RGF0YSIsImlzTGF6aWFibGUiLCJwbGFudCIsImNyZWF0ZUh5YnJpZCIsInBhcnRpYWxzUmlnaHQiLCJob2xkZXJzUmlnaHQiLCJhcmdQb3MiLCJhcnkiLCJhcml0eSIsImlzQXJ5IiwiaXNCaW5kIiwiaXNCaW5kS2V5IiwiaXNGbGlwIiwiZ2V0SG9sZGVyIiwiaG9sZGVyc0NvdW50IiwibmV3SG9sZGVycyIsImNyZWF0ZVJlY3VycnkiLCJyZW9yZGVyIiwiY3JlYXRlSW52ZXJ0ZXIiLCJ0b0l0ZXJhdGVlIiwiYmFzZUludmVydGVyIiwiY3JlYXRlTWF0aE9wZXJhdGlvbiIsIm9wZXJhdG9yIiwiZGVmYXVsdFZhbHVlIiwiY3JlYXRlT3ZlciIsImFycmF5RnVuYyIsImNyZWF0ZVBhZGRpbmciLCJjaGFycyIsImNoYXJzTGVuZ3RoIiwidG9GaW5pdGUiLCJiYXNlUmFuZ2UiLCJjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uIiwid3JhcEZ1bmMiLCJpc0N1cnJ5IiwibmV3RGF0YSIsInNldFdyYXBUb1N0cmluZyIsImNyZWF0ZVJvdW5kIiwicGFpciIsIm5vb3AiLCJjcmVhdGVUb1BhaXJzIiwiYmFzZVRvUGFpcnMiLCJjcmVhdGVXcmFwIiwic3JjQml0bWFzayIsIm5ld0JpdG1hc2siLCJpc0NvbWJvIiwibWVyZ2VEYXRhIiwiY3JlYXRlQ3VycnkiLCJjcmVhdGVQYXJ0aWFsIiwiY3JlYXRlQmluZCIsImN1c3RvbURlZmF1bHRzQXNzaWduSW4iLCJjdXN0b21EZWZhdWx0c01lcmdlIiwiY3VzdG9tT21pdENsb25lIiwiYXJyTGVuZ3RoIiwiYXJyU3RhY2tlZCIsImFyclZhbHVlIiwiZmxhdHRlbiIsIm90aGVyRnVuYyIsInN0dWJBcnJheSIsImhhc1BhdGgiLCJoYXNGdW5jIiwiaXNMZW5ndGgiLCJBcnJheUJ1ZmZlciIsImN0b3JTdHJpbmciLCJpc01hc2thYmxlIiwic3R1YkZhbHNlIiwib3RoZXJBcmdzIiwib2xkQXJyYXkiLCJzaG9ydE91dCIsImRldGFpbHMiLCJpbnNlcnRXcmFwRGV0YWlscyIsInVwZGF0ZVdyYXBEZXRhaWxzIiwiZ2V0V3JhcERldGFpbHMiLCJsYXN0Q2FsbGVkIiwic3RhbXAiLCJtZW1vaXplIiwicXVvdGUiLCJzdWJTdHJpbmciLCJkaWZmZXJlbmNlIiwiZGlmZmVyZW5jZUJ5IiwiZGlmZmVyZW5jZVdpdGgiLCJmaW5kSW5kZXgiLCJmaW5kTGFzdEluZGV4IiwiaW50ZXJzZWN0aW9uIiwibWFwcGVkIiwiaW50ZXJzZWN0aW9uQnkiLCJpbnRlcnNlY3Rpb25XaXRoIiwicHVsbCIsInB1bGxBbGwiLCJwdWxsQXQiLCJ1bmlvbiIsInVuaW9uQnkiLCJ1bmlvbldpdGgiLCJ1bnppcCIsImdyb3VwIiwidW56aXBXaXRoIiwid2l0aG91dCIsInhvciIsInhvckJ5IiwieG9yV2l0aCIsInppcCIsInppcFdpdGgiLCJpbnRlcmNlcHRvciIsIndyYXBwZXJBdCIsImNvdW50QnkiLCJmaW5kTGFzdCIsImZvckVhY2hSaWdodCIsImdyb3VwQnkiLCJpbnZva2VNYXAiLCJrZXlCeSIsInBhcnRpdGlvbiIsInNvcnRCeSIsImJlZm9yZSIsImJpbmRLZXkiLCJXUkFQX0JJTkRfRkxBRyIsImxhc3RBcmdzIiwibGFzdFRoaXMiLCJ0aW1lcklkIiwibGFzdENhbGxUaW1lIiwibGFzdEludm9rZVRpbWUiLCJsZWFkaW5nIiwibWF4aW5nIiwiaW52b2tlRnVuYyIsInRpbWUiLCJsZWFkaW5nRWRnZSIsInRpbWVyRXhwaXJlZCIsInNob3VsZEludm9rZSIsInRpbWVTaW5jZUxhc3RDYWxsIiwidHJhaWxpbmdFZGdlIiwidGltZVdhaXRpbmciLCJyZW1haW5pbmdXYWl0IiwiZGVib3VuY2VkIiwiaXNJbnZva2luZyIsImNhbmNlbCIsImRlbGF5IiwicmVzb2x2ZXIiLCJtZW1vaXplZCIsIkNhY2hlIiwibmVnYXRlIiwib3ZlckFyZ3MiLCJ0cmFuc2Zvcm1zIiwiZnVuY3NMZW5ndGgiLCJwYXJ0aWFsIiwicGFydGlhbFJpZ2h0IiwicmVhcmciLCJpc0Vycm9yIiwiaXNOdW1iZXIiLCJpc1N0cmluZyIsInRvQXJyYXkiLCJpdGVyYXRvclRvQXJyYXkiLCJyZW1haW5kZXIiLCJpc0JpbmFyeSIsImFzc2lnbkluIiwiYXNzaWduSW5XaXRoIiwiYXNzaWduV2l0aCIsImF0IiwicHJvcHNJbmRleCIsInByb3BzTGVuZ3RoIiwiZGVmYXVsdHNEZWVwIiwibWVyZ2VXaXRoIiwiaW52ZXJ0IiwiaW52ZXJ0QnkiLCJuYXRpdmVLZXlzSW4iLCJpc1Byb3RvIiwiYmFzZUtleXNJbiIsIm1lcmdlIiwib21pdCIsIkNMT05FX0RFRVBfRkxBRyIsImJhc2VQaWNrIiwicGlja0J5IiwidG9QYWlycyIsInRvUGFpcnNJbiIsImNhbWVsQ2FzZSIsIndvcmQiLCJjYXBpdGFsaXplIiwidXBwZXJGaXJzdCIsImtlYmFiQ2FzZSIsImxvd2VyQ2FzZSIsImxvd2VyRmlyc3QiLCJzbmFrZUNhc2UiLCJzdGFydENhc2UiLCJ1cHBlckNhc2UiLCJwYXR0ZXJuIiwiaGFzVW5pY29kZVdvcmQiLCJ1bmljb2RlV29yZHMiLCJhc2NpaVdvcmRzIiwiYXR0ZW1wdCIsImJpbmRBbGwiLCJtZXRob2ROYW1lcyIsImZsb3ciLCJmbG93UmlnaHQiLCJtZXRob2RPZiIsIm1peGluIiwib3ZlciIsIm92ZXJFdmVyeSIsIm92ZXJTb21lIiwiYmFzZVByb3BlcnR5RGVlcCIsInJhbmdlIiwicmFuZ2VSaWdodCIsImF1Z2VuZCIsImFkZGVuZCIsImRpdmlkZSIsImRpdmlkZW5kIiwiZGl2aXNvciIsIm11bHRpcGxpZXIiLCJtdWx0aXBsaWNhbmQiLCJtaW51ZW5kIiwic3VidHJhaGVuZCIsImFmdGVyIiwiY2FzdEFycmF5IiwiY2h1bmsiLCJjb21wYWN0IiwiY29uZCIsImNvbmZvcm1zIiwiYmFzZUNvbmZvcm1zIiwicHJvcGVydGllcyIsImN1cnJ5IiwiY3VycnlSaWdodCIsImRyb3AiLCJkcm9wUmlnaHQiLCJkcm9wUmlnaHRXaGlsZSIsImRyb3BXaGlsZSIsImZpbGwiLCJiYXNlRmlsbCIsImZsYXRNYXAiLCJmbGF0TWFwRGVlcCIsImZsYXRNYXBEZXB0aCIsImZsYXR0ZW5EZWVwIiwiZmxhdHRlbkRlcHRoIiwiZmxpcCIsImZyb21QYWlycyIsImZ1bmN0aW9ucyIsImZ1bmN0aW9uc0luIiwiaW5pdGlhbCIsIm1hcEtleXMiLCJtYXBWYWx1ZXMiLCJtYXRjaGVzUHJvcGVydHkiLCJudGhBcmciLCJvbWl0QnkiLCJwcm9wZXJ0eU9mIiwicHVsbEFsbEJ5IiwicHVsbEFsbFdpdGgiLCJyZXN0Iiwic2FtcGxlU2l6ZSIsInNldFdpdGgiLCJzaHVmZmxlIiwic29ydGVkVW5pcSIsInNvcnRlZFVuaXFCeSIsInNlcGFyYXRvciIsInNwcmVhZCIsInRhaWwiLCJ0YWtlIiwidGFrZVJpZ2h0IiwidGFrZVJpZ2h0V2hpbGUiLCJ0YWtlV2hpbGUiLCJ0YXAiLCJ0aHJvdHRsZSIsInRvUGF0aCIsImlzQXJyTGlrZSIsInVuYXJ5IiwidW5pcSIsInVuaXFCeSIsInVuaXFXaXRoIiwidW5zZXQiLCJ1cGRhdGVXaXRoIiwidmFsdWVzSW4iLCJ3cmFwIiwiemlwT2JqZWN0IiwiemlwT2JqZWN0RGVlcCIsImVudHJpZXNJbiIsImV4dGVuZCIsImV4dGVuZFdpdGgiLCJjbGFtcCIsImNsb25lRGVlcCIsImNsb25lRGVlcFdpdGgiLCJjbG9uZVdpdGgiLCJjb25mb3Jtc1RvIiwiZGVmYXVsdFRvIiwiZXNjYXBlIiwiZXZlcnkiLCJmaW5kS2V5IiwiZmluZExhc3RLZXkiLCJmb3JJbiIsImZvckluUmlnaHQiLCJmb3JPd24iLCJmb3JPd25SaWdodCIsImluUmFuZ2UiLCJiYXNlSW5SYW5nZSIsImlzQm9vbGVhbiIsImlzRWxlbWVudCIsImlzRW1wdHkiLCJpc0VxdWFsV2l0aCIsImlzTWF0Y2giLCJpc01hdGNoV2l0aCIsImlzTmF0aXZlIiwiaXNOaWwiLCJpc051bGwiLCJpc1NhZmVJbnRlZ2VyIiwiaXNVbmRlZmluZWQiLCJpc1dlYWtNYXAiLCJpc1dlYWtTZXQiLCJsYXN0SW5kZXhPZiIsInN0cmljdExhc3RJbmRleE9mIiwibWF4QnkiLCJtZWFuIiwibWVhbkJ5IiwibWluQnkiLCJzdHViT2JqZWN0Iiwic3R1YlN0cmluZyIsInN0dWJUcnVlIiwibnRoIiwibm9Db25mbGljdCIsInBhZCIsInN0ckxlbmd0aCIsInBhZEVuZCIsInBhZFN0YXJ0IiwicmFkaXgiLCJmbG9hdGluZyIsInJlZHVjZSIsInJlZHVjZVJpZ2h0IiwicmVwZWF0Iiwic2FtcGxlIiwic29tZSIsInNvcnRlZEluZGV4Iiwic29ydGVkSW5kZXhCeSIsInNvcnRlZEluZGV4T2YiLCJzb3J0ZWRMYXN0SW5kZXgiLCJzb3J0ZWRMYXN0SW5kZXhCeSIsInNvcnRlZExhc3RJbmRleE9mIiwic3RhcnRzV2l0aCIsInN1bUJ5Iiwic2V0dGluZ3MiLCJpc0VzY2FwaW5nIiwiaXNFdmFsdWF0aW5nIiwiaW1wb3J0cyIsImltcG9ydHNLZXlzIiwiaW1wb3J0c1ZhbHVlcyIsImludGVycG9sYXRlIiwicmVEZWxpbWl0ZXJzIiwiZXZhbHVhdGUiLCJzb3VyY2VVUkwiLCJlc2NhcGVWYWx1ZSIsImludGVycG9sYXRlVmFsdWUiLCJlc1RlbXBsYXRlVmFsdWUiLCJldmFsdWF0ZVZhbHVlIiwidmFyaWFibGUiLCJ0b0xvd2VyIiwidG9TYWZlSW50ZWdlciIsInRvVXBwZXIiLCJ0cmltRW5kIiwidHJpbVN0YXJ0IiwidHJ1bmNhdGUiLCJvbWlzc2lvbiIsIm5ld0VuZCIsInVuaXF1ZUlkIiwiZWFjaFJpZ2h0IiwiVkVSU0lPTiIsImlzRmlsdGVyIiwidGFrZU5hbWUiLCJkcm9wTmFtZSIsImNoZWNrSXRlcmF0ZWUiLCJpc1Rha2VyIiwibG9kYXNoRnVuYyIsInJldFVud3JhcHBlZCIsImlzTGF6eSIsInVzZUxhenkiLCJpc0h5YnJpZCIsImlzVW53cmFwcGVkIiwib25seUxhenkiLCJjaGFpbk5hbWUiLCJkaXIiLCJpc1JpZ2h0IiwidmlldyIsImdldFZpZXciLCJpdGVyTGVuZ3RoIiwidGFrZUNvdW50IiwiaXRlckluZGV4IiwiY29tbWl0IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImNsYXNzTmFtZSIsImVsTWF0Y2hlcyIsIkVsZW1lbnQiLCJ3ZWJraXRNYXRjaGVzU2VsZWN0b3IiLCJtb3pNYXRjaGVzU2VsZWN0b3IiLCJtc01hdGNoZXNTZWxlY3RvciIsInF1ZXJ5Q2hpbGRyZW4iLCJzZWxlY3RvciIsImNoaWxkIiwiY2xzIiwic2Nyb2xsaW5nQ2xhc3NUaW1lb3V0IiwiYWRkU2Nyb2xsaW5nQ2xhc3MiLCJyZW1vdmVTY3JvbGxpbmdDbGFzcyIsImlzQWxpdmUiLCJzY3JvbGxpbmdUaHJlc2hvbGQiLCJFdmVudEVsZW1lbnQiLCJoYW5kbGVycyIsInByb3RvdHlwZUFjY2Vzc29ycyIsImV2ZW50TmFtZSIsInRoaXMkMSIsInVuYmluZEFsbCIsIkV2ZW50TWFuYWdlciIsImV2ZW50RWxlbWVudHMiLCJjcmVhdGVFdmVudCIsIkN1c3RvbUV2ZW50IiwiZXZ0IiwiaW5pdEN1c3RvbUV2ZW50IiwicHJvY2Vzc1Njcm9sbERpZmYiLCJheGlzIiwiZGlmZiIsInVzZVNjcm9sbGluZ0NsYXNzIiwiZm9yY2VGaXJlUmVhY2hFdmVudCIsImZpZWxkcyIsInJlZiIsImNvbnRlbnRIZWlnaHQiLCJjb250YWluZXJIZWlnaHQiLCJzY3JvbGxUb3AiLCJ1cCIsImRvd24iLCJyZWFjaCIsImRpc3BhdGNoRXZlbnQiLCJzZXRTY3JvbGxpbmdDbGFzc0luc3RhbnRseSIsInByb2Nlc3NTY3JvbGxEaWZmJDEiLCJ0b0ludCIsImV2ZW50RWxlbWVudCIsImVlIiwib25jZUhhbmRsZXIiLCJlbnYiLCJpc1dlYktpdCIsInN1cHBvcnRzVG91Y2giLCJtYXhUb3VjaFBvaW50cyIsIkRvY3VtZW50VG91Y2giLCJzdXBwb3J0c0llUG9pbnRlciIsIm1zTWF4VG91Y2hQb2ludHMiLCJpc0Nocm9tZSIsInVwZGF0ZUdlb21ldHJ5Iiwicm91bmRlZFNjcm9sbFRvcCIsInJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJjb250YWluZXJXaWR0aCIsImhlaWdodCIsImNvbnRlbnRXaWR0aCIsInNjcm9sbFdpZHRoIiwic2Nyb2xsSGVpZ2h0Iiwic2Nyb2xsYmFyWFJhaWwiLCJzY3JvbGxiYXJZUmFpbCIsInN1cHByZXNzU2Nyb2xsWCIsInNjcm9sbFhNYXJnaW5PZmZzZXQiLCJzY3JvbGxiYXJYQWN0aXZlIiwicmFpbFhXaWR0aCIsInJhaWxYTWFyZ2luV2lkdGgiLCJyYWlsWFJhdGlvIiwic2Nyb2xsYmFyWFdpZHRoIiwiZ2V0VGh1bWJTaXplIiwic2Nyb2xsYmFyWExlZnQiLCJuZWdhdGl2ZVNjcm9sbEFkanVzdG1lbnQiLCJzY3JvbGxMZWZ0Iiwic3VwcHJlc3NTY3JvbGxZIiwic2Nyb2xsWU1hcmdpbk9mZnNldCIsInNjcm9sbGJhcllBY3RpdmUiLCJyYWlsWUhlaWdodCIsInJhaWxZTWFyZ2luSGVpZ2h0IiwicmFpbFlSYXRpbyIsInNjcm9sbGJhcllIZWlnaHQiLCJzY3JvbGxiYXJZVG9wIiwieFJhaWxPZmZzZXQiLCJpc1J0bCIsImlzU2Nyb2xsYmFyWFVzaW5nQm90dG9tIiwiYm90dG9tIiwic2Nyb2xsYmFyWEJvdHRvbSIsInRvcCIsInNjcm9sbGJhclhUb3AiLCJ5UmFpbE9mZnNldCIsImlzU2Nyb2xsYmFyWVVzaW5nUmlnaHQiLCJyaWdodCIsInNjcm9sbGJhcllSaWdodCIsInNjcm9sbGJhcllPdXRlcldpZHRoIiwic2Nyb2xsYmFyWUxlZnQiLCJzY3JvbGxiYXJYIiwicmFpbEJvcmRlclhXaWR0aCIsInNjcm9sbGJhclkiLCJyYWlsQm9yZGVyWVdpZHRoIiwidXBkYXRlQ3NzIiwidGh1bWJTaXplIiwibWluU2Nyb2xsYmFyTGVuZ3RoIiwibWF4U2Nyb2xsYmFyTGVuZ3RoIiwiYmluZE1vdXNlU2Nyb2xsSGFuZGxlciIsInBhZ2VZIiwic3RhcnRpbmdTY3JvbGxUb3AiLCJzdGFydGluZ01vdXNlUGFnZVkiLCJzY3JvbGxCeSIsIm1vdXNlTW92ZUhhbmRsZXIiLCJ0b3VjaGVzIiwic3RvcFByb3BhZ2F0aW9uIiwibW91c2VVcEhhbmRsZXIiLCJvd25lckRvY3VtZW50IiwiYmluZE1vdmVzIiwidG91Y2hNb2RlIiwicGFnZVlPZmZzZXQiLCJwYWdlWCIsInBhZ2VYT2Zmc2V0IiwiaXNEZWZhdWx0UHJldmVudGVkIiwiZGVmYXVsdFByZXZlbnRlZCIsImFjdGl2ZUVsZW1lbnQiLCJ0YWdOYW1lIiwiY29udGVudERvY3VtZW50Iiwic2hhZG93Um9vdCIsImRlbHRhWCIsImRlbHRhWSIsIm1ldGFLZXkiLCJhbHRLZXkiLCJzaGlmdEtleSIsIndoZWVsUHJvcGFnYXRpb24iLCJzaG91bGRQcmV2ZW50RGVmYXVsdCIsIndoZWVsIiwibW91c2V3aGVlbEhhbmRsZXIiLCJ3aGVlbERlbHRhWCIsIndoZWVsRGVsdGFZIiwiZGVsdGFNb2RlIiwid2hlZWxEZWx0YSIsImdldERlbHRhRnJvbUV2ZW50IiwiY3Vyc29yIiwib3ZlcmZsb3dZIiwibWF4U2Nyb2xsVG9wIiwiY2xpZW50SGVpZ2h0Iiwib3ZlcmZsb3dYIiwibWF4U2Nyb2xsTGVmdCIsImNsaWVudFdpZHRoIiwic2hvdWxkQmVDb25zdW1lZEJ5Q2hpbGQiLCJzaG91bGRQcmV2ZW50IiwidXNlQm90aFdoZWVsQXhlcyIsIndoZWVsU3BlZWQiLCJpc1RvcCIsImlzQm90dG9tIiwib2Zmc2V0SGVpZ2h0IiwiaXNMZWZ0Iiwib2Zmc2V0V2lkdGgiLCJjdHJsS2V5Iiwib253aGVlbCIsIm9ubW91c2V3aGVlbCIsInRvdWNoIiwic3RhcnRPZmZzZXQiLCJzdGFydFRpbWUiLCJzcGVlZCIsImVhc2luZ0xvb3AiLCJ0b3VjaFN0YXJ0IiwidG91Y2hNb3ZlIiwidG91Y2hFbmQiLCJQb2ludGVyRXZlbnQiLCJNU1BvaW50ZXJFdmVudCIsImFwcGx5VG91Y2hNb3ZlIiwiZGlmZmVyZW5jZVgiLCJkaWZmZXJlbmNlWSIsImdldFRvdWNoIiwidGFyZ2V0VG91Y2hlcyIsInNob3VsZEhhbmRsZSIsInBvaW50ZXJUeXBlIiwiYnV0dG9ucyIsIk1TUE9JTlRFUl9UWVBFX01PVVNFIiwiZ2V0VGltZSIsImNsZWFySW50ZXJ2YWwiLCJjdXJyZW50T2Zmc2V0IiwiY3VycmVudFRpbWUiLCJ0aW1lR2FwIiwibWFnbml0dWRlWCIsIm1hZ25pdHVkZVkiLCJzY3JvbGxZIiwic3dpcGVFYXNpbmciLCJzZXRJbnRlcnZhbCIsImlzSW5pdGlhbGl6ZWQiLCJQZXJmZWN0U2Nyb2xsYmFyIiwidXNlclNldHRpbmdzIiwibm9kZU5hbWUiLCJvcmlnaW5hbFNjcm9sbExlZnQiLCJmb2N1cyIsImJsdXIiLCJpc05lZ2F0aXZlU2Nyb2xsIiwicmFpbFhTdHlsZSIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJyYWlsWVN0eWxlIiwic3R5bGVzIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJvdXRlcldpZHRoIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSIsImhhbmRsZXJOYW1lIiwibGFzdFNjcm9sbFRvcCIsImxhc3RTY3JvbGxMZWZ0Iiwib25TY3JvbGwiLCJyZW1vdmVQc0NsYXNzZXMiLCJwc3dwIiwiZnJhbWV3b3JrIiwiX2Z1bGxzY3JlbkFQSSIsIl9jb250cm9scyIsIl9jYXB0aW9uQ29udGFpbmVyIiwiX2Zha2VDYXB0aW9uQ29udGFpbmVyIiwiX2luZGV4SW5kaWNhdG9yIiwiX3NoYXJlQnV0dG9uIiwiX3NoYXJlTW9kYWwiLCJfaW5pdGFsQ2xvc2VPblNjcm9sbFZhbHVlIiwiX2lzSWRsZSIsIl9saXN0ZW4iLCJfbG9hZGluZ0luZGljYXRvciIsIl9sb2FkaW5nSW5kaWNhdG9ySGlkZGVuIiwiX2xvYWRpbmdJbmRpY2F0b3JUaW1lb3V0IiwiX2dhbGxlcnlIYXNPbmVTbGlkZSIsIl9vcHRpb25zIiwiX2Jsb2NrQ29udHJvbHNUYXAiLCJfaWRsZUludGVydmFsIiwiX2lkbGVUaW1lciIsInVpIiwiX292ZXJsYXlVSVVwZGF0ZWQiLCJfY29udHJvbHNWaXNpYmxlIiwiX3NoYXJlTW9kYWxIaWRkZW4iLCJfZGVmYXVsdFVJT3B0aW9ucyIsImJhcnNTaXplIiwiY2xvc2VFbENsYXNzZXMiLCJ0aW1lVG9JZGxlIiwidGltZVRvSWRsZU91dHNpZGUiLCJsb2FkaW5nSW5kaWNhdG9yRGVsYXkiLCJhZGRDYXB0aW9uSFRNTEZuIiwiY2FwdGlvbkVsIiwiY2xvc2VFbCIsImZ1bGxzY3JlZW5FbCIsInpvb21FbCIsInNoYXJlRWwiLCJjb3VudGVyRWwiLCJhcnJvd0VsIiwicHJlbG9hZGVyRWwiLCJ0YXBUb0Nsb3NlIiwidGFwVG9Ub2dnbGVDb250cm9scyIsImNsaWNrVG9DbG9zZU5vblpvb21hYmxlIiwic2hhcmVCdXR0b25zIiwiZG93bmxvYWQiLCJnZXRJbWFnZVVSTEZvclNoYXJlIiwiY3Vyckl0ZW0iLCJnZXRQYWdlVVJMRm9yU2hhcmUiLCJocmVmIiwiZ2V0VGV4dEZvclNoYXJlIiwiaW5kZXhJbmRpY2F0b3JTZXAiLCJmaXRDb250cm9sc1dpZHRoIiwiX29uQ29udHJvbHNUYXAiLCJtb3VzZVVzZWQiLCJfb25JZGxlTW91c2VNb3ZlIiwidWlFbGVtZW50IiwiZm91bmQiLCJjbGlja2VkQ2xhc3MiLCJzcmNFbGVtZW50IiwiZ2V0QXR0cmlidXRlIiwiX3VpRWxlbWVudHMiLCJvblRhcCIsInRhcERlbGF5IiwiZmVhdHVyZXMiLCJpc09sZEFuZHJvaWQiLCJfdG9nZ2xlUHN3cENsYXNzIiwiY05hbWUiLCJfY291bnROdW1JdGVtcyIsImhhc09uZVNsaWRlIiwiZ2V0TnVtSXRlbXNGbiIsIl90b2dnbGVTaGFyZU1vZGFsQ2xhc3MiLCJfdG9nZ2xlU2hhcmVNb2RhbCIsIl91cGRhdGVTaGFyZVVSTHMiLCJfb3BlbldpbmRvd1BvcHVwIiwic2hvdXQiLCJoYXNBdHRyaWJ1dGUiLCJzY3JlZW4iLCJzaGFyZUJ1dHRvbkRhdGEiLCJpbWFnZV91cmwiLCJwYWdlX3VybCIsInNoYXJlX3RleHQiLCJzaGFyZUJ1dHRvbk91dCIsInBhcnNlU2hhcmVCdXR0b25PdXQiLCJvbmNsaWNrIiwiX2hhc0Nsb3NlQ2xhc3MiLCJfaWRsZUluY3JlbWVudCIsInNldElkbGUiLCJfb25Nb3VzZUxlYXZlV2luZG93IiwicmVsYXRlZFRhcmdldCIsInRvRWxlbWVudCIsIl90b2dnbGVMb2FkaW5nSW5kaWNhdG9yIiwiX2FwcGx5TmF2QmFyR2FwcyIsImdhcCIsInZHYXAiLCJsaWtlbHlUb3VjaERldmljZSIsImJhcnMiLCJjcmVhdGVFbCIsImNhcHRpb25TaXplIiwib3B0aW9uIiwib25Jbml0IiwidG9nZ2xlRGVza3RvcFpvb20iLCJwcmV2IiwiaXNGdWxsc2NyZWVuIiwicGluY2hDb250cm9sc0hpZGRlbiIsImdldENoaWxkQnlDbGFzcyIsInNjcm9sbFdyYXAiLCJsaXN0ZW4iLCJoaWRlQ29udHJvbHMiLCJzaG93Q29udHJvbHMiLCJpbml0aWFsWm9vbUxldmVsIiwiZ2V0Wm9vbUxldmVsIiwiem9vbVRvIiwiZ2V0RG91YmxlVGFwWm9vbSIsImlzRG93biIsInByZXZlbnRPYmoiLCJwcmV2ZW50Iiwib25HbG9iYWxUYXAiLCJvbk1vdXNlT3ZlciIsImV2ZW50SyIsInVwZGF0ZUZ1bGxzY3JlZW4iLCJoaWRlQW5pbWF0aW9uRHVyYXRpb24iLCJzaG93QW5pbWF0aW9uRHVyYXRpb24iLCJjbGFzc0F0dHIiLCJsb29wVGhyb3VnaENoaWxkRWxlbWVudHMiLCJzQ2hpbGRyZW4iLCJ0b3BCYXIiLCJfc2V0dXBVSUVsZW1lbnRzIiwiZ2V0RnVsbHNjcmVlbkFQSSIsImFsbG93UHJvZ3Jlc3NpdmVJbWciLCJpbWciLCJuYXR1cmFsV2lkdGgiLCJpc0lkbGUiLCJ1cGRhdGVJbmRleEluZGljYXRvciIsInNldFNjcm9sbE9mZnNldCIsImdldFNjcm9sbFkiLCJnZXRDdXJyZW50SW5kZXgiLCJkZXRhaWwiLCJmaXRSYXRpbyIsInJlbGVhc2VQb2ludCIsInN1cHBvcnRzRnVsbHNjcmVlbiIsImV4aXRGdWxsc2NyZWVuIiwibW96Q2FuY2VsRnVsbFNjcmVlbiIsIndlYmtpdEV4aXRGdWxsc2NyZWVuIiwibXNFeGl0RnVsbHNjcmVlbiIsImFwaSIsImRFIiwidEYiLCJyZXF1ZXN0RnVsbHNjcmVlbiIsImVudGVySyIsImV4aXRLIiwiZWxlbWVudEsiLCJtb3pSZXF1ZXN0RnVsbFNjcmVlbiIsIndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuIiwibXNSZXF1ZXN0RnVsbHNjcmVlbiIsImNsb3NlT25TY3JvbGwiLCJBTExPV19LRVlCT0FSRF9JTlBVVCIsIlVpQ2xhc3MiLCJpdGVtcyIsImNsYXNzZXMiLCJ5T2Zmc2V0IiwicmVnIiwicGFyZW50RWwiLCJjaGlsZENsYXNzTmFtZSIsIm5leHRTaWJsaW5nIiwiYXJyYXlTZWFyY2giLCJvMSIsIm8yIiwicHJldmVudE92ZXJ3cml0ZSIsImVhc2luZyIsInNpbmUiLCJzaW4iLCJQSSIsImluT3V0IiwiY29zIiwiY3ViaWMiLCJkZXRlY3RGZWF0dXJlcyIsImhlbHBlclN0eWxlIiwidmVuZG9yIiwib2xkSUUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJyYWYiLCJjYWYiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsInBvaW50ZXJFdmVudCIsIm1zUG9pbnRlckVuYWJsZWQiLCJ1YSIsInBsYXRmb3JtIiwiaXNPbGRJT1NQaG9uZSIsImFuZHJvaWR2ZXJzaW9uIiwiYW5kcm9pZFZlcnNpb24iLCJpc01vYmlsZU9wZXJhIiwic3R5bGVDaGVja0l0ZW0iLCJzdHlsZU5hbWUiLCJzdHlsZUNoZWNrcyIsInZlbmRvcnMiLCJsYXN0VGltZSIsImN1cnJUaW1lIiwidGltZVRvQ2FsbCIsInN2ZyIsImNyZWF0ZUVsZW1lbnROUyIsImNyZWF0ZVNWR1JlY3QiLCJldk5hbWUiLCJfaGFuZGxlRXYiLCJoYW5kbGVFdmVudCIsImFsbG93UGFuVG9OZXh0Iiwic3BhY2luZyIsImJnT3BhY2l0eSIsImxvb3AiLCJwaW5jaFRvQ2xvc2UiLCJjbG9zZU9uVmVydGljYWxEcmFnIiwidmVydGljYWxEcmFnUmFuZ2UiLCJzaG93SGlkZU9wYWNpdHkiLCJlc2NLZXkiLCJhcnJvd0tleXMiLCJtYWluU2Nyb2xsRW5kRnJpY3Rpb24iLCJwYW5FbmRGcmljdGlvbiIsImlzQ2xpY2thYmxlRWxlbWVudCIsImlzTW91c2VDbGljayIsIm1heFNwcmVhZFpvb20iLCJzY2FsZU1vZGUiLCJfaXNPcGVuIiwiX2lzRGVzdHJveWluZyIsIl9jbG9zZWRCeVNjcm9sbCIsIl9jdXJyZW50SXRlbUluZGV4IiwiX2NvbnRhaW5lclN0eWxlIiwiX2NvbnRhaW5lclNoaWZ0SW5kZXgiLCJfdXBNb3ZlRXZlbnRzIiwiX2Rvd25FdmVudHMiLCJfZ2xvYmFsRXZlbnRIYW5kbGVycyIsIl9jdXJyWm9vbUxldmVsIiwiX3N0YXJ0Wm9vbUxldmVsIiwiX3RyYW5zbGF0ZVByZWZpeCIsIl90cmFuc2xhdGVTdWZpeCIsIl91cGRhdGVTaXplSW50ZXJ2YWwiLCJfaXRlbXNOZWVkVXBkYXRlIiwiX2l0ZW1Ib2xkZXJzIiwiX3ByZXZJdGVtSW5kZXgiLCJfZHJhZ1N0YXJ0RXZlbnQiLCJfZHJhZ01vdmVFdmVudCIsIl9kcmFnRW5kRXZlbnQiLCJfZHJhZ0NhbmNlbEV2ZW50IiwiX3RyYW5zZm9ybUtleSIsIl9wb2ludGVyRXZlbnRFbmFibGVkIiwiX2xpa2VseVRvdWNoRGV2aWNlIiwiX3JlcXVlc3RBRiIsIl9jYW5jZWxBRiIsIl9pbml0YWxDbGFzc05hbWUiLCJfaW5pdGFsV2luZG93U2Nyb2xsWSIsIl9vbGRJRSIsIl9jdXJyZW50V2luZG93U2Nyb2xsWSIsIl9mZWF0dXJlcyIsIl9vcmllbnRhdGlvbkNoYW5nZVRpbWVvdXQiLCJfZ2VzdHVyZVN0YXJ0VGltZSIsIl9nZXN0dXJlQ2hlY2tTcGVlZFRpbWUiLCJfcmVsZWFzZUFuaW1EYXRhIiwiX2lzWm9vbWluZ0luIiwiX3ZlcnRpY2FsRHJhZ0luaXRpYXRlZCIsIl9vbGRBbmRyb2lkVG91Y2hFbmRUaW1lb3V0IiwiX2lzRHJhZ2dpbmciLCJfaXNNdWx0aXRvdWNoIiwiX3pvb21TdGFydGVkIiwiX21vdmVkIiwiX2RyYWdBbmltRnJhbWUiLCJfbWFpblNjcm9sbFNoaWZ0ZWQiLCJfY3VycmVudFBvaW50cyIsIl9pc1pvb21pbmciLCJfc3RhcnRQb2ludHNEaXN0YW5jZSIsIl9jdXJyUGFuQm91bmRzIiwiX2N1cnJab29tRWxlbWVudFN0eWxlIiwiX21haW5TY3JvbGxBbmltYXRpbmciLCJfZGlyZWN0aW9uIiwiX2lzRmlyc3RNb3ZlIiwiX29wYWNpdHlDaGFuZ2VkIiwiX2JnT3BhY2l0eSIsIl93YXNPdmVySW5pdGlhbFpvb20iLCJfdGVtcENvdW50ZXIiLCJfY3VyclBhbkRpc3QiLCJfc3RhcnRQYW5PZmZzZXQiLCJfcGFuT2Zmc2V0IiwiX3ZpZXdwb3J0U2l6ZSIsIl9jdXJyUG9zaXRpb25JbmRleCIsIl9vZmZzZXQiLCJfc2xpZGVTaXplIiwiX2luZGV4RGlmZiIsIl9pc0ZpeGVkUG9zaXRpb24iLCJfbW9kdWxlcyIsIl93aW5kb3dWaXNpYmxlU2l6ZSIsIl9yZW5kZXJNYXhSZXNvbHV0aW9uIiwiX3JlZ2lzdGVyTW9kdWxlIiwicHVibGljTWV0aG9kcyIsIl9nZXRMb29wZWRJZCIsIm51bVNsaWRlcyIsIl9nZXROdW1JdGVtcyIsIl9zaG91dCIsIl9nZXRDdXJyZW50VGltZSIsIl9hcHBseUJnT3BhY2l0eSIsIm9wYWNpdHkiLCJiZyIsIl9hcHBseVpvb21UcmFuc2Zvcm0iLCJzdHlsZU9iaiIsInpvb20iLCJfYXBwbHlDdXJyZW50Wm9vbVBhbiIsImFsbG93UmVuZGVyUmVzb2x1dGlvbiIsIl9zZXRJbWFnZVNpemUiLCJfYXBwbHlab29tUGFuVG9JdGVtIiwiaW5pdGlhbFBvc2l0aW9uIiwiX3NldFRyYW5zbGF0ZVgiLCJlbFN0eWxlIiwiX21vdmVNYWluU2Nyb2xsIiwiZHJhZ2dpbmciLCJuZXdTbGlkZUluZGV4T2Zmc2V0IiwiZGVsdGEiLCJfbWFpblNjcm9sbFBvcyIsIl9jYWxjdWxhdGVQYW5PZmZzZXQiLCJ6b29tTGV2ZWwiLCJfbWlkWm9vbVBvaW50IiwiX2VxdWFsaXplUG9pbnRzIiwiX3JvdW5kUG9pbnQiLCJfbW91c2VNb3ZlVGltZW91dCIsIl9vbkZpcnN0TW91c2VNb3ZlIiwiX2NhbGN1bGF0ZVBhbkJvdW5kcyIsImJvdW5kcyIsIl9jYWxjdWxhdGVJdGVtU2l6ZSIsIl9nZXRNaW5ab29tTGV2ZWwiLCJfZ2V0TWF4Wm9vbUxldmVsIiwiX21vZGlmeURlc3RQYW5PZmZzZXQiLCJkZXN0UGFuQm91bmRzIiwiZGVzdFBhbk9mZnNldCIsImRlc3Rab29tTGV2ZWwiLCJfb25LZXlEb3duIiwia2V5ZG93bkFjdGlvbiIsInJldHVyblZhbHVlIiwiX29uR2xvYmFsQ2xpY2siLCJfdXBkYXRlUGFnZVNjcm9sbE9mZnNldCIsIl9hbmltYXRpb25zIiwiX251bUFuaW1hdGlvbnMiLCJfc3RvcEFuaW1hdGlvbiIsIl9yZWdpc3RlclN0YXJ0QW5pbWF0aW9uIiwiX3N0b3BBbGxBbmltYXRpb25zIiwiX2FuaW1hdGVQcm9wIiwiZW5kUHJvcCIsImVhc2luZ0ZuIiwib25VcGRhdGUiLCJvbkNvbXBsZXRlIiwic3RhcnRBbmltVGltZSIsImFuaW1sb29wIiwidmlld3BvcnRTaXplIiwiaXNNYWluU2Nyb2xsQW5pbWF0aW5nIiwiaXNEcmFnZ2luZyIsImlzWm9vbWluZyIsImFwcGx5Wm9vbVBhbiIsInBhblgiLCJwYW5ZIiwiaXRlbUhvbGRlcnMiLCJhbGxvdzNkVHJhbnNmb3JtIiwicGVyc3BlY3RpdmUiLCJ6b29tUmF0aW8iLCJfc2V0dXBUcmFuc2Zvcm1zIiwicmVzaXplIiwidXBkYXRlU2l6ZSIsIm9yaWVudGF0aW9uY2hhbmdlIiwic2Nyb2xsIiwia2V5ZG93biIsIm9sZFBob25lIiwiYW5pbWF0aW9uTmFtZSIsIl9nZXRJdGVtQXQiLCJyb290Q2xhc3NlcyIsIm1haW5DbGFzcyIsInNldENvbnRlbnQiLCJ1cGRhdGVDdXJySXRlbSIsIl9zaG93T3JIaWRlIiwiX3Nob3dPckhpZGVUaW1lb3V0IiwiX3N0b3BEcmFnVXBkYXRlTG9vcCIsInBhblRvIiwiZm9yY2UiLCJnb1RvIiwidXBkYXRlQ3Vyclpvb21JdGVtIiwiZW11bGF0ZVNldENvbnRlbnQiLCJ6b29tRWxlbWVudCIsImNlbnRlciIsImludmFsaWRhdGVDdXJySXRlbXMiLCJuZWVkc1VwZGF0ZSIsImJlZm9yZUFuaW1hdGlvbiIsInRlbXBIb2xkZXIiLCJkaWZmQWJzIiwiTlVNX0hPTERFUlMiLCJwcmV2SXRlbSIsIndpbmRvd1Njcm9sbFkiLCJpbm5lcldpZHRoIiwiaW5uZXJIZWlnaHQiLCJob2xkZXIiLCJoSW5kZXgiLCJjbGVhblNsaWRlIiwiY2VudGVyUG9pbnQiLCJ1cGRhdGVGbiIsImluaXRpYWxQYW5PZmZzZXQiLCJfY3VyclBvaW50IiwiX3N0YXJ0UG9pbnQiLCJfY3VyclBvaW50ZXJzIiwiX3N0YXJ0TWFpblNjcm9sbFBvcyIsIl9wb3NQb2ludHMiLCJfdGVtcFBvaW50IiwiX2N1cnJab29tZWRJdGVtSW5kZXgiLCJfY2VudGVyUG9pbnQiLCJfbGFzdFJlbGVhc2VUaW1lIiwiX2N1cnJDZW50ZXJQb2ludCIsIl9jYWxjdWxhdGVQb2ludHNEaXN0YW5jZSIsIl9kcmFnVXBkYXRlTG9vcCIsIl9yZW5kZXJNb3ZlbWVudCIsIl9jbG9zZXN0RWxlbWVudCIsIl9wcmV2ZW50T2JqIiwiX3ByZXZlbnREZWZhdWx0RXZlbnRCZWhhdmlvdXIiLCJfY29udmVydFRvdWNoVG9Qb2ludCIsImlkZW50aWZpZXIiLCJfZmluZENlbnRlck9mUG9pbnRzIiwicENlbnRlciIsIl9jYWxjdWxhdGVWZXJ0aWNhbERyYWdPcGFjaXR5UmF0aW8iLCJfZVBvaW50MSIsIl9lUG9pbnQyIiwiX3RlbXBQb2ludHNBcnIiLCJfZ2V0VG91Y2hQb2ludHMiLCJfcGFuT3JNb3ZlTWFpblNjcm9sbCIsInBhbkZyaWN0aW9uIiwic3RhcnRPdmVyRGlmZiIsIm5ld1BhblBvcyIsIm5ld01haW5TY3JvbGxQb3MiLCJuZXdPZmZzZXQiLCJuZXdNYWluU2Nyb2xsUG9zaXRpb24iLCJtYWluU2Nyb2xsRGlmZiIsIl9vbkRyYWdTdGFydCIsIl9pbml0aWFsWm9vbVJ1bm5pbmciLCJwb2ludGVySW5kZXgiLCJwb2ludGVySWQiLCJzdGFydFBvaW50c0xpc3QiLCJudW1Qb2ludHMiLCJfb25EcmFnTW92ZSIsInRvdWNoZXNMaXN0IiwiX2lzRXF1YWxQb2ludHMiLCJwb2ludHNEaXN0YW5jZSIsIl9jYWxjdWxhdGVab29tTGV2ZWwiLCJ6b29tRnJpY3Rpb24iLCJtaW5ab29tTGV2ZWwiLCJtYXhab29tTGV2ZWwiLCJwZXJjZW50Iiwib3BhY2l0eVJhdGlvIiwiX3B1c2hQb3NQb2ludCIsIl9vbkRyYWdSZWxlYXNlIiwiNCIsIjIiLCIzIiwiZ2VzdHVyZVR5cGUiLCJ0b3VjaExpc3QiLCJjaGFuZ2VkVG91Y2hlcyIsInJlbGVhc2VUaW1lRGlmZiIsIl9pbml0RHJhZ1JlbGVhc2VBbmltYXRpb25EYXRhIiwiY2FsY3VsYXRlU3dpcGVTcGVlZCIsImluaXRhbFBhblkiLCJpbml0aWFsQmdPcGFjaXR5IiwiX2ZpbmlzaFN3aXBlTWFpblNjcm9sbEdlc3R1cmUiLCJfY29tcGxldGVQYW5HZXN0dXJlIiwiX2NvbXBsZXRlWm9vbUdlc3R1cmUiLCJsYXN0RmxpY2tEdXJhdGlvbiIsInRlbXBSZWxlYXNlUG9zIiwibGFzdEZsaWNrT2Zmc2V0IiwibGFzdEZsaWNrRGlzdCIsImxhc3RGbGlja1NwZWVkIiwic2xvd0Rvd25SYXRpbyIsInNsb3dEb3duUmF0aW9SZXZlcnNlIiwic3BlZWREZWNlbGVyYXRpb25SYXRpbyIsInNwZWVkRGVjZWxlcmF0aW9uUmF0aW9BYnMiLCJkaXN0YW5jZU9mZnNldCIsImJhY2tBbmltRGVzdGluYXRpb24iLCJiYWNrQW5pbVN0YXJ0ZWQiLCJjYWxjdWxhdGVPdmVyQm91bmRzQW5pbU9mZnNldCIsImNhbGN1bGF0ZUFuaW1PZmZzZXQiLCJ0aW1lRGlmZiIsInBhbkFuaW1Mb29wIiwiem9vbVBhbiIsImxhc3ROb3ciLCJhbmltRGF0YSIsIml0ZW1DaGFuZ2VkIiwiaXRlbXNEaWZmIiwibmV4dENpcmNsZSIsInRvdGFsU2hpZnREaXN0IiwiaXNGYXN0TGFzdEZsaWNrIiwiZmluaXNoQW5pbUR1cmF0aW9uIiwiYW5pbWF0ZVRvWCIsImFuaW1hdGVUb0Rpc3QiLCJ0b3VjaGVzRGlzdGFuY2UiLCJpbml0aWFsT3BhY2l0eSIsImluaXRHZXN0dXJlcyIsImFkZEV2ZW50TmFtZXMiLCJwcmVmIiwibW92ZSIsIm1vdXNlZG93biIsIm1vdXNlbW92ZSIsIm1vdXNldXAiLCJfaXRlbXMiLCJfaW5pdGlhbENvbnRlbnRTZXQiLCJjb21wbGV0ZUZuIiwidGh1bWJCb3VuZHMiLCJpbml0aWFsTGF5b3V0IiwiZ2V0VGh1bWJCb3VuZHNGbiIsImNsb3NlV2l0aFJhZiIsImZhZGVFdmVyeXRoaW5nIiwicmVtb3ZlQXR0cmlidXRlIiwibG9hZEVycm9yIiwibWluaUltZyIsIndlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eSIsImluaXRhbEJnT3BhY2l0eSIsIl90ZW1wUGFuQXJlYVNpemUiLCJfaW1hZ2VzVG9BcHBlbmRQb29sIiwiX2NvbnRyb2xsZXJEZWZhdWx0T3B0aW9ucyIsImVycm9yTXNnIiwiZm9yY2VQcm9ncmVzc2l2ZUxvYWRpbmciLCJwcmVsb2FkIiwiaXNJbml0aWFsIiwiaFJhdGlvIiwidlJhdGlvIiwicmVhbFBhbkVsZW1lbnRXIiwicmVhbFBhbkVsZW1lbnRIIiwiX2NhbGN1bGF0ZVNpbmdsZUl0ZW1QYW5Cb3VuZHMiLCJfYXBwZW5kSW1hZ2UiLCJiYXNlRGl2IiwicHJldmVudEFuaW1hdGlvbiIsImtlZXBQbGFjZWhvbGRlciIsImltYWdlQXBwZW5kZWQiLCJsb2FkZWQiLCJfcHJlbG9hZEltYWdlIiwibG9hZENvbXBsZXRlIiwib25sb2FkIiwib25lcnJvciIsIl9jaGVja0ZvckVycm9yIiwiY2xlYW5VcCIsIm1heFJlcyIsImxhc3RDaGlsZCIsIl9hcHBlbmRJbWFnZXNQb29sIiwicG9vbEl0ZW0iLCJjbGVhclBsYWNlaG9sZGVyIiwibGF6eUxvYWRJdGVtIiwiaW5pdENvbnRyb2xsZXIiLCJnZXRJdGVtQXQiLCJpc05leHQiLCJwcmVsb2FkQmVmb3JlIiwicHJlbG9hZEFmdGVyIiwicGxhY2Vob2xkZXJDbGFzc05hbWUiLCJtc3JjIiwidGFwVGltZXIiLCJfd2hlZWxEZWx0YSIsInRhcFJlbGVhc2VQb2ludCIsIl9kaXNwYXRjaFRhcEV2ZW50Iiwib3JpZ0V2ZW50IiwiZURldGFpbCIsImluaXRUYXAiLCJvblRhcFN0YXJ0Iiwib25UYXBSZWxlYXNlIiwicDAiLCJ0b3VjaDAiLCJ0b3VjaDEiLCJpbml0RGVza3RvcFpvb20iLCJzZXR1cERlc2t0b3Bab29tIiwiaGFuZGxlTW91c2VXaGVlbCIsIm1vdXNlWm9vbWVkSW4iLCJoYXNEcmFnZ2luZ0NsYXNzIiwidXBkYXRlWm9vbWFibGUiLCJyZW1vdmVEcmFnZ2luZ0NsYXNzIiwibmV3UGFuWCIsIm5ld1BhblkiLCJkb3VibGVUYXBab29tTGV2ZWwiLCJ6b29tT3V0IiwiX2hpc3RvcnlVcGRhdGVUaW1lb3V0IiwiX2hhc2hDaGFuZ2VUaW1lb3V0IiwiX2hhc2hBbmltQ2hlY2tUaW1lb3V0IiwiX2hhc2hDaGFuZ2VkQnlTY3JpcHQiLCJfaGFzaENoYW5nZWRCeUhpc3RvcnkiLCJfaGFzaFJlc2V0ZWQiLCJfaW5pdGlhbEhhc2giLCJfaGlzdG9yeUNoYW5nZWQiLCJfY2xvc2VkRnJvbVVSTCIsIl91cmxDaGFuZ2VkT25jZSIsIl93aW5kb3dMb2MiLCJfc3VwcG9ydHNQdXNoU3RhdGUiLCJfaGlzdG9yeURlZmF1bHRPcHRpb25zIiwiZ2FsbGVyeVVJRCIsIl9nZXRIYXNoIiwiX2NsZWFuSGlzdG9yeVRpbWVvdXRzIiwiX3BhcnNlSXRlbUluZGV4RnJvbVVSTCIsInZhcnMiLCJnYWxsZXJ5UElEcyIsInNlYXJjaGZvciIsInBpZCIsIl91cGRhdGVIYXNoIiwibmV3SGFzaCIsIm5ld1VSTCIsImluaXRIaXN0b3J5IiwidXBkYXRlVVJMIiwib25IYXNoQ2hhbmdlIiwicmV0dXJuVG9PcmlnaW5hbCIsImJhY2siLCJwYXRobmFtZSIsImhhZFJ1bnRpbWUiLCJyZWdlbmVyYXRvclJ1bnRpbWUiLCJvbGRSdW50aW1lIiwiT3AiLCJoYXNPd24iLCIkU3ltYm9sIiwiaXRlcmF0b3JTeW1ib2wiLCJhc3luY0l0ZXJhdG9yU3ltYm9sIiwiYXN5bmNJdGVyYXRvciIsInRvU3RyaW5nVGFnU3ltYm9sIiwicnVudGltZSIsIkdlblN0YXRlU3VzcGVuZGVkU3RhcnQiLCJHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkIiwiR2VuU3RhdGVFeGVjdXRpbmciLCJHZW5TdGF0ZUNvbXBsZXRlZCIsIkNvbnRpbnVlU2VudGluZWwiLCJnZXRQcm90byIsIk5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlIiwiR3AiLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsIkdlbmVyYXRvciIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiZ2VuRnVuIiwiY3RvciIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiX19hd2FpdCIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsIkFzeW5jSXRlcmF0b3IiLCJhc3luYyIsImlubmVyRm4iLCJvdXRlckZuIiwidHJ5TG9jc0xpc3QiLCJDb250ZXh0IiwicmVzZXQiLCJza2lwVGVtcFJlc2V0Iiwic2VudCIsIl9zZW50IiwiZGVsZWdhdGUiLCJ0cnlFbnRyaWVzIiwicmVzZXRUcnlFbnRyeSIsInN0b3AiLCJyb290UmVjb3JkIiwiY29tcGxldGlvbiIsInJ2YWwiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImV4Y2VwdGlvbiIsImhhbmRsZSIsImxvYyIsImNhdWdodCIsInJlY29yZCIsInRyeUxvYyIsImhhc0NhdGNoIiwiaGFzRmluYWxseSIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFicnVwdCIsImZpbmFsbHlFbnRyeSIsImNvbXBsZXRlIiwiYWZ0ZXJMb2MiLCJmaW5pc2giLCJ0aHJvd24iLCJkZWxlZ2F0ZVlpZWxkIiwicmVzdWx0TmFtZSIsIm5leHRMb2MiLCJwcm90b0dlbmVyYXRvciIsImdlbmVyYXRvciIsIl9pbnZva2UiLCJkb25lUmVzdWx0IiwiZGVsZWdhdGVSZXN1bHQiLCJtYXliZUludm9rZURlbGVnYXRlIiwidHJ5Q2F0Y2giLCJtYWtlSW52b2tlTWV0aG9kIiwidW53cmFwcGVkIiwicHJldmlvdXNQcm9taXNlIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJyZXR1cm4iLCJwdXNoVHJ5RW50cnkiLCJsb2NzIiwiaXRlcmF0b3JNZXRob2QiLCJhMCIsImlzTXNpZSIsImlzQmxhbmtTdHJpbmciLCJlc2NhcGVSZWdFeENoYXJzIiwiaXNKUXVlcnkiLCJ0b1N0ciIsInByb3h5IiwiY2IiLCJncmVwIiwiZ2V0SWRHZW5lcmF0b3IiLCJ0ZW1wbGF0aWZ5IiwiaW1tZWRpYXRlIiwidGltZW91dCIsImxhdGVyIiwiY2FsbE5vdyIsImdldE9ialRva2VuaXplciIsIkxydUNhY2hlIiwibWF4U2l6ZSIsIkxpc3QiLCJOb2RlIiwidGFpbEl0ZW0iLCJtb3ZlVG9Gcm9udCIsIlBlcnNpc3RlbnRTdG9yYWdlIiwiTE9DQUxfU1RPUkFHRSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJyZW1vdmVJdGVtIiwibmFtZXNwYWNlIiwib3ZlcnJpZGUiLCJ0dGxLZXkiLCJrZXlNYXRjaGVyIiwibHMiLCJfbm9vcCIsIl9wcmVmaXgiLCJfdHRsS2V5IiwiaXNFeHBpcmVkIiwiX3NhZmVTZXQiLCJkZWNvZGUiLCJnZXRJdGVtIiwidHRsIiwiZW5jb2RlIiwiZ2F0aGVyTWF0Y2hpbmdLZXlzIiwicGFyc2VKU09OIiwiVHJhbnNwb3J0IiwicGVuZGluZ1JlcXVlc3RzQ291bnQiLCJwZW5kaW5nUmVxdWVzdHMiLCJtYXhQZW5kaW5nUmVxdWVzdHMiLCJzaGFyZWRDYWNoZSIsImNhbmNlbGxlZCIsImxhc3RSZXEiLCJfc2VuZCIsInRyYW5zcG9ydCIsIl9nZXQiLCJsaW1pdGVyIiwiX2NhY2hlIiwic2V0TWF4UGVuZGluZ1JlcXVlc3RzIiwibnVtIiwicmVzZXRDYWNoZSIsIl9maW5nZXJwcmludCIsImZpbmdlcnByaW50IiwianFYaHIiLCJyZXNwIiwiYWx3YXlzIiwib25EZWNrUmVxdWVzdEFyZ3MiLCJTZWFyY2hJbmRleCIsImJvb3RzdHJhcCIsImRhdHVtcyIsInRyaWUiLCJkYXR1bSIsIm5vcm1hbGl6ZVRva2VucyIsImNoIiwibmV3Tm9kZSIsImlkcyIsImFycmF5QSIsImFycmF5QiIsImFpIiwiYmkiLCJsZW5BcnJheUEiLCJsZW5BcnJheUIiLCJnZXRJbnRlcnNlY3Rpb24iLCJ1bmlxdWVzIiwidW5pcXVlIiwic2VyaWFsaXplIiwiUHJlZmV0Y2giLCJwcmVwYXJlIiwidGh1bWJwcmludCIsInN0b3JhZ2UiLCJjYWNoZUtleSIsInByb3RvY29sIiwiX3NldHRpbmdzIiwiZGF0YVR5cGUiLCJmcm9tQ2FjaGUiLCJzdG9yZWQiLCJmcm9tTmV0d29yayIsIlJlbW90ZSIsImNhbmNlbExhc3RSZXF1ZXN0Iiwib1BhcnNlciIsInNvcnRlciIsImluaXRpYWxpemUiLCJzdWZmaWNpZW50IiwicHJlZmV0Y2giLCJjYWxsYmFja1RvRGVmZXJyZWQiLCJwYXJzZVByZWZldGNoIiwicmF0ZUxpbWl0QnkiLCJyYXRlTGltaXRXYWl0IiwicHJlcGFyZUJ5UmVwbGFjZSIsInByZXBhcmVCeVdpbGRjYXJkIiwiaWRlbml0eVByZXBhcmUiLCJ0b1JlbW90ZVByZXBhcmUiLCJ0b0xpbWl0ZXIiLCJwYXJzZVJlbW90ZSIsImRlZmVycmVkIiwiRGVmZXJyZWQiLCJvbGQiLCJfX3R0QWRhcHRlciIsInN5bmMiLCJfbG9hZFByZWZldGNoIiwic2VyaWFsaXplZCIsIl9pbml0aWFsaXplIiwiaW5pdFByb21pc2UiLCJub25EdXBsaWNhdGVzIiwiY2xlYXJQcmVmZXRjaENhY2hlIiwiY2xlYXJSZW1vdGVDYWNoZSIsInR0QWRhcHRlciIsIldXVyIsImRlZmF1bHRDbGFzc05hbWVzIiwibWVudSIsInNlbGVjdGFibGUiLCJ3d3ciLCJjc3MiLCJib3JkZXJDb2xvciIsImJveFNoYWRvdyIsInZlcnRpY2FsQWxpZ24iLCJiYWNrZ3JvdW5kQ29sb3IiLCJpbnB1dFdpdGhOb0hpbnQiLCJ6SW5kZXgiLCJsdHIiLCJydGwiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJidWlsZFNlbGVjdG9ycyIsIkV2ZW50QnVzIiwiZGVwcmVjYXRpb25NYXAiLCIkZWwiLCJjdXJzb3JjaGFuZ2UiLCJzZWxlY3QiLCJhdXRvY29tcGxldGUiLCJfdHJpZ2dlciIsIiRlIiwiRXZlbnQiLCJkZXByZWNhdGVkVHlwZSIsInNwbGl0dGVyIiwib25TeW5jIiwib25Bc3luYyIsIl9jYWxsYmFja3MiLCJjYWxsYmFja3MiLCJzeW5jRmx1c2giLCJhc3luY0ZsdXNoIiwiZ2V0Rmx1c2giLCJiaW5kQ29udGV4dCIsImRvYyIsIndvcmRzT25seSIsImNhc2VTZW5zaXRpdmUiLCJyZWdleCIsInBhdHRlcm5zIiwicmVnZXhTdHIiLCJlc2NhcGVkUGF0dGVybnMiLCJnZXRSZWdleCIsInRyYXZlcnNlIiwiaGlnaHRsaWdodFRleHROb2RlIiwiY2hpbGROb2RlIiwidGV4dE5vZGUiLCJwYXR0ZXJuTm9kZSIsIndyYXBwZXJOb2RlIiwic3BsaXRUZXh0IiwiY2xvbmVOb2RlIiwicmVwbGFjZUNoaWxkIiwiSW5wdXQiLCJzcGVjaWFsS2V5Q29kZU1hcCIsIiRoaW50IiwicXVlcnlXaGVuRm9jdXNlZCIsImhhc0ZvY3VzIiwiJG92ZXJmbG93SGVscGVyIiwidmlzaWJpbGl0eSIsIndoaXRlU3BhY2UiLCJmb250RmFtaWx5IiwiZm9udFNpemUiLCJmb250U3R5bGUiLCJmb250VmFyaWFudCIsImZvbnRXZWlnaHQiLCJ3b3JkU3BhY2luZyIsImxldHRlclNwYWNpbmciLCJ0ZXh0SW5kZW50IiwidGV4dFJlbmRlcmluZyIsInRleHRUcmFuc2Zvcm0iLCJpbnNlcnRBZnRlciIsIl9jaGVja0xhbmd1YWdlRGlyZWN0aW9uIiwic2V0SGludCIsImdldEhpbnQiLCJjbGVhckhpbnQiLCJjbGVhckhpbnRJZkludmFsaWQiLCI5IiwiMjciLCIzNyIsIjM5IiwiMTMiLCIzOCIsIjQwIiwibm9ybWFsaXplUXVlcnkiLCJfb25CbHVyIiwicmVzZXRJbnB1dFZhbHVlIiwiX29uRm9jdXMiLCJfb25LZXlkb3duIiwia2V5TmFtZSIsIl9tYW5hZ2VQcmV2ZW50RGVmYXVsdCIsIl9zaG91bGRUcmlnZ2VyIiwiX29uSW5wdXQiLCJfc2V0UXVlcnkiLCJnZXRJbnB1dFZhbHVlIiwid2l0aE1vZGlmaWVyIiwic2lsZW50IiwiYXJlRXF1aXZhbGVudCIsImhhc0RpZmZlcmVudFdoaXRlc3BhY2UiLCJvbkJsdXIiLCJvbkZvY3VzIiwib25LZXlkb3duIiwib25JbnB1dCIsImdldExhbmdEaXIiLCJnZXRRdWVyeSIsInNldFF1ZXJ5Iiwic2V0SW5wdXRWYWx1ZSIsImhhc1F1ZXJ5Q2hhbmdlZFNpbmNlTGFzdEZvY3VzIiwidmFsSXNQcmVmaXhPZkhpbnQiLCJoYXNPdmVyZmxvdyIsImNvbnN0cmFpbnQiLCJpc0N1cnNvckF0RW5kIiwidmFsdWVMZW5ndGgiLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbiIsIm1vdmVTdGFydCIsIkRhdGFzZXQiLCJuYW1lR2VuZXJhdG9yIiwiZGlzcGxheUZuIiwiZ2V0RGlzcGxheUZuIiwiZGlzcGxheUtleSIsInN1Z2dlc3Rpb25UZW1wbGF0ZSIsImdldFRlbXBsYXRlcyIsIl9yZXNldExhc3RTdWdnZXN0aW9uIiwiZXh0cmFjdERhdGEiLCJfb3ZlcndyaXRlIiwic3VnZ2VzdGlvbnMiLCJfcmVuZGVyU3VnZ2VzdGlvbnMiLCJfcmVuZGVyUGVuZGluZyIsIl9yZW5kZXJOb3RGb3VuZCIsIl9lbXB0eSIsIl9hcHBlbmQiLCIkbGFzdFN1Z2dlc3Rpb24iLCJfYXBwZW5kU3VnZ2VzdGlvbnMiLCIkZnJhZ21lbnQiLCJfZ2V0U3VnZ2VzdGlvbnNGcmFnbWVudCIsIl9nZXRIZWFkZXIiLCJfZ2V0Rm9vdGVyIiwiZnJhZ21lbnQiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiX2luamVjdFF1ZXJ5IiwiX3F1ZXJ5IiwiY2FuY2VsZWQiLCJzeW5jQ2FsbGVkIiwicmVuZGVyZWQiLCJNZW51IiwiJG5vZGUiLCJkYXRhc2V0cyIsIm9EYXRhc2V0IiwiX29uU2VsZWN0YWJsZUNsaWNrIiwiX29uUmVuZGVyZWQiLCJfYWxsRGF0YXNldHNFbXB0eSIsIl9vbkNsZWFyZWQiLCJfcHJvcGFnYXRlIiwiX2dldFNlbGVjdGFibGVzIiwiX3JlbW92ZUN1cnNvciIsIiRzZWxlY3RhYmxlIiwiZ2V0QWN0aXZlU2VsZWN0YWJsZSIsIl9lbnN1cmVWaXNpYmxlIiwiZWxUb3AiLCJlbEJvdHRvbSIsIm5vZGVTY3JvbGxUb3AiLCJub2RlSGVpZ2h0Iiwib3V0ZXJIZWlnaHQiLCJvblNlbGVjdGFibGVDbGljayIsImlzT3BlbiIsInNldExhbmd1YWdlRGlyZWN0aW9uIiwic2VsZWN0YWJsZVJlbGF0aXZlVG9DdXJzb3IiLCIkc2VsZWN0YWJsZXMiLCIkb2xkQ3Vyc29yIiwic2V0Q3Vyc29yIiwiZ2V0U2VsZWN0YWJsZURhdGEiLCJnZXRUb3BTZWxlY3RhYmxlIiwiaXNWYWxpZFVwZGF0ZSIsIkRlZmF1bHRNZW51IiwiX3Nob3ciLCJfaGlkZSIsIlR5cGVhaGVhZCIsIm9uRm9jdXNlZCIsIm9uQmx1cnJlZCIsIm9uRW50ZXJLZXllZCIsIm9uVGFiS2V5ZWQiLCJvbkVzY0tleWVkIiwib25VcEtleWVkIiwib25Eb3duS2V5ZWQiLCJvbkxlZnRLZXllZCIsIm9uUmlnaHRLZXllZCIsIm9uUXVlcnlDaGFuZ2VkIiwib25XaGl0ZXNwYWNlQ2hhbmdlZCIsImV2ZW50QnVzIiwiZW5hYmxlZCIsImFjdGl2YXRlIiwiX2hhY2tzIiwiX29uU2VsZWN0YWJsZUNsaWNrZWQiLCJfb25Bc3luY1JlcXVlc3RlZCIsIl9vbkFzeW5jQ2FuY2VsZWQiLCJfb25Bc3luY1JlY2VpdmVkIiwiX29uRGF0YXNldFJlbmRlcmVkIiwiX29uRGF0YXNldENsZWFyZWQiLCJfb25MYW5nRGlyQ2hhbmdlZCIsIiRtZW51IiwiaXNBY3RpdmUiLCJoYXNBY3RpdmUiLCJfdXBkYXRlSGludCIsIl9vbkZvY3VzZWQiLCJfbWluTGVuZ3RoTWV0IiwiX29uQmx1cnJlZCIsIl9vbkVudGVyS2V5ZWQiLCJfb25UYWJLZXllZCIsIl9vbkVzY0tleWVkIiwiX29uVXBLZXllZCIsIm1vdmVDdXJzb3IiLCJfb25Eb3duS2V5ZWQiLCJfb25MZWZ0S2V5ZWQiLCJfb25SaWdodEtleWVkIiwiX29uUXVlcnlDaGFuZ2VkIiwiX29uV2hpdGVzcGFjZUNoYW5nZWQiLCJfb3BlbklmQWN0aXZlIiwiZXNjYXBlZFF1ZXJ5IiwiaXNFbmFibGVkIiwiZGlzYWJsZSIsImRlYWN0aXZhdGUiLCJzZXRWYWwiLCJnZXRWYWwiLCIkY2FuZGlkYXRlIiwicGF5bG9hZCIsInR0RWFjaCIsIiRlbHMiLCJidWlsZEhpbnRGcm9tSW5wdXQiLCJiYWNrZ3JvdW5kQXR0YWNobWVudCIsImJhY2tncm91bmRDbGlwIiwiYmFja2dyb3VuZE9yaWdpbiIsImJhY2tncm91bmRQb3NpdGlvbiIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kU2l6ZSIsInNwZWxsY2hlY2siLCJ0YWJpbmRleCIsInByZXBJbnB1dCIsImF0dHJzIiwiJGVsT3JOdWxsIiwiY2xhc3NOYW1lcyIsImF0dGFjaCIsIiR3cmFwcGVyIiwiZGVmYXVsdEhpbnQiLCJkZWZhdWx0TWVudSIsIk1lbnVDb25zdHJ1Y3RvciIsIm5ld1ZhbCIsImRldGFjaCIsInJldmVydCIsIm51bWJlckZvcm1hdEtleXMiLCJwYXJzZUFyZ3MiLCJsb29zZUNsb25lIiwiYXJndW1lbnRzJDEiLCJvdXRwdXQiLCJsb29zZUVxdWFsIiwiaXNPYmplY3RBIiwiaXNPYmplY3RCIiwiaXNBcnJheUEiLCJpc0FycmF5QiIsImtleXNBIiwia2V5c0IiLCJiZWZvcmVDcmVhdGUiLCIkb3B0aW9ucyIsIl9faTE4biIsImxvY2FsZU1lc3NhZ2VzIiwicmVzb3VyY2UiLCJtZXJnZUxvY2FsZU1lc3NhZ2UiLCJfaTE4biIsIl9pMThuV2F0Y2hlciIsIndhdGNoSTE4bkRhdGEiLCIkcm9vdCIsIiRpMThuIiwiZmFsbGJhY2tMb2NhbGUiLCJmb3JtYXRGYWxsYmFja01lc3NhZ2VzIiwic2lsZW50VHJhbnNsYXRpb25XYXJuIiwic2lsZW50RmFsbGJhY2tXYXJuIiwicGx1cmFsaXphdGlvblJ1bGVzIiwicHJlc2VydmVEaXJlY3RpdmVDb250ZW50IiwibG9jYWxlTWVzc2FnZXMkMSIsInNoYXJlZE1lc3NhZ2VzIiwiX2xvY2FsZVdhdGNoZXIiLCJ3YXRjaExvY2FsZSIsImJlZm9yZU1vdW50Iiwic3Vic2NyaWJlRGF0YUNoYW5naW5nIiwiX3N1YnNjcmliaW5nIiwiYmVmb3JlRGVzdHJveSIsIiRuZXh0VGljayIsInVuc3Vic2NyaWJlRGF0YUNoYW5naW5nIiwiZGVzdHJveVZNIiwiaW50ZXJwb2xhdGlvbkNvbXBvbmVudCIsImZ1bmN0aW9uYWwiLCJyZXF1aXJlZCIsInBsYWNlcyIsInNsb3RzIiwiQm9vbGVhbiIsIm9ubHlIYXNEZWZhdWx0UGxhY2UiLCJhc3NpZ25DaGlsZEluZGV4IiwiY3JlYXRlUGFyYW1zRnJvbVBsYWNlcyIsImV2ZXJ5UGxhY2UiLCJ2bm9kZUhhc1BsYWNlQXR0cmlidXRlIiwiYXNzaWduQ2hpbGRQbGFjZSIsInVzZUxlZ2FjeVBsYWNlcyIsInBsYWNlIiwidm5vZGUiLCJudW1iZXJDb21wb25lbnQiLCJhY2MiLCJwYXJ0cyIsIl9udHAiLCJwYXJ0Iiwic2xvdCIsInNjb3BlZFNsb3RzIiwic3RhdGljQ2xhc3MiLCJhc3NlcnQiLCJvbGRWTm9kZSIsIl9sb2NhbGUiLCJsb2NhbGVFcXVhbCIsIl9sb2NhbGVNZXNzYWdlIiwiZ2V0TG9jYWxlTWVzc2FnZSIsIm1vZGlmaWVycyIsInByZXNlcnZlIiwidGV4dENvbnRlbnQiLCJfdnQiLCJyZWYkMSIsInJlZiQyIiwiY2hvaWNlIiwicGFyc2VWYWx1ZSIsInRjIiwibWFrZVBhcmFtcyIsImluc3RhbGwiLCJfVnVlIiwiaW5zdGFsbGVkIiwiJHQiLCJfZ2V0TWVzc2FnZXMiLCIkdGMiLCJfdGMiLCIkdGUiLCJfdGUiLCIkZCIsIiRuIiwiY29tcG9uZW50Iiwib3B0aW9uTWVyZ2VTdHJhdGVnaWVzIiwicGFyZW50VmFsIiwiY2hpbGRWYWwiLCJCYXNlRm9ybWF0dGVyIiwiX2NhY2hlcyIsImNoYXIiLCJzdWIiLCJpc0Nsb3NlZCIsIlJFX1RPS0VOX0xJU1RfVkFMVUUiLCJSRV9UT0tFTl9OQU1FRF9WQUxVRSIsImNvbXBpbGVkIiwiY29tcGlsZSIsInBhdGhTdGF0ZU1hY2hpbmUiLCJsaXRlcmFsVmFsdWVSRSIsImdldFBhdGhDaGFyVHlwZSIsIkkxOG5QYXRoIiwicGFyc2VQYXRoIiwiaGl0IiwibmV3Q2hhciIsInRyYW5zaXRpb24iLCJ0eXBlTWFwIiwic3ViUGF0aERlcHRoIiwibWF5YmVVbmVzY2FwZVF1b3RlIiwibmV4dENoYXIiLCJ0cmltbWVkIiwiZm9ybWF0U3ViUGF0aCIsInBhcnNlJDEiLCJnZXRQYXRoVmFsdWUiLCJhdmFpbGFiaWxpdGllcyIsImh0bWxUYWdNYXRjaGVyIiwibGlua0tleU1hdGNoZXIiLCJsaW5rS2V5UHJlZml4TWF0Y2hlciIsImJyYWNrZXRzTWF0Y2hlciIsImRlZmF1bHRNb2RpZmllcnMiLCJ0b0xvY2FsZVVwcGVyQ2FzZSIsInRvTG9jYWxlTG93ZXJDYXNlIiwiZGVmYXVsdEZvcm1hdHRlciIsImRhdGVUaW1lRm9ybWF0cyIsIm51bWJlckZvcm1hdHMiLCJfdm0iLCJfZm9ybWF0dGVyIiwiX21vZGlmaWVycyIsIl9taXNzaW5nIiwibWlzc2luZyIsIl9yb290IiwiX3N5bmMiLCJfZmFsbGJhY2tSb290IiwiZmFsbGJhY2tSb290IiwiX2Zvcm1hdEZhbGxiYWNrTWVzc2FnZXMiLCJfc2lsZW50VHJhbnNsYXRpb25XYXJuIiwiX3NpbGVudEZhbGxiYWNrV2FybiIsIl9kYXRlVGltZUZvcm1hdHRlcnMiLCJfbnVtYmVyRm9ybWF0dGVycyIsIl9wYXRoIiwiX2RhdGFMaXN0ZW5lcnMiLCJfcHJlc2VydmVEaXJlY3RpdmVDb250ZW50IiwiX3dhcm5IdG1sSW5NZXNzYWdlIiwid2Fybkh0bWxJbk1lc3NhZ2UiLCJfcG9zdFRyYW5zbGF0aW9uIiwicG9zdFRyYW5zbGF0aW9uIiwiX2V4aXN0IiwiX2NoZWNrTG9jYWxlTWVzc2FnZSIsIl9pbml0Vk0iLCJhdmFpbGFibGVMb2NhbGVzIiwibGV2ZWwiLCIkZGVzdHJveSIsIiR3YXRjaCIsIiRmb3JjZVVwZGF0ZSIsImRlZXAiLCIkc2V0IiwiX2dldERhdGVUaW1lRm9ybWF0cyIsIl9nZXROdW1iZXJGb3JtYXRzIiwiX2xvY2FsZUNoYWluQ2FjaGUiLCJmYWxsYmFjayIsIm9yZ0xldmVsIiwiX3dhcm5EZWZhdWx0IiwiaW50ZXJwb2xhdGVNb2RlIiwibWlzc2luZ1JldCIsInBhcnNlZEFyZ3MiLCJfcmVuZGVyIiwiX2lzRmFsbGJhY2tSb290IiwiX2lzU2lsZW50RmFsbGJhY2tXYXJuIiwiX2lzU2lsZW50RmFsbGJhY2siLCJfaXNTaWxlbnRUcmFuc2xhdGlvbldhcm4iLCJfaW50ZXJwb2xhdGUiLCJ2aXNpdGVkTGlua1N0YWNrIiwicGF0aFJldCIsIl9saW5rIiwiaWR4IiwibGluayIsImxpbmtLZXlQcmVmaXhNYXRjaGVzIiwibGlua1ByZWZpeCIsImZvcm1hdHRlck5hbWUiLCJsaW5rUGxhY2Vob2xkZXIiLCJ0cmFuc2xhdGVkIiwiX3RyYW5zbGF0ZSIsIl9hcHBlbmRJdGVtVG9DaGFpbiIsImJsb2NrcyIsImZvbGxvdyIsIl9hcHBlbmRMb2NhbGVUb0NoYWluIiwiX2FwcGVuZEJsb2NrVG9DaGFpbiIsImJsb2NrIiwiX2dldExvY2FsZUNoYWluIiwicmVzIiwicHJlZGVmaW5lZCIsImZldGNoQ2hvaWNlIiwiY2hvaWNlcyIsImdldENob2ljZUluZGV4IiwiY2hvaWNlc0xlbmd0aCIsIl9jaG9pY2UiLCJfY2hvaWNlc0xlbmd0aCIsInRlIiwic2V0TG9jYWxlTWVzc2FnZSIsImdldERhdGVUaW1lRm9ybWF0Iiwic2V0RGF0ZVRpbWVGb3JtYXQiLCJfY2xlYXJEYXRlVGltZUZvcm1hdCIsIm1lcmdlRGF0ZVRpbWVGb3JtYXQiLCJfbG9jYWxpemVEYXRlVGltZSIsImZvcm1hdHMiLCJJbnRsIiwiRGF0ZVRpbWVGb3JtYXQiLCJnZXROdW1iZXJGb3JtYXQiLCJzZXROdW1iZXJGb3JtYXQiLCJfY2xlYXJOdW1iZXJGb3JtYXQiLCJtZXJnZU51bWJlckZvcm1hdCIsIl9nZXROdW1iZXJGb3JtYXR0ZXIiLCJOdW1iZXJGb3JtYXQiLCJudW1iZXJGb3JtYXQiLCJmb3JtYXRUb1BhcnRzIiwiaW50bERlZmluZWQiLCJkYXRlVGltZUZvcm1hdCIsIiRjcmVhdGVFbGVtZW50IiwiX3NlbGYiLCJkaXNwbGF5ZWRUaXRsZSIsImRpc3BsYXllZERlc2NyaXB0aW9uIiwiX3dpdGhTdHJpcHBlZCIsIl9fZmlsZSIsInNlbGVjdGVkQ29tYmluYXRpb25JZCIsImNsb3NlTW9kYWwiLCJfdSIsImxvYWRpbmdDb21iaW5hdGlvbkZvcm0iLCJlZGl0Q29tYmluYXRpb25VcmwiLCJ2c3BhY2UiLCJoc3BhY2UiLCJzY3JvbGxpbmciLCJsb2Fkc3RhcnQiLCJmcmFtZUxvYWRpbmciLCJsb2FkIiwib25GcmFtZUxvYWRlZCIsInN1Ym1pdHRpbmdDb21iaW5hdGlvbkZvcm0iLCIkZXZlbnQiLCJ0cnlDbG9zZSIsInByZXZpb3VzQ29tYmluYXRpb25JZCIsInNob3dQcmV2aW91cyIsIm5leHRDb21iaW5hdGlvbklkIiwic2hvd05leHQiLCJpc0Zvcm1VcGRhdGVkIiwic3VibWl0Rm9ybSIsInJvbGUiLCJjb21iaW5hdGlvbnNIaXN0b3J5IiwiZW1wdHlJbWFnZVVybCIsInByZXZlbnRDbG9zZSIsInNob3dDb25maXJtIiwiY29uZmlybWF0aW9uIiwiaGlkZUNvbmZpcm1Nb2RhbCIsImNvbmZpcm0iLCJjb25maXJtU2VsZWN0aW9uIiwiZG9tUHJvcHMiLCJzZWxlY3RlZENvbWJpbmF0aW9uTmFtZSIsImNvbWJpbmF0aW9uc0xpc3QiLCJhcmVDb21iaW5hdGlvbnNOb3RFbXB0eSIsIl9sIiwicGFnaW5hdGVkRGF0YXMiLCJjbGFzcyIsImRhdGFzIiwicGFnaW5hdGVkIiwiY29uc3RydWN0RGF0YXMiLCJmdWxsIiwiX20iLCJzZWxlY3RlZEZpbGVzIiwic2VsZWN0ZWRMb2NhbGUiLCJidXR0b25Mb2FkaW5nIiwidW5zZWxlY3RBbGwiLCJyZW1vdmVTZWxlY3Rpb24iLCJzaG93TW9kYWwiLCJzZWxlY3RBbGwiLCJzYXZlU2VsZWN0ZWRGaWxlIiwicmVwbGFjZWRGaWxlIiwibWFuYWdlUmVwbGFjZWRGaWxlIiwib3BlbkdhbGxlcnkiLCJ0b2dnbGVHYWxsZXJ5IiwiaXNNb2RhbFNob3duIiwiaGlkZU1vZGFsIiwiZ2FsbGVyeU9wZW5lZCIsIiRlbWl0Iiwib3BlbkZpbGVNYW5hZ2VyIiwic2hvd0NvdmVyVG9vbHRpcCIsImlzQ292ZXIiLCJjb3ZlckNoYW5nZWQiLCJ3YXRjaEZpbGVzIiwiZm9yIiwiaXNvX2NvZGUiLCJkaXJlY3RpdmVzIiwicmF3TmFtZSIsImNhcHRpb25WYWx1ZSIsImlkX2xhbmciLCJleHByZXNzaW9uIiwia2V5dXAiLCJjb21wb3NpbmciLCJjb3ZlckRhdGEiLCJzZWxlY3RlZEZpbHRlcnMiLCJuYkZpbGVzIiwiaXNDaGVja2VkIiwidG9nZ2xlRmlsdGVyIiwiYWRkRmlsdGVyIiwicmVtb3ZlRmlsdGVyIiwic2VsZWN0ZWRGaWx0ZXJzTnVtYmVyIiwiY2xlYXJBbGwiLCJzZWxlY3RlZEF0dHJpYnV0ZUdyb3VwcyIsInNlbGVjdGVkR3JvdXAiLCJzZWxlY3RlZEF0dHJpYnV0ZSIsInNlbmRSZW1vdmVFdmVudCIsImNoZWNrYm94TGlzdCIsImdldFNlbGVjdGVkQ2xhc3MiLCJzZW5kQ2hhbmdlRXZlbnQiLCJjb2xvciIsImNoYW5nZVNlbGVjdGVkIiwicmVtb3ZlU2VsZWN0ZWQiLCJhZGRTZWxlY3RlZCIsImdlbmVyYXRlZENvbWJpbmF0aW9uc05iIiwiZ2VuZXJhdGVDb21iaW5hdGlvbnMiLCJtb2RhbFRpdGxlIiwiY2xvc2VMYWJlbCIsImNhbmNlbExhYmVsIiwiY29uZmlybUxhYmVsIiwiZ29Ub1BhZ2UiLCJub3JtYWxpemVDb21wb25lbnQiLCJzY3JpcHRFeHBvcnRzIiwic3RhdGljUmVuZGVyRm5zIiwiZnVuY3Rpb25hbFRlbXBsYXRlIiwiaW5qZWN0U3R5bGVzIiwic2NvcGVJZCIsIm1vZHVsZUlkZW50aWZpZXIiLCJzaGFkb3dNb2RlIiwiaG9vayIsIl9jb21waWxlZCIsIl9zY29wZUlkIiwiJHZub2RlIiwic3NyQ29udGV4dCIsIl9fVlVFX1NTUl9DT05URVhUX18iLCJfcmVnaXN0ZXJlZENvbXBvbmVudHMiLCJfc3NyUmVnaXN0ZXIiLCJfaW5qZWN0U3R5bGVzIiwib3JpZ2luYWxSZW5kZXIiLCJsb2NhbHMiLCJsaXN0VG9TdHlsZXMiLCJwYXJlbnRJZCIsIm5ld1N0eWxlcyIsIm1lZGlhIiwic291cmNlTWFwIiwiaGFzRG9jdW1lbnQiLCJzdHlsZXNJbkRvbSIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwic2luZ2xldG9uRWxlbWVudCIsInNpbmdsZXRvbkNvdW50ZXIiLCJpc1Byb2R1Y3Rpb24iLCJzc3JJZEtleSIsImlzT2xkSUUiLCJhZGRTdHlsZXNDbGllbnQiLCJfaXNQcm9kdWN0aW9uIiwiYWRkU3R5bGVzVG9Eb20iLCJuZXdMaXN0IiwibWF5UmVtb3ZlIiwiZG9tU3R5bGUiLCJyZWZzIiwiYWRkU3R5bGUiLCJjcmVhdGVTdHlsZUVsZW1lbnQiLCJzdHlsZUVsZW1lbnQiLCJzdHlsZUluZGV4IiwiYXBwbHlUb1NpbmdsZXRvblRhZyIsImFwcGx5VG9UYWciLCJuZXdPYmoiLCJ0ZXh0U3RvcmUiLCJyZXBsYWNlVGV4dCIsInJlcGxhY2VtZW50Iiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJjc3NOb2RlIiwic3NySWQiLCJmcmVlemUiLCJ1IiwiX2xlbmd0aCIsIkUiLCJOIiwiTCIsIk0iLCJJIiwicHJvZHVjdGlvblRpcCIsImRldnRvb2xzIiwicGVyZm9ybWFuY2UiLCJlcnJvckhhbmRsZXIiLCJ3YXJuSGFuZGxlciIsImlnbm9yZWRFbGVtZW50cyIsImtleUNvZGVzIiwiaXNSZXNlcnZlZFRhZyIsImlzUmVzZXJ2ZWRBdHRyIiwiaXNVbmtub3duRWxlbWVudCIsImdldFRhZ05hbWVzcGFjZSIsInBhcnNlUGxhdGZvcm1UYWdOYW1lIiwibXVzdFVzZVByb3AiLCJfbGlmZWN5Y2xlSG9va3MiLCJIIiwiViIsIldYRW52aXJvbm1lbnQiLCJKIiwiWiIsIlgiLCJZIiwiUSIsIlZVRV9FTlYiLCJfX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fIiwicmUiLCJpZSIsIm9lIiwiYWUiLCJzZSIsImNlIiwic3VicyIsImFkZFN1YiIsInJlbW92ZVN1YiIsImRlcGVuZCIsImFkZERlcCIsInVlIiwibGUiLCJmZSIsInBlIiwiZWxtIiwibnMiLCJmbkNvbnRleHQiLCJmbk9wdGlvbnMiLCJmblNjb3BlSWQiLCJjb21wb25lbnRPcHRpb25zIiwiY29tcG9uZW50SW5zdGFuY2UiLCJyYXciLCJpc1N0YXRpYyIsImlzUm9vdEluc2VydCIsImlzQ29tbWVudCIsImlzQ2xvbmVkIiwiaXNPbmNlIiwiYXN5bmNGYWN0b3J5IiwiYXN5bmNNZXRhIiwiaXNBc3luY1BsYWNlaG9sZGVyIiwiZGUiLCJ2ZSIsImhlIiwibWUiLCJnZSIsIl9fb2JfXyIsIm9ic2VydmVBcnJheSIsImRlcCIsImJlIiwid2UiLCJ2bUNvdW50Iiwid2FsayIsIkNlIiwiaXNFeHRlbnNpYmxlIiwiX2lzVnVlIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2UiLCJBZSIsIk9lIiwiU2UiLCJUZSIsIkVlIiwiTmUiLCJpbmplY3QiLCJwcm92aWRlIiwiamUiLCJEZSIsIl9iYXNlIiwiZXh0ZW5kcyIsIm1peGlucyIsIkxlIiwiTWUiLCJQZSIsInByb3BzRGF0YSIsIl9wcm9wcyIsIkllIiwiRmUiLCJSZSIsIiRwYXJlbnQiLCJlcnJvckNhcHR1cmVkIiwiQmUiLCJIZSIsIl9oYW5kbGVkIiwiVWUiLCJ6ZSIsIlZlIiwiS2UiLCJKZSIsInFlIiwiV2UiLCJaZSIsIkdlIiwiWGUiLCJZZSIsIlFlIiwiZXQiLCJpc0Zyb3plbiIsInR0IiwiY2FwdHVyZSIsInBhc3NpdmUiLCJudCIsImZucyIsInJ0IiwibWVyZ2VkIiwib3QiLCJzdCIsIl9pc1ZMaXN0IiwiY3QiLCJfcHJvdmlkZWQiLCJ1dCIsImZ0IiwiJHN0YWJsZSIsIiRrZXkiLCJfbm9ybWFsaXplZCIsIiRoYXNOb3JtYWwiLCJwdCIsImR0IiwidnQiLCJodCIsIiRzY29wZWRTbG90cyIsIiRzbG90cyIsIm10IiwieXQiLCJidCIsIl9zdGF0aWNUcmVlcyIsInd0IiwiX3JlbmRlclByb3h5IiwiQ3QiLCJ4dCIsImt0IiwiQXQiLCJPdCIsIlN0IiwiX28iLCJfcSIsIl9mIiwiX2IiLCJfZyIsIl9wIiwiVHQiLCJfb3JpZ2luYWwiLCJpbmplY3Rpb25zIiwiUHQiLCJFdCIsIk50IiwianQiLCJfaXNEZXN0cm95ZWQiLCJrZWVwQWxpdmUiLCJwcmVwYXRjaCIsIl9pc0NvbXBvbmVudCIsIl9wYXJlbnRWbm9kZSIsImlubGluZVRlbXBsYXRlIiwiV3QiLCIkbW91bnQiLCJfcmVuZGVyQ2hpbGRyZW4iLCJfdm5vZGUiLCIkYXR0cnMiLCIkbGlzdGVuZXJzIiwiX3Byb3BLZXlzIiwiX3BhcmVudExpc3RlbmVycyIsInF0IiwiaW5zZXJ0IiwiX2lzTW91bnRlZCIsIll0IiwiX2luYWN0aXZlIiwiWHQiLCJfZGlyZWN0SW5hY3RpdmUiLCJHdCIsIiRjaGlsZHJlbiIsIkR0IiwiTHQiLCJjaWQiLCJlcnJvckNvbXAiLCJyZXNvbHZlZCIsIkh0Iiwib3duZXJzIiwibG9hZGluZ0NvbXAiLCIkb24iLCJCdCIsIm5hdGl2ZU9uIiwiYWJzdHJhY3QiLCJfbWVyZ2VkIiwiTXQiLCJwcmUiLCJSdCIsIlV0IiwienQiLCJWdCIsIkt0IiwiJG9mZiIsIkp0IiwiWnQiLCJfaGFzSG9va0V2ZW50IiwiUXQiLCJ0biIsIm5uIiwicm4iLCJhbiIsInNuIiwiY24iLCJ0aW1lU3RhbXAiLCJfd2F0Y2hlciIsImxuIiwiX3dhdGNoZXJzIiwidXNlciIsImxhenkiLCJkaXJ0eSIsImRlcHMiLCJuZXdEZXBzIiwiZGVwSWRzIiwibmV3RGVwSWRzIiwiZ2V0dGVyIiwiY2xlYW51cERlcHMiLCJ0ZWFyZG93biIsIl9pc0JlaW5nRGVzdHJveWVkIiwicG4iLCJkbiIsImhuIiwibW4iLCJ5biIsImduIiwiX2NvbXB1dGVkV2F0Y2hlcnMiLCJibiIsInN1cGVyIiwic3VwZXJPcHRpb25zIiwic2VhbGVkT3B0aW9ucyIsImV4dGVuZE9wdGlvbnMiLCJ3biIsIl9pbml0IiwieG4iLCJrbiIsIkFuIiwiT24iLCJfdWlkIiwiX2NvbXBvbmVudFRhZyIsIiRyZWZzIiwiX2RhdGEiLCJ2biIsIiRkZWxldGUiLCIkb25jZSIsIl91cGRhdGUiLCJfX3BhdGNoX18iLCJfX3Z1ZV9fIiwiU24iLCJUbiIsIktlZXBBbGl2ZSIsImluY2x1ZGUiLCJleGNsdWRlIiwiY3JlYXRlZCIsImRlc3Ryb3llZCIsIm1vdW50ZWQiLCJ1dGlsIiwibWVyZ2VPcHRpb25zIiwiZGVmaW5lUmVhY3RpdmUiLCJkZWxldGUiLCJvYnNlcnZhYmxlIiwiX2luc3RhbGxlZFBsdWdpbnMiLCJfQ3RvciIsIkNuIiwiRW4iLCJObiIsImpuIiwiRG4iLCJMbiIsIkluIiwiRm4iLCJQbiIsIlJuIiwiSG4iLCJVbiIsInpuIiwiVm4iLCJLbiIsIm1hdGgiLCJKbiIsInFuIiwiV24iLCJabiIsIkduIiwiWG4iLCJZbiIsIlFuIiwibXVsdGlwbGUiLCJjcmVhdGVDb21tZW50Iiwic2V0VGV4dENvbnRlbnQiLCJzZXRTdHlsZVNjb3BlIiwidHIiLCJyZWZJbkZvciIsIm5yIiwicnIiLCJpciIsIm9yIiwiYXIiLCJzciIsInVyIiwib2xkQXJnIiwiZnIiLCJjb21wb25lbnRVcGRhdGVkIiwiaW5zZXJ0ZWQiLCJjciIsImxyIiwicHIiLCJkciIsImluaGVyaXRBdHRycyIsInZyIiwicmVtb3ZlQXR0cmlidXRlTlMiLCJociIsIk1uIiwic2V0QXR0cmlidXRlTlMiLCJfX2llcGgiLCJtciIsInlyIiwiQm4iLCJfdHJhbnNpdGlvbkNsYXNzZXMiLCJfcHJldkNsYXNzIiwiZ3IiLCJfciIsImJyIiwiJHIiLCJ3ciIsIkNyIiwieHIiLCJrciIsIkFyIiwiT3IiLCJTciIsIlRyIiwiRXIiLCJSciIsImR5bmFtaWMiLCJwbGFpbiIsIk5yIiwiZHluYW1pY0F0dHJzIiwianIiLCJhdHRyc01hcCIsImF0dHJzTGlzdCIsIkRyIiwiaXNEeW5hbWljQXJnIiwiTHIiLCJNciIsIm1pZGRsZSIsIm5hdGl2ZSIsIm5hdGl2ZUV2ZW50cyIsIklyIiwiRnIiLCJQciIsIkhyIiwiQnIiLCJ6ciIsIlZyIiwiVXIiLCJKciIsIktyIiwicXIiLCJHciIsIlFyIiwiWHIiLCJZciIsIl93cmFwcGVyIiwiZWkiLCJ0aSIsInJpIiwiX3ZhbHVlIiwiaWkiLCJfdk1vZGlmaWVycyIsIm9pIiwic2kiLCJjaSIsInN0YXRpY1N0eWxlIiwibGkiLCJmaSIsInBpIiwic2V0UHJvcGVydHkiLCJ2aSIsImRpIiwiaGkiLCJub3JtYWxpemVkU3R5bGUiLCJtaSIsInlpIiwiZ2kiLCIkaSIsImVudGVyQ2xhc3MiLCJlbnRlclRvQ2xhc3MiLCJlbnRlckFjdGl2ZUNsYXNzIiwibGVhdmVDbGFzcyIsImxlYXZlVG9DbGFzcyIsImxlYXZlQWN0aXZlQ2xhc3MiLCJ3aSIsIkNpIiwia2kiLCJBaSIsIk9pIiwiU2kiLCJvbnRyYW5zaXRpb25lbmQiLCJvbndlYmtpdHRyYW5zaXRpb25lbmQiLCJvbmFuaW1hdGlvbmVuZCIsIm9ud2Via2l0YW5pbWF0aW9uZW5kIiwiVGkiLCJFaSIsIk5pIiwiamkiLCJEaSIsIk1pIiwicHJvcENvdW50IiwiTGkiLCJJaSIsImhhc1RyYW5zZm9ybSIsIkZpIiwiUGkiLCJfbGVhdmVDYiIsIl9lbnRlckNiIiwiYXBwZWFyQ2xhc3MiLCJhcHBlYXJUb0NsYXNzIiwiYXBwZWFyQWN0aXZlQ2xhc3MiLCJiZWZvcmVFbnRlciIsImFmdGVyRW50ZXIiLCJlbnRlckNhbmNlbGxlZCIsImJlZm9yZUFwcGVhciIsImFwcGVhciIsImFmdGVyQXBwZWFyIiwiYXBwZWFyQ2FuY2VsbGVkIiwiQmkiLCJfcGVuZGluZyIsIkhpIiwiUmkiLCJiZWZvcmVMZWF2ZSIsImxlYXZlIiwiYWZ0ZXJMZWF2ZSIsImxlYXZlQ2FuY2VsbGVkIiwiZGVsYXlMZWF2ZSIsIlVpIiwiemkiLCJub2RlT3BzIiwicGVuZGluZ0luc2VydCIsInBvc3RwYXRjaCIsImhhc0NoaWxkTm9kZXMiLCJ2bW9kZWwiLCJYaSIsIlZpIiwiX3ZPcHRpb25zIiwiS2kiLCJXaSIsIlppIiwiR2kiLCJxaSIsIkppIiwic2VsZWN0ZWQiLCJzZWxlY3RlZEluZGV4IiwiaW5pdEV2ZW50IiwiWWkiLCJRaSIsIl9fdk9yaWdpbmFsRGlzcGxheSIsImVvIiwibm8iLCJybyIsImlvIiwib28iLCJhbyIsIl9sZWF2aW5nIiwic28iLCJtb3ZlQ2xhc3MiLCJjbyIsIl9tb3ZlQ2IiLCJ1byIsIm5ld1BvcyIsImxvIiwibW92ZWQiLCJXZWJraXRUcmFuc2Zvcm0iLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJmbyIsIlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uR3JvdXAiLCJrZXB0IiwicHJldkNoaWxkcmVuIiwidXBkYXRlZCIsImhhc01vdmUiLCJfcmVmbG93IiwicHJvcGVydHlOYW1lIiwiX2hhc01vdmUiLCJIVE1MVW5rbm93bkVsZW1lbnQiLCJIVE1MRWxlbWVudCIsInlvIiwicG8iLCJ2byIsImhvIiwibW8iLCJzdGF0aWNLZXlzIiwidHJhbnNmb3JtTm9kZSIsImNsYXNzQmluZGluZyIsImdlbkRhdGEiLCJnbyIsInN0eWxlQmluZGluZyIsImJvIiwiJG8iLCJ3byIsIkNvIiwieG8iLCJrbyIsIkFvIiwiT28iLCJTbyIsIlRvIiwiRW8iLCJObyIsImpvIiwiRG8iLCJMbyIsIk1vIiwiSW8iLCJGbyIsIlBvIiwiUm8iLCJIbyIsIkJvIiwiVW8iLCJ6byIsIlZvIiwiS28iLCJKbyIsInFvIiwiV28iLCJabyIsIkdvIiwiWG8iLCJZbyIsIlFvIiwiZWEiLCJ0YSIsIm5hIiwicmEiLCJpYSIsIm9hIiwiYWEiLCJzYSIsImNhIiwibWEiLCJyYXdBdHRyc01hcCIsImZhIiwic2xvdFNjb3BlIiwic2xvdFRhcmdldCIsInNsb3RUYXJnZXREeW5hbWljIiwidmEiLCJzbG90TmFtZSIsImhhc0JpbmRpbmdzIiwiaGEiLCJjYW1lbCIsInBhIiwiYWxpYXMiLCJpdGVyYXRvcjEiLCJpdGVyYXRvcjIiLCJkYSIsImlmQ29uZGl0aW9ucyIsInlhIiwiZ2EiLCIkYSIsIndhIiwiYmEiLCJwcmVUcmFuc2Zvcm1Ob2RlIiwicHJvY2Vzc2VkIiwiaWYiLCJlbHNlIiwiZWxzZWlmIiwiQ2EiLCJleHBlY3RIVE1MIiwiaXNQcmVUYWciLCJpc1VuYXJ5VGFnIiwiY2FuQmVMZWZ0T3BlblRhZyIsInhhIiwiQWEiLCJPYSIsIlNhIiwiVGEiLCJlc2MiLCJzcGFjZSIsIkVhIiwiTmEiLCJqYSIsImN0cmwiLCJhbHQiLCJtZXRhIiwiRGEiLCJMYSIsIk1hIiwiSWEiLCJ3cmFwTGlzdGVuZXJzIiwid3JhcERhdGEiLCJjbG9hayIsIkZhIiwiZGF0YUdlbkZucyIsIm1heWJlQ29tcG9uZW50Iiwib25jZUlkIiwiUGEiLCJSYSIsInN0YXRpY1Jvb3QiLCJzdGF0aWNQcm9jZXNzZWQiLCJIYSIsIm9uY2VQcm9jZXNzZWQiLCJCYSIsImZvclByb2Nlc3NlZCIsInphIiwiaWZQcm9jZXNzZWQiLCJVYSIsInFhIiwiR2EiLCJWYSIsInN0YXRpY0luRm9yIiwiS2EiLCJKYSIsIldhIiwiWmEiLCJYYSIsIllhIiwiY29kZSIsIlFhIiwiZGVsaW1pdGVycyIsImVzIiwidHMiLCJwcmVzZXJ2ZVdoaXRlc3BhY2UiLCJmb3JiaWRkZW4iLCJzaG91bGRLZWVwQ29tbWVudCIsImNvbW1lbnQiLCJ1bmFyeVNsYXNoIiwic2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmIiwic2hvdWxkRGVjb2RlTmV3bGluZXMiLCJsb3dlckNhc2VkVGFnIiwiY29tbWVudHMiLCJvdXRwdXRTb3VyY2VSYW5nZSIsImxhIiwib3B0aW1pemUiLCJzdGF0aWMiLCJrYSIsImFzdCIsInRpcHMiLCJjb21waWxlVG9GdW5jdGlvbnMiLCJycyIsIm9zIiwiYXMiLCJzcyIsImNzIiwib3V0ZXJIVE1MIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJkZWZpbml0aW9uIiwiZ2xvYmFsVGhpcyIsIm5tZCIsImluaXRDb21wb25lbnRzIl0sIm1hcHBpbmdzIjoiOzZtYkF3Qk8sSUFBTUEsRUFBWUEsWUFBQSxTQUFDQyxFQUFNQyxFQUFTQyxHQUN2QyxJQUFNQyxPQUFXQyxJQUFjRixFQUFlQSxFQUFlLElBRWhELFlBQVRGLEVBQ0ZLLE9BQU9DLEVBQUVDLE1BQU0sQ0FDYkMsTUFBTyxHQUNQQyxLQUFNLFFBQ05SLFVBQ0FFLGFBR0ZFLE9BQU9DLEVBQUVDLE1BQU1QLEdBQU0sQ0FDbkJRLE1BQU8sR0FDUEMsS0FBTSxRQUNOUixVQUNBRSxjLFVBS1NKLEcsa0hDcEJmLFVBQ0EsVyxJQUNBLFUsdURBRU9PLEVBQUtELE9BQUxDLEVBUURJLEUsV0FDSixXQUFZQyxFQUFXQyxHQUVyQixJQUYwQixxQkFFWSxJQUFsQ04sRUFBRUssRUFBVUUsV0FBV0MsT0FBM0IsQ0FPQSxHQUhBQyxLQUFLQyxZQUFjSixFQUNuQkcsS0FBS0Usa0JBQWdEYixJQUFqQ08sRUFBVU8seUJBQXFFZCxJQUFqQ08sRUFBVVEsbUJBRXhFSixLQUFLRSxhQUFjLENBQ3JCLElBQU1HLEVB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LEVBQVEsSUFBSyxFQUFRLElBQUssRUFBUSxJQUFLLEVBQVEsSUFDMUUsRUFBUSxJQUFNLEVBQVEsSUFDdEIsRUFBUSxJQUFNLEVBQVEsSUFDdEIsRUFBUSxJQUFNLEVBQVEsSUFBSyxFQUFRLElBQUssRUFBUSxJQUNoRCxFQUFRLElBQU0sRUFBUSxJQUFLLEVBQVEsSUFBSyxFQUFRLElBQ2hELEVBQVEsSUFBTSxFQUFRLElBQUssRUFBUSxJQUFLLEVBQVEsSUFDaEQsRUFBUSxJQUFNLEVBQVEsSUFBSyxFQUFRLElBQUssRUFBUSxJQUNoRCxFQUFRLElBQU0sRUFBUSxJQUN0QixFQUFRLElBQU0sRUFBUSxJQUFLLEVBQVEsSUFBSyxFQUFRLElBQUssRUFBUSxJQUFLLEVBQVEsSUFDMUUsRUFBUSxJQUFNLEVBQVEsSUFBSyxFQUFRLElBQUssRUFBUSxJQUFLLEVBQVEsSUFBSyxFQUFRLElBQzFFLEVBQVEsSUFBTSxFQUFRLElBQUssRUFBUSxJQUFLLEVBQVEsSUFDaEQsRUFBUSxJQUFNLEVBQVEsSUFBSyxFQUFRLElBQUssRUFBUSxJQUNoRCxFQUFRLElBQU0sRUFBUSxJQUFLLEVBQVEsSUFDbkMsRUFBUSxLQUFNLEVBQVEsS0FDdEIsRUFBUSxLQUFNLEVBQVEsS0FDdEIsRUFBUSxLQUVSLEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUN6QyxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFDekMsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUN4RCxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQ3hELEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFDeEQsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFDdkUsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFDdkUsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUN4RCxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQ3hELEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFDeEQsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFDdkUsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFDdkUsRUFBVSxJQUFNLEVBQVUsSUFDMUIsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQ3pDLEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQ3ZFLEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQ3ZFLEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFDeEQsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUN4RCxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFDekMsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQ3pDLEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUN6QyxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFDekMsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUN4RCxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQ3hELEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUN6QyxFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFDekMsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQ3RGLEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUFLLEVBQVUsSUFBSyxFQUFVLElBQUssRUFBVSxJQUN0RixFQUFVLElBQU0sRUFBVSxJQUMxQixFQUFVLElBQU0sRUFBVSxJQUFLLEVBQVUsSUFDekMsRUFBVSxJQUFNLEVBQVUsSUFBSyxFQUFVLElBQ3pDLEVBQVUsSUFBTSxFQUFVLElBQUssRUFBVSxJQUN6QyxFQUFVLEtBQU0sRUFBVSxLQUMxQixFQUFVLEtBQU0sRUFBVSxLQUMxQixFQUFVLEtBQU0sRUFBVSxNQW91QnhCZ0IsR0FBaUJoQixHQWh1QkgsQ0FDaEIsSUFBSyxRQUNMLElBQUssT0FDTCxJQUFLLE9BQ0wsSUFBSyxTQUNMLElBQUssVUFvdUJQLFNBQVNpQixHQUFpQkMsR0FDeEIsTUFBTyxLQUFPaEYsR0FBY2dGLEdBc0I5QixTQUFTQyxHQUFXZCxHQUNsQixPQUFPekUsR0FBYXJuQixLQUFLOHJCLEdBc0MzQixTQUFTZSxHQUFXejhCLEdBQ2xCLElBQUloVixHQUFTLEVBQ1QyeEIsRUFBU2hrQyxNQUFNcW5CLEVBQUkvekIsTUFLdkIsT0FIQSt6QixFQUFJbHVCLFNBQVEsU0FBUzdCLEVBQU93QyxHQUMxQmtxQyxJQUFTM3hCLEdBQVMsQ0FBQ3ZZLEVBQUt4QyxNQUVuQjBzQyxFQVdULFNBQVMrZixHQUFReEQsRUFBTXJrRCxHQUNyQixPQUFPLFNBQVMwMEIsR0FDZCxPQUFPMnZCLEVBQUtya0QsRUFBVTAwQixLQWExQixTQUFTb3pCLEdBQWV0RCxFQUFPNXdCLEdBTTdCLElBTEEsSUFBSXpkLEdBQVMsRUFDVDFlLEVBQVMrc0QsRUFBTS9zRCxPQUNmd3RELEVBQVcsRUFDWG5kLEVBQVMsS0FFSjN4QixFQUFRMWUsR0FBUSxDQUN2QixJQUFJMkQsRUFBUW9wRCxFQUFNcnVDLEdBQ2QvYSxJQUFVdzRCLEdBQWV4NEIsSUFBVStnRCxJQUNyQ3FJLEVBQU1ydUMsR0FBU2dtQyxFQUNmclUsRUFBT21kLEtBQWM5dUMsR0FHekIsT0FBTzJ4QixFQVVULFNBQVNpZ0IsR0FBV3JsRCxHQUNsQixJQUFJeVQsR0FBUyxFQUNUMnhCLEVBQVNoa0MsTUFBTXBCLEVBQUl0TCxNQUt2QixPQUhBc0wsRUFBSXpGLFNBQVEsU0FBUzdCLEdBQ25CMHNDLElBQVMzeEIsR0FBUy9hLEtBRWIwc0MsRUFVVCxTQUFTa2dCLEdBQVd0bEQsR0FDbEIsSUFBSXlULEdBQVMsRUFDVDJ4QixFQUFTaGtDLE1BQU1wQixFQUFJdEwsTUFLdkIsT0FIQXNMLEVBQUl6RixTQUFRLFNBQVM3QixHQUNuQjBzQyxJQUFTM3hCLEdBQVMsQ0FBQy9hLEVBQU9BLE1BRXJCMHNDLEVBb0RULFNBQVNtZ0IsR0FBV3BCLEdBQ2xCLE9BQU9jLEdBQVdkLEdBaURwQixTQUFxQkEsR0FFbkIsSUFEQSxJQUFJL2UsRUFBU29hLEdBQVVnRyxVQUFZLEVBQzVCaEcsR0FBVW5uQixLQUFLOHJCLE1BQ2xCL2UsRUFFSixPQUFPQSxFQXJESHFnQixDQUFZdEIsR0FDWmpCLEdBQVVpQixHQVVoQixTQUFTdUIsR0FBY3ZCLEdBQ3JCLE9BQU9jLEdBQVdkLEdBbURwQixTQUF3QkEsR0FDdEIsT0FBT0EsRUFBTzV5QyxNQUFNaXVDLEtBQWMsR0FuRDlCbUcsQ0FBZXhCLEdBN2tCckIsU0FBc0JBLEdBQ3BCLE9BQU9BLEVBQU8zakQsTUFBTSxJQTZrQmhCb2xELENBQWF6QixHQVduQixTQUFTQyxHQUFnQkQsR0FHdkIsSUFGQSxJQUFJMXdDLEVBQVEwd0MsRUFBT3B2RCxPQUVaMGUsS0FBV2twQyxHQUFhdGtCLEtBQUs4ckIsRUFBT3p1QixPQUFPamlCLE1BQ2xELE9BQU9BLEVBVVQsSUFBSW95QyxHQUFtQi9CLEdBMzhCSCxDQUNsQixRQUFTLElBQ1QsT0FBUSxJQUNSLE9BQVEsSUFDUixTQUFVLElBQ1YsUUFBUyxNQWs0Z0JQL29ELEdBdDNlZSxTQUFVK3FELEVBQWExTyxHQUl4QyxJQTZCTWhMLEVBN0JGaHJDLEdBSEpnMkMsRUFBcUIsTUFBWEEsRUFBa0JrSixHQUFPdmxELEdBQUVxK0MsU0FBU2tILEdBQUtqbkQsU0FBVSs5QyxFQUFTcjhDLEdBQUVnckQsS0FBS3pGLEdBQU1WLE1BRy9EeCtDLE1BQ2hCNGtELEdBQU81TyxFQUFRNE8sS0FDZjN3QixHQUFRK2hCLEVBQVEvaEIsTUFDaEJpUCxHQUFXOFMsRUFBUTlTLFNBQ25COTVCLEdBQU80c0MsRUFBUTVzQyxLQUNmblIsR0FBUys5QyxFQUFRLzlDLE9BQ2pCd1QsR0FBU3VxQyxFQUFRdnFDLE9BQ2pCeW9CLEdBQVM4aEIsRUFBUTloQixPQUNqQmpELEdBQVkra0IsRUFBUS9rQixVQUdwQjR6QixHQUFhN2tELEVBQU05SCxVQUNuQjRzRCxHQUFZNWhCLEdBQVNockMsVUFDckI2c0QsR0FBYzlzRCxHQUFPQyxVQUdyQjhzRCxHQUFhaFAsRUFBUSxzQkFHckJpUCxHQUFlSCxHQUFVOXFELFNBR3pCN0IsR0FBaUI0c0QsR0FBWTVzRCxlQUc3QitzRCxHQUFZLEVBR1pDLElBQ0VuYSxFQUFNLFNBQVMxSCxLQUFLMGhCLElBQWNBLEdBQVd4ckQsTUFBUXdyRCxHQUFXeHJELEtBQUswdkMsVUFBWSxLQUN2RSxpQkFBbUI4QixFQUFPLEdBUXRDb2EsR0FBdUJMLEdBQVkvcUQsU0FHbkNxckQsR0FBbUJKLEdBQWE3c0QsS0FBS0gsSUFHckNxdEQsR0FBVXBHLEdBQUt2bEQsRUFHZjRyRCxHQUFhOTVDLEdBQU8sSUFDdEJ3NUMsR0FBYTdzRCxLQUFLRCxJQUFnQnZDLFFBQVF3bEQsR0FBYyxRQUN2RHhsRCxRQUFRLHlEQUEwRCxTQUFXLEtBSTVFNHZELEdBQVNsRyxHQUFnQnRKLEVBQVF3UCxPQUFTdnlELEVBQzFDMDFDLEdBQVNxTixFQUFRck4sT0FDakI4YyxHQUFhelAsRUFBUXlQLFdBQ3JCQyxHQUFjRixHQUFTQSxHQUFPRSxZQUFjenlELEVBQzVDMHlELEdBQWU1QixHQUFROXJELEdBQU9pdEMsZUFBZ0JqdEMsSUFDOUMydEQsR0FBZTN0RCxHQUFPb29DLE9BQ3RCbUUsR0FBdUJ1Z0IsR0FBWXZnQixxQkFDbkMxSyxHQUFTK3FCLEdBQVcvcUIsT0FDcEIrckIsR0FBbUJsZCxHQUFTQSxHQUFPbWQsbUJBQXFCN3lELEVBQ3hEOHlELEdBQWNwZCxHQUFTQSxHQUFPNUUsU0FBVzl3QyxFQUN6Qyt5RCxHQUFpQnJkLEdBQVNBLEdBQU9zZCxZQUFjaHpELEVBRS9DdXRDLEdBQWtCLFdBQ3BCLElBQ0UsSUFBSStmLEVBQU8yRixHQUFVanVELEdBQVEsa0JBRTdCLE9BREFzb0QsRUFBSyxHQUFJLEdBQUksSUFDTkEsRUFDUCxNQUFPM25ELEtBTFUsR0FTakJ1dEQsR0FBa0JuUSxFQUFRb1EsZUFBaUJsSCxHQUFLa0gsY0FBZ0JwUSxFQUFRb1EsYUFDeEVDLEdBQVN6QixJQUFRQSxHQUFLcFksTUFBUTBTLEdBQUswRixLQUFLcFksS0FBT29ZLEdBQUtwWSxJQUNwRDhaLEdBQWdCdFEsRUFBUWpKLGFBQWVtUyxHQUFLblMsWUFBY2lKLEVBQVFqSixXQUdsRXdaLEdBQWFuOUMsR0FBS08sS0FDbEI2OEMsR0FBY3A5QyxHQUFLK29CLE1BQ25CczBCLEdBQW1CeHVELEdBQU8reEMsc0JBQzFCMGMsR0FBaUJsQixHQUFTQSxHQUFPbUIsU0FBVzF6RCxFQUM1QzJ6RCxHQUFpQjVRLEVBQVEzWSxTQUN6QndwQixHQUFhaEMsR0FBV3p3RCxLQUN4QjB5RCxHQUFhL0MsR0FBUTlyRCxHQUFPdUIsS0FBTXZCLElBQ2xDOHVELEdBQVkzOUMsR0FBSzRxQixJQUNqQmd6QixHQUFZNTlDLEdBQUsycUIsSUFDakJrekIsR0FBWXJDLEdBQUtwWSxJQUNqQjBhLEdBQWlCbFIsRUFBUS90QixTQUN6QmsvQixHQUFlLzlDLEdBQUtxd0IsT0FDcEIydEIsR0FBZ0J2QyxHQUFXeHFCLFFBRzNCZ3RCLEdBQVduQixHQUFVbFEsRUFBUyxZQUM5QnNSLEdBQU1wQixHQUFVbFEsRUFBUyxPQUN6QmxQLEdBQVVvZixHQUFVbFEsRUFBUyxXQUM3QnVSLEdBQU1yQixHQUFVbFEsRUFBUyxPQUN6QndSLEdBQVV0QixHQUFVbFEsRUFBUyxXQUM3QnlSLEdBQWV2QixHQUFVanVELEdBQVEsVUFHakN5dkQsR0FBVUYsSUFBVyxJQUFJQSxHQUd6QkcsR0FBWSxHQUdaQyxHQUFxQkMsR0FBU1IsSUFDOUJTLEdBQWdCRCxHQUFTUCxJQUN6QlMsR0FBb0JGLEdBQVMvZ0IsSUFDN0JraEIsR0FBZ0JILEdBQVNOLElBQ3pCVSxHQUFvQkosR0FBU0wsSUFHN0JVLEdBQWN2ZixHQUFTQSxHQUFPendDLFVBQVlqRixFQUMxQ2sxRCxHQUFnQkQsR0FBY0EsR0FBWTN5QixRQUFVdGlDLEVBQ3BEbTFELEdBQWlCRixHQUFjQSxHQUFZbHVELFNBQVcvRyxFQXlIMUQsU0FBU28xRCxHQUFPL3dELEdBQ2QsR0FBSWd4RCxHQUFhaHhELEtBQVdzQyxHQUFRdEMsTUFBWUEsYUFBaUJpeEQsSUFBYyxDQUM3RSxHQUFJanhELGFBQWlCa3hELEdBQ25CLE9BQU9seEQsRUFFVCxHQUFJYSxHQUFlQyxLQUFLZCxFQUFPLGVBQzdCLE9BQU9teEQsR0FBYW54RCxHQUd4QixPQUFPLElBQUlreEQsR0FBY2x4RCxHQVczQixJQUFJb3hELEdBQWMsV0FDaEIsU0FBUzluRCxLQUNULE9BQU8sU0FBU2lsQyxHQUNkLElBQUtuRixHQUFTbUYsR0FDWixNQUFPLEdBRVQsR0FBSStmLEdBQ0YsT0FBT0EsR0FBYS9mLEdBRXRCamxDLEVBQU8xSSxVQUFZMnRDLEVBQ25CLElBQUk3QixFQUFTLElBQUlwakMsRUFFakIsT0FEQUEsRUFBTzFJLFVBQVlqRixFQUNaK3dDLEdBWk0sR0FxQmpCLFNBQVMya0IsTUFXVCxTQUFTSCxHQUFjbHhELEVBQU9zeEQsR0FDNUJoMUQsS0FBS2kxRCxZQUFjdnhELEVBQ25CMUQsS0FBS2sxRCxZQUFjLEdBQ25CbDFELEtBQUttMUQsWUFBY0gsRUFDbkJoMUQsS0FBS28xRCxVQUFZLEVBQ2pCcDFELEtBQUtxMUQsV0FBYWgyRCxFQWdGcEIsU0FBU3MxRCxHQUFZanhELEdBQ25CMUQsS0FBS2kxRCxZQUFjdnhELEVBQ25CMUQsS0FBS2sxRCxZQUFjLEdBQ25CbDFELEtBQUtzMUQsUUFBVSxFQUNmdDFELEtBQUt1MUQsY0FBZSxFQUNwQnYxRCxLQUFLdzFELGNBQWdCLEdBQ3JCeDFELEtBQUt5MUQsY0FBZ0IzUSxFQUNyQjlrRCxLQUFLMDFELFVBQVksR0FnSG5CLFNBQVNDLEdBQUsxbEIsR0FDWixJQUFJeHhCLEdBQVMsRUFDVDFlLEVBQW9CLE1BQVhrd0MsRUFBa0IsRUFBSUEsRUFBUWx3QyxPQUczQyxJQURBQyxLQUFLbzVDLFVBQ0kzNkIsRUFBUTFlLEdBQVEsQ0FDdkIsSUFBSTYxRCxFQUFRM2xCLEVBQVF4eEIsR0FDcEJ6ZSxLQUFLZ0wsSUFBSTRxRCxFQUFNLEdBQUlBLEVBQU0sS0FpRzdCLFNBQVNDLEdBQVU1bEIsR0FDakIsSUFBSXh4QixHQUFTLEVBQ1QxZSxFQUFvQixNQUFYa3dDLEVBQWtCLEVBQUlBLEVBQVFsd0MsT0FHM0MsSUFEQUMsS0FBS281QyxVQUNJMzZCLEVBQVExZSxHQUFRLENBQ3ZCLElBQUk2MUQsRUFBUTNsQixFQUFReHhCLEdBQ3BCemUsS0FBS2dMLElBQUk0cUQsRUFBTSxHQUFJQSxFQUFNLEtBOEc3QixTQUFTRSxHQUFTN2xCLEdBQ2hCLElBQUl4eEIsR0FBUyxFQUNUMWUsRUFBb0IsTUFBWGt3QyxFQUFrQixFQUFJQSxFQUFRbHdDLE9BRzNDLElBREFDLEtBQUtvNUMsVUFDSTM2QixFQUFRMWUsR0FBUSxDQUN2QixJQUFJNjFELEVBQVEzbEIsRUFBUXh4QixHQUNwQnplLEtBQUtnTCxJQUFJNHFELEVBQU0sR0FBSUEsRUFBTSxLQWlHN0IsU0FBU0csR0FBUzd1RCxHQUNoQixJQUFJdVgsR0FBUyxFQUNUMWUsRUFBbUIsTUFBVm1ILEVBQWlCLEVBQUlBLEVBQU9uSCxPQUd6QyxJQURBQyxLQUFLZzJELFNBQVcsSUFBSUYsS0FDWHIzQyxFQUFRMWUsR0FDZkMsS0FBS3FRLElBQUluSixFQUFPdVgsSUE2Q3BCLFNBQVN3M0MsR0FBTWhtQixHQUNiLElBQUl2dkMsRUFBT1YsS0FBS2cyRCxTQUFXLElBQUlILEdBQVU1bEIsR0FDekNqd0MsS0FBS04sS0FBT2dCLEVBQUtoQixLQXFHbkIsU0FBU3cyRCxHQUFjeHlELEVBQU95eUQsR0FDNUIsSUFBSUMsRUFBUXB3RCxHQUFRdEMsR0FDaEIyeUQsR0FBU0QsR0FBU0UsR0FBWTV5RCxHQUM5QjZ5RCxHQUFVSCxJQUFVQyxHQUFTdEQsR0FBU3J2RCxHQUN0Qzh5RCxHQUFVSixJQUFVQyxJQUFVRSxHQUFVN0osR0FBYWhwRCxHQUNyRCt5RCxFQUFjTCxHQUFTQyxHQUFTRSxHQUFVQyxFQUMxQ3BtQixFQUFTcW1CLEVBQWN4SCxHQUFVdnJELEVBQU0zRCxPQUFRdWdDLElBQVUsR0FDekR2Z0MsRUFBU3F3QyxFQUFPcndDLE9BRXBCLElBQUssSUFBSW1HLEtBQU94QyxHQUNUeXlELElBQWE1eEQsR0FBZUMsS0FBS2QsRUFBT3dDLElBQ3ZDdXdELElBRVEsVUFBUHZ3RCxHQUVDcXdELElBQWtCLFVBQVByd0QsR0FBMEIsVUFBUEEsSUFFOUJzd0QsSUFBa0IsVUFBUHR3RCxHQUEwQixjQUFQQSxHQUE4QixjQUFQQSxJQUV0RHd3RCxHQUFReHdELEVBQUtuRyxLQUVsQnF3QyxFQUFPOXZDLEtBQUs0RixHQUdoQixPQUFPa3FDLEVBVVQsU0FBU3VtQixHQUFZN0osR0FDbkIsSUFBSS9zRCxFQUFTK3NELEVBQU0vc0QsT0FDbkIsT0FBT0EsRUFBUytzRCxFQUFNOEosR0FBVyxFQUFHNzJELEVBQVMsSUFBTVYsRUFXckQsU0FBU3czRCxHQUFnQi9KLEVBQU83dEIsR0FDOUIsT0FBTzYzQixHQUFZQyxHQUFVakssR0FBUWtLLEdBQVUvM0IsRUFBRyxFQUFHNnRCLEVBQU0vc0QsU0FVN0QsU0FBU2szRCxHQUFhbkssR0FDcEIsT0FBT2dLLEdBQVlDLEdBQVVqSyxJQVkvQixTQUFTb0ssR0FBaUJscUQsRUFBUTlHLEVBQUt4QyxJQUNoQ0EsSUFBVXJFLElBQWNtcUMsR0FBR3g4QixFQUFPOUcsR0FBTXhDLElBQ3hDQSxJQUFVckUsS0FBZTZHLEtBQU84RyxLQUNuQ21xRCxHQUFnQm5xRCxFQUFROUcsRUFBS3hDLEdBY2pDLFNBQVMwekQsR0FBWXBxRCxFQUFROUcsRUFBS3hDLEdBQ2hDLElBQUkyekQsRUFBV3JxRCxFQUFPOUcsR0FDaEIzQixHQUFlQyxLQUFLd0ksRUFBUTlHLElBQVFzakMsR0FBRzZ0QixFQUFVM3pELEtBQ2xEQSxJQUFVckUsR0FBZTZHLEtBQU84RyxJQUNuQ21xRCxHQUFnQm5xRCxFQUFROUcsRUFBS3hDLEdBWWpDLFNBQVM0ekQsR0FBYXhLLEVBQU81bUQsR0FFM0IsSUFEQSxJQUFJbkcsRUFBUytzRCxFQUFNL3NELE9BQ1pBLEtBQ0wsR0FBSXlwQyxHQUFHc2pCLEVBQU0vc0QsR0FBUSxHQUFJbUcsR0FDdkIsT0FBT25HLEVBR1gsT0FBUSxFQWNWLFNBQVN3M0QsR0FBZWxKLEVBQVl0QixFQUFRQyxFQUFVQyxHQUlwRCxPQUhBdUssR0FBU25KLEdBQVksU0FBUzNxRCxFQUFPd0MsRUFBS21vRCxHQUN4Q3RCLEVBQU9FLEVBQWF2cEQsRUFBT3NwRCxFQUFTdHBELEdBQVEycUQsTUFFdkNwQixFQVlULFNBQVN3SyxHQUFXenFELEVBQVF6RixHQUMxQixPQUFPeUYsR0FBVTBxRCxHQUFXbndELEVBQVEzQixHQUFLMkIsR0FBU3lGLEdBeUJwRCxTQUFTbXFELEdBQWdCbnFELEVBQVE5RyxFQUFLeEMsR0FDekIsYUFBUHdDLEdBQXNCMG1DLEdBQ3hCQSxHQUFlNS9CLEVBQVE5RyxFQUFLLENBQzFCLGNBQWdCLEVBQ2hCLFlBQWMsRUFDZCxNQUFTeEMsRUFDVCxVQUFZLElBR2RzSixFQUFPOUcsR0FBT3hDLEVBWWxCLFNBQVNpMEQsR0FBTzNxRCxFQUFRNHFELEdBTXRCLElBTEEsSUFBSW41QyxHQUFTLEVBQ1QxZSxFQUFTNjNELEVBQU03M0QsT0FDZnF3QyxFQUFTaGtDLEVBQU1yTSxHQUNmODNELEVBQWlCLE1BQVY3cUQsSUFFRnlSLEVBQVExZSxHQUNmcXdDLEVBQU8zeEIsR0FBU281QyxFQUFPeDRELEVBQVlzTCxHQUFJcUMsRUFBUTRxRCxFQUFNbjVDLElBRXZELE9BQU8yeEIsRUFZVCxTQUFTNG1CLEdBQVVjLEVBQVFDLEVBQU9DLEdBU2hDLE9BUklGLEdBQVdBLElBQ1RFLElBQVUzNEQsSUFDWnk0RCxFQUFTQSxHQUFVRSxFQUFRRixFQUFTRSxHQUVsQ0QsSUFBVTE0RCxJQUNaeTRELEVBQVNBLEdBQVVDLEVBQVFELEVBQVNDLElBR2pDRCxFQW1CVCxTQUFTRyxHQUFVdjBELEVBQU93MEQsRUFBU0MsRUFBWWp5RCxFQUFLOEcsRUFBUW9yRCxHQUMxRCxJQUFJaG9CLEVBQ0Fpb0IsRUFya0ZjLEVBcWtGTEgsRUFDVEksRUFya0ZjLEVBcWtGTEosRUFDVEssRUFya0ZpQixFQXFrRlJMLEVBS2IsR0FISUMsSUFDRi9uQixFQUFTcGpDLEVBQVNtckQsRUFBV3owRCxFQUFPd0MsRUFBSzhHLEVBQVFvckQsR0FBU0QsRUFBV3owRCxJQUVuRTBzQyxJQUFXL3dDLEVBQ2IsT0FBTyt3QyxFQUVULElBQUt0RCxHQUFTcHBDLEdBQ1osT0FBT0EsRUFFVCxJQUFJMHlELEVBQVFwd0QsR0FBUXRDLEdBQ3BCLEdBQUkweUQsR0FFRixHQURBaG1CLEVBNjhHSixTQUF3QjBjLEdBQ3RCLElBQUkvc0QsRUFBUytzRCxFQUFNL3NELE9BQ2Zxd0MsRUFBUyxJQUFJMGMsRUFBTXByQixZQUFZM2hDLEdBT25DLE9BSklBLEdBQTZCLGlCQUFaK3NELEVBQU0sSUFBa0J2b0QsR0FBZUMsS0FBS3NvRCxFQUFPLFdBQ3RFMWMsRUFBTzN4QixNQUFRcXVDLEVBQU1ydUMsTUFDckIyeEIsRUFBT3JsQyxNQUFRK2hELEVBQU0vaEQsT0FFaEJxbEMsRUF0OUdJb29CLENBQWU5MEQsSUFDbkIyMEQsRUFDSCxPQUFPdEIsR0FBVXJ6RCxFQUFPMHNDLE9BRXJCLENBQ0wsSUFBSTZHLEVBQU13aEIsR0FBTy8wRCxHQUNiZzFELEVBQVN6aEIsR0FBT29PLEdBQVdwTyxHQUFPcU8sRUFFdEMsR0FBSXlOLEdBQVNydkQsR0FDWCxPQUFPaTFELEdBQVlqMUQsRUFBTzIwRCxHQUU1QixHQUFJcGhCLEdBQU93TyxHQUFheE8sR0FBTytOLEdBQVkwVCxJQUFXMXJELEdBRXBELEdBREFvakMsRUFBVWtvQixHQUFVSSxFQUFVLEdBQUtFLEdBQWdCbDFELElBQzlDMjBELEVBQ0gsT0FBT0MsRUErbkVmLFNBQXVCL3dELEVBQVF5RixHQUM3QixPQUFPMHFELEdBQVdud0QsRUFBUXN4RCxHQUFhdHhELEdBQVN5RixHQS9uRXRDOHJELENBQWNwMUQsRUFuSDFCLFNBQXNCc0osRUFBUXpGLEdBQzVCLE9BQU95RixHQUFVMHFELEdBQVdud0QsRUFBUXd4RCxHQUFPeHhELEdBQVN5RixHQWtIckJnc0QsQ0FBYTVvQixFQUFRMXNDLElBa25FdEQsU0FBcUI2RCxFQUFReUYsR0FDM0IsT0FBTzBxRCxHQUFXbndELEVBQVEydEMsR0FBVzN0QyxHQUFTeUYsR0FsbkVwQ2lzRCxDQUFZdjFELEVBQU8rekQsR0FBV3JuQixFQUFRMXNDLFFBRXZDLENBQ0wsSUFBS3FuRCxHQUFjOVQsR0FDakIsT0FBT2pxQyxFQUFTdEosRUFBUSxHQUUxQjBzQyxFQTQ5R04sU0FBd0JwakMsRUFBUWlxQyxFQUFLb2hCLEdBQ25DLElBemxEbUJhLEVBeWxEZkMsRUFBT25zRCxFQUFPMDBCLFlBQ2xCLE9BQVF1VixHQUNOLEtBQUsrTyxFQUNILE9BQU9vVCxHQUFpQnBzRCxHQUUxQixLQUFLazRDLEVBQ0wsS0FBS0MsRUFDSCxPQUFPLElBQUlnVSxHQUFNbnNELEdBRW5CLEtBQUtpNUMsRUFDSCxPQTVuRE4sU0FBdUJvVCxFQUFVaEIsR0FDL0IsSUFBSWlCLEVBQVNqQixFQUFTZSxHQUFpQkMsRUFBU0MsUUFBVUQsRUFBU0MsT0FDbkUsT0FBTyxJQUFJRCxFQUFTMzNCLFlBQVk0M0IsRUFBUUQsRUFBU0UsV0FBWUYsRUFBU0csWUEwbkQzREMsQ0FBY3pzRCxFQUFRcXJELEdBRS9CLEtBQUtuUyxFQUFZLEtBQUtDLEVBQ3RCLEtBQUtDLEVBQVMsS0FBS0MsRUFBVSxLQUFLQyxFQUNsQyxLQUFLQyxFQUFVLEtBQUtDLEVBQWlCLEtBQUtDLEVBQVcsS0FBS0MsRUFDeEQsT0FBT2dULEdBQWdCMXNELEVBQVFxckQsR0FFakMsS0FBSzlTLEVBQ0gsT0FBTyxJQUFJNFQsRUFFYixLQUFLM1QsRUFDTCxLQUFLSyxFQUNILE9BQU8sSUFBSXNULEVBQUtuc0QsR0FFbEIsS0FBSzI0QyxFQUNILE9BL25ETixTQUFxQmdVLEdBQ25CLElBQUl2cEIsRUFBUyxJQUFJdXBCLEVBQU9qNEIsWUFBWWk0QixFQUFPcHlELE9BQVE0Z0QsR0FBUXpZLEtBQUtpcUIsSUFFaEUsT0FEQXZwQixFQUFPb2dCLFVBQVltSixFQUFPbkosVUFDbkJwZ0IsRUE0bkRJd3BCLENBQVk1c0QsR0FFckIsS0FBSzQ0QyxFQUNILE9BQU8sSUFBSXVULEVBRWIsS0FBS3JULEVBQ0gsT0F4bkRlb1QsRUF3bkRJbHNELEVBdm5EaEJ1bkQsR0FBZ0Jsd0QsR0FBT2t3RCxHQUFjL3ZELEtBQUswMEQsSUFBVyxJQXI0RC9DVyxDQUFlbjJELEVBQU91ekMsRUFBS29oQixJQUl4Q0QsSUFBVUEsRUFBUSxJQUFJbkMsSUFDdEIsSUFBSTZELEVBQVUxQixFQUFNenRELElBQUlqSCxHQUN4QixHQUFJbzJELEVBQ0YsT0FBT0EsRUFFVDFCLEVBQU1wdEQsSUFBSXRILEVBQU8wc0MsR0FFYm9jLEdBQU05b0QsR0FDUkEsRUFBTTZCLFNBQVEsU0FBU3cwRCxHQUNyQjNwQixFQUFPLy9CLElBQUk0bkQsR0FBVThCLEVBQVU3QixFQUFTQyxFQUFZNEIsRUFBVXIyRCxFQUFPMDBELE9BRTlEaE0sR0FBTTFvRCxJQUNmQSxFQUFNNkIsU0FBUSxTQUFTdzBELEVBQVU3ekQsR0FDL0JrcUMsRUFBT3BsQyxJQUFJOUUsRUFBSyt4RCxHQUFVOEIsRUFBVTdCLEVBQVNDLEVBQVlqeUQsRUFBS3hDLEVBQU8wMEQsT0FJekUsSUFJSTU2QixFQUFRNDRCLEVBQVEvMkQsR0FKTGs1RCxFQUNWRCxFQUFTMEIsR0FBZUMsR0FDeEIzQixFQUFTUyxHQUFTbnpELElBRWtCbEMsR0FTekMsT0FSQXdwRCxHQUFVMXZCLEdBQVM5NUIsR0FBTyxTQUFTcTJELEVBQVU3ekQsR0FDdkNzM0IsSUFFRnU4QixFQUFXcjJELEVBRFh3QyxFQUFNNnpELElBSVIzQyxHQUFZaG5CLEVBQVFscUMsRUFBSyt4RCxHQUFVOEIsRUFBVTdCLEVBQVNDLEVBQVlqeUQsRUFBS3hDLEVBQU8wMEQsT0FFekVob0IsRUF5QlQsU0FBUzhwQixHQUFlbHRELEVBQVF6RixFQUFRaTJCLEdBQ3RDLElBQUl6OUIsRUFBU3k5QixFQUFNejlCLE9BQ25CLEdBQWMsTUFBVmlOLEVBQ0YsT0FBUWpOLEVBR1YsSUFEQWlOLEVBQVMzSSxHQUFPMkksR0FDVGpOLEtBQVUsQ0FDZixJQUFJbUcsRUFBTXMzQixFQUFNejlCLEdBQ1pzdEQsRUFBWTlsRCxFQUFPckIsR0FDbkJ4QyxFQUFRc0osRUFBTzlHLEdBRW5CLEdBQUt4QyxJQUFVckUsS0FBZTZHLEtBQU84RyxLQUFhcWdELEVBQVUzcEQsR0FDMUQsT0FBTyxFQUdYLE9BQU8sRUFhVCxTQUFTeTJELEdBQVV4TixFQUFNeU4sRUFBTXYwRCxHQUM3QixHQUFtQixtQkFBUjhtRCxFQUNULE1BQU0sSUFBSXR2QixHQUFVa25CLEdBRXRCLE9BQU9wTCxJQUFXLFdBQWF3VCxFQUFLaHdCLE1BQU10OUIsRUFBV3dHLEtBQVV1MEQsR0FjakUsU0FBU0MsR0FBZXZOLEVBQU81bEQsRUFBUThsRCxFQUFVVyxHQUMvQyxJQUFJbHZDLEdBQVMsRUFDVHlNLEVBQVdzaUMsR0FDWDhNLEdBQVcsRUFDWHY2RCxFQUFTK3NELEVBQU0vc0QsT0FDZnF3QyxFQUFTLEdBQ1RtcUIsRUFBZXJ6RCxFQUFPbkgsT0FFMUIsSUFBS0EsRUFDSCxPQUFPcXdDLEVBRUw0YyxJQUNGOWxELEVBQVMwbUQsR0FBUzFtRCxFQUFRbW9ELEdBQVVyQyxLQUVsQ1csR0FDRnppQyxFQUFXd2lDLEdBQ1g0TSxHQUFXLEdBRUpwekQsRUFBT25ILFFBdHZGRyxNQXV2RmpCbXJCLEVBQVdxa0MsR0FDWCtLLEdBQVcsRUFDWHB6RCxFQUFTLElBQUk2dUQsR0FBUzd1RCxJQUV4QnN6RCxFQUNBLE9BQVMvN0MsRUFBUTFlLEdBQVEsQ0FDdkIsSUFBSTJELEVBQVFvcEQsRUFBTXJ1QyxHQUNkZzhDLEVBQXVCLE1BQVp6TixFQUFtQnRwRCxFQUFRc3BELEVBQVN0cEQsR0FHbkQsR0FEQUEsRUFBU2lxRCxHQUF3QixJQUFWanFELEVBQWVBLEVBQVEsRUFDMUM0MkQsR0FBWUcsR0FBYUEsRUFBVSxDQUVyQyxJQURBLElBQUlDLEVBQWNILEVBQ1hHLEtBQ0wsR0FBSXh6RCxFQUFPd3pELEtBQWlCRCxFQUMxQixTQUFTRCxFQUdicHFCLEVBQU85dkMsS0FBS29ELFFBRUp3bkIsRUFBU2hrQixFQUFRdXpELEVBQVU5TSxJQUNuQ3ZkLEVBQU85dkMsS0FBS29ELEdBR2hCLE9BQU8wc0MsRUFqa0NUcWtCLEdBQU9rRyxpQkFBbUIsQ0FReEIsT0FBVXpULEVBUVYsU0FBWUMsRUFRWixZQUFlQyxFQVFmLFNBQVksR0FRWixRQUFXLENBUVQsRUFBS3FOLEtBS1RBLEdBQU9ud0QsVUFBWXl3RCxHQUFXendELFVBQzlCbXdELEdBQU9ud0QsVUFBVW85QixZQUFjK3lCLEdBRS9CRyxHQUFjdHdELFVBQVl3d0QsR0FBV0MsR0FBV3p3RCxXQUNoRHN3RCxHQUFjdHdELFVBQVVvOUIsWUFBY2t6QixHQXNIdENELEdBQVlyd0QsVUFBWXd3RCxHQUFXQyxHQUFXendELFdBQzlDcXdELEdBQVlyd0QsVUFBVW85QixZQUFjaXpCLEdBb0dwQ2dCLEdBQUtyeEQsVUFBVTgwQyxNQXZFZixXQUNFcDVDLEtBQUtnMkQsU0FBV25DLEdBQWVBLEdBQWEsTUFBUSxHQUNwRDd6RCxLQUFLTixLQUFPLEdBc0VkaTJELEdBQUtyeEQsVUFBa0IsT0F6RHZCLFNBQW9CNEIsR0FDbEIsSUFBSWtxQyxFQUFTcHdDLEtBQUt1dUMsSUFBSXJvQyxXQUFlbEcsS0FBS2cyRCxTQUFTOXZELEdBRW5ELE9BREFsRyxLQUFLTixNQUFRMHdDLEVBQVMsRUFBSSxFQUNuQkEsR0F1RFR1bEIsR0FBS3J4RCxVQUFVcUcsSUEzQ2YsU0FBaUJ6RSxHQUNmLElBQUl4RixFQUFPVixLQUFLZzJELFNBQ2hCLEdBQUluQyxHQUFjLENBQ2hCLElBQUl6akIsRUFBUzF2QyxFQUFLd0YsR0FDbEIsT0FBT2txQyxJQUFXb1UsRUFBaUJubEQsRUFBWSt3QyxFQUVqRCxPQUFPN3JDLEdBQWVDLEtBQUs5RCxFQUFNd0YsR0FBT3hGLEVBQUt3RixHQUFPN0csR0FzQ3REczJELEdBQUtyeEQsVUFBVWlxQyxJQTFCZixTQUFpQnJvQyxHQUNmLElBQUl4RixFQUFPVixLQUFLZzJELFNBQ2hCLE9BQU9uQyxHQUFnQm56RCxFQUFLd0YsS0FBUzdHLEVBQWFrRixHQUFlQyxLQUFLOUQsRUFBTXdGLElBeUI5RXl2RCxHQUFLcnhELFVBQVUwRyxJQVpmLFNBQWlCOUUsRUFBS3hDLEdBQ3BCLElBQUloRCxFQUFPVixLQUFLZzJELFNBR2hCLE9BRkFoMkQsS0FBS04sTUFBUU0sS0FBS3V1QyxJQUFJcm9DLEdBQU8sRUFBSSxFQUNqQ3hGLEVBQUt3RixHQUFRMnRELElBQWdCbndELElBQVVyRSxFQUFhbWxELEVBQWlCOWdELEVBQzlEMUQsTUF5SFQ2MUQsR0FBVXZ4RCxVQUFVODBDLE1BcEZwQixXQUNFcDVDLEtBQUtnMkQsU0FBVyxHQUNoQmgyRCxLQUFLTixLQUFPLEdBbUZkbTJELEdBQVV2eEQsVUFBa0IsT0F2RTVCLFNBQXlCNEIsR0FDdkIsSUFBSXhGLEVBQU9WLEtBQUtnMkQsU0FDWnYzQyxFQUFRNjRDLEdBQWE1MkQsRUFBTXdGLEdBRS9CLFFBQUl1WSxFQUFRLElBSVJBLEdBRFkvZCxFQUFLWCxPQUFTLEVBRTVCVyxFQUFLdWpDLE1BRUxpQyxHQUFPMWhDLEtBQUs5RCxFQUFNK2QsRUFBTyxLQUV6QnplLEtBQUtOLEtBQ0EsS0EwRFRtMkQsR0FBVXZ4RCxVQUFVcUcsSUE5Q3BCLFNBQXNCekUsR0FDcEIsSUFBSXhGLEVBQU9WLEtBQUtnMkQsU0FDWnYzQyxFQUFRNjRDLEdBQWE1MkQsRUFBTXdGLEdBRS9CLE9BQU91WSxFQUFRLEVBQUlwZixFQUFZcUIsRUFBSytkLEdBQU8sSUEyQzdDbzNDLEdBQVV2eEQsVUFBVWlxQyxJQS9CcEIsU0FBc0Jyb0MsR0FDcEIsT0FBT294RCxHQUFhdDNELEtBQUtnMkQsU0FBVTl2RCxJQUFRLEdBK0I3QzJ2RCxHQUFVdnhELFVBQVUwRyxJQWxCcEIsU0FBc0I5RSxFQUFLeEMsR0FDekIsSUFBSWhELEVBQU9WLEtBQUtnMkQsU0FDWnYzQyxFQUFRNjRDLEdBQWE1MkQsRUFBTXdGLEdBUS9CLE9BTkl1WSxFQUFRLEtBQ1J6ZSxLQUFLTixLQUNQZ0IsRUFBS0osS0FBSyxDQUFDNEYsRUFBS3hDLEtBRWhCaEQsRUFBSytkLEdBQU8sR0FBSy9hLEVBRVoxRCxNQTJHVDgxRCxHQUFTeHhELFVBQVU4MEMsTUF0RW5CLFdBQ0VwNUMsS0FBS04sS0FBTyxFQUNaTSxLQUFLZzJELFNBQVcsQ0FDZCxLQUFRLElBQUlMLEdBQ1osSUFBTyxJQUFLakMsSUFBT21DLElBQ25CLE9BQVUsSUFBSUYsS0FrRWxCRyxHQUFTeHhELFVBQWtCLE9BckQzQixTQUF3QjRCLEdBQ3RCLElBQUlrcUMsRUFBU3dxQixHQUFXNTZELEtBQU1rRyxHQUFhLE9BQUVBLEdBRTdDLE9BREFsRyxLQUFLTixNQUFRMHdDLEVBQVMsRUFBSSxFQUNuQkEsR0FtRFQwbEIsR0FBU3h4RCxVQUFVcUcsSUF2Q25CLFNBQXFCekUsR0FDbkIsT0FBTzAwRCxHQUFXNTZELEtBQU1rRyxHQUFLeUUsSUFBSXpFLElBdUNuQzR2RCxHQUFTeHhELFVBQVVpcUMsSUEzQm5CLFNBQXFCcm9DLEdBQ25CLE9BQU8wMEQsR0FBVzU2RCxLQUFNa0csR0FBS3FvQyxJQUFJcm9DLElBMkJuQzR2RCxHQUFTeHhELFVBQVUwRyxJQWRuQixTQUFxQjlFLEVBQUt4QyxHQUN4QixJQUFJaEQsRUFBT2s2RCxHQUFXNTZELEtBQU1rRyxHQUN4QnhHLEVBQU9nQixFQUFLaEIsS0FJaEIsT0FGQWdCLEVBQUtzSyxJQUFJOUUsRUFBS3hDLEdBQ2QxRCxLQUFLTixNQUFRZ0IsRUFBS2hCLE1BQVFBLEVBQU8sRUFBSSxFQUM5Qk0sTUEyRFQrMUQsR0FBU3p4RCxVQUFVK0wsSUFBTTBsRCxHQUFTenhELFVBQVVoRSxLQW5CNUMsU0FBcUJvRCxHQUVuQixPQURBMUQsS0FBS2cyRCxTQUFTaHJELElBQUl0SCxFQUFPOGdELEdBQ2xCeGtELE1Ba0JUKzFELEdBQVN6eEQsVUFBVWlxQyxJQU5uQixTQUFxQjdxQyxHQUNuQixPQUFPMUQsS0FBS2cyRCxTQUFTem5CLElBQUk3cUMsSUF1RzNCdXlELEdBQU0zeEQsVUFBVTgwQyxNQTNFaEIsV0FDRXA1QyxLQUFLZzJELFNBQVcsSUFBSUgsR0FDcEI3MUQsS0FBS04sS0FBTyxHQTBFZHUyRCxHQUFNM3hELFVBQWtCLE9BOUR4QixTQUFxQjRCLEdBQ25CLElBQUl4RixFQUFPVixLQUFLZzJELFNBQ1o1bEIsRUFBUzF2QyxFQUFhLE9BQUV3RixHQUc1QixPQURBbEcsS0FBS04sS0FBT2dCLEVBQUtoQixLQUNWMHdDLEdBMERUNmxCLEdBQU0zeEQsVUFBVXFHLElBOUNoQixTQUFrQnpFLEdBQ2hCLE9BQU9sRyxLQUFLZzJELFNBQVNyckQsSUFBSXpFLElBOEMzQit2RCxHQUFNM3hELFVBQVVpcUMsSUFsQ2hCLFNBQWtCcm9DLEdBQ2hCLE9BQU9sRyxLQUFLZzJELFNBQVN6bkIsSUFBSXJvQyxJQWtDM0IrdkQsR0FBTTN4RCxVQUFVMEcsSUFyQmhCLFNBQWtCOUUsRUFBS3hDLEdBQ3JCLElBQUloRCxFQUFPVixLQUFLZzJELFNBQ2hCLEdBQUl0MUQsYUFBZ0JtMUQsR0FBVyxDQUM3QixJQUFJZ0YsRUFBUW42RCxFQUFLczFELFNBQ2pCLElBQUt0QyxJQUFRbUgsRUFBTTk2RCxPQUFTKzZELElBRzFCLE9BRkFELEVBQU12NkQsS0FBSyxDQUFDNEYsRUFBS3hDLElBQ2pCMUQsS0FBS04sT0FBU2dCLEVBQUtoQixLQUNaTSxLQUVUVSxFQUFPVixLQUFLZzJELFNBQVcsSUFBSUYsR0FBUytFLEdBSXRDLE9BRkFuNkQsRUFBS3NLLElBQUk5RSxFQUFLeEMsR0FDZDFELEtBQUtOLEtBQU9nQixFQUFLaEIsS0FDVk0sTUFzY1QsSUFBSXczRCxHQUFXdUQsR0FBZUMsSUFVMUJDLEdBQWdCRixHQUFlRyxJQUFpQixHQVdwRCxTQUFTQyxHQUFVOU0sRUFBWWhCLEdBQzdCLElBQUlqZCxHQUFTLEVBS2IsT0FKQW9uQixHQUFTbkosR0FBWSxTQUFTM3FELEVBQU8rYSxFQUFPNHZDLEdBRTFDLE9BREFqZSxJQUFXaWQsRUFBVTNwRCxFQUFPK2EsRUFBTzR2QyxNQUc5QmplLEVBYVQsU0FBU2dyQixHQUFhdE8sRUFBT0UsRUFBVVcsR0FJckMsSUFIQSxJQUFJbHZDLEdBQVMsRUFDVDFlLEVBQVMrc0QsRUFBTS9zRCxTQUVWMGUsRUFBUTFlLEdBQVEsQ0FDdkIsSUFBSTJELEVBQVFvcEQsRUFBTXJ1QyxHQUNkdXdDLEVBQVVoQyxFQUFTdHBELEdBRXZCLEdBQWUsTUFBWHNyRCxJQUFvQnlMLElBQWFwN0QsRUFDNUIydkQsR0FBWUEsSUFBWXFNLEdBQVNyTSxHQUNsQ3JCLEVBQVdxQixFQUFTeUwsSUFFMUIsSUFBSUEsRUFBV3pMLEVBQ1g1ZSxFQUFTMXNDLEVBR2pCLE9BQU8wc0MsRUF1Q1QsU0FBU2tyQixHQUFXak4sRUFBWWhCLEdBQzlCLElBQUlqZCxFQUFTLEdBTWIsT0FMQW9uQixHQUFTbkosR0FBWSxTQUFTM3FELEVBQU8rYSxFQUFPNHZDLEdBQ3RDaEIsRUFBVTNwRCxFQUFPK2EsRUFBTzR2QyxJQUMxQmplLEVBQU85dkMsS0FBS29ELE1BR1Qwc0MsRUFjVCxTQUFTbXJCLEdBQVl6TyxFQUFPME8sRUFBT25PLEVBQVdvTyxFQUFVcnJCLEdBQ3RELElBQUkzeEIsR0FBUyxFQUNUMWUsRUFBUytzRCxFQUFNL3NELE9BS25CLElBSEFzdEQsSUFBY0EsRUFBWXFPLElBQzFCdHJCLElBQVdBLEVBQVMsTUFFWDN4QixFQUFRMWUsR0FBUSxDQUN2QixJQUFJMkQsRUFBUW9wRCxFQUFNcnVDLEdBQ2QrOEMsRUFBUSxHQUFLbk8sRUFBVTNwRCxHQUNyQjgzRCxFQUFRLEVBRVZELEdBQVk3M0QsRUFBTzgzRCxFQUFRLEVBQUduTyxFQUFXb08sRUFBVXJyQixHQUVuRHlkLEdBQVV6ZCxFQUFRMXNDLEdBRVYrM0QsSUFDVnJyQixFQUFPQSxFQUFPcndDLFFBQVUyRCxHQUc1QixPQUFPMHNDLEVBY1QsSUFBSXVyQixHQUFVQyxLQVlWQyxHQUFlRCxJQUFjLEdBVWpDLFNBQVNaLEdBQVdodUQsRUFBUWdnRCxHQUMxQixPQUFPaGdELEdBQVUydUQsR0FBUTN1RCxFQUFRZ2dELEVBQVVwbkQsSUFXN0MsU0FBU3MxRCxHQUFnQmx1RCxFQUFRZ2dELEdBQy9CLE9BQU9oZ0QsR0FBVTZ1RCxHQUFhN3VELEVBQVFnZ0QsRUFBVXBuRCxJQVlsRCxTQUFTazJELEdBQWM5dUQsRUFBUXd3QixHQUM3QixPQUFPOHZCLEdBQVk5dkIsR0FBTyxTQUFTdDNCLEdBQ2pDLE9BQU95M0MsR0FBVzN3QyxFQUFPOUcsT0FZN0IsU0FBUzYxRCxHQUFRL3VELEVBQVFxdUIsR0FNdkIsSUFIQSxJQUFJNWMsRUFBUSxFQUNSMWUsR0FISnM3QixFQUFPMmdDLEdBQVMzZ0MsRUFBTXJ1QixJQUdKak4sT0FFRCxNQUFWaU4sR0FBa0J5UixFQUFRMWUsR0FDL0JpTixFQUFTQSxFQUFPaXZELEdBQU01Z0MsRUFBSzVjLE9BRTdCLE9BQVFBLEdBQVNBLEdBQVMxZSxFQUFVaU4sRUFBUzNOLEVBYy9DLFNBQVM2OEQsR0FBZWx2RCxFQUFRbXZELEVBQVVDLEdBQ3hDLElBQUloc0IsRUFBUytyQixFQUFTbnZELEdBQ3RCLE9BQU9oSCxHQUFRZ0gsR0FBVW9qQyxFQUFTeWQsR0FBVXpkLEVBQVFnc0IsRUFBWXB2RCxJQVVsRSxTQUFTcXZELEdBQVczNEQsR0FDbEIsT0FBYSxNQUFUQSxFQUNLQSxJQUFVckUsRUFuN0ZKLHFCQVJMLGdCQTY3RkYreUQsSUFBa0JBLE1BQWtCL3RELEdBQU9YLEdBMjNGckQsU0FBbUJBLEdBQ2pCLElBQUk0NEQsRUFBUS8zRCxHQUFlQyxLQUFLZCxFQUFPMHVELElBQ25DbmIsRUFBTXZ6QyxFQUFNMHVELElBRWhCLElBQ0UxdUQsRUFBTTB1RCxJQUFrQi95RCxFQUN4QixJQUFJazlELEdBQVcsRUFDZixNQUFPdjNELElBRVQsSUFBSW9yQyxFQUFTb2hCLEdBQXFCaHRELEtBQUtkLEdBUXZDLE9BUEk2NEQsSUFDRUQsRUFDRjU0RCxFQUFNMHVELElBQWtCbmIsU0FFakJ2ekMsRUFBTTB1RCxLQUdWaGlCLEVBMzRGSG9zQixDQUFVOTRELEdBKzVHaEIsU0FBd0JBLEdBQ3RCLE9BQU84dEQsR0FBcUJodEQsS0FBS2QsR0EvNUc3Qis0RCxDQUFlLzRELEdBWXJCLFNBQVNnNUQsR0FBT2g1RCxFQUFPaTVELEdBQ3JCLE9BQU9qNUQsRUFBUWk1RCxFQVdqQixTQUFTQyxHQUFRNXZELEVBQVE5RyxHQUN2QixPQUFpQixNQUFWOEcsR0FBa0J6SSxHQUFlQyxLQUFLd0ksRUFBUTlHLEdBV3ZELFNBQVMyMkQsR0FBVTd2RCxFQUFROUcsR0FDekIsT0FBaUIsTUFBVjhHLEdBQWtCOUcsS0FBTzdCLEdBQU8ySSxHQTBCekMsU0FBUzh2RCxHQUFpQkMsRUFBUS9QLEVBQVVXLEdBUzFDLElBUkEsSUFBSXppQyxFQUFXeWlDLEVBQWFELEdBQW9CRixHQUM1Q3p0RCxFQUFTZzlELEVBQU8sR0FBR2g5RCxPQUNuQmk5RCxFQUFZRCxFQUFPaDlELE9BQ25CazlELEVBQVdELEVBQ1hFLEVBQVM5d0QsRUFBTTR3RCxHQUNmRyxFQUFZQyxJQUNaaHRCLEVBQVMsR0FFTjZzQixLQUFZLENBQ2pCLElBQUluUSxFQUFRaVEsRUFBT0UsR0FDZkEsR0FBWWpRLElBQ2RGLEVBQVFjLEdBQVNkLEVBQU91QyxHQUFVckMsS0FFcENtUSxFQUFZL0osR0FBVXRHLEVBQU0vc0QsT0FBUW85RCxHQUNwQ0QsRUFBT0QsSUFBYXRQLElBQWVYLEdBQWFqdEQsR0FBVSxLQUFPK3NELEVBQU0vc0QsUUFBVSxLQUM3RSxJQUFJZzJELEdBQVNrSCxHQUFZblEsR0FDekJ6dEQsRUFFTnl0RCxFQUFRaVEsRUFBTyxHQUVmLElBQUl0K0MsR0FBUyxFQUNUNCtDLEVBQU9ILEVBQU8sR0FFbEIxQyxFQUNBLE9BQVMvN0MsRUFBUTFlLEdBQVVxd0MsRUFBT3J3QyxPQUFTbzlELEdBQVcsQ0FDcEQsSUFBSXo1RCxFQUFRb3BELEVBQU1ydUMsR0FDZGc4QyxFQUFXek4sRUFBV0EsRUFBU3RwRCxHQUFTQSxFQUc1QyxHQURBQSxFQUFTaXFELEdBQXdCLElBQVZqcUQsRUFBZUEsRUFBUSxJQUN4QzI1RCxFQUNFOU4sR0FBUzhOLEVBQU01QyxHQUNmdnZDLEVBQVNrbEIsRUFBUXFxQixFQUFVOU0sSUFDNUIsQ0FFTCxJQURBc1AsRUFBV0QsSUFDRkMsR0FBVSxDQUNqQixJQUFJMzVELEVBQVE0NUQsRUFBT0QsR0FDbkIsS0FBTTM1RCxFQUNFaXNELEdBQVNqc0QsRUFBT20zRCxHQUNoQnZ2QyxFQUFTNnhDLEVBQU9FLEdBQVd4QyxFQUFVOU0sSUFFM0MsU0FBUzZNLEVBR1Q2QyxHQUNGQSxFQUFLLzhELEtBQUttNkQsR0FFWnJxQixFQUFPOXZDLEtBQUtvRCxJQUdoQixPQUFPMHNDLEVBK0JULFNBQVNrdEIsR0FBV3R3RCxFQUFRcXVCLEVBQU14MUIsR0FHaEMsSUFBSThtRCxFQUFpQixPQURyQjMvQyxFQUFTd21DLEdBQU94bUMsRUFEaEJxdUIsRUFBTzJnQyxHQUFTM2dDLEVBQU1ydUIsS0FFTUEsRUFBU0EsRUFBT2l2RCxHQUFNNW9CLEdBQUtoWSxLQUN2RCxPQUFlLE1BQVJzeEIsRUFBZXR0RCxFQUFZczlCLEdBQU1nd0IsRUFBTTMvQyxFQUFRbkgsR0FVeEQsU0FBUzAzRCxHQUFnQjc1RCxHQUN2QixPQUFPZ3hELEdBQWFoeEQsSUFBVTI0RCxHQUFXMzRELElBQVVzaEQsRUF1Q3JELFNBQVN3WSxHQUFZOTVELEVBQU9pNUQsRUFBT3pFLEVBQVNDLEVBQVlDLEdBQ3RELE9BQUkxMEQsSUFBVWk1RCxJQUdELE1BQVRqNUQsR0FBMEIsTUFBVGk1RCxJQUFtQmpJLEdBQWFoeEQsS0FBV2d4RCxHQUFhaUksR0FDcEVqNUQsR0FBVUEsR0FBU2k1RCxHQUFVQSxFQW1CeEMsU0FBeUIzdkQsRUFBUTJ2RCxFQUFPekUsRUFBU0MsRUFBWXNGLEVBQVdyRixHQUN0RSxJQUFJc0YsRUFBVzEzRCxHQUFRZ0gsR0FDbkIyd0QsRUFBVzMzRCxHQUFRMjJELEdBQ25CaUIsRUFBU0YsRUFBV3pZLEVBQVd3VCxHQUFPenJELEdBQ3RDNndELEVBQVNGLEVBQVcxWSxFQUFXd1QsR0FBT2tFLEdBS3RDbUIsR0FISkYsRUFBU0EsR0FBVTVZLEVBQVVTLEVBQVltWSxJQUdoQm5ZLEVBQ3JCc1ksR0FISkYsRUFBU0EsR0FBVTdZLEVBQVVTLEVBQVlvWSxJQUdoQnBZLEVBQ3JCdVksRUFBWUosR0FBVUMsRUFFMUIsR0FBSUcsR0FBYWpMLEdBQVMvbEQsR0FBUyxDQUNqQyxJQUFLK2xELEdBQVM0SixHQUNaLE9BQU8sRUFFVGUsR0FBVyxFQUNYSSxHQUFXLEVBRWIsR0FBSUUsSUFBY0YsRUFFaEIsT0FEQTFGLElBQVVBLEVBQVEsSUFBSW5DLElBQ2R5SCxHQUFZaFIsR0FBYTEvQyxHQUM3Qml4RCxHQUFZanhELEVBQVEydkQsRUFBT3pFLEVBQVNDLEVBQVlzRixFQUFXckYsR0E4MUVuRSxTQUFvQnByRCxFQUFRMnZELEVBQU8xbEIsRUFBS2loQixFQUFTQyxFQUFZc0YsRUFBV3JGLEdBQ3RFLE9BQVFuaEIsR0FDTixLQUFLZ1AsRUFDSCxHQUFLajVDLEVBQU93c0QsWUFBY21ELEVBQU1uRCxZQUMzQnhzRCxFQUFPdXNELFlBQWNvRCxFQUFNcEQsV0FDOUIsT0FBTyxFQUVUdnNELEVBQVNBLEVBQU9zc0QsT0FDaEJxRCxFQUFRQSxFQUFNckQsT0FFaEIsS0FBS3RULEVBQ0gsUUFBS2g1QyxFQUFPd3NELFlBQWNtRCxFQUFNbkQsYUFDM0JpRSxFQUFVLElBQUk1TCxHQUFXN2tELEdBQVMsSUFBSTZrRCxHQUFXOEssS0FLeEQsS0FBS3pYLEVBQ0wsS0FBS0MsRUFDTCxLQUFLSyxFQUdILE9BQU9oYyxJQUFJeDhCLEdBQVMydkQsR0FFdEIsS0FBS3ZYLEVBQ0gsT0FBT3A0QyxFQUFPckYsTUFBUWcxRCxFQUFNaDFELE1BQVFxRixFQUFPOU4sU0FBV3k5RCxFQUFNejlELFFBRTlELEtBQUt5bUQsRUFDTCxLQUFLRSxFQUlILE9BQU83NEMsR0FBVzJ2RCxFQUFRLEdBRTVCLEtBQUtwWCxFQUNILElBQUkyWSxFQUFVaE8sR0FFaEIsS0FBS3RLLEVBQ0gsSUFBSXVZLEVBeG5MZSxFQXduTEhqRyxFQUdoQixHQUZBZ0csSUFBWUEsRUFBVTdOLElBRWxCcmpELEVBQU90TixNQUFRaTlELEVBQU1qOUQsT0FBU3krRCxFQUNoQyxPQUFPLEVBR1QsSUFBSXJFLEVBQVUxQixFQUFNenRELElBQUlxQyxHQUN4QixHQUFJOHNELEVBQ0YsT0FBT0EsR0FBVzZDLEVBRXBCekUsR0Fsb0xxQixFQXFvTHJCRSxFQUFNcHRELElBQUlnQyxFQUFRMnZELEdBQ2xCLElBQUl2c0IsRUFBUzZ0QixHQUFZQyxFQUFRbHhELEdBQVNreEQsRUFBUXZCLEdBQVF6RSxFQUFTQyxFQUFZc0YsRUFBV3JGLEdBRTFGLE9BREFBLEVBQWMsT0FBRXByRCxHQUNUb2pDLEVBRVQsS0FBSzBWLEVBQ0gsR0FBSXlPLEdBQ0YsT0FBT0EsR0FBYy92RCxLQUFLd0ksSUFBV3VuRCxHQUFjL3ZELEtBQUttNEQsR0FHOUQsT0FBTyxFQTM1RUR5QixDQUFXcHhELEVBQVEydkQsRUFBT2lCLEVBQVExRixFQUFTQyxFQUFZc0YsRUFBV3JGLEdBRXhFLEtBdnZHdUIsRUF1dkdqQkYsR0FBaUMsQ0FDckMsSUFBSW1HLEVBQWVQLEdBQVl2NUQsR0FBZUMsS0FBS3dJLEVBQVEsZUFDdkRzeEQsRUFBZVAsR0FBWXg1RCxHQUFlQyxLQUFLbTRELEVBQU8sZUFFMUQsR0FBSTBCLEdBQWdCQyxFQUFjLENBQ2hDLElBQUlDLEVBQWVGLEVBQWVyeEQsRUFBT3RKLFFBQVVzSixFQUMvQ3d4RCxFQUFlRixFQUFlM0IsRUFBTWo1RCxRQUFVaTVELEVBR2xELE9BREF2RSxJQUFVQSxFQUFRLElBQUluQyxJQUNmd0gsRUFBVWMsRUFBY0MsRUFBY3RHLEVBQVNDLEVBQVlDLElBR3RFLFFBQUs0RixJQUdMNUYsSUFBVUEsRUFBUSxJQUFJbkMsSUEwNUV4QixTQUFzQmpwRCxFQUFRMnZELEVBQU96RSxFQUFTQyxFQUFZc0YsRUFBV3JGLEdBQ25FLElBQUkrRixFQWpxTG1CLEVBaXFMUGpHLEVBQ1p1RyxFQUFXeEUsR0FBV2p0RCxHQUN0QjB4RCxFQUFZRCxFQUFTMStELE9BSXpCLEdBQUkyK0QsR0FIV3pFLEdBQVcwQyxHQUNENThELFNBRU1vK0QsRUFDN0IsT0FBTyxFQUdULElBREEsSUFBSTEvQyxFQUFRaWdELEVBQ0xqZ0QsS0FBUyxDQUNkLElBQUl2WSxFQUFNdTRELEVBQVNoZ0QsR0FDbkIsS0FBTTAvQyxFQUFZajRELEtBQU95MkQsRUFBUXA0RCxHQUFlQyxLQUFLbTRELEVBQU96MkQsSUFDMUQsT0FBTyxFQUlYLElBQUl5NEQsRUFBYXZHLEVBQU16dEQsSUFBSXFDLEdBQ3ZCNHhELEVBQWF4RyxFQUFNenRELElBQUlneUQsR0FDM0IsR0FBSWdDLEdBQWNDLEVBQ2hCLE9BQU9ELEdBQWNoQyxHQUFTaUMsR0FBYzV4RCxFQUU5QyxJQUFJb2pDLEdBQVMsRUFDYmdvQixFQUFNcHRELElBQUlnQyxFQUFRMnZELEdBQ2xCdkUsRUFBTXB0RCxJQUFJMnhELEVBQU8zdkQsR0FHakIsSUFEQSxJQUFJNnhELEVBQVdWLElBQ04xL0MsRUFBUWlnRCxHQUFXLENBRTFCLElBQUlySCxFQUFXcnFELEVBRGY5RyxFQUFNdTRELEVBQVNoZ0QsSUFFWHFnRCxFQUFXbkMsRUFBTXoyRCxHQUVyQixHQUFJaXlELEVBQ0YsSUFBSTRHLEVBQVdaLEVBQ1hoRyxFQUFXMkcsRUFBVXpILEVBQVVueEQsRUFBS3kyRCxFQUFPM3ZELEVBQVFvckQsR0FDbkRELEVBQVdkLEVBQVV5SCxFQUFVNTRELEVBQUs4RyxFQUFRMnZELEVBQU92RSxHQUd6RCxLQUFNMkcsSUFBYTEvRCxFQUNWZzRELElBQWF5SCxHQUFZckIsRUFBVXBHLEVBQVV5SCxFQUFVNUcsRUFBU0MsRUFBWUMsR0FDN0UyRyxHQUNELENBQ0wzdUIsR0FBUyxFQUNULE1BRUZ5dUIsSUFBYUEsRUFBa0IsZUFBUDM0RCxHQUUxQixHQUFJa3FDLElBQVd5dUIsRUFBVSxDQUN2QixJQUFJRyxFQUFVaHlELEVBQU8wMEIsWUFDakJ1OUIsRUFBVXRDLEVBQU1qN0IsWUFHaEJzOUIsR0FBV0MsS0FDVixnQkFBaUJqeUQsTUFBVSxnQkFBaUIydkQsSUFDekIsbUJBQVhxQyxHQUF5QkEsYUFBbUJBLEdBQ2pDLG1CQUFYQyxHQUF5QkEsYUFBbUJBLElBQ3ZEN3VCLEdBQVMsR0FLYixPQUZBZ29CLEVBQWMsT0FBRXByRCxHQUNoQm9yRCxFQUFjLE9BQUV1RSxHQUNUdnNCLEVBdjlFQTh1QixDQUFhbHlELEVBQVEydkQsRUFBT3pFLEVBQVNDLEVBQVlzRixFQUFXckYsSUEzRDVEK0csQ0FBZ0J6N0QsRUFBT2k1RCxFQUFPekUsRUFBU0MsRUFBWXFGLEdBQWFwRixJQW1GekUsU0FBU2dILEdBQVlweUQsRUFBUXpGLEVBQVE4M0QsRUFBV2xILEdBQzlDLElBQUkxNUMsRUFBUTRnRCxFQUFVdC9ELE9BQ2xCQSxFQUFTMGUsRUFDVDZnRCxHQUFnQm5ILEVBRXBCLEdBQWMsTUFBVm5yRCxFQUNGLE9BQVFqTixFQUdWLElBREFpTixFQUFTM0ksR0FBTzJJLEdBQ1R5UixLQUFTLENBQ2QsSUFBSS9kLEVBQU8yK0QsRUFBVTVnRCxHQUNyQixHQUFLNmdELEdBQWdCNStELEVBQUssR0FDbEJBLEVBQUssS0FBT3NNLEVBQU90TSxFQUFLLE1BQ3RCQSxFQUFLLEtBQU1zTSxHQUVuQixPQUFPLEVBR1gsT0FBU3lSLEVBQVExZSxHQUFRLENBRXZCLElBQUltRyxHQURKeEYsRUFBTzIrRCxFQUFVNWdELElBQ0YsR0FDWDQ0QyxFQUFXcnFELEVBQU85RyxHQUNsQnE1RCxFQUFXNytELEVBQUssR0FFcEIsR0FBSTQrRCxHQUFnQjUrRCxFQUFLLElBQ3ZCLEdBQUkyMkQsSUFBYWg0RCxLQUFlNkcsS0FBTzhHLEdBQ3JDLE9BQU8sTUFFSixDQUNMLElBQUlvckQsRUFBUSxJQUFJbkMsR0FDaEIsR0FBSWtDLEVBQ0YsSUFBSS9uQixFQUFTK25CLEVBQVdkLEVBQVVrSSxFQUFVcjVELEVBQUs4RyxFQUFRekYsRUFBUTZ3RCxHQUVuRSxLQUFNaG9CLElBQVcvd0MsRUFDVG0rRCxHQUFZK0IsRUFBVWxJLEVBQVVtSSxFQUErQ3JILEVBQVlDLEdBQzNGaG9CLEdBRU4sT0FBTyxHQUliLE9BQU8sRUFXVCxTQUFTcXZCLEdBQWEvN0QsR0FDcEIsU0FBS29wQyxHQUFTcHBDLEtBMDVGRWlwRCxFQTE1RmlCanBELEVBMjVGeEI2dEQsSUFBZUEsTUFBYzVFLE1BeDVGeEJoUCxHQUFXajZDLEdBQVNpdUQsR0FBYXJKLElBQ2hDamxCLEtBQUs0d0IsR0FBU3Z3RCxJQXM1Ri9CLElBQWtCaXBELEVBMTJGbEIsU0FBUytTLEdBQWFoOEQsR0FHcEIsTUFBb0IsbUJBQVRBLEVBQ0ZBLEVBRUksTUFBVEEsRUFDS2k4RCxHQUVXLGlCQUFUajhELEVBQ0ZzQyxHQUFRdEMsR0FDWGs4RCxHQUFvQmw4RCxFQUFNLEdBQUlBLEVBQU0sSUFDcENtOEQsR0FBWW44RCxHQUVYbzhELEdBQVNwOEQsR0FVbEIsU0FBU3E4RCxHQUFTL3lELEdBQ2hCLElBQUtnekQsR0FBWWh6RCxHQUNmLE9BQU9rbUQsR0FBV2xtRCxHQUVwQixJQUFJb2pDLEVBQVMsR0FDYixJQUFLLElBQUlscUMsS0FBTzdCLEdBQU8ySSxHQUNqQnpJLEdBQWVDLEtBQUt3SSxFQUFROUcsSUFBZSxlQUFQQSxHQUN0Q2txQyxFQUFPOXZDLEtBQUs0RixHQUdoQixPQUFPa3FDLEVBa0NULFNBQVM2dkIsR0FBT3Y4RCxFQUFPaTVELEdBQ3JCLE9BQU9qNUQsRUFBUWk1RCxFQVdqQixTQUFTdUQsR0FBUTdSLEVBQVlyQixHQUMzQixJQUFJdnVDLEdBQVMsRUFDVDJ4QixFQUFTK3ZCLEdBQVk5UixHQUFjamlELEVBQU1paUQsRUFBV3R1RCxRQUFVLEdBS2xFLE9BSEF5M0QsR0FBU25KLEdBQVksU0FBUzNxRCxFQUFPd0MsRUFBS21vRCxHQUN4Q2plLElBQVMzeEIsR0FBU3V1QyxFQUFTdHBELEVBQU93QyxFQUFLbW9ELE1BRWxDamUsRUFVVCxTQUFTeXZCLEdBQVl0NEQsR0FDbkIsSUFBSTgzRCxFQUFZZSxHQUFhNzRELEdBQzdCLE9BQXdCLEdBQXBCODNELEVBQVV0L0QsUUFBZXMvRCxFQUFVLEdBQUcsR0FDakNnQixHQUF3QmhCLEVBQVUsR0FBRyxHQUFJQSxFQUFVLEdBQUcsSUFFeEQsU0FBU3J5RCxHQUNkLE9BQU9BLElBQVd6RixHQUFVNjNELEdBQVlweUQsRUFBUXpGLEVBQVE4M0QsSUFZNUQsU0FBU08sR0FBb0J2a0MsRUFBTWtrQyxHQUNqQyxPQUFJZSxHQUFNamxDLElBQVNrbEMsR0FBbUJoQixHQUM3QmMsR0FBd0JwRSxHQUFNNWdDLEdBQU9ra0MsR0FFdkMsU0FBU3Z5RCxHQUNkLElBQUlxcUQsRUFBVzFzRCxHQUFJcUMsRUFBUXF1QixHQUMzQixPQUFRZzhCLElBQWFoNEQsR0FBYWc0RCxJQUFha0ksRUFDM0NpQixHQUFNeHpELEVBQVFxdUIsR0FDZG1pQyxHQUFZK0IsRUFBVWxJLEVBQVVtSSxJQWV4QyxTQUFTaUIsR0FBVXp6RCxFQUFRekYsRUFBUW01RCxFQUFVdkksRUFBWUMsR0FDbkRwckQsSUFBV3pGLEdBR2ZvMEQsR0FBUXAwRCxHQUFRLFNBQVNnNEQsRUFBVXI1RCxHQUVqQyxHQURBa3lELElBQVVBLEVBQVEsSUFBSW5DLElBQ2xCbnBCLEdBQVN5eUIsSUErQmpCLFNBQXVCdnlELEVBQVF6RixFQUFRckIsRUFBS3c2RCxFQUFVQyxFQUFXeEksRUFBWUMsR0FDM0UsSUFBSWYsRUFBV3VKLEdBQVE1ekQsRUFBUTlHLEdBQzNCcTVELEVBQVdxQixHQUFRcjVELEVBQVFyQixHQUMzQjR6RCxFQUFVMUIsRUFBTXp0RCxJQUFJNDBELEdBRXhCLEdBQUl6RixFQUNGNUMsR0FBaUJscUQsRUFBUTlHLEVBQUs0ekQsT0FEaEMsQ0FJQSxJQUFJM3FELEVBQVdncEQsRUFDWEEsRUFBV2QsRUFBVWtJLEVBQVdyNUQsRUFBTSxHQUFLOEcsRUFBUXpGLEVBQVE2d0QsR0FDM0QvNEQsRUFFQWk3RCxFQUFXbnJELElBQWE5UCxFQUU1QixHQUFJaTdELEVBQVUsQ0FDWixJQUFJbEUsRUFBUXB3RCxHQUFRdTVELEdBQ2hCaEosR0FBVUgsR0FBU3JELEdBQVN3TSxHQUM1QnNCLEdBQVd6SyxJQUFVRyxHQUFVN0osR0FBYTZTLEdBRWhEcHdELEVBQVdvd0QsRUFDUG5KLEdBQVNHLEdBQVVzSyxFQUNqQjc2RCxHQUFRcXhELEdBQ1Zsb0QsRUFBV2tvRCxFQUVKeUosR0FBa0J6SixHQUN6QmxvRCxFQUFXNG5ELEdBQVVNLEdBRWRkLEdBQ1ArRCxHQUFXLEVBQ1huckQsRUFBV3dwRCxHQUFZNEcsR0FBVSxJQUUxQnNCLEdBQ1B2RyxHQUFXLEVBQ1huckQsRUFBV3VxRCxHQUFnQjZGLEdBQVUsSUFHckNwd0QsRUFBVyxHQUdONHhELEdBQWN4QixJQUFhakosR0FBWWlKLElBQzlDcHdELEVBQVdrb0QsRUFDUGYsR0FBWWUsR0FDZGxvRCxFQUFXNnhELEdBQWMzSixHQUVqQnZxQixHQUFTdXFCLEtBQWExWixHQUFXMFosS0FDekNsb0QsRUFBV3lwRCxHQUFnQjJHLEtBSTdCakYsR0FBVyxFQUdYQSxJQUVGbEMsRUFBTXB0RCxJQUFJdTBELEVBQVVwd0QsR0FDcEJ3eEQsRUFBVXh4RCxFQUFVb3dELEVBQVVtQixFQUFVdkksRUFBWUMsR0FDcERBLEVBQWMsT0FBRW1ILElBRWxCckksR0FBaUJscUQsRUFBUTlHLEVBQUtpSixJQXpGMUI4eEQsQ0FBY2owRCxFQUFRekYsRUFBUXJCLEVBQUt3NkQsRUFBVUQsR0FBV3RJLEVBQVlDLE9BRWpFLENBQ0gsSUFBSWpwRCxFQUFXZ3BELEVBQ1hBLEVBQVd5SSxHQUFRNXpELEVBQVE5RyxHQUFNcTVELEVBQVdyNUQsRUFBTSxHQUFLOEcsRUFBUXpGLEVBQVE2d0QsR0FDdkUvNEQsRUFFQThQLElBQWE5UCxJQUNmOFAsRUFBV293RCxHQUVickksR0FBaUJscUQsRUFBUTlHLEVBQUtpSixNQUUvQjRwRCxJQXdGTCxTQUFTbUksR0FBUXBVLEVBQU83dEIsR0FDdEIsSUFBSWwvQixFQUFTK3NELEVBQU0vc0QsT0FDbkIsR0FBS0EsRUFJTCxPQUFPMjJELEdBRFB6M0IsR0FBS0EsRUFBSSxFQUFJbC9CLEVBQVMsRUFDSkEsR0FBVStzRCxFQUFNN3RCLEdBQUs1L0IsRUFZekMsU0FBUzhoRSxHQUFZOVMsRUFBWStTLEVBQVdDLEdBRXhDRCxFQURFQSxFQUFVcmhFLE9BQ0E2dEQsR0FBU3dULEdBQVcsU0FBU3BVLEdBQ3ZDLE9BQUlobkQsR0FBUWduRCxHQUNILFNBQVN0cEQsR0FDZCxPQUFPcTRELEdBQVFyNEQsRUFBMkIsSUFBcEJzcEQsRUFBU2p0RCxPQUFlaXRELEVBQVMsR0FBS0EsSUFHekRBLEtBR0csQ0FBQzJTLElBR2YsSUFBSWxoRCxHQUFTLEVBVWIsT0FUQTJpRCxFQUFZeFQsR0FBU3dULEVBQVcvUixHQUFVaVMsT0FueEY5QyxTQUFvQnhVLEVBQU95VSxHQUN6QixJQUFJeGhFLEVBQVMrc0QsRUFBTS9zRCxPQUduQixJQURBK3NELEVBQU0wVSxNQXl4RnNCLFNBQVN4MEQsRUFBUTJ2RCxHQUN6QyxPQTA0QkosU0FBeUIzdkQsRUFBUTJ2RCxFQUFPMEUsR0FPdEMsSUFOQSxJQUFJNWlELEdBQVMsRUFDVGdqRCxFQUFjejBELEVBQU8wMEQsU0FDckJDLEVBQWNoRixFQUFNK0UsU0FDcEIzaEUsRUFBUzBoRSxFQUFZMWhFLE9BQ3JCNmhFLEVBQWVQLEVBQU90aEUsU0FFakIwZSxFQUFRMWUsR0FBUSxDQUN2QixJQUFJcXdDLEVBQVN5eEIsR0FBaUJKLEVBQVloakQsR0FBUWtqRCxFQUFZbGpELElBQzlELEdBQUkyeEIsRUFDRixPQUFJM3hCLEdBQVNtakQsRUFDSnh4QixFQUdGQSxHQUFtQixRQURkaXhCLEVBQU81aUQsSUFDaUIsRUFBSSxHQVU1QyxPQUFPelIsRUFBT3lSLE1BQVFrK0MsRUFBTWwrQyxNQWw2Qm5CcWpELENBQWdCOTBELEVBQVEydkQsRUFBTzBFLE1BenhGbkN0aEUsS0FDTCtzRCxFQUFNL3NELEdBQVUrc0QsRUFBTS9zRCxHQUFRMkQsTUFFaEMsT0FBT29wRCxFQXF4RkVpVixDQVBNN0IsR0FBUTdSLEdBQVksU0FBUzNxRCxFQUFPd0MsRUFBS21vRCxHQUlwRCxNQUFPLENBQUUsU0FITVQsR0FBU3dULEdBQVcsU0FBU3BVLEdBQzFDLE9BQU9BLEVBQVN0cEQsTUFFYSxRQUFXK2EsRUFBTyxNQUFTL2EsT0FnQzlELFNBQVNzK0QsR0FBV2gxRCxFQUFRNHFELEVBQU92SyxHQUtqQyxJQUpBLElBQUk1dUMsR0FBUyxFQUNUMWUsRUFBUzYzRCxFQUFNNzNELE9BQ2Zxd0MsRUFBUyxLQUVKM3hCLEVBQVExZSxHQUFRLENBQ3ZCLElBQUlzN0IsRUFBT3U4QixFQUFNbjVDLEdBQ2IvYSxFQUFRcTRELEdBQVEvdUQsRUFBUXF1QixHQUV4Qmd5QixFQUFVM3BELEVBQU8yM0IsSUFDbkI0bUMsR0FBUTd4QixFQUFRNHJCLEdBQVMzZ0MsRUFBTXJ1QixHQUFTdEosR0FHNUMsT0FBTzBzQyxFQTJCVCxTQUFTOHhCLEdBQVlwVixFQUFPNWxELEVBQVE4bEQsRUFBVVcsR0FDNUMsSUFBSXh4QixFQUFVd3hCLEVBQWFnQixHQUFrQmxCLEdBQ3pDaHZDLEdBQVMsRUFDVDFlLEVBQVNtSCxFQUFPbkgsT0FDaEJzOUQsRUFBT3ZRLEVBUVgsSUFOSUEsSUFBVTVsRCxJQUNaQSxFQUFTNnZELEdBQVU3dkQsSUFFakI4bEQsSUFDRnFRLEVBQU96UCxHQUFTZCxFQUFPdUMsR0FBVXJDLE9BRTFCdnVDLEVBQVExZSxHQUtmLElBSkEsSUFBSXF0QyxFQUFZLEVBQ1oxcEMsRUFBUXdELEVBQU91WCxHQUNmZzhDLEVBQVd6TixFQUFXQSxFQUFTdHBELEdBQVNBLEdBRXBDMHBDLEVBQVlqUixFQUFRa2hDLEVBQU01QyxFQUFVcnRCLEVBQVd1Z0IsS0FBZ0IsR0FDakUwUCxJQUFTdlEsR0FDWDVtQixHQUFPMWhDLEtBQUs2NEQsRUFBTWp3QixFQUFXLEdBRS9CbEgsR0FBTzFoQyxLQUFLc29ELEVBQU8xZixFQUFXLEdBR2xDLE9BQU8wZixFQVlULFNBQVNxVixHQUFXclYsRUFBT3NWLEdBSXpCLElBSEEsSUFBSXJpRSxFQUFTK3NELEVBQVFzVixFQUFRcmlFLE9BQVMsRUFDbEN5d0QsRUFBWXp3RCxFQUFTLEVBRWxCQSxLQUFVLENBQ2YsSUFBSTBlLEVBQVEyakQsRUFBUXJpRSxHQUNwQixHQUFJQSxHQUFVeXdELEdBQWEveEMsSUFBVTRqRCxFQUFVLENBQzdDLElBQUlBLEVBQVc1akQsRUFDWGk0QyxHQUFRajRDLEdBQ1Z5bkIsR0FBTzFoQyxLQUFLc29ELEVBQU9ydUMsRUFBTyxHQUUxQjZqRCxHQUFVeFYsRUFBT3J1QyxJQUl2QixPQUFPcXVDLEVBWVQsU0FBUzhKLEdBQVdtQixFQUFPQyxHQUN6QixPQUFPRCxFQUFRbkYsR0FBWVcsTUFBa0J5RSxFQUFRRCxFQUFRLElBa0MvRCxTQUFTd0ssR0FBV3BULEVBQVFsd0IsR0FDMUIsSUFBSW1SLEVBQVMsR0FDYixJQUFLK2UsR0FBVWx3QixFQUFJLEdBQUtBLEVBQUlMLEVBQzFCLE9BQU93UixFQUlULEdBQ01uUixFQUFJLElBQ05tUixHQUFVK2UsSUFFWmx3QixFQUFJMnpCLEdBQVkzekIsRUFBSSxNQUVsQmt3QixHQUFVQSxTQUVMbHdCLEdBRVQsT0FBT21SLEVBV1QsU0FBU295QixHQUFTN1YsRUFBTThWLEdBQ3RCLE9BQU9DLEdBQVlDLEdBQVNoVyxFQUFNOFYsRUFBTzlDLElBQVdoVCxFQUFPLElBVTdELFNBQVNpVyxHQUFXdlUsR0FDbEIsT0FBT3NJLEdBQVl6dkQsR0FBT21uRCxJQVc1QixTQUFTd1UsR0FBZXhVLEVBQVlwdkIsR0FDbEMsSUFBSTZ0QixFQUFRNWxELEdBQU9tbkQsR0FDbkIsT0FBT3lJLEdBQVloSyxFQUFPa0ssR0FBVS8zQixFQUFHLEVBQUc2dEIsRUFBTS9zRCxTQWFsRCxTQUFTa2lFLEdBQVFqMUQsRUFBUXF1QixFQUFNMzNCLEVBQU95MEQsR0FDcEMsSUFBS3JyQixHQUFTOS9CLEdBQ1osT0FBT0EsRUFTVCxJQUxBLElBQUl5UixHQUFTLEVBQ1QxZSxHQUhKczdCLEVBQU8yZ0MsR0FBUzNnQyxFQUFNcnVCLElBR0pqTixPQUNkeXdELEVBQVl6d0QsRUFBUyxFQUNyQitpRSxFQUFTOTFELEVBRUksTUFBVjgxRCxLQUFvQnJrRCxFQUFRMWUsR0FBUSxDQUN6QyxJQUFJbUcsRUFBTSsxRCxHQUFNNWdDLEVBQUs1YyxJQUNqQnRQLEVBQVd6TCxFQUVmLEdBQVksY0FBUndDLEdBQStCLGdCQUFSQSxHQUFpQyxjQUFSQSxFQUNsRCxPQUFPOEcsRUFHVCxHQUFJeVIsR0FBUyt4QyxFQUFXLENBQ3RCLElBQUk2RyxFQUFXeUwsRUFBTzU4RCxJQUN0QmlKLEVBQVdncEQsRUFBYUEsRUFBV2QsRUFBVW54RCxFQUFLNDhELEdBQVV6akUsS0FDM0NBLElBQ2Y4UCxFQUFXMjlCLEdBQVN1cUIsR0FDaEJBLEVBQ0NYLEdBQVFyN0IsRUFBSzVjLEVBQVEsSUFBTSxHQUFLLElBR3pDMjRDLEdBQVkwTCxFQUFRNThELEVBQUtpSixHQUN6QjJ6RCxFQUFTQSxFQUFPNThELEdBRWxCLE9BQU84RyxFQVdULElBQUkrMUQsR0FBZWpQLEdBQXFCLFNBQVNuSCxFQUFNanNELEdBRXJELE9BREFvekQsR0FBUTlvRCxJQUFJMmhELEVBQU1qc0QsR0FDWGlzRCxHQUZvQmdULEdBYXpCcUQsR0FBbUJwMkIsR0FBNEIsU0FBUytmLEVBQU13QyxHQUNoRSxPQUFPdmlCLEdBQWUrZixFQUFNLFdBQVksQ0FDdEMsY0FBZ0IsRUFDaEIsWUFBYyxFQUNkLE1BQVNzVyxHQUFTOVQsR0FDbEIsVUFBWSxLQUx3QndRLEdBZ0J4QyxTQUFTdUQsR0FBWTdVLEdBQ25CLE9BQU95SSxHQUFZNXZELEdBQU9tbkQsSUFZNUIsU0FBUzhVLEdBQVVyVyxFQUFPMlYsRUFBT1csR0FDL0IsSUFBSTNrRCxHQUFTLEVBQ1QxZSxFQUFTK3NELEVBQU0vc0QsT0FFZjBpRSxFQUFRLElBQ1ZBLEdBQVNBLEVBQVExaUUsRUFBUyxFQUFLQSxFQUFTMGlFLElBRTFDVyxFQUFNQSxFQUFNcmpFLEVBQVNBLEVBQVNxakUsR0FDcEIsSUFDUkEsR0FBT3JqRSxHQUVUQSxFQUFTMGlFLEVBQVFXLEVBQU0sRUFBTUEsRUFBTVgsSUFBVyxFQUM5Q0EsS0FBVyxFQUdYLElBREEsSUFBSXJ5QixFQUFTaGtDLEVBQU1yTSxLQUNWMGUsRUFBUTFlLEdBQ2Zxd0MsRUFBTzN4QixHQUFTcXVDLEVBQU1ydUMsRUFBUWdrRCxHQUVoQyxPQUFPcnlCLEVBWVQsU0FBU2l6QixHQUFTaFYsRUFBWWhCLEdBQzVCLElBQUlqZCxFQU1KLE9BSkFvbkIsR0FBU25KLEdBQVksU0FBUzNxRCxFQUFPK2EsRUFBTzR2QyxHQUUxQyxRQURBamUsRUFBU2lkLEVBQVUzcEQsRUFBTythLEVBQU80dkMsU0FHMUJqZSxFQWVYLFNBQVNrekIsR0FBZ0J4VyxFQUFPcHBELEVBQU82L0QsR0FDckMsSUFBSUMsRUFBTSxFQUNOQyxFQUFnQixNQUFUM1csRUFBZ0IwVyxFQUFNMVcsRUFBTS9zRCxPQUV2QyxHQUFvQixpQkFBVDJELEdBQXFCQSxHQUFVQSxHQUFTKy9ELEdBbi9IM0IzZSxXQW0vSDBELENBQ2hGLEtBQU8wZSxFQUFNQyxHQUFNLENBQ2pCLElBQUlDLEVBQU9GLEVBQU1DLElBQVUsRUFDdkJoSixFQUFXM04sRUFBTTRXLEdBRUosT0FBYmpKLElBQXNCWSxHQUFTWixLQUM5QjhJLEVBQWM5SSxHQUFZLzJELEVBQVUrMkQsRUFBVy8yRCxHQUNsRDgvRCxFQUFNRSxFQUFNLEVBRVpELEVBQU9DLEVBR1gsT0FBT0QsRUFFVCxPQUFPRSxHQUFrQjdXLEVBQU9wcEQsRUFBT2k4RCxHQUFVNEQsR0FnQm5ELFNBQVNJLEdBQWtCN1csRUFBT3BwRCxFQUFPc3BELEVBQVV1VyxHQUNqRCxJQUFJQyxFQUFNLEVBQ05DLEVBQWdCLE1BQVQzVyxFQUFnQixFQUFJQSxFQUFNL3NELE9BQ3JDLEdBQWEsSUFBVDBqRSxFQUNGLE9BQU8sRUFTVCxJQUxBLElBQUlHLEdBREpsZ0UsRUFBUXNwRCxFQUFTdHBELEtBQ1FBLEVBQ3JCbWdFLEVBQXNCLE9BQVZuZ0UsRUFDWm9nRSxFQUFjekksR0FBUzMzRCxHQUN2QnFnRSxFQUFpQnJnRSxJQUFVckUsRUFFeEJta0UsRUFBTUMsR0FBTSxDQUNqQixJQUFJQyxFQUFNOVEsSUFBYTRRLEVBQU1DLEdBQVEsR0FDakNoSixFQUFXek4sRUFBU0YsRUFBTTRXLElBQzFCTSxFQUFldkosSUFBYXA3RCxFQUM1QjRrRSxFQUF5QixPQUFieEosRUFDWnlKLEVBQWlCekosR0FBYUEsRUFDOUIwSixFQUFjOUksR0FBU1osR0FFM0IsR0FBSW1KLEVBQ0YsSUFBSVEsRUFBU2IsR0FBY1csT0FFM0JFLEVBRFNMLEVBQ0FHLElBQW1CWCxHQUFjUyxHQUNqQ0gsRUFDQUssR0FBa0JGLElBQWlCVCxJQUFlVSxHQUNsREgsRUFDQUksR0FBa0JGLElBQWlCQyxJQUFjVixJQUFlWSxJQUNoRUYsSUFBYUUsSUFHYlosRUFBYzlJLEdBQVkvMkQsRUFBVSsyRCxFQUFXLzJELEdBRXREMGdFLEVBQ0ZaLEVBQU1FLEVBQU0sRUFFWkQsRUFBT0MsRUFHWCxPQUFPdFEsR0FBVXFRLEVBMWpJQzNlLFlBc2tJcEIsU0FBU3VmLEdBQWV2WCxFQUFPRSxHQU03QixJQUxBLElBQUl2dUMsR0FBUyxFQUNUMWUsRUFBUytzRCxFQUFNL3NELE9BQ2Z3dEQsRUFBVyxFQUNYbmQsRUFBUyxLQUVKM3hCLEVBQVExZSxHQUFRLENBQ3ZCLElBQUkyRCxFQUFRb3BELEVBQU1ydUMsR0FDZGc4QyxFQUFXek4sRUFBV0EsRUFBU3RwRCxHQUFTQSxFQUU1QyxJQUFLK2EsSUFBVStxQixHQUFHaXhCLEVBQVU0QyxHQUFPLENBQ2pDLElBQUlBLEVBQU81QyxFQUNYcnFCLEVBQU9tZCxLQUF3QixJQUFWN3BELEVBQWMsRUFBSUEsR0FHM0MsT0FBTzBzQyxFQVdULFNBQVNrMEIsR0FBYTVnRSxHQUNwQixNQUFvQixpQkFBVEEsRUFDRkEsRUFFTDIzRCxHQUFTMzNELEdBQ0ptaEQsR0FFRG5oRCxFQVdWLFNBQVM2Z0UsR0FBYTdnRSxHQUVwQixHQUFvQixpQkFBVEEsRUFDVCxPQUFPQSxFQUVULEdBQUlzQyxHQUFRdEMsR0FFVixPQUFPa3FELEdBQVNscUQsRUFBTzZnRSxJQUFnQixHQUV6QyxHQUFJbEosR0FBUzMzRCxHQUNYLE9BQU84d0QsR0FBaUJBLEdBQWVod0QsS0FBS2QsR0FBUyxHQUV2RCxJQUFJMHNDLEVBQVUxc0MsRUFBUSxHQUN0QixNQUFrQixLQUFWMHNDLEdBQWtCLEVBQUkxc0MsSUFBVSxJQUFhLEtBQU8wc0MsRUFZOUQsU0FBU28wQixHQUFTMVgsRUFBT0UsRUFBVVcsR0FDakMsSUFBSWx2QyxHQUFTLEVBQ1R5TSxFQUFXc2lDLEdBQ1h6dEQsRUFBUytzRCxFQUFNL3NELE9BQ2Z1NkQsR0FBVyxFQUNYbHFCLEVBQVMsR0FDVGl0QixFQUFPanRCLEVBRVgsR0FBSXVkLEVBQ0YyTSxHQUFXLEVBQ1hwdkMsRUFBV3dpQyxRQUVSLEdBQUkzdEQsR0FqdElVLElBaXRJa0IsQ0FDbkMsSUFBSWlMLEVBQU1naUQsRUFBVyxLQUFPeVgsR0FBVTNYLEdBQ3RDLEdBQUk5aEQsRUFDRixPQUFPcWxELEdBQVdybEQsR0FFcEJzdkQsR0FBVyxFQUNYcHZDLEVBQVdxa0MsR0FDWDhOLEVBQU8sSUFBSXRILFFBR1hzSCxFQUFPclEsRUFBVyxHQUFLNWMsRUFFekJvcUIsRUFDQSxPQUFTLzdDLEVBQVExZSxHQUFRLENBQ3ZCLElBQUkyRCxFQUFRb3BELEVBQU1ydUMsR0FDZGc4QyxFQUFXek4sRUFBV0EsRUFBU3RwRCxHQUFTQSxFQUc1QyxHQURBQSxFQUFTaXFELEdBQXdCLElBQVZqcUQsRUFBZUEsRUFBUSxFQUMxQzQyRCxHQUFZRyxHQUFhQSxFQUFVLENBRXJDLElBREEsSUFBSWlLLEVBQVlySCxFQUFLdDlELE9BQ2Qya0UsS0FDTCxHQUFJckgsRUFBS3FILEtBQWVqSyxFQUN0QixTQUFTRCxFQUdUeE4sR0FDRnFRLEVBQUsvOEQsS0FBS202RCxHQUVacnFCLEVBQU85dkMsS0FBS29ELFFBRUp3bkIsRUFBU215QyxFQUFNNUMsRUFBVTlNLEtBQzdCMFAsSUFBU2p0QixHQUNYaXRCLEVBQUsvOEQsS0FBS202RCxHQUVacnFCLEVBQU85dkMsS0FBS29ELElBR2hCLE9BQU8wc0MsRUFXVCxTQUFTa3lCLEdBQVV0MUQsRUFBUXF1QixHQUd6QixPQUFpQixPQURqQnJ1QixFQUFTd21DLEdBQU94bUMsRUFEaEJxdUIsRUFBTzJnQyxHQUFTM2dDLEVBQU1ydUIsYUFFVUEsRUFBT2l2RCxHQUFNNW9CLEdBQUtoWSxLQWFwRCxTQUFTc3BDLEdBQVczM0QsRUFBUXF1QixFQUFNdXBDLEVBQVN6TSxHQUN6QyxPQUFPOEosR0FBUWoxRCxFQUFRcXVCLEVBQU11cEMsRUFBUTdJLEdBQVEvdUQsRUFBUXF1QixJQUFRODhCLEdBYy9ELFNBQVMwTSxHQUFVL1gsRUFBT08sRUFBV3lYLEVBQVF0VyxHQUkzQyxJQUhBLElBQUl6dUQsRUFBUytzRCxFQUFNL3NELE9BQ2YwZSxFQUFRK3ZDLEVBQVl6dUQsR0FBVSxHQUUxQnl1RCxFQUFZL3ZDLE1BQVlBLEVBQVExZSxJQUN0Q3N0RCxFQUFVUCxFQUFNcnVDLEdBQVFBLEVBQU9xdUMsS0FFakMsT0FBT2dZLEVBQ0gzQixHQUFVclcsRUFBUTBCLEVBQVksRUFBSS92QyxFQUFTK3ZDLEVBQVkvdkMsRUFBUSxFQUFJMWUsR0FDbkVvakUsR0FBVXJXLEVBQVEwQixFQUFZL3ZDLEVBQVEsRUFBSSxFQUFLK3ZDLEVBQVl6dUQsRUFBUzBlLEdBYTFFLFNBQVNzbUQsR0FBaUJyaEUsRUFBT3NoRSxHQUMvQixJQUFJNTBCLEVBQVMxc0MsRUFJYixPQUhJMHNDLGFBQWtCdWtCLEtBQ3BCdmtCLEVBQVNBLEVBQU8xc0MsU0FFWG9xRCxHQUFZa1gsR0FBUyxTQUFTNTBCLEVBQVE2MEIsR0FDM0MsT0FBT0EsRUFBT3RZLEtBQUtod0IsTUFBTXNvQyxFQUFPclksUUFBU2lCLEdBQVUsQ0FBQ3pkLEdBQVM2MEIsRUFBT3AvRCxTQUNuRXVxQyxHQWFMLFNBQVM4MEIsR0FBUW5JLEVBQVEvUCxFQUFVVyxHQUNqQyxJQUFJNXRELEVBQVNnOUQsRUFBT2g5RCxPQUNwQixHQUFJQSxFQUFTLEVBQ1gsT0FBT0EsRUFBU3lrRSxHQUFTekgsRUFBTyxJQUFNLEdBS3hDLElBSEEsSUFBSXQrQyxHQUFTLEVBQ1QyeEIsRUFBU2hrQyxFQUFNck0sS0FFVjBlLEVBQVExZSxHQUlmLElBSEEsSUFBSStzRCxFQUFRaVEsRUFBT3QrQyxHQUNmdytDLEdBQVksSUFFUEEsRUFBV2w5RCxHQUNkazlELEdBQVl4K0MsSUFDZDJ4QixFQUFPM3hCLEdBQVM0N0MsR0FBZWpxQixFQUFPM3hCLElBQVVxdUMsRUFBT2lRLEVBQU9FLEdBQVdqUSxFQUFVVyxJQUl6RixPQUFPNlcsR0FBU2pKLEdBQVluckIsRUFBUSxHQUFJNGMsRUFBVVcsR0FZcEQsU0FBU3dYLEdBQWMzbkMsRUFBT3QyQixFQUFRaytELEdBTXBDLElBTEEsSUFBSTNtRCxHQUFTLEVBQ1QxZSxFQUFTeTlCLEVBQU16OUIsT0FDZnNsRSxFQUFhbitELEVBQU9uSCxPQUNwQnF3QyxFQUFTLEtBRUozeEIsRUFBUTFlLEdBQVEsQ0FDdkIsSUFBSTJELEVBQVErYSxFQUFRNG1ELEVBQWFuK0QsRUFBT3VYLEdBQVNwZixFQUNqRCtsRSxFQUFXaDFCLEVBQVE1UyxFQUFNL2UsR0FBUS9hLEdBRW5DLE9BQU8wc0MsRUFVVCxTQUFTazFCLEdBQW9CNWhFLEdBQzNCLE9BQU9vOUQsR0FBa0JwOUQsR0FBU0EsRUFBUSxHQVU1QyxTQUFTNmhFLEdBQWE3aEUsR0FDcEIsTUFBdUIsbUJBQVRBLEVBQXNCQSxFQUFRaThELEdBVzlDLFNBQVMzRCxHQUFTdDRELEVBQU9zSixHQUN2QixPQUFJaEgsR0FBUXRDLEdBQ0hBLEVBRUY0OEQsR0FBTTU4RCxFQUFPc0osR0FBVSxDQUFDdEosR0FBUzhoRSxHQUFhcC9ELEdBQVMxQyxJQVloRSxJQUFJK2hFLEdBQVdqRCxHQVdmLFNBQVNrRCxHQUFVNVksRUFBTzJWLEVBQU9XLEdBQy9CLElBQUlyakUsRUFBUytzRCxFQUFNL3NELE9BRW5CLE9BREFxakUsRUFBTUEsSUFBUS9qRSxFQUFZVSxFQUFTcWpFLEdBQzFCWCxHQUFTVyxHQUFPcmpFLEVBQVUrc0QsRUFBUXFXLEdBQVVyVyxFQUFPMlYsRUFBT1csR0FTckUsSUFBSTVRLEdBQWVELElBQW1CLFNBQVM3aUQsR0FDN0MsT0FBTzQ3QyxHQUFLa0gsYUFBYTlpRCxJQVczQixTQUFTaXBELEdBQVlXLEVBQVFqQixHQUMzQixHQUFJQSxFQUNGLE9BQU9pQixFQUFPcnpELFFBRWhCLElBQUlsRyxFQUFTdTVELEVBQU92NUQsT0FDaEJxd0MsRUFBUzBoQixHQUFjQSxHQUFZL3hELEdBQVUsSUFBSXU1RCxFQUFPNTNCLFlBQVkzaEMsR0FHeEUsT0FEQXU1RCxFQUFPcnpCLEtBQUttSyxHQUNMQSxFQVVULFNBQVNncEIsR0FBaUJ1TSxHQUN4QixJQUFJdjFCLEVBQVMsSUFBSXUxQixFQUFZamtDLFlBQVlpa0MsRUFBWW5NLFlBRXJELE9BREEsSUFBSTNILEdBQVd6aEIsR0FBUXBsQyxJQUFJLElBQUk2bUQsR0FBVzhULElBQ25DdjFCLEVBZ0RULFNBQVNzcEIsR0FBZ0JrTSxFQUFZdk4sR0FDbkMsSUFBSWlCLEVBQVNqQixFQUFTZSxHQUFpQndNLEVBQVd0TSxRQUFVc00sRUFBV3RNLE9BQ3ZFLE9BQU8sSUFBSXNNLEVBQVdsa0MsWUFBWTQzQixFQUFRc00sRUFBV3JNLFdBQVlxTSxFQUFXN2xFLFFBVzlFLFNBQVM4aEUsR0FBaUJuK0QsRUFBT2k1RCxHQUMvQixHQUFJajVELElBQVVpNUQsRUFBTyxDQUNuQixJQUFJa0osRUFBZW5pRSxJQUFVckUsRUFDekJ3a0UsRUFBc0IsT0FBVm5nRSxFQUNab2lFLEVBQWlCcGlFLEdBQVVBLEVBQzNCb2dFLEVBQWN6SSxHQUFTMzNELEdBRXZCc2dFLEVBQWVySCxJQUFVdDlELEVBQ3pCNGtFLEVBQXNCLE9BQVZ0SCxFQUNadUgsRUFBaUJ2SCxHQUFVQSxFQUMzQndILEVBQWM5SSxHQUFTc0IsR0FFM0IsSUFBTXNILElBQWNFLElBQWdCTCxHQUFlcGdFLEVBQVFpNUQsR0FDdERtSCxHQUFlRSxHQUFnQkUsSUFBbUJELElBQWNFLEdBQ2hFTixHQUFhRyxHQUFnQkUsSUFDNUIyQixHQUFnQjNCLElBQ2pCNEIsRUFDSCxPQUFPLEVBRVQsSUFBTWpDLElBQWNDLElBQWdCSyxHQUFlemdFLEVBQVFpNUQsR0FDdER3SCxHQUFlMEIsR0FBZ0JDLElBQW1CakMsSUFBY0MsR0FDaEVHLEdBQWE0QixHQUFnQkMsSUFDNUI5QixHQUFnQjhCLElBQ2pCNUIsRUFDSCxPQUFRLEVBR1osT0FBTyxFQXVEVCxTQUFTNkIsR0FBWWxnRSxFQUFNbWdFLEVBQVVDLEVBQVNDLEdBVTVDLElBVEEsSUFBSUMsR0FBYSxFQUNiQyxFQUFhdmdFLEVBQUs5RixPQUNsQnNtRSxFQUFnQkosRUFBUWxtRSxPQUN4QnVtRSxHQUFhLEVBQ2JDLEVBQWFQLEVBQVNqbUUsT0FDdEJ5bUUsRUFBY3JULEdBQVVpVCxFQUFhQyxFQUFlLEdBQ3BEajJCLEVBQVNoa0MsRUFBTW02RCxFQUFhQyxHQUM1QkMsR0FBZVAsSUFFVkksRUFBWUMsR0FDbkJuMkIsRUFBT2syQixHQUFhTixFQUFTTSxHQUUvQixPQUFTSCxFQUFZRSxJQUNmSSxHQUFlTixFQUFZQyxLQUM3QmgyQixFQUFPNjFCLEVBQVFFLElBQWN0Z0UsRUFBS3NnRSxJQUd0QyxLQUFPSyxLQUNMcDJCLEVBQU9rMkIsS0FBZXpnRSxFQUFLc2dFLEtBRTdCLE9BQU8vMUIsRUFjVCxTQUFTczJCLEdBQWlCN2dFLEVBQU1tZ0UsRUFBVUMsRUFBU0MsR0FXakQsSUFWQSxJQUFJQyxHQUFhLEVBQ2JDLEVBQWF2Z0UsRUFBSzlGLE9BQ2xCNG1FLEdBQWdCLEVBQ2hCTixFQUFnQkosRUFBUWxtRSxPQUN4QjZtRSxHQUFjLEVBQ2RDLEVBQWNiLEVBQVNqbUUsT0FDdkJ5bUUsRUFBY3JULEdBQVVpVCxFQUFhQyxFQUFlLEdBQ3BEajJCLEVBQVNoa0MsRUFBTW82RCxFQUFjSyxHQUM3QkosR0FBZVAsSUFFVkMsRUFBWUssR0FDbkJwMkIsRUFBTysxQixHQUFhdGdFLEVBQUtzZ0UsR0FHM0IsSUFEQSxJQUFJbHRDLEVBQVNrdEMsSUFDSlMsRUFBYUMsR0FDcEJ6MkIsRUFBT25YLEVBQVMydEMsR0FBY1osRUFBU1ksR0FFekMsT0FBU0QsRUFBZU4sSUFDbEJJLEdBQWVOLEVBQVlDLEtBQzdCaDJCLEVBQU9uWCxFQUFTZ3RDLEVBQVFVLElBQWlCOWdFLEVBQUtzZ0UsTUFHbEQsT0FBTy8xQixFQVdULFNBQVMybUIsR0FBVXh2RCxFQUFRdWxELEdBQ3pCLElBQUlydUMsR0FBUyxFQUNUMWUsRUFBU3dILEVBQU94SCxPQUdwQixJQURBK3NELElBQVVBLEVBQVExZ0QsRUFBTXJNLE1BQ2YwZSxFQUFRMWUsR0FDZitzRCxFQUFNcnVDLEdBQVNsWCxFQUFPa1gsR0FFeEIsT0FBT3F1QyxFQWFULFNBQVM0SyxHQUFXbndELEVBQVFpMkIsRUFBT3h3QixFQUFRbXJELEdBQ3pDLElBQUkyTyxHQUFTOTVELEVBQ2JBLElBQVdBLEVBQVMsSUFLcEIsSUFIQSxJQUFJeVIsR0FBUyxFQUNUMWUsRUFBU3k5QixFQUFNejlCLFNBRVYwZSxFQUFRMWUsR0FBUSxDQUN2QixJQUFJbUcsRUFBTXMzQixFQUFNL2UsR0FFWnRQLEVBQVdncEQsRUFDWEEsRUFBV25yRCxFQUFPOUcsR0FBTXFCLEVBQU9yQixHQUFNQSxFQUFLOEcsRUFBUXpGLEdBQ2xEbEksRUFFQThQLElBQWE5UCxJQUNmOFAsRUFBVzVILEVBQU9yQixJQUVoQjRnRSxFQUNGM1AsR0FBZ0JucUQsRUFBUTlHLEVBQUtpSixHQUU3QmlvRCxHQUFZcHFELEVBQVE5RyxFQUFLaUosR0FHN0IsT0FBT25DLEVBbUNULFNBQVMrNUQsR0FBaUJoYSxFQUFRaWEsR0FDaEMsT0FBTyxTQUFTM1ksRUFBWXJCLEdBQzFCLElBQUlMLEVBQU8zbUQsR0FBUXFvRCxHQUFjeEIsR0FBa0IwSyxHQUMvQ3RLLEVBQWMrWixFQUFjQSxJQUFnQixHQUVoRCxPQUFPcmEsRUFBSzBCLEVBQVl0QixFQUFRdVUsR0FBWXRVLEVBQVUsR0FBSUMsSUFXOUQsU0FBU2dhLEdBQWVDLEdBQ3RCLE9BQU8xRSxJQUFTLFNBQVN4MUQsRUFBUXd5QyxHQUMvQixJQUFJL2dDLEdBQVMsRUFDVDFlLEVBQVN5L0MsRUFBUXovQyxPQUNqQm80RCxFQUFhcDRELEVBQVMsRUFBSXkvQyxFQUFRei9DLEVBQVMsR0FBS1YsRUFDaEQ4bkUsRUFBUXBuRSxFQUFTLEVBQUl5L0MsRUFBUSxHQUFLbmdELEVBV3RDLElBVEE4NEQsRUFBYytPLEVBQVNubkUsT0FBUyxHQUEwQixtQkFBZG80RCxHQUN2Q3A0RCxJQUFVbzRELEdBQ1g5NEQsRUFFQThuRSxHQUFTQyxHQUFlNW5CLEVBQVEsR0FBSUEsRUFBUSxHQUFJMm5CLEtBQ2xEaFAsRUFBYXA0RCxFQUFTLEVBQUlWLEVBQVk4NEQsRUFDdENwNEQsRUFBUyxHQUVYaU4sRUFBUzNJLEdBQU8ySSxLQUNQeVIsRUFBUTFlLEdBQVEsQ0FDdkIsSUFBSXdILEVBQVNpNEMsRUFBUS9nQyxHQUNqQmxYLEdBQ0YyL0QsRUFBU2w2RCxFQUFRekYsRUFBUWtYLEVBQU8wNUMsR0FHcEMsT0FBT25yRCxLQVlYLFNBQVMrdEQsR0FBZXpNLEVBQVVFLEdBQ2hDLE9BQU8sU0FBU0gsRUFBWXJCLEdBQzFCLEdBQWtCLE1BQWRxQixFQUNGLE9BQU9BLEVBRVQsSUFBSzhSLEdBQVk5UixHQUNmLE9BQU9DLEVBQVNELEVBQVlyQixHQU05QixJQUpBLElBQUlqdEQsRUFBU3N1RCxFQUFXdHVELE9BQ3BCMGUsRUFBUSt2QyxFQUFZenVELEdBQVUsRUFDOUJpd0MsRUFBVzNyQyxHQUFPZ3FELElBRWRHLEVBQVkvdkMsTUFBWUEsRUFBUTFlLEtBQ2EsSUFBL0NpdEQsRUFBU2hkLEVBQVN2eEIsR0FBUUEsRUFBT3V4QixLQUl2QyxPQUFPcWUsR0FXWCxTQUFTdU4sR0FBY3BOLEdBQ3JCLE9BQU8sU0FBU3hoRCxFQUFRZ2dELEVBQVVtUCxHQU1oQyxJQUxBLElBQUkxOUMsR0FBUyxFQUNUdXhCLEVBQVczckMsR0FBTzJJLEdBQ2xCd3dCLEVBQVEyK0IsRUFBU252RCxHQUNqQmpOLEVBQVN5OUIsRUFBTXo5QixPQUVaQSxLQUFVLENBQ2YsSUFBSW1HLEVBQU1zM0IsRUFBTWd4QixFQUFZenVELElBQVcwZSxHQUN2QyxJQUErQyxJQUEzQ3V1QyxFQUFTaGQsRUFBUzlwQyxHQUFNQSxFQUFLOHBDLEdBQy9CLE1BR0osT0FBT2hqQyxHQWdDWCxTQUFTcTZELEdBQWdCQyxHQUN2QixPQUFPLFNBQVNuWSxHQUdkLElBQUlNLEVBQWFRLEdBRmpCZCxFQUFTL29ELEdBQVMrb0QsSUFHZHVCLEdBQWN2QixHQUNkOXZELEVBRUEyd0QsRUFBTVAsRUFDTkEsRUFBVyxHQUNYTixFQUFPenVCLE9BQU8sR0FFZDZtQyxFQUFXOVgsRUFDWGlXLEdBQVVqVyxFQUFZLEdBQUdqdkQsS0FBSyxJQUM5QjJ1RCxFQUFPbHBELE1BQU0sR0FFakIsT0FBTytwRCxFQUFJc1gsS0FBZ0JDLEdBVy9CLFNBQVNDLEdBQWlCbDhELEdBQ3hCLE9BQU8sU0FBUzZqRCxHQUNkLE9BQU9yQixHQUFZMlosR0FBTUMsR0FBT3ZZLEdBQVFudEQsUUFBUXNvRCxHQUFRLEtBQU1oL0MsRUFBVSxLQVk1RSxTQUFTcThELEdBQVd4TyxHQUNsQixPQUFPLFdBSUwsSUFBSXR6RCxFQUFPKzJCLFVBQ1gsT0FBUS8yQixFQUFLOUYsUUFDWCxLQUFLLEVBQUcsT0FBTyxJQUFJbzVELEVBQ25CLEtBQUssRUFBRyxPQUFPLElBQUlBLEVBQUt0ekQsRUFBSyxJQUM3QixLQUFLLEVBQUcsT0FBTyxJQUFJc3pELEVBQUt0ekQsRUFBSyxHQUFJQSxFQUFLLElBQ3RDLEtBQUssRUFBRyxPQUFPLElBQUlzekQsRUFBS3R6RCxFQUFLLEdBQUlBLEVBQUssR0FBSUEsRUFBSyxJQUMvQyxLQUFLLEVBQUcsT0FBTyxJQUFJc3pELEVBQUt0ekQsRUFBSyxHQUFJQSxFQUFLLEdBQUlBLEVBQUssR0FBSUEsRUFBSyxJQUN4RCxLQUFLLEVBQUcsT0FBTyxJQUFJc3pELEVBQUt0ekQsRUFBSyxHQUFJQSxFQUFLLEdBQUlBLEVBQUssR0FBSUEsRUFBSyxHQUFJQSxFQUFLLElBQ2pFLEtBQUssRUFBRyxPQUFPLElBQUlzekQsRUFBS3R6RCxFQUFLLEdBQUlBLEVBQUssR0FBSUEsRUFBSyxHQUFJQSxFQUFLLEdBQUlBLEVBQUssR0FBSUEsRUFBSyxJQUMxRSxLQUFLLEVBQUcsT0FBTyxJQUFJc3pELEVBQUt0ekQsRUFBSyxHQUFJQSxFQUFLLEdBQUlBLEVBQUssR0FBSUEsRUFBSyxHQUFJQSxFQUFLLEdBQUlBLEVBQUssR0FBSUEsRUFBSyxJQUVyRixJQUFJK2hFLEVBQWM5UyxHQUFXcUUsRUFBSzcwRCxXQUM5QjhyQyxFQUFTK29CLEVBQUt4OEIsTUFBTWlyQyxFQUFhL2hFLEdBSXJDLE9BQU9pbkMsR0FBU3NELEdBQVVBLEVBQVN3M0IsR0FnRHZDLFNBQVNDLEdBQVdDLEdBQ2xCLE9BQU8sU0FBU3paLEVBQVloQixFQUFXamdCLEdBQ3JDLElBQUk0QyxFQUFXM3JDLEdBQU9ncUQsR0FDdEIsSUFBSzhSLEdBQVk5UixHQUFhLENBQzVCLElBQUlyQixFQUFXc1UsR0FBWWpVLEVBQVcsR0FDdENnQixFQUFhem9ELEdBQUt5b0QsR0FDbEJoQixFQUFZLFNBQVNubkQsR0FBTyxPQUFPOG1ELEVBQVNoZCxFQUFTOXBDLEdBQU1BLEVBQUs4cEMsSUFFbEUsSUFBSXZ4QixFQUFRcXBELEVBQWN6WixFQUFZaEIsRUFBV2pnQixHQUNqRCxPQUFPM3VCLEdBQVMsRUFBSXV4QixFQUFTZ2QsRUFBV3FCLEVBQVc1dkMsR0FBU0EsR0FBU3BmLEdBV3pFLFNBQVMwb0UsR0FBV3ZaLEdBQ2xCLE9BQU93WixJQUFTLFNBQVNDLEdBQ3ZCLElBQUlsb0UsRUFBU2tvRSxFQUFNbG9FLE9BQ2YwZSxFQUFRMWUsRUFDUm1vRSxFQUFTdFQsR0FBY3R3RCxVQUFVNmpFLEtBS3JDLElBSEkzWixHQUNGeVosRUFBTXhoQyxVQUVEaG9CLEtBQVMsQ0FDZCxJQUFJa3VDLEVBQU9zYixFQUFNeHBELEdBQ2pCLEdBQW1CLG1CQUFSa3VDLEVBQ1QsTUFBTSxJQUFJdHZCLEdBQVVrbkIsR0FFdEIsR0FBSTJqQixJQUFXcnJCLEdBQWdDLFdBQXJCdXJCLEdBQVl6YixHQUNwQyxJQUFJOVAsRUFBVSxJQUFJK1gsR0FBYyxJQUFJLEdBSXhDLElBREFuMkMsRUFBUW8rQixFQUFVcCtCLEVBQVExZSxJQUNqQjBlLEVBQVExZSxHQUFRLENBR3ZCLElBQUlzb0UsRUFBV0QsR0FGZnpiLEVBQU9zYixFQUFNeHBELElBR1QvZCxFQUFtQixXQUFaMm5FLEVBQXdCQyxHQUFRM2IsR0FBUXR0RCxFQU1qRHc5QyxFQUpFbjhDLEdBQVE2bkUsR0FBVzduRSxFQUFLLEtBQ1gsS0FBWEEsRUFBSyxLQUNKQSxFQUFLLEdBQUdYLFFBQXFCLEdBQVhXLEVBQUssR0FFbEJtOEMsRUFBUXVyQixHQUFZMW5FLEVBQUssS0FBS2k4QixNQUFNa2dCLEVBQVNuOEMsRUFBSyxJQUVsQyxHQUFmaXNELEVBQUs1c0QsUUFBZXdvRSxHQUFXNWIsR0FDdEM5UCxFQUFRd3JCLEtBQ1J4ckIsRUFBUXNyQixLQUFLeGIsR0FHckIsT0FBTyxXQUNMLElBQUk5bUQsRUFBTysyQixVQUNQbDVCLEVBQVFtQyxFQUFLLEdBRWpCLEdBQUlnM0MsR0FBMEIsR0FBZmgzQyxFQUFLOUYsUUFBZWlHLEdBQVF0QyxHQUN6QyxPQUFPbTVDLEVBQVEyckIsTUFBTTlrRSxHQUFPQSxRQUs5QixJQUhBLElBQUkrYSxFQUFRLEVBQ1IyeEIsRUFBU3J3QyxFQUFTa29FLEVBQU14cEQsR0FBT2tlLE1BQU0zOEIsS0FBTTZGLEdBQVFuQyxJQUU5QythLEVBQVExZSxHQUNmcXdDLEVBQVM2M0IsRUFBTXhwRCxHQUFPamEsS0FBS3hFLEtBQU1vd0MsR0FFbkMsT0FBT0EsTUF3QmIsU0FBU3E0QixHQUFhOWIsRUFBTXVMLEVBQVN0TCxFQUFTb1osRUFBVUMsRUFBU3lDLEVBQWVDLEVBQWNDLEVBQVFDLEVBQUtDLEdBQ3pHLElBQUlDLEVBQVE3USxFQUFVdlQsRUFDbEJxa0IsRUE1aUthLEVBNGlLSjlRLEVBQ1QrUSxFQTVpS2lCLEVBNGlLTC9RLEVBQ1pnTyxFQUFzQixHQUFWaE8sRUFDWmdSLEVBdGlLYSxJQXNpS0poUixFQUNUaUIsRUFBTzhQLEVBQVk1cEUsRUFBWXNvRSxHQUFXaGIsR0E2QzlDLE9BM0NBLFNBQVM5UCxJQUtQLElBSkEsSUFBSTk4QyxFQUFTNjhCLFVBQVU3OEIsT0FDbkI4RixFQUFPdUcsRUFBTXJNLEdBQ2IwZSxFQUFRMWUsRUFFTDBlLEtBQ0w1WSxFQUFLNFksR0FBU21lLFVBQVVuZSxHQUUxQixHQUFJeW5ELEVBQ0YsSUFBSWhxQyxFQUFjaXRDLEdBQVV0c0IsR0FDeEJ1c0IsRUFBZXhaLEdBQWEvcEQsRUFBTXEyQixHQVN4QyxHQVBJOHBDLElBQ0ZuZ0UsRUFBT2tnRSxHQUFZbGdFLEVBQU1tZ0UsRUFBVUMsRUFBU0MsSUFFMUN3QyxJQUNGN2lFLEVBQU82Z0UsR0FBaUI3Z0UsRUFBTTZpRSxFQUFlQyxFQUFjekMsSUFFN0RubUUsR0FBVXFwRSxFQUNObEQsR0FBYW5tRSxFQUFTK29FLEVBQU8sQ0FDL0IsSUFBSU8sRUFBYWpaLEdBQWV2cUQsRUFBTXEyQixHQUN0QyxPQUFPb3RDLEdBQ0wzYyxFQUFNdUwsRUFBU3VRLEdBQWM1ckIsRUFBUTNnQixZQUFhMHdCLEVBQ2xEL21ELEVBQU13akUsRUFBWVQsRUFBUUMsRUFBS0MsRUFBUS9vRSxHQUczQyxJQUFJNm5FLEVBQWNvQixFQUFTcGMsRUFBVTVzRCxLQUNqQ3k4QixFQUFLd3NDLEVBQVlyQixFQUFZamIsR0FBUUEsRUFjekMsT0FaQTVzRCxFQUFTOEYsRUFBSzlGLE9BQ1Y2b0UsRUFDRi9pRSxFQUFPMGpFLEdBQVExakUsRUFBTStpRSxHQUNaTSxHQUFVbnBFLEVBQVMsR0FDNUI4RixFQUFLNGdDLFVBRUhzaUMsR0FBU0YsRUFBTTlvRSxJQUNqQjhGLEVBQUs5RixPQUFTOG9FLEdBRVo3b0UsTUFBUUEsT0FBU3NyRCxJQUFRdHJELGdCQUFnQjY4QyxJQUMzQ3BnQixFQUFLMDhCLEdBQVF3TyxHQUFXbHJDLElBRW5CQSxFQUFHRSxNQUFNaXJDLEVBQWEvaEUsSUFhakMsU0FBUzJqRSxHQUFlemMsRUFBUTBjLEdBQzlCLE9BQU8sU0FBU3o4RCxFQUFRZ2dELEdBQ3RCLE9BaC9ESixTQUFzQmhnRCxFQUFRKy9DLEVBQVFDLEVBQVVDLEdBSTlDLE9BSEErTixHQUFXaHVELEdBQVEsU0FBU3RKLEVBQU93QyxFQUFLOEcsR0FDdEMrL0MsRUFBT0UsRUFBYUQsRUFBU3RwRCxHQUFRd0MsRUFBSzhHLE1BRXJDaWdELEVBNCtERXljLENBQWExOEQsRUFBUSsvQyxFQUFRMGMsRUFBV3pjLEdBQVcsS0FZOUQsU0FBUzJjLEdBQW9CQyxFQUFVQyxHQUNyQyxPQUFPLFNBQVNubUUsRUFBT2k1RCxHQUNyQixJQUFJdnNCLEVBQ0osR0FBSTFzQyxJQUFVckUsR0FBYXM5RCxJQUFVdDlELEVBQ25DLE9BQU93cUUsRUFLVCxHQUhJbm1FLElBQVVyRSxJQUNaK3dDLEVBQVMxc0MsR0FFUGk1RCxJQUFVdDlELEVBQVcsQ0FDdkIsR0FBSSt3QyxJQUFXL3dDLEVBQ2IsT0FBT3M5RCxFQUVXLGlCQUFUajVELEdBQXFDLGlCQUFUaTVELEdBQ3JDajVELEVBQVE2Z0UsR0FBYTdnRSxHQUNyQmk1RCxFQUFRNEgsR0FBYTVILEtBRXJCajVELEVBQVE0Z0UsR0FBYTVnRSxHQUNyQmk1RCxFQUFRMkgsR0FBYTNILElBRXZCdnNCLEVBQVN3NUIsRUFBU2xtRSxFQUFPaTVELEdBRTNCLE9BQU92c0IsR0FXWCxTQUFTMDVCLEdBQVdDLEdBQ2xCLE9BQU8vQixJQUFTLFNBQVM1RyxHQUV2QixPQURBQSxFQUFZeFQsR0FBU3dULEVBQVcvUixHQUFVaVMsT0FDbkNrQixJQUFTLFNBQVMzOEQsR0FDdkIsSUFBSSttRCxFQUFVNXNELEtBQ2QsT0FBTytwRSxFQUFVM0ksR0FBVyxTQUFTcFUsR0FDbkMsT0FBT3J3QixHQUFNcXdCLEVBQVVKLEVBQVMvbUQsWUFleEMsU0FBU21rRSxHQUFjanFFLEVBQVFrcUUsR0FHN0IsSUFBSUMsR0FGSkQsRUFBUUEsSUFBVTVxRSxFQUFZLElBQU1rbEUsR0FBYTBGLElBRXpCbHFFLE9BQ3hCLEdBQUltcUUsRUFBYyxFQUNoQixPQUFPQSxFQUFjM0gsR0FBVzBILEVBQU9scUUsR0FBVWtxRSxFQUVuRCxJQUFJNzVCLEVBQVNteUIsR0FBVzBILEVBQU90WCxHQUFXNXlELEVBQVN3d0QsR0FBVzBaLEtBQzlELE9BQU9oYSxHQUFXZ2EsR0FDZHZFLEdBQVVoVixHQUFjdGdCLEdBQVMsRUFBR3J3QyxHQUFRUyxLQUFLLElBQ2pENHZDLEVBQU9ucUMsTUFBTSxFQUFHbEcsR0E2Q3RCLFNBQVNrYSxHQUFZdTBDLEdBQ25CLE9BQU8sU0FBU2lVLEVBQU9XLEVBQUtybUMsR0FhMUIsT0FaSUEsR0FBdUIsaUJBQVJBLEdBQW9CcXFDLEdBQWUzRSxFQUFPVyxFQUFLcm1DLEtBQ2hFcW1DLEVBQU1ybUMsRUFBTzE5QixHQUdmb2pFLEVBQVEwSCxHQUFTMUgsR0FDYlcsSUFBUS9qRSxHQUNWK2pFLEVBQU1YLEVBQ05BLEVBQVEsR0FFUlcsRUFBTStHLEdBQVMvRyxHQTU3Q3JCLFNBQW1CWCxFQUFPVyxFQUFLcm1DLEVBQU15eEIsR0FLbkMsSUFKQSxJQUFJL3ZDLEdBQVMsRUFDVDFlLEVBQVNvekQsR0FBVVIsSUFBWXlRLEVBQU1YLElBQVUxbEMsR0FBUSxJQUFLLEdBQzVEcVQsRUFBU2hrQyxFQUFNck0sR0FFWkEsS0FDTHF3QyxFQUFPb2UsRUFBWXp1RCxJQUFXMGUsR0FBU2drRCxFQUN2Q0EsR0FBUzFsQyxFQUVYLE9BQU9xVCxFQXM3Q0VnNkIsQ0FBVTNILEVBQU9XLEVBRHhCcm1DLEVBQU9BLElBQVMxOUIsRUFBYW9qRSxFQUFRVyxFQUFNLEdBQUssRUFBSytHLEdBQVNwdEMsR0FDM0J5eEIsSUFXdkMsU0FBUzZiLEdBQTBCVCxHQUNqQyxPQUFPLFNBQVNsbUUsRUFBT2k1RCxHQUtyQixNQUpzQixpQkFBVGo1RCxHQUFxQyxpQkFBVGk1RCxJQUN2Q2o1RCxFQUFRMG9DLEdBQVMxb0MsR0FDakJpNUQsRUFBUXZ3QixHQUFTdXdCLElBRVppTixFQUFTbG1FLEVBQU9pNUQsSUFxQjNCLFNBQVMyTSxHQUFjM2MsRUFBTXVMLEVBQVNvUyxFQUFVcHVDLEVBQWEwd0IsRUFBU29aLEVBQVVDLEVBQVMyQyxFQUFRQyxFQUFLQyxHQUNwRyxJQUFJeUIsRUFyeEtjLEVBcXhLSnJTLEVBTWRBLEdBQVlxUyxFQUFVN2xCLEVBeHhLSSxHQUpGLEdBNnhLeEJ3VCxLQUFhcVMsRUF6eEthLEdBeXhLdUI3bEIsTUFHL0N3VCxJQUFXLEdBRWIsSUFBSXNTLEVBQVUsQ0FDWjdkLEVBQU11TCxFQUFTdEwsRUFWQzJkLEVBQVV2RSxFQUFXM21FLEVBRnRCa3JFLEVBQVV0RSxFQUFVNW1FLEVBR2RrckUsRUFBVWxyRSxFQUFZMm1FLEVBRnZCdUUsRUFBVWxyRSxFQUFZNG1FLEVBWXpCMkMsRUFBUUMsRUFBS0MsR0FHNUIxNEIsRUFBU2s2QixFQUFTM3RDLE1BQU10OUIsRUFBV21yRSxHQUt2QyxPQUpJakMsR0FBVzViLElBQ2JyMkMsR0FBUTg1QixFQUFRbzZCLEdBRWxCcDZCLEVBQU9sVSxZQUFjQSxFQUNkdXVDLEdBQWdCcjZCLEVBQVF1YyxFQUFNdUwsR0FVdkMsU0FBU3dTLEdBQVlwRCxHQUNuQixJQUFJM2EsRUFBT24zQyxHQUFLOHhELEdBQ2hCLE9BQU8sU0FBU3hQLEVBQVFudEMsR0FHdEIsR0FGQW10QyxFQUFTMXJCLEdBQVMwckIsSUFDbEJudEMsRUFBeUIsTUFBYkEsRUFBb0IsRUFBSXlvQyxHQUFVM2IsR0FBVTlzQixHQUFZLE9BQ25EcW9DLEdBQWU4RSxHQUFTLENBR3ZDLElBQUk2UyxHQUFRdmtFLEdBQVMweEQsR0FBVSxLQUFLdHNELE1BQU0sS0FJMUMsU0FEQW0vRCxHQUFRdmtFLEdBRkl1bUQsRUFBS2dlLEVBQUssR0FBSyxNQUFRQSxFQUFLLEdBQUtoZ0QsS0FFbkIsS0FBS25mLE1BQU0sTUFDdkIsR0FBSyxNQUFRbS9ELEVBQUssR0FBS2hnRCxJQUV2QyxPQUFPZ2lDLEVBQUttTCxJQVdoQixJQUFJMk0sR0FBYzlRLElBQVEsRUFBSXRELEdBQVcsSUFBSXNELEdBQUksQ0FBQyxFQUFFLEtBQUssSUFBTy9PLEVBQW1CLFNBQVMxOUMsR0FDMUYsT0FBTyxJQUFJeXNELEdBQUl6c0QsSUFEMkQwakUsR0FXNUUsU0FBU0MsR0FBYzFPLEdBQ3JCLE9BQU8sU0FBU252RCxHQUNkLElBQUlpcUMsRUFBTXdoQixHQUFPenJELEdBQ2pCLE9BQUlpcUMsR0FBT3NPLEVBQ0YySyxHQUFXbGpELEdBRWhCaXFDLEdBQU8yTyxFQUNGMEssR0FBV3RqRCxHQW42STFCLFNBQXFCQSxFQUFRd3dCLEdBQzNCLE9BQU9vd0IsR0FBU3B3QixHQUFPLFNBQVN0M0IsR0FDOUIsTUFBTyxDQUFDQSxFQUFLOEcsRUFBTzlHLE9BbTZJWDRrRSxDQUFZOTlELEVBQVFtdkQsRUFBU252RCxLQTZCeEMsU0FBUys5RCxHQUFXcGUsRUFBTXVMLEVBQVN0TCxFQUFTb1osRUFBVUMsRUFBUzJDLEVBQVFDLEVBQUtDLEdBQzFFLElBQUlHLEVBbDRLaUIsRUFrNEtML1EsRUFDaEIsSUFBSytRLEdBQTRCLG1CQUFSdGMsRUFDdkIsTUFBTSxJQUFJdHZCLEdBQVVrbkIsR0FFdEIsSUFBSXhrRCxFQUFTaW1FLEVBQVdBLEVBQVNqbUUsT0FBUyxFQVMxQyxHQVJLQSxJQUNIbTRELElBQVcsR0FDWDhOLEVBQVdDLEVBQVU1bUUsR0FFdkJ3cEUsRUFBTUEsSUFBUXhwRSxFQUFZd3BFLEVBQU0xVixHQUFVMWIsR0FBVW94QixHQUFNLEdBQzFEQyxFQUFRQSxJQUFVenBFLEVBQVl5cEUsRUFBUXJ4QixHQUFVcXhCLEdBQ2hEL29FLEdBQVVrbUUsRUFBVUEsRUFBUWxtRSxPQUFTLEVBeDRLWCxHQTA0S3RCbTRELEVBQW1DLENBQ3JDLElBQUl3USxFQUFnQjFDLEVBQ2hCMkMsRUFBZTFDLEVBRW5CRCxFQUFXQyxFQUFVNW1FLEVBRXZCLElBQUlxQixFQUFPdW9FLEVBQVk1cEUsRUFBWWlwRSxHQUFRM2IsR0FFdkM2ZCxFQUFVLENBQ1o3ZCxFQUFNdUwsRUFBU3RMLEVBQVNvWixFQUFVQyxFQUFTeUMsRUFBZUMsRUFDMURDLEVBQVFDLEVBQUtDLEdBa0JmLEdBZklwb0UsR0EyNkJOLFNBQW1CQSxFQUFNNkcsR0FDdkIsSUFBSTJ3RCxFQUFVeDNELEVBQUssR0FDZnNxRSxFQUFhempFLEVBQU8sR0FDcEIwakUsRUFBYS9TLEVBQVU4UyxFQUN2QjFRLEVBQVcyUSxFQUFhLElBRXhCQyxFQUNBRixHQUFjcm1CLEdBNTBNQSxHQTQwTW1CdVQsR0FDakM4UyxHQUFjcm1CLEdBeDBNQSxLQXcwTW1CdVQsR0FBZ0N4M0QsRUFBSyxHQUFHWCxRQUFVd0gsRUFBTyxJQUM1RSxLQUFkeWpFLEdBQXFEempFLEVBQU8sR0FBR3hILFFBQVV3SCxFQUFPLElBOTBNbEUsR0E4ME0wRTJ3RCxFQUc1RixJQUFNb0MsSUFBWTRRLEVBQ2hCLE9BQU94cUUsRUFyMU1RLEVBdzFNYnNxRSxJQUNGdHFFLEVBQUssR0FBSzZHLEVBQU8sR0FFakIwakUsR0EzMU1lLEVBMjFNRC9TLEVBQTJCLEVBejFNbkIsR0E0MU14QixJQUFJeDBELEVBQVE2RCxFQUFPLEdBQ25CLEdBQUk3RCxFQUFPLENBQ1QsSUFBSXNpRSxFQUFXdGxFLEVBQUssR0FDcEJBLEVBQUssR0FBS3NsRSxFQUFXRCxHQUFZQyxFQUFVdGlFLEVBQU82RCxFQUFPLElBQU03RCxFQUMvRGhELEVBQUssR0FBS3NsRSxFQUFXNVYsR0FBZTF2RCxFQUFLLEdBQUkrakQsR0FBZWw5QyxFQUFPLElBR3JFN0QsRUFBUTZELEVBQU8sTUFFYnkrRCxFQUFXdGxFLEVBQUssR0FDaEJBLEVBQUssR0FBS3NsRSxFQUFXVSxHQUFpQlYsRUFBVXRpRSxFQUFPNkQsRUFBTyxJQUFNN0QsRUFDcEVoRCxFQUFLLEdBQUtzbEUsRUFBVzVWLEdBQWUxdkQsRUFBSyxHQUFJK2pELEdBQWVsOUMsRUFBTyxLQUdyRTdELEVBQVE2RCxFQUFPLE1BRWI3RyxFQUFLLEdBQUtnRCxHQUdSc25FLEVBQWFybUIsSUFDZmprRCxFQUFLLEdBQWdCLE1BQVhBLEVBQUssR0FBYTZHLEVBQU8sR0FBSzZyRCxHQUFVMXlELEVBQUssR0FBSTZHLEVBQU8sS0FHckQsTUFBWDdHLEVBQUssS0FDUEEsRUFBSyxHQUFLNkcsRUFBTyxJQUduQjdHLEVBQUssR0FBSzZHLEVBQU8sR0FDakI3RyxFQUFLLEdBQUt1cUUsRUE1OUJSRSxDQUFVWCxFQUFTOXBFLEdBRXJCaXNELEVBQU82ZCxFQUFRLEdBQ2Z0UyxFQUFVc1MsRUFBUSxHQUNsQjVkLEVBQVU0ZCxFQUFRLEdBQ2xCeEUsRUFBV3dFLEVBQVEsR0FDbkJ2RSxFQUFVdUUsRUFBUSxLQUNsQjFCLEVBQVEwQixFQUFRLEdBQUtBLEVBQVEsS0FBT25yRSxFQUMvQjRwRSxFQUFZLEVBQUl0YyxFQUFLNXNELE9BQ3RCb3pELEdBQVVxWCxFQUFRLEdBQUt6cUUsRUFBUSxLQUVYLEdBQVZtNEQsSUFDWkEsSUFBVyxJQUVSQSxHQTU2S1ksR0E0NktEQSxFQUdkOW5CLEVBNTZLZ0IsR0EyNktQOG5CLEdBMTZLYSxJQTA2S2lCQSxFQXBnQjNDLFNBQXFCdkwsRUFBTXVMLEVBQVM0USxHQUNsQyxJQUFJM1AsRUFBT3dPLEdBQVdoYixHQXdCdEIsT0F0QkEsU0FBUzlQLElBTVAsSUFMQSxJQUFJOThDLEVBQVM2OEIsVUFBVTc4QixPQUNuQjhGLEVBQU91RyxFQUFNck0sR0FDYjBlLEVBQVExZSxFQUNSbThCLEVBQWNpdEMsR0FBVXRzQixHQUVyQnArQixLQUNMNVksRUFBSzRZLEdBQVNtZSxVQUFVbmUsR0FFMUIsSUFBSXduRCxFQUFXbG1FLEVBQVMsR0FBSzhGLEVBQUssS0FBT3EyQixHQUFlcjJCLEVBQUs5RixFQUFTLEtBQU9tOEIsRUFDekUsR0FDQWswQixHQUFldnFELEVBQU1xMkIsR0FHekIsT0FEQW44QixHQUFVa21FLEVBQVFsbUUsUUFDTCtvRSxFQUNKUSxHQUNMM2MsRUFBTXVMLEVBQVN1USxHQUFjNXJCLEVBQVEzZ0IsWUFBYTc4QixFQUNsRHdHLEVBQU1vZ0UsRUFBUzVtRSxFQUFXQSxFQUFXeXBFLEVBQVEvb0UsR0FHMUM0OEIsR0FERzM4QixNQUFRQSxPQUFTc3JELElBQVF0ckQsZ0JBQWdCNjhDLEVBQVdzYyxFQUFPeE0sRUFDcEQzc0QsS0FBTTZGLElBOGVkdWxFLENBQVl6ZSxFQUFNdUwsRUFBUzRRLEdBQzFCNVEsR0FBV3hULEdBQWdDLElBQVh3VCxHQUFxRCtOLEVBQVFsbUUsT0FHOUYwb0UsR0FBYTlyQyxNQUFNdDlCLEVBQVdtckUsR0E5TzNDLFNBQXVCN2QsRUFBTXVMLEVBQVN0TCxFQUFTb1osR0FDN0MsSUFBSWdELEVBdHNLYSxFQXNzS0o5USxFQUNUaUIsRUFBT3dPLEdBQVdoYixHQWtCdEIsT0FoQkEsU0FBUzlQLElBUVAsSUFQQSxJQUFJc3BCLEdBQWEsRUFDYkMsRUFBYXhwQyxVQUFVNzhCLE9BQ3ZCdW1FLEdBQWEsRUFDYkMsRUFBYVAsRUFBU2ptRSxPQUN0QjhGLEVBQU91RyxFQUFNbTZELEVBQWFILEdBQzFCM3BDLEVBQU16OEIsTUFBUUEsT0FBU3NyRCxJQUFRdHJELGdCQUFnQjY4QyxFQUFXc2MsRUFBT3hNLElBRTVEMlosRUFBWUMsR0FDbkIxZ0UsRUFBS3lnRSxHQUFhTixFQUFTTSxHQUU3QixLQUFPRixLQUNMdmdFLEVBQUt5Z0UsS0FBZTFwQyxZQUFZdXBDLEdBRWxDLE9BQU94cEMsR0FBTUYsRUFBSXVzQyxFQUFTcGMsRUFBVTVzRCxLQUFNNkYsSUEwTmpDd2xFLENBQWMxZSxFQUFNdUwsRUFBU3RMLEVBQVNvWixRQUovQyxJQUFJNTFCLEVBaG1CUixTQUFvQnVjLEVBQU11TCxFQUFTdEwsR0FDakMsSUFBSW9jLEVBOTBKYSxFQTgwSko5USxFQUNUaUIsRUFBT3dPLEdBQVdoYixHQU10QixPQUpBLFNBQVM5UCxJQUVQLE9BRFU3OEMsTUFBUUEsT0FBU3NyRCxJQUFRdHJELGdCQUFnQjY4QyxFQUFXc2MsRUFBT3hNLEdBQzNEaHdCLE1BQU1xc0MsRUFBU3BjLEVBQVU1c0QsS0FBTTQ4QixZQTBsQjVCMHVDLENBQVczZSxFQUFNdUwsRUFBU3RMLEdBU3pDLE9BQU82ZCxJQURNL3BFLEVBQU9xaUUsR0FBY3pzRCxJQUNKODVCLEVBQVFvNkIsR0FBVTdkLEVBQU11TCxHQWV4RCxTQUFTcVQsR0FBdUJsVSxFQUFVa0ksRUFBVXI1RCxFQUFLOEcsR0FDdkQsT0FBSXFxRCxJQUFhaDRELEdBQ1ptcUMsR0FBRzZ0QixFQUFVbEcsR0FBWWpyRCxNQUFVM0IsR0FBZUMsS0FBS3dJLEVBQVE5RyxHQUMzRHE1RCxFQUVGbEksRUFpQlQsU0FBU21VLEdBQW9CblUsRUFBVWtJLEVBQVVyNUQsRUFBSzhHLEVBQVF6RixFQUFRNndELEdBT3BFLE9BTkl0ckIsR0FBU3VxQixJQUFhdnFCLEdBQVN5eUIsS0FFakNuSCxFQUFNcHRELElBQUl1MEQsRUFBVWxJLEdBQ3BCb0osR0FBVXBKLEVBQVVrSSxFQUFVbGdFLEVBQVdtc0UsR0FBcUJwVCxHQUM5REEsRUFBYyxPQUFFbUgsSUFFWGxJLEVBWVQsU0FBU29VLEdBQWdCL25FLEdBQ3ZCLE9BQU9xOUQsR0FBY3I5RCxHQUFTckUsRUFBWXFFLEVBZ0I1QyxTQUFTdTZELEdBQVluUixFQUFPNlAsRUFBT3pFLEVBQVNDLEVBQVlzRixFQUFXckYsR0FDakUsSUFBSStGLEVBcGdMbUIsRUFvZ0xQakcsRUFDWndULEVBQVk1ZSxFQUFNL3NELE9BQ2xCaTlELEVBQVlMLEVBQU01OEQsT0FFdEIsR0FBSTJyRSxHQUFhMU8sS0FBZW1CLEdBQWFuQixFQUFZME8sR0FDdkQsT0FBTyxFQUdULElBQUlDLEVBQWF2VCxFQUFNenRELElBQUltaUQsR0FDdkI4UixFQUFheEcsRUFBTXp0RCxJQUFJZ3lELEdBQzNCLEdBQUlnUCxHQUFjL00sRUFDaEIsT0FBTytNLEdBQWNoUCxHQUFTaUMsR0FBYzlSLEVBRTlDLElBQUlydUMsR0FBUyxFQUNUMnhCLEdBQVMsRUFDVGl0QixFQWxoTHFCLEVBa2hMYm5GLEVBQW9DLElBQUluQyxHQUFXMTJELEVBTS9ELElBSkErNEQsRUFBTXB0RCxJQUFJOGhELEVBQU82UCxHQUNqQnZFLEVBQU1wdEQsSUFBSTJ4RCxFQUFPN1AsS0FHUnJ1QyxFQUFRaXRELEdBQVcsQ0FDMUIsSUFBSUUsRUFBVzllLEVBQU1ydUMsR0FDakJxZ0QsRUFBV25DLEVBQU1sK0MsR0FFckIsR0FBSTA1QyxFQUNGLElBQUk0RyxFQUFXWixFQUNYaEcsRUFBVzJHLEVBQVU4TSxFQUFVbnRELEVBQU9rK0MsRUFBTzdQLEVBQU9zTCxHQUNwREQsRUFBV3lULEVBQVU5TSxFQUFVcmdELEVBQU9xdUMsRUFBTzZQLEVBQU92RSxHQUUxRCxHQUFJMkcsSUFBYTEvRCxFQUFXLENBQzFCLEdBQUkwL0QsRUFDRixTQUVGM3VCLEdBQVMsRUFDVCxNQUdGLEdBQUlpdEIsR0FDRixJQUFLcFAsR0FBVTBPLEdBQU8sU0FBU21DLEVBQVU3QixHQUNuQyxJQUFLMU4sR0FBUzhOLEVBQU1KLEtBQ2YyTyxJQUFhOU0sR0FBWXJCLEVBQVVtTyxFQUFVOU0sRUFBVTVHLEVBQVNDLEVBQVlDLElBQy9FLE9BQU9pRixFQUFLLzhELEtBQUsyOEQsTUFFakIsQ0FDTjdzQixHQUFTLEVBQ1QsWUFFRyxHQUNEdzdCLElBQWE5TSxJQUNYckIsRUFBVW1PLEVBQVU5TSxFQUFVNUcsRUFBU0MsRUFBWUMsR0FDcEQsQ0FDTGhvQixHQUFTLEVBQ1QsT0FLSixPQUZBZ29CLEVBQWMsT0FBRXRMLEdBQ2hCc0wsRUFBYyxPQUFFdUUsR0FDVHZzQixFQTBLVCxTQUFTNDNCLEdBQVNyYixHQUNoQixPQUFPK1YsR0FBWUMsR0FBU2hXLEVBQU10dEQsRUFBV3dzRSxJQUFVbGYsRUFBTyxJQVVoRSxTQUFTc04sR0FBV2p0RCxHQUNsQixPQUFPa3ZELEdBQWVsdkQsRUFBUXBILEdBQU1zdkMsSUFXdEMsU0FBUzhrQixHQUFhaHRELEdBQ3BCLE9BQU9rdkQsR0FBZWx2RCxFQUFRK3JELEdBQVFGLElBVXhDLElBQUl5UCxHQUFXeFUsR0FBaUIsU0FBU25ILEdBQ3ZDLE9BQU9tSCxHQUFRbnBELElBQUlnaUQsSUFESWllLEdBV3pCLFNBQVN4QyxHQUFZemIsR0FLbkIsSUFKQSxJQUFJdmMsRUFBVXVjLEVBQUtobEQsS0FBTyxHQUN0Qm1sRCxFQUFRaUgsR0FBVTNqQixHQUNsQnJ3QyxFQUFTd0UsR0FBZUMsS0FBS3V2RCxHQUFXM2pCLEdBQVUwYyxFQUFNL3NELE9BQVMsRUFFOURBLEtBQVUsQ0FDZixJQUFJVyxFQUFPb3NELEVBQU0vc0QsR0FDYityRSxFQUFZcHJFLEVBQUtpc0QsS0FDckIsR0FBaUIsTUFBYm1mLEdBQXFCQSxHQUFhbmYsRUFDcEMsT0FBT2pzRCxFQUFLaUgsS0FHaEIsT0FBT3lvQyxFQVVULFNBQVMrNEIsR0FBVXhjLEdBRWpCLE9BRGFwb0QsR0FBZUMsS0FBS2l3RCxHQUFRLGVBQWlCQSxHQUFTOUgsR0FDckR6d0IsWUFjaEIsU0FBU29sQyxLQUNQLElBQUlseEIsRUFBU3FrQixHQUFPekgsVUFBWUEsR0FFaEMsT0FEQTVjLEVBQVNBLElBQVc0YyxHQUFXMFMsR0FBZXR2QixFQUN2Q3hULFVBQVU3OEIsT0FBU3F3QyxFQUFPeFQsVUFBVSxHQUFJQSxVQUFVLElBQU13VCxFQVdqRSxTQUFTd3FCLEdBQVdubkMsRUFBS3Z0QixHQUN2QixJQWdZaUJ4QyxFQUNiekUsRUFqWUF5QixFQUFPK3lCLEVBQUl1aUMsU0FDZixPQWlZZ0IsV0FEWi8yRCxTQURheUUsRUEvWEF3QyxLQWlZbUIsVUFBUmpILEdBQTRCLFVBQVJBLEdBQTRCLFdBQVJBLEVBQ3JELGNBQVZ5RSxFQUNVLE9BQVZBLEdBbFlEaEQsRUFBbUIsaUJBQVB3RixFQUFrQixTQUFXLFFBQ3pDeEYsRUFBSyt5QixJQVVYLFNBQVMyc0MsR0FBYXB6RCxHQUlwQixJQUhBLElBQUlvakMsRUFBU3hxQyxHQUFLb0gsR0FDZGpOLEVBQVNxd0MsRUFBT3J3QyxPQUViQSxLQUFVLENBQ2YsSUFBSW1HLEVBQU1rcUMsRUFBT3J3QyxHQUNiMkQsRUFBUXNKLEVBQU85RyxHQUVuQmtxQyxFQUFPcndDLEdBQVUsQ0FBQ21HLEVBQUt4QyxFQUFPNjhELEdBQW1CNzhELElBRW5ELE9BQU8wc0MsRUFXVCxTQUFTa2lCLEdBQVV0bEQsRUFBUTlHLEdBQ3pCLElBQUl4QyxFQWx4SlIsU0FBa0JzSixFQUFROUcsR0FDeEIsT0FBaUIsTUFBVjhHLEVBQWlCM04sRUFBWTJOLEVBQU85RyxHQWl4SjdCK0UsQ0FBUytCLEVBQVE5RyxHQUM3QixPQUFPdTVELEdBQWEvN0QsR0FBU0EsRUFBUXJFLEVBcUN2QyxJQUFJNjFDLEdBQWMyZCxHQUErQixTQUFTN2xELEdBQ3hELE9BQWMsTUFBVkEsRUFDSyxJQUVUQSxFQUFTM0ksR0FBTzJJLEdBQ1RzZ0QsR0FBWXVGLEdBQWlCN2xELElBQVMsU0FBU2tzRCxHQUNwRCxPQUFPdG9CLEdBQXFCcHNDLEtBQUt3SSxFQUFRa3NELFFBTlI2UyxHQWlCakNsVCxHQUFnQmhHLEdBQStCLFNBQVM3bEQsR0FFMUQsSUFEQSxJQUFJb2pDLEVBQVMsR0FDTnBqQyxHQUNMNmdELEdBQVV6ZCxFQUFROEUsR0FBV2xvQyxJQUM3QkEsRUFBUytrRCxHQUFhL2tELEdBRXhCLE9BQU9vakMsR0FOOEIyN0IsR0FnQm5DdFQsR0FBUzRELEdBMkViLFNBQVMyUCxHQUFRaC9ELEVBQVFxdUIsRUFBTTR3QyxHQU83QixJQUpBLElBQUl4dEQsR0FBUyxFQUNUMWUsR0FISnM3QixFQUFPMmdDLEdBQVMzZ0MsRUFBTXJ1QixJQUdKak4sT0FDZHF3QyxHQUFTLElBRUozeEIsRUFBUTFlLEdBQVEsQ0FDdkIsSUFBSW1HLEVBQU0rMUQsR0FBTTVnQyxFQUFLNWMsSUFDckIsS0FBTTJ4QixFQUFtQixNQUFWcGpDLEdBQWtCaS9ELEVBQVFqL0QsRUFBUTlHLElBQy9DLE1BRUY4RyxFQUFTQSxFQUFPOUcsR0FFbEIsT0FBSWtxQyxLQUFZM3hCLEdBQVMxZSxFQUNoQnF3QyxLQUVUcndDLEVBQW1CLE1BQVZpTixFQUFpQixFQUFJQSxFQUFPak4sU0FDbEJtc0UsR0FBU25zRSxJQUFXMjJELEdBQVF4d0QsRUFBS25HLEtBQ2pEaUcsR0FBUWdILElBQVdzcEQsR0FBWXRwRCxJQTZCcEMsU0FBUzRyRCxHQUFnQjVyRCxHQUN2QixNQUFxQyxtQkFBdEJBLEVBQU8wMEIsYUFBOEJzK0IsR0FBWWh6RCxHQUU1RCxHQURBOG5ELEdBQVcvQyxHQUFhL2tELElBOEU5QixTQUFTMHVELEdBQWNoNEQsR0FDckIsT0FBT3NDLEdBQVF0QyxJQUFVNHlELEdBQVk1eUQsT0FDaEN1dUQsSUFBb0J2dUQsR0FBU0EsRUFBTXV1RCxLQVcxQyxTQUFTeUUsR0FBUWh6RCxFQUFPM0QsR0FDdEIsSUFBSWQsU0FBY3lFLEVBR2xCLFNBRkEzRCxFQUFtQixNQUFWQSxFQUFpQjYrQixFQUFtQjcrQixLQUdsQyxVQUFSZCxHQUNVLFVBQVJBLEdBQW9CdXBELEdBQVNubEIsS0FBSzMvQixLQUNoQ0EsR0FBUyxHQUFLQSxFQUFRLEdBQUssR0FBS0EsRUFBUTNELEVBYWpELFNBQVNxbkUsR0FBZTFqRSxFQUFPK2EsRUFBT3pSLEdBQ3BDLElBQUs4L0IsR0FBUzkvQixHQUNaLE9BQU8sRUFFVCxJQUFJL04sU0FBY3dmLEVBQ2xCLFNBQVksVUFBUnhmLEVBQ0traEUsR0FBWW56RCxJQUFXMHBELEdBQVFqNEMsRUFBT3pSLEVBQU9qTixRQUNyQyxVQUFSZCxHQUFvQndmLEtBQVN6UixJQUU3Qnc4QixHQUFHeDhCLEVBQU95UixHQUFRL2EsR0FhN0IsU0FBUzQ4RCxHQUFNNThELEVBQU9zSixHQUNwQixHQUFJaEgsR0FBUXRDLEdBQ1YsT0FBTyxFQUVULElBQUl6RSxTQUFjeUUsRUFDbEIsUUFBWSxVQUFSekUsR0FBNEIsVUFBUkEsR0FBNEIsV0FBUkEsR0FDL0IsTUFBVHlFLElBQWlCMjNELEdBQVMzM0QsS0FHdkI0akQsRUFBY2prQixLQUFLMy9CLEtBQVcyakQsRUFBYWhrQixLQUFLMy9CLElBQzFDLE1BQVZzSixHQUFrQnRKLEtBQVNXLEdBQU8ySSxHQXlCdkMsU0FBU3U3RCxHQUFXNWIsR0FDbEIsSUFBSTBiLEVBQVdELEdBQVl6YixHQUN2QmdRLEVBQVFsSSxHQUFPNFQsR0FFbkIsR0FBb0IsbUJBQVQxTCxLQUF5QjBMLEtBQVkxVCxHQUFZcndELFdBQzFELE9BQU8sRUFFVCxHQUFJcW9ELElBQVNnUSxFQUNYLE9BQU8sRUFFVCxJQUFJajhELEVBQU80bkUsR0FBUTNMLEdBQ25CLFFBQVNqOEQsR0FBUWlzRCxJQUFTanNELEVBQUssSUE3UzVCK3lELElBQVlnRixHQUFPLElBQUloRixHQUFTLElBQUkwWSxZQUFZLE1BQVFsbUIsR0FDeER5TixJQUFPK0UsR0FBTyxJQUFJL0UsS0FBUW5PLEdBQzFCclMsSUFBV3VsQixHQUFPdmxCLEdBQVFyVyxZQUFjNm9CLEdBQ3hDaU8sSUFBTzhFLEdBQU8sSUFBSTlFLEtBQVEvTixHQUMxQmdPLElBQVc2RSxHQUFPLElBQUk3RSxLQUFZN04sS0FDckMwUyxHQUFTLFNBQVMvMEQsR0FDaEIsSUFBSTBzQyxFQUFTaXNCLEdBQVczNEQsR0FDcEJ5MUQsRUFBTy9vQixHQUFVcVYsRUFBWS9oRCxFQUFNZytCLFlBQWNyaUMsRUFDakQrc0UsRUFBYWpULEVBQU9sRixHQUFTa0YsR0FBUSxHQUV6QyxHQUFJaVQsRUFDRixPQUFRQSxHQUNOLEtBQUtwWSxHQUFvQixPQUFPL04sRUFDaEMsS0FBS2lPLEdBQWUsT0FBTzNPLEVBQzNCLEtBQUs0TyxHQUFtQixPQUFPek8sRUFDL0IsS0FBSzBPLEdBQWUsT0FBT3hPLEVBQzNCLEtBQUt5TyxHQUFtQixPQUFPdE8sRUFHbkMsT0FBTzNWLElBK1NYLElBQUlpOEIsR0FBYWpiLEdBQWF6VCxHQUFhMnVCLEdBUzNDLFNBQVN0TSxHQUFZdDhELEdBQ25CLElBQUl5MUQsRUFBT3oxRCxHQUFTQSxFQUFNZytCLFlBRzFCLE9BQU9oK0IsS0FGcUIsbUJBQVJ5MUQsR0FBc0JBLEVBQUs3MEQsV0FBYzZzRCxJQWEvRCxTQUFTb1AsR0FBbUI3OEQsR0FDMUIsT0FBT0EsR0FBVUEsSUFBVW9wQyxHQUFTcHBDLEdBWXRDLFNBQVMyOEQsR0FBd0JuNkQsRUFBS3E1RCxHQUNwQyxPQUFPLFNBQVN2eUQsR0FDZCxPQUFjLE1BQVZBLEdBR0dBLEVBQU85RyxLQUFTcTVELElBQ3BCQSxJQUFhbGdFLEdBQWM2RyxLQUFPN0IsR0FBTzJJLEtBc0loRCxTQUFTMjFELEdBQVNoVyxFQUFNOFYsRUFBT242RCxHQUU3QixPQURBbTZELEVBQVF0UCxHQUFVc1AsSUFBVXBqRSxFQUFhc3RELEVBQUs1c0QsT0FBUyxFQUFLMGlFLEVBQU8sR0FDNUQsV0FNTCxJQUxBLElBQUk1OEQsRUFBTysyQixVQUNQbmUsR0FBUyxFQUNUMWUsRUFBU296RCxHQUFVdHRELEVBQUs5RixPQUFTMGlFLEVBQU8sR0FDeEMzVixFQUFRMWdELEVBQU1yTSxLQUVUMGUsRUFBUTFlLEdBQ2Yrc0QsRUFBTXJ1QyxHQUFTNVksRUFBSzQ4RCxFQUFRaGtELEdBRTlCQSxHQUFTLEVBRVQsSUFEQSxJQUFJOHRELEVBQVluZ0UsRUFBTXEyRCxFQUFRLEtBQ3JCaGtELEVBQVFna0QsR0FDZjhKLEVBQVU5dEQsR0FBUzVZLEVBQUs0WSxHQUcxQixPQURBOHRELEVBQVU5SixHQUFTbjZELEVBQVV3a0QsR0FDdEJud0IsR0FBTWd3QixFQUFNM3NELEtBQU11c0UsSUFZN0IsU0FBUy80QixHQUFPeG1DLEVBQVFxdUIsR0FDdEIsT0FBT0EsRUFBS3Q3QixPQUFTLEVBQUlpTixFQUFTK3VELEdBQVEvdUQsRUFBUW0yRCxHQUFVOW5DLEVBQU0sR0FBSSxJQWF4RSxTQUFTa3VDLEdBQVF6YyxFQUFPc1YsR0FLdEIsSUFKQSxJQUFJc0osRUFBWTVlLEVBQU0vc0QsT0FDbEJBLEVBQVNxekQsR0FBVWdQLEVBQVFyaUUsT0FBUTJyRSxHQUNuQ2MsRUFBV3pWLEdBQVVqSyxHQUVsQi9zRCxLQUFVLENBQ2YsSUFBSTBlLEVBQVEyakQsRUFBUXJpRSxHQUNwQitzRCxFQUFNL3NELEdBQVUyMkQsR0FBUWo0QyxFQUFPaXRELEdBQWFjLEVBQVMvdEQsR0FBU3BmLEVBRWhFLE9BQU95dEQsRUFXVCxTQUFTOFQsR0FBUTV6RCxFQUFROUcsR0FDdkIsSUFBWSxnQkFBUkEsR0FBZ0QsbUJBQWhCOEcsRUFBTzlHLEtBSWhDLGFBQVBBLEVBSUosT0FBTzhHLEVBQU85RyxHQWlCaEIsSUFBSW9RLEdBQVVtMkQsR0FBUzFKLElBVW5CNXBCLEdBQWF1WixJQUFpQixTQUFTL0YsRUFBTXlOLEdBQy9DLE9BQU85TyxHQUFLblMsV0FBV3dULEVBQU15TixJQVczQnNJLEdBQWMrSixHQUFTekosSUFZM0IsU0FBU3lILEdBQWdCNXRCLEVBQVM1N0IsRUFBV2kzQyxHQUMzQyxJQUFJM3dELEVBQVUwWixFQUFZLEdBQzFCLE9BQU95aEQsR0FBWTdsQixFQTFickIsU0FBMkJ0MUMsRUFBUW1sRSxHQUNqQyxJQUFJM3NFLEVBQVMyc0UsRUFBUTNzRSxPQUNyQixJQUFLQSxFQUNILE9BQU93SCxFQUVULElBQUlpcEQsRUFBWXp3RCxFQUFTLEVBR3pCLE9BRkEyc0UsRUFBUWxjLElBQWN6d0QsRUFBUyxFQUFJLEtBQU8sSUFBTTJzRSxFQUFRbGMsR0FDeERrYyxFQUFVQSxFQUFRbHNFLEtBQUtULEVBQVMsRUFBSSxLQUFPLEtBQ3BDd0gsRUFBT3ZGLFFBQVE0bEQsR0FBZSx1QkFBeUI4a0IsRUFBVSxVQWtiNUNDLENBQWtCcGxFLEVBcUhoRCxTQUEyQm1sRSxFQUFTeFUsR0FPbEMsT0FOQWhMLEdBQVVuSSxHQUFXLFNBQVM0bEIsR0FDNUIsSUFBSWpuRSxFQUFRLEtBQU9pbkUsRUFBSyxHQUNuQnpTLEVBQVV5UyxFQUFLLEtBQVFuZCxHQUFja2YsRUFBU2hwRSxJQUNqRGdwRSxFQUFRcHNFLEtBQUtvRCxNQUdWZ3BFLEVBQVFsTCxPQTVIdUNvTCxDQXRqQnhELFNBQXdCcmxFLEdBQ3RCLElBQUlnVixFQUFRaFYsRUFBT2dWLE1BQU1zckMsSUFDekIsT0FBT3RyQyxFQUFRQSxFQUFNLEdBQUcvUSxNQUFNczhDLElBQWtCLEdBb2pCd0Ira0IsQ0FBZXRsRSxHQUFTMndELEtBWWxHLFNBQVN1VSxHQUFTOWYsR0FDaEIsSUFBSTFMLEVBQVEsRUFDUjZyQixFQUFhLEVBRWpCLE9BQU8sV0FDTCxJQUFJQyxFQUFRMVosS0FDUmxXLEVBcGlOSyxJQW9pTm1CNHZCLEVBQVFELEdBR3BDLEdBREFBLEVBQWFDLEVBQ1Q1dkIsRUFBWSxHQUNkLEtBQU04RCxHQXppTkUsSUEwaU5OLE9BQU9ya0IsVUFBVSxRQUduQnFrQixFQUFRLEVBRVYsT0FBTzBMLEVBQUtod0IsTUFBTXQ5QixFQUFXdTlCLFlBWWpDLFNBQVNrNkIsR0FBWWhLLEVBQU9wdEQsR0FDMUIsSUFBSStlLEdBQVMsRUFDVDFlLEVBQVMrc0QsRUFBTS9zRCxPQUNmeXdELEVBQVl6d0QsRUFBUyxFQUd6QixJQURBTCxFQUFPQSxJQUFTTCxFQUFZVSxFQUFTTCxJQUM1QitlLEVBQVEvZSxHQUFNLENBQ3JCLElBQUlxbUMsRUFBTzZ3QixHQUFXbjRDLEVBQU8reEMsR0FDekI5c0QsRUFBUW9wRCxFQUFNL21CLEdBRWxCK21CLEVBQU0vbUIsR0FBUSttQixFQUFNcnVDLEdBQ3BCcXVDLEVBQU1ydUMsR0FBUy9hLEVBR2pCLE9BREFvcEQsRUFBTS9zRCxPQUFTTCxFQUNSb3RELEVBVVQsSUF0VE0xYyxHQU9BOXNDLEdBK1NGa2lFLElBdFRFcDFCLEdBQVM0OEIsSUFzVGtCLFNBQVM3ZCxHQUN4QyxJQUFJL2UsRUFBUyxHQU9iLE9BTjZCLEtBQXpCK2UsRUFBTzN2QixXQUFXLElBQ3BCNFEsRUFBTzl2QyxLQUFLLElBRWQ2dUQsRUFBT250RCxRQUFRdWxELElBQVksU0FBU2hyQyxFQUFPdTdDLEVBQVFtVixFQUFPQyxHQUN4RDk4QixFQUFPOXZDLEtBQUsyc0UsRUFBUUMsRUFBVWxyRSxRQUFRaW1ELEdBQWMsTUFBUzZQLEdBQVV2N0MsTUFFbEU2ekIsS0E5VG9CLFNBQVNscUMsR0FJbEMsT0FoME1pQixNQTZ6TWI1QyxHQUFNNUQsTUFDUjRELEdBQU04MUMsUUFFRGx6QyxLQUdMNUMsR0FBUThzQyxHQUFPOXNDLE1BQ1o4c0MsSUFnVVQsU0FBUzZyQixHQUFNdjRELEdBQ2IsR0FBb0IsaUJBQVRBLEdBQXFCMjNELEdBQVMzM0QsR0FDdkMsT0FBT0EsRUFFVCxJQUFJMHNDLEVBQVUxc0MsRUFBUSxHQUN0QixNQUFrQixLQUFWMHNDLEdBQWtCLEVBQUkxc0MsSUFBVSxJQUFhLEtBQU8wc0MsRUFVOUQsU0FBUzZqQixHQUFTdEgsR0FDaEIsR0FBWSxNQUFSQSxFQUFjLENBQ2hCLElBQ0UsT0FBTzBFLEdBQWE3c0QsS0FBS21vRCxHQUN6QixNQUFPM25ELElBQ1QsSUFDRSxPQUFRMm5ELEVBQU8sR0FDZixNQUFPM25ELEtBRVgsTUFBTyxHQTRCVCxTQUFTNnZELEdBQWFoWSxHQUNwQixHQUFJQSxhQUFtQjhYLEdBQ3JCLE9BQU85WCxFQUFRdHVCLFFBRWpCLElBQUk2aEIsRUFBUyxJQUFJd2tCLEdBQWMvWCxFQUFRb1ksWUFBYXBZLEVBQVFzWSxXQUk1RCxPQUhBL2tCLEVBQU84a0IsWUFBYzZCLEdBQVVsYSxFQUFRcVksYUFDdkM5a0IsRUFBT2dsQixVQUFhdlksRUFBUXVZLFVBQzVCaGxCLEVBQU9pbEIsV0FBYXhZLEVBQVF3WSxXQUNyQmpsQixFQXNJVCxJQUFJKzhCLEdBQWEzSyxJQUFTLFNBQVMxVixFQUFPNWxELEdBQ3hDLE9BQU80NUQsR0FBa0JoVSxHQUNyQnVOLEdBQWV2TixFQUFPeU8sR0FBWXIwRCxFQUFRLEVBQUc0NUQsSUFBbUIsSUFDaEUsTUE2QkZzTSxHQUFlNUssSUFBUyxTQUFTMVYsRUFBTzVsRCxHQUMxQyxJQUFJOGxELEVBQVczWixHQUFLbnNDLEdBSXBCLE9BSEk0NUQsR0FBa0I5VCxLQUNwQkEsRUFBVzN0RCxHQUVOeWhFLEdBQWtCaFUsR0FDckJ1TixHQUFldk4sRUFBT3lPLEdBQVlyMEQsRUFBUSxFQUFHNDVELElBQW1CLEdBQU9RLEdBQVl0VSxFQUFVLElBQzdGLE1BMEJGcWdCLEdBQWlCN0ssSUFBUyxTQUFTMVYsRUFBTzVsRCxHQUM1QyxJQUFJeW1ELEVBQWF0YSxHQUFLbnNDLEdBSXRCLE9BSEk0NUQsR0FBa0JuVCxLQUNwQkEsRUFBYXR1RCxHQUVSeWhFLEdBQWtCaFUsR0FDckJ1TixHQUFldk4sRUFBT3lPLEdBQVlyMEQsRUFBUSxFQUFHNDVELElBQW1CLEdBQU96aEUsRUFBV3N1RCxHQUNsRixNQXNPTixTQUFTMmYsR0FBVXhnQixFQUFPTyxFQUFXamdCLEdBQ25DLElBQUlydEMsRUFBa0IsTUFBVCtzRCxFQUFnQixFQUFJQSxFQUFNL3NELE9BQ3ZDLElBQUtBLEVBQ0gsT0FBUSxFQUVWLElBQUkwZSxFQUFxQixNQUFiMnVCLEVBQW9CLEVBQUlxSyxHQUFVckssR0FJOUMsT0FISTN1QixFQUFRLElBQ1ZBLEVBQVEwMEMsR0FBVXB6RCxFQUFTMGUsRUFBTyxJQUU3Qjh2QyxHQUFjekIsRUFBT3dVLEdBQVlqVSxFQUFXLEdBQUk1dUMsR0FzQ3pELFNBQVM4dUQsR0FBY3pnQixFQUFPTyxFQUFXamdCLEdBQ3ZDLElBQUlydEMsRUFBa0IsTUFBVCtzRCxFQUFnQixFQUFJQSxFQUFNL3NELE9BQ3ZDLElBQUtBLEVBQ0gsT0FBUSxFQUVWLElBQUkwZSxFQUFRMWUsRUFBUyxFQU9yQixPQU5JcXRDLElBQWMvdEMsSUFDaEJvZixFQUFRZzVCLEdBQVVySyxHQUNsQjN1QixFQUFRMnVCLEVBQVksRUFDaEIrbEIsR0FBVXB6RCxFQUFTMGUsRUFBTyxHQUMxQjIwQyxHQUFVMzBDLEVBQU8xZSxFQUFTLElBRXpCd3VELEdBQWN6QixFQUFPd1UsR0FBWWpVLEVBQVcsR0FBSTV1QyxHQUFPLEdBaUJoRSxTQUFTb3RELEdBQVEvZSxHQUVmLE9BRHNCLE1BQVRBLEdBQW9CQSxFQUFNL3NELE9BQ3ZCdzdELEdBQVl6TyxFQUFPLEdBQUssR0FnRzFDLFNBQVMxWixHQUFLMFosR0FDWixPQUFRQSxHQUFTQSxFQUFNL3NELE9BQVUrc0QsRUFBTSxHQUFLenRELEVBMEU5QyxJQUFJbXVFLEdBQWVoTCxJQUFTLFNBQVN6RixHQUNuQyxJQUFJMFEsRUFBUzdmLEdBQVNtUCxFQUFRdUksSUFDOUIsT0FBUW1JLEVBQU8xdEUsUUFBVTB0RSxFQUFPLEtBQU8xUSxFQUFPLEdBQzFDRCxHQUFpQjJRLEdBQ2pCLE1BMEJGQyxHQUFpQmxMLElBQVMsU0FBU3pGLEdBQ3JDLElBQUkvUCxFQUFXM1osR0FBSzBwQixHQUNoQjBRLEVBQVM3ZixHQUFTbVAsRUFBUXVJLElBTzlCLE9BTEl0WSxJQUFhM1osR0FBS282QixHQUNwQnpnQixFQUFXM3RELEVBRVhvdUUsRUFBT3hwQyxNQUVEd3BDLEVBQU8xdEUsUUFBVTB0RSxFQUFPLEtBQU8xUSxFQUFPLEdBQzFDRCxHQUFpQjJRLEVBQVFuTSxHQUFZdFUsRUFBVSxJQUMvQyxNQXdCRjJnQixHQUFtQm5MLElBQVMsU0FBU3pGLEdBQ3ZDLElBQUlwUCxFQUFhdGEsR0FBSzBwQixHQUNsQjBRLEVBQVM3ZixHQUFTbVAsRUFBUXVJLElBTTlCLE9BSkEzWCxFQUFrQyxtQkFBZEEsRUFBMkJBLEVBQWF0dUQsSUFFMURvdUUsRUFBT3hwQyxNQUVEd3BDLEVBQU8xdEUsUUFBVTB0RSxFQUFPLEtBQU8xUSxFQUFPLEdBQzFDRCxHQUFpQjJRLEVBQVFwdUUsRUFBV3N1RCxHQUNwQyxNQW9DTixTQUFTdGEsR0FBS3laLEdBQ1osSUFBSS9zRCxFQUFrQixNQUFUK3NELEVBQWdCLEVBQUlBLEVBQU0vc0QsT0FDdkMsT0FBT0EsRUFBUytzRCxFQUFNL3NELEVBQVMsR0FBS1YsRUF1RnRDLElBQUl1dUUsR0FBT3BMLEdBQVNxTCxJQXNCcEIsU0FBU0EsR0FBUS9nQixFQUFPNWxELEdBQ3RCLE9BQVE0bEQsR0FBU0EsRUFBTS9zRCxRQUFVbUgsR0FBVUEsRUFBT25ILE9BQzlDbWlFLEdBQVlwVixFQUFPNWxELEdBQ25CNGxELEVBcUZOLElBQUlnaEIsR0FBUzlGLElBQVMsU0FBU2xiLEVBQU9zVixHQUNwQyxJQUFJcmlFLEVBQWtCLE1BQVQrc0QsRUFBZ0IsRUFBSUEsRUFBTS9zRCxPQUNuQ3F3QyxFQUFTdW5CLEdBQU83SyxFQUFPc1YsR0FNM0IsT0FKQUQsR0FBV3JWLEVBQU9jLEdBQVN3VSxHQUFTLFNBQVMzakQsR0FDM0MsT0FBT2k0QyxHQUFRajRDLEVBQU8xZSxJQUFXMGUsRUFBUUEsS0FDeEMraUQsS0FBS0ssS0FFRHp4QixLQTJFVCxTQUFTM0osR0FBUXFtQixHQUNmLE9BQWdCLE1BQVRBLEVBQWdCQSxFQUFRMEcsR0FBY2h2RCxLQUFLc29ELEdBa2FwRCxJQUFJaWhCLEdBQVF2TCxJQUFTLFNBQVN6RixHQUM1QixPQUFPeUgsR0FBU2pKLEdBQVl3QixFQUFRLEVBQUcrRCxJQUFtQixPQTBCeERrTixHQUFVeEwsSUFBUyxTQUFTekYsR0FDOUIsSUFBSS9QLEVBQVczWixHQUFLMHBCLEdBSXBCLE9BSEkrRCxHQUFrQjlULEtBQ3BCQSxFQUFXM3RELEdBRU5tbEUsR0FBU2pKLEdBQVl3QixFQUFRLEVBQUcrRCxJQUFtQixHQUFPUSxHQUFZdFUsRUFBVSxPQXdCckZpaEIsR0FBWXpMLElBQVMsU0FBU3pGLEdBQ2hDLElBQUlwUCxFQUFhdGEsR0FBSzBwQixHQUV0QixPQURBcFAsRUFBa0MsbUJBQWRBLEVBQTJCQSxFQUFhdHVELEVBQ3JEbWxFLEdBQVNqSixHQUFZd0IsRUFBUSxFQUFHK0QsSUFBbUIsR0FBT3poRSxFQUFXc3VELE1BZ0c5RSxTQUFTdWdCLEdBQU1waEIsR0FDYixJQUFNQSxJQUFTQSxFQUFNL3NELE9BQ25CLE1BQU8sR0FFVCxJQUFJQSxFQUFTLEVBT2IsT0FOQStzRCxFQUFRUSxHQUFZUixHQUFPLFNBQVNxaEIsR0FDbEMsR0FBSXJOLEdBQWtCcU4sR0FFcEIsT0FEQXB1RSxFQUFTb3pELEdBQVVnYixFQUFNcHVFLE9BQVFBLElBQzFCLEtBR0prdkQsR0FBVWx2RCxHQUFRLFNBQVMwZSxHQUNoQyxPQUFPbXZDLEdBQVNkLEVBQU9xQixHQUFhMXZDLE9BeUJ4QyxTQUFTMnZELEdBQVV0aEIsRUFBT0UsR0FDeEIsSUFBTUYsSUFBU0EsRUFBTS9zRCxPQUNuQixNQUFPLEdBRVQsSUFBSXF3QyxFQUFTODlCLEdBQU1waEIsR0FDbkIsT0FBZ0IsTUFBWkUsRUFDSzVjLEVBRUZ3ZCxHQUFTeGQsR0FBUSxTQUFTKzlCLEdBQy9CLE9BQU94eEMsR0FBTXF3QixFQUFVM3RELEVBQVc4dUUsTUF3QnRDLElBQUlFLEdBQVU3TCxJQUFTLFNBQVMxVixFQUFPNWxELEdBQ3JDLE9BQU80NUQsR0FBa0JoVSxHQUNyQnVOLEdBQWV2TixFQUFPNWxELEdBQ3RCLE1BcUJGb25FLEdBQU05TCxJQUFTLFNBQVN6RixHQUMxQixPQUFPbUksR0FBUTVYLEdBQVl5UCxFQUFRK0QsUUEwQmpDeU4sR0FBUS9MLElBQVMsU0FBU3pGLEdBQzVCLElBQUkvUCxFQUFXM1osR0FBSzBwQixHQUlwQixPQUhJK0QsR0FBa0I5VCxLQUNwQkEsRUFBVzN0RCxHQUVONmxFLEdBQVE1WCxHQUFZeVAsRUFBUStELElBQW9CUSxHQUFZdFUsRUFBVSxPQXdCM0V3aEIsR0FBVWhNLElBQVMsU0FBU3pGLEdBQzlCLElBQUlwUCxFQUFhdGEsR0FBSzBwQixHQUV0QixPQURBcFAsRUFBa0MsbUJBQWRBLEVBQTJCQSxFQUFhdHVELEVBQ3JENmxFLEdBQVE1WCxHQUFZeVAsRUFBUStELElBQW9CemhFLEVBQVdzdUQsTUFtQmhFOGdCLEdBQU1qTSxHQUFTMEwsSUE2RGZRLEdBQVVsTSxJQUFTLFNBQVN6RixHQUM5QixJQUFJaDlELEVBQVNnOUQsRUFBT2g5RCxPQUNoQml0RCxFQUFXanRELEVBQVMsRUFBSWc5RCxFQUFPaDlELEVBQVMsR0FBS1YsRUFHakQsT0FEQTJ0RCxFQUE4QixtQkFBWkEsR0FBMEIrUCxFQUFPOTRCLE1BQU8rb0IsR0FBWTN0RCxFQUMvRCt1RSxHQUFVclIsRUFBUS9QLE1Ba0MzQixTQUFTeFIsR0FBTTkzQyxHQUNiLElBQUkwc0MsRUFBU3FrQixHQUFPL3dELEdBRXBCLE9BREEwc0MsRUFBTytrQixXQUFZLEVBQ1ova0IsRUFzRFQsU0FBUyszQixHQUFLemtFLEVBQU9pckUsR0FDbkIsT0FBT0EsRUFBWWpyRSxHQW1CckIsSUFBSWtyRSxHQUFZNUcsSUFBUyxTQUFTcFEsR0FDaEMsSUFBSTczRCxFQUFTNjNELEVBQU03M0QsT0FDZjBpRSxFQUFRMWlFLEVBQVM2M0QsRUFBTSxHQUFLLEVBQzVCbDBELEVBQVExRCxLQUFLaTFELFlBQ2IwWixFQUFjLFNBQVMzaEUsR0FBVSxPQUFPMnFELEdBQU8zcUQsRUFBUTRxRCxJQUUzRCxRQUFJNzNELEVBQVMsR0FBS0MsS0FBS2sxRCxZQUFZbjFELFNBQzdCMkQsYUFBaUJpeEQsSUFBaUIrQixHQUFRK0wsS0FHaEQvK0QsRUFBUUEsRUFBTXVDLE1BQU13OEQsR0FBUUEsR0FBUzFpRSxFQUFTLEVBQUksS0FDNUNtMUQsWUFBWTUwRCxLQUFLLENBQ3JCLEtBQVE2bkUsR0FDUixLQUFRLENBQUN3RyxHQUNULFFBQVd0dkUsSUFFTixJQUFJdTFELEdBQWNseEQsRUFBTzFELEtBQUttMUQsV0FBV2dULE1BQUssU0FBU3JiLEdBSTVELE9BSEkvc0QsSUFBVytzRCxFQUFNL3NELFFBQ25CK3NELEVBQU14c0QsS0FBS2pCLEdBRU55dEQsTUFaQTlzRCxLQUFLbW9FLEtBQUt3RyxNQStQakJFLEdBQVU5SCxJQUFpQixTQUFTMzJCLEVBQVExc0MsRUFBT3dDLEdBQ2pEM0IsR0FBZUMsS0FBSzRyQyxFQUFRbHFDLEtBQzVCa3FDLEVBQU9scUMsR0FFVGl4RCxHQUFnQi9tQixFQUFRbHFDLEVBQUssTUF1STdCaEUsR0FBTzJsRSxHQUFXeUYsSUFxQmxCd0IsR0FBV2pILEdBQVcwRixJQTJHMUIsU0FBU2hvRSxHQUFROG9ELEVBQVlyQixHQUUzQixPQURXaG5ELEdBQVFxb0QsR0FBY25CLEdBQVlzSyxJQUNqQ25KLEVBQVlpVCxHQUFZdFUsRUFBVSxJQXVCaEQsU0FBUytoQixHQUFhMWdCLEVBQVlyQixHQUVoQyxPQURXaG5ELEdBQVFxb0QsR0FBY2xCLEdBQWlCOE4sSUFDdEM1TSxFQUFZaVQsR0FBWXRVLEVBQVUsSUEwQmhELElBQUlnaUIsR0FBVWpJLElBQWlCLFNBQVMzMkIsRUFBUTFzQyxFQUFPd0MsR0FDakQzQixHQUFlQyxLQUFLNHJDLEVBQVFscUMsR0FDOUJrcUMsRUFBT2xxQyxHQUFLNUYsS0FBS29ELEdBRWpCeXpELEdBQWdCL21CLEVBQVFscUMsRUFBSyxDQUFDeEMsT0FzRTlCdXJFLEdBQVl6TSxJQUFTLFNBQVNuVSxFQUFZaHpCLEVBQU14MUIsR0FDbEQsSUFBSTRZLEdBQVMsRUFDVGk2QyxFQUF3QixtQkFBUnI5QixFQUNoQitVLEVBQVMrdkIsR0FBWTlSLEdBQWNqaUQsRUFBTWlpRCxFQUFXdHVELFFBQVUsR0FLbEUsT0FIQXkzRCxHQUFTbkosR0FBWSxTQUFTM3FELEdBQzVCMHNDLElBQVMzeEIsR0FBU2k2QyxFQUFTLzdCLEdBQU10QixFQUFNMzNCLEVBQU9tQyxHQUFReTNELEdBQVc1NUQsRUFBTzIzQixFQUFNeDFCLE1BRXpFdXFDLEtBK0JMOCtCLEdBQVFuSSxJQUFpQixTQUFTMzJCLEVBQVExc0MsRUFBT3dDLEdBQ25EaXhELEdBQWdCL21CLEVBQVFscUMsRUFBS3hDLE1BNkMvQixTQUFTK3ZCLEdBQUk0NkIsRUFBWXJCLEdBRXZCLE9BRFdobkQsR0FBUXFvRCxHQUFjVCxHQUFXc1MsSUFDaEM3UixFQUFZaVQsR0FBWXRVLEVBQVUsSUFrRmhELElBQUltaUIsR0FBWXBJLElBQWlCLFNBQVMzMkIsRUFBUTFzQyxFQUFPd0MsR0FDdkRrcUMsRUFBT2xxQyxFQUFNLEVBQUksR0FBRzVGLEtBQUtvRCxNQUN4QixXQUFhLE1BQU8sQ0FBQyxHQUFJLE9BbVN4QjByRSxHQUFTNU0sSUFBUyxTQUFTblUsRUFBWStTLEdBQ3pDLEdBQWtCLE1BQWQvUyxFQUNGLE1BQU8sR0FFVCxJQUFJdHVELEVBQVNxaEUsRUFBVXJoRSxPQU12QixPQUxJQSxFQUFTLEdBQUtxbkUsR0FBZS9ZLEVBQVkrUyxFQUFVLEdBQUlBLEVBQVUsSUFDbkVBLEVBQVksR0FDSHJoRSxFQUFTLEdBQUtxbkUsR0FBZWhHLEVBQVUsR0FBSUEsRUFBVSxHQUFJQSxFQUFVLE1BQzVFQSxFQUFZLENBQUNBLEVBQVUsS0FFbEJELEdBQVk5UyxFQUFZa04sR0FBWTZGLEVBQVcsR0FBSSxPQXFCeER4b0IsR0FBTTZaLElBQVUsV0FDbEIsT0FBT25ILEdBQUswRixLQUFLcFksT0EwRG5CLFNBQVNpd0IsR0FBSWxjLEVBQU0xdEIsRUFBR2tvQyxHQUdwQixPQUZBbG9DLEVBQUlrb0MsRUFBUTluRSxFQUFZNC9CLEVBQ3hCQSxFQUFLMHRCLEdBQWEsTUFBTDF0QixFQUFhMHRCLEVBQUs1c0QsT0FBU2svQixFQUNqQzhyQyxHQUFXcGUsRUFBTWhJLEVBQWV0bEQsRUFBV0EsRUFBV0EsRUFBV0EsRUFBVzQvQixHQW9CckYsU0FBU293QyxHQUFPcHdDLEVBQUcwdEIsR0FDakIsSUFBSXZjLEVBQ0osR0FBbUIsbUJBQVJ1YyxFQUNULE1BQU0sSUFBSXR2QixHQUFVa25CLEdBR3RCLE9BREF0bEIsRUFBSXdZLEdBQVV4WSxHQUNQLFdBT0wsUUFOTUEsRUFBSSxJQUNSbVIsRUFBU3VjLEVBQUtod0IsTUFBTTM4QixLQUFNNDhCLFlBRXhCcUMsR0FBSyxJQUNQMHRCLEVBQU90dEQsR0FFRit3QyxHQXVDWCxJQUFJcnJDLEdBQU95OUQsSUFBUyxTQUFTN1YsRUFBTUMsRUFBU29aLEdBQzFDLElBQUk5TixFQXY0VGEsRUF3NFRqQixHQUFJOE4sRUFBU2ptRSxPQUFRLENBQ25CLElBQUlrbUUsRUFBVTdWLEdBQWU0VixFQUFVbUQsR0FBVXBrRSxLQUNqRG16RCxHQUFXeFQsRUFFYixPQUFPcW1CLEdBQVdwZSxFQUFNdUwsRUFBU3RMLEVBQVNvWixFQUFVQyxNQWdEbERxSixHQUFVOU0sSUFBUyxTQUFTeDFELEVBQVE5RyxFQUFLOC9ELEdBQzNDLElBQUk5TixFQUFVcVgsRUFDZCxHQUFJdkosRUFBU2ptRSxPQUFRLENBQ25CLElBQUlrbUUsRUFBVTdWLEdBQWU0VixFQUFVbUQsR0FBVW1HLEtBQ2pEcFgsR0FBV3hULEVBRWIsT0FBT3FtQixHQUFXN2tFLEVBQUtneUQsRUFBU2xyRCxFQUFRZzVELEVBQVVDLE1Bc0pwRCxTQUFTdDZELEdBQVNnaEQsRUFBTXlOLEVBQU03ekQsR0FDNUIsSUFBSWlwRSxFQUNBQyxFQUNBNWpFLEVBQ0F1a0MsRUFDQXMvQixFQUNBQyxFQUNBQyxFQUFpQixFQUNqQkMsR0FBVSxFQUNWQyxHQUFTLEVBQ1R2SSxHQUFXLEVBRWYsR0FBbUIsbUJBQVI1YSxFQUNULE1BQU0sSUFBSXR2QixHQUFVa25CLEdBVXRCLFNBQVN3ckIsRUFBV0MsR0FDbEIsSUFBSW5xRSxFQUFPMnBFLEVBQ1A1aUIsRUFBVTZpQixFQUtkLE9BSEFELEVBQVdDLEVBQVdwd0UsRUFDdEJ1d0UsRUFBaUJJLEVBQ2pCNS9CLEVBQVN1YyxFQUFLaHdCLE1BQU1pd0IsRUFBUy9tRCxHQUkvQixTQUFTb3FFLEVBQVlELEdBTW5CLE9BSkFKLEVBQWlCSSxFQUVqQk4sRUFBVXYyQixHQUFXKzJCLEVBQWM5VixHQUU1QnlWLEVBQVVFLEVBQVdDLEdBQVE1L0IsRUFhdEMsU0FBUysvQixFQUFhSCxHQUNwQixJQUFJSSxFQUFvQkosRUFBT0wsRUFNL0IsT0FBUUEsSUFBaUJ0d0UsR0FBYyt3RSxHQUFxQmhXLEdBQ3pEZ1csRUFBb0IsR0FBT04sR0FOSkUsRUFBT0osR0FNOEIvakUsRUFHakUsU0FBU3FrRSxJQUNQLElBQUlGLEVBQU9wM0IsS0FDWCxHQUFJdTNCLEVBQWFILEdBQ2YsT0FBT0ssRUFBYUwsR0FHdEJOLEVBQVV2MkIsR0FBVysyQixFQTNCdkIsU0FBdUJGLEdBQ3JCLElBRUlNLEVBQWNsVyxHQUZNNFYsRUFBT0wsR0FJL0IsT0FBT0csRUFDSDFjLEdBQVVrZCxFQUFhemtFLEdBSkRta0UsRUFBT0osSUFLN0JVLEVBb0IrQkMsQ0FBY1AsSUFHbkQsU0FBU0ssRUFBYUwsR0FLcEIsT0FKQU4sRUFBVXJ3RSxFQUlOa29FLEdBQVlpSSxFQUNQTyxFQUFXQyxJQUVwQlIsRUFBV0MsRUFBV3B3RSxFQUNmK3dDLEdBZVQsU0FBU29nQyxJQUNQLElBQUlSLEVBQU9wM0IsS0FDUDYzQixFQUFhTixFQUFhSCxHQU05QixHQUpBUixFQUFXNXlDLFVBQ1g2eUMsRUFBV3p2RSxLQUNYMnZFLEVBQWVLLEVBRVhTLEVBQVksQ0FDZCxHQUFJZixJQUFZcndFLEVBQ2QsT0FBTzR3RSxFQUFZTixHQUVyQixHQUFJRyxFQUlGLE9BRkF0ZCxHQUFha2QsR0FDYkEsRUFBVXYyQixHQUFXKzJCLEVBQWM5VixHQUM1QjJWLEVBQVdKLEdBTXRCLE9BSElELElBQVlyd0UsSUFDZHF3RSxFQUFVdjJCLEdBQVcrMkIsRUFBYzlWLElBRTlCaHFCLEVBSVQsT0EzR0FncUIsRUFBT2h1QixHQUFTZ3VCLElBQVMsRUFDckJ0dEIsR0FBU3ZtQyxLQUNYc3BFLElBQVl0cEUsRUFBUXNwRSxRQUVwQmhrRSxHQURBaWtFLEVBQVMsWUFBYXZwRSxHQUNINHNELEdBQVUvbUIsR0FBUzdsQyxFQUFRc0YsVUFBWSxFQUFHdXVELEdBQVF2dUQsRUFDckUwN0QsRUFBVyxhQUFjaGhFLElBQVlBLEVBQVFnaEUsU0FBV0EsR0FvRzFEaUosRUFBVUUsT0FwQ1YsV0FDTWhCLElBQVlyd0UsR0FDZG16RCxHQUFha2QsR0FFZkUsRUFBaUIsRUFDakJKLEVBQVdHLEVBQWVGLEVBQVdDLEVBQVVyd0UsR0FnQ2pEbXhFLEVBQVVqOUIsTUE3QlYsV0FDRSxPQUFPbThCLElBQVlyd0UsRUFBWSt3QyxFQUFTaWdDLEVBQWF6M0IsT0E2QmhENDNCLEVBcUJULElBQUkzNEIsR0FBUTJxQixJQUFTLFNBQVM3VixFQUFNOW1ELEdBQ2xDLE9BQU9zMEQsR0FBVXhOLEVBQU0sRUFBRzltRCxNQXNCeEI4cUUsR0FBUW5PLElBQVMsU0FBUzdWLEVBQU15TixFQUFNdjBELEdBQ3hDLE9BQU9zMEQsR0FBVXhOLEVBQU12Z0IsR0FBU2d1QixJQUFTLEVBQUd2MEQsTUFxRTlDLFNBQVNtbkUsR0FBUXJnQixFQUFNaWtCLEdBQ3JCLEdBQW1CLG1CQUFSamtCLEdBQW1DLE1BQVppa0IsR0FBdUMsbUJBQVpBLEVBQzNELE1BQU0sSUFBSXZ6QyxHQUFVa25CLEdBRXRCLElBQUlzc0IsRUFBVyxXQUNiLElBQUlockUsRUFBTysyQixVQUNQMTJCLEVBQU0wcUUsRUFBV0EsRUFBU2owQyxNQUFNMzhCLEtBQU02RixHQUFRQSxFQUFLLEdBQ25EdkMsRUFBUXV0RSxFQUFTdnRFLE1BRXJCLEdBQUlBLEVBQU1pckMsSUFBSXJvQyxHQUNaLE9BQU81QyxFQUFNcUgsSUFBSXpFLEdBRW5CLElBQUlrcUMsRUFBU3VjLEVBQUtod0IsTUFBTTM4QixLQUFNNkYsR0FFOUIsT0FEQWdyRSxFQUFTdnRFLE1BQVFBLEVBQU0wSCxJQUFJOUUsRUFBS2txQyxJQUFXOXNDLEVBQ3BDOHNDLEdBR1QsT0FEQXlnQyxFQUFTdnRFLE1BQVEsSUFBSzBwRSxHQUFROEQsT0FBU2hiLElBQ2hDK2EsRUEwQlQsU0FBU0UsR0FBTzFqQixHQUNkLEdBQXdCLG1CQUFiQSxFQUNULE1BQU0sSUFBSWh3QixHQUFVa25CLEdBRXRCLE9BQU8sV0FDTCxJQUFJMStDLEVBQU8rMkIsVUFDWCxPQUFRLzJCLEVBQUs5RixRQUNYLEtBQUssRUFBRyxPQUFRc3RELEVBQVU3b0QsS0FBS3hFLE1BQy9CLEtBQUssRUFBRyxPQUFRcXRELEVBQVU3b0QsS0FBS3hFLEtBQU02RixFQUFLLElBQzFDLEtBQUssRUFBRyxPQUFRd25ELEVBQVU3b0QsS0FBS3hFLEtBQU02RixFQUFLLEdBQUlBLEVBQUssSUFDbkQsS0FBSyxFQUFHLE9BQVF3bkQsRUFBVTdvRCxLQUFLeEUsS0FBTTZGLEVBQUssR0FBSUEsRUFBSyxHQUFJQSxFQUFLLElBRTlELE9BQVF3bkQsRUFBVTF3QixNQUFNMzhCLEtBQU02RixJQWxDbENtbkUsR0FBUThELE1BQVFoYixHQTJGaEIsSUFBSWtiLEdBQVd2TCxJQUFTLFNBQVM5WSxFQUFNc2tCLEdBS3JDLElBQUlDLEdBSkpELEVBQW1DLEdBQXJCQSxFQUFXbHhFLFFBQWVpRyxHQUFRaXJFLEVBQVcsSUFDdkRyakIsR0FBU3FqQixFQUFXLEdBQUk1aEIsR0FBVWlTLE9BQ2xDMVQsR0FBUzJOLEdBQVkwVixFQUFZLEdBQUk1aEIsR0FBVWlTLFFBRXRCdmhFLE9BQzdCLE9BQU95aUUsSUFBUyxTQUFTMzhELEdBSXZCLElBSEEsSUFBSTRZLEdBQVMsRUFDVDFlLEVBQVNxekQsR0FBVXZ0RCxFQUFLOUYsT0FBUW14RSxLQUUzQnp5RCxFQUFRMWUsR0FDZjhGLEVBQUs0WSxHQUFTd3lELEVBQVd4eUQsR0FBT2phLEtBQUt4RSxLQUFNNkYsRUFBSzRZLElBRWxELE9BQU9rZSxHQUFNZ3dCLEVBQU0zc0QsS0FBTTZGLFNBcUN6QnNyRSxHQUFVM08sSUFBUyxTQUFTN1YsRUFBTXFaLEdBQ3BDLElBQUlDLEVBQVU3VixHQUFlNFYsRUFBVW1ELEdBQVVnSSxLQUNqRCxPQUFPcEcsR0FBV3BlLEVBQU1qSSxFQUFtQnJsRCxFQUFXMm1FLEVBQVVDLE1BbUM5RG1MLEdBQWU1TyxJQUFTLFNBQVM3VixFQUFNcVosR0FDekMsSUFBSUMsRUFBVTdWLEdBQWU0VixFQUFVbUQsR0FBVWlJLEtBQ2pELE9BQU9yRyxHQUFXcGUsRUF2Z1ZRLEdBdWdWdUJ0dEQsRUFBVzJtRSxFQUFVQyxNQXlCcEVvTCxHQUFRckosSUFBUyxTQUFTcmIsRUFBTXlWLEdBQ2xDLE9BQU8ySSxHQUFXcGUsRUEvaFZBLElBK2hWdUJ0dEQsRUFBV0EsRUFBV0EsRUFBVytpRSxNQWlhNUUsU0FBUzU0QixHQUFHOWxDLEVBQU9pNUQsR0FDakIsT0FBT2o1RCxJQUFVaTVELEdBQVVqNUQsR0FBVUEsR0FBU2k1RCxHQUFVQSxFQTBCMUQsSUFBSS8yQixHQUFLeWtDLEdBQTBCM04sSUF5Qi9COXlCLEdBQU15Z0MsSUFBMEIsU0FBUzNtRSxFQUFPaTVELEdBQ2xELE9BQU9qNUQsR0FBU2k1RCxLQXFCZHJHLEdBQWNpSCxHQUFnQixXQUFhLE9BQU8zZ0MsVUFBcEIsSUFBc0MyZ0MsR0FBa0IsU0FBUzc1RCxHQUNqRyxPQUFPZ3hELEdBQWFoeEQsSUFBVWEsR0FBZUMsS0FBS2QsRUFBTyxZQUN0RGt0QyxHQUFxQnBzQyxLQUFLZCxFQUFPLFdBMEJsQ3NDLEdBQVVvRyxFQUFNcEcsUUFtQmhCZ21ELEdBQWdCRCxHQUFvQnNELEdBQVV0RCxJQTc1UGxELFNBQTJCcm9ELEdBQ3pCLE9BQU9neEQsR0FBYWh4RCxJQUFVMjRELEdBQVczNEQsSUFBVXNpRCxHQXU3UHJELFNBQVNtYSxHQUFZejhELEdBQ25CLE9BQWdCLE1BQVRBLEdBQWlCd29FLEdBQVN4b0UsRUFBTTNELFVBQVk0OUMsR0FBV2o2QyxHQTRCaEUsU0FBU285RCxHQUFrQnA5RCxHQUN6QixPQUFPZ3hELEdBQWFoeEQsSUFBVXk4RCxHQUFZejhELEdBMEM1QyxJQUFJcXZELEdBQVdELElBQWtCd1osR0FtQjdCcGdCLEdBQVNELEdBQWFvRCxHQUFVcEQsSUF4Z1FwQyxTQUFvQnZvRCxHQUNsQixPQUFPZ3hELEdBQWFoeEQsSUFBVTI0RCxHQUFXMzRELElBQVV5aEQsR0ErcVFyRCxTQUFTbXNCLEdBQVE1dEUsR0FDZixJQUFLZ3hELEdBQWFoeEQsR0FDaEIsT0FBTyxFQUVULElBQUl1ekMsRUFBTW9sQixHQUFXMzRELEdBQ3JCLE9BQU91ekMsR0FBT21PLEdBOXlXRix5QkE4eVdjbk8sR0FDQyxpQkFBakJ2ekMsRUFBTXhFLFNBQTRDLGlCQUFkd0UsRUFBTWlFLE9BQXFCbzVELEdBQWNyOUQsR0FrRHpGLFNBQVNpNkMsR0FBV2o2QyxHQUNsQixJQUFLb3BDLEdBQVNwcEMsR0FDWixPQUFPLEVBSVQsSUFBSXV6QyxFQUFNb2xCLEdBQVczNEQsR0FDckIsT0FBT3V6QyxHQUFPb08sR0FBV3BPLEdBQU9xTyxHQTMyV3JCLDBCQTIyVytCck8sR0EvMVcvQixrQkErMVdrREEsRUE2Qi9ELFNBQVM3TixHQUFVMWxDLEdBQ2pCLE1BQXVCLGlCQUFUQSxHQUFxQkEsR0FBUyt6QyxHQUFVL3pDLEdBNkJ4RCxTQUFTd29FLEdBQVN4b0UsR0FDaEIsTUFBdUIsaUJBQVRBLEdBQ1pBLEdBQVMsR0FBS0EsRUFBUSxHQUFLLEdBQUtBLEdBQVNrN0IsRUE0QjdDLFNBQVNrTyxHQUFTcHBDLEdBQ2hCLElBQUl6RSxTQUFjeUUsRUFDbEIsT0FBZ0IsTUFBVEEsSUFBMEIsVUFBUnpFLEdBQTRCLFlBQVJBLEdBMkIvQyxTQUFTeTFELEdBQWFoeEQsR0FDcEIsT0FBZ0IsTUFBVEEsR0FBaUMsaUJBQVRBLEVBb0JqQyxJQUFJMG9ELEdBQVFELEdBQVlrRCxHQUFVbEQsSUE1eFFsQyxTQUFtQnpvRCxHQUNqQixPQUFPZ3hELEdBQWFoeEQsSUFBVSswRCxHQUFPLzBELElBQVU2aEQsR0E2K1FqRCxTQUFTZ3NCLEdBQVM3dEUsR0FDaEIsTUFBdUIsaUJBQVRBLEdBQ1hneEQsR0FBYWh4RCxJQUFVMjRELEdBQVczNEQsSUFBVThoRCxFQStCakQsU0FBU3ViLEdBQWNyOUQsR0FDckIsSUFBS2d4RCxHQUFhaHhELElBQVUyNEQsR0FBVzM0RCxJQUFVK2hELEVBQy9DLE9BQU8sRUFFVCxJQUFJeFQsRUFBUThmLEdBQWFydUQsR0FDekIsR0FBYyxPQUFWdXVDLEVBQ0YsT0FBTyxFQUVULElBQUlrbkIsRUFBTzUwRCxHQUFlQyxLQUFLeXRDLEVBQU8sZ0JBQWtCQSxFQUFNdlEsWUFDOUQsTUFBc0IsbUJBQVJ5M0IsR0FBc0JBLGFBQWdCQSxHQUNsRDlILEdBQWE3c0QsS0FBSzIwRCxJQUFTMUgsR0FvQi9CLElBQUluRixHQUFXRCxHQUFlZ0QsR0FBVWhELElBNTlReEMsU0FBc0Izb0QsR0FDcEIsT0FBT2d4RCxHQUFhaHhELElBQVUyNEQsR0FBVzM0RCxJQUFVaWlELEdBNmdSakQ2RyxHQUFRRCxHQUFZOEMsR0FBVTlDLElBbmdSbEMsU0FBbUI3b0QsR0FDakIsT0FBT2d4RCxHQUFhaHhELElBQVUrMEQsR0FBTy8wRCxJQUFVa2lELEdBcWhSakQsU0FBUzRyQixHQUFTOXRFLEdBQ2hCLE1BQXVCLGlCQUFUQSxJQUNWc0MsR0FBUXRDLElBQVVneEQsR0FBYWh4RCxJQUFVMjRELEdBQVczNEQsSUFBVW1pRCxFQW9CcEUsU0FBU3dWLEdBQVMzM0QsR0FDaEIsTUFBdUIsaUJBQVRBLEdBQ1hneEQsR0FBYWh4RCxJQUFVMjRELEdBQVczNEQsSUFBVW9pRCxFQW9CakQsSUFBSTRHLEdBQWVELEdBQW1CNEMsR0FBVTVDLElBdmpSaEQsU0FBMEIvb0QsR0FDeEIsT0FBT2d4RCxHQUFhaHhELElBQ2xCd29FLEdBQVN4b0UsRUFBTTNELFdBQWErcUQsR0FBZXVSLEdBQVczNEQsS0E2b1J0RGdpQyxHQUFLMmtDLEdBQTBCcEssSUF5Qi9CbDJCLEdBQU1zZ0MsSUFBMEIsU0FBUzNtRSxFQUFPaTVELEdBQ2xELE9BQU9qNUQsR0FBU2k1RCxLQTBCbEIsU0FBUzhVLEdBQVEvdEUsR0FDZixJQUFLQSxFQUNILE1BQU8sR0FFVCxHQUFJeThELEdBQVl6OEQsR0FDZCxPQUFPOHRFLEdBQVM5dEUsR0FBU2d0RCxHQUFjaHRELEdBQVNxekQsR0FBVXJ6RCxHQUU1RCxHQUFJeXVELElBQWV6dUQsRUFBTXl1RCxJQUN2QixPQXY4Vk4sU0FBeUJoaUIsR0FJdkIsSUFIQSxJQUFJenZDLEVBQ0EwdkMsRUFBUyxLQUVKMXZDLEVBQU95dkMsRUFBU0csUUFBUXBULE1BQy9Ca1QsRUFBTzl2QyxLQUFLSSxFQUFLZ0QsT0FFbkIsT0FBTzBzQyxFQWc4VklzaEMsQ0FBZ0JodUUsRUFBTXl1RCxPQUUvQixJQUFJbGIsRUFBTXdoQixHQUFPLzBELEdBR2pCLE9BRld1ekMsR0FBT3NPLEVBQVMySyxHQUFjalosR0FBTzJPLEVBQVN5SyxHQUFhbnBELElBRTFEeEQsR0EwQmQsU0FBU3ltRSxHQUFTem1FLEdBQ2hCLE9BQUtBLEdBR0xBLEVBQVEwb0MsR0FBUzFvQyxNQUNIa2hELEdBQVlsaEQsS0FBVSxJQXhrWXRCLHVCQXlrWUFBLEVBQVEsR0FBSyxFQUFJLEdBR3hCQSxHQUFVQSxFQUFRQSxFQUFRLEVBUGQsSUFBVkEsRUFBY0EsRUFBUSxFQW9DakMsU0FBUyt6QyxHQUFVL3pDLEdBQ2pCLElBQUkwc0MsRUFBUys1QixHQUFTem1FLEdBQ2xCaXVFLEVBQVl2aEMsRUFBUyxFQUV6QixPQUFPQSxHQUFXQSxFQUFVdWhDLEVBQVl2aEMsRUFBU3VoQyxFQUFZdmhDLEVBQVUsRUE4QnpFLFNBQVNwRCxHQUFTdHBDLEdBQ2hCLE9BQU9BLEVBQVFzekQsR0FBVXZmLEdBQVUvekMsR0FBUSxFQUFHb2hELEdBQW9CLEVBMEJwRSxTQUFTMVksR0FBUzFvQyxHQUNoQixHQUFvQixpQkFBVEEsRUFDVCxPQUFPQSxFQUVULEdBQUkyM0QsR0FBUzMzRCxHQUNYLE9BQU9taEQsRUFFVCxHQUFJL1gsR0FBU3BwQyxHQUFRLENBQ25CLElBQUlpNUQsRUFBZ0MsbUJBQWpCajVELEVBQU1pK0IsUUFBd0JqK0IsRUFBTWkrQixVQUFZaitCLEVBQ25FQSxFQUFRb3BDLEdBQVM2dkIsR0FBVUEsRUFBUSxHQUFNQSxFQUUzQyxHQUFvQixpQkFBVGo1RCxFQUNULE9BQWlCLElBQVZBLEVBQWNBLEdBQVNBLEVBRWhDQSxFQUFRd3JELEdBQVN4ckQsR0FDakIsSUFBSWt1RSxFQUFXdnBCLEdBQVdobEIsS0FBSzMvQixHQUMvQixPQUFRa3VFLEdBQVlycEIsR0FBVWxsQixLQUFLMy9CLEdBQy9CeW5ELEdBQWF6bkQsRUFBTXVDLE1BQU0sR0FBSTJyRSxFQUFXLEVBQUksR0FDM0N4cEIsR0FBVy9rQixLQUFLMy9CLEdBQVNtaEQsR0FBT25oRCxFQTJCdkMsU0FBU3M5RCxHQUFjdDlELEdBQ3JCLE9BQU9nMEQsR0FBV2gwRCxFQUFPcTFELEdBQU9yMUQsSUFzRGxDLFNBQVMwQyxHQUFTMUMsR0FDaEIsT0FBZ0IsTUFBVEEsRUFBZ0IsR0FBSzZnRSxHQUFhN2dFLEdBcUMzQyxJQUFJbXhDLEdBQVNveUIsSUFBZSxTQUFTajZELEVBQVF6RixHQUMzQyxHQUFJeTRELEdBQVl6NEQsSUFBVzQ0RCxHQUFZNTRELEdBQ3JDbXdELEdBQVdud0QsRUFBUTNCLEdBQUsyQixHQUFTeUYsUUFHbkMsSUFBSyxJQUFJOUcsS0FBT3FCLEVBQ1ZoRCxHQUFlQyxLQUFLK0MsRUFBUXJCLElBQzlCa3hELEdBQVlwcUQsRUFBUTlHLEVBQUtxQixFQUFPckIsT0FvQ2xDMnJFLEdBQVc1SyxJQUFlLFNBQVNqNkQsRUFBUXpGLEdBQzdDbXdELEdBQVdud0QsRUFBUXd4RCxHQUFPeHhELEdBQVN5RixNQWdDakM4a0UsR0FBZTdLLElBQWUsU0FBU2o2RCxFQUFRekYsRUFBUW01RCxFQUFVdkksR0FDbkVULEdBQVdud0QsRUFBUXd4RCxHQUFPeHhELEdBQVN5RixFQUFRbXJELE1BK0J6QzRaLEdBQWE5SyxJQUFlLFNBQVNqNkQsRUFBUXpGLEVBQVFtNUQsRUFBVXZJLEdBQ2pFVCxHQUFXbndELEVBQVEzQixHQUFLMkIsR0FBU3lGLEVBQVFtckQsTUFvQnZDNlosR0FBS2hLLEdBQVNyUSxJQThEZHZULEdBQVdvZSxJQUFTLFNBQVN4MUQsRUFBUXd5QyxHQUN2Q3h5QyxFQUFTM0ksR0FBTzJJLEdBRWhCLElBQUl5UixHQUFTLEVBQ1QxZSxFQUFTeS9DLEVBQVF6L0MsT0FDakJvbkUsRUFBUXBuRSxFQUFTLEVBQUl5L0MsRUFBUSxHQUFLbmdELEVBTXRDLElBSkk4bkUsR0FBU0MsR0FBZTVuQixFQUFRLEdBQUlBLEVBQVEsR0FBSTJuQixLQUNsRHBuRSxFQUFTLEtBR0YwZSxFQUFRMWUsR0FNZixJQUxBLElBQUl3SCxFQUFTaTRDLEVBQVEvZ0MsR0FDakIrZSxFQUFRdTdCLEdBQU94eEQsR0FDZjBxRSxHQUFjLEVBQ2RDLEVBQWMxMEMsRUFBTXo5QixTQUVma3lFLEVBQWFDLEdBQWEsQ0FDakMsSUFBSWhzRSxFQUFNczNCLEVBQU15MEMsR0FDWnZ1RSxFQUFRc0osRUFBTzlHLElBRWZ4QyxJQUFVckUsR0FDVG1xQyxHQUFHOWxDLEVBQU95dEQsR0FBWWpyRCxNQUFVM0IsR0FBZUMsS0FBS3dJLEVBQVE5RyxNQUMvRDhHLEVBQU85RyxHQUFPcUIsRUFBT3JCLElBSzNCLE9BQU84RyxLQXNCTG1sRSxHQUFlM1AsSUFBUyxTQUFTMzhELEdBRW5DLE9BREFBLEVBQUt2RixLQUFLakIsRUFBV21zRSxJQUNkN3VDLEdBQU15MUMsR0FBVy95RSxFQUFXd0csTUFnU3JDLFNBQVM4RSxHQUFJcUMsRUFBUXF1QixFQUFNd3VDLEdBQ3pCLElBQUl6NUIsRUFBbUIsTUFBVnBqQyxFQUFpQjNOLEVBQVkwOEQsR0FBUS91RCxFQUFRcXVCLEdBQzFELE9BQU8rVSxJQUFXL3dDLEVBQVl3cUUsRUFBZXo1QixFQTREL0MsU0FBU293QixHQUFNeHpELEVBQVFxdUIsR0FDckIsT0FBaUIsTUFBVnJ1QixHQUFrQmcvRCxHQUFRaC9ELEVBQVFxdUIsRUFBTXdoQyxJQXFCakQsSUFBSXdWLEdBQVM3SSxJQUFlLFNBQVNwNUIsRUFBUTFzQyxFQUFPd0MsR0FDckMsTUFBVHhDLEdBQ3lCLG1CQUFsQkEsRUFBTTBDLFdBQ2YxQyxFQUFROHRELEdBQXFCaHRELEtBQUtkLElBR3BDMHNDLEVBQU8xc0MsR0FBU3dDLElBQ2YrOEQsR0FBU3RELEtBNEJSMlMsR0FBVzlJLElBQWUsU0FBU3A1QixFQUFRMXNDLEVBQU93QyxHQUN2QyxNQUFUeEMsR0FDeUIsbUJBQWxCQSxFQUFNMEMsV0FDZjFDLEVBQVE4dEQsR0FBcUJodEQsS0FBS2QsSUFHaENhLEdBQWVDLEtBQUs0ckMsRUFBUTFzQyxHQUM5QjBzQyxFQUFPMXNDLEdBQU9wRCxLQUFLNEYsR0FFbkJrcUMsRUFBTzFzQyxHQUFTLENBQUN3QyxLQUVsQm83RCxJQW9CQ3RwQixHQUFTd3FCLEdBQVNsRixJQThCdEIsU0FBUzEzRCxHQUFLb0gsR0FDWixPQUFPbXpELEdBQVluekQsR0FBVWtwRCxHQUFjbHBELEdBQVUreUQsR0FBUy95RCxHQTBCaEUsU0FBUytyRCxHQUFPL3JELEdBQ2QsT0FBT216RCxHQUFZbnpELEdBQVVrcEQsR0FBY2xwRCxHQUFRLEdBbG9UckQsU0FBb0JBLEdBQ2xCLElBQUs4L0IsR0FBUzkvQixHQUNaLE9BMDlGSixTQUFzQkEsR0FDcEIsSUFBSW9qQyxFQUFTLEdBQ2IsR0FBYyxNQUFWcGpDLEVBQ0YsSUFBSyxJQUFJOUcsS0FBTzdCLEdBQU8ySSxHQUNyQm9qQyxFQUFPOXZDLEtBQUs0RixHQUdoQixPQUFPa3FDLEVBaitGRW1pQyxDQUFhdmxFLEdBRXRCLElBQUl3bEUsRUFBVXhTLEdBQVloekQsR0FDdEJvakMsRUFBUyxHQUViLElBQUssSUFBSWxxQyxLQUFPOEcsR0FDRCxlQUFQOUcsSUFBeUJzc0UsR0FBWWp1RSxHQUFlQyxLQUFLd0ksRUFBUTlHLEtBQ3JFa3FDLEVBQU85dkMsS0FBSzRGLEdBR2hCLE9BQU9rcUMsRUFzblRvRHFpQyxDQUFXemxFLEdBdUd4RSxJQUFJMGxFLEdBQVF6TCxJQUFlLFNBQVNqNkQsRUFBUXpGLEVBQVFtNUQsR0FDbERELEdBQVV6ekQsRUFBUXpGLEVBQVFtNUQsTUFrQ3hCMFIsR0FBWW5MLElBQWUsU0FBU2o2RCxFQUFRekYsRUFBUW01RCxFQUFVdkksR0FDaEVzSSxHQUFVenpELEVBQVF6RixFQUFRbTVELEVBQVV2SSxNQXVCbEN3YSxHQUFPM0ssSUFBUyxTQUFTaDdELEVBQVE0cUQsR0FDbkMsSUFBSXhuQixFQUFTLEdBQ2IsR0FBYyxNQUFWcGpDLEVBQ0YsT0FBT29qQyxFQUVULElBQUlpb0IsR0FBUyxFQUNiVCxFQUFRaEssR0FBU2dLLEdBQU8sU0FBU3Y4QixHQUcvQixPQUZBQSxFQUFPMmdDLEdBQVMzZ0MsRUFBTXJ1QixHQUN0QnFyRCxJQUFXQSxFQUFTaDlCLEVBQUt0N0IsT0FBUyxHQUMzQnM3QixLQUVUcThCLEdBQVcxcUQsRUFBUWd0RCxHQUFhaHRELEdBQVNvakMsR0FDckNpb0IsSUFDRmpvQixFQUFTNm5CLEdBQVU3bkIsRUFBUXdpQyxFQUF3RG5ILEtBR3JGLElBREEsSUFBSTFyRSxFQUFTNjNELEVBQU03M0QsT0FDWkEsS0FDTHVpRSxHQUFVbHlCLEVBQVF3bkIsRUFBTTczRCxJQUUxQixPQUFPcXdDLEtBNENMMmdCLEdBQU9pWCxJQUFTLFNBQVNoN0QsRUFBUTRxRCxHQUNuQyxPQUFpQixNQUFWNXFELEVBQWlCLEdBbm1UMUIsU0FBa0JBLEVBQVE0cUQsR0FDeEIsT0FBT29LLEdBQVdoMUQsRUFBUTRxRCxHQUFPLFNBQVNsMEQsRUFBTzIzQixHQUMvQyxPQUFPbWxDLEdBQU14ekQsRUFBUXF1QixNQWltVE13M0MsQ0FBUzdsRSxFQUFRNHFELE1BcUJoRCxTQUFTa2IsR0FBTzlsRSxFQUFRcWdELEdBQ3RCLEdBQWMsTUFBVnJnRCxFQUNGLE1BQU8sR0FFVCxJQUFJd3dCLEVBQVFvd0IsR0FBU29NLEdBQWFodEQsSUFBUyxTQUFTOUosR0FDbEQsTUFBTyxDQUFDQSxNQUdWLE9BREFtcUQsRUFBWWlVLEdBQVlqVSxHQUNqQjJVLEdBQVdoMUQsRUFBUXd3QixHQUFPLFNBQVM5NUIsRUFBTzIzQixHQUMvQyxPQUFPZ3lCLEVBQVUzcEQsRUFBTzIzQixFQUFLLE9BNElqQyxJQUFJMDNDLEdBQVVsSSxHQUFjamxFLElBMEJ4Qm90RSxHQUFZbkksR0FBYzlSLElBNEs5QixTQUFTN3hELEdBQU84RixHQUNkLE9BQWlCLE1BQVZBLEVBQWlCLEdBQUtzaUQsR0FBV3RpRCxFQUFRcEgsR0FBS29ILElBa052RCxJQUFJaW1FLEdBQVl6TCxJQUFpQixTQUFTcDNCLEVBQVE4aUMsRUFBTXowRCxHQUV0RCxPQURBeTBELEVBQU9BLEVBQUsxNUMsY0FDTDRXLEdBQVUzeEIsRUFBUTAwRCxHQUFXRCxHQUFRQSxNQWtCOUMsU0FBU0MsR0FBV2hrQixHQUNsQixPQUFPaWtCLEdBQVdodEUsR0FBUytvRCxHQUFRMzFCLGVBcUJyQyxTQUFTa3VDLEdBQU92WSxHQUVkLE9BREFBLEVBQVMvb0QsR0FBUytvRCxLQUNEQSxFQUFPbnRELFFBQVF5bUQsR0FBU29ILElBQWM3dEQsUUFBUXVvRCxHQUFhLElBc0g5RSxJQUFJOG9CLEdBQVk3TCxJQUFpQixTQUFTcDNCLEVBQVE4aUMsRUFBTXowRCxHQUN0RCxPQUFPMnhCLEdBQVUzeEIsRUFBUSxJQUFNLElBQU15MEQsRUFBSzE1QyxpQkF1QnhDODVDLEdBQVk5TCxJQUFpQixTQUFTcDNCLEVBQVE4aUMsRUFBTXowRCxHQUN0RCxPQUFPMnhCLEdBQVUzeEIsRUFBUSxJQUFNLElBQU15MEQsRUFBSzE1QyxpQkFvQnhDKzVDLEdBQWFsTSxHQUFnQixlQTBON0JtTSxHQUFZaE0sSUFBaUIsU0FBU3AzQixFQUFROGlDLEVBQU16MEQsR0FDdEQsT0FBTzJ4QixHQUFVM3hCLEVBQVEsSUFBTSxJQUFNeTBELEVBQUsxNUMsaUJBZ0V4Q2k2QyxHQUFZak0sSUFBaUIsU0FBU3AzQixFQUFROGlDLEVBQU16MEQsR0FDdEQsT0FBTzJ4QixHQUFVM3hCLEVBQVEsSUFBTSxJQUFNMjBELEdBQVdGLE1Bc2lCOUNRLEdBQVlsTSxJQUFpQixTQUFTcDNCLEVBQVE4aUMsRUFBTXowRCxHQUN0RCxPQUFPMnhCLEdBQVUzeEIsRUFBUSxJQUFNLElBQU15MEQsRUFBS3p2QyxpQkFvQnhDMnZDLEdBQWEvTCxHQUFnQixlQXFCakMsU0FBU0ksR0FBTXRZLEVBQVF3a0IsRUFBU3hNLEdBSTlCLE9BSEFoWSxFQUFTL29ELEdBQVMrb0QsSUFDbEJ3a0IsRUFBVXhNLEVBQVE5bkUsRUFBWXMwRSxLQUVkdDBFLEVBcnlicEIsU0FBd0I4dkQsR0FDdEIsT0FBT3hFLEdBQWlCdG5CLEtBQUs4ckIsR0FxeWJsQnlrQixDQUFlemtCLEdBMWpiNUIsU0FBc0JBLEdBQ3BCLE9BQU9BLEVBQU81eUMsTUFBTWt1QyxLQUFrQixHQXlqYkZvcEIsQ0FBYTFrQixHQXpyY25ELFNBQW9CQSxHQUNsQixPQUFPQSxFQUFPNXlDLE1BQU13ckMsS0FBZ0IsR0F3cmN1QityQixDQUFXM2tCLEdBRTdEQSxFQUFPNXlDLE1BQU1vM0QsSUFBWSxHQTJCbEMsSUFBSUksR0FBVXZSLElBQVMsU0FBUzdWLEVBQU05bUQsR0FDcEMsSUFDRSxPQUFPODJCLEdBQU1nd0IsRUFBTXR0RCxFQUFXd0csR0FDOUIsTUFBT2IsR0FDUCxPQUFPc3NFLEdBQVF0c0UsR0FBS0EsRUFBSSxJQUFJcTdCLEdBQU1yN0IsT0E4QmxDZ3ZFLEdBQVVoTSxJQUFTLFNBQVNoN0QsRUFBUWluRSxHQUt0QyxPQUpBL21CLEdBQVUrbUIsR0FBYSxTQUFTL3RFLEdBQzlCQSxFQUFNKzFELEdBQU0vMUQsR0FDWml4RCxHQUFnQm5xRCxFQUFROUcsRUFBS25CLEdBQUtpSSxFQUFPOUcsR0FBTThHLE9BRTFDQSxLQXFHVCxTQUFTaTJELEdBQVN2L0QsR0FDaEIsT0FBTyxXQUNMLE9BQU9BLEdBa0RYLElBQUl3d0UsR0FBT25NLEtBdUJQb00sR0FBWXBNLElBQVcsR0FrQjNCLFNBQVNwSSxHQUFTajhELEdBQ2hCLE9BQU9BLEVBNkNULFNBQVNzcEQsR0FBU0wsR0FDaEIsT0FBTytTLEdBQTRCLG1CQUFSL1MsRUFBcUJBLEVBQU9zTCxHQUFVdEwsRUFqdGUvQyxJQXd6ZXBCLElBQUlwekIsR0FBU2lwQyxJQUFTLFNBQVNubkMsRUFBTXgxQixHQUNuQyxPQUFPLFNBQVNtSCxHQUNkLE9BQU9zd0QsR0FBV3R3RCxFQUFRcXVCLEVBQU14MUIsT0EyQmhDdXVFLEdBQVc1UixJQUFTLFNBQVN4MUQsRUFBUW5ILEdBQ3ZDLE9BQU8sU0FBU3cxQixHQUNkLE9BQU9paUMsR0FBV3R3RCxFQUFRcXVCLEVBQU14MUIsT0F3Q3BDLFNBQVN3dUUsR0FBTXJuRSxFQUFRekYsRUFBUWhCLEdBQzdCLElBQUlpM0IsRUFBUTUzQixHQUFLMkIsR0FDYjBzRSxFQUFjblksR0FBY3YwRCxFQUFRaTJCLEdBRXpCLE1BQVhqM0IsR0FDRXVtQyxHQUFTdmxDLEtBQVkwc0UsRUFBWWwwRSxTQUFXeTlCLEVBQU16OUIsVUFDdER3RyxFQUFVZ0IsRUFDVkEsRUFBU3lGLEVBQ1RBLEVBQVNoTixLQUNUaTBFLEVBQWNuWSxHQUFjdjBELEVBQVEzQixHQUFLMkIsS0FFM0MsSUFBSWkwQyxJQUFVMU8sR0FBU3ZtQyxJQUFZLFVBQVdBLElBQWNBLEVBQVFpMUMsT0FDaEVrZCxFQUFTL2EsR0FBVzN3QyxHQXFCeEIsT0FuQkFrZ0QsR0FBVSttQixHQUFhLFNBQVMzTSxHQUM5QixJQUFJM2EsRUFBT3BsRCxFQUFPKy9ELEdBQ2xCdDZELEVBQU9zNkQsR0FBYzNhLEVBQ2pCK0wsSUFDRjFyRCxFQUFPMUksVUFBVWdqRSxHQUFjLFdBQzdCLElBQUl0UyxFQUFXaDFELEtBQUttMUQsVUFDcEIsR0FBSTNaLEdBQVN3WixFQUFVLENBQ3JCLElBQUk1a0IsRUFBU3BqQyxFQUFPaE4sS0FBS2kxRCxhQUNyQitQLEVBQVU1MEIsRUFBTzhrQixZQUFjNkIsR0FBVS8yRCxLQUFLazFELGFBSWxELE9BRkE4UCxFQUFRMWtFLEtBQUssQ0FBRSxLQUFRcXNELEVBQU0sS0FBUS92QixVQUFXLFFBQVc1dkIsSUFDM0RvakMsRUFBTytrQixVQUFZSCxFQUNaNWtCLEVBRVQsT0FBT3VjLEVBQUtod0IsTUFBTTN2QixFQUFRNmdELEdBQVUsQ0FBQzd0RCxLQUFLMEQsU0FBVWs1QixpQkFLbkQ1dkIsRUFtQ1QsU0FBUzQ5RCxNQWlEVCxJQUFJMEosR0FBT3hLLEdBQVdsYyxJQThCbEIybUIsR0FBWXpLLEdBQVcxYyxJQWlDdkJvbkIsR0FBVzFLLEdBQVc3YixJQXdCMUIsU0FBUzZSLEdBQVN6a0MsR0FDaEIsT0FBT2lsQyxHQUFNamxDLEdBQVE4eUIsR0FBYThOLEdBQU01Z0MsSUFoM1gxQyxTQUEwQkEsR0FDeEIsT0FBTyxTQUFTcnVCLEdBQ2QsT0FBTyt1RCxHQUFRL3VELEVBQVFxdUIsSUE4Mlh3Qm81QyxDQUFpQnA1QyxHQXVFcEUsSUFBSXE1QyxHQUFRejZELEtBc0NSMDZELEdBQWExNkQsSUFBWSxHQW9CN0IsU0FBUzh4RCxLQUNQLE1BQU8sR0FnQlQsU0FBU08sS0FDUCxPQUFPLEVBK0pULElBMm9CTS9rRSxHQTNvQkY4SSxHQUFNczVELElBQW9CLFNBQVNpTCxFQUFRQyxHQUM3QyxPQUFPRCxFQUFTQyxJQUNmLEdBdUJDOStELEdBQU8yMEQsR0FBWSxRQWlCbkJvSyxHQUFTbkwsSUFBb0IsU0FBU29MLEVBQVVDLEdBQ2xELE9BQU9ELEVBQVdDLElBQ2pCLEdBdUJDejJDLEdBQVFtc0MsR0FBWSxTQXdLcEI3akMsR0FBVzhpQyxJQUFvQixTQUFTc0wsRUFBWUMsR0FDdEQsT0FBT0QsRUFBYUMsSUFDbkIsR0F1QkN6L0QsR0FBUWkxRCxHQUFZLFNBaUJwQmxqQyxHQUFXbWlDLElBQW9CLFNBQVN3TCxFQUFTQyxHQUNuRCxPQUFPRCxFQUFVQyxJQUNoQixHQWdtQkgsT0ExaUJBM2dCLEdBQU80Z0IsTUFwNk1QLFNBQWVwMkMsRUFBRzB0QixHQUNoQixHQUFtQixtQkFBUkEsRUFDVCxNQUFNLElBQUl0dkIsR0FBVWtuQixHQUd0QixPQURBdGxCLEVBQUl3WSxHQUFVeFksR0FDUCxXQUNMLEtBQU1BLEVBQUksRUFDUixPQUFPMHRCLEVBQUtod0IsTUFBTTM4QixLQUFNNDhCLGFBODVNOUI2M0IsR0FBT29VLElBQU1BLEdBQ2JwVSxHQUFPNWYsT0FBU0EsR0FDaEI0ZixHQUFPb2QsU0FBV0EsR0FDbEJwZCxHQUFPcWQsYUFBZUEsR0FDdEJyZCxHQUFPc2QsV0FBYUEsR0FDcEJ0ZCxHQUFPdWQsR0FBS0EsR0FDWnZkLEdBQU80YSxPQUFTQSxHQUNoQjVhLEdBQU8xdkQsS0FBT0EsR0FDZDB2RCxHQUFPdWYsUUFBVUEsR0FDakJ2ZixHQUFPNmEsUUFBVUEsR0FDakI3YSxHQUFPNmdCLFVBbDhLUCxXQUNFLElBQUsxNEMsVUFBVTc4QixPQUNiLE1BQU8sR0FFVCxJQUFJMkQsRUFBUWs1QixVQUFVLEdBQ3RCLE9BQU81MkIsR0FBUXRDLEdBQVNBLEVBQVEsQ0FBQ0EsSUE4N0tuQyt3RCxHQUFPalosTUFBUUEsR0FDZmlaLEdBQU84Z0IsTUFwZ1RQLFNBQWV6b0IsRUFBT3B0RCxFQUFNeW5FLEdBRXhCem5FLEdBREd5bkUsRUFBUUMsR0FBZXRhLEVBQU9wdEQsRUFBTXluRSxHQUFTem5FLElBQVNMLEdBQ2xELEVBRUE4ekQsR0FBVTFiLEdBQVUvM0MsR0FBTyxHQUVwQyxJQUFJSyxFQUFrQixNQUFUK3NELEVBQWdCLEVBQUlBLEVBQU0vc0QsT0FDdkMsSUFBS0EsR0FBVUwsRUFBTyxFQUNwQixNQUFPLEdBTVQsSUFKQSxJQUFJK2UsRUFBUSxFQUNSOHVDLEVBQVcsRUFDWG5kLEVBQVNoa0MsRUFBTXVtRCxHQUFXNXlELEVBQVNMLElBRWhDK2UsRUFBUTFlLEdBQ2Jxd0MsRUFBT21kLEtBQWM0VixHQUFVclcsRUFBT3J1QyxFQUFRQSxHQUFTL2UsR0FFekQsT0FBTzB3QyxHQW8vU1Rxa0IsR0FBTytnQixRQWwrU1AsU0FBaUIxb0IsR0FNZixJQUxBLElBQUlydUMsR0FBUyxFQUNUMWUsRUFBa0IsTUFBVCtzRCxFQUFnQixFQUFJQSxFQUFNL3NELE9BQ25Dd3RELEVBQVcsRUFDWG5kLEVBQVMsS0FFSjN4QixFQUFRMWUsR0FBUSxDQUN2QixJQUFJMkQsRUFBUW9wRCxFQUFNcnVDLEdBQ2QvYSxJQUNGMHNDLEVBQU9tZCxLQUFjN3BELEdBR3pCLE9BQU8wc0MsR0F1OVNUcWtCLEdBQU90dUQsT0E5N1NQLFdBQ0UsSUFBSXBHLEVBQVM2OEIsVUFBVTc4QixPQUN2QixJQUFLQSxFQUNILE1BQU8sR0FNVCxJQUpBLElBQUk4RixFQUFPdUcsRUFBTXJNLEVBQVMsR0FDdEIrc0QsRUFBUWx3QixVQUFVLEdBQ2xCbmUsRUFBUTFlLEVBRUwwZSxLQUNMNVksRUFBSzRZLEVBQVEsR0FBS21lLFVBQVVuZSxHQUU5QixPQUFPb3ZDLEdBQVU3bkQsR0FBUThtRCxHQUFTaUssR0FBVWpLLEdBQVMsQ0FBQ0EsR0FBUXlPLEdBQVkxMUQsRUFBTSxLQW03U2xGNHVELEdBQU9naEIsS0EzdENQLFNBQWM1YSxHQUNaLElBQUk5NkQsRUFBa0IsTUFBVDg2RCxFQUFnQixFQUFJQSxFQUFNOTZELE9BQ25DMHBFLEVBQWFuSSxLQVNqQixPQVBBekcsRUFBUzk2RCxFQUFjNnRELEdBQVNpTixHQUFPLFNBQVM4UCxHQUM5QyxHQUFzQixtQkFBWEEsRUFBSyxHQUNkLE1BQU0sSUFBSXR0QyxHQUFVa25CLEdBRXRCLE1BQU8sQ0FBQ2tsQixFQUFXa0IsRUFBSyxJQUFLQSxFQUFLLE9BSmxCLEdBT1huSSxJQUFTLFNBQVMzOEQsR0FFdkIsSUFEQSxJQUFJNFksR0FBUyxJQUNKQSxFQUFRMWUsR0FBUSxDQUN2QixJQUFJNHFFLEVBQU85UCxFQUFNcDhDLEdBQ2pCLEdBQUlrZSxHQUFNZ3VDLEVBQUssR0FBSTNxRSxLQUFNNkYsR0FDdkIsT0FBTzgyQixHQUFNZ3VDLEVBQUssR0FBSTNxRSxLQUFNNkYsUUE0c0NwQzR1RCxHQUFPaWhCLFNBOXFDUCxTQUFrQm51RSxHQUNoQixPQXo1WUYsU0FBc0JBLEdBQ3BCLElBQUlpMkIsRUFBUTUzQixHQUFLMkIsR0FDakIsT0FBTyxTQUFTeUYsR0FDZCxPQUFPa3RELEdBQWVsdEQsRUFBUXpGLEVBQVFpMkIsSUFzNVlqQ200QyxDQUFhMWQsR0FBVTF3RCxFQS9pZVosS0E2dGdCcEJrdEQsR0FBT3dPLFNBQVdBLEdBQ2xCeE8sR0FBT29hLFFBQVVBLEdBQ2pCcGEsR0FBT2hvQixPQXR1SFAsU0FBZ0Jub0MsRUFBV3N4RSxHQUN6QixJQUFJeGxDLEVBQVMwa0IsR0FBV3h3RCxHQUN4QixPQUFxQixNQUFkc3hFLEVBQXFCeGxDLEVBQVNxbkIsR0FBV3JuQixFQUFRd2xDLElBcXVIMURuaEIsR0FBT29oQixNQXp1TVAsU0FBU0EsRUFBTWxwQixFQUFNbWMsRUFBTzNCLEdBRTFCLElBQUkvMkIsRUFBUzI2QixHQUFXcGUsRUE3K1ROLEVBNitUNkJ0dEQsRUFBV0EsRUFBV0EsRUFBV0EsRUFBV0EsRUFEM0Z5cEUsRUFBUTNCLEVBQVE5bkUsRUFBWXlwRSxHQUc1QixPQURBMTRCLEVBQU9sVSxZQUFjMjVDLEVBQU0zNUMsWUFDcEJrVSxHQXN1TVRxa0IsR0FBT3FoQixXQTdyTVAsU0FBU0EsRUFBV25wQixFQUFNbWMsRUFBTzNCLEdBRS9CLElBQUkvMkIsRUFBUzI2QixHQUFXcGUsRUF6aFVBLEdBeWhVNkJ0dEQsRUFBV0EsRUFBV0EsRUFBV0EsRUFBV0EsRUFEakd5cEUsRUFBUTNCLEVBQVE5bkUsRUFBWXlwRSxHQUc1QixPQURBMTRCLEVBQU9sVSxZQUFjNDVDLEVBQVc1NUMsWUFDekJrVSxHQTByTVRxa0IsR0FBTzlvRCxTQUFXQSxHQUNsQjhvRCxHQUFPclEsU0FBV0EsR0FDbEJxUSxHQUFPMGQsYUFBZUEsR0FDdEIxZCxHQUFPNWMsTUFBUUEsR0FDZjRjLEdBQU9rYyxNQUFRQSxHQUNmbGMsR0FBTzBZLFdBQWFBLEdBQ3BCMVksR0FBTzJZLGFBQWVBLEdBQ3RCM1ksR0FBTzRZLGVBQWlCQSxHQUN4QjVZLEdBQU9zaEIsS0F0MFNQLFNBQWNqcEIsRUFBTzd0QixFQUFHa29DLEdBQ3RCLElBQUlwbkUsRUFBa0IsTUFBVCtzRCxFQUFnQixFQUFJQSxFQUFNL3NELE9BQ3ZDLE9BQUtBLEVBSUVvakUsR0FBVXJXLEdBRGpCN3RCLEVBQUtrb0MsR0FBU2xvQyxJQUFNNS9CLEVBQWEsRUFBSW80QyxHQUFVeFksSUFDbkIsRUFBSSxFQUFJQSxFQUFHbC9CLEdBSDlCLElBbzBTWDAwRCxHQUFPdWhCLFVBcnlTUCxTQUFtQmxwQixFQUFPN3RCLEVBQUdrb0MsR0FDM0IsSUFBSXBuRSxFQUFrQixNQUFUK3NELEVBQWdCLEVBQUlBLEVBQU0vc0QsT0FDdkMsT0FBS0EsRUFLRW9qRSxHQUFVclcsRUFBTyxHQUR4Qjd0QixFQUFJbC9CLEdBREprL0IsRUFBS2tvQyxHQUFTbG9DLElBQU01L0IsRUFBYSxFQUFJbzRDLEdBQVV4WSxLQUVoQixFQUFJLEVBQUlBLEdBSjlCLElBbXlTWHcxQixHQUFPd2hCLGVBenZTUCxTQUF3Qm5wQixFQUFPTyxHQUM3QixPQUFRUCxHQUFTQSxFQUFNL3NELE9BQ25COGtFLEdBQVUvWCxFQUFPd1UsR0FBWWpVLEVBQVcsSUFBSSxHQUFNLEdBQ2xELElBdXZTTm9ILEdBQU95aEIsVUFqdFNQLFNBQW1CcHBCLEVBQU9PLEdBQ3hCLE9BQVFQLEdBQVNBLEVBQU0vc0QsT0FDbkI4a0UsR0FBVS9YLEVBQU93VSxHQUFZalUsRUFBVyxJQUFJLEdBQzVDLElBK3NTTm9ILEdBQU8waEIsS0EvcVNQLFNBQWNycEIsRUFBT3BwRCxFQUFPKytELEVBQU9XLEdBQ2pDLElBQUlyakUsRUFBa0IsTUFBVCtzRCxFQUFnQixFQUFJQSxFQUFNL3NELE9BQ3ZDLE9BQUtBLEdBR0QwaUUsR0FBeUIsaUJBQVRBLEdBQXFCMkUsR0FBZXRhLEVBQU9wcEQsRUFBTysrRCxLQUNwRUEsRUFBUSxFQUNSVyxFQUFNcmpFLEdBenZJVixTQUFrQitzRCxFQUFPcHBELEVBQU8rK0QsRUFBT1csR0FDckMsSUFBSXJqRSxFQUFTK3NELEVBQU0vc0QsT0FXbkIsS0FUQTBpRSxFQUFRaHJCLEdBQVVnckIsSUFDTixJQUNWQSxHQUFTQSxFQUFRMWlFLEVBQVMsRUFBS0EsRUFBUzBpRSxJQUUxQ1csRUFBT0EsSUFBUS9qRSxHQUFhK2pFLEVBQU1yakUsRUFBVUEsRUFBUzAzQyxHQUFVMnJCLElBQ3JELElBQ1JBLEdBQU9yakUsR0FFVHFqRSxFQUFNWCxFQUFRVyxFQUFNLEVBQUlwMkIsR0FBU28yQixHQUMxQlgsRUFBUVcsR0FDYnRXLEVBQU0yVixLQUFXLytELEVBRW5CLE9BQU9vcEQsRUE0dUlBc3BCLENBQVN0cEIsRUFBT3BwRCxFQUFPKytELEVBQU9XLElBTjVCLElBNnFTWDNPLEdBQU9oNUIsT0Ezdk9QLFNBQWdCNHlCLEVBQVloQixHQUUxQixPQURXcm5ELEdBQVFxb0QsR0FBY2YsR0FBY2dPLElBQ25Dak4sRUFBWWlULEdBQVlqVSxFQUFXLEtBMHZPakRvSCxHQUFPNGhCLFFBdnFPUCxTQUFpQmhvQixFQUFZckIsR0FDM0IsT0FBT3VPLEdBQVk5bkMsR0FBSTQ2QixFQUFZckIsR0FBVyxJQXVxT2hEeUgsR0FBTzZoQixZQWhwT1AsU0FBcUJqb0IsRUFBWXJCLEdBQy9CLE9BQU91TyxHQUFZOW5DLEdBQUk0NkIsRUFBWXJCLEdBQVdwSSxJQWdwT2hENlAsR0FBTzhoQixhQXhuT1AsU0FBc0Jsb0IsRUFBWXJCLEVBQVV3TyxHQUUxQyxPQURBQSxFQUFRQSxJQUFVbjhELEVBQVksRUFBSW80QyxHQUFVK2pCLEdBQ3JDRCxHQUFZOW5DLEdBQUk0NkIsRUFBWXJCLEdBQVd3TyxJQXVuT2hEL0csR0FBT29YLFFBQVVBLEdBQ2pCcFgsR0FBTytoQixZQXZpU1AsU0FBcUIxcEIsR0FFbkIsT0FEc0IsTUFBVEEsR0FBb0JBLEVBQU0vc0QsT0FDdkJ3N0QsR0FBWXpPLEVBQU9sSSxHQUFZLElBc2lTakQ2UCxHQUFPZ2lCLGFBL2dTUCxTQUFzQjNwQixFQUFPME8sR0FFM0IsT0FEc0IsTUFBVDFPLEdBQW9CQSxFQUFNL3NELE9BS2hDdzdELEdBQVl6TyxFQURuQjBPLEVBQVFBLElBQVVuOEQsRUFBWSxFQUFJbzRDLEdBQVUrakIsSUFGbkMsSUE2Z1NYL0csR0FBT2lpQixLQXo5TFAsU0FBYy9wQixHQUNaLE9BQU9vZSxHQUFXcGUsRUE1d1VELE1BcXVnQm5COEgsR0FBT3lmLEtBQU9BLEdBQ2R6ZixHQUFPMGYsVUFBWUEsR0FDbkIxZixHQUFPa2lCLFVBMy9SUCxTQUFtQjliLEdBS2pCLElBSkEsSUFBSXA4QyxHQUFTLEVBQ1QxZSxFQUFrQixNQUFUODZELEVBQWdCLEVBQUlBLEVBQU05NkQsT0FDbkNxd0MsRUFBUyxLQUVKM3hCLEVBQVExZSxHQUFRLENBQ3ZCLElBQUk0cUUsRUFBTzlQLEVBQU1wOEMsR0FDakIyeEIsRUFBT3U2QixFQUFLLElBQU1BLEVBQUssR0FFekIsT0FBT3Y2QixHQW0vUlRxa0IsR0FBT21pQixVQTM4R1AsU0FBbUI1cEUsR0FDakIsT0FBaUIsTUFBVkEsRUFBaUIsR0FBSzh1RCxHQUFjOXVELEVBQVFwSCxHQUFLb0gsS0EyOEcxRHluRCxHQUFPb2lCLFlBajdHUCxTQUFxQjdwRSxHQUNuQixPQUFpQixNQUFWQSxFQUFpQixHQUFLOHVELEdBQWM5dUQsRUFBUStyRCxHQUFPL3JELEtBaTdHNUR5bkQsR0FBT3VhLFFBQVVBLEdBQ2pCdmEsR0FBT3FpQixRQTU2UlAsU0FBaUJocUIsR0FFZixPQURzQixNQUFUQSxHQUFvQkEsRUFBTS9zRCxPQUN2Qm9qRSxHQUFVclcsRUFBTyxHQUFJLEdBQUssSUEyNlI1QzJILEdBQU8rWSxhQUFlQSxHQUN0Qi9ZLEdBQU9pWixlQUFpQkEsR0FDeEJqWixHQUFPa1osaUJBQW1CQSxHQUMxQmxaLEdBQU80ZCxPQUFTQSxHQUNoQjVkLEdBQU82ZCxTQUFXQSxHQUNsQjdkLEdBQU93YSxVQUFZQSxHQUNuQnhhLEdBQU96SCxTQUFXQSxHQUNsQnlILEdBQU95YSxNQUFRQSxHQUNmemEsR0FBTzd1RCxLQUFPQSxHQUNkNnVELEdBQU9zRSxPQUFTQSxHQUNoQnRFLEdBQU9oaEMsSUFBTUEsR0FDYmdoQyxHQUFPc2lCLFFBMXJHUCxTQUFpQi9wRSxFQUFRZ2dELEdBQ3ZCLElBQUk1YyxFQUFTLEdBTWIsT0FMQTRjLEVBQVdzVSxHQUFZdFUsRUFBVSxHQUVqQ2dPLEdBQVdodUQsR0FBUSxTQUFTdEosRUFBT3dDLEVBQUs4RyxHQUN0Q21xRCxHQUFnQi9tQixFQUFRNGMsRUFBU3RwRCxFQUFPd0MsRUFBSzhHLEdBQVN0SixNQUVqRDBzQyxHQW9yR1Rxa0IsR0FBT3VpQixVQXJwR1AsU0FBbUJocUUsRUFBUWdnRCxHQUN6QixJQUFJNWMsRUFBUyxHQU1iLE9BTEE0YyxFQUFXc1UsR0FBWXRVLEVBQVUsR0FFakNnTyxHQUFXaHVELEdBQVEsU0FBU3RKLEVBQU93QyxFQUFLOEcsR0FDdENtcUQsR0FBZ0IvbUIsRUFBUWxxQyxFQUFLOG1ELEVBQVN0cEQsRUFBT3dDLEVBQUs4RyxPQUU3Q29qQyxHQStvR1Rxa0IsR0FBT240QyxRQXBoQ1AsU0FBaUIvVSxHQUNmLE9BQU9zNEQsR0FBWTVILEdBQVUxd0QsRUF4dmVYLEtBNHdnQnBCa3RELEdBQU93aUIsZ0JBaC9CUCxTQUF5QjU3QyxFQUFNa2tDLEdBQzdCLE9BQU9LLEdBQW9CdmtDLEVBQU00OEIsR0FBVXNILEVBN3hlekIsS0E2d2dCcEI5SyxHQUFPdVksUUFBVUEsR0FDakJ2WSxHQUFPaWUsTUFBUUEsR0FDZmplLEdBQU8yZCxVQUFZQSxHQUNuQjNkLEdBQU9sN0IsT0FBU0EsR0FDaEJrN0IsR0FBTzJmLFNBQVdBLEdBQ2xCM2YsR0FBTzRmLE1BQVFBLEdBQ2Y1ZixHQUFPc2MsT0FBU0EsR0FDaEJ0YyxHQUFPeWlCLE9BenpCUCxTQUFnQmo0QyxHQUVkLE9BREFBLEVBQUl3WSxHQUFVeFksR0FDUHVqQyxJQUFTLFNBQVMzOEQsR0FDdkIsT0FBT3E3RCxHQUFRcjdELEVBQU1vNUIsT0F1ekJ6QncxQixHQUFPa2UsS0FBT0EsR0FDZGxlLEdBQU8waUIsT0FuaEdQLFNBQWdCbnFFLEVBQVFxZ0QsR0FDdEIsT0FBT3lsQixHQUFPOWxFLEVBQVErakUsR0FBT3pQLEdBQVlqVSxNQW1oRzNDb0gsR0FBT2xTLEtBNzNMUCxTQUFjb0ssR0FDWixPQUFPMGlCLEdBQU8sRUFBRzFpQixJQTYzTG5COEgsR0FBTzE3QixRQXI0TlAsU0FBaUJzMUIsRUFBWStTLEVBQVdDLEVBQVE4RixHQUM5QyxPQUFrQixNQUFkOVksRUFDSyxJQUVKcm9ELEdBQVFvN0QsS0FDWEEsRUFBeUIsTUFBYkEsRUFBb0IsR0FBSyxDQUFDQSxJQUduQ3A3RCxHQURMcTdELEVBQVM4RixFQUFROW5FLEVBQVlnaUUsS0FFM0JBLEVBQW1CLE1BQVZBLEVBQWlCLEdBQUssQ0FBQ0EsSUFFM0JGLEdBQVk5UyxFQUFZK1MsRUFBV0MsS0EyM041QzVNLEdBQU82ZixLQUFPQSxHQUNkN2YsR0FBT3VjLFNBQVdBLEdBQ2xCdmMsR0FBTzhmLFVBQVlBLEdBQ25COWYsR0FBTytmLFNBQVdBLEdBQ2xCL2YsR0FBTzBjLFFBQVVBLEdBQ2pCMWMsR0FBTzJjLGFBQWVBLEdBQ3RCM2MsR0FBTzBhLFVBQVlBLEdBQ25CMWEsR0FBTzFELEtBQU9BLEdBQ2QwRCxHQUFPcWUsT0FBU0EsR0FDaEJyZSxHQUFPcUwsU0FBV0EsR0FDbEJyTCxHQUFPMmlCLFdBL3JCUCxTQUFvQnBxRSxHQUNsQixPQUFPLFNBQVNxdUIsR0FDZCxPQUFpQixNQUFWcnVCLEVBQWlCM04sRUFBWTA4RCxHQUFRL3VELEVBQVFxdUIsS0E4ckJ4RG81QixHQUFPbVosS0FBT0EsR0FDZG5aLEdBQU9vWixRQUFVQSxHQUNqQnBaLEdBQU80aUIsVUFwc1JQLFNBQW1CdnFCLEVBQU81bEQsRUFBUThsRCxHQUNoQyxPQUFRRixHQUFTQSxFQUFNL3NELFFBQVVtSCxHQUFVQSxFQUFPbkgsT0FDOUNtaUUsR0FBWXBWLEVBQU81bEQsRUFBUW82RCxHQUFZdFUsRUFBVSxJQUNqREYsR0Frc1JOMkgsR0FBTzZpQixZQXhxUlAsU0FBcUJ4cUIsRUFBTzVsRCxFQUFReW1ELEdBQ2xDLE9BQVFiLEdBQVNBLEVBQU0vc0QsUUFBVW1ILEdBQVVBLEVBQU9uSCxPQUM5Q21pRSxHQUFZcFYsRUFBTzVsRCxFQUFRN0gsRUFBV3N1RCxHQUN0Q2IsR0FzcVJOMkgsR0FBT3FaLE9BQVNBLEdBQ2hCclosR0FBT2lnQixNQUFRQSxHQUNmamdCLEdBQU9rZ0IsV0FBYUEsR0FDcEJsZ0IsR0FBTzRjLE1BQVFBLEdBQ2Y1YyxHQUFPMzNCLE9BeHZOUCxTQUFnQnV4QixFQUFZaEIsR0FFMUIsT0FEV3JuRCxHQUFRcW9ELEdBQWNmLEdBQWNnTyxJQUNuQ2pOLEVBQVkwaUIsR0FBT3pQLEdBQVlqVSxFQUFXLE1BdXZOeERvSCxHQUFPaHNELE9Bem1SUCxTQUFnQnFrRCxFQUFPTyxHQUNyQixJQUFJamQsRUFBUyxHQUNiLElBQU0wYyxJQUFTQSxFQUFNL3NELE9BQ25CLE9BQU9xd0MsRUFFVCxJQUFJM3hCLEdBQVMsRUFDVDJqRCxFQUFVLEdBQ1ZyaUUsRUFBUytzRCxFQUFNL3NELE9BR25CLElBREFzdEQsRUFBWWlVLEdBQVlqVSxFQUFXLEtBQzFCNXVDLEVBQVExZSxHQUFRLENBQ3ZCLElBQUkyRCxFQUFRb3BELEVBQU1ydUMsR0FDZDR1QyxFQUFVM3BELEVBQU8rYSxFQUFPcXVDLEtBQzFCMWMsRUFBTzl2QyxLQUFLb0QsR0FDWjArRCxFQUFROWhFLEtBQUttZSxJQUlqQixPQURBMGpELEdBQVdyVixFQUFPc1YsR0FDWGh5QixHQXdsUlRxa0IsR0FBTzhpQixLQWx1TFAsU0FBYzVxQixFQUFNOFYsR0FDbEIsR0FBbUIsbUJBQVI5VixFQUNULE1BQU0sSUFBSXR2QixHQUFVa25CLEdBR3RCLE9BQU9pZSxHQUFTN1YsRUFEaEI4VixFQUFRQSxJQUFVcGpFLEVBQVlvakUsRUFBUWhyQixHQUFVZ3JCLEtBK3RMbERoTyxHQUFPaHVCLFFBQVVBLEdBQ2pCZ3VCLEdBQU8raUIsV0FodE5QLFNBQW9CbnBCLEVBQVlwdkIsRUFBR2tvQyxHQU9qQyxPQUxFbG9DLEdBREdrb0MsRUFBUUMsR0FBZS9ZLEVBQVlwdkIsRUFBR2tvQyxHQUFTbG9DLElBQU01L0IsR0FDcEQsRUFFQW80QyxHQUFVeFksSUFFTGo1QixHQUFRcW9ELEdBQWN3SSxHQUFrQmdNLElBQ3ZDeFUsRUFBWXB2QixJQTBzTjFCdzFCLEdBQU96cEQsSUF2NkZQLFNBQWFnQyxFQUFRcXVCLEVBQU0zM0IsR0FDekIsT0FBaUIsTUFBVnNKLEVBQWlCQSxFQUFTaTFELEdBQVFqMUQsRUFBUXF1QixFQUFNMzNCLElBdTZGekQrd0QsR0FBT2dqQixRQTU0RlAsU0FBaUJ6cUUsRUFBUXF1QixFQUFNMzNCLEVBQU95MEQsR0FFcEMsT0FEQUEsRUFBa0MsbUJBQWRBLEVBQTJCQSxFQUFhOTRELEVBQzNDLE1BQVYyTixFQUFpQkEsRUFBU2kxRCxHQUFRajFELEVBQVFxdUIsRUFBTTMzQixFQUFPeTBELElBMjRGaEUxRCxHQUFPaWpCLFFBMXJOUCxTQUFpQnJwQixHQUVmLE9BRFdyb0QsR0FBUXFvRCxHQUFjNEksR0FBZWlNLElBQ3BDN1UsSUF5ck5kb0csR0FBT3h1RCxNQWhqUlAsU0FBZTZtRCxFQUFPMlYsRUFBT1csR0FDM0IsSUFBSXJqRSxFQUFrQixNQUFUK3NELEVBQWdCLEVBQUlBLEVBQU0vc0QsT0FDdkMsT0FBS0EsR0FHRHFqRSxHQUFxQixpQkFBUEEsR0FBbUJnRSxHQUFldGEsRUFBTzJWLEVBQU9XLElBQ2hFWCxFQUFRLEVBQ1JXLEVBQU1yakUsSUFHTjBpRSxFQUFpQixNQUFUQSxFQUFnQixFQUFJaHJCLEdBQVVnckIsR0FDdENXLEVBQU1BLElBQVEvakUsRUFBWVUsRUFBUzAzQyxHQUFVMnJCLElBRXhDRCxHQUFVclcsRUFBTzJWLEVBQU9XLElBVnRCLElBOGlSWDNPLEdBQU8yYSxPQUFTQSxHQUNoQjNhLEdBQU9rakIsV0F4M1FQLFNBQW9CN3FCLEdBQ2xCLE9BQVFBLEdBQVNBLEVBQU0vc0QsT0FDbkJza0UsR0FBZXZYLEdBQ2YsSUFzM1FOMkgsR0FBT21qQixhQW4yUVAsU0FBc0I5cUIsRUFBT0UsR0FDM0IsT0FBUUYsR0FBU0EsRUFBTS9zRCxPQUNuQnNrRSxHQUFldlgsRUFBT3dVLEdBQVl0VSxFQUFVLElBQzVDLElBaTJRTnlILEdBQU9qcEQsTUE1aEVQLFNBQWUyakQsRUFBUTBvQixFQUFXbDBFLEdBS2hDLE9BSklBLEdBQXlCLGlCQUFUQSxHQUFxQnlqRSxHQUFlalksRUFBUTBvQixFQUFXbDBFLEtBQ3pFazBFLEVBQVlsMEUsRUFBUXRFLElBRXRCc0UsRUFBUUEsSUFBVXRFLEVBQVl5bEQsRUFBbUJuaEQsSUFBVSxJQUkzRHdyRCxFQUFTL29ELEdBQVMrb0QsTUFFUSxpQkFBYjBvQixHQUNPLE1BQWJBLElBQXNCdnJCLEdBQVN1ckIsT0FFcENBLEVBQVl0VCxHQUFhc1QsS0FDUDVuQixHQUFXZCxHQUNwQnVXLEdBQVVoVixHQUFjdkIsR0FBUyxFQUFHeHJELEdBR3hDd3JELEVBQU8zakQsTUFBTXFzRSxFQUFXbDBFLEdBWnRCLElBdWhFWDh3RCxHQUFPcWpCLE9BbnNMUCxTQUFnQm5yQixFQUFNOFYsR0FDcEIsR0FBbUIsbUJBQVI5VixFQUNULE1BQU0sSUFBSXR2QixHQUFVa25CLEdBR3RCLE9BREFrZSxFQUFpQixNQUFUQSxFQUFnQixFQUFJdFAsR0FBVTFiLEdBQVVnckIsR0FBUSxHQUNqREQsSUFBUyxTQUFTMzhELEdBQ3ZCLElBQUlpbkQsRUFBUWpuRCxFQUFLNDhELEdBQ2I4SixFQUFZN0csR0FBVTcvRCxFQUFNLEVBQUc0OEQsR0FLbkMsT0FISTNWLEdBQ0ZlLEdBQVUwZSxFQUFXemYsR0FFaEJud0IsR0FBTWd3QixFQUFNM3NELEtBQU11c0UsT0F3ckw3QjlYLEdBQU9zakIsS0FsMVFQLFNBQWNqckIsR0FDWixJQUFJL3NELEVBQWtCLE1BQVQrc0QsRUFBZ0IsRUFBSUEsRUFBTS9zRCxPQUN2QyxPQUFPQSxFQUFTb2pFLEdBQVVyVyxFQUFPLEVBQUcvc0QsR0FBVSxJQWkxUWhEMDBELEdBQU91akIsS0FyelFQLFNBQWNsckIsRUFBTzd0QixFQUFHa29DLEdBQ3RCLE9BQU1yYSxHQUFTQSxFQUFNL3NELE9BSWRvakUsR0FBVXJXLEVBQU8sR0FEeEI3dEIsRUFBS2tvQyxHQUFTbG9DLElBQU01L0IsRUFBYSxFQUFJbzRDLEdBQVV4WSxJQUNoQixFQUFJLEVBQUlBLEdBSDlCLElBb3pRWHcxQixHQUFPd2pCLFVBcnhRUCxTQUFtQm5yQixFQUFPN3RCLEVBQUdrb0MsR0FDM0IsSUFBSXBuRSxFQUFrQixNQUFUK3NELEVBQWdCLEVBQUlBLEVBQU0vc0QsT0FDdkMsT0FBS0EsRUFLRW9qRSxHQUFVclcsR0FEakI3dEIsRUFBSWwvQixHQURKay9CLEVBQUtrb0MsR0FBU2xvQyxJQUFNNS9CLEVBQWEsRUFBSW80QyxHQUFVeFksS0FFbkIsRUFBSSxFQUFJQSxFQUFHbC9CLEdBSjlCLElBbXhRWDAwRCxHQUFPeWpCLGVBenVRUCxTQUF3QnByQixFQUFPTyxHQUM3QixPQUFRUCxHQUFTQSxFQUFNL3NELE9BQ25COGtFLEdBQVUvWCxFQUFPd1UsR0FBWWpVLEVBQVcsSUFBSSxHQUFPLEdBQ25ELElBdXVRTm9ILEdBQU8wakIsVUFqc1FQLFNBQW1CcnJCLEVBQU9PLEdBQ3hCLE9BQVFQLEdBQVNBLEVBQU0vc0QsT0FDbkI4a0UsR0FBVS9YLEVBQU93VSxHQUFZalUsRUFBVyxJQUN4QyxJQStyUU5vSCxHQUFPMmpCLElBcHVQUCxTQUFhMTBFLEVBQU9pckUsR0FFbEIsT0FEQUEsRUFBWWpyRSxHQUNMQSxHQW11UFQrd0QsR0FBTzRqQixTQTlvTFAsU0FBa0IxckIsRUFBTXlOLEVBQU03ekQsR0FDNUIsSUFBSXNwRSxHQUFVLEVBQ1Z0SSxHQUFXLEVBRWYsR0FBbUIsbUJBQVI1YSxFQUNULE1BQU0sSUFBSXR2QixHQUFVa25CLEdBTXRCLE9BSkl6WCxHQUFTdm1DLEtBQ1hzcEUsRUFBVSxZQUFhdHBFLElBQVlBLEVBQVFzcEUsUUFBVUEsRUFDckR0SSxFQUFXLGFBQWNoaEUsSUFBWUEsRUFBUWdoRSxTQUFXQSxHQUVuRDU3RCxHQUFTZ2hELEVBQU15TixFQUFNLENBQzFCLFFBQVd5VixFQUNYLFFBQVd6VixFQUNYLFNBQVltTixLQWlvTGhCOVMsR0FBTzBULEtBQU9BLEdBQ2QxVCxHQUFPZ2QsUUFBVUEsR0FDakJoZCxHQUFPc2UsUUFBVUEsR0FDakJ0ZSxHQUFPdWUsVUFBWUEsR0FDbkJ2ZSxHQUFPNmpCLE9BcmZQLFNBQWdCNTBFLEdBQ2QsT0FBSXNDLEdBQVF0QyxHQUNIa3FELEdBQVNscUQsRUFBT3U0RCxJQUVsQlosR0FBUzMzRCxHQUFTLENBQUNBLEdBQVNxekQsR0FBVXlPLEdBQWFwL0QsR0FBUzFDLE1Ba2ZyRSt3RCxHQUFPdU0sY0FBZ0JBLEdBQ3ZCdk0sR0FBT25zRCxVQTEwRlAsU0FBbUIwRSxFQUFRZ2dELEVBQVVDLEdBQ25DLElBQUltSixFQUFRcHdELEdBQVFnSCxHQUNoQnVyRSxFQUFZbmlCLEdBQVNyRCxHQUFTL2xELElBQVcwL0MsR0FBYTEvQyxHQUcxRCxHQURBZ2dELEVBQVdzVSxHQUFZdFUsRUFBVSxHQUNkLE1BQWZDLEVBQXFCLENBQ3ZCLElBQUlrTSxFQUFPbnNELEdBQVVBLEVBQU8wMEIsWUFFMUJ1ckIsRUFERXNyQixFQUNZbmlCLEVBQVEsSUFBSStDLEVBQU8sR0FFMUJyc0IsR0FBUzkvQixJQUNGMndDLEdBQVd3YixHQUFRckUsR0FBVy9DLEdBQWEva0QsSUFHM0MsR0FNbEIsT0FIQ3VyRSxFQUFZcnJCLEdBQVk4TixJQUFZaHVELEdBQVEsU0FBU3RKLEVBQU8rYSxFQUFPelIsR0FDbEUsT0FBT2dnRCxFQUFTQyxFQUFhdnBELEVBQU8rYSxFQUFPelIsTUFFdENpZ0QsR0F1ekZUd0gsR0FBTytqQixNQXJuTFAsU0FBZTdyQixHQUNiLE9BQU9rYyxHQUFJbGMsRUFBTSxJQXFuTG5COEgsR0FBT3NaLE1BQVFBLEdBQ2Z0WixHQUFPdVosUUFBVUEsR0FDakJ2WixHQUFPd1osVUFBWUEsR0FDbkJ4WixHQUFPZ2tCLEtBem1RUCxTQUFjM3JCLEdBQ1osT0FBUUEsR0FBU0EsRUFBTS9zRCxPQUFVeWtFLEdBQVMxWCxHQUFTLElBeW1RckQySCxHQUFPaWtCLE9BL2tRUCxTQUFnQjVyQixFQUFPRSxHQUNyQixPQUFRRixHQUFTQSxFQUFNL3NELE9BQVV5a0UsR0FBUzFYLEVBQU93VSxHQUFZdFUsRUFBVSxJQUFNLElBK2tRL0V5SCxHQUFPa2tCLFNBeGpRUCxTQUFrQjdyQixFQUFPYSxHQUV2QixPQURBQSxFQUFrQyxtQkFBZEEsRUFBMkJBLEVBQWF0dUQsRUFDcER5dEQsR0FBU0EsRUFBTS9zRCxPQUFVeWtFLEdBQVMxWCxFQUFPenRELEVBQVdzdUQsR0FBYyxJQXVqUTVFOEcsR0FBT21rQixNQWh5RlAsU0FBZTVyRSxFQUFRcXVCLEdBQ3JCLE9BQWlCLE1BQVZydUIsR0FBd0JzMUQsR0FBVXQxRCxFQUFRcXVCLElBZ3lGbkRvNUIsR0FBT3laLE1BQVFBLEdBQ2Z6WixHQUFPMlosVUFBWUEsR0FDbkIzWixHQUFPNTRCLE9BcHdGUCxTQUFnQjd1QixFQUFRcXVCLEVBQU11cEMsR0FDNUIsT0FBaUIsTUFBVjUzRCxFQUFpQkEsRUFBUzIzRCxHQUFXMzNELEVBQVFxdUIsRUFBTWtxQyxHQUFhWCxLQW93RnpFblEsR0FBT29rQixXQXp1RlAsU0FBb0I3ckUsRUFBUXF1QixFQUFNdXBDLEVBQVN6TSxHQUV6QyxPQURBQSxFQUFrQyxtQkFBZEEsRUFBMkJBLEVBQWE5NEQsRUFDM0MsTUFBVjJOLEVBQWlCQSxFQUFTMjNELEdBQVczM0QsRUFBUXF1QixFQUFNa3FDLEdBQWFYLEdBQVV6TSxJQXd1Rm5GMUQsR0FBT3Z0RCxPQUFTQSxHQUNoQnV0RCxHQUFPcWtCLFNBaHJGUCxTQUFrQjlyRSxHQUNoQixPQUFpQixNQUFWQSxFQUFpQixHQUFLc2lELEdBQVd0aUQsRUFBUStyRCxHQUFPL3JELEtBZ3JGekR5bkQsR0FBTzRaLFFBQVVBLEdBQ2pCNVosR0FBT2dULE1BQVFBLEdBQ2ZoVCxHQUFPc2tCLEtBM21MUCxTQUFjcjFFLEVBQU9tNUMsR0FDbkIsT0FBT3MwQixHQUFRNUwsR0FBYTFvQixHQUFVbjVDLElBMm1MeEMrd0QsR0FBTzZaLElBQU1BLEdBQ2I3WixHQUFPOFosTUFBUUEsR0FDZjlaLEdBQU8rWixRQUFVQSxHQUNqQi9aLEdBQU9nYSxJQUFNQSxHQUNiaGEsR0FBT3VrQixVQWozUFAsU0FBbUJ4N0MsRUFBT3QyQixHQUN4QixPQUFPaStELEdBQWMzbkMsR0FBUyxHQUFJdDJCLEdBQVUsR0FBSWt3RCxLQWkzUGxEM0MsR0FBT3drQixjQS8xUFAsU0FBdUJ6N0MsRUFBT3QyQixHQUM1QixPQUFPaStELEdBQWMzbkMsR0FBUyxHQUFJdDJCLEdBQVUsR0FBSSs2RCxLQSsxUGxEeE4sR0FBT2lhLFFBQVVBLEdBR2pCamEsR0FBT3hrQixRQUFVOGlDLEdBQ2pCdGUsR0FBT3lrQixVQUFZbEcsR0FDbkJ2ZSxHQUFPMGtCLE9BQVN0SCxHQUNoQnBkLEdBQU8ya0IsV0FBYXRILEdBR3BCdUMsR0FBTTVmLEdBQVFBLElBS2RBLEdBQU9wa0QsSUFBTUEsR0FDYm9rRCxHQUFPc2YsUUFBVUEsR0FDakJ0ZixHQUFPd2UsVUFBWUEsR0FDbkJ4ZSxHQUFPMGUsV0FBYUEsR0FDcEIxZSxHQUFPMStDLEtBQU9BLEdBQ2QwK0MsR0FBTzRrQixNQXByRlAsU0FBZXZoQixFQUFRQyxFQUFPQyxHQWE1QixPQVpJQSxJQUFVMzRELElBQ1oyNEQsRUFBUUQsRUFDUkEsRUFBUTE0RCxHQUVOMjRELElBQVUzNEQsSUFFWjI0RCxHQURBQSxFQUFRNXJCLEdBQVM0ckIsS0FDQ0EsRUFBUUEsRUFBUSxHQUVoQ0QsSUFBVTE0RCxJQUVaMDRELEdBREFBLEVBQVEzckIsR0FBUzJyQixLQUNDQSxFQUFRQSxFQUFRLEdBRTdCZixHQUFVNXFCLEdBQVMwckIsR0FBU0MsRUFBT0MsSUF3cUY1Q3ZELEdBQU9sbUMsTUE3akxQLFNBQWU3cUIsR0FDYixPQUFPdTBELEdBQVV2MEQsRUFyelZJLElBazNnQnZCK3dELEdBQU82a0IsVUFwZ0xQLFNBQW1CNTFFLEdBQ2pCLE9BQU91MEQsR0FBVXYwRCxFQUFPa3ZFLElBb2dMMUJuZSxHQUFPOGtCLGNBcitLUCxTQUF1QjcxRSxFQUFPeTBELEdBRTVCLE9BQU9GLEdBQVV2MEQsRUFBT2t2RSxFQUR4QnphLEVBQWtDLG1CQUFkQSxFQUEyQkEsRUFBYTk0RCxJQXErSzlEbzFELEdBQU8ra0IsVUE3aExQLFNBQW1COTFFLEVBQU95MEQsR0FFeEIsT0FBT0YsR0FBVXYwRCxFQXoxVkksRUF3MVZyQnkwRCxFQUFrQyxtQkFBZEEsRUFBMkJBLEVBQWE5NEQsSUE2aEw5RG8xRCxHQUFPZ2xCLFdBMThLUCxTQUFvQnpzRSxFQUFRekYsR0FDMUIsT0FBaUIsTUFBVkEsR0FBa0IyeUQsR0FBZWx0RCxFQUFRekYsRUFBUTNCLEdBQUsyQixLQTA4Sy9Ea3RELEdBQU9pVCxPQUFTQSxHQUNoQmpULEdBQU9pbEIsVUExeENQLFNBQW1CaDJFLEVBQU9tbUUsR0FDeEIsT0FBaUIsTUFBVG5tRSxHQUFpQkEsR0FBVUEsRUFBU21tRSxFQUFlbm1FLEdBMHhDN0Qrd0QsR0FBT3FnQixPQUFTQSxHQUNoQnJnQixHQUFPeGxDLFNBejlFUCxTQUFrQmtnQyxFQUFRM21ELEVBQVFzVyxHQUNoQ3F3QyxFQUFTL29ELEdBQVMrb0QsR0FDbEIzbUQsRUFBUys3RCxHQUFhLzdELEdBRXRCLElBQUl6SSxFQUFTb3ZELEVBQU9wdkQsT0FLaEJxakUsRUFKSnRrRCxFQUFXQSxJQUFhemYsRUFDcEJVLEVBQ0FpM0QsR0FBVXZmLEdBQVUzNEIsR0FBVyxFQUFHL2UsR0FJdEMsT0FEQStlLEdBQVl0VyxFQUFPekksU0FDQSxHQUFLb3ZELEVBQU9scEQsTUFBTTZZLEVBQVVza0QsSUFBUTU2RCxHQSs4RXpEaXNELEdBQU9qckIsR0FBS0EsR0FDWmlyQixHQUFPa2xCLE9BajdFUCxTQUFnQnhxQixHQUVkLE9BREFBLEVBQVMvb0QsR0FBUytvRCxLQUNBbEksRUFBbUI1akIsS0FBSzhyQixHQUN0Q0EsRUFBT250RCxRQUFRK2tELEVBQWlCK0ksSUFDaENYLEdBODZFTnNGLEdBQU85OEMsYUE1NUVQLFNBQXNCdzNDLEdBRXBCLE9BREFBLEVBQVMvb0QsR0FBUytvRCxLQUNBMUgsR0FBZ0Jwa0IsS0FBSzhyQixHQUNuQ0EsRUFBT250RCxRQUFRd2xELEdBQWMsUUFDN0IySCxHQXk1RU5zRixHQUFPbWxCLE1BNTdPUCxTQUFldnJCLEVBQVloQixFQUFXOFosR0FDcEMsSUFBSXhhLEVBQU8zbUQsR0FBUXFvRCxHQUFjakIsR0FBYStOLEdBSTlDLE9BSElnTSxHQUFTQyxHQUFlL1ksRUFBWWhCLEVBQVc4WixLQUNqRDlaLEVBQVlodUQsR0FFUHN0RCxFQUFLMEIsRUFBWWlULEdBQVlqVSxFQUFXLEtBdzdPakRvSCxHQUFPdnlELEtBQU9BLEdBQ2R1eUQsR0FBTzZZLFVBQVlBLEdBQ25CN1ksR0FBT29sQixRQXJ4SFAsU0FBaUI3c0UsRUFBUXFnRCxHQUN2QixPQUFPZSxHQUFZcGhELEVBQVFzMEQsR0FBWWpVLEVBQVcsR0FBSTJOLEtBcXhIeER2RyxHQUFPcWEsU0FBV0EsR0FDbEJyYSxHQUFPOFksY0FBZ0JBLEdBQ3ZCOVksR0FBT3FsQixZQWp2SFAsU0FBcUI5c0UsRUFBUXFnRCxHQUMzQixPQUFPZSxHQUFZcGhELEVBQVFzMEQsR0FBWWpVLEVBQVcsR0FBSTZOLEtBaXZIeER6RyxHQUFPbDJCLE1BQVFBLEdBQ2ZrMkIsR0FBT2x2RCxRQUFVQSxHQUNqQmt2RCxHQUFPc2EsYUFBZUEsR0FDdEJ0YSxHQUFPc2xCLE1BcnRIUCxTQUFlL3NFLEVBQVFnZ0QsR0FDckIsT0FBaUIsTUFBVmhnRCxFQUNIQSxFQUNBMnVELEdBQVEzdUQsRUFBUXMwRCxHQUFZdFUsRUFBVSxHQUFJK0wsS0FtdEhoRHRFLEdBQU91bEIsV0F0ckhQLFNBQW9CaHRFLEVBQVFnZ0QsR0FDMUIsT0FBaUIsTUFBVmhnRCxFQUNIQSxFQUNBNnVELEdBQWE3dUQsRUFBUXMwRCxHQUFZdFUsRUFBVSxHQUFJK0wsS0FvckhyRHRFLEdBQU93bEIsT0FycEhQLFNBQWdCanRFLEVBQVFnZ0QsR0FDdEIsT0FBT2hnRCxHQUFVZ3VELEdBQVdodUQsRUFBUXMwRCxHQUFZdFUsRUFBVSxLQXFwSDVEeUgsR0FBT3lsQixZQXhuSFAsU0FBcUJsdEUsRUFBUWdnRCxHQUMzQixPQUFPaGdELEdBQVVrdUQsR0FBZ0JsdUQsRUFBUXMwRCxHQUFZdFUsRUFBVSxLQXduSGpFeUgsR0FBTzlwRCxJQUFNQSxHQUNiOHBELEdBQU83dUIsR0FBS0EsR0FDWjZ1QixHQUFPN3FCLElBQU1BLEdBQ2I2cUIsR0FBT2xtQixJQXpnSFAsU0FBYXZoQyxFQUFRcXVCLEdBQ25CLE9BQWlCLE1BQVZydUIsR0FBa0JnL0QsR0FBUWgvRCxFQUFRcXVCLEVBQU11aEMsS0F5Z0hqRG5JLEdBQU8rTCxNQUFRQSxHQUNmL0wsR0FBT3JoQixLQUFPQSxHQUNkcWhCLEdBQU9rTCxTQUFXQSxHQUNsQmxMLEdBQU92cEMsU0E1cE9QLFNBQWtCbWpDLEVBQVkzcUQsRUFBTzBwQyxFQUFXKzVCLEdBQzlDOVksRUFBYThSLEdBQVk5UixHQUFjQSxFQUFhbm5ELEdBQU9tbkQsR0FDM0RqaEIsRUFBYUEsSUFBYys1QixFQUFTMXZCLEdBQVVySyxHQUFhLEVBRTNELElBQUlydEMsRUFBU3N1RCxFQUFXdHVELE9BSXhCLE9BSElxdEMsRUFBWSxJQUNkQSxFQUFZK2xCLEdBQVVwekQsRUFBU3F0QyxFQUFXLElBRXJDb2tDLEdBQVNuakIsR0FDWGpoQixHQUFhcnRDLEdBQVVzdUQsRUFBV2x5QixRQUFRejRCLEVBQU8wcEMsSUFBYyxJQUM3RHJ0QyxHQUFVMHRELEdBQVlZLEVBQVkzcUQsRUFBTzBwQyxJQUFjLEdBbXBPaEVxbkIsR0FBT3Q0QixRQTlsU1AsU0FBaUIyd0IsRUFBT3BwRCxFQUFPMHBDLEdBQzdCLElBQUlydEMsRUFBa0IsTUFBVCtzRCxFQUFnQixFQUFJQSxFQUFNL3NELE9BQ3ZDLElBQUtBLEVBQ0gsT0FBUSxFQUVWLElBQUkwZSxFQUFxQixNQUFiMnVCLEVBQW9CLEVBQUlxSyxHQUFVckssR0FJOUMsT0FISTN1QixFQUFRLElBQ1ZBLEVBQVEwMEMsR0FBVXB6RCxFQUFTMGUsRUFBTyxJQUU3Qmd2QyxHQUFZWCxFQUFPcHBELEVBQU8rYSxJQXNsU25DZzJDLEdBQU8wbEIsUUFscUZQLFNBQWlCcmlCLEVBQVEySyxFQUFPVyxHQVM5QixPQVJBWCxFQUFRMEgsR0FBUzFILEdBQ2JXLElBQVEvakUsR0FDVitqRSxFQUFNWCxFQUNOQSxFQUFRLEdBRVJXLEVBQU0rRyxHQUFTL0csR0Fyc1ZuQixTQUFxQnRMLEVBQVEySyxFQUFPVyxHQUNsQyxPQUFPdEwsR0FBVTFFLEdBQVVxUCxFQUFPVyxJQUFRdEwsRUFBUzNFLEdBQVVzUCxFQUFPVyxHQXVzVjdEZ1gsQ0FEUHRpQixFQUFTMXJCLEdBQVMwckIsR0FDUzJLLEVBQU9XLElBMHBGcEMzTyxHQUFPemMsT0FBU0EsR0FDaEJ5YyxHQUFPNkIsWUFBY0EsR0FDckI3QixHQUFPenVELFFBQVVBLEdBQ2pCeXVELEdBQU96SSxjQUFnQkEsR0FDdkJ5SSxHQUFPMEwsWUFBY0EsR0FDckIxTCxHQUFPcU0sa0JBQW9CQSxHQUMzQnJNLEdBQU80bEIsVUF0d0tQLFNBQW1CMzJFLEdBQ2pCLE9BQWlCLElBQVZBLElBQTRCLElBQVZBLEdBQ3RCZ3hELEdBQWFoeEQsSUFBVTI0RCxHQUFXMzRELElBQVV3aEQsR0Fxd0tqRHVQLEdBQU8xQixTQUFXQSxHQUNsQjBCLEdBQU92SSxPQUFTQSxHQUNoQnVJLEdBQU82bEIsVUE3c0tQLFNBQW1CNTJFLEdBQ2pCLE9BQU9neEQsR0FBYWh4RCxJQUE2QixJQUFuQkEsRUFBTThuRCxXQUFtQnVWLEdBQWNyOUQsSUE2c0t2RSt3RCxHQUFPOGxCLFFBenFLUCxTQUFpQjcyRSxHQUNmLEdBQWEsTUFBVEEsRUFDRixPQUFPLEVBRVQsR0FBSXk4RCxHQUFZejhELEtBQ1hzQyxHQUFRdEMsSUFBMEIsaUJBQVRBLEdBQTRDLG1CQUFoQkEsRUFBTXdpQyxRQUMxRDZzQixHQUFTcnZELElBQVVncEQsR0FBYWhwRCxJQUFVNHlELEdBQVk1eUQsSUFDMUQsT0FBUUEsRUFBTTNELE9BRWhCLElBQUlrM0MsRUFBTXdoQixHQUFPLzBELEdBQ2pCLEdBQUl1ekMsR0FBT3NPLEdBQVV0TyxHQUFPMk8sRUFDMUIsT0FBUWxpRCxFQUFNaEUsS0FFaEIsR0FBSXNnRSxHQUFZdDhELEdBQ2QsT0FBUXE4RCxHQUFTcjhELEdBQU8zRCxPQUUxQixJQUFLLElBQUltRyxLQUFPeEMsRUFDZCxHQUFJYSxHQUFlQyxLQUFLZCxFQUFPd0MsR0FDN0IsT0FBTyxFQUdYLE9BQU8sR0FxcEtUdXVELEdBQU83bEMsUUF0bktQLFNBQWlCbHJCLEVBQU9pNUQsR0FDdEIsT0FBT2EsR0FBWTk1RCxFQUFPaTVELElBc25LNUJsSSxHQUFPK2xCLFlBbmxLUCxTQUFxQjkyRSxFQUFPaTVELEVBQU94RSxHQUVqQyxJQUFJL25CLEdBREorbkIsRUFBa0MsbUJBQWRBLEVBQTJCQSxFQUFhOTRELEdBQ2xDODRELEVBQVd6MEQsRUFBT2k1RCxHQUFTdDlELEVBQ3JELE9BQU8rd0MsSUFBVy93QyxFQUFZbStELEdBQVk5NUQsRUFBT2k1RCxFQUFPdDlELEVBQVc4NEQsS0FBZ0IvbkIsR0FpbEtyRnFrQixHQUFPNmMsUUFBVUEsR0FDakI3YyxHQUFPaHJCLFNBMWhLUCxTQUFrQi9sQyxHQUNoQixNQUF1QixpQkFBVEEsR0FBcUJzdkQsR0FBZXR2RCxJQTBoS3BEK3dELEdBQU85VyxXQUFhQSxHQUNwQjhXLEdBQU9yckIsVUFBWUEsR0FDbkJxckIsR0FBT3lYLFNBQVdBLEdBQ2xCelgsR0FBT3JJLE1BQVFBLEdBQ2ZxSSxHQUFPZ21CLFFBMTFKUCxTQUFpQnp0RSxFQUFRekYsR0FDdkIsT0FBT3lGLElBQVd6RixHQUFVNjNELEdBQVlweUQsRUFBUXpGLEVBQVE2NEQsR0FBYTc0RCxLQTAxSnZFa3RELEdBQU9pbUIsWUF2ekpQLFNBQXFCMXRFLEVBQVF6RixFQUFRNHdELEdBRW5DLE9BREFBLEVBQWtDLG1CQUFkQSxFQUEyQkEsRUFBYTk0RCxFQUNyRCsvRCxHQUFZcHlELEVBQVF6RixFQUFRNjRELEdBQWE3NEQsR0FBUzR3RCxJQXN6SjNEMUQsR0FBT2pwQyxNQXZ4SlAsU0FBZTluQixHQUliLE9BQU82dEUsR0FBUzd0RSxJQUFVQSxJQUFVQSxHQW94SnRDK3dELEdBQU9rbUIsU0F2dkpQLFNBQWtCajNFLEdBQ2hCLEdBQUkyb0UsR0FBVzNvRSxHQUNiLE1BQU0sSUFBSTI4QixHQXRzWE0sbUVBd3NYbEIsT0FBT28vQixHQUFhLzdELElBb3ZKdEIrd0QsR0FBT21tQixNQXhzSlAsU0FBZWwzRSxHQUNiLE9BQWdCLE1BQVRBLEdBd3NKVCt3RCxHQUFPb21CLE9BanVKUCxTQUFnQm4zRSxHQUNkLE9BQWlCLE9BQVZBLEdBaXVKVCt3RCxHQUFPOGMsU0FBV0EsR0FDbEI5YyxHQUFPM25CLFNBQVdBLEdBQ2xCMm5CLEdBQU9DLGFBQWVBLEdBQ3RCRCxHQUFPc00sY0FBZ0JBLEdBQ3ZCdE0sR0FBT25JLFNBQVdBLEdBQ2xCbUksR0FBT3FtQixjQXJsSlAsU0FBdUJwM0UsR0FDckIsT0FBTzBsQyxHQUFVMWxDLElBQVVBLElBQVMsa0JBQXFCQSxHQUFTazdCLEdBcWxKcEU2MUIsR0FBT2pJLE1BQVFBLEdBQ2ZpSSxHQUFPK2MsU0FBV0EsR0FDbEIvYyxHQUFPNEcsU0FBV0EsR0FDbEI1RyxHQUFPL0gsYUFBZUEsR0FDdEIrSCxHQUFPc21CLFlBbi9JUCxTQUFxQnIzRSxHQUNuQixPQUFPQSxJQUFVckUsR0FtL0luQm8xRCxHQUFPdW1CLFVBLzlJUCxTQUFtQnQzRSxHQUNqQixPQUFPZ3hELEdBQWFoeEQsSUFBVSswRCxHQUFPLzBELElBQVVxaUQsR0ErOUlqRDBPLEdBQU93bUIsVUEzOElQLFNBQW1CdjNFLEdBQ2pCLE9BQU9neEQsR0FBYWh4RCxJQW42WFAsb0JBbTZYaUIyNEQsR0FBVzM0RCxJQTI4STNDK3dELEdBQU9qMEQsS0F6L1JQLFNBQWNzc0QsRUFBTytxQixHQUNuQixPQUFnQixNQUFUL3FCLEVBQWdCLEdBQUttRyxHQUFXenVELEtBQUtzb0QsRUFBTytxQixJQXkvUnJEcGpCLEdBQU80ZSxVQUFZQSxHQUNuQjVlLEdBQU9waEIsS0FBT0EsR0FDZG9oQixHQUFPeW1CLFlBaDlSUCxTQUFxQnB1QixFQUFPcHBELEVBQU8wcEMsR0FDakMsSUFBSXJ0QyxFQUFrQixNQUFUK3NELEVBQWdCLEVBQUlBLEVBQU0vc0QsT0FDdkMsSUFBS0EsRUFDSCxPQUFRLEVBRVYsSUFBSTBlLEVBQVExZSxFQUtaLE9BSklxdEMsSUFBYy90QyxJQUVoQm9mLEdBREFBLEVBQVFnNUIsR0FBVXJLLElBQ0YsRUFBSStsQixHQUFVcHpELEVBQVMwZSxFQUFPLEdBQUsyMEMsR0FBVTMwQyxFQUFPMWUsRUFBUyxJQUV4RTJELEdBQVVBLEVBcnZNckIsU0FBMkJvcEQsRUFBT3BwRCxFQUFPMHBDLEdBRXZDLElBREEsSUFBSTN1QixFQUFRMnVCLEVBQVksRUFDakIzdUIsS0FDTCxHQUFJcXVDLEVBQU1ydUMsS0FBVy9hLEVBQ25CLE9BQU8rYSxFQUdYLE9BQU9BLEVBK3VNRDA4RCxDQUFrQnJ1QixFQUFPcHBELEVBQU8rYSxHQUNoQzh2QyxHQUFjekIsRUFBTzRCLEdBQVdqd0MsR0FBTyxJQXE4UjdDZzJDLEdBQU82ZSxVQUFZQSxHQUNuQjdlLEdBQU84ZSxXQUFhQSxHQUNwQjllLEdBQU8vdUIsR0FBS0EsR0FDWit1QixHQUFPMXFCLElBQU1BLEdBQ2IwcUIsR0FBT3IwQixJQWhmUCxTQUFhMHNCLEdBQ1gsT0FBUUEsR0FBU0EsRUFBTS9zRCxPQUNuQnE3RCxHQUFhdE8sRUFBTzZTLEdBQVVqRCxJQUM5QnI5RCxHQThlTm8xRCxHQUFPMm1CLE1BcGRQLFNBQWV0dUIsRUFBT0UsR0FDcEIsT0FBUUYsR0FBU0EsRUFBTS9zRCxPQUNuQnE3RCxHQUFhdE8sRUFBT3dVLEdBQVl0VSxFQUFVLEdBQUkwUCxJQUM5Q3I5RCxHQWtkTm8xRCxHQUFPNG1CLEtBamNQLFNBQWN2dUIsR0FDWixPQUFPOEIsR0FBUzlCLEVBQU82UyxLQWljekJsTCxHQUFPNm1CLE9BdmFQLFNBQWdCeHVCLEVBQU9FLEdBQ3JCLE9BQU80QixHQUFTOUIsRUFBT3dVLEdBQVl0VSxFQUFVLEtBdWEvQ3lILEdBQU90MEIsSUFsWlAsU0FBYTJzQixHQUNYLE9BQVFBLEdBQVNBLEVBQU0vc0QsT0FDbkJxN0QsR0FBYXRPLEVBQU82UyxHQUFVTSxJQUM5QjVnRSxHQWdaTm8xRCxHQUFPOG1CLE1BdFhQLFNBQWV6dUIsRUFBT0UsR0FDcEIsT0FBUUYsR0FBU0EsRUFBTS9zRCxPQUNuQnE3RCxHQUFhdE8sRUFBT3dVLEdBQVl0VSxFQUFVLEdBQUlpVCxJQUM5QzVnRSxHQW9YTm8xRCxHQUFPc1gsVUFBWUEsR0FDbkJ0WCxHQUFPNlgsVUFBWUEsR0FDbkI3WCxHQUFPK21CLFdBenRCUCxXQUNFLE1BQU8sSUF5dEJUL21CLEdBQU9nbkIsV0F6c0JQLFdBQ0UsTUFBTyxJQXlzQlRobkIsR0FBT2luQixTQXpyQlAsV0FDRSxPQUFPLEdBeXJCVGpuQixHQUFPNXRCLFNBQVdBLEdBQ2xCNHRCLEdBQU9rbkIsSUE3N1JQLFNBQWE3dUIsRUFBTzd0QixHQUNsQixPQUFRNnRCLEdBQVNBLEVBQU0vc0QsT0FBVW1oRSxHQUFRcFUsRUFBT3JWLEdBQVV4WSxJQUFNNS9CLEdBNjdSbEVvMUQsR0FBT21uQixXQWxpQ1AsV0FJRSxPQUhJdHdCLEdBQUt2bEQsSUFBTS9GLE9BQ2JzckQsR0FBS3ZsRCxFQUFJMnJELElBRUoxeEQsTUEraENUeTBELEdBQU9tVyxLQUFPQSxHQUNkblcsR0FBTzdiLElBQU1BLEdBQ2I2YixHQUFPb25CLElBajVFUCxTQUFhMXNCLEVBQVFwdkQsRUFBUWtxRSxHQUMzQjlhLEVBQVMvb0QsR0FBUytvRCxHQUdsQixJQUFJMnNCLEdBRkovN0UsRUFBUzAzQyxHQUFVMTNDLElBRU13d0QsR0FBV3BCLEdBQVUsRUFDOUMsSUFBS3B2RCxHQUFVKzdFLEdBQWEvN0UsRUFDMUIsT0FBT292RCxFQUVULElBQUl1VSxHQUFPM2pFLEVBQVMrN0UsR0FBYSxFQUNqQyxPQUNFOVIsR0FBY3BYLEdBQVk4USxHQUFNdUcsR0FDaEM5YSxFQUNBNmEsR0FBY3JYLEdBQVcrUSxHQUFNdUcsSUFzNEVuQ3hWLEdBQU9zbkIsT0EzMkVQLFNBQWdCNXNCLEVBQVFwdkQsRUFBUWtxRSxHQUM5QjlhLEVBQVMvb0QsR0FBUytvRCxHQUdsQixJQUFJMnNCLEdBRkovN0UsRUFBUzAzQyxHQUFVMTNDLElBRU13d0QsR0FBV3BCLEdBQVUsRUFDOUMsT0FBUXB2RCxHQUFVKzdFLEVBQVkvN0UsRUFDekJvdkQsRUFBUzZhLEdBQWNqcUUsRUFBUys3RSxFQUFXN1IsR0FDNUM5YSxHQXEyRU5zRixHQUFPdW5CLFNBMzBFUCxTQUFrQjdzQixFQUFRcHZELEVBQVFrcUUsR0FDaEM5YSxFQUFTL29ELEdBQVMrb0QsR0FHbEIsSUFBSTJzQixHQUZKLzdFLEVBQVMwM0MsR0FBVTEzQyxJQUVNd3dELEdBQVdwQixHQUFVLEVBQzlDLE9BQVFwdkQsR0FBVSs3RSxFQUFZLzdFLEVBQ3pCaXFFLEdBQWNqcUUsRUFBUys3RSxFQUFXN1IsR0FBUzlhLEVBQzVDQSxHQXEwRU5zRixHQUFPcGdDLFNBMXlFUCxTQUFrQjg2QixFQUFROHNCLEVBQU85VSxHQU0vQixPQUxJQSxHQUFrQixNQUFUOFUsRUFDWEEsRUFBUSxFQUNDQSxJQUNUQSxHQUFTQSxHQUVKM29CLEdBQWVsdEQsR0FBUytvRCxHQUFRbnRELFFBQVEwbEQsR0FBYSxJQUFLdTBCLEdBQVMsSUFxeUU1RXhuQixHQUFPNXVCLE9BMXJGUCxTQUFnQmt5QixFQUFPQyxFQUFPa2tCLEdBMkI1QixHQTFCSUEsR0FBK0Isa0JBQVpBLEdBQXlCOVUsR0FBZXJQLEVBQU9DLEVBQU9ra0IsS0FDM0Vsa0IsRUFBUWtrQixFQUFXNzhFLEdBRWpCNjhFLElBQWE3OEUsSUFDSyxrQkFBVDI0RCxHQUNUa2tCLEVBQVdsa0IsRUFDWEEsRUFBUTM0RCxHQUVlLGtCQUFUMDRELElBQ2Rta0IsRUFBV25rQixFQUNYQSxFQUFRMTRELElBR1IwNEQsSUFBVTE0RCxHQUFhMjRELElBQVUzNEQsR0FDbkMwNEQsRUFBUSxFQUNSQyxFQUFRLElBR1JELEVBQVFvUyxHQUFTcFMsR0FDYkMsSUFBVTM0RCxHQUNaMjRELEVBQVFELEVBQ1JBLEVBQVEsR0FFUkMsRUFBUW1TLEdBQVNuUyxJQUdqQkQsRUFBUUMsRUFBTyxDQUNqQixJQUFJanhCLEVBQU9neEIsRUFDWEEsRUFBUUMsRUFDUkEsRUFBUWp4QixFQUVWLEdBQUltMUMsR0FBWW5rQixFQUFRLEdBQUtDLEVBQVEsRUFBRyxDQUN0QyxJQUFJanlCLEVBQU93dEIsS0FDWCxPQUFPSCxHQUFVMkUsRUFBU2h5QixHQUFRaXlCLEVBQVFELEVBQVE5TSxHQUFlLFFBQVVsbEIsRUFBTyxJQUFJaG1DLE9BQVMsS0FBT2k0RCxHQUV4RyxPQUFPcEIsR0FBV21CLEVBQU9DLElBdXBGM0J2RCxHQUFPMG5CLE9BNStOUCxTQUFnQjl0QixFQUFZckIsRUFBVUMsR0FDcEMsSUFBSU4sRUFBTzNtRCxHQUFRcW9ELEdBQWNQLEdBQWNpQixHQUMzQ2hCLEVBQVlueEIsVUFBVTc4QixPQUFTLEVBRW5DLE9BQU80c0QsRUFBSzBCLEVBQVlpVCxHQUFZdFUsRUFBVSxHQUFJQyxFQUFhYyxFQUFXeUosS0F5K041RS9DLEdBQU8ybkIsWUFoOU5QLFNBQXFCL3RCLEVBQVlyQixFQUFVQyxHQUN6QyxJQUFJTixFQUFPM21ELEdBQVFxb0QsR0FBY0wsR0FBbUJlLEdBQ2hEaEIsRUFBWW54QixVQUFVNzhCLE9BQVMsRUFFbkMsT0FBTzRzRCxFQUFLMEIsRUFBWWlULEdBQVl0VSxFQUFVLEdBQUlDLEVBQWFjLEVBQVdrTixLQTY4TjVFeEcsR0FBTzRuQixPQS93RVAsU0FBZ0JsdEIsRUFBUWx3QixFQUFHa29DLEdBTXpCLE9BSkVsb0MsR0FER2tvQyxFQUFRQyxHQUFlalksRUFBUWx3QixFQUFHa29DLEdBQVNsb0MsSUFBTTUvQixHQUNoRCxFQUVBbzRDLEdBQVV4WSxHQUVUc2pDLEdBQVduOEQsR0FBUytvRCxHQUFTbHdCLElBMHdFdEN3MUIsR0FBT3p5RCxRQXB2RVAsV0FDRSxJQUFJNkQsRUFBTysyQixVQUNQdXlCLEVBQVMvb0QsR0FBU1AsRUFBSyxJQUUzQixPQUFPQSxFQUFLOUYsT0FBUyxFQUFJb3ZELEVBQVNBLEVBQU9udEQsUUFBUTZELEVBQUssR0FBSUEsRUFBSyxLQWl2RWpFNHVELEdBQU9ya0IsT0F0b0dQLFNBQWdCcGpDLEVBQVFxdUIsRUFBTXd1QyxHQUc1QixJQUFJcHJELEdBQVMsRUFDVDFlLEdBSEpzN0IsRUFBTzJnQyxHQUFTM2dDLEVBQU1ydUIsSUFHSmpOLE9BT2xCLElBSktBLElBQ0hBLEVBQVMsRUFDVGlOLEVBQVMzTixLQUVGb2YsRUFBUTFlLEdBQVEsQ0FDdkIsSUFBSTJELEVBQWtCLE1BQVZzSixFQUFpQjNOLEVBQVkyTixFQUFPaXZELEdBQU01Z0MsRUFBSzVjLEtBQ3ZEL2EsSUFBVXJFLElBQ1pvZixFQUFRMWUsRUFDUjJELEVBQVFtbUUsR0FFVjc4RCxFQUFTMndDLEdBQVdqNkMsR0FBU0EsRUFBTWMsS0FBS3dJLEdBQVV0SixFQUVwRCxPQUFPc0osR0FvbkdUeW5ELEdBQU9oL0MsTUFBUUEsR0FDZmcvQyxHQUFPM0QsYUFBZUEsRUFDdEIyRCxHQUFPNm5CLE9BMTVOUCxTQUFnQmp1QixHQUVkLE9BRFdyb0QsR0FBUXFvRCxHQUFjc0ksR0FBY2lNLElBQ25DdlUsSUF5NU5kb0csR0FBTy8wRCxLQS8wTlAsU0FBYzJ1RCxHQUNaLEdBQWtCLE1BQWRBLEVBQ0YsT0FBTyxFQUVULEdBQUk4UixHQUFZOVIsR0FDZCxPQUFPbWpCLEdBQVNuakIsR0FBY2tDLEdBQVdsQyxHQUFjQSxFQUFXdHVELE9BRXBFLElBQUlrM0MsRUFBTXdoQixHQUFPcEssR0FDakIsT0FBSXBYLEdBQU9zTyxHQUFVdE8sR0FBTzJPLEVBQ25CeUksRUFBVzN1RCxLQUVicWdFLEdBQVMxUixHQUFZdHVELFFBcTBOOUIwMEQsR0FBTytlLFVBQVlBLEdBQ25CL2UsR0FBTzhuQixLQS94TlAsU0FBY2x1QixFQUFZaEIsRUFBVzhaLEdBQ25DLElBQUl4YSxFQUFPM21ELEdBQVFxb0QsR0FBY0osR0FBWW9WLEdBSTdDLE9BSEk4RCxHQUFTQyxHQUFlL1ksRUFBWWhCLEVBQVc4WixLQUNqRDlaLEVBQVlodUQsR0FFUHN0RCxFQUFLMEIsRUFBWWlULEdBQVlqVSxFQUFXLEtBMnhOakRvSCxHQUFPK25CLFlBaHNSUCxTQUFxQjF2QixFQUFPcHBELEdBQzFCLE9BQU80L0QsR0FBZ0J4VyxFQUFPcHBELElBZ3NSaEMrd0QsR0FBT2dvQixjQXBxUlAsU0FBdUIzdkIsRUFBT3BwRCxFQUFPc3BELEdBQ25DLE9BQU8yVyxHQUFrQjdXLEVBQU9wcEQsRUFBTzQ5RCxHQUFZdFUsRUFBVSxLQW9xUi9EeUgsR0FBT2lvQixjQWpwUlAsU0FBdUI1dkIsRUFBT3BwRCxHQUM1QixJQUFJM0QsRUFBa0IsTUFBVCtzRCxFQUFnQixFQUFJQSxFQUFNL3NELE9BQ3ZDLEdBQUlBLEVBQVEsQ0FDVixJQUFJMGUsRUFBUTZrRCxHQUFnQnhXLEVBQU9wcEQsR0FDbkMsR0FBSSthLEVBQVExZSxHQUFVeXBDLEdBQUdzakIsRUFBTXJ1QyxHQUFRL2EsR0FDckMsT0FBTythLEVBR1gsT0FBUSxHQTBvUlZnMkMsR0FBT2tvQixnQkFyblJQLFNBQXlCN3ZCLEVBQU9wcEQsR0FDOUIsT0FBTzQvRCxHQUFnQnhXLEVBQU9wcEQsR0FBTyxJQXFuUnZDK3dELEdBQU9tb0Isa0JBemxSUCxTQUEyQjl2QixFQUFPcHBELEVBQU9zcEQsR0FDdkMsT0FBTzJXLEdBQWtCN1csRUFBT3BwRCxFQUFPNDlELEdBQVl0VSxFQUFVLElBQUksSUF5bFJuRXlILEdBQU9vb0Isa0JBdGtSUCxTQUEyQi92QixFQUFPcHBELEdBRWhDLEdBRHNCLE1BQVRvcEQsR0FBb0JBLEVBQU0vc0QsT0FDM0IsQ0FDVixJQUFJMGUsRUFBUTZrRCxHQUFnQnhXLEVBQU9wcEQsR0FBTyxHQUFRLEVBQ2xELEdBQUk4bEMsR0FBR3NqQixFQUFNcnVDLEdBQVEvYSxHQUNuQixPQUFPK2EsRUFHWCxPQUFRLEdBK2pSVmcyQyxHQUFPZ2YsVUFBWUEsR0FDbkJoZixHQUFPcW9CLFdBM29FUCxTQUFvQjN0QixFQUFRM21ELEVBQVFzVyxHQU9sQyxPQU5BcXdDLEVBQVMvb0QsR0FBUytvRCxHQUNsQnJ3QyxFQUF1QixNQUFaQSxFQUNQLEVBQ0FrNEMsR0FBVXZmLEdBQVUzNEIsR0FBVyxFQUFHcXdDLEVBQU9wdkQsUUFFN0N5SSxFQUFTKzdELEdBQWEvN0QsR0FDZjJtRCxFQUFPbHBELE1BQU02WSxFQUFVQSxFQUFXdFcsRUFBT3pJLFNBQVd5SSxHQXFvRTdEaXNELEdBQU9qdEIsU0FBV0EsR0FDbEJpdEIsR0FBT3R1QixJQXpVUCxTQUFhMm1CLEdBQ1gsT0FBUUEsR0FBU0EsRUFBTS9zRCxPQUNuQjh1RCxHQUFRL0IsRUFBTzZTLElBQ2YsR0F1VU5sTCxHQUFPc29CLE1BN1NQLFNBQWVqd0IsRUFBT0UsR0FDcEIsT0FBUUYsR0FBU0EsRUFBTS9zRCxPQUNuQjh1RCxHQUFRL0IsRUFBT3dVLEdBQVl0VSxFQUFVLElBQ3JDLEdBMlNOeUgsR0FBTzF6RCxTQTdoRVAsU0FBa0JvdUQsRUFBUTVvRCxFQUFTNGdFLEdBSWpDLElBQUk2VixFQUFXdm9CLEdBQU9rRyxpQkFFbEJ3TSxHQUFTQyxHQUFlalksRUFBUTVvRCxFQUFTNGdFLEtBQzNDNWdFLEVBQVVsSCxHQUVaOHZELEVBQVMvb0QsR0FBUytvRCxHQUNsQjVvRCxFQUFVdXJFLEdBQWEsR0FBSXZyRSxFQUFTeTJFLEVBQVV6UixJQUU5QyxJQUlJMFIsRUFDQUMsRUFMQUMsRUFBVXJMLEdBQWEsR0FBSXZyRSxFQUFRNDJFLFFBQVNILEVBQVNHLFFBQVM1UixJQUM5RDZSLEVBQWN4M0UsR0FBS3UzRSxHQUNuQkUsRUFBZ0IvdEIsR0FBVzZ0QixFQUFTQyxHQUlwQzMrRCxFQUFRLEVBQ1I2K0QsRUFBYy8yRSxFQUFRKzJFLGFBQWU1MEIsR0FDckNuaEQsRUFBUyxXQUdUZzJFLEVBQWUxbEUsSUFDaEJ0UixFQUFRb3pFLFFBQVVqeEIsSUFBV25oRCxPQUFTLElBQ3ZDKzFFLEVBQVkvMUUsT0FBUyxLQUNwQisxRSxJQUFnQmwyQixFQUFnQmMsR0FBZVEsSUFBV25oRCxPQUFTLEtBQ25FaEIsRUFBUWkzRSxVQUFZOTBCLElBQVduaEQsT0FBUyxLQUN6QyxLQU1FazJFLEVBQVksa0JBQ2JsNUUsR0FBZUMsS0FBSytCLEVBQVMsY0FDekJBLEVBQVFrM0UsVUFBWSxJQUFJejdFLFFBQVEsTUFBTyxLQUN2Qyw2QkFBK0I2b0QsR0FBbUIsS0FDbkQsS0FFTnNFLEVBQU9udEQsUUFBUXU3RSxHQUFjLFNBQVNoaEUsRUFBT21oRSxFQUFhQyxFQUFrQkMsRUFBaUJDLEVBQWU1a0QsR0FzQjFHLE9BckJBMGtELElBQXFCQSxFQUFtQkMsR0FHeENyMkUsR0FBVTRuRCxFQUFPbHBELE1BQU13WSxFQUFPd2EsR0FBUWozQixRQUFRMm1ELEdBQW1Cb0gsSUFHN0QydEIsSUFDRlQsR0FBYSxFQUNiMTFFLEdBQVUsWUFBY20yRSxFQUFjLFVBRXBDRyxJQUNGWCxHQUFlLEVBQ2YzMUUsR0FBVSxPQUFTczJFLEVBQWdCLGVBRWpDRixJQUNGcDJFLEdBQVUsaUJBQW1CbzJFLEVBQW1CLCtCQUVsRGwvRCxFQUFRd2EsRUFBUzFjLEVBQU14YyxPQUloQndjLEtBR1RoVixHQUFVLE9BSVYsSUFBSXUyRSxFQUFXdjVFLEdBQWVDLEtBQUsrQixFQUFTLGFBQWVBLEVBQVF1M0UsU0FDbkUsR0FBS0EsR0FLQSxHQUFJOTFCLEdBQTJCM2tCLEtBQUt5NkMsR0FDdkMsTUFBTSxJQUFJejlDLEdBM2lkbUIsMkRBc2lkN0I5NEIsRUFBUyxpQkFBbUJBLEVBQVMsUUFTdkNBLEdBQVUyMUUsRUFBZTMxRSxFQUFPdkYsUUFBUTJrRCxFQUFzQixJQUFNcC9DLEdBQ2pFdkYsUUFBUTRrRCxFQUFxQixNQUM3QjVrRCxRQUFRNmtELEVBQXVCLE9BR2xDdC9DLEVBQVMsYUFBZXUyRSxHQUFZLE9BQVMsU0FDMUNBLEVBQ0csR0FDQSx3QkFFSixxQkFDQ2IsRUFDSSxtQkFDQSxLQUVKQyxFQUNHLHVGQUVBLE9BRUozMUUsRUFDQSxnQkFFRixJQUFJNm9DLEVBQVMyakMsSUFBUSxXQUNuQixPQUFPemtDLEdBQVM4dEMsRUFBYUssRUFBWSxVQUFZbDJFLEdBQ2xEbzFCLE1BQU10OUIsRUFBV2crRSxNQU10QixHQURBanRDLEVBQU83b0MsT0FBU0EsRUFDWitwRSxHQUFRbGhDLEdBQ1YsTUFBTUEsRUFFUixPQUFPQSxHQTQ2RFRxa0IsR0FBT3pvQyxNQXBzQlAsU0FBZWlULEVBQUcrdEIsR0FFaEIsSUFEQS90QixFQUFJd1ksR0FBVXhZLElBQ04sR0FBS0EsRUFBSUwsRUFDZixNQUFPLEdBRVQsSUFBSW5nQixFQUFRcW1DLEVBQ1Iva0QsRUFBU3F6RCxHQUFVbjBCLEVBQUc2bEIsR0FFMUJrSSxFQUFXc1UsR0FBWXRVLEdBQ3ZCL3RCLEdBQUs2bEIsRUFHTCxJQURBLElBQUkxVSxFQUFTNmUsR0FBVWx2RCxFQUFRaXRELEtBQ3RCdnVDLEVBQVF3Z0IsR0FDZit0QixFQUFTdnVDLEdBRVgsT0FBTzJ4QixHQXNyQlRxa0IsR0FBTzBWLFNBQVdBLEdBQ2xCMVYsR0FBT2hkLFVBQVlBLEdBQ25CZ2QsR0FBT3puQixTQUFXQSxHQUNsQnluQixHQUFPc3BCLFFBeDVEUCxTQUFpQnI2RSxHQUNmLE9BQU8wQyxHQUFTMUMsR0FBTzgxQixlQXc1RHpCaTdCLEdBQU9yb0IsU0FBV0EsR0FDbEJxb0IsR0FBT3VwQixjQXB1SVAsU0FBdUJ0NkUsR0FDckIsT0FBT0EsRUFDSHN6RCxHQUFVdmYsR0FBVS96QyxJQUFRLGlCQUFtQms3QixHQUNwQyxJQUFWbDdCLEVBQWNBLEVBQVEsR0FrdUk3Qit3RCxHQUFPcnVELFNBQVdBLEdBQ2xCcXVELEdBQU93cEIsUUFuNERQLFNBQWlCdjZFLEdBQ2YsT0FBTzBDLEdBQVMxQyxHQUFPKy9CLGVBbTREekJneEIsR0FBT3Q2QyxLQTEyRFAsU0FBY2cxQyxFQUFROGEsRUFBTzlDLEdBRTNCLElBREFoWSxFQUFTL29ELEdBQVMrb0QsTUFDSGdZLEdBQVM4QyxJQUFVNXFFLEdBQ2hDLE9BQU82dkQsR0FBU0MsR0FFbEIsSUFBS0EsS0FBWThhLEVBQVExRixHQUFhMEYsSUFDcEMsT0FBTzlhLEVBRVQsSUFBSU0sRUFBYWlCLEdBQWN2QixHQUMzQk8sRUFBYWdCLEdBQWN1WixHQUkvQixPQUFPdkUsR0FBVWpXLEVBSExELEdBQWdCQyxFQUFZQyxHQUM5QkMsR0FBY0YsRUFBWUMsR0FBYyxHQUVUbHZELEtBQUssS0E4MURoRGkwRCxHQUFPeXBCLFFBeDBEUCxTQUFpQi91QixFQUFROGEsRUFBTzlDLEdBRTlCLElBREFoWSxFQUFTL29ELEdBQVMrb0QsTUFDSGdZLEdBQVM4QyxJQUFVNXFFLEdBQ2hDLE9BQU84dkQsRUFBT2xwRCxNQUFNLEVBQUdtcEQsR0FBZ0JELEdBQVUsR0FFbkQsSUFBS0EsS0FBWThhLEVBQVExRixHQUFhMEYsSUFDcEMsT0FBTzlhLEVBRVQsSUFBSU0sRUFBYWlCLEdBQWN2QixHQUcvQixPQUFPdVcsR0FBVWpXLEVBQVksRUFGbkJFLEdBQWNGLEVBQVlpQixHQUFjdVosSUFBVSxHQUV2QnpwRSxLQUFLLEtBOHpENUNpMEQsR0FBTzBwQixVQXh5RFAsU0FBbUJodkIsRUFBUThhLEVBQU85QyxHQUVoQyxJQURBaFksRUFBUy9vRCxHQUFTK29ELE1BQ0hnWSxHQUFTOEMsSUFBVTVxRSxHQUNoQyxPQUFPOHZELEVBQU9udEQsUUFBUTBsRCxHQUFhLElBRXJDLElBQUt5SCxLQUFZOGEsRUFBUTFGLEdBQWEwRixJQUNwQyxPQUFPOWEsRUFFVCxJQUFJTSxFQUFhaUIsR0FBY3ZCLEdBRy9CLE9BQU91VyxHQUFValcsRUFGTEQsR0FBZ0JDLEVBQVlpQixHQUFjdVosS0FFbEJ6cEUsS0FBSyxLQTh4RDNDaTBELEdBQU8ycEIsU0F0dkRQLFNBQWtCanZCLEVBQVE1b0QsR0FDeEIsSUFBSXhHLEVBbnZkbUIsR0FvdmRuQnMrRSxFQW52ZHFCLE1BcXZkekIsR0FBSXZ4QyxHQUFTdm1DLEdBQVUsQ0FDckIsSUFBSXN4RSxFQUFZLGNBQWV0eEUsRUFBVUEsRUFBUXN4RSxVQUFZQSxFQUM3RDkzRSxFQUFTLFdBQVl3RyxFQUFVa3hDLEdBQVVseEMsRUFBUXhHLFFBQVVBLEVBQzNEcytFLEVBQVcsYUFBYzkzRSxFQUFVZytELEdBQWFoK0QsRUFBUTgzRSxVQUFZQSxFQUl0RSxJQUFJdkMsR0FGSjNzQixFQUFTL29ELEdBQVMrb0QsSUFFS3B2RCxPQUN2QixHQUFJa3dELEdBQVdkLEdBQVMsQ0FDdEIsSUFBSU0sRUFBYWlCLEdBQWN2QixHQUMvQjJzQixFQUFZcnNCLEVBQVcxdkQsT0FFekIsR0FBSUEsR0FBVSs3RSxFQUNaLE9BQU8zc0IsRUFFVCxJQUFJaVUsRUFBTXJqRSxFQUFTd3dELEdBQVc4dEIsR0FDOUIsR0FBSWpiLEVBQU0sRUFDUixPQUFPaWIsRUFFVCxJQUFJanVDLEVBQVNxZixFQUNUaVcsR0FBVWpXLEVBQVksRUFBRzJULEdBQUs1aUUsS0FBSyxJQUNuQzJ1RCxFQUFPbHBELE1BQU0sRUFBR205RCxHQUVwQixHQUFJeVUsSUFBY3g0RSxFQUNoQixPQUFPK3dDLEVBQVNpdUMsRUFLbEIsR0FISTV1QixJQUNGMlQsR0FBUWh6QixFQUFPcndDLE9BQVNxakUsR0FFdEI5VyxHQUFTdXJCLElBQ1gsR0FBSTFvQixFQUFPbHBELE1BQU1tOUQsR0FBSzkvQixPQUFPdTBDLEdBQVksQ0FDdkMsSUFBSXQ3RCxFQUNBZ25CLEVBQVk2TSxFQU1oQixJQUpLeW5DLEVBQVV6cEMsU0FDYnlwQyxFQUFZaGdFLEdBQU9nZ0UsRUFBVXR3RSxPQUFRbkIsR0FBUytoRCxHQUFRelksS0FBS21vQyxJQUFjLE1BRTNFQSxFQUFVcm5CLFVBQVksRUFDZGowQyxFQUFRczdELEVBQVVub0MsS0FBS25NLElBQzdCLElBQUkrNkMsRUFBUy9oRSxFQUFNa0MsTUFFckIyeEIsRUFBU0EsRUFBT25xQyxNQUFNLEVBQUdxNEUsSUFBV2ovRSxFQUFZK2pFLEVBQU1rYixTQUVuRCxHQUFJbnZCLEVBQU9oekIsUUFBUW9vQyxHQUFhc1QsR0FBWXpVLElBQVFBLEVBQUssQ0FDOUQsSUFBSTNrRCxFQUFRMnhCLEVBQU84cUMsWUFBWXJELEdBQzNCcDVELEdBQVMsSUFDWDJ4QixFQUFTQSxFQUFPbnFDLE1BQU0sRUFBR3dZLElBRzdCLE9BQU8yeEIsRUFBU2l1QyxHQWtzRGxCNXBCLEdBQU90VixTQTVxRFAsU0FBa0JnUSxHQUVoQixPQURBQSxFQUFTL29ELEdBQVMrb0QsS0FDQW5JLEVBQWlCM2pCLEtBQUs4ckIsR0FDcENBLEVBQU9udEQsUUFBUThrRCxFQUFlK0osSUFDOUIxQixHQXlxRE5zRixHQUFPOHBCLFNBdnBCUCxTQUFrQmg4QyxHQUNoQixJQUFJN3lCLElBQU80aEQsR0FDWCxPQUFPbHJELEdBQVNtOEIsR0FBVTd5QixHQXNwQjVCK2tELEdBQU9pZixVQUFZQSxHQUNuQmpmLEdBQU8yZSxXQUFhQSxHQUdwQjNlLEdBQU9ydEQsS0FBTzdCLEdBQ2RrdkQsR0FBTytwQixVQUFZelAsR0FDbkJ0YSxHQUFPdmlELE1BQVFraEMsR0FFZmloQyxHQUFNNWYsSUFDQWx0RCxHQUFTLEdBQ2J5ekQsR0FBV3ZHLElBQVEsU0FBUzlILEVBQU0yYSxHQUMzQi9pRSxHQUFlQyxLQUFLaXdELEdBQU9ud0QsVUFBV2dqRSxLQUN6Qy8vRCxHQUFPKy9ELEdBQWMzYSxNQUdsQnBsRCxJQUNILENBQUUsT0FBUyxJQVdqQmt0RCxHQUFPZ3FCLFFBL2loQkssVUFramhCWnZ4QixHQUFVLENBQUMsT0FBUSxVQUFXLFFBQVMsYUFBYyxVQUFXLGlCQUFpQixTQUFTb2EsR0FDeEY3UyxHQUFPNlMsR0FBWXByQyxZQUFjdTRCLE1BSW5DdkgsR0FBVSxDQUFDLE9BQVEsU0FBUyxTQUFTb2EsRUFBWTdvRCxHQUMvQ2syQyxHQUFZcndELFVBQVVnakUsR0FBYyxTQUFTcm9DLEdBQzNDQSxFQUFJQSxJQUFNNS9CLEVBQVksRUFBSTh6RCxHQUFVMWIsR0FBVXhZLEdBQUksR0FFbEQsSUFBSW1SLEVBQVVwd0MsS0FBS3UxRCxlQUFpQjkyQyxFQUNoQyxJQUFJazJDLEdBQVkzMEQsTUFDaEJBLEtBQUt1dUIsUUFVVCxPQVJJNmhCLEVBQU9tbEIsYUFDVG5sQixFQUFPcWxCLGNBQWdCckMsR0FBVW4wQixFQUFHbVIsRUFBT3FsQixlQUUzQ3JsQixFQUFPc2xCLFVBQVVwMUQsS0FBSyxDQUNwQixLQUFROHlELEdBQVVuMEIsRUFBRzZsQixHQUNyQixLQUFRd2lCLEdBQWNsM0IsRUFBT2tsQixRQUFVLEVBQUksUUFBVSxNQUdsRGxsQixHQUdUdWtCLEdBQVlyd0QsVUFBVWdqRSxFQUFhLFNBQVcsU0FBU3JvQyxHQUNyRCxPQUFPai9CLEtBQUt5bUMsVUFBVTZnQyxHQUFZcm9DLEdBQUd3SCxjQUt6Q3ltQixHQUFVLENBQUMsU0FBVSxNQUFPLGNBQWMsU0FBU29hLEVBQVk3b0QsR0FDN0QsSUFBSXhmLEVBQU93ZixFQUFRLEVBQ2ZpZ0UsRUFqaWhCZSxHQWlpaEJKei9FLEdBL2hoQkcsR0EraGhCeUJBLEVBRTNDMDFELEdBQVlyd0QsVUFBVWdqRSxHQUFjLFNBQVN0YSxHQUMzQyxJQUFJNWMsRUFBU3B3QyxLQUFLdXVCLFFBTWxCLE9BTEE2aEIsRUFBT29sQixjQUFjbDFELEtBQUssQ0FDeEIsU0FBWWdoRSxHQUFZdFUsRUFBVSxHQUNsQyxLQUFRL3RELElBRVZteEMsRUFBT21sQixhQUFlbmxCLEVBQU9tbEIsY0FBZ0JtcEIsRUFDdEN0dUMsTUFLWDhjLEdBQVUsQ0FBQyxPQUFRLFNBQVMsU0FBU29hLEVBQVk3b0QsR0FDL0MsSUFBSWtnRSxFQUFXLFFBQVVsZ0UsRUFBUSxRQUFVLElBRTNDazJDLEdBQVlyd0QsVUFBVWdqRSxHQUFjLFdBQ2xDLE9BQU90bkUsS0FBSzIrRSxHQUFVLEdBQUdqN0UsUUFBUSxPQUtyQ3dwRCxHQUFVLENBQUMsVUFBVyxTQUFTLFNBQVNvYSxFQUFZN29ELEdBQ2xELElBQUltZ0UsRUFBVyxRQUFVbmdFLEVBQVEsR0FBSyxTQUV0Q2syQyxHQUFZcndELFVBQVVnakUsR0FBYyxXQUNsQyxPQUFPdG5FLEtBQUt1MUQsYUFBZSxJQUFJWixHQUFZMzBELE1BQVFBLEtBQUs0K0UsR0FBVSxPQUl0RWpxQixHQUFZcndELFVBQVVreEUsUUFBVSxXQUM5QixPQUFPeDFFLEtBQUt5N0IsT0FBT2trQyxLQUdyQmhMLEdBQVlyd0QsVUFBVXBDLEtBQU8sU0FBU21yRCxHQUNwQyxPQUFPcnRELEtBQUt5N0IsT0FBTzR4QixHQUFXamEsUUFHaEN1aEIsR0FBWXJ3RCxVQUFVd3FFLFNBQVcsU0FBU3poQixHQUN4QyxPQUFPcnRELEtBQUt5bUMsVUFBVXZrQyxLQUFLbXJELElBRzdCc0gsR0FBWXJ3RCxVQUFVMnFFLFVBQVl6TSxJQUFTLFNBQVNubkMsRUFBTXgxQixHQUN4RCxNQUFtQixtQkFBUncxQixFQUNGLElBQUlzNUIsR0FBWTMwRCxNQUVsQkEsS0FBS3l6QixLQUFJLFNBQVMvdkIsR0FDdkIsT0FBTzQ1RCxHQUFXNTVELEVBQU8yM0IsRUFBTXgxQixTQUluQzh1RCxHQUFZcndELFVBQVV3NEIsT0FBUyxTQUFTdXdCLEdBQ3RDLE9BQU9ydEQsS0FBS3k3QixPQUFPczFDLEdBQU96UCxHQUFZalUsTUFHeENzSCxHQUFZcndELFVBQVUyQixNQUFRLFNBQVN3OEQsRUFBT1csR0FDNUNYLEVBQVFockIsR0FBVWdyQixHQUVsQixJQUFJcnlCLEVBQVNwd0MsS0FDYixPQUFJb3dDLEVBQU9tbEIsZUFBaUJrTixFQUFRLEdBQUtXLEVBQU0sR0FDdEMsSUFBSXpPLEdBQVl2a0IsSUFFckJxeUIsRUFBUSxFQUNWcnlCLEVBQVNBLEVBQU82bkMsV0FBV3hWLEdBQ2xCQSxJQUNUcnlCLEVBQVNBLEVBQU8ybEMsS0FBS3RULElBRW5CVyxJQUFRL2pFLElBRVYrd0MsR0FEQWd6QixFQUFNM3JCLEdBQVUyckIsSUFDRCxFQUFJaHpCLEVBQU80bEMsV0FBVzVTLEdBQU9oekIsRUFBTzRuQyxLQUFLNVUsRUFBTVgsSUFFekRyeUIsSUFHVHVrQixHQUFZcndELFVBQVU0ekUsZUFBaUIsU0FBUzdxQixHQUM5QyxPQUFPcnRELEtBQUt5bUMsVUFBVTB4QyxVQUFVOXFCLEdBQVc1bUIsV0FHN0NrdUIsR0FBWXJ3RCxVQUFVbXRFLFFBQVUsV0FDOUIsT0FBT3p4RSxLQUFLZzRFLEtBQUtsekIsSUFJbkJrVyxHQUFXckcsR0FBWXJ3RCxXQUFXLFNBQVNxb0QsRUFBTTJhLEdBQy9DLElBQUl1WCxFQUFnQixxQ0FBcUN4N0MsS0FBS2lrQyxHQUMxRHdYLEVBQVUsa0JBQWtCejdDLEtBQUtpa0MsR0FDakN5WCxFQUFhdHFCLEdBQU9xcUIsRUFBVyxRQUF3QixRQUFkeFgsRUFBdUIsUUFBVSxJQUFPQSxHQUNqRjBYLEVBQWVGLEdBQVcsUUFBUXo3QyxLQUFLaWtDLEdBRXRDeVgsSUFHTHRxQixHQUFPbndELFVBQVVnakUsR0FBYyxXQUM3QixJQUFJNWpFLEVBQVExRCxLQUFLaTFELFlBQ2JwdkQsRUFBT2k1RSxFQUFVLENBQUMsR0FBS2xpRCxVQUN2QnFpRCxFQUFTdjdFLGFBQWlCaXhELEdBQzFCM0gsRUFBV25uRCxFQUFLLEdBQ2hCcTVFLEVBQVVELEdBQVVqNUUsR0FBUXRDLEdBRTVCaXJFLEVBQWMsU0FBU2pyRSxHQUN6QixJQUFJMHNDLEVBQVMydUMsRUFBV3BpRCxNQUFNODNCLEdBQVE1RyxHQUFVLENBQUNucUQsR0FBUW1DLElBQ3pELE9BQVFpNUUsR0FBVzlwQixFQUFZNWtCLEVBQU8sR0FBS0EsR0FHekM4dUMsR0FBV0wsR0FBb0MsbUJBQVo3eEIsR0FBNkMsR0FBbkJBLEVBQVNqdEQsU0FFeEVrL0UsRUFBU0MsR0FBVSxHQUVyQixJQUFJbHFCLEVBQVdoMUQsS0FBS20xRCxVQUNoQmdxQixJQUFhbi9FLEtBQUtrMUQsWUFBWW4xRCxPQUM5QnEvRSxFQUFjSixJQUFpQmhxQixFQUMvQnFxQixFQUFXSixJQUFXRSxFQUUxQixJQUFLSCxHQUFnQkUsRUFBUyxDQUM1Qng3RSxFQUFRMjdFLEVBQVczN0UsRUFBUSxJQUFJaXhELEdBQVkzMEQsTUFDM0MsSUFBSW93QyxFQUFTdWMsRUFBS2h3QixNQUFNajVCLEVBQU9tQyxHQUUvQixPQURBdXFDLEVBQU84a0IsWUFBWTUwRCxLQUFLLENBQUUsS0FBUTZuRSxHQUFNLEtBQVEsQ0FBQ3dHLEdBQWMsUUFBV3R2RSxJQUNuRSxJQUFJdTFELEdBQWN4a0IsRUFBUTRrQixHQUVuQyxPQUFJb3FCLEdBQWVDLEVBQ1YxeUIsRUFBS2h3QixNQUFNMzhCLEtBQU02RixJQUUxQnVxQyxFQUFTcHdDLEtBQUttb0UsS0FBS3dHLEdBQ1p5USxFQUFlTixFQUFVMXVDLEVBQU8xc0MsUUFBUSxHQUFLMHNDLEVBQU8xc0MsUUFBVzBzQyxRQUsxRThjLEdBQVUsQ0FBQyxNQUFPLE9BQVEsUUFBUyxPQUFRLFNBQVUsWUFBWSxTQUFTb2EsR0FDeEUsSUFBSTNhLEVBQU9zRSxHQUFXcVcsR0FDbEJnWSxFQUFZLDBCQUEwQmo4QyxLQUFLaWtDLEdBQWMsTUFBUSxPQUNqRTBYLEVBQWUsa0JBQWtCMzdDLEtBQUtpa0MsR0FFMUM3UyxHQUFPbndELFVBQVVnakUsR0FBYyxXQUM3QixJQUFJemhFLEVBQU8rMkIsVUFDWCxHQUFJb2lELElBQWlCaC9FLEtBQUttMUQsVUFBVyxDQUNuQyxJQUFJenhELEVBQVExRCxLQUFLMEQsUUFDakIsT0FBT2lwRCxFQUFLaHdCLE1BQU0zMkIsR0FBUXRDLEdBQVNBLEVBQVEsR0FBSW1DLEdBRWpELE9BQU83RixLQUFLcy9FLElBQVcsU0FBUzU3RSxHQUM5QixPQUFPaXBELEVBQUtod0IsTUFBTTMyQixHQUFRdEMsR0FBU0EsRUFBUSxHQUFJbUMsVUFNckRtMUQsR0FBV3JHLEdBQVlyd0QsV0FBVyxTQUFTcW9ELEVBQU0yYSxHQUMvQyxJQUFJeVgsRUFBYXRxQixHQUFPNlMsR0FDeEIsR0FBSXlYLEVBQVksQ0FDZCxJQUFJNzRFLEVBQU02NEUsRUFBV3AzRSxLQUFPLEdBQ3ZCcEQsR0FBZUMsS0FBS3V2RCxHQUFXN3RELEtBQ2xDNnRELEdBQVU3dEQsR0FBTyxJQUVuQjZ0RCxHQUFVN3RELEdBQUs1RixLQUFLLENBQUUsS0FBUWduRSxFQUFZLEtBQVF5WCxRQUl0RGhyQixHQUFVMFUsR0FBYXBwRSxFQWx0aEJBLEdBa3RoQitCc0ksTUFBUSxDQUFDLENBQzdELEtBQVEsVUFDUixLQUFRdEksSUFJVnMxRCxHQUFZcndELFVBQVVpcUIsTUFoOWR0QixXQUNFLElBQUk2aEIsRUFBUyxJQUFJdWtCLEdBQVkzMEQsS0FBS2kxRCxhQU9sQyxPQU5BN2tCLEVBQU84a0IsWUFBYzZCLEdBQVUvMkQsS0FBS2sxRCxhQUNwQzlrQixFQUFPa2xCLFFBQVV0MUQsS0FBS3MxRCxRQUN0QmxsQixFQUFPbWxCLGFBQWV2MUQsS0FBS3UxRCxhQUMzQm5sQixFQUFPb2xCLGNBQWdCdUIsR0FBVS8yRCxLQUFLdzFELGVBQ3RDcGxCLEVBQU9xbEIsY0FBZ0J6MUQsS0FBS3kxRCxjQUM1QnJsQixFQUFPc2xCLFVBQVlxQixHQUFVLzJELEtBQUswMUQsV0FDM0J0bEIsR0F5OGRUdWtCLEdBQVlyd0QsVUFBVW1pQyxRQTk3ZHRCLFdBQ0UsR0FBSXptQyxLQUFLdTFELGFBQWMsQ0FDckIsSUFBSW5sQixFQUFTLElBQUl1a0IsR0FBWTMwRCxNQUM3Qm93QyxFQUFPa2xCLFNBQVcsRUFDbEJsbEIsRUFBT21sQixjQUFlLE9BRXRCbmxCLEVBQVNwd0MsS0FBS3V1QixTQUNQK21DLFVBQVksRUFFckIsT0FBT2xsQixHQXM3ZFR1a0IsR0FBWXJ3RCxVQUFVWixNQTM2ZHRCLFdBQ0UsSUFBSW9wRCxFQUFROXNELEtBQUtpMUQsWUFBWXZ4RCxRQUN6QjY3RSxFQUFNdi9FLEtBQUtzMUQsUUFDWGMsRUFBUXB3RCxHQUFROG1ELEdBQ2hCMHlCLEVBQVVELEVBQU0sRUFDaEI3VCxFQUFZdFYsRUFBUXRKLEVBQU0vc0QsT0FBUyxFQUNuQzAvRSxFQThwSU4sU0FBaUJoZCxFQUFPVyxFQUFLNk4sR0FJM0IsSUFIQSxJQUFJeHlELEdBQVMsRUFDVDFlLEVBQVNreEUsRUFBV2x4RSxTQUVmMGUsRUFBUTFlLEdBQVEsQ0FDdkIsSUFBSVcsRUFBT3V3RSxFQUFXeHlELEdBQ2xCL2UsRUFBT2dCLEVBQUtoQixLQUVoQixPQUFRZ0IsRUFBS3pCLE1BQ1gsSUFBSyxPQUFhd2pFLEdBQVMvaUUsRUFBTSxNQUNqQyxJQUFLLFlBQWEwakUsR0FBTzFqRSxFQUFNLE1BQy9CLElBQUssT0FBYTBqRSxFQUFNaFEsR0FBVWdRLEVBQUtYLEVBQVEvaUUsR0FBTyxNQUN0RCxJQUFLLFlBQWEraUUsRUFBUXRQLEdBQVVzUCxFQUFPVyxFQUFNMWpFLElBR3JELE1BQU8sQ0FBRSxNQUFTK2lFLEVBQU8sSUFBT1csR0E3cUlyQnNjLENBQVEsRUFBR2hVLEVBQVcxckUsS0FBSzAxRCxXQUNsQytNLEVBQVFnZCxFQUFLaGQsTUFDYlcsRUFBTXFjLEVBQUtyYyxJQUNYcmpFLEVBQVNxakUsRUFBTVgsRUFDZmhrRCxFQUFRK2dFLEVBQVVwYyxFQUFPWCxFQUFRLEVBQ2pDckIsRUFBWXBoRSxLQUFLdzFELGNBQ2pCbXFCLEVBQWF2ZSxFQUFVcmhFLE9BQ3ZCd3RELEVBQVcsRUFDWHF5QixFQUFZeHNCLEdBQVVyekQsRUFBUUMsS0FBS3kxRCxlQUV2QyxJQUFLVyxJQUFXb3BCLEdBQVc5VCxHQUFhM3JFLEdBQVU2L0UsR0FBYTcvRSxFQUM3RCxPQUFPZ2xFLEdBQWlCalksRUFBTzlzRCxLQUFLazFELGFBRXRDLElBQUk5a0IsRUFBUyxHQUVib3FCLEVBQ0EsS0FBT3o2RCxLQUFZd3RELEVBQVdxeUIsR0FBVyxDQU12QyxJQUhBLElBQUlDLEdBQWEsRUFDYm44RSxFQUFRb3BELEVBSFpydUMsR0FBUzhnRSxLQUtBTSxFQUFZRixHQUFZLENBQy9CLElBQUlqL0UsRUFBTzBnRSxFQUFVeWUsR0FDakI3eUIsRUFBV3RzRCxFQUFLc3NELFNBQ2hCL3RELEVBQU95QixFQUFLekIsS0FDWnc3RCxFQUFXek4sRUFBU3RwRCxHQUV4QixHQTd6RFksR0E2ekRSekUsRUFDRnlFLEVBQVErMkQsT0FDSCxJQUFLQSxFQUFVLENBQ3BCLEdBajBEYSxHQWkwRFR4N0QsRUFDRixTQUFTdTdELEVBRVQsTUFBTUEsR0FJWnBxQixFQUFPbWQsS0FBYzdwRCxFQUV2QixPQUFPMHNDLEdBZzRkVHFrQixHQUFPbndELFVBQVUwdEUsR0FBS3BELEdBQ3RCbmEsR0FBT253RCxVQUFVazNDLE1BMWlRakIsV0FDRSxPQUFPQSxHQUFNeDdDLE9BMGlRZnkwRCxHQUFPbndELFVBQVV3N0UsT0E3Z1FqQixXQUNFLE9BQU8sSUFBSWxyQixHQUFjNTBELEtBQUswRCxRQUFTMUQsS0FBS20xRCxZQTZnUTlDVixHQUFPbndELFVBQVVnc0MsS0FwL1BqQixXQUNNdHdDLEtBQUtxMUQsYUFBZWgyRCxJQUN0QlcsS0FBS3ExRCxXQUFhb2MsR0FBUXp4RSxLQUFLMEQsVUFFakMsSUFBSXc1QixFQUFPbDlCLEtBQUtvMUQsV0FBYXAxRCxLQUFLcTFELFdBQVd0MUQsT0FHN0MsTUFBTyxDQUFFLEtBQVFtOUIsRUFBTSxNQUZYQSxFQUFPNzlCLEVBQVlXLEtBQUtxMUQsV0FBV3IxRCxLQUFLbzFELGVBZy9QdERYLEdBQU9ud0QsVUFBVWtrRSxNQTc3UGpCLFNBQXNCOWtFLEdBSXBCLElBSEEsSUFBSTBzQyxFQUNBb0QsRUFBU3h6QyxLQUVOd3pDLGFBQWtCdWhCLElBQVksQ0FDbkMsSUFBSXhtQyxFQUFRc21DLEdBQWFyaEIsR0FDekJqbEIsRUFBTTZtQyxVQUFZLEVBQ2xCN21DLEVBQU04bUMsV0FBYWgyRCxFQUNmK3dDLEVBQ0ZpeUIsRUFBU3BOLFlBQWMxbUMsRUFFdkI2aEIsRUFBUzdoQixFQUVYLElBQUk4ekMsRUFBVzl6QyxFQUNmaWxCLEVBQVNBLEVBQU95aEIsWUFHbEIsT0FEQW9OLEVBQVNwTixZQUFjdnhELEVBQ2hCMHNDLEdBNjZQVHFrQixHQUFPbndELFVBQVVtaUMsUUF0NVBqQixXQUNFLElBQUkvaUMsRUFBUTFELEtBQUtpMUQsWUFDakIsR0FBSXZ4RCxhQUFpQml4RCxHQUFhLENBQ2hDLElBQUluVCxFQUFVOTlDLEVBVWQsT0FUSTFELEtBQUtrMUQsWUFBWW4xRCxTQUNuQnloRCxFQUFVLElBQUltVCxHQUFZMzBELFFBRTVCd2hELEVBQVVBLEVBQVEvYSxXQUNWeXVCLFlBQVk1MEQsS0FBSyxDQUN2QixLQUFRNm5FLEdBQ1IsS0FBUSxDQUFDMWhDLElBQ1QsUUFBV3BuQyxJQUVOLElBQUl1MUQsR0FBY3BULEVBQVN4aEQsS0FBS20xRCxXQUV6QyxPQUFPbjFELEtBQUttb0UsS0FBSzFoQyxLQXc0UG5CZ3VCLEdBQU9ud0QsVUFBVWdvQyxPQUFTbW9CLEdBQU9ud0QsVUFBVXE5QixRQUFVOHlCLEdBQU9ud0QsVUFBVVosTUF2M1B0RSxXQUNFLE9BQU9xaEUsR0FBaUIva0UsS0FBS2kxRCxZQUFhajFELEtBQUtrMUQsY0F5M1BqRFQsR0FBT253RCxVQUFVNE4sTUFBUXVpRCxHQUFPbndELFVBQVU4dUMsS0FFdEMrZSxLQUNGc0MsR0FBT253RCxVQUFVNnRELElBaitQbkIsV0FDRSxPQUFPbnlELE9BaytQRnkwRCxHQU1EM0QsR0FRTnhGLEdBQUt2bEQsRUFBSUEsSUFJVCxhQUNFLE9BQU9BLElBQ1IsbUNBYUh2QixLQUFLeEUsTyw2QkNsemhCUCxTQUFTMkssRUFBSXF0QixHQUNYLE9BQU8rbkQsaUJBQWlCL25ELEdBRzFCLFNBQVNodEIsRUFBSWd0QixFQUFTcnlCLEdBQ3BCLElBQUssSUFBSU8sS0FBT1AsRUFBSyxDQUNuQixJQUFJdkQsRUFBTXVELEVBQUlPLEdBQ0ssaUJBQVI5RCxJQUNUQSxHQUFZLE1BRWQ0MUIsRUFBUW5kLE1BQU0zVSxHQUFPOUQsRUFFdkIsT0FBTzQxQixFQUdULFNBQVMrSSxFQUFJaS9DLEdBQ1gsSUFBSWovQyxFQUFNcnpCLFNBQVN5QyxjQUFjLE9BRWpDLE9BREE0d0IsRUFBSWkvQyxVQUFZQSxFQUNUai9DLEUsOEJBR1QsSUFBSWsvQyxFQUNpQixvQkFBWkMsVUFDTkEsUUFBUTU3RSxVQUFVZ1ksU0FDakI0akUsUUFBUTU3RSxVQUFVNjdFLHVCQUNsQkQsUUFBUTU3RSxVQUFVODdFLG9CQUNsQkYsUUFBUTU3RSxVQUFVKzdFLG1CQUV0QixTQUFTL2pFLEVBQVEwYixFQUFTdHpCLEdBQ3hCLElBQUt1N0UsRUFDSCxNQUFNLElBQUk1L0MsTUFBTSx3Q0FHbEIsT0FBTzQvQyxFQUFVejdFLEtBQUt3ekIsRUFBU3R6QixHQUdqQyxTQUFTK0QsRUFBT3V2QixHQUNWQSxFQUFRdnZCLE9BQ1Z1dkIsRUFBUXZ2QixTQUVKdXZCLEVBQVFuZixZQUNWbWYsRUFBUW5mLFdBQVdxZ0MsWUFBWWxoQixHQUtyQyxTQUFTc29ELEVBQWN0b0QsRUFBU3VvRCxHQUM5QixPQUFPbjBFLE1BQU05SCxVQUFVbTNCLE9BQU9qM0IsS0FBS3d6QixFQUFRdGUsVUFBVSxTQUFVOG1FLEdBQVMsT0FBT2xrRSxFQUFRa2tFLEVBQU9ELE1BSWhHLElBQUlFLEVBSU8sU0FBVS9nRCxHQUFLLE1BQVEsYUFBZUEsR0FKN0MrZ0QsRUFLTSxTQUFVL2dELEdBQUssTUFBUSxZQUFjQSxHQUwzQytnRCxFQU1XLHFCQU5YQSxFQVNPLFlBVFBBLEVBVVUsZUFWVkEsRUFXUSxTQUFVL2dELEdBQUssTUFBUSxjQUFnQkEsR0FYL0MrZ0QsRUFZVyxTQUFVL2dELEdBQUssTUFBUSxpQkFBbUJBLEdBT3JEZ2hELEVBQXdCLENBQUVoaEQsRUFBRyxLQUFNQyxFQUFHLE1BRTFDLFNBQVNnaEQsRUFBa0JsN0UsRUFBR2k2QixHQUM1QixJQUFJdHZCLEVBQVkzSyxFQUFFdXlCLFFBQVE1bkIsVUFDdEI0dkUsRUFBWVMsRUFBb0IvZ0QsR0FFaEN0dkIsRUFBVTBKLFNBQVNrbUUsR0FDckJ4dEIsYUFBYWt1QixFQUFzQmhoRCxJQUVuQ3R2QixFQUFVQyxJQUFJMnZFLEdBSWxCLFNBQVNZLEVBQXFCbjdFLEVBQUdpNkIsR0FDL0JnaEQsRUFBc0JoaEQsR0FBS3laLFlBQ3pCLFdBQWMsT0FBTzF6QyxFQUFFbzdFLFNBQVdwN0UsRUFBRXV5QixRQUFRNW5CLFVBQVUzSCxPQUFPZzRFLEVBQW9CL2dELE1BQ2pGajZCLEVBQUV1M0UsU0FBUzhELG9CQVNmLElBQUlDLEVBQWUsU0FBc0Ivb0QsR0FDdkNoNEIsS0FBS2c0QixRQUFVQSxFQUNmaDRCLEtBQUtnaEYsU0FBVyxJQUdkQyxFQUFxQixDQUFFMUcsUUFBUyxDQUFFNThDLGNBQWMsSUFFcERvakQsRUFBYXo4RSxVQUFVUyxLQUFPLFNBQWVtOEUsRUFBVzlsRCxRQUNkLElBQTdCcDdCLEtBQUtnaEYsU0FBU0UsS0FDdkJsaEYsS0FBS2doRixTQUFTRSxHQUFhLElBRTdCbGhGLEtBQUtnaEYsU0FBU0UsR0FBVzVnRixLQUFLODZCLEdBQzlCcDdCLEtBQUtnNEIsUUFBUTFtQixpQkFBaUI0dkUsRUFBVzlsRCxHQUFTLElBR3BEMmxELEVBQWF6OEUsVUFBVXkzQixPQUFTLFNBQWlCbWxELEVBQVcxNEUsR0FDeEQsSUFBSTI0RSxFQUFTbmhGLEtBRWZBLEtBQUtnaEYsU0FBU0UsR0FBYWxoRixLQUFLZ2hGLFNBQVNFLEdBQVd6bEQsUUFBTyxTQUFVTCxHQUNuRSxTQUFJNXlCLEdBQVU0eUIsSUFBWTV5QixLQUcxQjI0RSxFQUFPbnBELFFBQVEwRCxvQkFBb0J3bEQsRUFBVzlsRCxHQUFTLElBQ2hELE9BSVgybEQsRUFBYXo4RSxVQUFVODhFLFVBQVksV0FDakMsSUFBSyxJQUFJejVFLEtBQVEzSCxLQUFLZ2hGLFNBQ3BCaGhGLEtBQUsrN0IsT0FBT3AwQixJQUloQnM1RSxFQUFtQjFHLFFBQVE1dkUsSUFBTSxXQUM3QixJQUFJdzJFLEVBQVNuaEYsS0FFZixPQUFPcUUsT0FBT3VCLEtBQUs1RixLQUFLZ2hGLFVBQVVwSCxPQUNoQyxTQUFVMXpFLEdBQU8sT0FBdUMsSUFBaENpN0UsRUFBT0gsU0FBUzk2RSxHQUFLbkcsV0FJakRzRSxPQUFPazVCLGlCQUFrQndqRCxFQUFhejhFLFVBQVcyOEUsR0FFakQsSUFBSUksRUFBZSxXQUNqQnJoRixLQUFLc2hGLGNBQWdCLElBd0N2QixTQUFTQyxFQUFZNTVFLEdBQ25CLEdBQWtDLG1CQUF2QnJJLE9BQU9raUYsWUFDaEIsT0FBTyxJQUFJQSxZQUFZNzVFLEdBRXZCLElBQUk4NUUsRUFBTS96RSxTQUFTNnpFLFlBQVksZUFFL0IsT0FEQUUsRUFBSUMsZ0JBQWdCLzVFLEdBQU0sR0FBTyxPQUFPdEksR0FDakNvaUYsRUFJWCxTQUFTRSxFQUNQbDhFLEVBQ0FtOEUsRUFDQUMsRUFDQUMsRUFDQUMsR0FLQSxJQUFJQyxFQUNKLFFBSjJCLElBQXRCRixJQUErQkEsR0FBb0IsUUFDM0IsSUFBeEJDLElBQWlDQSxHQUFzQixHQUcvQyxRQUFUSCxFQUNGSSxFQUFTLENBQ1AsZ0JBQ0Esa0JBQ0EsWUFDQSxJQUNBLEtBQ0EsWUFDRyxJQUFhLFNBQVRKLEVBU1QsTUFBTSxJQUFJdmhELE1BQU0sb0NBUmhCMmhELEVBQVMsQ0FDUCxlQUNBLGlCQUNBLGFBQ0EsSUFDQSxPQUNBLFVBUU4sU0FDRXY4RSxFQUNBbzhFLEVBQ0FJLEVBQ0FILEVBQ0FDLEdBRUEsSUFBSUcsRUFBZ0JELEVBQUksR0FDcEJFLEVBQWtCRixFQUFJLEdBQ3RCRyxFQUFZSCxFQUFJLEdBQ2hCdGlELEVBQUlzaUQsRUFBSSxHQUNSSSxFQUFLSixFQUFJLEdBQ1RLLEVBQU9MLEVBQUksUUFDWSxJQUF0QkgsSUFBK0JBLEdBQW9CLFFBQzNCLElBQXhCQyxJQUFpQ0EsR0FBc0IsR0FFNUQsSUFBSS9wRCxFQUFVdnlCLEVBQUV1eUIsUUFHaEJ2eUIsRUFBRTg4RSxNQUFNNWlELEdBQUssS0FHVDNILEVBQVFvcUQsR0FBYSxJQUN2QjM4RSxFQUFFODhFLE1BQU01aUQsR0FBSyxTQUlYM0gsRUFBUW9xRCxHQUFhMzhFLEVBQUV5OEUsR0FBaUJ6OEUsRUFBRTA4RSxHQUFtQixJQUMvRDE4RSxFQUFFODhFLE1BQU01aUQsR0FBSyxPQUdYa2lELElBQ0Y3cEQsRUFBUXdxRCxjQUFjakIsRUFBYSxhQUFlNWhELElBRTlDa2lELEVBQU8sRUFDVDdwRCxFQUFRd3FELGNBQWNqQixFQUFhLGFBQWVjLElBQ3pDUixFQUFPLEdBQ2hCN3BELEVBQVF3cUQsY0FBY2pCLEVBQWEsYUFBZWUsSUFHaERSLEdBN0tSLFNBQW9DcjhFLEVBQUdpNkIsR0FDckNpaEQsRUFBa0JsN0UsRUFBR2k2QixHQUNyQmtoRCxFQUFxQm43RSxFQUFHaTZCLEdBNEtwQitpRCxDQUEyQmg5RSxFQUFHazZCLElBSTlCbDZCLEVBQUU4OEUsTUFBTTVpRCxLQUFPa2lELEdBQVFFLElBQ3pCL3BELEVBQVF3cUQsY0FBY2pCLEVBQWEsTUFBUTVoRCxFQUFJLFVBQWFsNkIsRUFBRTg4RSxNQUFNNWlELEtBakR0RStpRCxDQUFvQmo5RSxFQUFHbzhFLEVBQU1HLEVBQVFGLEVBQW1CQyxHQXFEMUQsU0FBU1ksRUFBTWpqRCxHQUNiLE9BQU9yTCxTQUFTcUwsRUFBRyxLQUFPLEVBcEk1QjJoRCxFQUFhLzhFLFVBQVVzK0UsYUFBZSxTQUF1QjVxRCxHQUMzRCxJQUFJNnFELEVBQUs3aUYsS0FBS3NoRixjQUFjN2xELFFBQU8sU0FBVW9uRCxHQUFNLE9BQU9BLEVBQUc3cUQsVUFBWUEsS0FBWSxHQUtyRixPQUpLNnFELElBQ0hBLEVBQUssSUFBSTlCLEVBQWEvb0QsR0FDdEJoNEIsS0FBS3NoRixjQUFjaGhGLEtBQUt1aUYsSUFFbkJBLEdBR1R4QixFQUFhLzhFLFVBQVVTLEtBQU8sU0FBZWl6QixFQUFTa3BELEVBQVc5bEQsR0FDL0RwN0IsS0FBSzRpRixhQUFhNXFELEdBQVNqekIsS0FBS204RSxFQUFXOWxELElBRzdDaW1ELEVBQWEvOEUsVUFBVXkzQixPQUFTLFNBQWlCL0QsRUFBU2twRCxFQUFXOWxELEdBQ25FLElBQUl5bkQsRUFBSzdpRixLQUFLNGlGLGFBQWE1cUQsR0FDM0I2cUQsRUFBRzltRCxPQUFPbWxELEVBQVc5bEQsR0FFakJ5bkQsRUFBR3RJLFNBRUx2NkUsS0FBS3NoRixjQUFjcDdDLE9BQU9sbUMsS0FBS3NoRixjQUFjbmxELFFBQVEwbUQsR0FBSyxJQUk5RHhCLEVBQWEvOEUsVUFBVTg4RSxVQUFZLFdBQ2pDcGhGLEtBQUtzaEYsY0FBYy83RSxTQUFRLFNBQVVQLEdBQUssT0FBT0EsRUFBRW84RSxlQUNuRHBoRixLQUFLc2hGLGNBQWdCLElBR3ZCRCxFQUFhLzhFLFVBQVVpK0MsS0FBTyxTQUFldnFCLEVBQVNrcEQsRUFBVzlsRCxHQUMvRCxJQUFJeW5ELEVBQUs3aUYsS0FBSzRpRixhQUFhNXFELEdBQ3ZCOHFELEVBQWMsU0FBVXJCLEdBQzFCb0IsRUFBRzltRCxPQUFPbWxELEVBQVc0QixHQUNyQjFuRCxFQUFRcW1ELElBRVZvQixFQUFHOTlFLEtBQUttOEUsRUFBVzRCLElBeUhyQixJQUFJQyxFQUFNLENBQ1JDLFNBQ3NCLG9CQUFidDFFLFVBQ1AscUJBQXNCQSxTQUFTZ2pDLGdCQUFnQjcxQixNQUNqRG9vRSxjQUNvQixvQkFBWDNqRixTQUNOLGlCQUFrQkEsUUFDaEIsbUJBQW9CQSxPQUFPdTBDLFdBQzFCdjBDLE9BQU91MEMsVUFBVXF2QyxlQUFpQixHQUNuQzVqRixPQUFPNmpGLGVBQWlCejFFLG9CQUFvQnBPLE9BQU82akYsZUFDeERDLGtCQUN1QixvQkFBZHZ2QyxXQUE2QkEsVUFBVXd2QyxpQkFDaERDLFNBQ3VCLG9CQUFkenZDLFdBQ1AsVUFBVXhRLEtBQUt3USxXQUFhQSxVQUFVeUYsWUFHMUMsU0FBU2lxQyxFQUFlOTlFLEdBQ3RCLElBQUl1eUIsRUFBVXZ5QixFQUFFdXlCLFFBQ1p3ckQsRUFBbUJodUUsS0FBSytvQixNQUFNdkcsRUFBUW9xRCxXQUN0Q3FCLEVBQU96ckQsRUFBUTByRCx3QkFFbkJqK0UsRUFBRWsrRSxlQUFpQm51RSxLQUFLTyxLQUFLMHRFLEVBQUsva0UsT0FDbENqWixFQUFFMDhFLGdCQUFrQjNzRSxLQUFLTyxLQUFLMHRFLEVBQUtHLFFBQ25DbitFLEVBQUVvK0UsYUFBZTdyRCxFQUFROHJELFlBQ3pCcitFLEVBQUV5OEUsY0FBZ0JscUQsRUFBUStyRCxhQUVyQi9yRCxFQUFRbGUsU0FBU3JVLEVBQUV1K0Usa0JBRXRCMUQsRUFBY3RvRCxFQUFTeW9ELEVBQWlCLE1BQU1sN0UsU0FBUSxTQUFVekUsR0FBTSxPQUFPMkgsRUFBTzNILE1BRXBGazNCLEVBQVE5bUIsWUFBWXpMLEVBQUV1K0UsaUJBRW5CaHNELEVBQVFsZSxTQUFTclUsRUFBRXcrRSxrQkFFdEIzRCxFQUFjdG9ELEVBQVN5b0QsRUFBaUIsTUFBTWw3RSxTQUFRLFNBQVV6RSxHQUFNLE9BQU8ySCxFQUFPM0gsTUFFcEZrM0IsRUFBUTltQixZQUFZekwsRUFBRXcrRSxrQkFJckJ4K0UsRUFBRXUzRSxTQUFTa0gsaUJBQ1p6K0UsRUFBRWsrRSxlQUFpQmwrRSxFQUFFdTNFLFNBQVNtSCxvQkFBc0IxK0UsRUFBRW8rRSxjQUV0RHArRSxFQUFFMitFLGtCQUFtQixFQUNyQjMrRSxFQUFFNCtFLFdBQWE1K0UsRUFBRWsrRSxlQUFpQmwrRSxFQUFFNitFLGlCQUNwQzcrRSxFQUFFOCtFLFdBQWE5K0UsRUFBRWsrRSxlQUFpQmwrRSxFQUFFNCtFLFdBQ3BDNStFLEVBQUUrK0UsZ0JBQWtCQyxFQUNsQmgvRSxFQUNBazlFLEVBQU9sOUUsRUFBRTQrRSxXQUFhNStFLEVBQUVrK0UsZUFBa0JsK0UsRUFBRW8rRSxlQUU5Q3ArRSxFQUFFaS9FLGVBQWlCL0IsR0FDZmw5RSxFQUFFay9FLHlCQUEyQjNzRCxFQUFRNHNELGFBQ3BDbi9FLEVBQUU0K0UsV0FBYTUrRSxFQUFFKytFLGtCQUNqQi8rRSxFQUFFbytFLGFBQWVwK0UsRUFBRWsrRSxrQkFHeEJsK0UsRUFBRTIrRSxrQkFBbUIsR0FJcEIzK0UsRUFBRXUzRSxTQUFTNkgsaUJBQ1pwL0UsRUFBRTA4RSxnQkFBa0IxOEUsRUFBRXUzRSxTQUFTOEgsb0JBQXNCci9FLEVBQUV5OEUsZUFFdkR6OEUsRUFBRXMvRSxrQkFBbUIsRUFDckJ0L0UsRUFBRXUvRSxZQUFjdi9FLEVBQUUwOEUsZ0JBQWtCMThFLEVBQUV3L0Usa0JBQ3RDeC9FLEVBQUV5L0UsV0FBYXovRSxFQUFFMDhFLGdCQUFrQjE4RSxFQUFFdS9FLFlBQ3JDdi9FLEVBQUUwL0UsaUJBQW1CVixFQUNuQmgvRSxFQUNBazlFLEVBQU9sOUUsRUFBRXUvRSxZQUFjdi9FLEVBQUUwOEUsZ0JBQW1CMThFLEVBQUV5OEUsZ0JBRWhEejhFLEVBQUUyL0UsY0FBZ0J6QyxFQUNmYSxHQUFvQi85RSxFQUFFdS9FLFlBQWN2L0UsRUFBRTAvRSxtQkFDcEMxL0UsRUFBRXk4RSxjQUFnQno4RSxFQUFFMDhFLG1CQUd6QjE4RSxFQUFFcy9FLGtCQUFtQixFQUduQnQvRSxFQUFFaS9FLGdCQUFrQmovRSxFQUFFNCtFLFdBQWE1K0UsRUFBRSsrRSxrQkFDdkMvK0UsRUFBRWkvRSxlQUFpQmovRSxFQUFFNCtFLFdBQWE1K0UsRUFBRSsrRSxpQkFFbEMvK0UsRUFBRTIvRSxlQUFpQjMvRSxFQUFFdS9FLFlBQWN2L0UsRUFBRTAvRSxtQkFDdkMxL0UsRUFBRTIvRSxjQUFnQjMvRSxFQUFFdS9FLFlBQWN2L0UsRUFBRTAvRSxrQkFpQ3hDLFNBQW1CbnRELEVBQVN2eUIsR0FDMUIsSUFBSTQvRSxFQUFjLENBQUUzbUUsTUFBT2paLEVBQUU0K0UsWUFDekJiLEVBQW1CaHVFLEtBQUsrb0IsTUFBTXZHLEVBQVFvcUQsV0FFdEMzOEUsRUFBRTYvRSxNQUNKRCxFQUFZdG1FLEtBQ1Z0WixFQUFFay9FLHlCQUNGM3NELEVBQVE0c0QsV0FDUm4vRSxFQUFFaytFLGVBQ0ZsK0UsRUFBRW8rRSxhQUVKd0IsRUFBWXRtRSxLQUFPaVosRUFBUTRzRCxXQUV6Qm4vRSxFQUFFOC9FLHdCQUNKRixFQUFZRyxPQUFTLy9FLEVBQUVnZ0YsaUJBQW1CakMsRUFFMUM2QixFQUFZSyxJQUFNamdGLEVBQUVrZ0YsY0FBZ0JuQyxFQUV0Q3g0RSxFQUFJdkYsRUFBRXUrRSxlQUFnQnFCLEdBRXRCLElBQUlPLEVBQWMsQ0FBRUYsSUFBS2xDLEVBQWtCSSxPQUFRbitFLEVBQUV1L0UsYUFDakR2L0UsRUFBRW9nRix1QkFDQXBnRixFQUFFNi9FLE1BQ0pNLEVBQVlFLE1BQ1ZyZ0YsRUFBRW8rRSxjQUNEcCtFLEVBQUVrL0UseUJBQTJCM3NELEVBQVE0c0QsWUFDdENuL0UsRUFBRXNnRixnQkFDRnRnRixFQUFFdWdGLHFCQUNGLEVBRUZKLEVBQVlFLE1BQVFyZ0YsRUFBRXNnRixnQkFBa0IvdEQsRUFBUTRzRCxXQUc5Q24vRSxFQUFFNi9FLE1BQ0pNLEVBQVk3bUUsS0FDVnRaLEVBQUVrL0UseUJBQ0Yzc0QsRUFBUTRzRCxXQUNXLEVBQW5Cbi9FLEVBQUVrK0UsZUFDRmwrRSxFQUFFbytFLGFBQ0ZwK0UsRUFBRXdnRixlQUNGeGdGLEVBQUV1Z0YscUJBRUpKLEVBQVk3bUUsS0FBT3RaLEVBQUV3Z0YsZUFBaUJqdUQsRUFBUTRzRCxXQUdsRDU1RSxFQUFJdkYsRUFBRXcrRSxlQUFnQjJCLEdBRXRCNTZFLEVBQUl2RixFQUFFeWdGLFdBQVksQ0FDaEJubkUsS0FBTXRaLEVBQUVpL0UsZUFDUmhtRSxNQUFPalosRUFBRSsrRSxnQkFBa0IvK0UsRUFBRTBnRixtQkFFL0JuN0UsRUFBSXZGLEVBQUUyZ0YsV0FBWSxDQUNoQlYsSUFBS2pnRixFQUFFMi9FLGNBQ1B4QixPQUFRbitFLEVBQUUwL0UsaUJBQW1CMS9FLEVBQUU0Z0YsbUJBbkZqQ0MsQ0FBVXR1RCxFQUFTdnlCLEdBRWZBLEVBQUUyK0UsaUJBQ0pwc0QsRUFBUTVuQixVQUFVQyxJQUFJb3dFLEVBQWlCLE9BRXZDem9ELEVBQVE1bkIsVUFBVTNILE9BQU9nNEUsRUFBaUIsTUFDMUNoN0UsRUFBRSsrRSxnQkFBa0IsRUFDcEIvK0UsRUFBRWkvRSxlQUFpQixFQUNuQjFzRCxFQUFRNHNELFlBQXlCLElBQVpuL0UsRUFBRTYvRSxNQUFpQjcvRSxFQUFFbytFLGFBQWUsR0FFdkRwK0UsRUFBRXMvRSxpQkFDSi9zRCxFQUFRNW5CLFVBQVVDLElBQUlvd0UsRUFBaUIsT0FFdkN6b0QsRUFBUTVuQixVQUFVM0gsT0FBT2c0RSxFQUFpQixNQUMxQ2g3RSxFQUFFMC9FLGlCQUFtQixFQUNyQjEvRSxFQUFFMi9FLGNBQWdCLEVBQ2xCcHRELEVBQVFvcUQsVUFBWSxHQUl4QixTQUFTcUMsRUFBYWgvRSxFQUFHOGdGLEdBT3ZCLE9BTkk5Z0YsRUFBRXUzRSxTQUFTd0oscUJBQ2JELEVBQVkvd0UsS0FBSzRxQixJQUFJbW1ELEVBQVc5Z0YsRUFBRXUzRSxTQUFTd0oscUJBRXpDL2dGLEVBQUV1M0UsU0FBU3lKLHFCQUNiRixFQUFZL3dFLEtBQUsycUIsSUFBSW9tRCxFQUFXOWdGLEVBQUV1M0UsU0FBU3lKLHFCQUV0Q0YsRUFtSFQsU0FBU0csRUFDUGpoRixFQUNBdzhFLEdBRUEsSUFBSUUsRUFBa0JGLEVBQUksR0FDdEJDLEVBQWdCRCxFQUFJLEdBQ3BCMEUsRUFBUTFFLEVBQUksR0FDWitDLEVBQWMvQyxFQUFJLEdBQ2xCbUUsRUFBYW5FLEVBQUksR0FDakJrRCxFQUFtQmxELEVBQUksR0FDdkJHLEVBQVlILEVBQUksR0FDaEJ0aUQsRUFBSXNpRCxFQUFJLEdBQ1JnQyxFQUFpQmhDLEVBQUksR0FFckJqcUQsRUFBVXZ5QixFQUFFdXlCLFFBRVo0dUQsRUFBb0IsS0FDcEJDLEVBQXFCLEtBQ3JCQyxFQUFXLEtBRWYsU0FBU0MsRUFBaUIvaEYsR0FDcEJBLEVBQUVnaUYsU0FBV2hpRixFQUFFZ2lGLFFBQVEsS0FDekJoaUYsRUFBRTJoRixHQUFTM2hGLEVBQUVnaUYsUUFBUSxHQUFHTCxPQUUxQjN1RCxFQUFRb3FELEdBQ053RSxFQUFvQkUsR0FBWTloRixFQUFFMmhGLEdBQVNFLEdBQzdDbEcsRUFBa0JsN0UsRUFBR2s2QixHQUNyQjRqRCxFQUFlOTlFLEdBRWZULEVBQUVpaUYsa0JBQ0ZqaUYsRUFBRThJLGlCQUdKLFNBQVNvNUUsSUFDUHRHLEVBQXFCbjdFLEVBQUdrNkIsR0FDeEJsNkIsRUFBRXcrRSxHQUFnQjd6RSxVQUFVM0gsT0FBT2c0RSxHQUNuQ2g3RSxFQUFFMUIsTUFBTWc0QixPQUFPdDJCLEVBQUUwaEYsY0FBZSxZQUFhSixHQUcvQyxTQUFTSyxFQUFVcGlGLEVBQUdxaUYsR0FDcEJULEVBQW9CNXVELEVBQVFvcUQsR0FDeEJpRixHQUFhcmlGLEVBQUVnaUYsVUFDakJoaUYsRUFBRTJoRixHQUFTM2hGLEVBQUVnaUYsUUFBUSxHQUFHTCxPQUUxQkUsRUFBcUI3aEYsRUFBRTJoRixHQUN2QkcsR0FDR3JoRixFQUFFeThFLEdBQWlCejhFLEVBQUUwOEUsS0FDckIxOEUsRUFBRXUvRSxHQUFldi9FLEVBQUUwL0UsSUFDakJrQyxFQUtINWhGLEVBQUUxQixNQUFNZ0IsS0FBS1UsRUFBRTBoRixjQUFlLFlBQWFKLElBSjNDdGhGLEVBQUUxQixNQUFNZ0IsS0FBS1UsRUFBRTBoRixjQUFlLFlBQWFKLEdBQzNDdGhGLEVBQUUxQixNQUFNdytDLEtBQUs5OEMsRUFBRTBoRixjQUFlLFVBQVdELEdBQ3pDbGlGLEVBQUU4SSxrQkFLSnJJLEVBQUV3K0UsR0FBZ0I3ekUsVUFBVUMsSUFBSW93RSxHQUVoQ3o3RSxFQUFFaWlGLGtCQUdKeGhGLEVBQUUxQixNQUFNZ0IsS0FBS1UsRUFBRTJnRixHQUFhLGFBQWEsU0FBVXBoRixHQUNqRG9pRixFQUFVcGlGLE1BRVpTLEVBQUUxQixNQUFNZ0IsS0FBS1UsRUFBRTJnRixHQUFhLGNBQWMsU0FBVXBoRixHQUNsRG9pRixFQUFVcGlGLEdBQUcsTUFpZ0JqQixJQWVJZzhFLEVBQVcsQ0FDYixhQXpvQkYsU0FBbUJ2N0UsR0FDSEEsRUFBRXV5QixRQUVoQnZ5QixFQUFFMUIsTUFBTWdCLEtBQUtVLEVBQUUyZ0YsV0FBWSxhQUFhLFNBQVVwaEYsR0FBSyxPQUFPQSxFQUFFaWlGLHFCQUNoRXhoRixFQUFFMUIsTUFBTWdCLEtBQUtVLEVBQUV3K0UsZUFBZ0IsYUFBYSxTQUFVai9FLEdBQ3BELElBSUlvaEIsRUFIRnBoQixFQUFFMmhGLE1BQ0ZybkYsT0FBT2dvRixZQUNQN2hGLEVBQUV3K0UsZUFBZVAsd0JBQXdCZ0MsSUFDYmpnRixFQUFFMi9FLGNBQWdCLEdBQUssRUFFckQzL0UsRUFBRXV5QixRQUFRb3FELFdBQWFoOEQsRUFBWTNnQixFQUFFMDhFLGdCQUNyQ29CLEVBQWU5OUUsR0FFZlQsRUFBRWlpRixxQkFHSnhoRixFQUFFMUIsTUFBTWdCLEtBQUtVLEVBQUV5Z0YsV0FBWSxhQUFhLFNBQVVsaEYsR0FBSyxPQUFPQSxFQUFFaWlGLHFCQUNoRXhoRixFQUFFMUIsTUFBTWdCLEtBQUtVLEVBQUV1K0UsZUFBZ0IsYUFBYSxTQUFVaC9FLEdBQ3BELElBSUlvaEIsRUFIRnBoQixFQUFFdWlGLE1BQ0Zqb0YsT0FBT2tvRixZQUNQL2hGLEVBQUV1K0UsZUFBZU4sd0JBQXdCM2tFLEtBQ1p0WixFQUFFaS9FLGVBQWlCLEdBQUssRUFFdkRqL0UsRUFBRXV5QixRQUFRNHNELFlBQWN4K0QsRUFBWTNnQixFQUFFaytFLGVBQ3RDSixFQUFlOTlFLEdBRWZULEVBQUVpaUYsc0JBOG1CSixhQTFtQkYsU0FBbUJ4aEYsR0FDakJpaEYsRUFBdUJqaEYsRUFBRyxDQUN4QixpQkFDQSxlQUNBLFFBQ0EsYUFDQSxhQUNBLGtCQUNBLGFBQ0EsSUFDQSxtQkFDRmloRixFQUF1QmpoRixFQUFHLENBQ3hCLGtCQUNBLGdCQUNBLFFBQ0EsY0FDQSxhQUNBLG1CQUNBLFlBQ0EsSUFDQSxvQkF1bEJGK0wsU0EvZ0JGLFNBQWtCL0wsR0FDaEIsSUFBSXV5QixFQUFVdnlCLEVBQUV1eUIsUUFrQ2hCdnlCLEVBQUUxQixNQUFNZ0IsS0FBS1UsRUFBRTBoRixjQUFlLFdBQVcsU0FBVW5pRixHQUNqRCxLQUNHQSxFQUFFeWlGLG9CQUFzQnppRixFQUFFeWlGLHNCQUMzQnppRixFQUFFMGlGLG9CQW5Db0NwckUsRUFBUTBiLEVBQVMsV0FDZjFiLEVBQVE3VyxFQUFFeWdGLFdBQVksV0FBYTVwRSxFQUFRN1csRUFBRTJnRixXQUFZLFdBdUNuRyxDQUlBLElBNVdnQnRsRixFQTRXWjZtRixFQUFnQmo2RSxTQUFTaTZFLGNBQ3pCajZFLFNBQVNpNkUsY0FDVGxpRixFQUFFMGhGLGNBQWNRLGNBQ3BCLEdBQUlBLEVBQWUsQ0FDakIsR0FBOEIsV0FBMUJBLEVBQWNDLFFBQ2hCRCxFQUFnQkEsRUFBY0UsZ0JBQWdCRixtQkFHOUMsS0FBT0EsRUFBY0csWUFDbkJILEVBQWdCQSxFQUFjRyxXQUFXSCxjQUc3QyxHQXRYRnJyRSxFQUZnQnhiLEVBd1hDNm1GLEVBdFhMLDRCQUNacnJFLEVBQVF4YixFQUFJLDZCQUNad2IsRUFBUXhiLEVBQUksK0JBQ1p3YixFQUFReGIsRUFBSSw0QkFvWFIsT0FJSixJQUFJaW5GLEVBQVMsRUFDVEMsRUFBUyxFQUViLE9BQVFoakYsRUFBRStPLE9BQ1IsS0FBSyxHQUVEZzBFLEVBREUvaUYsRUFBRWlqRixTQUNNeGlGLEVBQUVvK0UsYUFDSDcrRSxFQUFFa2pGLFFBQ0R6aUYsRUFBRWsrRSxnQkFFRixHQUVaLE1BQ0YsS0FBSyxHQUVEcUUsRUFERWhqRixFQUFFaWpGLFFBQ0t4aUYsRUFBRXk4RSxjQUNGbDlFLEVBQUVrakYsT0FDRnppRixFQUFFMDhFLGdCQUVGLEdBRVgsTUFDRixLQUFLLEdBRUQ0RixFQURFL2lGLEVBQUVpakYsUUFDS3hpRixFQUFFbytFLGFBQ0Y3K0UsRUFBRWtqRixPQUNGemlGLEVBQUVrK0UsZUFFRixHQUVYLE1BQ0YsS0FBSyxHQUVEcUUsRUFERWhqRixFQUFFaWpGLFNBQ014aUYsRUFBRXk4RSxjQUNIbDlFLEVBQUVrakYsUUFDRHppRixFQUFFMDhFLGlCQUVGLEdBRVosTUFDRixLQUFLLEdBRUQ2RixFQURFaGpGLEVBQUVtakYsU0FDSzFpRixFQUFFMDhFLGlCQUVEMThFLEVBQUUwOEUsZ0JBRWQsTUFDRixLQUFLLEdBQ0g2RixFQUFTdmlGLEVBQUUwOEUsZ0JBQ1gsTUFDRixLQUFLLEdBQ0g2RixHQUFVdmlGLEVBQUUwOEUsZ0JBQ1osTUFDRixLQUFLLEdBQ0g2RixFQUFTdmlGLEVBQUV5OEUsY0FDWCxNQUNGLEtBQUssR0FDSDhGLEdBQVV2aUYsRUFBRXk4RSxjQUNaLE1BQ0YsUUFDRSxPQUdBejhFLEVBQUV1M0UsU0FBU2tILGlCQUE4QixJQUFYNkQsR0FHOUJ0aUYsRUFBRXUzRSxTQUFTNkgsaUJBQThCLElBQVhtRCxJQUlsQ2h3RCxFQUFRb3FELFdBQWE0RixFQUNyQmh3RCxFQUFRNHNELFlBQWNtRCxFQUN0QnhFLEVBQWU5OUUsR0FsSWpCLFNBQThCc2lGLEVBQVFDLEdBQ3BDLElBQUk1RixFQUFZNXNFLEtBQUsrb0IsTUFBTXZHLEVBQVFvcUQsV0FDbkMsR0FBZSxJQUFYMkYsRUFBYyxDQUNoQixJQUFLdGlGLEVBQUVzL0UsaUJBQ0wsT0FBTyxFQUVULEdBQ2lCLElBQWQzQyxHQUFtQjRGLEVBQVMsR0FDNUI1RixHQUFhMzhFLEVBQUV5OEUsY0FBZ0J6OEUsRUFBRTA4RSxpQkFBbUI2RixFQUFTLEVBRTlELE9BQVF2aUYsRUFBRXUzRSxTQUFTb0wsaUJBSXZCLElBQUl4RCxFQUFhNXNELEVBQVE0c0QsV0FDekIsR0FBZSxJQUFYb0QsRUFBYyxDQUNoQixJQUFLdmlGLEVBQUUyK0UsaUJBQ0wsT0FBTyxFQUVULEdBQ2tCLElBQWZRLEdBQW9CbUQsRUFBUyxHQUM3Qm5ELEdBQWNuL0UsRUFBRW8rRSxhQUFlcCtFLEVBQUVrK0UsZ0JBQWtCb0UsRUFBUyxFQUU3RCxPQUFRdGlGLEVBQUV1M0UsU0FBU29MLGlCQUd2QixPQUFPLEVBMEdIQyxDQUFxQk4sRUFBUUMsSUFDL0JoakYsRUFBRThJLHVCQXFZTnc2RSxNQWhZRixTQUFlN2lGLEdBQ2IsSUFBSXV5QixFQUFVdnlCLEVBQUV1eUIsUUFzR2hCLFNBQVN1d0QsRUFBa0J2akYsR0FDekIsSUFBSWk5RSxFQWhGTixTQUEyQmo5RSxHQUN6QixJQUFJK2lGLEVBQVMvaUYsRUFBRStpRixPQUNYQyxHQUFVLEVBQUloakYsRUFBRWdqRixPQW9CcEIsWUFsQnNCLElBQVhELFFBQTRDLElBQVhDLElBRTFDRCxHQUFXLEVBQUkvaUYsRUFBRXdqRixZQUFlLEVBQ2hDUixFQUFTaGpGLEVBQUV5akYsWUFBYyxHQUd2QnpqRixFQUFFMGpGLFdBQTZCLElBQWhCMWpGLEVBQUUwakYsWUFFbkJYLEdBQVUsR0FDVkMsR0FBVSxJQUdSRCxHQUFXQSxHQUFVQyxHQUFXQSxJQUVsQ0QsRUFBUyxFQUNUQyxFQUFTaGpGLEVBQUUyakYsWUFHVDNqRixFQUFFbWpGLFNBRUcsRUFBRUgsR0FBU0QsR0FFYixDQUFDQSxFQUFRQyxHQXNETlksQ0FBa0I1akYsR0FDeEIraUYsRUFBUzlGLEVBQUksR0FDYitGLEVBQVMvRixFQUFJLEdBRWpCLElBdkRGLFNBQWlDejVFLEVBQVF1L0UsRUFBUUMsR0FFL0MsSUFBS2pGLEVBQUlDLFVBQVlockQsRUFBUXZtQixjQUFjLGdCQUN6QyxPQUFPLEVBR1QsSUFBS3VtQixFQUFRbGUsU0FBU3RSLEdBQ3BCLE9BQU8sRUFLVCxJQUZBLElBQUlxZ0YsRUFBU3JnRixFQUVOcWdGLEdBQVVBLElBQVc3d0QsR0FBUyxDQUNuQyxHQUFJNndELEVBQU96NEUsVUFBVTBKLFNBQVMybUUsR0FDNUIsT0FBTyxFQUdULElBQUk1bEUsRUFBUWxRLEVBQUlrK0UsR0FHaEIsR0FBSWIsR0FBVW50RSxFQUFNaXVFLFVBQVV2c0UsTUFBTSxpQkFBa0IsQ0FDcEQsSUFBSXdzRSxFQUFlRixFQUFPOUUsYUFBZThFLEVBQU9HLGFBQ2hELEdBQUlELEVBQWUsSUFFZEYsRUFBT3pHLFVBQVksR0FBSzRGLEVBQVMsR0FDakNhLEVBQU96RyxVQUFZMkcsR0FBZ0JmLEVBQVMsR0FFN0MsT0FBTyxFQUtiLEdBQUlELEdBQVVsdEUsRUFBTW91RSxVQUFVMXNFLE1BQU0saUJBQWtCLENBQ3BELElBQUkyc0UsRUFBZ0JMLEVBQU8vRSxZQUFjK0UsRUFBT00sWUFDaEQsR0FBSUQsRUFBZ0IsSUFFZkwsRUFBT2pFLFdBQWEsR0FBS21ELEVBQVMsR0FDbENjLEVBQU9qRSxXQUFhc0UsR0FBaUJuQixFQUFTLEdBRS9DLE9BQU8sRUFLYmMsRUFBU0EsRUFBT2h3RSxXQUdsQixPQUFPLEVBUUh1d0UsQ0FBd0Jwa0YsRUFBRXdELE9BQVF1L0UsRUFBUUMsR0FBOUMsQ0FJQSxJQUFJcUIsR0FBZ0IsRUFDZjVqRixFQUFFdTNFLFNBQVNzTSxpQkFLTDdqRixFQUFFcy9FLG1CQUFxQnQvRSxFQUFFMitFLGtCQUc5QjRELEVBQ0Zod0QsRUFBUW9xRCxXQUFhNEYsRUFBU3ZpRixFQUFFdTNFLFNBQVN1TSxXQUV6Q3Z4RCxFQUFRb3FELFdBQWEyRixFQUFTdGlGLEVBQUV1M0UsU0FBU3VNLFdBRTNDRixHQUFnQixHQUNQNWpGLEVBQUUyK0UsbUJBQXFCMytFLEVBQUVzL0UsbUJBRzlCZ0QsRUFDRi92RCxFQUFRNHNELFlBQWNtRCxFQUFTdGlGLEVBQUV1M0UsU0FBU3VNLFdBRTFDdnhELEVBQVE0c0QsWUFBY29ELEVBQVN2aUYsRUFBRXUzRSxTQUFTdU0sV0FFNUNGLEdBQWdCLElBbkJoQnJ4RCxFQUFRb3FELFdBQWE0RixFQUFTdmlGLEVBQUV1M0UsU0FBU3VNLFdBQ3pDdnhELEVBQVE0c0QsWUFBY21ELEVBQVN0aUYsRUFBRXUzRSxTQUFTdU0sWUFxQjVDaEcsRUFBZTk5RSxJQUVmNGpGLEVBQWdCQSxHQXpJbEIsU0FBOEJ0QixFQUFRQyxHQUNwQyxJQUFJeEUsRUFBbUJodUUsS0FBSytvQixNQUFNdkcsRUFBUW9xRCxXQUN0Q29ILEVBQThCLElBQXRCeHhELEVBQVFvcUQsVUFDaEJxSCxFQUNGakcsRUFBbUJ4ckQsRUFBUTB4RCxlQUFpQjF4RCxFQUFRK3JELGFBQ2xENEYsRUFBZ0MsSUFBdkIzeEQsRUFBUTRzRCxXQUNqQnBGLEVBQ0Z4bkQsRUFBUTRzRCxXQUFhNXNELEVBQVE0eEQsY0FBZ0I1eEQsRUFBUThyRCxZQVd2RCxRQU5JdHVFLEtBQUtpekIsSUFBSXUvQyxHQUFVeHlFLEtBQUtpekIsSUFBSXMvQyxHQUNsQnlCLEdBQVNDLEVBRVRFLEdBQVVuSyxLQUdKLzVFLEVBQUV1M0UsU0FBU29MLGlCQXVIRUMsQ0FBcUJOLEVBQVFDLE1BQ3hDaGpGLEVBQUU2a0YsVUFDdEI3a0YsRUFBRWlpRixrQkFDRmppRixFQUFFOEksd0JBSXdCLElBQW5CeE8sT0FBT3dxRixRQUNoQnJrRixFQUFFMUIsTUFBTWdCLEtBQUtpekIsRUFBUyxRQUFTdXdELFFBQ1MsSUFBeEJqcEYsT0FBT3lxRixjQUN2QnRrRixFQUFFMUIsTUFBTWdCLEtBQUtpekIsRUFBUyxhQUFjdXdELElBMk90Q3lCLE1Bdk9GLFNBQWV2a0YsR0FDYixHQUFLczlFLEVBQUlFLGVBQWtCRixFQUFJSyxrQkFBL0IsQ0FJQSxJQUFJcHJELEVBQVV2eUIsRUFBRXV5QixRQXVDWml5RCxFQUFjLEdBQ2RDLEVBQVksRUFDWkMsRUFBUSxHQUNSQyxFQUFhLEtBbUpickgsRUFBSUUsZUFDTng5RSxFQUFFMUIsTUFBTWdCLEtBQUtpekIsRUFBUyxhQUFjcXlELEdBQ3BDNWtGLEVBQUUxQixNQUFNZ0IsS0FBS2l6QixFQUFTLFlBQWFzeUQsR0FDbkM3a0YsRUFBRTFCLE1BQU1nQixLQUFLaXpCLEVBQVMsV0FBWXV5RCxJQUN6QnhILEVBQUlLLG9CQUNUOWpGLE9BQU9rckYsY0FDVC9rRixFQUFFMUIsTUFBTWdCLEtBQUtpekIsRUFBUyxjQUFlcXlELEdBQ3JDNWtGLEVBQUUxQixNQUFNZ0IsS0FBS2l6QixFQUFTLGNBQWVzeUQsR0FDckM3a0YsRUFBRTFCLE1BQU1nQixLQUFLaXpCLEVBQVMsWUFBYXV5RCxJQUMxQmpyRixPQUFPbXJGLGlCQUNoQmhsRixFQUFFMUIsTUFBTWdCLEtBQUtpekIsRUFBUyxnQkFBaUJxeUQsR0FDdkM1a0YsRUFBRTFCLE1BQU1nQixLQUFLaXpCLEVBQVMsZ0JBQWlCc3lELEdBQ3ZDN2tGLEVBQUUxQixNQUFNZ0IsS0FBS2l6QixFQUFTLGNBQWV1eUQsS0F6S3pDLFNBQVNHLEVBQWVDLEVBQWFDLEdBQ25DNXlELEVBQVFvcUQsV0FBYXdJLEVBQ3JCNXlELEVBQVE0c0QsWUFBYytGLEVBRXRCcEgsRUFBZTk5RSxHQVFqQixTQUFTb2xGLEVBQVM3bEYsR0FDaEIsT0FBSUEsRUFBRThsRixjQUNHOWxGLEVBQUU4bEYsY0FBYyxHQUdoQjlsRixFQUlYLFNBQVMrbEYsRUFBYS9sRixHQUNwQixRQUFJQSxFQUFFZ21GLGFBQWlDLFFBQWxCaG1GLEVBQUVnbUYsYUFBdUMsSUFBZGhtRixFQUFFaW1GLFdBRzlDam1GLEVBQUU4bEYsZUFBNEMsSUFBM0I5bEYsRUFBRThsRixjQUFjL3FGLFdBSXJDaUYsRUFBRWdtRixhQUNnQixVQUFsQmhtRixFQUFFZ21GLGFBQ0ZobUYsRUFBRWdtRixjQUFnQmhtRixFQUFFa21GLHVCQU94QixTQUFTYixFQUFXcmxGLEdBQ2xCLEdBQUsrbEYsRUFBYS9sRixHQUFsQixDQUlBLElBQUlnbEYsRUFBUWEsRUFBUzdsRixHQUVyQmlsRixFQUFZMUMsTUFBUXlDLEVBQU16QyxNQUMxQjBDLEVBQVl0RCxNQUFRcUQsRUFBTXJELE1BRTFCdUQsR0FBWSxJQUFJbDVCLE1BQU9tNkIsVUFFSixPQUFmZixHQUNGZ0IsY0FBY2hCLElBaURsQixTQUFTRSxFQUFVdGxGLEdBQ2pCLEdBQUkrbEYsRUFBYS9sRixHQUFJLENBQ25CLElBQUlnbEYsRUFBUWEsRUFBUzdsRixHQUVqQnFtRixFQUFnQixDQUFFOUQsTUFBT3lDLEVBQU16QyxNQUFPWixNQUFPcUQsRUFBTXJELE9BRW5EZ0UsRUFBY1UsRUFBYzlELE1BQVEwQyxFQUFZMUMsTUFDaERxRCxFQUFjUyxFQUFjMUUsTUFBUXNELEVBQVl0RCxNQUVwRCxHQXRESixTQUFpQ24rRSxFQUFRdS9FLEVBQVFDLEdBQy9DLElBQUtod0QsRUFBUWxlLFNBQVN0UixHQUNwQixPQUFPLEVBS1QsSUFGQSxJQUFJcWdGLEVBQVNyZ0YsRUFFTnFnRixHQUFVQSxJQUFXN3dELEdBQVMsQ0FDbkMsR0FBSTZ3RCxFQUFPejRFLFVBQVUwSixTQUFTMm1FLEdBQzVCLE9BQU8sRUFHVCxJQUFJNWxFLEVBQVFsUSxFQUFJaytFLEdBR2hCLEdBQUliLEdBQVVudEUsRUFBTWl1RSxVQUFVdnNFLE1BQU0saUJBQWtCLENBQ3BELElBQUl3c0UsRUFBZUYsRUFBTzlFLGFBQWU4RSxFQUFPRyxhQUNoRCxHQUFJRCxFQUFlLElBRWRGLEVBQU96RyxVQUFZLEdBQUs0RixFQUFTLEdBQ2pDYSxFQUFPekcsVUFBWTJHLEdBQWdCZixFQUFTLEdBRTdDLE9BQU8sRUFLYixHQUFJRCxHQUFVbHRFLEVBQU1vdUUsVUFBVTFzRSxNQUFNLGlCQUFrQixDQUNwRCxJQUFJMnNFLEVBQWdCTCxFQUFPL0UsWUFBYytFLEVBQU9NLFlBQ2hELEdBQUlELEVBQWdCLElBRWZMLEVBQU9qRSxXQUFhLEdBQUttRCxFQUFTLEdBQ2xDYyxFQUFPakUsV0FBYXNFLEdBQWlCbkIsRUFBUyxHQUUvQyxPQUFPLEVBS2JjLEVBQVNBLEVBQU9od0UsV0FHbEIsT0FBTyxFQVlEdXdFLENBQXdCcGtGLEVBQUV3RCxPQUFRbWlGLEVBQWFDLEdBQ2pELE9BR0ZGLEVBQWVDLEVBQWFDLEdBQzVCWCxFQUFjb0IsRUFFZCxJQUFJQyxHQUFjLElBQUl0NkIsTUFBT202QixVQUV6QkksRUFBVUQsRUFBY3BCLEVBQ3hCcUIsRUFBVSxJQUNacEIsRUFBTXpxRCxFQUFJaXJELEVBQWNZLEVBQ3hCcEIsRUFBTXhxRCxFQUFJaXJELEVBQWNXLEVBQ3hCckIsRUFBWW9CLEdBeEpsQixTQUF1QnZELEVBQVFDLEdBQzdCLElBQUk1RixFQUFZNXNFLEtBQUsrb0IsTUFBTXZHLEVBQVFvcUQsV0FDL0J3QyxFQUFhNXNELEVBQVE0c0QsV0FDckI0RyxFQUFhaDJFLEtBQUtpekIsSUFBSXMvQyxHQUN0QjBELEVBQWFqMkUsS0FBS2l6QixJQUFJdS9DLEdBRTFCLEdBQUl5RCxFQUFhRCxHQUdmLEdBQ0d4RCxFQUFTLEdBQUs1RixJQUFjMzhFLEVBQUV5OEUsY0FBZ0J6OEUsRUFBRTA4RSxpQkFDaEQ2RixFQUFTLEdBQW1CLElBQWQ1RixFQUdmLE9BQTBCLElBQW5COWlGLE9BQU9vc0YsU0FBaUIxRCxFQUFTLEdBQUtqRixFQUFJTyxjQUU5QyxHQUFJa0ksRUFBYUMsSUFJbkIxRCxFQUFTLEdBQUtuRCxJQUFlbi9FLEVBQUVvK0UsYUFBZXArRSxFQUFFaytFLGdCQUNoRG9FLEVBQVMsR0FBb0IsSUFBZm5ELEdBRWYsT0FBTyxFQUlYLE9BQU8sRUFnSUR5RSxDQUFjc0IsRUFBYUMsSUFDN0I1bEYsRUFBRThJLGtCQUlSLFNBQVN5OEUsSUFDSDlrRixFQUFFdTNFLFNBQVMyTyxjQUNiUCxjQUFjaEIsR0FDZEEsRUFBYXdCLGFBQVksV0FDbkJubUYsRUFBRW9tRixjQUNKVCxjQUFjaEIsR0FJWEQsRUFBTXpxRCxHQUFNeXFELEVBQU14cUQsRUFLbkJucUIsS0FBS2l6QixJQUFJMGhELEVBQU16cUQsR0FBSyxLQUFRbHFCLEtBQUtpekIsSUFBSTBoRCxFQUFNeHFELEdBQUssSUFDbER5ckQsY0FBY2hCLElBSWhCTSxFQUF5QixHQUFWUCxFQUFNenFELEVBQWtCLEdBQVZ5cUQsRUFBTXhxRCxHQUVuQ3dxRCxFQUFNenFELEdBQUssR0FDWHlxRCxFQUFNeHFELEdBQUssSUFaVHlyRCxjQUFjaEIsS0FhZixRQTRDTDBCLEVBQW1CLFNBQTBCOXpELEVBQVMrekQsR0FDeEQsSUFBSTVLLEVBQVNuaEYsS0FPYixRQU5zQixJQUFqQityRixJQUEwQkEsRUFBZSxJQUV2QixpQkFBWi96RCxJQUNUQSxFQUFVdHFCLFNBQVMrRCxjQUFjdW1CLEtBRzlCQSxJQUFZQSxFQUFRZzBELFNBQ3ZCLE1BQU0sSUFBSTNyRCxNQUFNLDBEQVFsQixJQUFLLElBQUluNkIsS0FMVGxHLEtBQUtnNEIsUUFBVUEsRUFFZkEsRUFBUTVuQixVQUFVQyxJQWhrQ1osTUFra0NOclEsS0FBS2c5RSxTQXZDb0MsQ0FDekNnRSxTQUFVLENBQUMsYUFBYyxhQUFjLFdBQVksUUFBUyxTQUM1RHlGLG1CQUFvQixLQUNwQkQsbUJBQW9CLEtBQ3BCMUYsbUJBQW9CLElBQ3BCcUQsb0JBQXFCLEVBQ3JCVyxvQkFBcUIsRUFDckJaLGlCQUFpQixFQUNqQlcsaUJBQWlCLEVBQ2pCOEcsYUFBYSxFQUNickMsa0JBQWtCLEVBQ2xCbEIsa0JBQWtCLEVBQ2xCbUIsV0FBWSxHQTRCSXdDLEVBQ2QvckYsS0FBS2c5RSxTQUFTOTJFLEdBQU82bEYsRUFBYTdsRixHQUdwQ2xHLEtBQUsyakYsZUFBaUIsS0FDdEIzakYsS0FBS21pRixnQkFBa0IsS0FDdkJuaUYsS0FBSzZqRixhQUFlLEtBQ3BCN2pGLEtBQUtraUYsY0FBZ0IsS0FFckIsSUFTTTl4QyxFQURBNjdDLEVBUkZDLEVBQVEsV0FBYyxPQUFPbDBELEVBQVE1bkIsVUFBVUMsSUFBSW93RSxJQUNuRDBMLEVBQU8sV0FBYyxPQUFPbjBELEVBQVE1bkIsVUFBVTNILE9BQU9nNEUsSUFFekR6Z0YsS0FBS3NsRixNQUFtQyxRQUEzQjM2RSxFQUFJcXRCLEdBQVM1UixXQUNQLElBQWZwbUIsS0FBS3NsRixPQUNQdHRELEVBQVE1bkIsVUFBVUMsSUFobENmLFdBa2xDTHJRLEtBQUtvc0Ysa0JBQ0NILEVBQXFCajBELEVBQVE0c0QsV0FFakM1c0QsRUFBUTRzRCxZQUFjLEVBQ3RCeDBDLEVBQVNwWSxFQUFRNHNELFdBQWEsRUFDOUI1c0QsRUFBUTRzRCxXQUFhcUgsRUFDZDc3QyxHQUVUcHdDLEtBQUsya0YseUJBQTJCM2tGLEtBQUtvc0YsaUJBQ2pDcDBELEVBQVE4ckQsWUFBYzlyRCxFQUFRbXhELFlBQzlCLEVBQ0pucEYsS0FBSytELE1BQVEsSUFBSXM5RSxFQUNqQnJoRixLQUFLbW5GLGNBQWdCbnZELEVBQVFtdkQsZUFBaUJ6NUUsU0FFOUMxTixLQUFLZ2tGLGVBQWlCampELEVBQUkwL0MsRUFBaUIsTUFDM0N6b0QsRUFBUTltQixZQUFZbFIsS0FBS2drRixnQkFDekJoa0YsS0FBS2ttRixXQUFhbmxELEVBQUkwL0MsRUFBa0IsTUFDeEN6Z0YsS0FBS2drRixlQUFlOXlFLFlBQVlsUixLQUFLa21GLFlBQ3JDbG1GLEtBQUtrbUYsV0FBV3YxRSxhQUFhLFdBQVksR0FDekMzUSxLQUFLK0QsTUFBTWdCLEtBQUsvRSxLQUFLa21GLFdBQVksUUFBU2dHLEdBQzFDbHNGLEtBQUsrRCxNQUFNZ0IsS0FBSy9FLEtBQUtrbUYsV0FBWSxPQUFRaUcsR0FDekNuc0YsS0FBS29rRixpQkFBbUIsS0FDeEJwa0YsS0FBS3drRixnQkFBa0IsS0FDdkJ4a0YsS0FBSzBrRixlQUFpQixLQUN0QixJQUFJMkgsRUFBYTFoRixFQUFJM0ssS0FBS2drRixnQkFDMUJoa0YsS0FBS3lsRixpQkFBbUJweEQsU0FBU2c0RCxFQUFXN0csT0FBUSxJQUNoRGg2RCxNQUFNeHJCLEtBQUt5bEYsbUJBQ2J6bEYsS0FBS3VsRix5QkFBMEIsRUFDL0J2bEYsS0FBSzJsRixjQUFnQmhELEVBQU0wSixFQUFXM0csTUFFdEMxbEYsS0FBS3VsRix5QkFBMEIsRUFFakN2bEYsS0FBS21tRixpQkFDSHhELEVBQU0wSixFQUFXQyxpQkFBbUIzSixFQUFNMEosRUFBV0Usa0JBRXZEdmhGLEVBQUloTCxLQUFLZ2tGLGVBQWdCLENBQUV2Z0YsUUFBUyxVQUNwQ3pELEtBQUtza0YsaUJBQ0gzQixFQUFNMEosRUFBV0csWUFBYzdKLEVBQU0wSixFQUFXSSxhQUNsRHpoRixFQUFJaEwsS0FBS2drRixlQUFnQixDQUFFdmdGLFFBQVMsS0FDcEN6RCxLQUFLcWtGLFdBQWEsS0FDbEJya0YsS0FBS3VrRixXQUFhLEtBRWxCdmtGLEtBQUtpa0YsZUFBaUJsakQsRUFBSTAvQyxFQUFpQixNQUMzQ3pvRCxFQUFROW1CLFlBQVlsUixLQUFLaWtGLGdCQUN6QmprRixLQUFLb21GLFdBQWFybEQsRUFBSTAvQyxFQUFrQixNQUN4Q3pnRixLQUFLaWtGLGVBQWUveUUsWUFBWWxSLEtBQUtvbUYsWUFDckNwbUYsS0FBS29tRixXQUFXejFFLGFBQWEsV0FBWSxHQUN6QzNRLEtBQUsrRCxNQUFNZ0IsS0FBSy9FLEtBQUtvbUYsV0FBWSxRQUFTOEYsR0FDMUNsc0YsS0FBSytELE1BQU1nQixLQUFLL0UsS0FBS29tRixXQUFZLE9BQVErRixHQUN6Q25zRixLQUFLK2tGLGlCQUFtQixLQUN4Qi9rRixLQUFLbWxGLGlCQUFtQixLQUN4Qm5sRixLQUFLb2xGLGNBQWdCLEtBQ3JCLElBQUlzSCxFQUFhL2hGLEVBQUkzSyxLQUFLaWtGLGdCQUMxQmprRixLQUFLK2xGLGdCQUFrQjF4RCxTQUFTcTRELEVBQVc1RyxNQUFPLElBQzlDdDZELE1BQU14ckIsS0FBSytsRixrQkFDYi9sRixLQUFLNmxGLHdCQUF5QixFQUM5QjdsRixLQUFLaW1GLGVBQWlCdEQsRUFBTStKLEVBQVczdEUsT0FFdkMvZSxLQUFLNmxGLHdCQUF5QixFQUVoQzdsRixLQUFLZ21GLHFCQUF1QmhtRixLQUFLc2xGLE1BcjZCbkMsU0FBb0J0dEQsR0FDbEIsSUFBSTIwRCxFQUFTaGlGLEVBQUlxdEIsR0FDakIsT0FDRTJxRCxFQUFNZ0ssRUFBT2p1RSxPQUNiaWtFLEVBQU1nSyxFQUFPQyxhQUNiakssRUFBTWdLLEVBQU9FLGNBQ2JsSyxFQUFNZ0ssRUFBT0wsaUJBQ2IzSixFQUFNZ0ssRUFBT0osa0JBODVCMEJPLENBQVc5c0YsS0FBS29tRixZQUFjLEtBQ3ZFcG1GLEtBQUtxbUYsaUJBQ0gxRCxFQUFNK0osRUFBV0ssZ0JBQWtCcEssRUFBTStKLEVBQVdNLG1CQUN0RGhpRixFQUFJaEwsS0FBS2lrRixlQUFnQixDQUFFeGdGLFFBQVMsVUFDcEN6RCxLQUFLaWxGLGtCQUNIdEMsRUFBTStKLEVBQVdPLFdBQWF0SyxFQUFNK0osRUFBV1EsY0FDakRsaUYsRUFBSWhMLEtBQUtpa0YsZUFBZ0IsQ0FBRXhnRixRQUFTLEtBQ3BDekQsS0FBS2dsRixZQUFjLEtBQ25CaGxGLEtBQUtrbEYsV0FBYSxLQUVsQmxsRixLQUFLdWlGLE1BQVEsQ0FDWDdpRCxFQUNFMUgsRUFBUTRzRCxZQUFjLEVBQ2xCLFFBQ0E1c0QsRUFBUTRzRCxZQUFjNWtGLEtBQUs2akYsYUFBZTdqRixLQUFLMmpGLGVBQy9DLE1BQ0EsS0FDTmhrRCxFQUNFM0gsRUFBUW9xRCxXQUFhLEVBQ2pCLFFBQ0FwcUQsRUFBUW9xRCxXQUFhcGlGLEtBQUtraUYsY0FBZ0JsaUYsS0FBS21pRixnQkFDL0MsTUFDQSxNQUdSbmlGLEtBQUs2Z0YsU0FBVSxFQUVmN2dGLEtBQUtnOUUsU0FBU2dFLFNBQVN6N0UsU0FBUSxTQUFVNG5GLEdBQWUsT0FBT25NLEVBQVNtTSxHQUFhaE0sTUFFckZuaEYsS0FBS290RixjQUFnQjUzRSxLQUFLK29CLE1BQU12RyxFQUFRb3FELFdBQ3hDcGlGLEtBQUtxdEYsZUFBaUJyMUQsRUFBUTRzRCxXQUM5QjVrRixLQUFLK0QsTUFBTWdCLEtBQUsvRSxLQUFLZzRCLFFBQVMsVUFBVSxTQUFVaHpCLEdBQUssT0FBT204RSxFQUFPbU0sU0FBU3RvRixNQUM5RXUrRSxFQUFldmpGLE9BR2pCOHJGLEVBQWlCeG5GLFVBQVV1M0IsT0FBUyxXQUM3Qjc3QixLQUFLNmdGLFVBS1Y3Z0YsS0FBSzJrRix5QkFBMkIza0YsS0FBS29zRixpQkFDakNwc0YsS0FBS2c0QixRQUFROHJELFlBQWM5akYsS0FBS2c0QixRQUFRbXhELFlBQ3hDLEVBR0puK0UsRUFBSWhMLEtBQUtna0YsZUFBZ0IsQ0FBRXZnRixRQUFTLFVBQ3BDdUgsRUFBSWhMLEtBQUtpa0YsZUFBZ0IsQ0FBRXhnRixRQUFTLFVBQ3BDekQsS0FBS3NrRixpQkFDSDNCLEVBQU1oNEUsRUFBSTNLLEtBQUtna0YsZ0JBQWdCd0ksWUFDL0I3SixFQUFNaDRFLEVBQUkzSyxLQUFLZ2tGLGdCQUFnQnlJLGFBQ2pDenNGLEtBQUtpbEYsa0JBQ0h0QyxFQUFNaDRFLEVBQUkzSyxLQUFLaWtGLGdCQUFnQmdKLFdBQy9CdEssRUFBTWg0RSxFQUFJM0ssS0FBS2lrRixnQkFBZ0JpSixjQUdqQ2xpRixFQUFJaEwsS0FBS2drRixlQUFnQixDQUFFdmdGLFFBQVMsU0FDcEN1SCxFQUFJaEwsS0FBS2lrRixlQUFnQixDQUFFeGdGLFFBQVMsU0FFcEM4L0UsRUFBZXZqRixNQUVmMmhGLEVBQWtCM2hGLEtBQU0sTUFBTyxHQUFHLEdBQU8sR0FDekMyaEYsRUFBa0IzaEYsS0FBTSxPQUFRLEdBQUcsR0FBTyxHQUUxQ2dMLEVBQUloTCxLQUFLZ2tGLGVBQWdCLENBQUV2Z0YsUUFBUyxLQUNwQ3VILEVBQUloTCxLQUFLaWtGLGVBQWdCLENBQUV4Z0YsUUFBUyxPQUd0Q3FvRixFQUFpQnhuRixVQUFVZ3BGLFNBQVcsU0FBbUJ0b0YsR0FDbERoRixLQUFLNmdGLFVBSVYwQyxFQUFldmpGLE1BQ2YyaEYsRUFBa0IzaEYsS0FBTSxNQUFPQSxLQUFLZzRCLFFBQVFvcUQsVUFBWXBpRixLQUFLb3RGLGVBQzdEekwsRUFDRTNoRixLQUNBLE9BQ0FBLEtBQUtnNEIsUUFBUTRzRCxXQUFhNWtGLEtBQUtxdEYsZ0JBR2pDcnRGLEtBQUtvdEYsY0FBZ0I1M0UsS0FBSytvQixNQUFNditCLEtBQUtnNEIsUUFBUW9xRCxXQUM3Q3BpRixLQUFLcXRGLGVBQWlCcnRGLEtBQUtnNEIsUUFBUTRzRCxhQUdyQ2tILEVBQWlCeG5GLFVBQVUweUIsUUFBVSxXQUM5QmgzQixLQUFLNmdGLFVBSVY3Z0YsS0FBSytELE1BQU1xOUUsWUFDWDM0RSxFQUFPekksS0FBS2ttRixZQUNaejlFLEVBQU96SSxLQUFLb21GLFlBQ1ozOUUsRUFBT3pJLEtBQUtna0YsZ0JBQ1p2N0UsRUFBT3pJLEtBQUtpa0YsZ0JBQ1pqa0YsS0FBS3V0RixrQkFHTHZ0RixLQUFLZzRCLFFBQVUsS0FDZmg0QixLQUFLa21GLFdBQWEsS0FDbEJsbUYsS0FBS29tRixXQUFhLEtBQ2xCcG1GLEtBQUtna0YsZUFBaUIsS0FDdEJoa0YsS0FBS2lrRixlQUFpQixLQUV0QmprRixLQUFLNmdGLFNBQVUsSUFHakJpTCxFQUFpQnhuRixVQUFVaXBGLGdCQUFrQixXQUMzQ3Z0RixLQUFLZzRCLFFBQVFnb0QsVUFBWWhnRixLQUFLZzRCLFFBQVFnb0QsVUFDbkN4MEUsTUFBTSxLQUNOaXdCLFFBQU8sU0FBVTl6QixHQUFRLE9BQVFBLEVBQUs0VSxNQUFNLG9CQUM1Qy9iLEtBQUssTUFHVixXLHNCQzN6Q0EsYUFXZ0IsMEJBQWQsRUFNTyxXQUVSLGFBczBCRCxPQWowQkMsU0FBU2d0RixFQUFNQyxHQUVmLElBR0NDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBRUFDLEVBQ0FDLEVBQ0FDLEVBRUFDLEVBQ0FDLEVBQ0FDLEVBRUFDLEVBRUFDLEVBb0RBQyxFQW1LQUMsRUFDQUMsRUE3T0dDLEVBQUs1dUYsS0FDTDZ1RixHQUFvQixFQUN2QkMsR0FBbUIsRUFRbkJDLEdBQW9CLEVBWXBCQyxFQUFvQixDQUNuQkMsU0FBVSxDQUFDdkosSUFBSSxHQUFJRixPQUFPLFFBQzFCMEosZUFBZ0IsQ0FBQyxPQUFRLFVBQVcsWUFBYSxLQUFNLFdBQ3ZEQyxXQUFZLElBQ1pDLGtCQUFtQixJQUNuQkMsc0JBQXVCLElBRXZCQyxpQkFBa0IsU0FBU25yRixFQUFNb3JGLEdBQ2hDLE9BQUlwckYsRUFBSzFFLE9BSVQ4dkYsRUFBVTcxRSxTQUFTLEdBQUdqSixVQUFZdE0sRUFBSzFFLE9BQ2hDLElBSk44dkYsRUFBVTcxRSxTQUFTLEdBQUdqSixVQUFZLElBQzNCLElBTVQrK0UsU0FBUSxFQUNSRCxXQUFXLEVBQ1hFLGNBQWMsRUFDZEMsUUFBUSxFQUNSQyxTQUFTLEVBQ1RDLFdBQVcsRUFDWEMsU0FBUyxFQUNUQyxhQUFhLEVBRWJDLFlBQVksRUFDWkMscUJBQXFCLEVBRXJCQyx5QkFBeUIsRUFFekJDLGFBQWMsQ0FDYixDQUFDeGdGLEdBQUcsV0FBWXVpQixNQUFNLG9CQUFxQnB5QixJQUFJLHdEQUMvQyxDQUFDNlAsR0FBRyxVQUFXdWlCLE1BQU0sUUFBU3B5QixJQUFJLDhEQUNsQyxDQUFDNlAsR0FBRyxZQUFhdWlCLE1BQU0sU0FBVXB5QixJQUFJLG9HQUVyQyxDQUFDNlAsR0FBRyxXQUFZdWlCLE1BQU0saUJBQWtCcHlCLElBQUksb0JBQXFCc3dGLFVBQVMsSUFFM0VDLG9CQUFxQixXQUNwQixPQUFPNUMsRUFBSzZDLFNBQVMxNkMsS0FBTyxJQUU3QjI2QyxtQkFBb0IsV0FDbkIsT0FBT2h4RixPQUFPcVQsU0FBUzQ5RSxNQUV4QkMsZ0JBQWlCLFdBQ2hCLE9BQU9oRCxFQUFLNkMsU0FBUzV3RixPQUFTLElBRy9CZ3hGLGtCQUFtQixNQUNuQkMsaUJBQWtCLE1BUWhCQyxFQUFpQixTQUFTM3JGLEdBQzVCLEdBQUd5cEYsRUFDRixPQUFPLEVBSVJ6cEYsRUFBSUEsR0FBSzFGLE9BQU95RSxNQUVieXFGLEVBQVNXLFlBQWNYLEVBQVNvQyxZQUFjMUMsR0FFaEQyQyxJQVNELElBTEEsSUFDQ0MsRUFFQUMsRUFEQUMsR0FGWWhzRixFQUFFd0QsUUFBVXhELEVBQUVpc0YsWUFFSkMsYUFBYSxVQUFZLEdBR3hDenJGLEVBQUksRUFBR0EsRUFBSTByRixFQUFZcHhGLE9BQVEwRixLQUN0Q3FyRixFQUFZSyxFQUFZMXJGLElBQ1gyckYsT0FBU0osRUFBYTcwRCxRQUFRLFNBQVcyMEQsRUFBVW5wRixPQUFVLElBQ3pFbXBGLEVBQVVNLFFBQ1ZMLEdBQVEsR0FLVixHQUFHQSxFQUFPLENBQ04vckYsRUFBRWlpRixpQkFDSmppRixFQUFFaWlGLGtCQUVId0gsR0FBb0IsRUFRcEIsSUFBSTRDLEVBQVc1RCxFQUFVNkQsU0FBU0MsYUFBZSxJQUFNLEdBQzVCcDRDLFlBQVcsV0FDckNzMUMsR0FBb0IsSUFDbEI0QyxLQU9MRyxFQUFtQixTQUFTMXdGLEVBQUkyd0YsRUFBT3BoRixHQUN0Q285RSxHQUFZcDlFLEVBQU0sTUFBUSxVQUFZLFNBQVV2UCxFQUFJLFNBQVcyd0YsSUFLaEVDLEVBQWlCLFdBQ2hCLElBQUlDLEVBQTRDLElBQTdCbkQsRUFBU29ELGdCQUV6QkQsSUFBZ0JwRCxJQUNsQmlELEVBQWlCN0QsRUFBVyxnQkFBaUJnRSxHQUM3Q3BELEVBQXNCb0QsSUFHeEJFLEVBQXlCLFdBQ3hCTCxFQUFpQnhELEVBQWEsc0JBQXVCZSxJQUV0RCtDLEVBQW9CLFdBd0JuQixPQXRCQS9DLEdBQXFCQSxJQVdwQnRCLEVBQVVwK0UsWUFBWTIrRSxFQUFhLDhCQUNuQzcwQyxZQUFXLFdBQ1A0MUMsR0FDRjhDLE1BRUMsT0FaSEEsSUFDQTE0QyxZQUFXLFdBQ040MUMsR0FDSHRCLEVBQVUzM0UsU0FBU2s0RSxFQUFhLGdDQUUvQixLQVVBZSxHQUNIZ0QsS0FFTSxHQUdSQyxFQUFtQixTQUFTaHRGLEdBRTNCLElBQUl3RCxHQURKeEQsRUFBSUEsR0FBSzFGLE9BQU95RSxPQUNEeUUsUUFBVXhELEVBQUVpc0YsV0FJM0IsT0FGQXpELEVBQUt5RSxNQUFNLGlCQUFrQmp0RixFQUFHd0QsTUFFNUJBLEVBQU8rbkYsT0FJUC9uRixFQUFPMHBGLGFBQWEsY0FJeEI1eUYsT0FBT3UyQyxLQUFLcnRDLEVBQU8rbkYsS0FBTSxhQUFjLDJGQUUvQmp4RixPQUFPNnlGLE9BQVMzOEUsS0FBS0MsTUFBTTA4RSxPQUFPenpFLE1BQVEsRUFBSSxLQUFPLE1BRXpEcXdFLEdBQ0grQyxJQUdNLEtBRVJDLEVBQW1CLFdBUWxCLElBUEEsSUFDQ0ssRUFFQUMsRUFDQUMsRUFDQUMsRUFMR0MsRUFBaUIsR0FPYi9zRixFQUFJLEVBQUdBLEVBQUkrb0YsRUFBUzBCLGFBQWFud0YsT0FBUTBGLElBQ2hEMnNGLEVBQWtCNUQsRUFBUzBCLGFBQWF6cUYsR0FFeEM0c0YsRUFBWTdELEVBQVM0QixvQkFBb0JnQyxHQUN6Q0UsRUFBVzlELEVBQVM4QixtQkFBbUI4QixHQUN2Q0csRUFBYS9ELEVBQVNnQyxnQkFBZ0I0QixHQU90Q0ksR0FBa0IsWUFMUEosRUFBZ0J2eUYsSUFBSW1DLFFBQVEsVUFBV285QyxtQkFBbUJrekMsSUFDL0R0d0YsUUFBUSxnQkFBaUJvOUMsbUJBQW1CaXpDLElBQzVDcndGLFFBQVEsb0JBQXFCcXdGLEdBQzdCcndGLFFBQVEsV0FBWW85QyxtQkFBbUJtekMsSUFFM0IseUNBQ1lILEVBQWdCMWlGLEdBQUssS0FDN0MwaUYsRUFBZ0JqQyxTQUFXLFdBQWEsSUFBTSxJQUMvQ2lDLEVBQWdCbmdFLE1BQVEsT0FFMUJ1OEQsRUFBU2lFLHNCQUNYRCxFQUFpQmhFLEVBQVNpRSxvQkFBb0JMLEVBQWlCSSxJQUdqRXhFLEVBQVl0MEUsU0FBUyxHQUFHakosVUFBWStoRixFQUNwQ3hFLEVBQVl0MEUsU0FBUyxHQUFHZzVFLFFBQVVWLEdBR25DVyxFQUFpQixTQUFTbnFGLEdBQ3pCLElBQUksSUFBSy9DLEVBQUksRUFBR0EsRUFBSStvRixFQUFTVSxlQUFlbnZGLE9BQVEwRixJQUNuRCxHQUFJZ29GLEVBQVVyK0UsU0FBUzVHLEVBQVEsU0FBV2dtRixFQUFTVSxlQUFlenBGLElBQ2pFLE9BQU8sR0FNVm10RixFQUFpQixFQUNqQi9CLEVBQW1CLFdBQ2xCcitCLGFBQWFtOEIsR0FDYmlFLEVBQWlCLEVBQ2QxRSxHQUNGVSxFQUFHaUUsU0FBUSxJQUdiQyxFQUFzQixTQUFTOXRGLEdBRTlCLElBQUl1USxHQURKdlEsRUFBSUEsR0FBUTFGLE9BQU95RSxPQUNOZ3ZGLGVBQWlCL3RGLEVBQUVndUYsVUFDM0J6OUUsR0FBMEIsU0FBbEJBLEVBQUt5MkUsV0FDakJ4NUIsYUFBYW04QixHQUNiQSxFQUFheDFDLFlBQVcsV0FDdkJ5MUMsRUFBR2lFLFNBQVEsS0FDVHJFLEVBQVNZLHFCQXNEZDZELEVBQTBCLFNBQVMza0QsR0FDOUIrL0MsSUFBNEIvL0MsSUFDL0JrakQsRUFBaUJwRCxFQUFtQixxQkFBc0I5L0MsR0FDMUQrL0MsRUFBMEIvL0MsSUFHNUI0a0QsRUFBbUIsU0FBUy91RixHQUMzQixJQUFJZ3ZGLEVBQU1odkYsRUFBS2l2RixLQUVmLElBOUxRNUYsRUFBSzZGLG1CQUFxQjdFLEVBQVNvQyxXQUFhdUIsT0FBT3p6RSxNQUFROHZFLEVBQVNrQyxpQkE4TGpELENBRTlCLElBQUk0QyxFQUFPOUUsRUFBU1MsU0FDcEIsR0FBR1QsRUFBU2UsV0FBNkIsU0FBaEIrRCxFQUFLOU4sT0FPN0IsR0FOSXFJLEtBQ0hBLEVBQXdCSixFQUFVOEYsU0FBUyxzQ0FDckJyaUYsWUFBYXU4RSxFQUFVOEYsU0FBUywwQkFDdEQ1RixFQUFVdHpFLGFBQWF3ekUsRUFBdUJELEdBQzlDSCxFQUFVMzNFLFNBQVM2M0UsRUFBVyxrQkFFM0JhLEVBQVNjLGlCQUFpQm5yRixFQUFNMHBGLEdBQXVCLEdBQVEsQ0FFbEUsSUFBSTJGLEVBQWMzRixFQUFzQjdFLGFBQ3hDbUssRUFBSTNOLE9BQVNueEQsU0FBU20vRCxFQUFZLEtBQU8sUUFFekNMLEVBQUkzTixPQUFTOE4sRUFBSzVOLFNBR25CeU4sRUFBSTNOLE9BQXlCLFNBQWhCOE4sRUFBSzlOLE9BQW9CLEVBQUk4TixFQUFLOU4sT0FJaEQyTixFQUFJek4sSUFBTTROLEVBQUs1TixTQUVmeU4sRUFBSXpOLElBQU15TixFQUFJM04sT0FBUyxHQXFEdEIyTCxFQUFjLENBQ2pCLENBQ0N4cEYsS0FBTSxVQUNOOHJGLE9BQVEsWUFDUkMsT0FBUSxTQUFTNXlGLEdBQ2hCOHNGLEVBQW9COXNGLElBR3RCLENBQ0M2RyxLQUFNLGNBQ044ckYsT0FBUSxVQUNSQyxPQUFRLFNBQVM1eUYsR0FDaEJrdEYsRUFBY2x0RixHQUVmc3dGLE1BQU8sV0FDTlUsTUFHRixDQUNDbnFGLEtBQU0sZ0JBQ044ckYsT0FBUSxVQUNSQyxPQUFRLFNBQVM1eUYsR0FDaEJpdEYsRUFBZWp0RixHQUVoQnN3RixNQUFPLFdBQ05VLE1BR0YsQ0FDQ25xRixLQUFNLGVBQ044ckYsT0FBUSxTQUNSckMsTUFBTzVELEVBQUttRyxtQkFFYixDQUNDaHNGLEtBQU0sVUFDTjhyRixPQUFRLFlBQ1JDLE9BQVEsU0FBUzV5RixHQUNoQmd0RixFQUFrQmh0RixJQUdwQixDQUNDNkcsS0FBTSxnQkFDTjhyRixPQUFRLFVBQ1JyQyxNQUFPNUQsRUFBS3ozQyxPQUViLENBQ0NwdUMsS0FBTSxzQkFDTjhyRixPQUFRLFVBQ1JyQyxNQUFPNUQsRUFBS29HLE1BRWIsQ0FDQ2pzRixLQUFNLHVCQUNOOHJGLE9BQVEsVUFDUnJDLE1BQU81RCxFQUFLbDlDLE1BRWIsQ0FDQzNvQyxLQUFNLGFBQ044ckYsT0FBUSxlQUNSckMsTUFBTyxXQUNIMUQsRUFBY21HLGVBQ2hCbkcsRUFBY2g2QyxPQUVkZzZDLEVBQWMvNUMsVUFJakIsQ0FDQ2hzQyxLQUFNLFlBQ044ckYsT0FBUSxjQUNSQyxPQUFRLFNBQVM1eUYsR0FDaEJzdEYsRUFBb0J0dEYsS0FxRHZCOHRGLEVBQUdwaEYsS0FBTyxXQTVKNEIsSUFZaENzbUYsRUFtSkxyRyxFQUFVdFUsT0FBT3FVLEVBQUtqbkYsUUFBU3lvRixHQUFtQixHQUdsRFIsRUFBV2hCLEVBQUtqbkYsUUFHaEJvbkYsRUFBWUYsRUFBVXNHLGdCQUFnQnZHLEVBQUt3RyxXQUFZLGFBR3ZEN0YsRUFBVVgsRUFBS3lHLFFBcktOLGtCQUFrQixTQUFTcjdDLEdBQy9CazJDLEdBQW9CbDJDLEVBQU0sSUFDNUJnMkMsRUFBR3NGLGdCQUNPcEYsR0FBb0JsMkMsR0FBTyxLQUNyQ2cyQyxFQUFHdUYsa0JBTUxoRyxFQUFRLGdCQUFpQixTQUFTdjFDLEdBQzlCazJDLEdBQW9CbDJDLEVBQU0sSUFDNUJnMkMsRUFBR3NGLGVBQ0hKLEdBQXNCLEdBQ2JBLElBQXdCaEYsR0FBb0JsMkMsRUFBTSxJQUMzRGcyQyxFQUFHdUYsa0JBSUxoRyxFQUFRLG9CQUFvQixZQUMzQjJGLEdBQXNCLEtBQ0toRixHQUMxQkYsRUFBR3VGLGtCQXFKTmhHLEVBQVEsZUFBZ0JTLEVBQUcveUQsUUFHM0JzeUQsRUFBUSxhQUFhLFNBQVMzd0MsR0FDN0IsSUFBSTQyQyxFQUFtQjVHLEVBQUs2QyxTQUFTK0QsaUJBQ2xDNUcsRUFBSzZHLGlCQUFtQkQsRUFDMUI1RyxFQUFLOEcsT0FBT0YsRUFBa0I1MkMsRUFBTyxLQUVyQ2d3QyxFQUFLOEcsT0FBTzlGLEVBQVMrRixrQkFBaUIsRUFBTy9HLEVBQUs2QyxVQUFXN3lDLEVBQU8sUUFLdEUyd0MsRUFBUSxvQkFBb0IsU0FBU25wRixFQUFHd3ZGLEVBQVFDLEdBQy9DLElBQUlycUQsRUFBSXBsQyxFQUFFd0QsUUFBVXhELEVBQUVpc0YsV0FFckI3bUQsR0FDQUEsRUFBRThtRCxhQUFhLFVBQVlsc0YsRUFBRS9GLEtBQUtrOUIsUUFBUSxVQUFZLElBQ3BEaU8sRUFBRThtRCxhQUFhLFNBQVMvMEQsUUFBUSxhQUFlLEdBQUsscUJBQXVCa0gsS0FBSytHLEVBQUV3OUMsWUFFcEY2TSxFQUFXQyxTQUFVLE1BS3ZCdkcsRUFBUSxjQUFjLFdBQ3JCVixFQUFVMW9GLEtBQUs0b0YsRUFBVyxnQkFBaUJnRCxHQUMzQ2xELEVBQVUxb0YsS0FBS3lvRixFQUFLd0csV0FBWSxVQUFXcEYsRUFBRytGLGFBRTFDbkgsRUFBSzZGLG1CQUNSNUYsRUFBVTFvRixLQUFLeW9GLEVBQUt3RyxXQUFZLFlBQWFwRixFQUFHZ0csZ0JBS2xEekcsRUFBUSxnQkFBZ0IsV0FDbkJZLEdBQ0grQyxJQUdFcEQsR0FDRnRELGNBQWNzRCxHQUVmakIsRUFBVTF4RCxPQUFPcnVCLFNBQVUsV0FBWW9sRixHQUN2Q3JGLEVBQVUxeEQsT0FBT3J1QixTQUFVLFlBQWFtakYsR0FDeENwRCxFQUFVMXhELE9BQU80eEQsRUFBVyxnQkFBaUJnRCxHQUM3Q2xELEVBQVUxeEQsT0FBT3l4RCxFQUFLd0csV0FBWSxVQUFXcEYsRUFBRytGLGFBQ2hEbEgsRUFBVTF4RCxPQUFPeXhELEVBQUt3RyxXQUFZLFlBQWFwRixFQUFHZ0csYUFFL0NsSCxJQUNGRCxFQUFVMXhELE9BQU9ydUIsU0FBVWdnRixFQUFjbUgsT0FBUWpHLEVBQUdrRyxrQkFDakRwSCxFQUFjbUcsaUJBQ2hCckYsRUFBU3VHLHNCQUF3QixFQUNqQ3JILEVBQWNoNkMsUUFFZmc2QyxFQUFnQixTQU1sQlMsRUFBUSxXQUFXLFdBQ2ZLLEVBQVNlLFlBQ1IxQixHQUNGRixFQUFVejBDLFlBQVkyMEMsR0FFdkJKLEVBQVVwK0UsWUFBWXUrRSxFQUFtQix5QkFHdkNJLElBQ0ZBLEVBQVl0MEUsU0FBUyxHQUFHZzVFLFFBQVUsTUFFbkNqRixFQUFVcCtFLFlBQVlzK0UsRUFBVyx3QkFDakNGLEVBQVUzM0UsU0FBVTYzRSxFQUFXLG9CQUMvQmlCLEVBQUdpRSxTQUFRLE1BSVJyRSxFQUFTd0csdUJBQ1p2SCxFQUFVcCtFLFlBQWFzK0UsRUFBVyxvQkFFbkNRLEVBQVEsaUJBQWlCLFdBQ3JCSyxFQUFTd0csdUJBQ1h2SCxFQUFVcCtFLFlBQWFzK0UsRUFBVyx1QkFHcENRLEVBQVEsa0JBQWtCLFdBQ3pCVixFQUFVMzNFLFNBQVU2M0UsRUFBVyx1QkFHaENRLEVBQVEsc0JBQXVCK0UsR0EzSlQsV0FDdEIsSUFBSS91RixFQUNIOHdGLEVBQ0FuRSxFQUVHb0UsRUFBMkIsU0FBU0MsR0FDdkMsR0FBSUEsRUFLSixJQURBLElBQUlsMUQsRUFBSWsxRCxFQUFVcDFGLE9BQ1YwRixFQUFJLEVBQUdBLEVBQUl3NkIsRUFBR3g2QixJQUFLLENBQzFCdEIsRUFBT2d4RixFQUFVMXZGLEdBQ2pCd3ZGLEVBQVk5d0YsRUFBSzY3RSxVQUVqQixJQUFJLElBQUk3Z0QsRUFBSSxFQUFHQSxFQUFJZ3lELEVBQVlweEYsT0FBUW8vQixJQUN0QzJ4RCxFQUFZSyxFQUFZaHlELEdBRXJCODFELEVBQVU5NEQsUUFBUSxTQUFXMjBELEVBQVVucEYsT0FBUyxJQUU5QzZtRixFQUFTc0MsRUFBVTJDLFNBRXRCaEcsRUFBVXArRSxZQUFZbEwsRUFBTSwyQkFDekIyc0YsRUFBVTRDLFFBQ1o1QyxFQUFVNEMsT0FBT3Z2RixJQUtsQnNwRixFQUFVMzNFLFNBQVMzUixFQUFNLDhCQU85Qit3RixFQUF5QnZILEVBQVVqMEUsVUFFbkMsSUFBSTA3RSxFQUFVM0gsRUFBVXNHLGdCQUFnQnBHLEVBQVcsaUJBQ2hEeUgsR0FDRkYsRUFBMEJFLEVBQU8xN0UsVUFxSGxDMjdFLEdBRUc3RyxFQUFTbUIsU0FBVzVCLEdBQWdCQyxJQUN0Q2UsR0FBb0IsR0FHckIyQyxJQS9SSWxELEVBQVNXLFlBQ1hoQixFQUFRLGFBQWEsV0FFcEJWLEVBQVUxb0YsS0FBSzJJLFNBQVUsWUFBYW1qRixHQUN0Q3BELEVBQVUxb0YsS0FBSzJJLFNBQVUsV0FBWW9sRixHQUVyQ3BFLEVBQWdCOUMsYUFBWSxXQUVMLEtBRHRCZ0gsR0FFQ2hFLEVBQUdpRSxTQUFRLEtBRVZyRSxFQUFTVyxXQUFhLE1Bbkd4QlgsRUFBU2lCLGVBQWlCaEMsRUFBVTZELFNBQVNDLGVBQzNDN0QsSUFDSEEsRUFBZ0JrQixFQUFHMEcsb0JBRWpCNUgsR0FDRkQsRUFBVTFvRixLQUFLMkksU0FBVWdnRixFQUFjbUgsT0FBUWpHLEVBQUdrRyxrQkFDbERsRyxFQUFHa0csbUJBQ0hySCxFQUFVMzNFLFNBQVMwM0UsRUFBS3pzRixTQUFVLHNCQUVsQzBzRixFQUFVcCtFLFlBQVltK0UsRUFBS3pzRixTQUFVLHNCQU1wQ3l0RixFQUFTc0IsY0FFWG1ELEdBQXdCLEdBRXhCOUUsRUFBUSxnQkFBZ0IsV0FFdkIzN0IsYUFBYTg3QixHQUdiQSxFQUEyQm4xQyxZQUFXLFdBRWxDcTBDLEVBQUs2QyxVQUFZN0MsRUFBSzZDLFNBQVNyaEYsVUFFNUJ3K0UsRUFBSytILHVCQUEwQi9ILEVBQUs2QyxTQUFTbUYsTUFBUWhJLEVBQUs2QyxTQUFTbUYsSUFBSUMsZUFHM0V4QyxHQUF3QixHQUt6QkEsR0FBd0IsS0FHdkJ6RSxFQUFTYSwwQkFHYmxCLEVBQVEscUJBQXFCLFNBQVMxdkUsRUFBT3RhLEdBQ3pDcXBGLEVBQUs2QyxXQUFhbHNGLEdBQ3BCOHVGLEdBQXdCLFFBb1Y3QnJFLEVBQUdpRSxRQUFVLFNBQVM2QyxHQUNyQnhILEVBQVV3SCxFQUNWbEUsRUFBaUI3RCxFQUFXLFdBQVkrSCxJQUd6QzlHLEVBQUcveUQsT0FBUyxXQUVSaXpELEdBQW9CdEIsRUFBSzZDLFVBRTNCekIsRUFBRytHLHVCQUVBbkgsRUFBU2UsWUFDWGYsRUFBU2MsaUJBQWlCOUIsRUFBSzZDLFNBQVV6QyxHQUV6QzRELEVBQWlCNUQsRUFBbUIsa0JBQW1CSixFQUFLNkMsU0FBUzV3RixRQUd0RW92RixHQUFvQixHQUdwQkEsR0FBb0IsRUFHakJFLEdBQ0grQyxJQUdESixLQUdEOUMsRUFBR2tHLGlCQUFtQixTQUFTOXZGLEdBRTNCQSxHQUdGbTBDLFlBQVcsV0FDVnEwQyxFQUFLb0ksZ0JBQWlCLEVBQUduSSxFQUFVb0ksZ0JBQ2pDLElBSUpwSSxHQUFZQyxFQUFjbUcsZUFBaUIsTUFBUSxVQUFZLFNBQVVyRyxFQUFLenNGLFNBQVUsYUFHekY2dEYsRUFBRytHLHFCQUF1QixXQUN0Qm5ILEVBQVNvQixZQUNYOUIsRUFBZ0JyOUUsVUFBYSs4RSxFQUFLc0ksa0JBQWtCLEVBQzdDdEgsRUFBU2lDLGtCQUNUakMsRUFBU29ELGtCQUlsQmhELEVBQUcrRixZQUFjLFNBQVMzdkYsR0FFekIsSUFBSXdELEdBREp4RCxFQUFJQSxHQUFLMUYsT0FBT3lFLE9BQ0R5RSxRQUFVeEQsRUFBRWlzRixXQUUzQixJQUFHeEMsRUFJSCxHQUFHenBGLEVBQUUrd0YsUUFBbUMsVUFBekIvd0YsRUFBRSt3RixPQUFPL0ssWUFBeUIsQ0FHaEQsR0FBRzJILEVBQWVucUYsR0FFakIsWUFEQWdsRixFQUFLejNDLFFBSUgwM0MsRUFBVXIrRSxTQUFTNUcsRUFBUSxlQUNGLElBQXhCZ2xGLEVBQUs2RyxnQkFBd0I3RyxFQUFLNkcsZ0JBQWtCN0csRUFBSzZDLFNBQVMyRixTQUNqRXhILEVBQVN5Qix5QkFDWHpDLEVBQUt6M0MsUUFHTnkzQyxFQUFLbUcsa0JBQWtCM3VGLEVBQUUrd0YsT0FBT0Usb0JBZ0JsQyxHQVRHekgsRUFBU3dCLHNCQUNSbEIsRUFDRkYsRUFBR3NGLGVBRUh0RixFQUFHdUYsZ0JBS0YzRixFQUFTdUIsYUFBZXRDLEVBQVVyK0UsU0FBUzVHLEVBQVEsY0FBZ0JtcUYsRUFBZW5xRixJQUVwRixZQURBZ2xGLEVBQUt6M0MsU0FNUjY0QyxFQUFHZ0csWUFBYyxTQUFTNXZGLEdBRXpCLElBQUl3RCxHQURKeEQsRUFBSUEsR0FBSzFGLE9BQU95RSxPQUNEeUUsUUFBVXhELEVBQUVpc0YsV0FHM0JPLEVBQWlCN0QsRUFBVyxpQkFBa0JnRixFQUFlbnFGLEtBRzlEb21GLEVBQUdzRixhQUFlLFdBQ2pCekcsRUFBVTMzRSxTQUFTNjNFLEVBQVUsb0JBQzdCbUIsR0FBbUIsR0FHcEJGLEVBQUd1RixhQUFlLFdBQ2pCckYsR0FBbUIsRUFDZkQsR0FDSEQsRUFBRy95RCxTQUVKNHhELEVBQVVwK0UsWUFBWXMrRSxFQUFVLHFCQUdqQ2lCLEVBQUdzSCxtQkFBcUIsV0FDdkIsSUFBSS94RCxFQUFJejJCLFNBQ1IsU0FBVXkyQixFQUFFZ3lELGdCQUFrQmh5RCxFQUFFaXlELHFCQUF1Qmp5RCxFQUFFa3lELHNCQUF3Qmx5RCxFQUFFbXlELG1CQUdwRjFILEVBQUcwRyxpQkFBbUIsV0FDckIsSUFDQ2lCLEVBREdDLEVBQUs5b0YsU0FBU2dqQyxnQkFFakIrbEQsRUFBSyxtQkEwRE4sT0F4RElELEVBQUdFLGtCQUNOSCxFQUFNLENBQ0xJLE9BQVEsb0JBQ1JDLE1BQU8saUJBQ1BDLFNBQVUsb0JBQ1ZoQyxPQUFRNEIsR0FHQUQsRUFBR00scUJBQ1pQLEVBQU0sQ0FDTEksT0FBUSx1QkFDUkMsTUFBTyxzQkFDUEMsU0FBVSx1QkFDVmhDLE9BQVEsTUFBUTRCLEdBS1JELEVBQUdPLHdCQUNaUixFQUFNLENBQ0xJLE9BQVEsMEJBQ1JDLE1BQU8sdUJBQ1BDLFNBQVUsMEJBQ1ZoQyxPQUFRLFNBQVc0QixHQUdYRCxFQUFHUSxzQkFDWlQsRUFBTSxDQUNMSSxPQUFRLHNCQUNSQyxNQUFPLG1CQUNQQyxTQUFVLHNCQUNWaEMsT0FBUSx1QkFJUDBCLElBQ0ZBLEVBQUk1aUQsTUFBUSxXQUtYLEdBSEFzNkMsRUFBNEJPLEVBQVN5SSxjQUNyQ3pJLEVBQVN5SSxlQUFnQixFQUVOLDRCQUFoQmozRixLQUFLMjJGLE9BR1AsT0FBT25KLEVBQUt6c0YsU0FBU2YsS0FBSzIyRixVQUYxQm5KLEVBQUt6c0YsU0FBU2YsS0FBSzIyRixRQUFTelcsUUFBUWdYLHVCQUt0Q1gsRUFBSTdpRCxLQUFPLFdBR1YsT0FGQTg2QyxFQUFTeUksY0FBZ0JoSixFQUVsQnZnRixTQUFTMU4sS0FBSzQyRixVQUd0QkwsRUFBSTFDLGFBQWUsV0FBYSxPQUFPbm1GLFNBQVMxTixLQUFLNjJGLFlBRy9DTixNQXgwQk8sbUMsc0JDWGhCLGFBS2dCLDBCQUFkLEVBTU8sV0FFUixhQXVvSEEsT0F0b0hpQixTQUFTeDFGLEVBQVVvMkYsRUFBU0MsRUFBTzd3RixHQVVyRCxJQUFJa25GLEVBQVksQ0FDZjZELFNBQVUsS0FDVnZzRixLQUFNLFNBQVN5RCxFQUFRdkosRUFBTTA1QyxFQUFVNWMsR0FDdEMsSUFBSXVyQyxHQUFjdnJDLEVBQVMsU0FBVyxPQUFTLGdCQUMvQzk4QixFQUFPQSxFQUFLdU0sTUFBTSxLQUNsQixJQUFJLElBQUkvRixFQUFJLEVBQUdBLEVBQUl4RyxFQUFLYyxPQUFRMEYsSUFDNUJ4RyxFQUFLd0csSUFDUCtDLEVBQU84K0QsR0FBYXJvRSxFQUFLd0csR0FBSWt6QyxHQUFVLElBSTFDM3lDLFFBQVMsU0FBU0wsR0FDakIsT0FBUUEsYUFBZXlHLE9BRXhCbW5GLFNBQVUsU0FBUzhELEVBQVNwZ0QsR0FDM0IsSUFBSW4yQyxFQUFLNE0sU0FBU3lDLGNBQWM4bUMsR0FBTyxPQUl2QyxPQUhHb2dELElBQ0Z2MkYsRUFBR2svRSxVQUFZcVgsR0FFVHYyRixHQUVSKzBGLFdBQVksV0FDWCxJQUFJeUIsRUFBVWg0RixPQUFPZ29GLFlBQ3JCLFlBQW1Cam9GLElBQVppNEYsRUFBd0JBLEVBQVU1cEYsU0FBU2dqQyxnQkFBZ0IweEMsV0FFbkVybUQsT0FBUSxTQUFTdnpCLEVBQVF2SixFQUFNMDVDLEdBQzlCODBDLEVBQVUxb0YsS0FBS3lELEVBQU92SixFQUFLMDVDLEdBQVMsSUFFckN0cEMsWUFBYSxTQUFTdk8sRUFBSWsvRSxHQUN6QixJQUFJdVgsRUFBTSxJQUFJMS9FLE9BQU8sVUFBWW1vRSxFQUFZLFdBQzdDbC9FLEVBQUdrL0UsVUFBWWwvRSxFQUFHay9FLFVBQVVoK0UsUUFBUXUxRixFQUFLLEtBQUt2MUYsUUFBUSxTQUFVLElBQUlBLFFBQVEsU0FBVSxLQUV2RjhULFNBQVUsU0FBU2hWLEVBQUlrL0UsR0FDakJ5TixFQUFVcitFLFNBQVN0TyxFQUFHay9FLEtBQzFCbC9FLEVBQUdrL0UsWUFBY2wvRSxFQUFHay9FLFVBQVksSUFBTSxJQUFNQSxJQUc5QzV3RSxTQUFVLFNBQVN0TyxFQUFJay9FLEdBQ3RCLE9BQU9sL0UsRUFBR2svRSxXQUFhLElBQUlub0UsT0FBTyxVQUFZbW9FLEVBQVksV0FBVzM4QyxLQUFLdmlDLEVBQUdrL0UsWUFFOUUrVCxnQkFBaUIsU0FBU3lELEVBQVVDLEdBRW5DLElBREEsSUFBSW44RCxFQUFPazhELEVBQVNwOUUsV0FDZGtoQixHQUFNLENBQ1gsR0FBSW15RCxFQUFVcitFLFNBQVNrc0IsRUFBTW04RCxHQUM1QixPQUFPbjhELEVBRVJBLEVBQU9BLEVBQUtvOEQsY0FHZEMsWUFBYSxTQUFTN3FDLEVBQU9wcEQsRUFBT3dDLEdBRW5DLElBREEsSUFBSVQsRUFBSXFuRCxFQUFNL3NELE9BQ1IwRixLQUNMLEdBQUdxbkQsRUFBTXJuRCxHQUFHUyxLQUFTeEMsRUFDcEIsT0FBTytCLEVBR1QsT0FBUSxHQUVUMHpFLE9BQVEsU0FBU3llLEVBQUlDLEVBQUlDLEdBQ3hCLElBQUssSUFBSTUwRixLQUFRMjBGLEVBQ2hCLEdBQUlBLEVBQUd0ekYsZUFBZXJCLEdBQU8sQ0FDNUIsR0FBRzQwRixHQUFvQkYsRUFBR3J6RixlQUFlckIsR0FDeEMsU0FFRDAwRixFQUFHMTBGLEdBQVEyMEYsRUFBRzMwRixLQUlqQjYwRixPQUFRLENBQ1BDLEtBQU0sQ0FDTHp6RCxJQUFLLFNBQVN2RSxHQUNiLE9BQU94cUIsS0FBS3lpRixJQUFJajRELEdBQUt4cUIsS0FBSzBpRixHQUFLLEtBRWhDQyxNQUFPLFNBQVNuNEQsR0FDZixRQUFVeHFCLEtBQUs0aUYsSUFBSTVpRixLQUFLMGlGLEdBQUtsNEQsR0FBSyxHQUFLLElBR3pDcTRELE1BQU8sQ0FDTjl6RCxJQUFLLFNBQVN2RSxHQUNiLFFBQVNBLEVBQUlBLEVBQUlBLEVBQUksS0FxQ3hCczRELGVBQWdCLFdBQ2YsR0FBRzdLLEVBQVU2RCxTQUNaLE9BQU83RCxFQUFVNkQsU0FFbEIsSUFDQ2lILEVBRGM5SyxFQUFVOEYsV0FDRDE0RSxNQUN2QjI5RSxFQUFTLEdBQ1RsSCxFQUFXLEdBaUJaLEdBZEFBLEVBQVNtSCxNQUFRL3FGLFNBQVN3dkMsTUFBUXh2QyxTQUFTNEQsaUJBRTNDZ2dGLEVBQVN0SCxNQUFRLGlCQUFrQjFxRixPQUVoQ0EsT0FBT281Rix3QkFDVHBILEVBQVNxSCxJQUFNcjVGLE9BQU9vNUYsc0JBQ3RCcEgsRUFBU3NILElBQU10NUYsT0FBT3U1RixzQkFHdkJ2SCxFQUFTd0gsZUFBa0J4NUYsT0FBbUIsY0FBS3UwQyxVQUFVa2xELGtCQUt6RHpILEVBQVN3SCxhQUFjLENBRTFCLElBQUlFLEVBQUtubEQsVUFBVXlGLFVBU25CLEdBQUksY0FBY2pXLEtBQUt3USxVQUFVb2xELFVBQVcsQ0FDM0MsSUFBSWoyRCxFQUFLNlEsVUFBb0IsV0FBRXQzQixNQUFNLDBCQUNsQ3ltQixHQUFLQSxFQUFFampDLE9BQVMsSUFDbEJpakMsRUFBSTNPLFNBQVMyTyxFQUFFLEdBQUksTUFDWCxHQUFLQSxFQUFJLElBQ2hCc3VELEVBQVM0SCxlQUFnQixHQVM1QixJQUFJMzhFLEVBQVF5OEUsRUFBR3o4RSxNQUFNLHVCQUNqQjQ4RSxFQUFrQjU4RSxFQUFRQSxFQUFNLEdBQUssR0FDekM0OEUsRUFBaUJqdUMsV0FBV2l1QyxLQUNQLElBQ2pCQSxFQUFpQixNQUNuQjdILEVBQVNDLGNBQWUsR0FFekJELEVBQVM4SCxlQUFpQkQsR0FFM0I3SCxFQUFTK0gsY0FBZ0IseUJBQXlCaDJELEtBQUsyMUQsR0FVeEQsSUFMQSxJQUVDTSxFQUNBQyxFQUhHQyxFQUFjLENBQUMsWUFBYSxjQUFlLGlCQUM5Q0MsRUFBVSxDQUFDLEdBQUksU0FBUyxNQUFNLEtBQUssS0FJNUJoMEYsRUFBSSxFQUFHQSxFQUFJLEVBQUdBLElBQUssQ0FDMUIreUYsRUFBU2lCLEVBQVFoMEYsR0FFakIsSUFBSSxJQUFJMDVCLEVBQUksRUFBR0EsRUFBSSxFQUFHQSxJQUNyQm02RCxFQUFpQkUsRUFBWXI2RCxHQUc3Qm82RCxFQUFZZixHQUFVQSxFQUNoQmMsRUFBZTU0RCxPQUFPLEdBQUcrQyxjQUFnQjYxRCxFQUFlcnpGLE1BQU0sR0FDOURxekYsSUFFRmhJLEVBQVNnSSxJQUFtQkMsS0FBYWhCLElBQzVDakgsRUFBU2dJLEdBQWtCQyxHQUkxQmYsSUFBV2xILEVBQVNxSCxNQUN0QkgsRUFBU0EsRUFBT2gvRCxjQUNoQjgzRCxFQUFTcUgsSUFBTXI1RixPQUFPazVGLEVBQU8seUJBQzFCbEgsRUFBU3FILE1BQ1hySCxFQUFTc0gsSUFBTXQ1RixPQUFPazVGLEVBQU8seUJBQ3pCbDVGLE9BQU9rNUYsRUFBTyxpQ0FLckIsSUFBSWxILEVBQVNxSCxJQUFLLENBQ2pCLElBQUllLEVBQVcsRUFDZnBJLEVBQVNxSCxJQUFNLFNBQVNsOEQsR0FDdkIsSUFBSWs5RCxHQUFXLElBQUkzb0MsTUFBT202QixVQUN0QnlPLEVBQWFwa0YsS0FBSzRxQixJQUFJLEVBQUcsSUFBTXU1RCxFQUFXRCxJQUMxQ2hxRixFQUFLcFEsT0FBTzY1QyxZQUFXLFdBQWExYyxFQUFHazlELEVBQVdDLEtBQWdCQSxHQUV0RSxPQURBRixFQUFXQyxFQUFXQyxFQUNmbHFGLEdBRVI0aEYsRUFBU3NILElBQU0sU0FBU2xwRixHQUFNOGlELGFBQWE5aUQsSUFTNUMsT0FMQTRoRixFQUFTdUksTUFBUW5zRixTQUFTb3NGLG1CQUNwQnBzRixTQUFTb3NGLGdCQUFnQiw2QkFBOEIsT0FBT0MsY0FFcEV0TSxFQUFVNkQsU0FBV0EsRUFFZEEsSUFJVDdELEVBQVU2SyxpQkFHUDdLLEVBQVU2RCxTQUFTbUgsUUFFckJoTCxFQUFVMW9GLEtBQU8sU0FBU3lELEVBQVF2SixFQUFNMDVDLEVBQVU1YyxHQUVqRDk4QixFQUFPQSxFQUFLdU0sTUFBTSxLQVFsQixJQU5BLElBQ0N3dUYsRUFERzF5QixHQUFjdnJDLEVBQVMsU0FBVyxVQUFZLFFBRWpEaytELEVBQVksV0FDWHRoRCxFQUFTdWhELFlBQVkxMUYsS0FBS20wQyxJQUdwQmx6QyxFQUFJLEVBQUdBLEVBQUl4RyxFQUFLYyxPQUFRMEYsSUFFL0IsR0FEQXUwRixFQUFTLzZGLEVBQUt3RyxHQUdiLEdBQXVCLGlCQUFia3pDLEdBQXlCQSxFQUFTdWhELFlBQWEsQ0FDeEQsR0FBSW4rRCxHQUdILElBQUk0YyxFQUFTLFFBQVVxaEQsR0FDdEIsT0FBTyxPQUhScmhELEVBQVMsUUFBVXFoRCxHQUFVQyxFQU85Qnp4RixFQUFPOCtELEdBQWEsS0FBTzB5QixFQUFRcmhELEVBQVMsUUFBVXFoRCxTQUV0RHh4RixFQUFPOCtELEdBQWEsS0FBTzB5QixFQUFRcmhELEtBY3hDLElBQUlwSSxFQUFPdndDLEtBV1B3dUYsRUFBVyxDQUNkMkwsZ0JBQWUsRUFDZkMsUUFBUyxJQUNUQyxVQUFXLEVBQ1h6SixXQUFXLEVBQ1gwSixNQUFNLEVBQ05DLGNBQWMsRUFDZHRELGVBQWUsRUFDZnVELHFCQUFxQixFQUNyQkMsa0JBQW1CLElBQ25CMUYsc0JBQXVCLElBQ3ZCQyxzQkFBdUIsSUFDdkIwRixpQkFBaUIsRUFDakJ4TyxPQUFPLEVBQ1B5TyxRQUFRLEVBQ1JDLFdBQVcsRUFDWEMsc0JBQXVCLElBQ3ZCQyxlQUFnQixJQUNoQkMsbUJBQW9CLFNBQVNqNkYsR0FDdEIsTUFBc0IsTUFBZkEsRUFBRzhtRixTQUVkMk0saUJBQWtCLFNBQVN5RyxFQUFjNzJGLEdBQ3hDLE9BQUc2MkYsR0FHSzcyRixFQUFLaXdGLGlCQUFtQixHQUZ4QixFQUVrQyxNQUczQzZHLGNBQWUsS0FDbEJyckYsT0FBTyxFQUdQc3JGLFVBQVcsT0FFWnpOLEVBQVV0VSxPQUFPcVYsRUFBVWpvRixHQU8zQixJQUlJNDBGLEVBQ0hDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBSUFDLEVBQ0FDLEVBQ0FDLEVBRUFDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBSUFDLEVBQ0FDLEVBRUFDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBRUFDLEVBRUFDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBR0FDLEVBNDdCR0MsRUFDSEMsRUFVQUMsRUFJQUMsRUFDQUMsRUFDQUMsRUFJQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFFQUMsRUFDQUMsR0FFQUMsR0FDQUMsR0FHQUMsR0FDQUMsR0FDQUMsR0FDQUMsR0FDQUMsR0FxRkFDLEdBL2xDQUMsR0FUUSxDQUFDai9ELEVBQUUsRUFBRUMsRUFBRSxHQVVmaS9ELEdBVlEsQ0FBQ2wvRCxFQUFFLEVBQUVDLEVBQUUsR0FXZmsvRCxHQVhRLENBQUNuL0QsRUFBRSxFQUFFQyxFQUFFLEdBZWZtL0QsR0FBZ0IsR0FPaEJDLEdBQXFCLEVBQ3JCQyxHQUFVLEdBQ1ZDLEdBeEJRLENBQUN2L0QsRUFBRSxFQUFFQyxFQUFFLEdBMkJmdS9ELEdBQWEsRUFPYkMsSUFBbUIsRUFFbkJDLEdBQVcsR0FRWEMsR0FBcUIsR0FDckJDLElBQXVCLEVBS3ZCQyxHQUFrQixTQUFTNTNGLEVBQU15MEIsR0FDaENxeEQsRUFBVXRVLE9BQU81b0MsRUFBTW5VLEVBQU9vakUsZUFDOUJKLEdBQVM5K0YsS0FBS3FILElBR2Y4M0YsR0FBZSxTQUFTaGhGLEdBQ3ZCLElBQUlpaEYsRUFBWUMsS0FDaEIsT0FBR2xoRixFQUFRaWhGLEVBQVksRUFDZmpoRixFQUFRaWhGLEVBQ0xqaEYsRUFBUSxFQUNYaWhGLEVBQVlqaEYsRUFFYkEsR0FJUmdqQyxHQUFhLEdBQ2Iwc0MsR0FBVSxTQUFTeG1GLEVBQU04MEIsR0FJeEIsT0FISWdsQixHQUFXOTVDLEtBQ2Q4NUMsR0FBVzk1QyxHQUFRLElBRWI4NUMsR0FBVzk1QyxHQUFNckgsS0FBS204QixJQUU5Qm1qRSxHQUFTLFNBQVNqNEYsR0FDakIsSUFBSTA2QyxFQUFZWixHQUFXOTVDLEdBRTNCLEdBQUcwNkMsRUFBVyxDQUNiLElBQUl4OEMsRUFBT3VHLE1BQU05SCxVQUFVMkIsTUFBTXpCLEtBQUtvNEIsV0FDdEMvMkIsRUFBSzY4QyxRQUVMLElBQUksSUFBSWo5QyxFQUFJLEVBQUdBLEVBQUk0OEMsRUFBVXRpRCxPQUFRMEYsSUFDcEM0OEMsRUFBVTU4QyxHQUFHazNCLE1BQU00VCxFQUFNMXFDLEtBSzVCZzZGLEdBQWtCLFdBQ2pCLE9BQU8sSUFBSTd1QyxNQUFPbTZCLFdBRW5CMlUsR0FBa0IsU0FBU0MsR0FDMUJ2QixHQUFhdUIsRUFDYnh2RCxFQUFLeXZELEdBQUdubEYsTUFBTWtsRixRQUFVQSxFQUFVdlIsRUFBUzZMLFdBRzVDNEYsR0FBc0IsU0FBU0MsRUFBU3hnRSxFQUFFQyxFQUFFd2dFLEVBQUtoOEYsS0FDNUNtN0YsSUFBeUJuN0YsR0FBUUEsSUFBU29zQyxFQUFLOC9DLFlBQ2xEOFAsR0FBZWg4RixFQUFPQSxFQUFLNnhGLFNBQVd6bEQsRUFBSzgvQyxTQUFTMkYsVUFHckRrSyxFQUFTMUQsR0FBaUJWLEVBQW1CcDhELEVBQUksT0FBU0MsRUFBSSxLQUFPbzhELEVBQWtCLFVBQVlvRSxFQUFPLEtBRTNHQyxHQUF1QixTQUFVQyxHQUM3QmxDLEtBRUNrQyxJQUNDekUsRUFBaUJyckQsRUFBSzgvQyxTQUFTMkYsU0FDN0JzSixLQUNIZ0IsR0FBYy92RCxFQUFLOC9DLFVBQVUsR0FBTyxHQUNwQ2lQLElBQXVCLEdBR3JCQSxLQUNGZ0IsR0FBYy92RCxFQUFLOC9DLFVBQ25CaVAsSUFBdUIsSUFNMUJXLEdBQW9COUIsR0FBdUJVLEdBQVduL0QsRUFBR20vRCxHQUFXbC9ELEVBQUdpOEQsS0FHekUyRSxHQUFzQixTQUFTcDhGLEdBQzNCQSxFQUFLckUsV0FFUG1nRyxHQUFvQjk3RixFQUFLckUsVUFBVSthLE1BQzlCMVcsRUFBS3E4RixnQkFBZ0I5Z0UsRUFDckJ2N0IsRUFBS3E4RixnQkFBZ0I3Z0UsRUFDckJ4N0IsRUFBS2l3RixpQkFDTGp3RixJQUdQczhGLEdBQWlCLFNBQVMvZ0UsRUFBR2doRSxHQUM1QkEsRUFBUWxFLEdBQWlCVixFQUFtQnA4RCxFQUFJLFVBQVlxOEQsR0FFN0Q0RSxHQUFrQixTQUFTamhFLEVBQUdraEUsR0FFN0IsSUFBSXBTLEVBQVM4TCxNQUFRc0csRUFBVSxDQUM5QixJQUFJQyxFQUFzQnZGLEdBQXFCMkQsR0FBV3YvRCxFQUFJcS9ELEdBQXFCci9ELEdBQUt1L0QsR0FBV3YvRCxFQUNsR29oRSxFQUFRdHJGLEtBQUtDLE1BQU1pcUIsRUFBSXFoRSxHQUFlcmhFLElBRWxDbWhFLEVBQXNCLEdBQUtDLEVBQVEsR0FDdENELEdBQXVCbEIsS0FBaUIsR0FBS21CLEVBQVEsS0FDdERwaEUsRUFBSXFoRSxHQUFlcmhFLEVBQUlvaEUsRUFBUXRTLEVBQVNxTSx1QkFJMUNrRyxHQUFlcmhFLEVBQUlBLEVBQ25CK2dFLEdBQWUvZ0UsRUFBRzY3RCxJQUVuQnlGLEdBQXNCLFNBQVNwZixFQUFNcWYsR0FDcEMsSUFBSWw5RCxFQUFJbTlELEdBQWN0ZixHQUFRb2QsR0FBUXBkLEdBQ3RDLE9BQU9nZCxHQUFnQmhkLEdBQVErYyxHQUFhL2MsR0FBUTc5QyxFQUFJQSxHQUFNazlELEVBQVlwRixJQUczRXNGLEdBQWtCLFNBQVM3NEQsRUFBSUMsR0FDOUJELEVBQUc1SSxFQUFJNkksRUFBRzdJLEVBQ1Y0SSxFQUFHM0ksRUFBSTRJLEVBQUc1SSxFQUNQNEksRUFBRzc0QixLQUNMNDRCLEVBQUc1NEIsR0FBSzY0QixFQUFHNzRCLEtBR2IweEYsR0FBYyxTQUFTbDhELEdBQ3RCQSxFQUFFeEYsRUFBSWxxQixLQUFLQyxNQUFNeXZCLEVBQUV4RixHQUNuQndGLEVBQUV2RixFQUFJbnFCLEtBQUtDLE1BQU15dkIsRUFBRXZGLElBR3BCMGhFLEdBQW9CLEtBQ3BCQyxHQUFvQixXQUdoQkQsS0FDRjVULEVBQVUxeEQsT0FBT3J1QixTQUFVLFlBQWE0ekYsSUFDeEM3VCxFQUFVMzNFLFNBQVMvVSxFQUFVLG1CQUM3Qnl0RixFQUFTb0MsV0FBWSxFQUNyQmdQLEdBQU8sY0FFUnlCLEdBQW9CbG9ELFlBQVcsV0FDOUJrb0QsR0FBb0IsT0FDbEIsTUF3Q0pFLEdBQXNCLFNBQVNOLEVBQVdwbEUsR0FDekMsSUFBSTJsRSxFQUFTQyxHQUFvQmx4RCxFQUFLOC9DLFNBQVV5TyxHQUFlbUMsR0FJL0QsT0FIR3BsRSxJQUNGcWlFLEdBQWlCc0QsR0FFWEEsR0FHUkUsR0FBbUIsU0FBU3Y5RixHQUkzQixPQUhJQSxJQUNIQSxFQUFPb3NDLEVBQUs4L0MsVUFFTmxzRixFQUFLaXdGLGtCQUVidU4sR0FBbUIsU0FBU3g5RixHQUkzQixPQUhJQSxJQUNIQSxFQUFPb3NDLEVBQUs4L0MsVUFFTmxzRixFQUFLNDhDLEVBQUksRUFBSXl0QyxFQUFTeU0sY0FBZ0IsR0FJOUMyRyxHQUF1QixTQUFTaGdCLEVBQU1pZ0IsRUFBZUMsRUFBZUMsR0FDbkUsT0FBR0EsSUFBa0J4eEQsRUFBSzgvQyxTQUFTK0Qsa0JBQ2xDME4sRUFBY2xnQixHQUFRcnhDLEVBQUs4L0MsU0FBU21RLGdCQUFnQjVlLElBQzdDLElBRVBrZ0IsRUFBY2xnQixHQUFRb2YsR0FBb0JwZixFQUFNbWdCLEdBRTdDRCxFQUFjbGdCLEdBQVFpZ0IsRUFBYzFoRSxJQUFJeWhELElBQzFDa2dCLEVBQWNsZ0IsR0FBUWlnQixFQUFjMWhFLElBQUl5aEQsSUFDakMsR0FDRWtnQixFQUFjbGdCLEdBQVFpZ0IsRUFBY3poRSxJQUFJd2hELEtBQ2pEa2dCLEVBQWNsZ0IsR0FBUWlnQixFQUFjemhFLElBQUl3aEQsSUFDakMsS0EwRFZvZ0IsR0FBYSxTQUFTaDlGLEdBQ3JCLElBQUlpOUYsRUFBZ0IsR0FDakJ6VCxFQUFTbU0sUUFBd0IsS0FBZDMxRixFQUFFNkksUUFDdkJvMEYsRUFBZ0IsUUFDUHpULEVBQVNvTSxZQUNELEtBQWQ1MUYsRUFBRTZJLFFBQ0pvMEYsRUFBZ0IsT0FDTyxLQUFkajlGLEVBQUU2SSxVQUNYbzBGLEVBQWdCLFNBSWZBLElBR0dqOUYsRUFBRTZrRixTQUFZN2tGLEVBQUVrakYsUUFBV2xqRixFQUFFbWpGLFVBQWFuakYsRUFBRWlqRixVQUM3Q2pqRixFQUFFOEksZUFDSjlJLEVBQUU4SSxpQkFFRjlJLEVBQUVrOUYsYUFBYyxFQUVqQjN4RCxFQUFLMHhELFFBS1JFLEdBQWlCLFNBQVNuOUYsR0FDckJBLElBS0Q0NEYsR0FBVUQsR0FBZ0JTLElBQXdCYixLQUNwRHY0RixFQUFFOEksaUJBQ0Y5SSxFQUFFaWlGLG9CQUlKbWIsR0FBMEIsV0FDekI3eEQsRUFBS3FsRCxnQkFBZ0IsRUFBR25JLEVBQVVvSSxlQVVoQ3dNLEdBQWMsR0FDakJDLEdBQWlCLEVBQ2pCQyxHQUFpQixTQUFTNTZGLEdBQ3RCMDZGLEdBQVkxNkYsS0FDWDA2RixHQUFZMTZGLEdBQU1neEYsS0FDcEJpRSxFQUFXeUYsR0FBWTE2RixHQUFNZ3hGLEtBRTlCMkosWUFDT0QsR0FBWTE2RixLQUdyQjY2RixHQUEwQixTQUFTNzZGLEdBQy9CMDZGLEdBQVkxNkYsSUFDZDQ2RixHQUFlNTZGLEdBRVowNkYsR0FBWTE2RixLQUNmMjZGLEtBQ0FELEdBQVkxNkYsR0FBUSxLQUd0Qjg2RixHQUFxQixXQUNwQixJQUFLLElBQUl2L0YsS0FBUW0vRixHQUVaQSxHQUFZOTlGLGVBQWdCckIsSUFDL0JxL0YsR0FBZXIvRixJQUtsQncvRixHQUFlLFNBQVMvNkYsRUFBTWk0QixFQUFHK2lFLEVBQVN4K0QsRUFBR3krRCxFQUFVQyxFQUFVQyxHQUNoRSxJQUF1QzE0RCxFQUFuQzI0RCxFQUFnQmxELEtBQ3BCMkMsR0FBd0I3NkYsR0FFeEIsSUFBSXE3RixFQUFXLFdBQ2QsR0FBS1gsR0FBWTE2RixHQUFRLENBTXhCLElBSkF5aUMsRUFBSXkxRCxLQUFvQmtELElBSWQ1K0QsRUFNVCxPQUxBbytELEdBQWU1NkYsR0FDZms3RixFQUFTRixRQUNORyxHQUNGQSxLQUlGRCxHQUFXRixFQUFVL2lFLEdBQUtnakUsRUFBU3g0RCxFQUFFakcsR0FBS3ZFLEdBRTFDeWlFLEdBQVkxNkYsR0FBTWd4RixJQUFNZ0UsRUFBV3FHLEtBR3JDQSxLQUtFeEQsR0FBZ0IsQ0FHbkJ2TixNQUFPMk4sR0FDUDNMLE9BQVE5RixHQUNSOFUsYUFBY25FLEdBQ2R2NEYsUUFBU2lvRixFQUVUMFUsc0JBQXVCLFdBQ3RCLE9BQU85RSxJQUVSL0osYUFBYyxXQUNiLE9BQU91SCxHQUVSOUYsZ0JBQWlCLFdBQ2hCLE9BQU93RixHQUVSNkgsV0FBWSxXQUNYLE9BQU8xRixHQUVSMkYsVUFBVyxXQUNWLE9BQU9wRixHQUVScEksZ0JBQWlCLFNBQVNsMkQsRUFBRUMsR0FDM0JxL0QsR0FBUXQvRCxFQUFJQSxFQUNaczlELEVBQXdCZ0MsR0FBUXIvRCxFQUFJQSxFQUNwQ2lnRSxHQUFPLHFCQUFzQlosS0FFOUJxRSxhQUFjLFNBQVNwQyxFQUFVcUMsRUFBS0MsRUFBS2xELEdBQzFDeEIsR0FBV24vRCxFQUFJNGpFLEVBQ2Z6RSxHQUFXbC9ELEVBQUk0akUsRUFDZjNILEVBQWlCcUYsRUFDakJiLEdBQXNCQyxJQUd2Qjd5RixLQUFNLFdBRUwsSUFBRzJ0RixJQUFXQyxFQUFkLENBSUEsSUFBSTMxRixFQUVKOHFDLEVBQUtrOUMsVUFBWUEsRUFDakJsOUMsRUFBS3h2QyxTQUFXQSxFQUNoQnd2QyxFQUFLeXZELEdBQUt2UyxFQUFVc0csZ0JBQWdCaHpGLEVBQVUsWUFFOUM4N0YsRUFBbUI5N0YsRUFBU2kvRSxVQUM1Qm1iLEdBQVUsRUFFVjhCLEVBQVl4UCxFQUFVNkssaUJBQ3RCcUUsRUFBYU0sRUFBVXRFLElBQ3ZCaUUsRUFBWUssRUFBVXJFLElBQ3RCNEQsRUFBZ0JTLEVBQVUzMEYsVUFDMUJ5MEYsRUFBU0UsRUFBVXhFLE1BRW5CbG9ELEVBQUt5akQsV0FBYXZHLEVBQVVzRyxnQkFBZ0JoekYsRUFBVSxxQkFDdER3dkMsRUFBS3p3QyxVQUFZMnRGLEVBQVVzRyxnQkFBZ0J4akQsRUFBS3lqRCxXQUFZLG1CQUU1RHVILEVBQWtCaHJELEVBQUt6d0MsVUFBVSthLE1BR2pDMDFCLEVBQUtpekQsWUFBY3RILEVBQWUsQ0FDakMsQ0FBQ3A3RixHQUFHeXZDLEVBQUt6d0MsVUFBVTRaLFNBQVMsR0FBS3EvRCxLQUFLLEVBQUd0NkQsT0FBUSxHQUNqRCxDQUFDM2QsR0FBR3l2QyxFQUFLendDLFVBQVU0WixTQUFTLEdBQUtxL0QsS0FBSyxFQUFHdDZELE9BQVEsR0FDakQsQ0FBQzNkLEdBQUd5dkMsRUFBS3p3QyxVQUFVNFosU0FBUyxHQUFLcS9ELEtBQUssRUFBR3Q2RCxPQUFRLElBSWxEeTlFLEVBQWEsR0FBR3A3RixHQUFHK1osTUFBTXBYLFFBQVV5NEYsRUFBYSxHQUFHcDdGLEdBQUcrWixNQUFNcFgsUUFBVSxPQXBPcEQsV0FFbEIsR0FBRys0RixFQUFlLENBRWpCLElBQUlpSCxFQUFtQnhHLEVBQVV5RyxjQUFnQmhILEVBR2pELE9BRkFaLEVBQW1CLGFBQWUySCxFQUFtQixNQUFRLFVBQzdEMUgsRUFBa0JrQixFQUFVeUcsWUFBYyxTQUFXLEtBT3REbEgsRUFBZ0IsT0FDaEIvTyxFQUFVMzNFLFNBQVMvVSxFQUFVLFlBRTdCMC9GLEdBQWlCLFNBQVMvZ0UsRUFBR2doRSxHQUM1QkEsRUFBUTNoRixLQUFPMmdCLEVBQUksTUFFcEI2Z0UsR0FBc0IsU0FBU3A4RixHQUU5QixJQUFJdy9GLEVBQVl4L0YsRUFBSzZ4RixTQUFXLEVBQUksRUFBSTd4RixFQUFLNnhGLFNBQzVDNTJELEVBQUlqN0IsRUFBS3JFLFVBQVUrYSxNQUNuQmttQyxFQUFJNGlELEVBQVl4L0YsRUFBSzQ4QyxFQUNyQm9ELEVBQUl3L0MsRUFBWXgvRixFQUFLZ2dELEVBRXRCL2tCLEVBQUUxZ0IsTUFBUXFpQyxFQUFJLEtBQ2QzaEIsRUFBRXdrRCxPQUFTei9CLEVBQUksS0FDZi9rQixFQUFFcmdCLEtBQU81YSxFQUFLcThGLGdCQUFnQjlnRSxFQUFJLEtBQ2xDTixFQUFFc21ELElBQU12aEYsRUFBS3E4RixnQkFBZ0I3Z0UsRUFBSSxNQUdsQ3lnRSxHQUF1QixXQUN0QixHQUFHakMsR0FBdUIsQ0FFekIsSUFBSS8rRCxFQUFJKytELEdBQ1BoNkYsRUFBT29zQyxFQUFLOC9DLFNBQ1pzVCxFQUFZeC9GLEVBQUs2eEYsU0FBVyxFQUFJLEVBQUk3eEYsRUFBSzZ4RixTQUN6Q2oxQyxFQUFJNGlELEVBQVl4L0YsRUFBSzQ4QyxFQUNyQm9ELEVBQUl3L0MsRUFBWXgvRixFQUFLZ2dELEVBRXRCL2tCLEVBQUUxZ0IsTUFBUXFpQyxFQUFJLEtBQ2QzaEIsRUFBRXdrRCxPQUFTei9CLEVBQUksS0FHZi9rQixFQUFFcmdCLEtBQU84L0UsR0FBV24vRCxFQUFJLEtBQ3hCTixFQUFFc21ELElBQU1tWixHQUFXbC9ELEVBQUksT0F3THpCaWtFLEdBR0FqSSxFQUF1QixDQUN0QmtJLE9BQVF0ekQsRUFBS3V6RCxXQUtiQyxrQkFBbUIsV0FDbEJ2eEMsYUFBYTBxQyxHQUNiQSxFQUE0Qi9qRCxZQUFXLFdBQ25DMmxELEdBQWNwL0QsSUFBTTZRLEVBQUt5akQsV0FBVzdLLGFBQ3RDNTRDLEVBQUt1ekQsZUFFSixNQUVKRSxPQUFRNUIsR0FDUjZCLFFBQVNqQyxHQUNUM3ZGLE1BQU84dkYsSUFLUixJQUFJK0IsRUFBV2pILEVBQVUvRCxlQUFpQitELEVBQVUxTCxjQUFnQjBMLEVBQVU1RCxjQU05RSxJQUxJNEQsRUFBVWtILGVBQWtCbEgsRUFBVTMwRixZQUFhNDdGLElBQ3REMVYsRUFBU3dHLHNCQUF3QnhHLEVBQVN1RyxzQkFBd0IsR0FJL0R0dkYsRUFBSSxFQUFHQSxFQUFJMjVGLEdBQVNyL0YsT0FBUTBGLElBQy9COHFDLEVBQUssT0FBUzZ1RCxHQUFTMzVGLE1BSXJCMHhGLElBQ081bUQsRUFBS3ErQyxHQUFLLElBQUl1SSxFQUFRNW1ELEVBQU1rOUMsSUFDbENqZ0YsT0FHSm95RixHQUFPLGVBQ1B0RSxFQUFvQkEsR0FBcUI5TSxFQUFTL3ZFLE9BQVMsR0FFdkQrTSxNQUFNOHZFLElBQXNCQSxFQUFvQixHQUFLQSxHQUFxQnFFLFFBQzdFckUsRUFBb0IsR0FFckIvcUQsRUFBSzgvQyxTQUFXK1QsR0FBWTlJLElBR3pCMkIsRUFBVS9ELGVBQWlCK0QsRUFBVTFMLGdCQUN2QzROLElBQW1CLEdBR3BCcCtGLEVBQVM0UCxhQUFhLGNBQWUsU0FDbEM2OUUsRUFBUzUrRSxRQUNQdXZGLEdBSUhwK0YsRUFBUzhaLE1BQU1pRSxTQUFXLFNBSDFCL2QsRUFBUzhaLE1BQU1pRSxTQUFXLFdBQzFCL2QsRUFBUzhaLE1BQU02cUUsSUFBTStILEVBQVVvSSxhQUFlLFlBTW5CeDJGLElBQTFCMjlGLElBQ0Y0QyxHQUFPLGlCQUNQNUMsRUFBd0JGLEVBQXVCclAsRUFBVW9JLGNBSTFELElBQUl3TyxFQUFjLGNBaUJsQixJQWhCRzdWLEVBQVM4VixZQUNYRCxHQUFlN1YsRUFBUzhWLFVBQVksS0FFbEM5VixFQUFTa00sa0JBQ1gySixHQUFlLDBCQUVoQkEsR0FBZTNILEVBQXFCLGNBQWdCLGdCQUNwRDJILEdBQWVwSCxFQUFVa0gsY0FBZ0IsdUJBQXlCLEdBQ2xFRSxHQUFlcEgsRUFBVXBELElBQU0sYUFBZSxHQUM5Q3BNLEVBQVUzM0UsU0FBUy9VLEVBQVVzakcsR0FFN0I5ekQsRUFBS3V6RCxhQUdMdEksR0FBd0IsRUFDeEIwRCxHQUFhLEtBQ1R6NUYsRUFBSSxFQUFHQSxFQTltQkUsRUE4bUJlQSxJQUMzQmc3RixJQUFpQmg3RixFQUFFKzFGLEdBQXdCeUQsR0FBV3YvRCxFQUFHdzhELEVBQWF6MkYsR0FBRzNFLEdBQUcrWixPQUd6RWtpRixHQUNIdFAsRUFBVTFvRixLQUFLd3JDLEVBQUt5akQsV0FBWTBILEVBQWFuckQsR0FHOUM0OUMsR0FBUSxvQkFBb0IsV0FDM0I1OUMsRUFBS2cwRCxXQUFXckksRUFBYSxHQUFJWixFQUFrQixHQUNuRC9xRCxFQUFLZzBELFdBQVdySSxFQUFhLEdBQUlaLEVBQWtCLEdBRW5EWSxFQUFhLEdBQUdwN0YsR0FBRytaLE1BQU1wWCxRQUFVeTRGLEVBQWEsR0FBR3A3RixHQUFHK1osTUFBTXBYLFFBQVUsUUFFbkUrcUYsRUFBU3RDLE9BSVhuckYsRUFBU21yRixRQTFaWHVCLEVBQVUxb0YsS0FBSzJJLFNBQVUsVUFBVzZpQyxHQUVqQzBzRCxFQUFVMzBGLFdBRVptbEYsRUFBVTFvRixLQUFLd3JDLEVBQUt5akQsV0FBWSxRQUFTempELEdBSXRDaStDLEVBQVNvQyxXQUNabkQsRUFBVTFvRixLQUFLMkksU0FBVSxZQUFhNHpGLElBR3ZDN1QsRUFBVTFvRixLQUFLekYsT0FBUSxrQ0FBbUNpeEMsR0FFMURxdkQsR0FBTyxpQkFvWlBydkQsRUFBS2cwRCxXQUFXckksRUFBYSxHQUFJWixHQUVqQy9xRCxFQUFLaTBELGlCQUVMNUUsR0FBTyxhQUVIVCxLQVdIbkQsRUFBc0JwUSxhQUFZLFdBQzdCMFcsSUFBbUI3RSxHQUFnQk8sR0FBZXBDLElBQW1CcnJELEVBQUs4L0MsU0FBUytELGtCQUN0RjdqRCxFQUFLdXpELGVBRUosTUFHSnJXLEVBQVUzM0UsU0FBUy9VLEVBQVUsbUJBSTlCZzFDLE1BQU8sV0FDRm9sRCxJQUlKQSxHQUFVLEVBQ1ZDLEdBQWdCLEVBQ2hCd0UsR0FBTyxTQW5iUG5TLEVBQVUxeEQsT0FBT3o4QixPQUFRLGtDQUFtQ2l4QyxHQUM1RGs5QyxFQUFVMXhELE9BQU96OEIsT0FBUSxTQUFVcThGLEVBQXFCcUksUUFDeER2VyxFQUFVMXhELE9BQU9ydUIsU0FBVSxVQUFXNmlDLEdBQ3RDazlDLEVBQVUxeEQsT0FBT3J1QixTQUFVLFlBQWE0ekYsSUFFckNyRSxFQUFVMzBGLFdBQ1ptbEYsRUFBVTF4RCxPQUFPd1UsRUFBS3lqRCxXQUFZLFFBQVN6akQsR0FHekNrdEQsR0FDRmhRLEVBQVUxeEQsT0FBT3o4QixPQUFRbThGLEVBQWVsckQsR0FHekNpaUIsYUFBYTBxQyxHQUViMEMsR0FBTyxnQkF1YVA2RSxHQUFZbDBELEVBQUs4L0MsU0FBVSxNQUFNLEVBQU05L0MsRUFBS3ZaLFdBSTdDQSxRQUFTLFdBQ1I0b0UsR0FBTyxXQUVKOEUsSUFDRmx5QyxhQUFha3lDLElBR2QzakcsRUFBUzRQLGFBQWEsY0FBZSxRQUNyQzVQLEVBQVNpL0UsVUFBWTZjLEVBRWxCYixHQUNGNVEsY0FBYzRRLEdBR2Z2TyxFQUFVMXhELE9BQU93VSxFQUFLeWpELFdBQVkwSCxFQUFhbnJELEdBRy9DazlDLEVBQVUxeEQsT0FBT3o4QixPQUFRLFNBQVVpeEMsR0FFbkNvMEQsS0FFQWxDLEtBRUFoaEQsR0FBYSxNQVNkbWpELE1BQU8sU0FBU2xsRSxFQUFFQyxFQUFFa2xFLEdBQ2ZBLElBQ0FubEUsRUFBSXcrRCxHQUFlLzlELElBQUlULEVBQ3pCQSxFQUFJdytELEdBQWUvOUQsSUFBSVQsRUFDZEEsRUFBSXcrRCxHQUFlOTlELElBQUlWLElBQ2hDQSxFQUFJdytELEdBQWU5OUQsSUFBSVYsR0FHckJDLEVBQUl1K0QsR0FBZS85RCxJQUFJUixFQUN6QkEsRUFBSXUrRCxHQUFlLzlELElBQUlSLEVBQ2RBLEVBQUl1K0QsR0FBZTk5RCxJQUFJVCxJQUNoQ0EsRUFBSXUrRCxHQUFlOTlELElBQUlULElBSXpCay9ELEdBQVduL0QsRUFBSUEsRUFDZm0vRCxHQUFXbC9ELEVBQUlBLEVBQ2Z5Z0UsTUFHRGxHLFlBQWEsU0FBVWwxRixHQUN0QkEsRUFBSUEsR0FBSzFGLE9BQU95RSxNQUNiNDNGLEVBQXFCMzJGLEVBQUUvRixPQUN6QjA4RixFQUFxQjMyRixFQUFFL0YsTUFBTStGLElBSy9COC9GLEtBQU0sU0FBU3JtRixHQUlkLElBQUlvakUsR0FGSnBqRSxFQUFRZ2hGLEdBQWFoaEYsSUFFRjY4RSxFQUNuQjRELEdBQWFyZCxFQUVieVosRUFBb0I3OEUsRUFDcEI4eEIsRUFBSzgvQyxTQUFXK1QsR0FBWTlJLEdBQzVCeUQsSUFBc0JsZCxFQUV0QjhlLEdBQWdCMUIsR0FBV3YvRCxFQUFJcS9ELElBRy9CMEQsS0FDQXJFLElBQXVCLEVBRXZCN3RELEVBQUtpMEQsa0JBRU5sMEQsS0FBTSxXQUNMQyxFQUFLdTBELEtBQU14SixFQUFvQixJQUVoQzFILEtBQU0sV0FDTHJqRCxFQUFLdTBELEtBQU14SixFQUFvQixJQUloQ3lKLG1CQUFvQixTQUFTQyxHQU01QixHQUxHQSxHQUNGcEYsR0FBTyxlQUFnQixHQUlyQjFELEVBQWEsR0FBR3A3RixHQUFHNFksU0FBUzNaLE9BQVEsQ0FDdEMsSUFBSWtsRyxFQUFjL0ksRUFBYSxHQUFHcDdGLEdBQUc0WSxTQUFTLEdBRTdDeWtGLEdBREcxUSxFQUFVcitFLFNBQVM2MUYsRUFBYSxtQkFDWEEsRUFBWXBxRixNQUVaLFVBR3pCc2pGLEdBQXdCLEtBR3pCRCxHQUFpQjN0RCxFQUFLOC9DLFNBQVNtUixPQUMvQjNGLEVBQWtCRCxFQUFpQnJyRCxFQUFLOC9DLFNBQVMrRCxpQkFFakR5SyxHQUFXbi9ELEVBQUl3K0QsR0FBZWdILE9BQU94bEUsRUFDckNtL0QsR0FBV2wvRCxFQUFJdStELEdBQWVnSCxPQUFPdmxFLEVBRWxDcWxFLEdBQ0ZwRixHQUFPLGdCQUtUdUYsb0JBQXFCLFdBQ3BCbEosR0FBbUIsRUFDbkIsSUFBSSxJQUFJeDJGLEVBQUksRUFBR0EsRUF4eUJGLEVBd3lCbUJBLElBQzNCeTJGLEVBQWF6MkYsR0FBR3RCLE9BQ25CKzNGLEVBQWF6MkYsR0FBR3RCLEtBQUtpaEcsYUFBYyxJQUt0Q1osZUFBZ0IsU0FBU2EsR0FFeEIsR0FBa0IsSUFBZm5HLEdBQUgsQ0FJQSxJQUNDb0csRUFER0MsRUFBVS92RixLQUFLaXpCLElBQUl5MkQsSUFHdkIsS0FBR21HLEdBQW1CRSxFQUFVLEdBQWhDLENBS0FoMUQsRUFBSzgvQyxTQUFXK1QsR0FBWTlJLEdBQzVCZ0UsSUFBdUIsRUFFdkJNLEdBQU8sZUFBZ0JWLElBRXBCcUcsR0FsMEJVLElBbTBCWi9KLEdBQXdCMEQsSUFBY0EsR0FBYSxHQW4wQnZDLEtBbzBCWnFHLEVBcDBCWSxHQXMwQmIsSUFBSSxJQUFJOS9GLEVBQUksRUFBR0EsRUFBSTgvRixFQUFTOS9GLElBQ3hCeTVGLEdBQWEsR0FDZm9HLEVBQWFwSixFQUFheDVDLFFBQzFCdzVDLEVBQWFzSixHQUFpQkYsRUFFOUI5SixJQUNBaUYsSUFBaUJqRixFQUFxQixHQUFLeUQsR0FBV3YvRCxFQUFHNGxFLEVBQVd4a0csR0FBRytaLE9BQ3ZFMDFCLEVBQUtnMEQsV0FBV2UsRUFBWWhLLEVBQW9CaUssRUFBVTkvRixFQUFJLEVBQUksS0FFbEU2L0YsRUFBYXBKLEVBQWFqNEQsTUFDMUJpNEQsRUFBYXI3QyxRQUFTeWtELEdBRXRCOUosSUFDQWlGLEdBQWdCakYsRUFBdUJ5RCxHQUFXdi9ELEVBQUc0bEUsRUFBV3hrRyxHQUFHK1osT0FDbkUwMUIsRUFBS2cwRCxXQUFXZSxFQUFZaEssRUFBb0JpSyxFQUFVOS9GLEVBQUksRUFBSSxJQU1wRSxHQUFHMDRGLElBQWtELElBQXpCM29GLEtBQUtpekIsSUFBSXkyRCxJQUFtQixDQUV2RCxJQUFJdUcsRUFBV3JCLEdBQVdqSSxHQUN2QnNKLEVBQVNyUixtQkFBcUJ3SCxJQUNoQzZGLEdBQW1CZ0UsRUFBVzNHLElBQzlCd0IsR0FBY21GLEdBQ2RsRixHQUFxQmtGLElBTXZCdkcsR0FBYSxFQUViM3VELEVBQUt3MEQscUJBRUw1SSxFQUFpQmIsRUFFakJzRSxHQUFPLGtCQU1Sa0UsV0FBWSxTQUFTZSxHQUVwQixJQUFJMUYsSUFBb0IzUSxFQUFTNStFLE1BQU8sQ0FDdkMsSUFBSTgxRixFQUFnQmpZLEVBQVVvSSxhQUs5QixHQUpHbUgsSUFBMEIwSSxJQUM1QjNrRyxFQUFTOFosTUFBTTZxRSxJQUFNZ2dCLEVBQWdCLEtBQ3JDMUksRUFBd0IwSSxJQUVyQmIsR0FBU3hGLEdBQW1CMy9ELElBQU1wZ0MsT0FBT3FtRyxZQUFjdEcsR0FBbUIxL0QsSUFBTXJnQyxPQUFPc21HLFlBQzFGLE9BRUR2RyxHQUFtQjMvRCxFQUFJcGdDLE9BQU9xbUcsV0FDOUJ0RyxHQUFtQjEvRCxFQUFJcmdDLE9BQU9zbUcsWUFHOUI3a0csRUFBUzhaLE1BQU0rb0UsT0FBU3liLEdBQW1CMS9ELEVBQUksS0FtQmhELEdBZEFtL0QsR0FBY3AvRCxFQUFJNlEsRUFBS3lqRCxXQUFXN0ssWUFDbEMyVixHQUFjbi9ELEVBQUk0USxFQUFLeWpELFdBQVdoTCxhQUVsQ29aLEtBRUFuRCxHQUFXdi9ELEVBQUlvL0QsR0FBY3AvRCxFQUFJbHFCLEtBQUtDLE1BQU1xcEYsR0FBY3AvRCxFQUFJOHVELEVBQVM0TCxTQUN2RTZFLEdBQVd0L0QsRUFBSW0vRCxHQUFjbi9ELEVBRTdCZ2hFLEdBQWdCMUIsR0FBV3YvRCxFQUFJcS9ELElBRS9CYSxHQUFPLHFCQUlxQnZnRyxJQUF6Qm04RixFQUFvQyxDQU10QyxJQUpBLElBQUlxSyxFQUNIMWhHLEVBQ0EyaEcsRUFFT3JnRyxFQUFJLEVBQUdBLEVBMTVCSCxFQTA1Qm9CQSxJQUMvQm9nRyxFQUFTM0osRUFBYXoyRixHQUN0Qmc3RixJQUFpQmg3RixFQUFFKzFGLEdBQXdCeUQsR0FBV3YvRCxFQUFHbW1FLEVBQU8va0csR0FBRytaLE9BRW5FaXJGLEVBQVN4SyxFQUFrQjcxRixFQUFFLEVBRTFCK29GLEVBQVM4TCxNQUFRcUYsS0FBaUIsSUFDcENtRyxFQUFTckcsR0FBYXFHLEtBSXZCM2hHLEVBQU9pZ0csR0FBWTBCLE1BSU43SixHQUFvQjkzRixFQUFLaWhHLGNBQWdCamhHLEVBQUtxOUYsU0FFMURqeEQsRUFBS3cxRCxXQUFZNWhHLEdBRWpCb3NDLEVBQUtnMEQsV0FBWXNCLEVBQVFDLEdBR2hCLElBQU5yZ0csSUFDRjhxQyxFQUFLOC9DLFNBQVdsc0YsRUFDaEJvc0MsRUFBS3cwRCxvQkFBbUIsSUFHekI1Z0csRUFBS2loRyxhQUFjLElBRVEsSUFBbEJTLEVBQU9wbkYsT0FBZ0JxbkYsR0FBVSxHQUUxQ3YxRCxFQUFLZzBELFdBQVlzQixFQUFRQyxHQUV2QjNoRyxHQUFRQSxFQUFLckUsWUFDZjJoRyxHQUFtQnQ5RixFQUFNMjZGLElBQ3pCd0IsR0FBY244RixHQUNkbzhGLEdBQXFCcDhGLElBSXZCODNGLEdBQW1CLEVBR3BCSixFQUFrQkQsRUFBaUJyckQsRUFBSzgvQyxTQUFTK0Qsa0JBQ2pEOEosR0FBaUIzdEQsRUFBSzgvQyxTQUFTbVIsVUFHOUIzQyxHQUFXbi9ELEVBQUl3K0QsR0FBZWdILE9BQU94bEUsRUFDckNtL0QsR0FBV2wvRCxFQUFJdStELEdBQWVnSCxPQUFPdmxFLEVBQ3JDeWdFLElBQXNCLElBR3ZCUixHQUFPLFdBSVJ0TCxPQUFRLFNBQVN5TixFQUFlaUUsRUFBYTdiLEVBQU95WSxFQUFVcUQsR0FTMURELElBQ0ZuSyxFQUFrQkQsRUFDbEJzRixHQUFjeGhFLEVBQUlscUIsS0FBS2l6QixJQUFJdTlELEVBQVl0bUUsR0FBS20vRCxHQUFXbi9ELEVBQ3ZEd2hFLEdBQWN2aEUsRUFBSW5xQixLQUFLaXpCLElBQUl1OUQsRUFBWXJtRSxHQUFLay9ELEdBQVdsL0QsRUFDdkR3aEUsR0FBZ0J2QyxHQUFpQkMsS0FHbEMsSUFBSWdELEVBQWdCTixHQUFvQlEsR0FBZSxHQUN0REQsRUFBZ0IsR0FFakJGLEdBQXFCLElBQUtDLEVBQWVDLEVBQWVDLEdBQ3hESCxHQUFxQixJQUFLQyxFQUFlQyxFQUFlQyxHQUV4RCxJQUFJM04sRUFBbUJ3SCxFQUNuQnNLLEVBQ0FySCxHQUFXbi9ELEVBRFh3bUUsRUFFQXJILEdBQVdsL0QsRUFHZnloRSxHQUFZVSxHQUVaLElBQUllLEVBQVcsU0FBU2pxRCxHQUNaLElBQVJBLEdBQ0ZnakQsRUFBaUJtRyxFQUNqQmxELEdBQVduL0QsRUFBSW9pRSxFQUFjcGlFLEVBQzdCbS9ELEdBQVdsL0QsRUFBSW1pRSxFQUFjbmlFLElBRTdCaThELEdBQWtCbUcsRUFBZ0IzTixHQUFvQng3QyxFQUFNdzdDLEVBQzVEeUssR0FBV24vRCxHQUFLb2lFLEVBQWNwaUUsRUFBSXdtRSxHQUFzQnR0RCxFQUFNc3RELEVBQzlEckgsR0FBV2wvRCxHQUFLbWlFLEVBQWNuaUUsRUFBSXVtRSxHQUFzQnR0RCxFQUFNc3RELEdBRzVERCxHQUNGQSxFQUFTcnRELEdBR1Z3bkQsR0FBOEIsSUFBUnhuRCxJQUdwQnV4QyxFQUNGdVksR0FBYSxlQUFnQixFQUFHLEVBQUd2WSxFQUFPeVksR0FBWW5WLEVBQVVzSyxPQUFPQyxLQUFLRyxNQUFPMEssR0FFbkZBLEVBQVMsS0F3QlgzOUQsR0FBSSxHQUNKcUQsR0FBSyxHQUNMdTRELEdBQVEsR0FDUnFGLEdBQWEsR0FDYkMsR0FBYyxHQUNkQyxHQUFnQixHQUNoQkMsR0FBc0IsR0FFdEJDLEdBQWEsR0FDYkMsR0FBYSxHQUtiQyxHQUF1QixFQUN2QkMsR0E3L0JRLENBQUNobkUsRUFBRSxFQUFFQyxFQUFFLEdBOC9CZmduRSxHQUFtQixFQVluQjVGLEdBMWdDUSxDQUFDcmhFLEVBQUUsRUFBRUMsRUFBRSxHQTZnQ2Z1aEUsR0E3Z0NRLENBQUN4aEUsRUFBRSxFQUFFQyxFQUFFLEdBOGdDZmluRSxHQTlnQ1EsQ0FBQ2xuRSxFQUFFLEVBQUVDLEVBQUUsR0EyaENma25FLEdBQTJCLFNBQVN2K0QsRUFBSUMsR0FHdkMsT0FGQWkrRCxHQUFXOW1FLEVBQUlscUIsS0FBS2l6QixJQUFLSCxFQUFHNUksRUFBSTZJLEVBQUc3SSxHQUNuQzhtRSxHQUFXN21FLEVBQUlucUIsS0FBS2l6QixJQUFLSCxFQUFHM0ksRUFBSTRJLEVBQUc1SSxHQUM1Qm5xQixLQUFLMjFCLEtBQUtxN0QsR0FBVzltRSxFQUFJOG1FLEdBQVc5bUUsRUFBSThtRSxHQUFXN21FLEVBQUk2bUUsR0FBVzdtRSxJQUUxRWdsRSxHQUFzQixXQUNsQjlHLElBQ0ZqQixFQUFVaUIsR0FDVkEsRUFBaUIsT0FHbkJpSixHQUFrQixXQUNkckosSUFDRkksRUFBaUJsQixFQUFXbUssSUFDNUJDLE9BUUZDLEdBQWtCLFNBQVNsbUcsRUFBSTI3QixHQUM1QixTQUFJMzdCLEdBQU1BLElBQU80TSxhQUtkNU0sRUFBR293RixhQUFhLFVBQVlwd0YsRUFBR293RixhQUFhLFNBQVMvMEQsUUFBUSxzQkFBd0IsS0FJcEZNLEVBQUczN0IsR0FDQ0EsRUFHRGttRyxHQUFnQmxtRyxFQUFHK1gsV0FBWTRqQixLQUd6Q3dxRSxHQUFjLEdBQ2RDLEdBQWdDLFNBQVNsaUcsRUFBR3d2RixHQUkzQyxPQUhHeVMsR0FBWXZTLFNBQVdzUyxHQUFnQmhpRyxFQUFFd0QsT0FBUWdtRixFQUFTdU0sb0JBRTdENkUsR0FBTyxtQkFBb0I1NkYsRUFBR3d2RixFQUFReVMsSUFDL0JBLEdBQVl2UyxTQUdwQnlTLEdBQXVCLFNBQVNuZCxFQUFPOWtELEdBSXRDLE9BSEFBLEVBQUV4RixFQUFJc3FELEVBQU16QyxNQUNacmlELEVBQUV2RixFQUFJcXFELEVBQU1yRCxNQUNaemhELEVBQUV4MUIsR0FBS3M2RSxFQUFNb2QsV0FDTmxpRSxHQUVSbWlFLEdBQXNCLFNBQVMvK0QsRUFBSUMsRUFBSSsrRCxHQUN0Q0EsRUFBUTVuRSxFQUFvQixJQUFmNEksRUFBRzVJLEVBQUk2SSxFQUFHN0ksR0FDdkI0bkUsRUFBUTNuRSxFQUFvQixJQUFmMkksRUFBRzNJLEVBQUk0SSxFQUFHNUksSUFZeEI0bkUsR0FBcUMsV0FDcEMsSUFBSWpRLEVBQVV1SCxHQUFXbC9ELEVBQUk0USxFQUFLOC9DLFNBQVNtUSxnQkFBZ0I3Z0UsRUFDM0QsT0FBTyxFQUFLbnFCLEtBQUtpekIsSUFBSzZ1RCxHQUFXd0gsR0FBY24vRCxFQUFJLEtBS3BENm5FLEdBQVcsR0FDWEMsR0FBVyxHQUNYQyxHQUFpQixHQUVqQkMsR0FBa0IsU0FBUzNpRyxHQUUxQixLQUFNMGlHLEdBQWUzbkcsT0FBUyxHQUM3QjJuRyxHQUFlempFLE1BZ0NoQixPQTdCSXc0RCxHQWlCSGlDLEdBQWUsRUFFZjJILEdBQWM5Z0csU0FBUSxTQUFTMi9CLEdBQ1YsSUFBakJ3NUQsR0FDRmdKLEdBQWUsR0FBS3hpRSxFQUNNLElBQWpCdzVELEtBQ1RnSixHQUFlLEdBQUt4aUUsR0FFckJ3NUQsU0F4QkUxNUYsRUFBRS9GLEtBQUtrOUIsUUFBUSxVQUFZLEVBRTFCbjNCLEVBQUVnaUYsU0FBV2hpRixFQUFFZ2lGLFFBQVFqbkYsT0FBUyxJQUNsQzJuRyxHQUFlLEdBQUtQLEdBQXFCbmlHLEVBQUVnaUYsUUFBUSxHQUFJd2dCLElBQ3BEeGlHLEVBQUVnaUYsUUFBUWpuRixPQUFTLElBQ3JCMm5HLEdBQWUsR0FBS1AsR0FBcUJuaUcsRUFBRWdpRixRQUFRLEdBQUl5Z0IsT0FLekRELEdBQVM5bkUsRUFBSTE2QixFQUFFdWlGLE1BQ2ZpZ0IsR0FBUzduRSxFQUFJMzZCLEVBQUUyaEYsTUFDZjZnQixHQUFTOTNGLEdBQUssR0FDZGc0RixHQUFlLEdBQUtGLElBZWZFLElBR1JFLEdBQXVCLFNBQVNobUIsRUFBTWtmLEdBRXJDLElBQUkrRyxFQUdIQyxFQUlBQyxFQUNBQyxFQU5BQyxFQUFZcEosR0FBV2pkLEdBQVFrZixFQUFNbGYsR0FFckNyQyxFQUFNdWhCLEVBQU1sZixHQUFRLEVBQ3BCc21CLEVBQXdCbkgsR0FBZXJoRSxFQUFJb2hFLEVBQU1waEUsRUFDakR5b0UsRUFBaUJwSCxHQUFlcmhFLEVBQUk0bUUsR0FBb0I1bUUsRUFpQnpELEdBWENtb0UsRUFERUksRUFBWS9KLEdBQWUvOUQsSUFBSXloRCxJQUFTcW1CLEVBQVkvSixHQUFlOTlELElBQUl3aEQsR0FDM0Q0TSxFQUFTc00sZUFLVCxFQUdmbU4sRUFBWXBKLEdBQVdqZCxHQUFRa2YsRUFBTWxmLEdBQVFpbUIsR0FHMUNyWixFQUFTMkwsZ0JBQWtCeUIsSUFBbUJyckQsRUFBSzgvQyxTQUFTK0Qsb0JBRzFEK0osR0FJcUIsTUFBZkUsSUFBK0IsTUFBVHpjLEdBQWlCK2IsSUFFN0NwZSxHQUNDMG9CLEVBQVkvSixHQUFlLzlELElBQUl5aEQsS0FDakNpbUIsRUFBY3JaLEVBQVNzTSxlQUNab0QsR0FBZS85RCxJQUFJeWhELEdBQzlCa21CLEVBQWdCNUosR0FBZS85RCxJQUFJeWhELEdBQVFnZCxHQUFnQmhkLEtBSXZEa21CLEdBQWlCLEdBQUtLLEVBQWlCLElBQU14SSxLQUFpQixHQUNsRXFJLEVBQW1CRSxFQUNoQkMsRUFBaUIsR0FBS0QsRUFBd0I1QixHQUFvQjVtRSxJQUNwRXNvRSxFQUFtQjFCLEdBQW9CNW1FLElBR3JDdytELEdBQWUvOUQsSUFBSVQsSUFBTXcrRCxHQUFlOTlELElBQUlWLElBQzlDcW9FLEVBQVlFLEtBT1hBLEVBQVkvSixHQUFlOTlELElBQUl3aEQsS0FDakNpbUIsRUFBYXJaLEVBQVNzTSxlQUNDb0QsR0FBZTk5RCxJQUFJd2hELEdBQzFDa21CLEVBQWdCbEosR0FBZ0JoZCxHQUFRc2MsR0FBZTk5RCxJQUFJd2hELEtBR3ZEa21CLEdBQWlCLEdBQUtLLEVBQWlCLElBQU14SSxLQUFpQixHQUNsRXFJLEVBQW1CRSxFQUVoQkMsRUFBaUIsR0FBS0QsRUFBd0I1QixHQUFvQjVtRSxJQUNwRXNvRSxFQUFtQjFCLEdBQW9CNW1FLElBSXJDdytELEdBQWUvOUQsSUFBSVQsSUFBTXcrRCxHQUFlOTlELElBQUlWLElBQzlDcW9FLEVBQVlFLEtBekNmRCxFQUFtQkUsRUFtRFIsTUFBVHRtQixHQW1CRixZQWpCd0J2aUYsSUFBckIyb0csSUFDRnJILEdBQWdCcUgsR0FBa0IsR0FFakNsSyxFQURFa0ssSUFBcUIxQixHQUFvQjVtRSxHQU8xQ3crRCxHQUFlLzlELElBQUlULElBQU13K0QsR0FBZTk5RCxJQUFJVixTQUM3QnJnQyxJQUFkMG9HLEVBQ0ZsSixHQUFXbi9ELEVBQUlxb0UsRUFDTGpLLElBQ1ZlLEdBQVduL0QsR0FBS29oRSxFQUFNcGhFLEVBQUltb0UsU0FJQXhvRyxJQUFyQjJvRyxFQUtMNUosSUFFQ04sR0FDQWxDLEVBQWlCcnJELEVBQUs4L0MsU0FBUzJGLFdBQ2pDNkksR0FBV2pkLElBQVNrZixFQUFNbGYsR0FBUWltQixJQVd0Q08sR0FBZSxTQUFTcGpHLEdBT3ZCLEtBQWMsY0FBWEEsRUFBRS9GLE1BQXdCK0YsRUFBRStJLE9BQVMsR0FJeEMsR0FBR3M2RixHQUNGcmpHLEVBQUU4SSxzQkFJSCxJQUFHMHZGLEdBQXlDLGNBQVh4NEYsRUFBRS9GLEtBQW5DLENBWUEsR0FSR2lvRyxHQUE4QmxpRyxHQUFHLElBQ25DQSxFQUFFOEksaUJBS0g4eEYsR0FBTyxlQUVKbkQsRUFBc0IsQ0FDeEIsSUFBSTZMLEVBQWU3YSxFQUFVa0ssWUFBWTBPLEdBQWVyaEcsRUFBRXVqRyxVQUFXLE1BQ2xFRCxFQUFlLElBQ2pCQSxFQUFlakMsR0FBY3RtRyxRQUU5QnNtRyxHQUFjaUMsR0FBZ0IsQ0FBQzVvRSxFQUFFMTZCLEVBQUV1aUYsTUFBTzVuRCxFQUFFMzZCLEVBQUUyaEYsTUFBT2ozRSxHQUFJMUssRUFBRXVqRyxXQUs1RCxJQUFJQyxFQUFrQmIsR0FBZ0IzaUcsR0FDckN5akcsRUFBWUQsRUFBZ0J6b0csT0FFN0JnK0YsRUFBaUIsS0FFakIwRSxLQUdJaEYsR0FBNkIsSUFBZGdMLElBSWxCaEwsRUFBY2EsSUFBZSxFQUM3QjdRLEVBQVUxb0YsS0FBS3pGLE9BQVFtOEYsRUFBZWxyRCxHQUV0QytzRCxFQUNDbUIsR0FDQUYsR0FDQWhCLEVBQ0FPLEVBQ0FGLEVBQ0FGLEVBQ0FDLEdBQWUsRUFFaEJVLEdBQWEsS0FFYnVCLEdBQU8sa0JBQW1CNEksR0FFMUJySCxHQUFnQnZDLEdBQWlCQyxJQUVqQ0YsR0FBYWovRCxFQUFJaS9ELEdBQWFoL0QsRUFBSSxFQUNsQ3doRSxHQUFnQmdGLEdBQVlxQyxFQUFnQixJQUM1Q3JILEdBQWdCaUYsR0FBYUQsSUFHN0JHLEdBQW9CNW1FLEVBQUl1L0QsR0FBV3YvRCxFQUFJcS9ELEdBRXZDd0gsR0FBYSxDQUFDLENBQ2I3bUUsRUFBR3ltRSxHQUFXem1FLEVBQ2RDLEVBQUd3bUUsR0FBV3htRSxJQUdmeTlELEVBQXlCRCxFQUFvQjBDLEtBRzdDMEIsR0FBcUIzRixHQUFnQixHQUdyQytJLEtBQ0FtQyxPQUtHOUksR0FBY3lLLEVBQVksSUFBTXJLLEtBQXlCTixJQUM1RGpDLEVBQWtCRCxFQUNsQitCLEdBQWUsRUFFZkssRUFBYU4sR0FBZ0IsRUFDN0JpQixHQUFhaC9ELEVBQUlnL0QsR0FBYWovRCxFQUFJLEVBRWxDeWhFLEdBQWdCdkMsR0FBaUJDLElBRWpDc0MsR0FBZ0JqOEQsR0FBR3NqRSxFQUFnQixJQUNuQ3JILEdBQWdCNTRELEdBQUlpZ0UsRUFBZ0IsSUFFcENuQixHQUFvQm5pRSxHQUFHcUQsR0FBSXErRCxJQUUzQjFGLEdBQWN4aEUsRUFBSWxxQixLQUFLaXpCLElBQUltK0QsR0FBaUJsbkUsR0FBS20vRCxHQUFXbi9ELEVBQzVEd2hFLEdBQWN2aEUsRUFBSW5xQixLQUFLaXpCLElBQUltK0QsR0FBaUJqbkUsR0FBS2svRCxHQUFXbC9ELEVBQ3RDcytELEVBQXVCNEksR0FBeUIzaEUsR0FBR3FELE9BTzNFbWdFLEdBQWMsU0FBUzFqRyxHQUl0QixHQUZBQSxFQUFFOEksaUJBRUMydUYsRUFBc0IsQ0FDeEIsSUFBSTZMLEVBQWU3YSxFQUFVa0ssWUFBWTBPLEdBQWVyaEcsRUFBRXVqRyxVQUFXLE1BQ3JFLEdBQUdELEdBQWdCLEVBQUcsQ0FDckIsSUFBSXBqRSxFQUFJbWhFLEdBQWNpQyxHQUN0QnBqRSxFQUFFeEYsRUFBSTE2QixFQUFFdWlGLE1BQ1JyaUQsRUFBRXZGLEVBQUkzNkIsRUFBRTJoRixPQUlWLEdBQUc4VyxFQUFhLENBQ2YsSUFBSWtMLEVBQWNoQixHQUFnQjNpRyxHQUNsQyxHQUFJcTVGLElBQWVULEdBQVdJLEVBZTdCRCxFQUFpQjRLLE9BYmpCLEdBQUc1SCxHQUFlcmhFLElBQU11L0QsR0FBV3YvRCxFQUFJcS9ELEdBRXRDVixHQUFhLFFBQ1AsQ0FDTixJQUFJeGMsRUFBT3JzRSxLQUFLaXpCLElBQUlrZ0UsRUFBWSxHQUFHanBFLEVBQUl5bUUsR0FBV3ptRSxHQUFLbHFCLEtBQUtpekIsSUFBSWtnRSxFQUFZLEdBQUdocEUsRUFBSXdtRSxHQUFXeG1FLEdBRTNGbnFCLEtBQUtpekIsSUFBSW81QyxJQXphUyxLQTBhcEJ3YyxHQUFheGMsRUFBTyxFQUFJLElBQU0sSUFDOUJrYyxFQUFpQjRLLE1BVXRCNUIsR0FBbUIsV0FFbEIsR0FBSWhKLEVBQUosQ0FJQSxJQUFJMEssRUFBWTFLLEVBQWVoK0YsT0FFL0IsR0FBaUIsSUFBZDBvRyxFQVNILEdBTEF0SCxHQUFnQmo4RCxHQUFHNjRELEVBQWUsSUFFbEMrQyxHQUFNcGhFLEVBQUl3RixHQUFFeEYsRUFBSXltRSxHQUFXem1FLEVBQzNCb2hFLEdBQU1uaEUsRUFBSXVGLEdBQUV2RixFQUFJd21FLEdBQVd4bUUsRUFFeEJxK0QsR0FBY3lLLEVBQVksRUFBRyxDQU8vQixHQUpBdEMsR0FBV3ptRSxFQUFJd0YsR0FBRXhGLEVBQ2pCeW1FLEdBQVd4bUUsRUFBSXVGLEdBQUV2RixHQUdabWhFLEdBQU1waEUsSUFBTW9oRSxHQUFNbmhFLEdBaGFSLFNBQVMySSxFQUFJQyxHQUM3QixPQUFPRCxFQUFHNUksSUFBTTZJLEVBQUc3SSxHQUFLNEksRUFBRzNJLElBQU00SSxFQUFHNUksRUErWlBpcEUsQ0FBZTdLLEVBQWUsR0FBSXgxRCxJQUM3RCxPQUdENDRELEdBQWdCNTRELEdBQUl3MUQsRUFBZSxJQUcvQkosSUFDSEEsR0FBZSxFQUNmaUMsR0FBTyx1QkFJUixJQUFJaUosRUFBaUJoQyxHQUF5QjNoRSxHQUFFcUQsSUFFNUMwNEQsRUFBWTZILEdBQW9CRCxHQUdqQzVILEVBQVkxd0QsRUFBSzgvQyxTQUFTK0QsaUJBQW1CN2pELEVBQUs4L0MsU0FBUytELGlCQUFtQixLQUNoRnFLLElBQXNCLEdBSXZCLElBQUlzSyxFQUFlLEVBQ2xCQyxFQUFldEgsS0FDZnVILEVBQWV0SCxLQUVoQixHQUFLVixFQUFZK0gsRUFFaEIsR0FBR3hhLEVBQVMrTCxlQUFpQmtFLElBQXVCNUMsR0FBbUJ0ckQsRUFBSzgvQyxTQUFTK0QsaUJBQWtCLENBRXRHLElBQ0k4VSxFQUFVLEdBREVGLEVBQWUvSCxJQUNBK0gsRUFBZSxLQUU5Q2xKLEdBQWdCb0osR0FDaEJ0SixHQUFPLGVBQWdCc0osR0FDdkIzSyxJQUFrQixPQUVsQndLLEdBQWdCQyxFQUFlL0gsR0FBYStILEdBQzFCLElBQ2pCRCxFQUFlLEdBRWhCOUgsRUFBWStILEVBQWVELEdBQWdCQyxFQUFlLFFBR2hEL0gsRUFBWWdJLEtBRXZCRixHQUFnQjlILEVBQVlnSSxJQUFpQyxFQUFmRCxJQUM1QixJQUNqQkQsRUFBZSxHQUVoQjlILEVBQVlnSSxFQUFlRixFQUFlQyxHQUd4Q0QsRUFBZSxJQUNqQkEsRUFBZSxHQU9oQjFCLEdBQW9CbmlFLEdBQUdxRCxHQUFJbStELElBRzNCL0gsR0FBYWovRCxHQUFLZ25FLEdBQWFobkUsRUFBSWtuRSxHQUFpQmxuRSxFQUNwRGkvRCxHQUFhaC9ELEdBQUsrbUUsR0FBYS9tRSxFQUFJaW5FLEdBQWlCam5FLEVBQ3BEd2hFLEdBQWdCeUYsR0FBa0JGLElBRWxDN0gsR0FBV24vRCxFQUFJc2hFLEdBQW9CLElBQUtDLEdBQ3hDcEMsR0FBV2wvRCxFQUFJcWhFLEdBQW9CLElBQUtDLEdBRXhDM0QsRUFBZTJELEVBQVlyRixFQUMzQkEsRUFBaUJxRixFQUNqQmIsU0FFTSxDQUlOLElBQUkvQixHQUNILE9BcUJELEdBbEJHQyxLQUNGQSxJQUFlLEVBSVg5b0YsS0FBS2l6QixJQUFJcTRELEdBQU1waEUsSUF0aUJHLEtBdWlCckJvaEUsR0FBTXBoRSxHQUFLcStELEVBQWUsR0FBR3IrRCxFQUFJMG1FLEdBQVkxbUUsR0FHMUNscUIsS0FBS2l6QixJQUFJcTRELEdBQU1uaEUsSUExaUJHLEtBMmlCckJtaEUsR0FBTW5oRSxHQUFLbytELEVBQWUsR0FBR3ArRCxFQUFJeW1FLEdBQVl6bUUsSUFJL0N3bUUsR0FBV3ptRSxFQUFJd0YsR0FBRXhGLEVBQ2pCeW1FLEdBQVd4bUUsRUFBSXVGLEdBQUV2RixFQUdGLElBQVptaEUsR0FBTXBoRSxHQUF1QixJQUFab2hFLEdBQU1uaEUsRUFDekIsT0FHRCxHQUFrQixNQUFmMCtELElBQXNCN1AsRUFBU2dNLHFCQWxmSCxRQUF2QmhNLEVBQVMwTSxXQUF1QlUsSUFBb0JyckQsRUFBSzgvQyxTQUFTK0QsaUJBbWYxRCxDQUNkdUssR0FBYWgvRCxHQUFLbWhFLEdBQU1uaEUsRUFDeEJrL0QsR0FBV2wvRCxHQUFLbWhFLEdBQU1uaEUsRUFFdEIsSUFBSXdwRSxFQUFlNUIsS0FPbkIsT0FMQWhLLEdBQXlCLEVBQ3pCcUMsR0FBTyxpQkFBa0J1SixHQUV6QnJKLEdBQWdCcUosUUFDaEIvSSxNQXRkWSxTQUFTcHdCLEVBQU10d0MsRUFBR0MsR0FDakMsR0FBR3F3QyxFQUFPb3RCLEVBQXlCLEdBQUksQ0FDdEMsSUFBSXgrQyxFQUFJMm5ELEdBQVd4bUcsT0FBUyxFQUFJd21HLEdBQVc3akQsUUFBVSxHQUNyRDlELEVBQUVsZixFQUFJQSxFQUNOa2YsRUFBRWpmLEVBQUlBLEVBQ040bUUsR0FBV2ptRyxLQUFLcytDLEdBQ2hCdytDLEVBQXlCcHRCLElBcWR6Qm81QixDQUFjdkosS0FBbUIzNkQsR0FBRXhGLEVBQUd3RixHQUFFdkYsR0FFeENpK0QsR0FBUyxFQUNUTSxHQUFpQjN0RCxFQUFLOC9DLFNBQVNtUixPQUVQb0csR0FBcUIsSUFBSzlHLE1BRWpEOEcsR0FBcUIsSUFBSzlHLElBRTFCTSxHQUFZdkMsSUFDWnVCLFNBUUhpSixHQUFpQixTQUFTcmtHLEdBRXpCLEdBQUdpNEYsRUFBVTFMLGFBQWUsQ0FFM0IsR0FBR2lNLEdBQXlDLFlBQVh4NEYsRUFBRS9GLEtBQ2xDLE9BT0crRixFQUFFL0YsS0FBS2s5QixRQUFRLFVBQVksSUFDOUJxMkIsYUFBYWdyQyxHQUNiQSxFQUE2QnJrRCxZQUFXLFdBQ3ZDcWtELEVBQTZCLElBQzNCLE1BV0wsSUFBSXZILEVBRUosR0FSQTJKLEdBQU8sYUFFSnNILEdBQThCbGlHLEdBQUcsSUFDbkNBLEVBQUU4SSxpQkFLQTJ1RixFQUFzQixDQUN4QixJQUFJNkwsRUFBZTdhLEVBQVVrSyxZQUFZME8sR0FBZXJoRyxFQUFFdWpHLFVBQVcsTUFFckUsR0FBR0QsR0FBZ0IsRUFHbEIsR0FGQXJTLEVBQWVvUSxHQUFjbmdFLE9BQU9vaUUsRUFBYyxHQUFHLEdBRWxEejBELFVBQVVrbEQsaUJBQWtCLENBTTlCOUMsRUFBYWgzRixLQUxTLENBQ3JCcXFHLEVBQUcsUUFDSEMsRUFBRyxRQUNIQyxFQUFHLE9BRWdDeGtHLEVBQUVnbUYsYUFFbENpTCxFQUFhaDNGLE9BQ2hCZzNGLEVBQWFoM0YsS0FBTytGLEVBQUVnbUYsYUFBZSxjQUd0Q2lMLEVBQWFoM0YsS0FBTytGLEVBQUVnbUYsYUFBZSxRQU14QyxJQUNDeWUsRUFER0MsRUFBWS9CLEdBQWdCM2lHLEdBRS9CeWpHLEVBQVlpQixFQUFVM3BHLE9BT3ZCLEdBTGMsWUFBWGlGLEVBQUUvRixPQUNKd3BHLEVBQVksR0FJSSxJQUFkQSxFQUVGLE9BREExSyxFQUFpQixNQUNWLEVBSVMsSUFBZDBLLEdBQ0Z0SCxHQUFnQmlGLEdBQWFzRCxFQUFVLElBS3ZCLElBQWRqQixHQUFvQnBLLElBQWVELEtBQ2pDbkksSUFDVyxZQUFYanhGLEVBQUUvRixLQUNKZzNGLEVBQWUsQ0FBQ3YyRCxFQUFHMTZCLEVBQUV1aUYsTUFBTzVuRCxFQUFHMzZCLEVBQUUyaEYsTUFBTzFuRixLQUFLLFNBQ3BDK0YsRUFBRTJrRyxnQkFBa0Iza0csRUFBRTJrRyxlQUFlLEtBQzlDMVQsRUFBZSxDQUFDdjJELEVBQUcxNkIsRUFBRTJrRyxlQUFlLEdBQUdwaUIsTUFBTzVuRCxFQUFHMzZCLEVBQUUya0csZUFBZSxHQUFHaGpCLE1BQU8xbkYsS0FBSyxXQUluRjJnRyxHQUFPLGVBQWdCNTZGLEVBQUdpeEYsSUFJM0IsSUFBSTJULEdBQW1CLEVBbUN2QixHQWhDaUIsSUFBZG5CLElBQ0ZoTCxHQUFjLEVBQ2RoUSxFQUFVMXhELE9BQU96OEIsT0FBUW04RixFQUFlbHJELEdBRXhDbzBELEtBRUczRyxFQUVGNEwsRUFBa0IsR0FDYSxJQUF0QmpELEtBQ1RpRCxFQUFrQi9KLEtBQW9COEcsS0FHeENBLEdBQWlDLElBQWQ4QixFQUFrQjVJLE1BQXFCLEVBR3pENEosR0FEdUIsSUFBckJHLEdBQTBCQSxFQUFrQixJQUNoQyxPQUVBLFFBR1o1TCxHQUFjeUssRUFBWSxJQUM1QnpLLEdBQWEsRUFHSSxJQUFkeUssSUFDRmdCLEVBQWMsaUJBRWY3SixHQUFPLHFCQUdSN0IsRUFBaUIsS0FDYkgsR0FBV0QsR0FBaUJTLElBQXlCYixFQWV6RCxHQVZBa0YsS0FHSXBGLElBQ0hBLEVBQW1Cd00sTUFHcEJ4TSxFQUFpQnlNLG9CQUFvQixLQUdsQ3ZNLEVBSUYsR0FGbUJnSyxLQUVEL1ksRUFBU2lNLGtCQUMxQmxxRCxFQUFLd0YsWUFDQyxDQUNOLElBQUlnMEQsRUFBYWxMLEdBQVdsL0QsRUFDM0JxcUUsRUFBbUJ4TCxHQUVwQmtFLEdBQWEsZUFBZ0IsRUFBRyxFQUFHLElBQUtqVixFQUFVc0ssT0FBT00sTUFBTTl6RCxLQUFLLFNBQVNxVSxHQUU1RWltRCxHQUFXbC9ELEdBQUs0USxFQUFLOC9DLFNBQVNtUSxnQkFBZ0I3Z0UsRUFBSW9xRSxHQUFjbnhELEVBQU1teEQsRUFFdEVqSyxJQUFtQixFQUFJa0ssR0FBb0JweEQsRUFBTW94RCxHQUNqRDVKLFFBR0RSLEdBQU8saUJBQWtCLE9BbEIzQixDQTBCQSxJQUFNOUIsR0FBc0JNLEtBQXVDLElBQWRxSyxFQUFpQixDQUVyRSxHQURrQndCLEdBQThCUixFQUFhcE0sR0FFNUQsT0FFRG9NLEVBQWMsZ0JBSVpyTCxLQUtnQixVQUFoQnFMLEdBTUMzTCxHQUFzQmxDLEVBQWlCcnJELEVBQUs4L0MsU0FBUzJGLFVBQ3hEa1UsR0FBb0I3TSxHQU5wQjhNLFFBYUZOLEdBQWlDLFdBRWhDLElBQUlPLEVBQ0hDLEVBR0dqckUsRUFBSSxDQUNQa3JFLGdCQUFpQixHQUNqQkMsY0FBZSxHQUNmQyxlQUFnQixHQUNoQkMsY0FBZ0IsR0FDaEJDLHFCQUF1QixHQUN2QkMsdUJBQXlCLEdBQ3pCQywwQkFBNEIsR0FDNUJDLGVBQWlCLEdBQ2pCQyxvQkFBcUIsR0FDckJDLGdCQUFpQixHQUNqQmpCLG9CQUFxQixTQUFTbG9CLEdBR3pCMmtCLEdBQVd4bUcsT0FBUyxHQUN2QnFxRyxFQUFvQnZLLEtBQW9CekMsRUFBeUIsR0FDakVpTixFQUFpQjlELEdBQVdBLEdBQVd4bUcsT0FBTyxHQUFHNmhGLEtBRWpEd29CLEVBQW9CdkssS0FBb0IxQyxFQUN4Q2tOLEVBQWlCakUsR0FBWXhrQixJQUU5QnhpRCxFQUFFa3JFLGdCQUFnQjFvQixHQUFRdWtCLEdBQVd2a0IsR0FBUXlvQixFQUM3Q2pyRSxFQUFFbXJFLGNBQWMzb0IsR0FBUXBzRSxLQUFLaXpCLElBQUlySixFQUFFa3JFLGdCQUFnQjFvQixJQUNoRHhpRCxFQUFFbXJFLGNBQWMzb0IsR0FBUSxHQUMxQnhpRCxFQUFFb3JFLGVBQWU1b0IsR0FBUXhpRCxFQUFFa3JFLGdCQUFnQjFvQixHQUFRd29CLEVBRW5EaHJFLEVBQUVvckUsZUFBZTVvQixHQUFRLEVBRXRCcHNFLEtBQUtpekIsSUFBSXJKLEVBQUVvckUsZUFBZTVvQixJQUFTLEtBQ3RDeGlELEVBQUVvckUsZUFBZTVvQixHQUFRLEdBRzFCeGlELEVBQUVxckUsY0FBYzdvQixHQUFRLElBQ3hCeGlELEVBQUVzckUscUJBQXFCOW9CLEdBQVEsRUFBSXhpRCxFQUFFcXJFLGNBQWM3b0IsR0FDbkR4aUQsRUFBRXVyRSx1QkFBdUIvb0IsR0FBUSxHQUdsQ29wQiw4QkFBK0IsU0FBU3BwQixFQUFNdUksR0FDekMvcUQsRUFBRTJyRSxnQkFBZ0JucEIsS0FFbEJpZCxHQUFXamQsR0FBUXNjLEdBQWUvOUQsSUFBSXloRCxHQUN4Q3hpRCxFQUFFMHJFLG9CQUFvQmxwQixHQUFRc2MsR0FBZS85RCxJQUFJeWhELEdBRXhDaWQsR0FBV2pkLEdBQVFzYyxHQUFlOTlELElBQUl3aEQsS0FDL0N4aUQsRUFBRTByRSxvQkFBb0JscEIsR0FBUXNjLEdBQWU5OUQsSUFBSXdoRCxTQUdmdmlGLElBQWhDKy9CLEVBQUUwckUsb0JBQW9CbHBCLEtBQ3hCeGlELEVBQUVxckUsY0FBYzdvQixHQUFRLEdBQ3hCeGlELEVBQUVzckUscUJBQXFCOW9CLEdBQVEsRUFBSXhpRCxFQUFFcXJFLGNBQWM3b0IsR0FDaER4aUQsRUFBRXdyRSwwQkFBMEJocEIsR0FBUSxNQUV0Q3hpRCxFQUFFb3JFLGVBQWU1b0IsR0FBUSxFQUN6QnhpRCxFQUFFMnJFLGdCQUFnQm5wQixJQUFRLEVBRTFCOGdCLEdBQWEsZ0JBQWdCOWdCLEVBQUtpZCxHQUFXamQsR0FDNUN4aUQsRUFBRTByRSxvQkFBb0JscEIsR0FDdEJ1SSxHQUFTLElBQ1RzRCxFQUFVc0ssT0FBT0MsS0FBS3p6RCxLQUN0QixTQUFTcVQsR0FDUmluRCxHQUFXamQsR0FBUWhxQyxFQUNuQndvRCxZQVVONkssb0JBQXFCLFNBQVNycEIsR0FDekJ4aUQsRUFBRTJyRSxnQkFBZ0JucEIsS0FDckJ4aUQsRUFBRXVyRSx1QkFBdUIvb0IsR0FBUXhpRCxFQUFFdXJFLHVCQUF1Qi9vQixJQUFTeGlELEVBQUVxckUsY0FBYzdvQixHQUM1RXhpRCxFQUFFc3JFLHFCQUFxQjlvQixHQUN2QnhpRCxFQUFFc3JFLHFCQUFxQjlvQixHQUFReGlELEVBQUU4ckUsU0FBVyxJQUVuRDlyRSxFQUFFd3JFLDBCQUEwQmhwQixHQUFRcHNFLEtBQUtpekIsSUFBSXJKLEVBQUVvckUsZUFBZTVvQixHQUFReGlELEVBQUV1ckUsdUJBQXVCL29CLElBQy9GeGlELEVBQUV5ckUsZUFBZWpwQixHQUFReGlELEVBQUVvckUsZUFBZTVvQixHQUFReGlELEVBQUV1ckUsdUJBQXVCL29CLEdBQVF4aUQsRUFBRThyRSxTQUNyRnJNLEdBQVdqZCxJQUFTeGlELEVBQUV5ckUsZUFBZWpwQixLQUt2Q3VwQixZQUFhLFdBQ1osR0FBSzlJLEdBQVkrSSxVQUNoQi9JLEdBQVkrSSxRQUFRelMsSUFBTWdFLEVBQVd2OUQsRUFBRStyRSxhQUV2Qy9yRSxFQUFFd1osSUFBTWluRCxLQUNSemdFLEVBQUU4ckUsU0FBVzlyRSxFQUFFd1osSUFBTXhaLEVBQUVpc0UsUUFDdkJqc0UsRUFBRWlzRSxRQUFVanNFLEVBQUV3WixJQUVkeFosRUFBRTZyRSxvQkFBb0IsS0FDdEI3ckUsRUFBRTZyRSxvQkFBb0IsS0FFdEI3SyxLQUVBaGhFLEVBQUU0ckUsOEJBQThCLEtBQ2hDNXJFLEVBQUU0ckUsOEJBQThCLEtBRzVCNXJFLEVBQUV3ckUsMEJBQTBCbHJFLEVBQUksS0FBUU4sRUFBRXdyRSwwQkFBMEJqckUsRUFBSSxLQVEzRSxPQUxBay9ELEdBQVduL0QsRUFBSWxxQixLQUFLQyxNQUFNb3BGLEdBQVduL0QsR0FDckNtL0QsR0FBV2wvRCxFQUFJbnFCLEtBQUtDLE1BQU1vcEYsR0FBV2wvRCxHQUNyQ3lnRSxVQUVBbUMsR0FBZSxhQU9uQixPQUFPbmpFLEdBR1I4cUUsR0FBc0IsU0FBU29CLEdBVTlCLEdBUkFBLEVBQVN4QixvQkFBb0IsS0FFN0I1TCxHQUFpQjN0RCxFQUFLOC9DLFNBQVNtUixPQUUvQjhKLEVBQVNSLG9CQUFzQixHQUMvQlEsRUFBU1AsZ0JBQWtCLEdBR3hCdjFGLEtBQUtpekIsSUFBSTZpRSxFQUFTZCxlQUFlOXFFLElBQU0sS0FBUWxxQixLQUFLaXpCLElBQUk2aUUsRUFBU2QsZUFBZTdxRSxJQUFNLElBTXhGLE9BTEEyckUsRUFBU1YsMEJBQTBCbHJFLEVBQUk0ckUsRUFBU1YsMEJBQTBCanJFLEVBQUksRUFHOUUyckUsRUFBU04sOEJBQThCLEtBQ3ZDTSxFQUFTTiw4QkFBOEIsTUFDaEMsRUFJUnhJLEdBQXdCLFdBQ3hCOEksRUFBU0QsUUFBVXhMLEtBQ25CeUwsRUFBU0gsZUFJVmxCLEdBQWdDLFNBQVNSLEVBQWFwTSxHQUNyRCxJQUFJa08sRUFPQUMsRUFtQkFDLEVBakJKLEdBUklyTixLQUNIcUksR0FBdUJuTCxHQU9MLFVBQWhCbU8sRUFBeUIsQ0FDM0IsSUFBSWlDLEVBQWlCdkYsR0FBV3ptRSxFQUFJMG1FLEdBQVkxbUUsRUFDL0Npc0UsRUFBa0J0TyxFQUFpQmtOLGNBQWM3cUUsRUFBSSxHQUluRGdzRSxFQS83Qm1CLEtBZzhCcEJDLEdBQW1CdE8sRUFBaUJpTixnQkFBZ0I1cUUsRUFBSSxJQUV6RDhyRSxHQUFhLEVBQ0pFLEdBbjhCWSxLQW84QnBCQyxHQUFtQnRPLEVBQWlCaU4sZ0JBQWdCNXFFLEdBQUssTUFFMUQ4ckUsRUFBWSxHQU1YQSxLQUVGbFEsR0FBcUJrUSxHQUVFLEdBQ3RCbFEsRUFBb0I5TSxFQUFTOEwsS0FBT3FGLEtBQWUsRUFBSSxFQUN2RDhMLEdBQWEsR0FDSm5RLEdBQXFCcUUsT0FDOUJyRSxFQUFvQjlNLEVBQVM4TCxLQUFPLEVBQUlxRixLQUFlLEVBQ3ZEOEwsR0FBYSxHQUdWQSxJQUFjamQsRUFBUzhMLE9BQzFCNEUsSUFBY3NNLEVBQ2R6TSxJQUFzQnlNLEVBQ3RCRCxHQUFjLElBT2hCLElBRUlLLEVBRkFDLEVBQWE1TSxHQUFXdi9ELEVBQUlxL0QsR0FDNUIrTSxFQUFnQnQyRixLQUFLaXpCLElBQUtvakUsRUFBYTlLLEdBQWVyaEUsR0EyQzFELE9BdkNJNnJFLEdBQWVNLEVBQWE5SyxHQUFlcmhFLEdBQU0yOUQsRUFBaUJtTixlQUFlOXFFLEVBQUksR0FJeEZrc0UsRUFBcUJwMkYsS0FBS2l6QixJQUFJNDBELEVBQWlCbU4sZUFBZTlxRSxHQUFLLEVBQzdEb3NFLEVBQWdCdDJGLEtBQUtpekIsSUFBSTQwRCxFQUFpQm1OLGVBQWU5cUUsR0FDekQsSUFFTmtzRSxFQUFxQnAyRixLQUFLMnFCLElBQUl5ckUsRUFBb0IsS0FDbERBLEVBQXFCcDJGLEtBQUs0cUIsSUFBSXdyRSxFQUFvQixNQVBsREEsRUFBcUIsSUFVbkJuRixLQUF5Qm5MLElBQzNCaVEsR0FBYyxHQUdmbk4sSUFBdUIsRUFFdkJ3QixHQUFPLHVCQUVQOEMsR0FBYSxhQUFjM0IsR0FBZXJoRSxFQUFHbXNFLEVBQVlELEVBQW9CbmUsRUFBVXNLLE9BQU9NLE1BQU05ekQsSUFDbkdvOEQsSUFDQSxXQUNDOEIsS0FDQXJFLElBQXVCLEVBQ3ZCcUksSUFBd0IsR0FFckI4RSxHQUFlOUUsS0FBeUJuTCxJQUMxQy9xRCxFQUFLaTBELGlCQUdONUUsR0FBTyw2QkFJTjJMLEdBQ0ZoN0QsRUFBS2kwRCxnQkFBZSxHQUdkK0csR0FHUnpDLEdBQXNCLFNBQVNpRCxHQUM5QixPQUFRLEVBQUk5TixFQUF1QjhOLEVBQWtCbFEsR0FJdERzTyxHQUF1QixXQUN0QixJQUFJcEksRUFBZ0JuRyxFQUNuQm9OLEVBQWV0SCxLQUNmdUgsRUFBZXRILEtBRVgvRixFQUFpQm9OLEVBQ3JCakgsRUFBZ0JpSCxFQUNMcE4sRUFBaUJxTixJQUM1QmxILEVBQWdCa0gsR0FHakIsSUFDQ3BHLEVBQ0FtSixFQUFpQnhOLEdBRWxCLE9BQUdELEtBQW9CakIsSUFBaUJtQixJQUF1QjdDLEVBQWlCb04sR0FFL0V6NEQsRUFBS3dGLFNBQ0UsSUFHTHdvRCxLQUNGc0UsRUFBVyxTQUFTanFELEdBQ25Ca25ELElBWmdCLEVBWWlCa00sR0FBa0JwekQsRUFBTW96RCxLQUkzRHo3RCxFQUFLK2pELE9BQU95TixFQUFlLEVBQUcsSUFBTXRVLEVBQVVzSyxPQUFPTSxNQUFNOXpELElBQUtzK0QsSUFDekQsSUFJVHRELEdBQWdCLFdBQVksQ0FDM0JDLGNBQWUsQ0FFZHlNLGFBQWMsV0FHYixJQUFJQyxFQUFnQixTQUFTQyxFQUFNN3BCLEVBQU04cEIsRUFBTS9wQixFQUFJM1IsR0FDbEQwckIsRUFBa0IrUCxFQUFPN3BCLEVBQ3pCK1osRUFBaUI4UCxFQUFPQyxFQUN4QjlQLEVBQWdCNlAsRUFBTzlwQixFQUV0QmthLEVBREU3ckIsRUFDaUJ5N0IsRUFBT3o3QixFQUVQLEtBSXJCK3JCLEVBQXVCUSxFQUFVbkUsZUFDTm1FLEVBQVVqVCxRQUVwQ2lULEVBQVVqVCxPQUFRLEdBR2hCeVMsRUFDQzVvRCxVQUFVa2xELGlCQUVabVQsRUFBYyxZQUFhLE9BQVEsT0FBUSxLQUFNLFVBRWpEQSxFQUFjLFVBQVcsT0FBUSxPQUFRLEtBQU0sVUFFdkNqUCxFQUFValQsT0FDbkJraUIsRUFBYyxRQUFTLFFBQVMsT0FBUSxNQUFPLFVBQy9DeFAsR0FBcUIsR0FFckJ3UCxFQUFjLFFBQVMsT0FBUSxPQUFRLE1BR3hDelEsRUFBZ0JZLEVBQWlCLElBQU1DLEVBQWlCLElBQU9DLEVBQy9EYixFQUFjVSxFQUVYSyxJQUF5QkMsSUFDM0JBLEVBQXNCN29ELFVBQVVxdkMsZUFBaUIsR0FBT3J2QyxVQUFVd3ZDLGlCQUFtQixHQUd0Rjl5QyxFQUFLOGlELGtCQUFvQnFKLEVBRXpCZixFQUFxQlMsR0FBbUJnTSxHQUN4Q3pNLEVBQXFCVSxHQUFrQnFNLEdBQ3ZDL00sRUFBcUJXLEdBQWlCK00sR0FFbkM5TSxJQUNGWixFQUFxQlksR0FBb0JaLEVBQXFCVyxJQUk1RFcsRUFBVWpULFFBQ1owUixHQUFlLGFBQ2ZELEdBQWlCLHFCQUNqQkUsRUFBcUIwUSxVQUFZMVEsRUFBcUJTLEdBQ3REVCxFQUFxQjJRLFVBQVkzUSxFQUFxQlUsR0FDdERWLEVBQXFCNFEsUUFBVTVRLEVBQXFCVyxJQUdqREksSUFFSGxPLEVBQVMyTCxnQkFBaUIsT0F1QjlCLElBQUl1SyxHQW1MQThILEdBR0hDLEdBQ0FwRSxHQVlHakUsR0FDSHpFLEdBbk1BOEUsR0FBYyxTQUFTdGdHLEVBQU1xeEYsRUFBS2p4RCxFQUFLbW9FLEdBV3RDLElBQUlDLEVBVERqSSxJQUNGbHlDLGFBQWFreUMsSUFHZDJELElBQXNCLEVBQ3RCb0UsSUFBcUIsRUFLbEJ0b0csRUFBS3lvRyxlQUNQRCxFQUFjeG9HLEVBQUt5b0csY0FDbkJ6b0csRUFBS3lvRyxjQUFnQixNQUVyQkQsRUFBY25lLEVBQVNxZSxrQkFBb0JyZSxFQUFTcWUsaUJBQWlCdlIsR0FHdEUsSUE4Q0t3UixFQUNIQyxFQS9DRTN0RyxFQUFXbWxDLEVBQU1pcUQsRUFBU3VHLHNCQUF3QnZHLEVBQVN3RyxzQkFFM0Q4TixFQUFhLFdBQ2hCUCxHQUFlLGVBQ1hoK0QsR0FRSGdNLEVBQUt4dkMsU0FBU2lzRyxnQkFBZ0IsU0FDOUJ6OEQsRUFBS3l2RCxHQUFHZ04sZ0JBQWdCLFdBUnhCbE4sR0FBZ0IsR0FDYnRLLElBQ0ZBLEVBQUkzNkUsTUFBTXBYLFFBQVUsU0FFckJncUYsRUFBVTMzRSxTQUFTL1UsRUFBVSxxQkFDN0I2K0YsR0FBTyxlQUFpQnI3RCxFQUFNLFNBQVcsV0FNdkNtb0UsR0FDRkEsSUFFRHJFLElBQXNCLEdBSXZCLElBQUlqcEcsSUFBYXV0RyxRQUFpQ3R0RyxJQUFsQnN0RyxFQUFZanRFLEVBbUIzQyxPQWpCQWtnRSxHQUFPLGVBQWlCcjdELEVBQU0sTUFBUSxPQUV0Q3EzRCxFQUFpQnozRixFQUFLaXdGLGlCQUN0QitNLEdBQWdCdEMsR0FBYTE2RixFQUFLcThGLGlCQUNsQ0osS0FFQXIvRixFQUFTOFosTUFBTWtsRixRQUFVeDdELEVBQU0sRUFBSSxFQUNuQ3U3RCxHQUFnQixRQUViMWdHLEVBQ0YrNUMsWUFBVyxXQUNWMnBELE1BQ0UxakcsR0FFSDBqRyxLQU9HZ0ssRUFBZXpSLEVBQ2xCMFIsR0FBa0J4OEQsRUFBSzgvQyxTQUFTMTZDLEtBQU9wRixFQUFLOC9DLFNBQVM0YyxXQUFhemUsRUFBU2tNLGdCQUd6RXYyRixFQUFLK29HLFVBQ1Avb0csRUFBSytvRyxRQUFRcnlGLE1BQU1zeUYseUJBQTJCLFVBRzNDNW9FLElBQ0hxM0QsRUFBaUIrUSxFQUFZNXJELEVBQUk1OEMsRUFBSzQ4QyxFQUN0Qzg5QyxHQUFXbi9ELEVBQUlpdEUsRUFBWWp0RSxFQUMzQm0vRCxHQUFXbC9ELEVBQUlndEUsRUFBWWh0RSxFQUFJbTlELEVBRS9CdnNELEVBQUt3OEQsRUFBaUIsV0FBYSxNQUFNbHlGLE1BQU1rbEYsUUFBVSxLQUN6REssTUFHRG9DLEdBQXdCLGVBRXJCaitELElBQVF1b0UsR0FDVnJmLEVBQVVwK0UsWUFBWXRPLEVBQVUscUJBRzlCZ3NHLElBQ0N4b0UsRUFDRmtwRCxHQUFZcWYsRUFBZSxTQUFXLE9BQVMsU0FBVS9yRyxFQUFVLHlCQUVuRW80QyxZQUFXLFdBQ1ZzMEMsRUFBVTMzRSxTQUFTL1UsRUFBVSwyQkFDM0IsS0FJTDJqRyxHQUFxQnZyRCxZQUFXLFdBSy9CLEdBSEF5bUQsR0FBTyxlQUFpQnI3RCxFQUFNLE1BQVEsT0FHbENBLEVBbUJHLENBR04sSUFBSXc5RCxFQUFnQjRLLEVBQVk1ckQsRUFBSTU4QyxFQUFLNDhDLEVBQ3hDbWxELEVBQW1CLENBQ2xCeG1FLEVBQUdtL0QsR0FBV24vRCxFQUNkQyxFQUFHay9ELEdBQVdsL0QsR0FFZnkwRCxFQUFtQndILEVBQ25Cd1IsRUFBa0I1TyxHQUNsQnFFLEVBQVcsU0FBU2pxRCxHQUVSLElBQVJBLEdBQ0ZnakQsRUFBaUJtRyxFQUNqQmxELEdBQVduL0QsRUFBSWl0RSxFQUFZanRFLEVBQzNCbS9ELEdBQVdsL0QsRUFBSWd0RSxFQUFZaHRFLEVBQUtxOUQsSUFFaENwQixHQUFrQm1HLEVBQWdCM04sR0FBb0J4N0MsRUFBTXc3QyxFQUM1RHlLLEdBQVduL0QsR0FBS2l0RSxFQUFZanRFLEVBQUl3bUUsRUFBaUJ4bUUsR0FBS2taLEVBQU1zdEQsRUFBaUJ4bUUsRUFDN0VtL0QsR0FBV2wvRCxHQUFLZ3RFLEVBQVlodEUsRUFBSXE5RCxFQUF3QmtKLEVBQWlCdm1FLEdBQUtpWixFQUFNc3RELEVBQWlCdm1FLEdBR3RHeWdFLEtBQ0cyTSxFQUNGaHNHLEVBQVM4WixNQUFNa2xGLFFBQVUsRUFBSW5uRCxFQUU3QmtuRCxHQUFpQnNOLEVBQWtCeDBELEVBQU13MEQsSUFJekNOLEVBQ0ZwSyxHQUFhLGNBQWUsRUFBRyxFQUFHdGpHLEVBQVVxdUYsRUFBVXNLLE9BQU9NLE1BQU05ekQsSUFBS3MrRCxFQUFVQyxJQUVsRkQsRUFBUyxHQUNUNkIsR0FBcUJ2ckQsV0FBVzJwRCxFQUFZMWpHLEVBQVcsVUE5Q3hEdzhGLEVBQWlCejNGLEVBQUtpd0YsaUJBQ3RCK00sR0FBZ0J0QyxHQUFhMTZGLEVBQUtxOEYsaUJBQ2xDSixLQUNBTixHQUFnQixHQUViaU4sRUFDRmhzRyxFQUFTOFosTUFBTWtsRixRQUFVLEVBRXpCRCxHQUFnQixHQUdqQjRFLEdBQXFCdnJELFdBQVcycEQsRUFBWTFqRyxFQUFXLE1BdUN0RG1sQyxFQUFNLEdBQUssS0FtQmhCOG9FLEdBQW1CLEdBQ25CQyxHQUFzQixHQUd0QkMsR0FBNEIsQ0FDM0I5dUYsTUFBTyxFQUNQK3VGLFNBQVUsd0dBQ1ZDLHlCQUF5QixFQUN6QkMsUUFBUyxDQUFDLEVBQUUsR0FDWjliLGNBQWUsV0FDZCxPQUFPNGEsR0FBT3pzRyxTQW1DaEIwaEcsR0FBcUIsU0FBU3Q5RixFQUFNOCtGLEVBQWNoQyxHQUVqRCxHQUFJOThGLEVBQUt3eEMsTUFBUXh4QyxFQUFLOG9HLFVBQVcsQ0FDaEMsSUFBSVUsR0FBYTFNLEVBY2pCLEdBWkcwTSxJQUNFeHBHLEVBQUtpdkYsT0FDUmp2RixFQUFLaXZGLEtBQU8sQ0FBQzFOLElBQUksRUFBRUYsT0FBTyxJQUczQm9hLEdBQU8sc0JBQXVCejdGLElBSS9Ca3BHLEdBQWlCM3RFLEVBQUl1akUsRUFBYXZqRSxFQUNsQzJ0RSxHQUFpQjF0RSxFQUFJc2pFLEVBQWF0akUsRUFBSXg3QixFQUFLaXZGLEtBQUsxTixJQUFNdmhGLEVBQUtpdkYsS0FBSzVOLE9BRTVEbW9CLEVBQVcsQ0FDZCxJQUFJQyxFQUFTUCxHQUFpQjN0RSxFQUFJdjdCLEVBQUs0OEMsRUFDbkM4c0QsRUFBU1IsR0FBaUIxdEUsRUFBSXg3QixFQUFLZ2dELEVBRXZDaGdELEVBQUs2eEYsU0FBVzRYLEVBQVNDLEVBQVNELEVBQVNDLEVBRzNDLElBQUkzUyxFQUFZMU0sRUFBUzBNLFVBRVAsU0FBZEEsRUFDSCtGLEVBQVksRUFDWSxRQUFkL0YsSUFDVitGLEVBQVk5OEYsRUFBSzZ4RixVQUdkaUwsRUFBWSxJQUNmQSxFQUFZLEdBR2I5OEYsRUFBS2l3RixpQkFBbUI2TSxFQUVwQjk4RixFQUFLcTlGLFNBRVJyOUYsRUFBS3E5RixPQWxFRCxDQUNOMEQsT0FBTyxDQUFDeGxFLEVBQUUsRUFBRUMsRUFBRSxHQUNkUyxJQUFJLENBQUNWLEVBQUUsRUFBRUMsRUFBRSxHQUNYUSxJQUFJLENBQUNULEVBQUUsRUFBRUMsRUFBRSxLQW1FWCxJQUFJc2hFLEVBQ0gsT0FTRCxPQTFFOEIsU0FBUzk4RixFQUFNMnBHLEVBQWlCQyxHQUMvRCxJQUFJdk0sRUFBU3I5RixFQUFLcTlGLE9BR2xCQSxFQUFPMEQsT0FBT3hsRSxFQUFJbHFCLEtBQUtDLE9BQU80M0YsR0FBaUIzdEUsRUFBSW91RSxHQUFtQixHQUN0RXRNLEVBQU8wRCxPQUFPdmxFLEVBQUlucUIsS0FBS0MsT0FBTzQzRixHQUFpQjF0RSxFQUFJb3VFLEdBQW1CLEdBQUs1cEcsRUFBS2l2RixLQUFLMU4sSUFHckY4YixFQUFPcGhFLElBQUlWLEVBQUtvdUUsRUFBa0JULEdBQWlCM3RFLEVBQzlDbHFCLEtBQUtDLE1BQU00M0YsR0FBaUIzdEUsRUFBSW91RSxHQUNoQ3RNLEVBQU8wRCxPQUFPeGxFLEVBRW5COGhFLEVBQU9waEUsSUFBSVQsRUFBS291RSxFQUFrQlYsR0FBaUIxdEUsRUFDOUNucUIsS0FBS0MsTUFBTTQzRixHQUFpQjF0RSxFQUFJb3VFLEdBQW1CNXBHLEVBQUtpdkYsS0FBSzFOLElBQzdEOGIsRUFBTzBELE9BQU92bEUsRUFHbkI2aEUsRUFBT3JoRSxJQUFJVCxFQUFLb3VFLEVBQWtCVCxHQUFpQjN0RSxFQUFLLEVBQUk4aEUsRUFBTzBELE9BQU94bEUsRUFDMUU4aEUsRUFBT3JoRSxJQUFJUixFQUFLb3VFLEVBQWtCVixHQUFpQjF0RSxFQUFLeDdCLEVBQUtpdkYsS0FBSzFOLElBQU04YixFQUFPMEQsT0FBT3ZsRSxFQWtEckZxdUUsQ0FBOEI3cEcsRUFBTUEsRUFBSzQ4QyxFQUFJa2dELEVBQVc5OEYsRUFBS2dnRCxFQUFJODhDLEdBRTdEME0sR0FBYTFNLElBQWM5OEYsRUFBS2l3RixtQkFDbkNqd0YsRUFBS3E4RixnQkFBa0JyOEYsRUFBS3E5RixPQUFPMEQsUUFHN0IvZ0csRUFBS3E5RixPQVFaLE9BTkFyOUYsRUFBSzQ4QyxFQUFJNThDLEVBQUtnZ0QsRUFBSSxFQUNsQmhnRCxFQUFLaXdGLGlCQUFtQmp3RixFQUFLNnhGLFNBQVcsRUFDeEM3eEYsRUFBS3E5RixPQXBGQyxDQUNOMEQsT0FBTyxDQUFDeGxFLEVBQUUsRUFBRUMsRUFBRSxHQUNkUyxJQUFJLENBQUNWLEVBQUUsRUFBRUMsRUFBRSxHQUNYUSxJQUFJLENBQUNULEVBQUUsRUFBRUMsRUFBRSxJQWtGWHg3QixFQUFLcThGLGdCQUFrQnI4RixFQUFLcTlGLE9BQU8wRCxPQUc1Qi9nRyxFQUFLcTlGLFFBUWR5TSxHQUFlLFNBQVN4dkYsRUFBT3RhLEVBQU0rcEcsRUFBUzFZLEVBQUsyWSxFQUFrQkMsR0FHakVqcUcsRUFBSzhvRyxXQUlMelgsSUFFRnJ4RixFQUFLa3FHLGVBQWdCLEVBQ3JCL04sR0FBY244RixFQUFNcXhGLEVBQU1yeEYsSUFBU29zQyxFQUFLOC9DLFVBQVlpUCxJQUVwRDRPLEVBQVFoOUYsWUFBWXNrRixHQUVqQjRZLEdBQ0ZqMUQsWUFBVyxXQUNQaDFDLEdBQVFBLEVBQUttcUcsUUFBVW5xRyxFQUFLKzNCLGNBQzlCLzNCLEVBQUsrM0IsWUFBWXJoQixNQUFNcFgsUUFBVSxPQUNqQ1UsRUFBSyszQixZQUFjLFFBRWxCLE9BT05xeUUsR0FBZ0IsU0FBU3BxRyxHQUN4QkEsRUFBSzZLLFNBQVUsRUFDZjdLLEVBQUttcUcsUUFBUyxFQUNkLElBQUk5WSxFQUFNcnhGLEVBQUtxeEYsSUFBTS9ILEVBQVU4RixTQUFTLFlBQWEsT0FDakR1UCxFQUFhLFdBQ2hCMytGLEVBQUs2SyxTQUFVLEVBQ2Y3SyxFQUFLbXFHLFFBQVMsRUFFWG5xRyxFQUFLcXFHLGFBQ1BycUcsRUFBS3FxRyxhQUFhcnFHLEdBRWxCQSxFQUFLcXhGLElBQU0sS0FFWkEsRUFBSWlaLE9BQVNqWixFQUFJa1osUUFBVSxLQUMzQmxaLEVBQU0sTUFVUCxPQVJBQSxFQUFJaVosT0FBUzNMLEVBQ2J0TixFQUFJa1osUUFBVSxXQUNidnFHLEVBQUs4b0csV0FBWSxFQUNqQm5LLEtBR0R0TixFQUFJNy9DLElBQU14eEMsRUFBS3d4QyxJQUVSNi9DLEdBRVJtWixHQUFpQixTQUFTeHFHLEVBQU15cUcsR0FDL0IsR0FBR3pxRyxFQUFLd3hDLEtBQU94eEMsRUFBSzhvRyxXQUFhOW9HLEVBQUtyRSxVQU9yQyxPQUxHOHVHLElBQ0Z6cUcsRUFBS3JFLFVBQVUyUSxVQUFZLElBRzVCdE0sRUFBS3JFLFVBQVUyUSxVQUFZKzlFLEVBQVNnZixTQUFTeHJHLFFBQVEsUUFBVW1DLEVBQUt3eEMsTUFDN0QsR0FJVDJxRCxHQUFnQixTQUFTbjhGLEVBQU1xeEYsRUFBS3FaLEdBQ25DLEdBQUkxcUcsRUFBS3d4QyxJQUFULENBSUk2L0MsSUFDSEEsRUFBTXJ4RixFQUFLckUsVUFBVWd2RyxXQUd0QixJQUFJL3RELEVBQUk4dEQsRUFBUzFxRyxFQUFLNDhDLEVBQUl2ckMsS0FBS0MsTUFBTXRSLEVBQUs0OEMsRUFBSTU4QyxFQUFLNnhGLFVBQ2xEN3hDLEVBQUkwcUQsRUFBUzFxRyxFQUFLZ2dELEVBQUkzdUMsS0FBS0MsTUFBTXRSLEVBQUtnZ0QsRUFBSWhnRCxFQUFLNnhGLFVBRTdDN3hGLEVBQUsrM0IsY0FBZ0IvM0IsRUFBS21xRyxTQUM1Qm5xRyxFQUFLKzNCLFlBQVlyaEIsTUFBTTZELE1BQVFxaUMsRUFBSSxLQUNuQzU4QyxFQUFLKzNCLFlBQVlyaEIsTUFBTStvRSxPQUFTei9CLEVBQUksTUFHckNxeEMsRUFBSTM2RSxNQUFNNkQsTUFBUXFpQyxFQUFJLEtBQ3RCeTBDLEVBQUkzNkUsTUFBTStvRSxPQUFTei9CLEVBQUksT0FFeEI0cUQsR0FBb0IsV0FFbkIsR0FBR3pCLEdBQW9CdnRHLE9BQVEsQ0FHOUIsSUFGQSxJQUFJaXZHLEVBRUl2cEcsRUFBSSxFQUFHQSxFQUFJNm5HLEdBQW9CdnRHLE9BQVEwRixLQUM5Q3VwRyxFQUFXMUIsR0FBb0I3bkcsSUFDbEJvZ0csT0FBT3BuRixRQUFVdXdGLEVBQVN2d0YsT0FDdEN3dkYsR0FBYWUsRUFBU3Z3RixNQUFPdXdGLEVBQVM3cUcsS0FBTTZxRyxFQUFTZCxRQUFTYyxFQUFTeFosSUFBSyxFQUFPd1osRUFBU0Msa0JBRzlGM0IsR0FBc0IsS0FNekIvTixHQUFnQixhQUFjLENBRTdCQyxjQUFlLENBRWQwUCxhQUFjLFNBQVN6d0YsR0FDdEJBLEVBQVFnaEYsR0FBYWhoRixHQUNyQixJQUFJdGEsRUFBT2lnRyxHQUFXM2xGLEdBRWxCdGEsS0FBVUEsRUFBS21xRyxTQUFVbnFHLEVBQUs2SyxTQUFhaXRGLEtBSS9DMkQsR0FBTyxjQUFlbmhGLEVBQU90YSxHQUV4QkEsRUFBS3d4QyxLQUlWNDRELEdBQWNwcUcsS0FFZmdyRyxlQUFnQixXQUNmMWhCLEVBQVV0VSxPQUFPcVYsRUFBVStlLElBQTJCLEdBQ3REaDlELEVBQUs2bUQsTUFBUW9WLEdBQVNwVixFQUN0QmdOLEdBQWE3ekQsRUFBSzYrRCxVQUNsQnpQLEdBQWVuUixFQUFTb0QsY0FJUHBELEVBQVM4TCxLQUN2QnFGLEtBQWlCLElBQ25CblIsRUFBUzhMLE1BQU8sR0FHakJuTSxHQUFRLGdCQUFnQixTQUFTdE0sR0FFaEMsSUFJQ3A4RSxFQUpHeS9CLEVBQUlzcEQsRUFBU2tmLFFBQ2hCMkIsRUFBa0IsT0FBVHh0QixHQUF3QkEsR0FBUSxFQUN6Q3l0QixFQUFnQjk1RixLQUFLMnFCLElBQUkrRSxFQUFFLEdBQUl5NkQsTUFDL0I0UCxFQUFlLzVGLEtBQUsycUIsSUFBSStFLEVBQUUsR0FBSXk2RCxNQUkvQixJQUFJbDZGLEVBQUksRUFBR0EsSUFBTTRwRyxFQUFTRSxFQUFlRCxHQUFnQjdwRyxJQUN4RDhxQyxFQUFLMitELGFBQWE1VCxFQUFrQjcxRixHQUVyQyxJQUFJQSxFQUFJLEVBQUdBLElBQU00cEcsRUFBU0MsRUFBZ0JDLEdBQWU5cEcsSUFDeEQ4cUMsRUFBSzIrRCxhQUFhNVQsRUFBa0I3MUYsTUFJdEMwb0YsR0FBUSxpQkFBaUIsV0FDeEI1OUMsRUFBSzgvQyxTQUFTdWMsY0FBZ0JwZSxFQUFTcWUsa0JBQW9CcmUsRUFBU3FlLGlCQUFpQnZSLE1BR3RGbk4sR0FBUSx5QkFBMEI0Z0IsSUFDbEM1Z0IsR0FBUSxtQkFBb0I0Z0IsSUFJNUI1Z0IsR0FBUSxXQUFXLFdBRWxCLElBREEsSUFBSWhxRixFQUNJc0IsRUFBSSxFQUFHQSxFQUFJK21HLEdBQU96c0csT0FBUTBGLEtBQ2pDdEIsRUFBT3FvRyxHQUFPL21HLElBRU4zRixZQUNQcUUsRUFBS3JFLFVBQVksTUFFZnFFLEVBQUsrM0IsY0FDUC8zQixFQUFLKzNCLFlBQWMsTUFFakIvM0IsRUFBS3F4RixNQUNQcnhGLEVBQUtxeEYsSUFBTSxNQUVUcnhGLEVBQUttZSxZQUNQbmUsRUFBS21lLFVBQVksTUFFZm5lLEVBQUs4b0csWUFDUDlvRyxFQUFLbXFHLE9BQVNucUcsRUFBSzhvRyxXQUFZLEdBR2pDSyxHQUFzQixTQUt4QjhCLFVBQVcsU0FBUzN3RixHQUNuQixPQUFJQSxHQUFTLFFBQ2FwZixJQUFsQm10RyxHQUFPL3RGLElBQXVCK3RGLEdBQU8vdEYsSUFLOUM4MkUsb0JBQXFCLFdBV3BCLE9BQU8vRyxFQUFTaWYsMEJBQTRCL1EsR0FBc0JsTyxFQUFTb0MsV0FBYXVCLE9BQU96ekUsTUFBUSxNQUl4RzZsRixXQUFZLFNBQVNzQixFQUFRcG5GLEdBRXpCK3ZFLEVBQVM4TCxPQUNYNzdFLEVBQVFnaEYsR0FBYWhoRixJQUd0QixJQUFJZ25GLEVBQVdsMUQsRUFBSzYrRCxVQUFVdkosRUFBT3BuRixPQUNsQ2duRixJQUNGQSxFQUFTM2xHLFVBQVksTUFHdEIsSUFDQzAxRixFQURHcnhGLEVBQU9vc0MsRUFBSzYrRCxVQUFVM3dGLEdBRzFCLEdBQUl0YSxFQUFKLENBTUF5N0YsR0FBTyxjQUFlbmhGLEVBQU90YSxHQUU3QjBoRyxFQUFPcG5GLE1BQVFBLEVBQ2ZvbkYsRUFBTzFoRyxLQUFPQSxFQUdkLElBQUkrcEcsRUFBVS9wRyxFQUFLckUsVUFBWTJ0RixFQUFVOEYsU0FBUyxtQkFnQmxELElBWklwdkYsRUFBS3d4QyxLQUFPeHhDLEVBQUtnRixPQUNqQmhGLEVBQUtnRixLQUFLeStFLFFBQ1pzbUIsRUFBUWg5RixZQUFZL00sRUFBS2dGLE1BRXpCK2tHLEVBQVF6OUYsVUFBWXRNLEVBQUtnRixNQUkzQndsRyxHQUFleHFHLEdBRWZzOUYsR0FBbUJ0OUYsRUFBTTI2RixLQUV0QjM2RixFQUFLd3hDLEtBQVF4eEMsRUFBSzhvRyxXQUFjOW9HLEVBQUttcUcsT0EwRjlCbnFHLEVBQUt3eEMsTUFBUXh4QyxFQUFLOG9HLGFBRTNCelgsRUFBTS9ILEVBQVU4RixTQUFTLFlBQWEsUUFDbEMxNEUsTUFBTWtsRixRQUFVLEVBQ3BCdkssRUFBSTcvQyxJQUFNeHhDLEVBQUt3eEMsSUFDZjJxRCxHQUFjbjhGLEVBQU1xeEYsR0FDcEJ5WSxHQUFheHZGLEVBQU90YSxFQUFNK3BHLEVBQVMxWSxRQWhHWSxDQWtEL0MsR0FoREFyeEYsRUFBS3FxRyxhQUFlLFNBQVNycUcsR0FHNUIsR0FBSWczRixFQUFKLENBS0EsR0FBRzBLLEdBQVVBLEVBQU9wbkYsUUFBVUEsRUFBUSxDQUNyQyxHQUFJa3dGLEdBQWV4cUcsR0FBTSxHQVN4QixPQVJBQSxFQUFLcXFHLGFBQWVycUcsRUFBS3F4RixJQUFNLEtBQy9CaU0sR0FBbUJ0OUYsRUFBTTI2RixJQUN6QnlCLEdBQW9CcDhGLFFBRWpCMGhHLEVBQU9wbkYsUUFBVTY4RSxHQUVuQi9xRCxFQUFLdzBELHNCQUlGNWdHLEVBQUtrcUcsZUFlTGhHLElBQXVCbGtHLEVBQUsrM0IsY0FDL0IvM0IsRUFBSyszQixZQUFZcmhCLE1BQU1wWCxRQUFVLE9BQ2pDVSxFQUFLKzNCLFlBQWMsTUFoQmpCK2dFLEVBQVUzMEYsWUFBYzgxRixJQUF3QmlLLElBQ2xEaUYsR0FBb0JodEcsS0FBSyxDQUN4QjZELEtBQUtBLEVBQ0wrcEcsUUFBUUEsRUFDUjFZLElBQUlyeEYsRUFBS3F4RixJQUNULzJFLE1BQU1BLEVBQ05vbkYsT0FBT0EsRUFDUG9KLGtCQUFpQixJQUdsQmhCLEdBQWF4dkYsRUFBT3RhLEVBQU0rcEcsRUFBUy9wRyxFQUFLcXhGLElBQUs0SSxHQUE2QyxHQVc3Rmo2RixFQUFLcXFHLGFBQWUsS0FDcEJycUcsRUFBS3F4RixJQUFNLEtBRVhvSyxHQUFPLG9CQUFxQm5oRixFQUFPdGEsS0FHakNzcEYsRUFBVTZELFNBQVNocEYsVUFBVyxDQUVoQyxJQUFJa25HLEVBQXVCLG1DQUMzQkEsR0FBeUJyckcsRUFBS3NyRyxLQUFPLEdBQUssaUNBRTFDLElBQUl2ekUsRUFBY3V4RCxFQUFVOEYsU0FBU2ljLEVBQXNCcnJHLEVBQUtzckcsS0FBTyxNQUFRLElBQzVFdHJHLEVBQUtzckcsT0FDUHZ6RSxFQUFZeVosSUFBTXh4QyxFQUFLc3JHLE1BR3hCblAsR0FBY244RixFQUFNKzNCLEdBRXBCZ3lFLEVBQVFoOUYsWUFBWWdyQixHQUNwQi8zQixFQUFLKzNCLFlBQWNBLEVBT2hCLzNCLEVBQUs2SyxTQUNSdS9GLEdBQWNwcUcsR0FJWG9zQyxFQUFLZ2xELHlCQUVKa1gsSUFBc0J4UCxFQUFVMzBGLFVBQ25DZ2xHLEdBQW9CaHRHLEtBQUssQ0FDeEI2RCxLQUFLQSxFQUNMK3BHLFFBQVFBLEVBQ1IxWSxJQUFJcnhGLEVBQUtxeEYsSUFDVC8yRSxNQUFNQSxFQUNOb25GLE9BQU9BLElBR1JvSSxHQUFheHZGLEVBQU90YSxFQUFNK3BHLEVBQVMvcEcsRUFBS3F4RixJQUFLLEdBQU0sSUFjbERpWCxJQUFzQmh1RixJQUFVNjhFLEVBSW5DaUYsR0FBb0JwOEYsSUFIcEJnNkYsR0FBd0IrUCxFQUFRcnpGLE1BQ2hDNHBGLEdBQVl0Z0csRUFBT3F4RixHQUFNcnhGLEVBQUtxeEYsTUFLL0JxUSxFQUFPL2tHLEdBQUcyUCxVQUFZLEdBQ3RCbzFGLEVBQU8va0csR0FBR29RLFlBQVlnOUYsUUF2SXJCckksRUFBTy9rRyxHQUFHMlAsVUFBWSxJQTBJeEJzMUYsV0FBWSxTQUFVNWhHLEdBQ2xCQSxFQUFLcXhGLE1BQ1ByeEYsRUFBS3F4RixJQUFJaVosT0FBU3RxRyxFQUFLcXhGLElBQUlrWixRQUFVLE1BRXRDdnFHLEVBQUttcUcsT0FBU25xRyxFQUFLNkssUUFBVTdLLEVBQUtxeEYsSUFBTXJ4RixFQUFLa3FHLGVBQWdCLE1BZ0JoRSxJQUFJcUIsR0FzRkFDLEdBckZIQyxHQUFrQixHQUNsQkMsR0FBb0IsU0FBU0MsRUFBVzdaLEVBQWNqTCxHQUNyRCxJQUFJaG1GLEVBQUkwSSxTQUFTNnpFLFlBQWEsZUFDN0J3dUIsRUFBVSxDQUNURCxVQUFVQSxFQUNWdG5HLE9BQU9zbkcsRUFBVXRuRyxPQUNqQnl0RixhQUFjQSxFQUNkakwsWUFBWUEsR0FBZSxTQUc3QmhtRixFQUFFMDhFLGdCQUFpQixXQUFXLEdBQU0sRUFBTXF1QixHQUMxQ0QsRUFBVXRuRyxPQUFPZzZFLGNBQWN4OUUsSUFHakN1NkYsR0FBZ0IsTUFBTyxDQUN0QkMsY0FBZSxDQUNkd1EsUUFBUyxXQUNSN2hCLEdBQVEsa0JBQW1CNTlDLEVBQUswL0QsWUFDaEM5aEIsR0FBUSxlQUFnQjU5QyxFQUFLMi9ELGNBQzdCL2hCLEdBQVEsV0FBVyxXQUNsQnloQixHQUFrQixHQUNsQkYsR0FBVyxTQUdiTyxXQUFZLFNBQVN2RyxHQUNqQkEsRUFBVTNwRyxPQUFTLElBQ3JCeXlELGFBQWFrOUMsSUFDYkEsR0FBVyxPQUdiUSxhQUFjLFNBQVNsckcsRUFBR2l4RixHQUN6QixHQUFJQSxJQUlBMkgsSUFBV0YsSUFBa0I0RSxHQUFnQixDQUNoRCxJQUFJNk4sRUFBS2xhLEVBQ1QsR0FBR3laLEtBQ0ZsOUMsYUFBYWs5QyxJQUNiQSxHQUFXLEtBMXlEWVUsRUE2eURGRCxFQTd5RFVFLEVBNnlETlQsR0E1eURyQnA2RixLQUFLaXpCLElBQUkybkUsRUFBTzF3RSxFQUFJMndFLEVBQU8zd0UsR0F6a0NaLElBeWtDc0NscUIsS0FBS2l6QixJQUFJMm5FLEVBQU96d0UsRUFBSTB3RSxFQUFPMXdFLEdBemtDakUsSUF1M0ZsQixZQURBaWdFLEdBQU8sWUFBYXVRLEdBS3RCLEdBQXlCLFVBQXRCbGEsRUFBYWgzRixLQUVmLFlBREE0d0csR0FBa0I3cUcsRUFBR2l4RixFQUFjLFNBTXBDLEdBQXNCLFdBRkRqeEYsRUFBRXdELE9BQU9vL0UsUUFBUW5rRCxlQUVKZ3FELEVBQVVyK0UsU0FBU3BLLEVBQUV3RCxPQUFRLG9CQUU5RCxZQURBcW5HLEdBQWtCN3FHLEVBQUdpeEYsR0FJdEJrTCxHQUFnQnlPLEdBQWlCTyxHQUVqQ1QsR0FBV3YyRCxZQUFXLFdBQ3JCMDJELEdBQWtCN3FHLEVBQUdpeEYsR0FDckJ5WixHQUFXLE9BQ1QsS0FwMERZLElBQVNVLEVBQVFDLE1BMDFEcEM5USxHQUFnQixjQUFlLENBRTlCQyxjQUFlLENBRWQ4USxnQkFBaUIsV0FFYnZULElBS0FMLEVBR0Z2TyxHQUFRLGFBQWEsV0FDcEI1OUMsRUFBS2dnRSxzQkFHTmhnRSxFQUFLZ2dFLGtCQUFpQixLQUt4QkEsaUJBQWtCLFNBQVM3YyxHQUUxQmljLEdBQWMsR0FFZCxJQUFJbHZELEVBQVMsa0NBRWIwdEMsR0FBUSxjQUFjLFdBQ3JCVixFQUFVMW9GLEtBQUtoRSxFQUFVMC9DLEVBQVNsUSxFQUFLaWdFLHFCQUd4Q3JpQixHQUFRLGdCQUFnQixXQUNwQndoQixJQUNGbGlCLEVBQVUxeEQsT0FBT2g3QixFQUFVMC9DLEVBQVFsUSxFQUFLaWdFLHFCQUkxQ2pnRSxFQUFLa2dFLGVBQWdCLEVBRXJCLElBQUlDLEVBQ0hDLEVBQWlCLFdBQ2JwZ0UsRUFBS2tnRSxnQkFDUGhqQixFQUFVcCtFLFlBQVl0TyxFQUFVLG1CQUNoQ3d2QyxFQUFLa2dFLGVBQWdCLEdBRW5CN1UsRUFBaUIsRUFDbkJuTyxFQUFVMzNFLFNBQVMvVSxFQUFVLHNCQUU3QjBzRixFQUFVcCtFLFlBQVl0TyxFQUFVLHNCQUVqQzZ2RyxLQUVEQSxFQUFzQixXQUNsQkYsSUFDRmpqQixFQUFVcCtFLFlBQVl0TyxFQUFVLGtCQUNoQzJ2RyxHQUFtQixJQUl0QnZpQixHQUFRLFNBQVd3aUIsR0FDbkJ4aUIsR0FBUSxjQUFnQndpQixHQUN4QnhpQixHQUFRLGVBQWUsV0FDbkI1OUMsRUFBS2tnRSxnQkFDUEMsR0FBbUIsRUFDbkJqakIsRUFBVTMzRSxTQUFTL1UsRUFBVSxzQkFHL0JvdEYsR0FBUSxZQUFheWlCLEdBRWpCbGQsR0FDSGlkLEtBS0ZILGlCQUFrQixTQUFTeHJHLEdBRTFCLEdBQUc0MkYsR0FBa0JyckQsRUFBSzgvQyxTQUFTMkYsU0FhbEMsT0FaSXhILEVBQVM1K0UsU0FFUDQrRSxFQUFTeUksZUFBaUJxTCxJQUFrQjdFLEVBQ2hEejRGLEVBQUU4SSxpQkFDTzB1RixHQUFpQmhuRixLQUFLaXpCLElBQUl6akMsRUFBRWdqRixRQUFVLElBRy9DcVQsR0FBa0IsRUFDbEI5cUQsRUFBS3dGLFdBSUEsRUFTUixHQUxBL3dDLEVBQUVpaUYsa0JBR0Ywb0IsR0FBWWp3RSxFQUFJLEVBRWIsV0FBWTE2QixFQUNLLElBQWhCQSxFQUFFMGpGLFdBRUppbkIsR0FBWWp3RSxFQUFlLEdBQVgxNkIsRUFBRStpRixPQUNsQjRuQixHQUFZaHdFLEVBQWUsR0FBWDM2QixFQUFFZ2pGLFNBRWxCMm5CLEdBQVlqd0UsRUFBSTE2QixFQUFFK2lGLE9BQ2xCNG5CLEdBQVlod0UsRUFBSTM2QixFQUFFZ2pGLGFBRWIsR0FBRyxlQUFnQmhqRixFQUN0QkEsRUFBRXdqRixjQUNKbW5CLEdBQVlqd0UsR0FBSyxJQUFPMTZCLEVBQUV3akYsYUFFeEJ4akYsRUFBRXlqRixZQUNKa25CLEdBQVlod0UsR0FBSyxJQUFPMzZCLEVBQUV5akYsWUFFMUJrbkIsR0FBWWh3RSxHQUFLLElBQU8zNkIsRUFBRTJqRixlQUVyQixNQUFHLFdBQVkzakYsR0FHckIsT0FGQTJxRyxHQUFZaHdFLEVBQUkzNkIsRUFBRSt3RixPQUtuQndMLEdBQW9CM0YsR0FBZ0IsR0FFcEMsSUFBSWlWLEVBQVVoUyxHQUFXbi9ELEVBQUlpd0UsR0FBWWp3RSxFQUN4Q294RSxFQUFValMsR0FBV2wvRCxFQUFJZ3dFLEdBQVlod0UsR0FHbEM2dUQsRUFBUzUrRSxPQUVaaWhHLEdBQVczUyxHQUFlLzlELElBQUlULEdBQUtteEUsR0FBVzNTLEdBQWU5OUQsSUFBSVYsR0FDakVveEUsR0FBVzVTLEdBQWUvOUQsSUFBSVIsR0FBS214RSxHQUFXNVMsR0FBZTk5RCxJQUFJVCxJQUVqRTM2QixFQUFFOEksaUJBSUh5aUMsRUFBS3EwRCxNQUFNaU0sRUFBU0MsSUFHckJuZCxrQkFBbUIsU0FBU3FTLEdBQzNCQSxFQUFjQSxHQUFlLENBQUN0bUUsRUFBRW8vRCxHQUFjcC9ELEVBQUUsRUFBSXMvRCxHQUFRdC9ELEVBQUdDLEVBQUVtL0QsR0FBY24vRCxFQUFFLEVBQUlxL0QsR0FBUXIvRCxHQUU3RixJQUFJb3hFLEVBQXFCdmlCLEVBQVMrRixrQkFBaUIsRUFBTWhrRCxFQUFLOC9DLFVBQzFEMmdCLEVBQVVwVixJQUFtQm1WLEVBRWpDeGdFLEVBQUtrZ0UsZUFBaUJPLEVBRXRCemdFLEVBQUsrakQsT0FBTzBjLEVBQVV6Z0UsRUFBSzgvQyxTQUFTK0QsaUJBQW1CMmMsRUFBb0IvSyxFQUFhLEtBQ3hGdlksR0FBYXVqQixFQUFrQixTQUFSLE9BQW9CLFNBQVNqd0csRUFBVSx1QkF3QmpFLElBS0lrd0csR0FDSEMsR0FDQUMsR0FDQUMsR0FDQUMsR0FDQUMsR0FDQUMsR0FDQUMsR0FDQUMsR0FDQUMsR0FDQUMsR0FFQUMsR0FqQkdDLEdBQXlCLENBQzVCcC9GLFNBQVMsRUFDVHEvRixXQUFZLEdBaUJaQyxHQUFXLFdBQ1YsT0FBT0osR0FBVy8rRixLQUFLMndCLFVBQVUsSUFFbEN5dUUsR0FBd0IsV0FFcEJmLElBQ0Z6K0MsYUFBYXkrQyxJQUdYRSxJQUNGMytDLGFBQWEyK0MsS0FNZmMsR0FBeUIsV0FDeEIsSUFBSXIvRixFQUFPbS9GLEtBQ1Z4aUcsRUFBUyxHQUVWLEdBQUdxRCxFQUFLN1MsT0FBUyxFQUNoQixPQUFPd1AsRUFHUixJQUFJOUosRUFBR3lzRyxFQUFPdC9GLEVBQUtwSCxNQUFNLEtBQ3pCLElBQUsvRixFQUFJLEVBQUdBLEVBQUl5c0csRUFBS255RyxPQUFRMEYsSUFDNUIsR0FBSXlzRyxFQUFLenNHLEdBQVQsQ0FHQSxJQUFJa2xFLEVBQU91bkMsRUFBS3pzRyxHQUFHK0YsTUFBTSxLQUN0Qm0vRCxFQUFLNXFFLE9BQVMsSUFHakJ3UCxFQUFPbzdELEVBQUssSUFBTUEsRUFBSyxJQUV4QixHQUFHNmpCLEVBQVMyakIsWUFBYSxDQUV4QixJQUFJQyxFQUFZN2lHLEVBQU84aUcsSUFFdkIsSUFEQTlpRyxFQUFPOGlHLElBQU0sRUFDVDVzRyxFQUFJLEVBQUdBLEVBQUkrbUcsR0FBT3pzRyxPQUFRMEYsSUFDN0IsR0FBRyttRyxHQUFPL21HLEdBQUc0c0csTUFBUUQsRUFBVyxDQUMvQjdpRyxFQUFPOGlHLElBQU01c0csRUFDYixZQUlGOEosRUFBTzhpRyxJQUFNaCtFLFNBQVM5a0IsRUFBTzhpRyxJQUFJLElBQUksRUFLdEMsT0FISTlpRyxFQUFPOGlHLElBQU0sSUFDaEI5aUcsRUFBTzhpRyxJQUFNLEdBRVA5aUcsR0FFUitpRyxHQUFjLFdBT2IsR0FMR25CLElBQ0YzK0MsYUFBYTIrQyxJQUlYN08sSUFBa0I3RSxFQUdwQjBULEdBQXdCaDRELFdBQVdtNUQsR0FBYSxTQUhqRCxDQU9HbEIsR0FDRjUrQyxhQUFhMCtDLElBRWJFLElBQXVCLEVBSXhCLElBQUlpQixFQUFPL1csRUFBb0IsRUFDM0JuM0YsRUFBT2lnRyxHQUFZOUksR0FDcEJuM0YsRUFBS0ksZUFBZSxTQUV0Qjh0RyxFQUFNbHVHLEVBQUtrdUcsS0FFWixJQUFJRSxFQUFVaEIsV0FBZ0MvaUIsRUFBU3NqQixXQUF6Q1AsUUFBcUVjLEVBRS9FYixLQUNzQyxJQUF0Q0csR0FBVy8rRixLQUFLdXBCLFFBQVFvMkUsS0FDMUJiLElBQWtCLEdBS3BCLElBQUljLEVBQVNiLEdBQVdwaEIsS0FBSy9rRixNQUFNLEtBQUssR0FBSyxJQUFPK21HLEVBRWhEWCxHQUVBLElBQU1XLElBQVlqekcsT0FBT3FULFNBQVNDLE1BQ3BDSCxRQUFRKytGLEdBQWtCLGVBQWlCLGFBQWEsR0FBSTlqRyxTQUFTak8sTUFBTyt5RyxHQUkxRWhCLEdBQ0ZHLEdBQVczdkcsUUFBU3d3RyxHQUVwQmIsR0FBVy8rRixLQUFPMi9GLEVBTXBCZixJQUFrQixFQUNsQk4sR0FBcUIvM0QsWUFBVyxXQUMvQmk0RCxJQUF1QixJQUNyQixNQU9MN1IsR0FBZ0IsVUFBVyxDQUkxQkMsY0FBZSxDQUNkaVQsWUFBYSxXQUlaLEdBRkFobEIsRUFBVXRVLE9BQU9xVixFQUFVcWpCLElBQXdCLEdBRTlDcmpCLEVBQVMvN0UsUUFBZCxDQUtBay9GLEdBQWFyeUcsT0FBT3FULFNBQ3BCKytGLElBQWtCLEVBQ2xCRCxJQUFpQixFQUNqQkQsSUFBa0IsRUFDbEJELEdBQWVRLEtBQ2ZILEdBQXNCLGNBQWVuL0YsUUFHbEM4K0YsR0FBYXAxRSxRQUFRLFNBQVcsSUFFbENvMUUsSUFEQUEsR0FBZUEsR0FBYS9sRyxNQUFNLFNBQVMsSUFDZkEsTUFBTSxTQUFTLElBSTVDMmlGLEdBQVEsY0FBZTU5QyxFQUFLbWlFLFdBQzVCdmtCLEdBQVEsZ0JBQWdCLFdBQ3ZCVixFQUFVMXhELE9BQU96OEIsT0FBUSxhQUFjaXhDLEVBQUtvaUUsaUJBSTdDLElBQUlDLEVBQW1CLFdBQ3RCdEIsSUFBZSxFQUNYRyxLQUVBQyxHQUNGai9GLFFBQVFvZ0csT0FHTHRCLEdBQ0ZJLEdBQVcvK0YsS0FBTzIrRixHQUVkSyxHQUdIbi9GLFFBQVFDLFVBQVUsR0FBSWhGLFNBQVNqTyxNQUFRa3lHLEdBQVdtQixTQUFXbkIsR0FBV3J1RSxRQUV4RXF1RSxHQUFXLytGLEtBQU8sSUFPdEJvL0YsTUFJRDdqQixHQUFRLGdCQUFnQixXQUNwQmtOLEdBR0Z1WCxPQUdGemtCLEdBQVEsV0FBVyxXQUNkbWpCLElBQ0hzQixPQUdGemtCLEdBQVEsZUFBZSxXQUN0Qm1OLEVBQW9CMlcsS0FBeUJJLE9BTTlDLElBQUk1ekYsRUFBUTh5RixHQUFhcDFFLFFBQVEsUUFDOUIxZCxHQUFTLEdBRW1CLE9BRDlCOHlGLEdBQWVBLEdBQWFodUUsVUFBVSxFQUFHOWtCLElBQ3pCeFksT0FBTyxLQUN0QnNyRyxHQUFlQSxHQUFhdHJHLE1BQU0sR0FBSSxJQUt4Q2t6QyxZQUFXLFdBQ1BnaUQsR0FDRjFOLEVBQVUxb0YsS0FBS3pGLE9BQVEsYUFBY2l4QyxFQUFLb2lFLGdCQUV6QyxNQUdKQSxhQUFjLFdBRWIsR0FBR1osT0FBZVIsR0FJakIsT0FGQUUsSUFBaUIsT0FDakJsaEUsRUFBS3dGLFFBR0ZxN0QsS0FFSEMsSUFBd0IsRUFDeEI5Z0UsRUFBS3UwRCxLQUFNbU4sS0FBeUJJLEtBQ3BDaEIsSUFBd0IsSUFJMUJxQixVQUFXLFdBS1ZWLEtBR0dYLEtBSUNHLEdBR0hQLEdBQXdCOTNELFdBQVdtNUQsR0FBYSxLQUZoREEsVUFXSDdrQixFQUFVdFUsT0FBTzVvQyxFQUFNaXZELE9BOW9IUixtQyxnQkNJaEIsSUFBSXQ3QyxFQUFJLFdBQWMsT0FBT2xrRCxLQUFyQixJQUFrQ3N2QyxTQUFTLGNBQVRBLEdBSXRDeWpFLEVBQWE3dUQsRUFBRTh1RCxvQkFDakIzdUcsT0FBTzA3QyxvQkFBb0JtRSxHQUFHL25CLFFBQVEsdUJBQXlCLEVBRzdEODJFLEVBQWFGLEdBQWM3dUQsRUFBRTh1RCxtQkFPakMsR0FKQTl1RCxFQUFFOHVELHdCQUFxQjN6RyxFQUV2Qis4QixFQUFPQyxRQUFVLEVBQWpCLE9BRUkwMkUsRUFFRjd1RCxFQUFFOHVELG1CQUFxQkMsT0FHdkIsV0FDUy91RCxFQUFFOHVELG1CQUNULE1BQU1odUcsR0FDTmsvQyxFQUFFOHVELHdCQUFxQjN6RyxJLFdDekIxQixTQUFVK3VDLEdBQ1QsYUFFQSxJQUVJL3VDLEVBRkE2ekcsRUFBSzd1RyxPQUFPQyxVQUNaNnVHLEVBQVNELEVBQUczdUcsZUFFWjZ1RyxFQUE0QixtQkFBWHIrRCxPQUF3QkEsT0FBUyxHQUNsRHMrRCxFQUFpQkQsRUFBUWpqRSxVQUFZLGFBQ3JDbWpFLEVBQXNCRixFQUFRRyxlQUFpQixrQkFDL0NDLEVBQW9CSixFQUFRL2dELGFBQWUsZ0JBRzNDb2hELEVBQVVybEUsRUFBTzRrRSxtQkFDckIsR0FBSVMsRUFJQXIzRSxFQUFPQyxRQUFVbzNFLE1BSnJCLEVBYUFBLEVBQVVybEUsRUFBTzRrRSxtQkFBZ0M1MkUsRUFBT0MsU0FjaEQwOEMsS0FBT0EsRUFvQmYsSUFBSTI2QixFQUF5QixpQkFDekJDLEVBQXlCLGlCQUN6QkMsRUFBb0IsWUFDcEJDLEVBQW9CLFlBSXBCQyxFQUFtQixHQVluQjdpRSxFQUFvQixHQUN4QkEsRUFBa0JvaUUsR0FBa0IsV0FDbEMsT0FBT3J6RyxNQUdULElBQUkrekcsRUFBVzF2RyxPQUFPaXRDLGVBQ2xCMGlFLEVBQTBCRCxHQUFZQSxFQUFTQSxFQUFTN3NHLEVBQU8sTUFDL0Q4c0csR0FDQUEsSUFBNEJkLEdBQzVCQyxFQUFPM3VHLEtBQUt3dkcsRUFBeUJYLEtBR3ZDcGlFLEVBQW9CK2lFLEdBR3RCLElBQUlDLEVBQUtDLEVBQTJCNXZHLFVBQ2xDNnZHLEVBQVU3dkcsVUFBWUQsT0FBT29vQyxPQUFPd0UsR0FDdENtakUsRUFBa0I5dkcsVUFBWTJ2RyxFQUFHdnlFLFlBQWN3eUUsRUFDL0NBLEVBQTJCeHlFLFlBQWMweUUsRUFDekNGLEVBQTJCVixHQUN6QlksRUFBa0JDLFlBQWMsb0JBWWxDWixFQUFRYSxvQkFBc0IsU0FBU0MsR0FDckMsSUFBSUMsRUFBeUIsbUJBQVhELEdBQXlCQSxFQUFPN3lFLFlBQ2xELFFBQU84eUUsSUFDSEEsSUFBU0osR0FHMkIsdUJBQW5DSSxFQUFLSCxhQUFlRyxFQUFLN3NHLFFBSWhDOHJHLEVBQVFnQixLQUFPLFNBQVNGLEdBVXRCLE9BVElsd0csT0FBT3F3RyxlQUNUcndHLE9BQU9xd0csZUFBZUgsRUFBUUwsSUFFOUJLLEVBQU9JLFVBQVlULEVBQ2JWLEtBQXFCZSxJQUN6QkEsRUFBT2YsR0FBcUIsc0JBR2hDZSxFQUFPandHLFVBQVlELE9BQU9vb0MsT0FBT3duRSxHQUMxQk0sR0FPVGQsRUFBUW1CLE1BQVEsU0FBUzUzRSxHQUN2QixNQUFPLENBQUU2M0UsUUFBUzczRSxJQThFcEI4M0UsRUFBc0JDLEVBQWN6d0csV0FDcEN5d0csRUFBY3p3RyxVQUFVZ3ZHLEdBQXVCLFdBQzdDLE9BQU90ekcsTUFFVHl6RyxFQUFRc0IsY0FBZ0JBLEVBS3hCdEIsRUFBUXVCLE1BQVEsU0FBU0MsRUFBU0MsRUFBUzNrRSxFQUFNNGtFLEdBQy9DLElBQUl2aUUsRUFBTyxJQUFJbWlFLEVBQ2JoOEIsRUFBS2s4QixFQUFTQyxFQUFTM2tFLEVBQU00a0UsSUFHL0IsT0FBTzFCLEVBQVFhLG9CQUFvQlksR0FDL0J0aUUsRUFDQUEsRUFBS3RDLE9BQU9uaUMsTUFBSyxTQUFTaWlDLEdBQ3hCLE9BQU9BLEVBQU9sVCxLQUFPa1QsRUFBTzFzQyxNQUFRa3ZDLEVBQUt0QyxXQXNLakR3a0UsRUFBc0JiLEdBRXRCQSxFQUFHVCxHQUFxQixZQU94QlMsRUFBR1osR0FBa0IsV0FDbkIsT0FBT3J6RyxNQUdUaTBHLEVBQUc3dEcsU0FBVyxXQUNaLE1BQU8sc0JBa0NUcXRHLEVBQVE3dEcsS0FBTyxTQUFTb0gsR0FDdEIsSUFBSXBILEVBQU8sR0FDWCxJQUFLLElBQUlNLEtBQU84RyxFQUNkcEgsRUFBS3RGLEtBQUs0RixHQU1aLE9BSkFOLEVBQUs2Z0MsVUFJRSxTQUFTNkosSUFDZCxLQUFPMXFDLEVBQUs3RixRQUFRLENBQ2xCLElBQUltRyxFQUFNTixFQUFLcStCLE1BQ2YsR0FBSS85QixLQUFPOEcsRUFHVCxPQUZBc2pDLEVBQUs1c0MsTUFBUXdDLEVBQ2JvcUMsRUFBS3BULE1BQU8sRUFDTG9ULEVBUVgsT0FEQUEsRUFBS3BULE1BQU8sRUFDTG9ULElBc0NYbWpFLEVBQVF2c0csT0FBU0EsRUFNakJrdUcsRUFBUTl3RyxVQUFZLENBQ2xCbzlCLFlBQWEwekUsRUFFYkMsTUFBTyxTQUFTQyxHQWNkLEdBYkF0MUcsS0FBSzR6RixLQUFPLEVBQ1o1ekYsS0FBS3N3QyxLQUFPLEVBR1p0d0MsS0FBS3UxRyxLQUFPdjFHLEtBQUt3MUcsTUFBUW4yRyxFQUN6QlcsS0FBS2s5QixNQUFPLEVBQ1psOUIsS0FBS3kxRyxTQUFXLEtBRWhCejFHLEtBQUt1NUIsT0FBUyxPQUNkdjVCLEtBQUtnOUIsSUFBTTM5QixFQUVYVyxLQUFLMDFHLFdBQVdud0csUUFBUW93RyxJQUVuQkwsRUFDSCxJQUFLLElBQUkzdEcsS0FBUTNILEtBRVEsTUFBbkIySCxFQUFLKzRCLE9BQU8sSUFDWnl5RSxFQUFPM3VHLEtBQUt4RSxLQUFNMkgsS0FDakI2akIsT0FBTzdqQixFQUFLMUIsTUFBTSxNQUNyQmpHLEtBQUsySCxHQUFRdEksSUFNckJ1MkcsS0FBTSxXQUNKNTFHLEtBQUtrOUIsTUFBTyxFQUVaLElBQ0kyNEUsRUFEWTcxRyxLQUFLMDFHLFdBQVcsR0FDTEksV0FDM0IsR0FBd0IsVUFBcEJELEVBQVc1MkcsS0FDYixNQUFNNDJHLEVBQVc3NEUsSUFHbkIsT0FBT2g5QixLQUFLKzFHLE1BR2RDLGtCQUFtQixTQUFTQyxHQUMxQixHQUFJajJHLEtBQUtrOUIsS0FDUCxNQUFNKzRFLEVBR1IsSUFBSTd6RCxFQUFVcGlELEtBQ2QsU0FBU2syRyxFQUFPQyxFQUFLQyxHQVluQixPQVhBQyxFQUFPcDNHLEtBQU8sUUFDZG8zRyxFQUFPcjVFLElBQU1pNUUsRUFDYjd6RCxFQUFROVIsS0FBTzZsRSxFQUVYQyxJQUdGaDBELEVBQVE3b0IsT0FBUyxPQUNqQjZvQixFQUFRcGxCLElBQU0zOUIsS0FHTisyRyxFQUdaLElBQUssSUFBSTN3RyxFQUFJekYsS0FBSzAxRyxXQUFXMzFHLE9BQVMsRUFBRzBGLEdBQUssSUFBS0EsRUFBRyxDQUNwRCxJQUFJbXdELEVBQVE1MUQsS0FBSzAxRyxXQUFXandHLEdBQ3hCNHdHLEVBQVN6Z0QsRUFBTWtnRCxXQUVuQixHQUFxQixTQUFqQmxnRCxFQUFNMGdELE9BSVIsT0FBT0osRUFBTyxPQUdoQixHQUFJdGdELEVBQU0wZ0QsUUFBVXQyRyxLQUFLNHpGLEtBQU0sQ0FDN0IsSUFBSTJpQixFQUFXcEQsRUFBTzN1RyxLQUFLb3hELEVBQU8sWUFDOUI0Z0QsRUFBYXJELEVBQU8zdUcsS0FBS294RCxFQUFPLGNBRXBDLEdBQUkyZ0QsR0FBWUMsRUFBWSxDQUMxQixHQUFJeDJHLEtBQUs0ekYsS0FBT2grQixFQUFNNmdELFNBQ3BCLE9BQU9QLEVBQU90Z0QsRUFBTTZnRCxVQUFVLEdBQ3pCLEdBQUl6MkcsS0FBSzR6RixLQUFPaCtCLEVBQU04Z0QsV0FDM0IsT0FBT1IsRUFBT3RnRCxFQUFNOGdELGlCQUdqQixHQUFJSCxHQUNULEdBQUl2MkcsS0FBSzR6RixLQUFPaCtCLEVBQU02Z0QsU0FDcEIsT0FBT1AsRUFBT3RnRCxFQUFNNmdELFVBQVUsT0FHM0IsS0FBSUQsRUFNVCxNQUFNLElBQUluMkUsTUFBTSwwQ0FMaEIsR0FBSXJnQyxLQUFLNHpGLEtBQU9oK0IsRUFBTThnRCxXQUNwQixPQUFPUixFQUFPdGdELEVBQU04Z0QsZ0JBVTlCQyxPQUFRLFNBQVMxM0csRUFBTSs5QixHQUNyQixJQUFLLElBQUl2M0IsRUFBSXpGLEtBQUswMUcsV0FBVzMxRyxPQUFTLEVBQUcwRixHQUFLLElBQUtBLEVBQUcsQ0FDcEQsSUFBSW13RCxFQUFRNTFELEtBQUswMUcsV0FBV2p3RyxHQUM1QixHQUFJbXdELEVBQU0wZ0QsUUFBVXQyRyxLQUFLNHpGLE1BQ3JCdWYsRUFBTzN1RyxLQUFLb3hELEVBQU8sZUFDbkI1MUQsS0FBSzR6RixLQUFPaCtCLEVBQU04Z0QsV0FBWSxDQUNoQyxJQUFJRSxFQUFlaGhELEVBQ25CLE9BSUFnaEQsSUFDVSxVQUFUMzNHLEdBQ1MsYUFBVEEsSUFDRDIzRyxFQUFhTixRQUFVdDVFLEdBQ3ZCQSxHQUFPNDVFLEVBQWFGLGFBR3RCRSxFQUFlLE1BR2pCLElBQUlQLEVBQVNPLEVBQWVBLEVBQWFkLFdBQWEsR0FJdEQsT0FIQU8sRUFBT3AzRyxLQUFPQSxFQUNkbzNHLEVBQU9yNUUsSUFBTUEsRUFFVDQ1RSxHQUNGNTJHLEtBQUt1NUIsT0FBUyxPQUNkdjVCLEtBQUtzd0MsS0FBT3NtRSxFQUFhRixXQUNsQjVDLEdBR0Y5ekcsS0FBSzYyRyxTQUFTUixJQUd2QlEsU0FBVSxTQUFTUixFQUFRUyxHQUN6QixHQUFvQixVQUFoQlQsRUFBT3AzRyxLQUNULE1BQU1vM0csRUFBT3I1RSxJQWNmLE1BWG9CLFVBQWhCcTVFLEVBQU9wM0csTUFDUyxhQUFoQm8zRyxFQUFPcDNHLEtBQ1RlLEtBQUtzd0MsS0FBTytsRSxFQUFPcjVFLElBQ00sV0FBaEJxNUUsRUFBT3AzRyxNQUNoQmUsS0FBSysxRyxLQUFPLzFHLEtBQUtnOUIsSUFBTXE1RSxFQUFPcjVFLElBQzlCaDlCLEtBQUt1NUIsT0FBUyxTQUNkdjVCLEtBQUtzd0MsS0FBTyxPQUNhLFdBQWhCK2xFLEVBQU9wM0csTUFBcUI2M0csSUFDckM5MkcsS0FBS3N3QyxLQUFPd21FLEdBR1BoRCxHQUdUaUQsT0FBUSxTQUFTTCxHQUNmLElBQUssSUFBSWp4RyxFQUFJekYsS0FBSzAxRyxXQUFXMzFHLE9BQVMsRUFBRzBGLEdBQUssSUFBS0EsRUFBRyxDQUNwRCxJQUFJbXdELEVBQVE1MUQsS0FBSzAxRyxXQUFXandHLEdBQzVCLEdBQUltd0QsRUFBTThnRCxhQUFlQSxFQUd2QixPQUZBMTJHLEtBQUs2MkcsU0FBU2poRCxFQUFNa2dELFdBQVlsZ0QsRUFBTWtoRCxVQUN0Q25CLEVBQWMvL0MsR0FDUGsrQyxJQUtiLE1BQVMsU0FBU3dDLEdBQ2hCLElBQUssSUFBSTd3RyxFQUFJekYsS0FBSzAxRyxXQUFXMzFHLE9BQVMsRUFBRzBGLEdBQUssSUFBS0EsRUFBRyxDQUNwRCxJQUFJbXdELEVBQVE1MUQsS0FBSzAxRyxXQUFXandHLEdBQzVCLEdBQUltd0QsRUFBTTBnRCxTQUFXQSxFQUFRLENBQzNCLElBQUlELEVBQVN6Z0QsRUFBTWtnRCxXQUNuQixHQUFvQixVQUFoQk8sRUFBT3AzRyxLQUFrQixDQUMzQixJQUFJKzNHLEVBQVNYLEVBQU9yNUUsSUFDcEIyNEUsRUFBYy8vQyxHQUVoQixPQUFPb2hELEdBTVgsTUFBTSxJQUFJMzJFLE1BQU0sMEJBR2xCNDJFLGNBQWUsU0FBU2puRSxFQUFVa25FLEVBQVlDLEdBYTVDLE9BWkFuM0csS0FBS3kxRyxTQUFXLENBQ2R0bEUsU0FBVWpwQyxFQUFPOG9DLEdBQ2pCa25FLFdBQVlBLEVBQ1pDLFFBQVNBLEdBR1MsU0FBaEJuM0csS0FBS3U1QixTQUdQdjVCLEtBQUtnOUIsSUFBTTM5QixHQUdOeTBHLElBM3FCWCxTQUFTLzZCLEVBQUtrOEIsRUFBU0MsRUFBUzNrRSxFQUFNNGtFLEdBRXBDLElBQUlpQyxFQUFpQmxDLEdBQVdBLEVBQVE1d0cscUJBQXFCNnZHLEVBQVllLEVBQVVmLEVBQy9Fa0QsRUFBWWh6RyxPQUFPb29DLE9BQU8ycUUsRUFBZTl5RyxXQUN6Qzg5QyxFQUFVLElBQUlnekQsRUFBUUQsR0FBZSxJQU16QyxPQUZBa0MsRUFBVUMsUUEwTVosU0FBMEJyQyxFQUFTMWtFLEVBQU02UixHQUN2QyxJQUFJYixFQUFRbXlELEVBRVosT0FBTyxTQUFnQm42RSxFQUFReUQsR0FDN0IsR0FBSXVrQixJQUFVcXlELEVBQ1osTUFBTSxJQUFJdnpFLE1BQU0sZ0NBR2xCLEdBQUlraEIsSUFBVXN5RCxFQUFtQixDQUMvQixHQUFlLFVBQVh0NkUsRUFDRixNQUFNeUQsRUFLUixPQUFPdTZFLElBTVQsSUFIQW4xRCxFQUFRN29CLE9BQVNBLEVBQ2pCNm9CLEVBQVFwbEIsSUFBTUEsSUFFRCxDQUNYLElBQUl5NEUsRUFBV3J6RCxFQUFRcXpELFNBQ3ZCLEdBQUlBLEVBQVUsQ0FDWixJQUFJK0IsRUFBaUJDLEVBQW9CaEMsRUFBVXJ6RCxHQUNuRCxHQUFJbzFELEVBQWdCLENBQ2xCLEdBQUlBLElBQW1CMUQsRUFBa0IsU0FDekMsT0FBTzBELEdBSVgsR0FBdUIsU0FBbkJwMUQsRUFBUTdvQixPQUdWNm9CLEVBQVFtekQsS0FBT256RCxFQUFRb3pELE1BQVFwekQsRUFBUXBsQixTQUVsQyxHQUF1QixVQUFuQm9sQixFQUFRN29CLE9BQW9CLENBQ3JDLEdBQUlnb0IsSUFBVW15RCxFQUVaLE1BREFueUQsRUFBUXN5RCxFQUNGenhELEVBQVFwbEIsSUFHaEJvbEIsRUFBUTR6RCxrQkFBa0I1ekQsRUFBUXBsQixTQUVOLFdBQW5Cb2xCLEVBQVE3b0IsUUFDakI2b0IsRUFBUXUwRCxPQUFPLFNBQVV2MEQsRUFBUXBsQixLQUduQ3VrQixFQUFRcXlELEVBRVIsSUFBSXlDLEVBQVNxQixFQUFTekMsRUFBUzFrRSxFQUFNNlIsR0FDckMsR0FBb0IsV0FBaEJpMEQsRUFBT3AzRyxLQUFtQixDQU81QixHQUpBc2lELEVBQVFhLEVBQVFsbEIsS0FDWjIyRSxFQUNBRixFQUVBMEMsRUFBT3I1RSxNQUFRODJFLEVBQ2pCLFNBR0YsTUFBTyxDQUNMcHdHLE1BQU8yeUcsRUFBT3I1RSxJQUNkRSxLQUFNa2xCLEVBQVFsbEIsTUFHUyxVQUFoQm01RSxFQUFPcDNHLE9BQ2hCc2lELEVBQVFzeUQsRUFHUnp4RCxFQUFRN29CLE9BQVMsUUFDakI2b0IsRUFBUXBsQixJQUFNcTVFLEVBQU9yNUUsT0FsUlAyNkUsQ0FBaUIxQyxFQUFTMWtFLEVBQU02UixHQUU3Q2kxRCxFQWNULFNBQVNLLEVBQVNqN0UsRUFBSTkyQixFQUFLcTNCLEdBQ3pCLElBQ0UsTUFBTyxDQUFFLzlCLEtBQU0sU0FBVSs5QixJQUFLUCxFQUFHajRCLEtBQUttQixFQUFLcTNCLElBQzNDLE1BQU9HLEdBQ1AsTUFBTyxDQUFFbCtCLEtBQU0sUUFBUys5QixJQUFLRyxJQWlCakMsU0FBU2czRSxLQUNULFNBQVNDLEtBQ1QsU0FBU0YsS0E0QlQsU0FBU1ksRUFBc0J4d0csR0FDN0IsQ0FBQyxPQUFRLFFBQVMsVUFBVWlCLFNBQVEsU0FBU2cwQixHQUMzQ2oxQixFQUFVaTFCLEdBQVUsU0FBU3lELEdBQzNCLE9BQU9oOUIsS0FBS3MzRyxRQUFRLzlFLEVBQVF5RCxPQW9DbEMsU0FBUyszRSxFQUFjc0MsR0FDckIsU0FBU3IvRCxFQUFPemUsRUFBUXlELEVBQUtILEVBQVNDLEdBQ3BDLElBQUl1NUUsRUFBU3FCLEVBQVNMLEVBQVU5OUUsR0FBUzg5RSxFQUFXcjZFLEdBQ3BELEdBQW9CLFVBQWhCcTVFLEVBQU9wM0csS0FFSixDQUNMLElBQUlteEMsRUFBU2ltRSxFQUFPcjVFLElBQ2hCdDVCLEVBQVEwc0MsRUFBTzFzQyxNQUNuQixPQUFJQSxHQUNpQixpQkFBVkEsR0FDUHl2RyxFQUFPM3VHLEtBQUtkLEVBQU8sV0FDZHd2QyxRQUFRclcsUUFBUW41QixFQUFNbXhHLFNBQVMxbUcsTUFBSyxTQUFTekssR0FDbERzMEMsRUFBTyxPQUFRdDBDLEVBQU9tNUIsRUFBU0MsTUFDOUIsU0FBU0ssR0FDVjZhLEVBQU8sUUFBUzdhLEVBQUtOLEVBQVNDLE1BSTNCb1csUUFBUXJXLFFBQVFuNUIsR0FBT3lLLE1BQUssU0FBU3lwRyxHQWdCMUN4bkUsRUFBTzFzQyxNQUFRazBHLEVBQ2YvNkUsRUFBUXVULEtBQ1B0VCxHQWhDSEEsRUFBT3U1RSxFQUFPcjVFLEtBb0NsQixJQUFJNjZFLEVBZ0NKNzNHLEtBQUtzM0csUUE5QkwsU0FBaUIvOUUsRUFBUXlELEdBQ3ZCLFNBQVM4NkUsSUFDUCxPQUFPLElBQUk1a0UsU0FBUSxTQUFTclcsRUFBU0MsR0FDbkNrYixFQUFPemUsRUFBUXlELEVBQUtILEVBQVNDLE1BSWpDLE9BQU8rNkUsRUFhTEEsRUFBa0JBLEVBQWdCMXBHLEtBQ2hDMnBHLEVBR0FBLEdBQ0VBLEtBK0dWLFNBQVNMLEVBQW9CaEMsRUFBVXJ6RCxHQUNyQyxJQUFJN29CLEVBQVNrOEUsRUFBU3RsRSxTQUFTaVMsRUFBUTdvQixRQUN2QyxHQUFJQSxJQUFXbDZCLEVBQVcsQ0FLeEIsR0FGQStpRCxFQUFRcXpELFNBQVcsS0FFSSxVQUFuQnJ6RCxFQUFRN29CLE9BQW9CLENBQzlCLEdBQUlrOEUsRUFBU3RsRSxTQUFTNG5FLFNBR3BCMzFELEVBQVE3b0IsT0FBUyxTQUNqQjZvQixFQUFRcGxCLElBQU0zOUIsRUFDZG80RyxFQUFvQmhDLEVBQVVyekQsR0FFUCxVQUFuQkEsRUFBUTdvQixRQUdWLE9BQU91NkUsRUFJWDF4RCxFQUFRN29CLE9BQVMsUUFDakI2b0IsRUFBUXBsQixJQUFNLElBQUlLLFVBQ2hCLGtEQUdKLE9BQU95MkUsRUFHVCxJQUFJdUMsRUFBU3FCLEVBQVNuK0UsRUFBUWs4RSxFQUFTdGxFLFNBQVVpUyxFQUFRcGxCLEtBRXpELEdBQW9CLFVBQWhCcTVFLEVBQU9wM0csS0FJVCxPQUhBbWpELEVBQVE3b0IsT0FBUyxRQUNqQjZvQixFQUFRcGxCLElBQU1xNUUsRUFBT3I1RSxJQUNyQm9sQixFQUFRcXpELFNBQVcsS0FDWjNCLEVBR1QsSUFBSTcyRSxFQUFPbzVFLEVBQU9yNUUsSUFFbEIsT0FBTUMsRUFPRkEsRUFBS0MsTUFHUGtsQixFQUFRcXpELEVBQVN5QixZQUFjajZFLEVBQUt2NUIsTUFHcEMwK0MsRUFBUTlSLEtBQU9tbEUsRUFBUzBCLFFBUUQsV0FBbkIvMEQsRUFBUTdvQixTQUNWNm9CLEVBQVE3b0IsT0FBUyxPQUNqQjZvQixFQUFRcGxCLElBQU0zOUIsR0FVbEIraUQsRUFBUXF6RCxTQUFXLEtBQ1ozQixHQU5FNzJFLEdBM0JQbWxCLEVBQVE3b0IsT0FBUyxRQUNqQjZvQixFQUFRcGxCLElBQU0sSUFBSUssVUFBVSxvQ0FDNUIra0IsRUFBUXF6RCxTQUFXLEtBQ1ozQixHQW9EWCxTQUFTa0UsRUFBYUMsR0FDcEIsSUFBSXJpRCxFQUFRLENBQUUwZ0QsT0FBUTJCLEVBQUssSUFFdkIsS0FBS0EsSUFDUHJpRCxFQUFNNmdELFNBQVd3QixFQUFLLElBR3BCLEtBQUtBLElBQ1ByaUQsRUFBTThnRCxXQUFhdUIsRUFBSyxHQUN4QnJpRCxFQUFNa2hELFNBQVdtQixFQUFLLElBR3hCajRHLEtBQUswMUcsV0FBV3AxRyxLQUFLczFELEdBR3ZCLFNBQVMrL0MsRUFBYy8vQyxHQUNyQixJQUFJeWdELEVBQVN6Z0QsRUFBTWtnRCxZQUFjLEdBQ2pDTyxFQUFPcDNHLEtBQU8sZ0JBQ1BvM0csRUFBT3I1RSxJQUNkNDRCLEVBQU1rZ0QsV0FBYU8sRUFHckIsU0FBU2pCLEVBQVFELEdBSWZuMUcsS0FBSzAxRyxXQUFhLENBQUMsQ0FBRVksT0FBUSxTQUM3Qm5CLEVBQVk1dkcsUUFBUXl5RyxFQUFjaDRHLE1BQ2xDQSxLQUFLcTFHLE9BQU0sR0E4QmIsU0FBU251RyxFQUFPOG9DLEdBQ2QsR0FBSUEsRUFBVSxDQUNaLElBQUlrb0UsRUFBaUJsb0UsRUFBU3FqRSxHQUM5QixHQUFJNkUsRUFDRixPQUFPQSxFQUFlMXpHLEtBQUt3ckMsR0FHN0IsR0FBNkIsbUJBQWxCQSxFQUFTTSxLQUNsQixPQUFPTixFQUdULElBQUt4a0IsTUFBTXdrQixFQUFTandDLFFBQVMsQ0FDM0IsSUFBSTBGLEdBQUssRUFBRzZxQyxFQUFPLFNBQVNBLElBQzFCLE9BQVM3cUMsRUFBSXVxQyxFQUFTandDLFFBQ3BCLEdBQUlvekcsRUFBTzN1RyxLQUFLd3JDLEVBQVV2cUMsR0FHeEIsT0FGQTZxQyxFQUFLNXNDLE1BQVFzc0MsRUFBU3ZxQyxHQUN0QjZxQyxFQUFLcFQsTUFBTyxFQUNMb1QsRUFPWCxPQUhBQSxFQUFLNXNDLE1BQVFyRSxFQUNiaXhDLEVBQUtwVCxNQUFPLEVBRUxvVCxHQUdULE9BQU9BLEVBQUtBLEtBQU9BLEdBS3ZCLE1BQU8sQ0FBRUEsS0FBTWluRSxHQUlqQixTQUFTQSxJQUNQLE1BQU8sQ0FBRTd6RyxNQUFPckUsRUFBVzY5QixNQUFNLElBaGdCcEMsQ0E4c0JDLFdBQWMsT0FBT2w5QixLQUFyQixJQUFrQ3N2QyxTQUFTLGNBQVRBLEssc0JDcnRCcEMsUUFNVWdjLElBVVB0ckQsS0FSSyxFQUFxQixDQUFFLGVBRXRCLEtBRmtDLEVBQUYsU0FBV200RyxHQUN4QyxPQUFPN3NELEVBQWlCLFlBT2xCL3JELEVBUDhCNDRHLEVBUXhDcHlHLEVBQUksV0FDSixhQUNBLE1BQU8sQ0FDSHF5RyxPQUFRLFdBQ0osUUFBTyxrQkFBa0IvMEUsS0FBS3dRLFVBQVV5RixZQUFhekYsVUFBVXlGLFVBQVUvOEIsTUFBTSw0QkFBNEIsSUFFL0c4N0YsY0FBZSxTQUFTNTNFLEdBQ3BCLE9BQVFBLEdBQU8sUUFBUTRDLEtBQUs1QyxJQUVoQzYzRSxpQkFBa0IsU0FBUzczRSxHQUN2QixPQUFPQSxFQUFJeitCLFFBQVEsc0NBQXVDLFNBRTlEd3ZFLFNBQVUsU0FBUzdyRSxHQUNmLE1BQXNCLGlCQUFSQSxHQUVsQjRyRSxTQUFVLFNBQVM1ckUsR0FDZixNQUFzQixpQkFBUkEsR0FFbEJLLFFBQVN6RyxFQUFFeUcsUUFDWDIzQyxXQUFZcCtDLEVBQUVvK0MsV0FDZDdRLFNBQVV2dEMsRUFBRXdoRSxjQUNaZ2EsWUFBYSxTQUFTcDFFLEdBQ2xCLFlBQXNCLElBQVJBLEdBRWxCMjBFLFVBQVcsU0FBUzMwRSxHQUNoQixTQUFVQSxHQUF3QixJQUFqQkEsRUFBSTZsRCxXQUV6QitzRCxTQUFVLFNBQVM1eUcsR0FDZixPQUFPQSxhQUFlcEcsR0FFMUJpNUcsTUFBTyxTQUFlcDVFLEdBQ2xCLE9BQU9yNUIsRUFBRWcxRSxZQUFZMzdDLElBQVksT0FBTkEsRUFBYSxHQUFLQSxFQUFJLElBRXJEcjZCLEtBQU14RixFQUFFazVHLE1BQ1JyeEcsS0FBTSxTQUFTaW5ELEVBQVlxcUQsR0FDdkJuNUcsRUFBRTZILEtBQUtpbkQsR0FDUCxTQUFxQjV2QyxFQUFPL2EsR0FDeEIsT0FBT2cxRyxFQUFHaDFHLEVBQU8rYSxPQUd6QmdWLElBQUtsMEIsRUFBRWswQixJQUNQZ0ksT0FBUWw4QixFQUFFbzVHLEtBQ1YvK0IsTUFBTyxTQUFTajBFLEVBQUswOUIsR0FDakIsSUFBSStNLEdBQVMsRUFDYixPQUFLenFDLEdBR0xwRyxFQUFFNkgsS0FBS3pCLEdBQUssU0FBU08sRUFBSzlELEdBQ3RCLEtBQU1ndUMsRUFBUy9NLEVBQUs3K0IsS0FBSyxLQUFNcEMsRUFBSzhELEVBQUtQLElBQ3JDLE9BQU8sT0FHTnlxQyxHQVBFQSxHQVNmbXNDLEtBQU0sU0FBUzUyRSxFQUFLMDlCLEdBQ2hCLElBQUkrTSxHQUFTLEVBQ2IsT0FBS3pxQyxHQUdMcEcsRUFBRTZILEtBQUt6QixHQUFLLFNBQVNPLEVBQUs5RCxHQUN0QixHQUFJZ3VDLEVBQVMvTSxFQUFLNytCLEtBQUssS0FBTXBDLEVBQUs4RCxFQUFLUCxHQUNuQyxPQUFPLE9BR055cUMsR0FQRUEsR0FTZmlrQyxNQUFPOTBFLEVBQUU0NUUsT0FDVHhaLFNBQVUsU0FBU2pnQyxHQUNmLE9BQU9BLEdBRVhuUixNQUFPLFNBQVM1b0IsR0FDWixPQUFPcEcsRUFBRTQ1RSxRQUFPLEVBQU0sR0FBSXh6RSxJQUU5Qml6RyxlQUFnQixXQUNaLElBQUlwZ0UsRUFBVSxFQUNkLE9BQU8sV0FDSCxPQUFPQSxNQUdmcWdFLFdBQVksU0FBb0JsekcsR0FDNUIsT0FBT3BHLEVBQUVvK0MsV0FBV2g0QyxHQUFPQSxFQUMzQixXQUNJLE9BQU8yNkIsT0FBTzM2QixLQUd0Qmt5QyxNQUFPLFNBQVNwYixHQUNaMGMsV0FBVzFjLEVBQUksSUFFbkI5d0IsU0FBVSxTQUFTZ2hELEVBQU15TixFQUFNMCtDLEdBQzNCLElBQUlDLEVBQVMzb0UsRUFDYixPQUFPLFdBQ0gsSUFBc0M0b0UsRUFBT0MsRUFBekM3MkQsRUFBVXBpRCxLQUFNNkYsRUFBTysyQixVQWEzQixPQVpBbzhFLEVBQVEsV0FDSkQsRUFBVSxLQUNMRCxJQUNEMW9FLEVBQVN1YyxFQUFLaHdCLE1BQU15bEIsRUFBU3Y4QyxLQUdyQ296RyxFQUFVSCxJQUFjQyxFQUN4QnZtRCxhQUFhdW1ELEdBQ2JBLEVBQVU1L0QsV0FBVzYvRCxFQUFPNStDLEdBQ3hCNitDLElBQ0E3b0UsRUFBU3VjLEVBQUtod0IsTUFBTXlsQixFQUFTdjhDLElBRTFCdXFDLElBR2Zpb0MsU0FBVSxTQUFTMXJCLEVBQU15TixHQUNyQixJQUFJaFksRUFBU3Y4QyxFQUFNa3pHLEVBQVMzb0UsRUFBUWl5QixFQUFVMjJDLEVBTzlDLE9BTkEzMkMsRUFBVyxFQUNYMjJDLEVBQVEsV0FDSjMyQyxFQUFXLElBQUlyUixLQUNmK25ELEVBQVUsS0FDVjNvRSxFQUFTdWMsRUFBS2h3QixNQUFNeWxCLEVBQVN2OEMsSUFFMUIsV0FDSCxJQUFJK3lDLEVBQU0sSUFBSW9ZLEtBQVE3VCxFQUFZaWQsR0FBUXhoQixFQUFNeXBCLEdBV2hELE9BVkFqZ0IsRUFBVXBpRCxLQUNWNkYsRUFBTysyQixVQUNIdWdCLEdBQWEsR0FDYnFWLGFBQWF1bUQsR0FDYkEsRUFBVSxLQUNWMTJDLEVBQVd6cEIsRUFDWHhJLEVBQVN1YyxFQUFLaHdCLE1BQU15bEIsRUFBU3Y4QyxJQUNyQmt6RyxJQUNSQSxFQUFVNS9ELFdBQVc2L0QsRUFBTzc3RCxJQUV6Qi9NLElBR2ZpUCxVQUFXLFNBQVNqOUMsR0FDaEIsT0FBTzJELEVBQUV5ckUsU0FBU3B2RSxHQUFPQSxFQUFNd2EsS0FBS3lpQyxVQUFVajlDLElBRWxEd29FLEtBQU0sY0FySU4sR0F3SUo2VCxFQUFVLFNBQ1ZwNUUsRUFBYSxXQUNiLGFBQ0EsTUFBTyxDQUNIQyxRQUFTQSxFQUNUNEMsV0FBWUEsRUFDWnZDLElBQUssQ0FDREwsUUFBUzR6RyxFQUFnQjV6RyxHQUN6QjRDLFdBQVlneEcsRUFBZ0JoeEcsS0FHcEMsU0FBU0EsRUFBV3U0QixHQUVoQixPQURBQSxFQUFNMTZCLEVBQUV5eUcsTUFBTS8zRSxJQUNEQSxFQUFJajFCLE1BQU0sT0FBUyxHQUVwQyxTQUFTbEcsRUFBUW03QixHQUViLE9BREFBLEVBQU0xNkIsRUFBRXl5RyxNQUFNLzNFLElBQ0RBLEVBQUlqMUIsTUFBTSxPQUFTLEdBRXBDLFNBQVMwdEcsRUFBZ0JqMEcsR0FDckIsT0FBTyxTQUFnQlcsR0FFbkIsT0FEQUEsRUFBT0csRUFBRUMsUUFBUUosR0FBUUEsRUFBTyxHQUFHSyxNQUFNekIsS0FBS280QixVQUFXLEdBQ2xELFNBQWtCZ2lCLEdBQ3JCLElBQUl6NUMsRUFBUyxHQUliLE9BSEFZLEVBQUVxQixLQUFLeEIsR0FBTSxTQUFTbzZCLEdBQ2xCNzZCLEVBQVNBLEVBQU9nQixPQUFPbEIsRUFBVWMsRUFBRXl5RyxNQUFNNTVELEVBQUU1ZSxTQUV4Qzc2QixLQTFCTixHQStCYmcwRyxFQUFXLFdBQ1gsYUFDQSxTQUFTQSxFQUFTQyxHQUNkcDVHLEtBQUtvNUcsUUFBVXJ6RyxFQUFFd3JFLFNBQVM2bkMsR0FBV0EsRUFBVSxJQUMvQ3A1RyxLQUFLcTFHLFFBQ0RyMUcsS0FBS281RyxTQUFXLElBQ2hCcDVHLEtBQUtnTCxJQUFNaEwsS0FBSzJLLElBQU1wTCxFQUFFcXJFLE1Ba0NoQyxTQUFTeXVDLElBQ0xyNUcsS0FBS296QyxLQUFPcHpDLEtBQUsrM0UsS0FBTyxLQW9CNUIsU0FBU3VoQyxFQUFLcHpHLEVBQUs5RCxHQUNmcEMsS0FBS2tHLElBQU1BLEVBQ1hsRyxLQUFLb0MsSUFBTUEsRUFDWHBDLEtBQUs0ekYsS0FBTzV6RixLQUFLc3dDLEtBQU8sS0FFNUIsT0F6REF2cUMsRUFBRXN1RSxNQUFNOGtDLEVBQVM3MEcsVUFBVyxDQUN4QjBHLElBQUssU0FBYTlFLEVBQUs5RCxHQUNuQixJQUErQms1QixFQUEzQmkrRSxFQUFXdjVHLEtBQUtrK0MsS0FBSzY1QixLQUNyQi8zRSxLQUFLTixNQUFRTSxLQUFLbzVHLFVBQ2xCcDVHLEtBQUtrK0MsS0FBS3oxQyxPQUFPOHdHLFVBQ1Z2NUcsS0FBSzRTLEtBQUsybUcsRUFBU3J6RyxLQUMxQmxHLEtBQUtOLFNBRUw0N0IsRUFBT3Q3QixLQUFLNFMsS0FBSzFNLEtBQ2pCbzFCLEVBQUtsNUIsSUFBTUEsRUFDWHBDLEtBQUtrK0MsS0FBS3M3RCxZQUFZbCtFLEtBRXRCQSxFQUFPLElBQUlnK0UsRUFBS3B6RyxFQUFLOUQsR0FDckJwQyxLQUFLaytDLEtBQUs3dEMsSUFBSWlyQixHQUNkdDdCLEtBQUs0UyxLQUFLMU0sR0FBT28xQixFQUNqQnQ3QixLQUFLTixTQUdiaUwsSUFBSyxTQUFhekUsR0FDZCxJQUFJbzFCLEVBQU90N0IsS0FBSzRTLEtBQUsxTSxHQUNyQixHQUFJbzFCLEVBRUEsT0FEQXQ3QixLQUFLaytDLEtBQUtzN0QsWUFBWWwrRSxHQUNmQSxFQUFLbDVCLEtBR3BCaXpHLE1BQU8sV0FDSHIxRyxLQUFLTixLQUFPLEVBQ1pNLEtBQUs0UyxLQUFPLEdBQ1o1UyxLQUFLaytDLEtBQU8sSUFBSW03RCxLQU14QnR6RyxFQUFFc3VFLE1BQU1nbEMsRUFBSy8wRyxVQUFXLENBQ3BCK0wsSUFBSyxTQUFhaXJCLEdBQ1Z0N0IsS0FBS296QyxPQUNMOVgsRUFBS2dWLEtBQU90d0MsS0FBS296QyxLQUNqQnB6QyxLQUFLb3pDLEtBQUt3Z0QsS0FBT3Q0RCxHQUVyQnQ3QixLQUFLb3pDLEtBQU85WCxFQUNadDdCLEtBQUsrM0UsS0FBTy8zRSxLQUFLKzNFLE1BQVF6OEMsR0FFN0I3eUIsT0FBUSxTQUFnQjZ5QixHQUNwQkEsRUFBS3M0RCxLQUFPdDRELEVBQUtzNEQsS0FBS3RqRCxLQUFPaFYsRUFBS2dWLEtBQU90d0MsS0FBS296QyxLQUFPOVgsRUFBS2dWLEtBQzFEaFYsRUFBS2dWLEtBQU9oVixFQUFLZ1YsS0FBS3NqRCxLQUFPdDRELEVBQUtzNEQsS0FBTzV6RixLQUFLKzNFLEtBQU96OEMsRUFBS3M0RCxNQUU5RDRsQixZQUFhLFNBQVNsK0UsR0FDbEJ0N0IsS0FBS3lJLE9BQU82eUIsR0FDWnQ3QixLQUFLcVEsSUFBSWlyQixNQVFWNjlFLEVBbEVJLEdBb0VYTSxFQUFvQixXQUNwQixhQUNBLElBQUlDLEVBQ0osS0FDSUEsRUFBZ0JwNkcsT0FBT3E2RyxjQUNUQyxRQUFRLE1BQU8sS0FDN0JGLEVBQWNHLFdBQVcsT0FDM0IsTUFBTzE4RSxHQUNMdThFLEVBQWdCLEtBRXBCLFNBQVNELEVBQWtCSyxFQUFXQyxHQUNsQy81RyxLQUFLdWlDLE9BQVMsQ0FBRSxLQUFNdTNFLEVBQVcsTUFBT3Q1RyxLQUFLLElBQzdDUixLQUFLZzZHLE9BQVMsVUFDZGg2RyxLQUFLaTZHLFdBQWEsSUFBSXBpRyxPQUFPLElBQU05UixFQUFFdXlHLGlCQUFpQnQ0RyxLQUFLdWlDLFNBQzNEdmlDLEtBQUtrNkcsR0FBS0gsR0FBWUwsR0FDckIxNUcsS0FBS2s2RyxJQUFNbDZHLEtBQUttNkcsUUFxRHJCLE9BbkRBcDBHLEVBQUVzdUUsTUFBTW9sQyxFQUFrQm4xRyxVQUFXLENBQ2pDODFHLFFBQVMsU0FBU2wwRyxHQUNkLE9BQU9sRyxLQUFLdWlDLE9BQVNyOEIsR0FFekJtMEcsUUFBUyxTQUFTbjBHLEdBQ2QsT0FBT2xHLEtBQUtvNkcsUUFBUWwwRyxHQUFPbEcsS0FBS2c2RyxRQUVwQ0csTUFBTyxXQUNIbjZHLEtBQUsySyxJQUFNM0ssS0FBS2dMLElBQU1oTCxLQUFLeUksT0FBU3pJLEtBQUtvNUMsTUFBUXA1QyxLQUFLczZHLFVBQVl2MEcsRUFBRTZrRSxNQUV4RTJ2QyxTQUFVLFNBQVNyMEcsRUFBSzlELEdBQ3BCLElBQ0lwQyxLQUFLazZHLEdBQUdOLFFBQVExekcsRUFBSzlELEdBQ3ZCLE1BQU8rNkIsR0FDWSx1QkFBYkEsRUFBSXgxQixPQUNKM0gsS0FBS281QyxRQUNMcDVDLEtBQUttNkcsV0FJakJ4dkcsSUFBSyxTQUFTekUsR0FJVixPQUhJbEcsS0FBS3M2RyxVQUFVcDBHLElBQ2ZsRyxLQUFLeUksT0FBT3ZDLEdBRVRzMEcsRUFBT3g2RyxLQUFLazZHLEdBQUdPLFFBQVF6NkcsS0FBS282RyxRQUFRbDBHLE1BRS9DOEUsSUFBSyxTQUFTOUUsRUFBSzlELEVBQUtzNEcsR0FNcEIsT0FMSTMwRyxFQUFFd3JFLFNBQVNtcEMsR0FDWDE2RyxLQUFLdTZHLFNBQVN2NkcsS0FBS3E2RyxRQUFRbjBHLEdBQU15MEcsRUFBTy9oRSxJQUFROGhFLElBRWhEMTZHLEtBQUtrNkcsR0FBR0wsV0FBVzc1RyxLQUFLcTZHLFFBQVFuMEcsSUFFN0JsRyxLQUFLdTZHLFNBQVN2NkcsS0FBS282RyxRQUFRbDBHLEdBQU15MEcsRUFBT3Y0RyxLQUVuRHFHLE9BQVEsU0FBU3ZDLEdBR2IsT0FGQWxHLEtBQUtrNkcsR0FBR0wsV0FBVzc1RyxLQUFLcTZHLFFBQVFuMEcsSUFDaENsRyxLQUFLazZHLEdBQUdMLFdBQVc3NUcsS0FBS282RyxRQUFRbDBHLElBQ3pCbEcsTUFFWG81QyxNQUFPLFdBQ0gsSUFBSTN6QyxFQUFHRyxFQXFCZixTQUE0QnEwRyxHQUN4QixJQUFJeDBHLEVBQUdTLEVBQUtOLEVBQU8sR0FBSWc3QixFQUFNODRFLEVBQWMzNUcsT0FDM0MsSUFBSzBGLEVBQUksRUFBR0EsRUFBSW03QixFQUFLbjdCLEtBQ1pTLEVBQU13ekcsRUFBY3h6RyxJQUFJVCxJQUFJOFcsTUFBTTA5RixJQUNuQ3IwRyxFQUFLdEYsS0FBSzRGLEVBQUlsRSxRQUFRaTRHLEVBQVksS0FHMUMsT0FBT3IwRyxFQTVCV2cxRyxDQUFtQjU2RyxLQUFLaTZHLFlBQ3RDLElBQUt4MEcsRUFBSUcsRUFBSzdGLE9BQVEwRixLQUNsQnpGLEtBQUt5SSxPQUFPN0MsRUFBS0gsSUFFckIsT0FBT3pGLE1BRVhzNkcsVUFBVyxTQUFTcDBHLEdBQ2hCLElBQUl3MEcsRUFBTUYsRUFBT3g2RyxLQUFLazZHLEdBQUdPLFFBQVF6NkcsS0FBS3E2RyxRQUFRbjBHLEtBQzlDLFNBQU9ILEVBQUV3ckUsU0FBU21wQyxJQUFROWhFLElBQVE4aEUsTUFHbkNqQixFQUNQLFNBQVM3Z0UsSUFDTCxPQUFPLElBQUlvWSxNQUFPbTZCLFVBRXRCLFNBQVN3dkIsRUFBT3Y0RyxHQUNaLE9BQU93YSxLQUFLeWlDLFVBQVV0NUMsRUFBRWcxRSxZQUFZMzRFLEdBQU8sS0FBT0EsR0FFdEQsU0FBU280RyxFQUFPcDRHLEdBQ1osT0FBTzdDLEVBQUVzN0csVUFBVXo0RyxJQTVFSCxHQXdGcEIwNEcsRUFBWSxXQUNaLGFBQ0EsSUFBSUMsRUFBdUIsRUFBR0MsRUFBa0IsR0FBSUMsRUFBcUIsRUFBR0MsRUFBYyxJQUFJL0IsRUFBUyxJQUN2RyxTQUFTMkIsRUFBVWw4RCxHQUNmQSxFQUFJQSxHQUFLLEdBQ1Q1K0MsS0FBS203RyxXQUFZLEVBQ2pCbjdHLEtBQUtvN0csUUFBVSxLQUNmcDdHLEtBQUtxN0csTUFBUXo4RCxFQUFFMDhELFVBQ2Z0N0csS0FBS3U3RyxLQUFPMzhELEVBQUU0OEQsUUFBVTU4RCxFQUFFNDhELFFBQVF4N0csS0FBS3U3RyxNQUFRdjdHLEtBQUt1N0csS0FDcER2N0csS0FBS3k3RyxRQUFxQixJQUFaNzhELEVBQUV0N0MsTUFBa0IsSUFBSTYxRyxFQUFTLEdBQUsrQixFQThEeEQsT0E1REFKLEVBQVVZLHNCQUF3QixTQUErQkMsR0FDN0RWLEVBQXFCVSxHQUV6QmIsRUFBVWMsV0FBYSxXQUNuQlYsRUFBWTdGLFNBRWhCdHZHLEVBQUVzdUUsTUFBTXltQyxFQUFVeDJHLFVBQVcsQ0FDekJ1M0csYUFBYyxTQUFxQmo5RCxHQUUvQixPQURBQSxFQUFJQSxHQUFLLElBQ0EvK0MsSUFBTSsrQyxFQUFFMy9DLEtBQU9NLEVBQUUwOEIsTUFBTTJpQixFQUFFbCtDLE1BQVEsS0FFOUM2NkcsS0FBTSxTQUFTMzhELEVBQUc4NUQsR0FDZCxJQUFpQm9ELEVBQWFDLEVBQTFCdHVHLEVBQU96TixLQWFYLFNBQVNrOUIsRUFBSzgrRSxHQUNWdEQsRUFBRyxLQUFNc0QsR0FDVHZ1RyxFQUFLZ3VHLE9BQU96d0csSUFBSTh3RyxFQUFhRSxHQUVqQyxTQUFTamdFLElBQ0wyOEQsR0FBRyxHQUVQLFNBQVN1RCxJQUNMbEIsV0FDT0MsRUFBZ0JjLEdBQ25CcnVHLEVBQUt5dUcsb0JBQ0x6dUcsRUFBSzh0RyxLQUFLNStFLE1BQU1sdkIsRUFBTUEsRUFBS3l1RyxtQkFDM0J6dUcsRUFBS3l1RyxrQkFBb0IsTUF4QmpDSixFQUFjOTdHLEtBQUs2N0csYUFBYWo5RCxHQUM1QjUrQyxLQUFLbTdHLFdBQWFXLElBQWdCOTdHLEtBQUtvN0csV0FHdkNXLEVBQVFmLEVBQWdCYyxJQUN4QkMsRUFBTTcrRSxLQUFLQSxHQUFNNmUsS0FBS0EsR0FDZmcvRCxFQUF1QkUsR0FDOUJGLElBQ0FDLEVBQWdCYyxHQUFlOTdHLEtBQUtxN0csTUFBTXo4RCxHQUFHMWhCLEtBQUtBLEdBQU02ZSxLQUFLQSxHQUFNa2dFLE9BQU9BLElBRTFFajhHLEtBQUtrOEcsa0JBQW9CLEdBQUdqMkcsTUFBTXpCLEtBQUtvNEIsVUFBVyxLQWtCMURqeUIsSUFBSyxTQUFTaTBDLEVBQUc4NUQsR0FDYixJQUFJc0QsRUFBTUYsRUFDVnBELEVBQUtBLEdBQU1uNUcsRUFBRXFyRSxLQUNiaHNCLEVBQUk3NEMsRUFBRXlyRSxTQUFTNXlCLEdBQUssQ0FDaEIvK0MsSUFBSysrQyxHQUNMQSxHQUFLLEdBQ1RrOUQsRUFBYzk3RyxLQUFLNjdHLGFBQWFqOUQsR0FDaEM1K0MsS0FBS203RyxXQUFZLEVBQ2pCbjdHLEtBQUtvN0csUUFBVVUsR0FDWEUsRUFBT2g4RyxLQUFLeTdHLE9BQU85d0csSUFBSW14RyxJQUN2QnBELEVBQUcsS0FBTXNELEdBRVRoOEcsS0FBS3U3RyxLQUFLMzhELEVBQUc4NUQsSUFHckJob0MsT0FBUSxXQUNKMXdFLEtBQUttN0csV0FBWSxLQUdsQkwsRUF2RUssR0F5RVpxQixFQUFjNzhHLE9BQU82OEcsWUFBYyxXQUNuQyxhQUVBLFNBQVNBLEVBQVl2OUQsSUFDakJBLEVBQUlBLEdBQUssSUFDRjMyQyxnQkFBbUIyMkMsRUFBRXoyQyxnQkFDeEI1SSxFQUFFaU4sTUFBTSx1REFFWnhNLEtBQUtvSSxTQUFXdzJDLEVBQUV4MkMsVUFBWXJDLEVBQUVzNUMsVUFDaENyL0MsS0FBS2lJLGVBQWlCMjJDLEVBQUUzMkMsZUFDeEJqSSxLQUFLbUksZUFBaUJ5MkMsRUFBRXoyQyxlQUN4Qm5JLEtBQUtxMUcsUUEwRVQsT0F4RUF0dkcsRUFBRXN1RSxNQUFNOG5DLEVBQVk3M0csVUFBVyxDQUMzQjgzRyxVQUFXLFNBQW1CeDlELEdBQzFCNStDLEtBQUtxOEcsT0FBU3o5RCxFQUFFeTlELE9BQ2hCcjhHLEtBQUtzOEcsS0FBTzE5RCxFQUFFMDlELE1BRWxCanNHLElBQUssU0FBUzNQLEdBQ1YsSUFBSStNLEVBQU96TixLQUNYVSxFQUFPcUYsRUFBRUMsUUFBUXRGLEdBQVFBLEVBQU8sQ0FBRUEsR0FDbENxRixFQUFFcUIsS0FBSzFHLEdBQU0sU0FBUzY3RyxHQUNsQixJQUFJN3NHLEVBQUl2SyxFQUNSc0ksRUFBSzR1RyxPQUFPM3NHLEVBQUtqQyxFQUFLckYsU0FBU20wRyxJQUFVQSxFQUN6Q3AzRyxFQUFTcTNHLEVBQWdCL3VHLEVBQUt4RixlQUFlczBHLElBQzdDeDJHLEVBQUVxQixLQUFLakMsR0FBUSxTQUFTSyxHQUNwQixJQUFJODFCLEVBQU0ydUMsRUFBT3d5QyxFQUdqQixJQUZBbmhGLEVBQU83dEIsRUFBSzZ1RyxLQUNacnlDLEVBQVF6a0UsRUFBTWdHLE1BQU0sSUFDYml4RyxFQUFLeHlDLEVBQU12bkIsVUFDZHBuQixFQUFPQSxFQUFhLEVBQUVtaEYsS0FBUW5oRixFQUFhLEVBQUVtaEYsR0FBTUMsTUFDM0MsRUFBRXA4RyxLQUFLb1AsVUFLL0IvRSxJQUFLLFNBQWFneUcsR0FDZCxJQUFJbHZHLEVBQU96TixLQUNYLE9BQU8rRixFQUFFMHRCLElBQUlrcEYsR0FBSyxTQUFTanRHLEdBQ3ZCLE9BQU9qQyxFQUFLNHVHLE9BQU8zc0csT0FHM0I0ekIsT0FBUSxTQUFnQjUrQixHQUNwQixJQUFpQlMsRUFBUW1YLEVBQXJCN08sRUFBT3pOLEtBb0JYLE9BbkJBbUYsRUFBU3EzRyxFQUFnQng4RyxLQUFLbUksZUFBZXpELElBQzdDcUIsRUFBRXFCLEtBQUtqQyxHQUFRLFNBQVNLLEdBQ3BCLElBQUk4MUIsRUFBTTJ1QyxFQUFPd3lDLEVBQUlFLEVBQ3JCLEdBQUlyZ0csR0FBOEIsSUFBbkJBLEVBQVF2YyxPQUNuQixPQUFPLEVBSVgsSUFGQXU3QixFQUFPN3RCLEVBQUs2dUcsS0FDWnJ5QyxFQUFRemtFLEVBQU1nRyxNQUFNLElBQ2I4dkIsSUFBU21oRixFQUFLeHlDLEVBQU12bkIsVUFDdkJwbkIsRUFBT0EsRUFBYSxFQUFFbWhGLEdBRTFCLElBQUluaEYsR0FBeUIsSUFBakIydUMsRUFBTWxxRSxPQUtkLE9BREF1YyxFQUFVLElBQ0gsRUFKUHFnRyxFQUFNcmhGLEVBQVEsRUFBRXIxQixNQUFNLEdBQ3RCcVcsRUFBVUEsRUFzRDFCLFNBQXlCc2dHLEVBQVFDLEdBQzdCLElBQUlDLEVBQUssRUFBR0MsRUFBSyxFQUFHdnZDLEVBQWUsR0FDbkNvdkMsRUFBU0EsRUFBT3A3QyxPQUNoQnE3QyxFQUFTQSxFQUFPcjdDLE9BRWhCLElBREEsSUFBSXc3QyxFQUFZSixFQUFPNzhHLE9BQVFrOUcsRUFBWUosRUFBTzk4RyxPQUMzQys4RyxFQUFLRSxHQUFhRCxFQUFLRSxHQUN0QkwsRUFBT0UsR0FBTUQsRUFBT0UsR0FDcEJELEtBQ09GLEVBQU9FLEdBQU1ELEVBQU9FLEtBRzNCdnZDLEVBQWFsdEUsS0FBS3M4RyxFQUFPRSxJQUN6QkEsS0FIQUMsS0FPUixPQUFPdnZDLEVBdEV5QjB2QyxDQUFnQjVnRyxFQUFTcWdHLEdBQU9BLEtBTXJEcmdHLEVBQVV2VyxFQUFFMHRCLElBc0MzQixTQUFnQnE1QixHQUVaLElBREEsSUFBSXVRLEVBQU8sR0FBSTgvQyxFQUFVLEdBQ2hCMTNHLEVBQUksRUFBR203QixFQUFNa3NCLEVBQU0vc0QsT0FBUTBGLEVBQUltN0IsRUFBS243QixJQUNwQzQzRCxFQUFLdlEsRUFBTXJuRCxNQUNaNDNELEVBQUt2USxFQUFNcm5ELEtBQU0sRUFDakIwM0csRUFBUTc4RyxLQUFLd3NELEVBQU1ybkQsS0FHM0IsT0FBTzAzRyxFQTlDb0JDLENBQU85Z0csSUFBVSxTQUFTNU0sR0FDN0MsT0FBT2pDLEVBQUs0dUcsT0FBTzNzRyxNQUNsQixJQUVUd3RDLElBQUssV0FDRCxJQUFJaDJDLEVBQVMsR0FDYixJQUFLLElBQUloQixLQUFPbEcsS0FBS3E4RyxPQUNqQm4xRyxFQUFPNUcsS0FBS04sS0FBS3E4RyxPQUFPbjJHLElBRTVCLE9BQU9nQixHQUVYbXVHLE1BQU8sV0FDSHIxRyxLQUFLcThHLE9BQVMsR0FDZHI4RyxLQUFLczhHLEtBQU9JLEtBRWhCVyxVQUFXLFdBQ1AsTUFBTyxDQUNIaEIsT0FBUXI4RyxLQUFLcThHLE9BQ2JDLEtBQU10OEcsS0FBS3M4RyxTQUloQkgsRUFDUCxTQUFTSyxFQUFnQnIzRyxHQU9yQixPQU5BQSxFQUFTWSxFQUFFMDFCLE9BQU90MkIsR0FBUSxTQUFTSyxHQUMvQixRQUFTQSxLQUVKTyxFQUFFMHRCLElBQUl0dUIsR0FBUSxTQUFTSyxHQUM1QixPQUFPQSxFQUFNZzBCLGlCQUlyQixTQUFTa2pGLElBQ0wsSUFBSXBoRixFQUFPLENBQ1gsRUFBWSxHQUNaLEVBQWlCLElBQ2pCLE9BQU9BLEdBbkd3QixHQWtJbkNnaUYsRUFBVyxXQUNYLGFBQ0EsSUFBSTEzRyxFQU1KLFNBQVMwM0csRUFBUzErRCxHQUNkNStDLEtBQUtILElBQU0rK0MsRUFBRS8rQyxJQUNiRyxLQUFLMDZHLElBQU05N0QsRUFBRTg3RCxJQUNiMTZHLEtBQUtzRCxNQUFRczdDLEVBQUV0N0MsTUFDZnRELEtBQUt1OUcsUUFBVTMrRCxFQUFFMitELFFBQ2pCdjlHLEtBQUtzSSxVQUFZczJDLEVBQUV0MkMsVUFDbkJ0SSxLQUFLczdHLFVBQVkxOEQsRUFBRTA4RCxVQUNuQnQ3RyxLQUFLdzlHLFdBQWE1K0QsRUFBRTQrRCxXQUNwQng5RyxLQUFLeTlHLFFBQVUsSUFBSWhFLEVBQWtCNzZELEVBQUU4K0QsVUFnRDNDLE9BN0RBOTNHLEVBQU8sQ0FDSGxGLEtBQU0sT0FDTmk5RyxTQUFVLFdBQ1ZILFdBQVksY0FZaEJ6M0csRUFBRXN1RSxNQUFNaXBDLEVBQVNoNUcsVUFBVyxDQUN4QnM1RyxVQUFXLFdBQ1AsTUFBTyxDQUNILzlHLElBQUtHLEtBQUtILElBQ1ZaLEtBQU0sTUFDTjQrRyxTQUFVLFNBR2xCdm1FLE1BQU8sU0FBZTUyQyxHQUNiVixLQUFLc0QsUUFHVnRELEtBQUt5OUcsUUFBUXp5RyxJQUFJcEYsRUFBS2xGLEtBQU1BLEVBQU1WLEtBQUswNkcsS0FDdkMxNkcsS0FBS3k5RyxRQUFRenlHLElBQUlwRixFQUFLKzNHLFNBQVVockcsU0FBU2dyRyxTQUFVMzlHLEtBQUswNkcsS0FDeEQxNkcsS0FBS3k5RyxRQUFRenlHLElBQUlwRixFQUFLNDNHLFdBQVl4OUcsS0FBS3c5RyxXQUFZeDlHLEtBQUswNkcsT0FFNURvRCxVQUFXLFdBQ1AsSUFBaUJ4RCxFQUFieUQsRUFBUyxHQUNiLE9BQUsvOUcsS0FBS3NELE9BR1Z5NkcsRUFBT3I5RyxLQUFPVixLQUFLeTlHLFFBQVE5eUcsSUFBSS9FLEVBQUtsRixNQUNwQ3E5RyxFQUFPSixTQUFXMzlHLEtBQUt5OUcsUUFBUTl5RyxJQUFJL0UsRUFBSyszRyxVQUN4Q0ksRUFBT1AsV0FBYXg5RyxLQUFLeTlHLFFBQVE5eUcsSUFBSS9FLEVBQUs0M0csWUFDMUNsRCxFQUFZeUQsRUFBT1AsYUFBZXg5RyxLQUFLdzlHLFlBQWNPLEVBQU9KLFdBQWFockcsU0FBU2dyRyxTQUMzRUksRUFBT3I5RyxPQUFTNDVHLEVBQVl5RCxFQUFPcjlHLEtBQU8sTUFOdEMsTUFRZnM5RyxZQUFhLFNBQVN0RixHQUNsQixJQUFpQjE3QixFQUFidnZFLEVBQU96TixLQUNOMDRHLElBR0wxN0IsRUFBV2g5RSxLQUFLdTlHLFFBQVF2OUcsS0FBSzQ5RyxhQUM3QjU5RyxLQUFLczdHLFVBQVV0K0IsR0FBVWpoQyxNQUN6QixXQUNJMjhELEdBQUcsTUFGZ0N4N0UsTUFJdkMsU0FBb0I4K0UsR0FDaEJ0RCxFQUFHLEtBQU1qckcsRUFBS25GLFVBQVUwekcsU0FHaEM1aUUsTUFBTyxXQUVILE9BREFwNUMsS0FBS3k5RyxRQUFRcmtFLFFBQ05wNUMsUUFHUnM5RyxFQWhFSSxHQWtFWFcsRUFBUyxXQUNULGFBQ0EsU0FBU0EsRUFBT3IvRCxHQUNaNStDLEtBQUtILElBQU0rK0MsRUFBRS8rQyxJQUNiRyxLQUFLdTlHLFFBQVUzK0QsRUFBRTIrRCxRQUNqQnY5RyxLQUFLc0ksVUFBWXMyQyxFQUFFdDJDLFVBQ25CdEksS0FBS3M3RyxVQUFZLElBQUlSLEVBQVUsQ0FDM0J4M0csTUFBT3M3QyxFQUFFdDdDLE1BQ1RrNEcsUUFBUzU4RCxFQUFFNDhELFFBQ1hGLFVBQVcxOEQsRUFBRTA4RCxZQTJCckIsT0F4QkF2MUcsRUFBRXN1RSxNQUFNNHBDLEVBQU8zNUcsVUFBVyxDQUN0QnM1RyxVQUFXLFdBQ1AsTUFBTyxDQUNILzlHLElBQUtHLEtBQUtILElBQ1ZaLEtBQU0sTUFDTjQrRyxTQUFVLFNBR2xCbHpHLElBQUssU0FBYWpHLEVBQU9nMEcsR0FDckIsSUFBaUIxN0IsRUFBYnZ2RSxFQUFPek4sS0FDWCxHQUFLMDRHLEVBS0wsT0FGQWgwRyxFQUFRQSxHQUFTLEdBQ2pCczRFLEVBQVdoOUUsS0FBS3U5RyxRQUFRNzRHLEVBQU8xRSxLQUFLNDlHLGFBQzdCNTlHLEtBQUtzN0csVUFBVTN3RyxJQUFJcXlFLEdBQzFCLFNBQW9CNy9DLEVBQUs2K0UsR0FDZnRELEVBQU52N0UsRUFBUyxHQUFTMXZCLEVBQUtuRixVQUFVMHpHLFFBR3pDa0Msa0JBQW1CLFdBQ2ZsK0csS0FBS3M3RyxVQUFVNXFDLFlBR2hCdXRDLEVBcENFLEdBc0NURSxFQUFVLFdBQ1YsYUFDQSxPQUFPLFNBQWV2L0QsR0FDbEIsSUFBSXdGLEVBQVVnNkQsRUFzQmQsT0FyQkFoNkQsRUFBVyxDQUNQaTZELFlBQVksRUFDWmoyRyxTQUFVckMsRUFBRXM1QyxVQUNacDNDLGVBQWdCLEtBQ2hCRSxlQUFnQixLQUNoQm0yRyxXQUFZLEVBQ1pGLE9BQVEsS0FDUi9pRyxNQUFPLEdBQ1BrakcsU0FBVSxLQUNWdDNHLE9BQVEsUUFFWjIzQyxFQUFJNzRDLEVBQUVzdUUsTUFBTWp3QixFQUFVeEYsR0FBSyxLQUN4QjMyQyxnQkFBa0IxSSxFQUFFaU4sTUFBTSwrQkFDNUJveUMsRUFBRXoyQyxnQkFBa0I1SSxFQUFFaU4sTUFBTSw4QkFDN0I0eEcsRUFBU3gvRCxFQUFFdy9ELE9BQ1h4L0QsRUFBRXcvRCxPQUFTQSxFQUFTLFNBQVMxK0UsR0FDekIsT0FBT0EsRUFBRThoQyxLQUFLNDhDLElBQ2RyNEcsRUFBRTQ1RCxTQUNOL2dCLEVBQUV2akMsTUFBUXRWLEVBQUU0M0MsV0FBV2lCLEVBQUV2akMsT0FBU3VqQyxFQUFFdmpDLFFBQVV1akMsRUFBRXZqQyxNQUNoRHVqQyxFQUFFMi9ELFNBSU4sU0FBdUIzL0QsR0FDbkIsSUFBSXdGLEVBQ0osT0FBS3hGLEdBR0x3RixFQUFXLENBQ1B2a0QsSUFBSyxLQUNMNjZHLElBQUssTUFDTHAzRyxPQUFPLEVBQ1BvNkcsU0FBVSxLQUNWRixXQUFZLEdBQ1pELFFBQVN4M0csRUFBRTQ1RCxTQUNYcjNELFVBQVd2QyxFQUFFNDVELFNBQ2IyN0MsVUFBVyxNQUVmMThELEVBQUk3NEMsRUFBRXlyRSxTQUFTNXlCLEdBQUssQ0FDaEIvK0MsSUFBSysrQyxHQUNMQSxJQUNKQSxFQUFJNzRDLEVBQUVzdUUsTUFBTWp3QixFQUFVeEYsSUFDbkIvK0MsS0FBT04sRUFBRWlOLE1BQU0sbUNBQ2xCb3lDLEVBQUV0MkMsVUFBWXMyQyxFQUFFbmpCLFFBQVVtakIsRUFBRXQyQyxVQUM1QnMyQyxFQUFFOCtELFNBQVc5K0QsRUFBRTgrRCxVQUFZOStELEVBQUUvK0MsSUFDN0IrK0MsRUFBRTQrRCxXQUFhLytCLEVBQVU3L0IsRUFBRTQrRCxXQUMzQjUrRCxFQUFFMDhELFVBQVkxOEQsRUFBRTA4RCxVQUFZa0QsRUFBbUI1L0QsRUFBRTA4RCxXQUFhLzdHLEVBQUUrNUIsS0FDekRzbEIsR0FyQkksS0FQRTYvRCxDQUFjNy9ELEVBQUUyL0QsVUFDN0IzL0QsRUFBRTMzQyxPQTZCTixTQUFxQjIzQyxHQUNqQixJQUFJd0YsRUFDSixHQUFLeEYsRUE0QkwsT0F6QkF3RixFQUFXLENBQ1B2a0QsSUFBSyxLQUNMeUQsT0FBTyxFQUNQaTZHLFFBQVMsS0FDVHY3RyxRQUFTLEtBQ1RxRyxTQUFVLEtBQ1ZtekcsUUFBUyxLQUNUa0QsWUFBYSxXQUNiQyxjQUFlLElBQ2ZyMkcsVUFBV3ZDLEVBQUU0NUQsU0FDYjI3QyxVQUFXLE1BRWYxOEQsRUFBSTc0QyxFQUFFeXJFLFNBQVM1eUIsR0FBSyxDQUNoQi8rQyxJQUFLKytDLEdBQ0xBLElBQ0pBLEVBQUk3NEMsRUFBRXN1RSxNQUFNandCLEVBQVV4RixJQUNuQi8rQyxLQUFPTixFQUFFaU4sTUFBTSxpQ0FDbEJveUMsRUFBRXQyQyxVQUFZczJDLEVBQUVuakIsUUFBVW1qQixFQUFFdDJDLFVBQzVCczJDLEVBQUUyK0QsUUFTTixTQUF5QjMrRCxHQUNyQixJQUFJMitELEVBQVN2N0csRUFBU3FHLEVBSXRCLE9BSEFrMUcsRUFBVTMrRCxFQUFFMitELFFBQ1p2N0csRUFBVTQ4QyxFQUFFNThDLFFBQ1pxRyxFQUFXdTJDLEVBQUV2MkMsU0FDVGsxRyxJQUdBdjdHLEVBQ1U0OEcsRUFDSGhnRSxFQUFFdjJDLFNBQ0N3MkcsRUFFQUMsR0FHZCxTQUFTRixFQUFpQmw2RyxFQUFPczRFLEdBRTdCLE9BREFBLEVBQVNuOUUsSUFBTW1DLEVBQVFnN0UsRUFBU245RSxJQUFLNkUsR0FDOUJzNEUsRUFFWCxTQUFTNmhDLEVBQWtCbjZHLEVBQU9zNEUsR0FFOUIsT0FEQUEsRUFBU245RSxJQUFNbTlFLEVBQVNuOUUsSUFBSW1DLFFBQVFxRyxFQUFVKzJDLG1CQUFtQjE2QyxJQUMxRHM0RSxFQUVYLFNBQVM4aEMsRUFBZXA2RyxFQUFPczRFLEdBQzNCLE9BQU9BLEdBbENDK2hDLENBQWdCbmdFLEdBQzVCQSxFQUFFNDhELFFBb0NOLFNBQW1CNThELEdBQ2YsSUFBSTQ4RCxFQUFTamlGLEVBQVE2Z0MsRUFPckIsT0FOQW9oRCxFQUFVNThELEVBQUU0OEQsUUFDWmppRixFQUFTcWxCLEVBQUU4L0QsWUFDWHRrRCxFQUFPeGIsRUFBRSsvRCxjQUNKbkQsSUFDREEsRUFBVSxjQUFjbjRFLEtBQUs5SixHQUFVOCtDLEVBQVNqZSxHQUFRenVELEVBQVN5dUQsSUFFOURvaEQsRUFDUCxTQUFTN3ZHLEVBQVN5dUQsR0FDZCxPQUFPLFNBQWtCMzlCLEdBQ3JCLE9BQU8xMkIsRUFBRTRGLFNBQVM4d0IsRUFBSTI5QixJQUc5QixTQUFTaWUsRUFBU2plLEdBQ2QsT0FBTyxTQUFrQjM5QixHQUNyQixPQUFPMTJCLEVBQUVzeUUsU0FBUzU3QyxFQUFJMjlCLEtBcERsQjRrRCxDQUFVcGdFLEdBQ3RCQSxFQUFFMDhELFVBQVkxOEQsRUFBRTA4RCxVQUFZa0QsRUFBbUI1L0QsRUFBRTA4RCxXQUFhLzdHLEVBQUUrNUIsWUFDekRzbEIsRUFBRTU4QyxlQUNGNDhDLEVBQUV2MkMsZ0JBQ0Z1MkMsRUFBRTgvRCxtQkFDRjkvRCxFQUFFKy9ELGNBQ0YvL0QsRUEzRElxZ0UsQ0FBWXJnRSxFQUFFMzNDLFFBQ2xCMjNDLEdBNEdYLFNBQVM0L0QsRUFBbUIvaEYsR0FDeEIsT0FBTyxTQUFpQm1pQixHQUNwQixJQUFJc2dFLEVBQVczL0csRUFBRTQvRyxXQUVqQixPQURBMWlGLEVBQUdtaUIsR0FFSCxTQUFtQm85RCxHQUNmajJHLEVBQUU4eEMsT0FBTSxXQUNKcW5FLEVBQVNyaUYsUUFBUW0vRSxTQUd6QixTQUFpQjcrRSxHQUNicDNCLEVBQUU4eEMsT0FBTSxXQUNKcW5FLEVBQVNwaUYsT0FBT0ssU0FSakIraEYsSUF6SUwsR0F1SkcsV0FDYixhQUNBLElBQUlFLEVBRUosU0FBU2g2RyxFQUFXdzVDLEdBQ2hCQSxFQUFJdS9ELEVBQVF2L0QsR0FDWjUrQyxLQUFLbytHLE9BQVN4L0QsRUFBRXcvRCxPQUNoQnArRyxLQUFLb0ksU0FBV3cyQyxFQUFFeDJDLFNBQ2xCcEksS0FBS3MrRyxXQUFhMS9ELEVBQUUwL0QsV0FDcEJ0K0csS0FBS3FiLE1BQVF1akMsRUFBRXZqQyxNQUNmcmIsS0FBS2lILE9BQVMyM0MsRUFBRTMzQyxPQUFTLElBQUlnM0csRUFBT3IvRCxFQUFFMzNDLFFBQVUsS0FDaERqSCxLQUFLdStHLFNBQVczL0QsRUFBRTIvRCxTQUFXLElBQUlqQixFQUFTMStELEVBQUUyL0QsVUFBWSxLQUN4RHYrRyxLQUFLeWUsTUFBUSxJQUFJMDlGLEVBQVksQ0FDekIvekcsU0FBVXBJLEtBQUtvSSxTQUNmSCxlQUFnQjIyQyxFQUFFMzJDLGVBQ2xCRSxlQUFnQnkyQyxFQUFFejJDLGtCQUVMLElBQWpCeTJDLEVBQUV5L0QsWUFBd0JyK0csS0FBS3ErRyxhQWtHbkMsT0FoSEFlLEVBQU05L0csUUFBVUEsT0FBTzhGLFdBZ0J2QkEsRUFBV3cyRSxXQUFhLFdBRXBCLE9BREF0OEUsU0FBV0EsT0FBTzhGLFdBQWFnNkcsR0FDeEJoNkcsR0FFWEEsRUFBV0MsV0FBYUEsRUFDeEJVLEVBQUVzdUUsTUFBTWp2RSxFQUFXZCxVQUFXLENBQzFCKzZHLFlBQWEsV0FDVCxJQUFJNXhHLEVBQU96TixLQUNYLE9BQU9BLEtBQUtpSCxPQUNaLFNBQW1CdkMsRUFBTzQ2RyxFQUFNdEssR0FDNUIsT0FBT3ZuRyxFQUFLNjFCLE9BQU81K0IsRUFBTzQ2RyxFQUFNdEssSUFFcEMsU0FBc0J0d0csRUFBTzQ2RyxHQUN6QixPQUFPN3hHLEVBQUs2MUIsT0FBTzUrQixFQUFPNDZHLEtBR2xDQyxjQUFlLFdBQ1gsSUFBaUJMLEVBQVVNLEVBQXZCL3hHLEVBQU96TixLQVVYLE9BVEFrL0csRUFBVzMvRyxFQUFFNC9HLFdBQ1JuL0csS0FBS3UrRyxVQUVDaUIsRUFBYXgvRyxLQUFLdStHLFNBQVNULGNBQ2xDOTlHLEtBQUt5ZSxNQUFNMjlGLFVBQVVvRCxHQUNyQk4sRUFBU3JpRixXQUVUNzhCLEtBQUt1K0csU0FBU1AsYUFHbEIsU0FBYzdnRixFQUFLejhCLEdBQ2YsR0FBSXk4QixFQUNBLE9BQU8raEYsRUFBU3BpRixTQUVwQnJ2QixFQUFLNEMsSUFBSTNQLEdBQ1QrTSxFQUFLOHdHLFNBQVNqbkUsTUFBTTdwQyxFQUFLZ1IsTUFBTTQrRixhQUMvQjZCLEVBQVNyaUYsYUFkVHFpRixFQUFTcmlGLFVBT05xaUYsRUFBU25yRSxXQVVwQjByRSxZQUFhLFdBQ1QsSUFBSWh5RyxFQUFPek4sS0FHWCxPQUZBQSxLQUFLbzVDLFNBQ0pwNUMsS0FBSzAvRyxZQUFjMS9HLEtBQUt1L0csaUJBQWlCcmlGLE1BRTFDLFdBQ0l6dkIsRUFBSzRDLElBQUk1QyxFQUFLNE4sVUFGWHJiLEtBQUswL0csYUFLaEJyQixXQUFZLFNBQW9CeFosR0FDNUIsT0FBUTdrRyxLQUFLMC9HLGFBQWU3YSxFQUFRN2tHLEtBQUt5L0csY0FBZ0J6L0csS0FBSzAvRyxhQUVsRXJ2RyxJQUFLLFNBQWEzUCxHQUVkLE9BREFWLEtBQUt5ZSxNQUFNcE8sSUFBSTNQLEdBQ1JWLE1BRVgySyxJQUFLLFNBQWFneUcsR0FFZCxPQURBQSxFQUFNNTJHLEVBQUVDLFFBQVEyMkcsR0FBT0EsRUFBTSxHQUFHMTJHLE1BQU16QixLQUFLbzRCLFdBQ3BDNThCLEtBQUt5ZSxNQUFNOVQsSUFBSWd5RyxJQUUxQnI1RSxPQUFRLFNBQWdCNStCLEVBQU80NkcsRUFBTXRLLEdBQ2pDLElBQWlCMzVGLEVBQWI1TixFQUFPek4sS0FRWCxPQVBBcWIsRUFBUXJiLEtBQUtvK0csT0FBT3ArRyxLQUFLeWUsTUFBTTZrQixPQUFPNStCLElBQ3RDNDZHLEVBQUt0L0csS0FBS2lILE9BQVNvVSxFQUFNcFYsUUFBVW9WLEdBQy9CcmIsS0FBS2lILFFBQVVvVSxFQUFNdGIsT0FBU0MsS0FBS3MrRyxXQUNuQ3QrRyxLQUFLaUgsT0FBTzBELElBQUlqRyxHQUtwQixTQUF1QnVDLEdBQ25CLElBQUkwNEcsRUFBZ0IsR0FDcEI1NUcsRUFBRXFCLEtBQUtILEdBQVEsU0FBU3M0QixJQUNuQng1QixFQUFFdzJFLEtBQUtsaEUsR0FBTyxTQUFTNGtCLEdBQ3BCLE9BQU94eUIsRUFBS3JGLFNBQVNtM0IsS0FBTzl4QixFQUFLckYsU0FBUzYzQixPQUN4QzAvRSxFQUFjci9HLEtBQUtpL0IsTUFFN0J5MUUsR0FBU0EsRUFBTTJLLE1BWFIzL0csS0FBS2lILFFBQ1pqSCxLQUFLaUgsT0FBT2kzRyxvQkFFVGwrRyxNQVdYazlDLElBQUssV0FDRCxPQUFPbDlDLEtBQUt5ZSxNQUFNeStCLE9BRXRCOUQsTUFBTyxXQUVILE9BREFwNUMsS0FBS3llLE1BQU00MkYsUUFDSnIxRyxNQUVYNC9HLG1CQUFvQixXQUVoQixPQURBNS9HLEtBQUt1K0csVUFBWXYrRyxLQUFLdStHLFNBQVNubEUsUUFDeEJwNUMsTUFFWDYvRyxpQkFBa0IsV0FFZCxPQURBL0UsRUFBVWMsYUFDSDU3RyxNQUVYOC9HLFVBQVcsV0FDUCxPQUFPOS9HLEtBQUtxL0csaUJBR2JqNkcsRUFuSE0sSUEvd0JaLElBQVM3RixFQUNWd0csRUF3SUEwNEUsRUFDQXA1RSxFQStCQTh6RyxFQW9FQU0sRUF3RkFxQixFQXlFQXFCLEVBa0lBbUIsRUFrRUFXLEVBc0NBRSxHQTluQkMsMkJBKzRCRCxFQUF1QixDQUFFLGVBRXhCLEtBRm9DLEVBQUYsU0FBV2hHLEdBQzFDLE9BT001NEcsRUFQUzQ0RyxFQVFuQnB5RyxFQUFJLFdBQ0osYUFDQSxNQUFPLENBQ0hxeUcsT0FBUSxXQUNKLFFBQU8sa0JBQWtCLzBFLEtBQUt3USxVQUFVeUYsWUFBYXpGLFVBQVV5RixVQUFVLzhCLE1BQU0sNEJBQTRCLElBRS9HODdGLGNBQWUsU0FBUzUzRSxHQUNwQixPQUFRQSxHQUFPLFFBQVE0QyxLQUFLNUMsSUFFaEM2M0UsaUJBQWtCLFNBQVM3M0UsR0FDdkIsT0FBT0EsRUFBSXorQixRQUFRLHNDQUF1QyxTQUU5RHd2RSxTQUFVLFNBQVM3ckUsR0FDZixNQUFzQixpQkFBUkEsR0FFbEI0ckUsU0FBVSxTQUFTNXJFLEdBQ2YsTUFBc0IsaUJBQVJBLEdBRWxCSyxRQUFTekcsRUFBRXlHLFFBQ1gyM0MsV0FBWXArQyxFQUFFbytDLFdBQ2Q3USxTQUFVdnRDLEVBQUV3aEUsY0FDWmdhLFlBQWEsU0FBU3AxRSxHQUNsQixZQUFzQixJQUFSQSxHQUVsQjIwRSxVQUFXLFNBQVMzMEUsR0FDaEIsU0FBVUEsR0FBd0IsSUFBakJBLEVBQUk2bEQsV0FFekIrc0QsU0FBVSxTQUFTNXlHLEdBQ2YsT0FBT0EsYUFBZXBHLEdBRTFCaTVHLE1BQU8sU0FBZXA1RSxHQUNsQixPQUFPcjVCLEVBQUVnMUUsWUFBWTM3QyxJQUFZLE9BQU5BLEVBQWEsR0FBS0EsRUFBSSxJQUVyRHI2QixLQUFNeEYsRUFBRWs1RyxNQUNScnhHLEtBQU0sU0FBU2luRCxFQUFZcXFELEdBQ3ZCbjVHLEVBQUU2SCxLQUFLaW5ELEdBQ1AsU0FBcUI1dkMsRUFBTy9hLEdBQ3hCLE9BQU9nMUcsRUFBR2gxRyxFQUFPK2EsT0FHekJnVixJQUFLbDBCLEVBQUVrMEIsSUFDUGdJLE9BQVFsOEIsRUFBRW81RyxLQUNWLytCLE1BQU8sU0FBU2owRSxFQUFLMDlCLEdBQ2pCLElBQUkrTSxHQUFTLEVBQ2IsT0FBS3pxQyxHQUdMcEcsRUFBRTZILEtBQUt6QixHQUFLLFNBQVNPLEVBQUs5RCxHQUN0QixLQUFNZ3VDLEVBQVMvTSxFQUFLNytCLEtBQUssS0FBTXBDLEVBQUs4RCxFQUFLUCxJQUNyQyxPQUFPLE9BR055cUMsR0FQRUEsR0FTZm1zQyxLQUFNLFNBQVM1MkUsRUFBSzA5QixHQUNoQixJQUFJK00sR0FBUyxFQUNiLE9BQUt6cUMsR0FHTHBHLEVBQUU2SCxLQUFLekIsR0FBSyxTQUFTTyxFQUFLOUQsR0FDdEIsR0FBSWd1QyxFQUFTL00sRUFBSzcrQixLQUFLLEtBQU1wQyxFQUFLOEQsRUFBS1AsR0FDbkMsT0FBTyxPQUdOeXFDLEdBUEVBLEdBU2Zpa0MsTUFBTzkwRSxFQUFFNDVFLE9BQ1R4WixTQUFVLFNBQVNqZ0MsR0FDZixPQUFPQSxHQUVYblIsTUFBTyxTQUFTNW9CLEdBQ1osT0FBT3BHLEVBQUU0NUUsUUFBTyxFQUFNLEdBQUl4ekUsSUFFOUJpekcsZUFBZ0IsV0FDWixJQUFJcGdFLEVBQVUsRUFDZCxPQUFPLFdBQ0gsT0FBT0EsTUFHZnFnRSxXQUFZLFNBQW9CbHpHLEdBQzVCLE9BQU9wRyxFQUFFbytDLFdBQVdoNEMsR0FBT0EsRUFDM0IsV0FDSSxPQUFPMjZCLE9BQU8zNkIsS0FHdEJreUMsTUFBTyxTQUFTcGIsR0FDWjBjLFdBQVcxYyxFQUFJLElBRW5COXdCLFNBQVUsU0FBU2doRCxFQUFNeU4sRUFBTTArQyxHQUMzQixJQUFJQyxFQUFTM29FLEVBQ2IsT0FBTyxXQUNILElBQXNDNG9FLEVBQU9DLEVBQXpDNzJELEVBQVVwaUQsS0FBTTZGLEVBQU8rMkIsVUFhM0IsT0FaQW84RSxFQUFRLFdBQ0pELEVBQVUsS0FDTEQsSUFDRDFvRSxFQUFTdWMsRUFBS2h3QixNQUFNeWxCLEVBQVN2OEMsS0FHckNvekcsRUFBVUgsSUFBY0MsRUFDeEJ2bUQsYUFBYXVtRCxHQUNiQSxFQUFVNS9ELFdBQVc2L0QsRUFBTzUrQyxHQUN4QjYrQyxJQUNBN29FLEVBQVN1YyxFQUFLaHdCLE1BQU15bEIsRUFBU3Y4QyxJQUUxQnVxQyxJQUdmaW9DLFNBQVUsU0FBUzFyQixFQUFNeU4sR0FDckIsSUFBSWhZLEVBQVN2OEMsRUFBTWt6RyxFQUFTM29FLEVBQVFpeUIsRUFBVTIyQyxFQU85QyxPQU5BMzJDLEVBQVcsRUFDWDIyQyxFQUFRLFdBQ0ozMkMsRUFBVyxJQUFJclIsS0FDZituRCxFQUFVLEtBQ1Yzb0UsRUFBU3VjLEVBQUtod0IsTUFBTXlsQixFQUFTdjhDLElBRTFCLFdBQ0gsSUFBSSt5QyxFQUFNLElBQUlvWSxLQUFRN1QsRUFBWWlkLEdBQVF4aEIsRUFBTXlwQixHQVdoRCxPQVZBamdCLEVBQVVwaUQsS0FDVjZGLEVBQU8rMkIsVUFDSHVnQixHQUFhLEdBQ2JxVixhQUFhdW1ELEdBQ2JBLEVBQVUsS0FDVjEyQyxFQUFXenBCLEVBQ1h4SSxFQUFTdWMsRUFBS2h3QixNQUFNeWxCLEVBQVN2OEMsSUFDckJrekcsSUFDUkEsRUFBVTUvRCxXQUFXNi9ELEVBQU83N0QsSUFFekIvTSxJQUdmaVAsVUFBVyxTQUFTajlDLEdBQ2hCLE9BQU8yRCxFQUFFeXJFLFNBQVNwdkUsR0FBT0EsRUFBTXdhLEtBQUt5aUMsVUFBVWo5QyxJQUVsRHdvRSxLQUFNLGNBcklOLEdBd0lKbTFDLEVBQU0sV0FDTixhQUNBLElBQUlDLEVBQW9CLENBQ3BCbmpFLFFBQVMsb0JBQ1Q5eEMsTUFBTyxXQUNQeEgsS0FBTSxVQUNOMDhHLEtBQU0sVUFDTnJ2RyxRQUFTLGFBQ1QxTSxXQUFZLGdCQUNaZzhHLFdBQVksZ0JBQ1p0Z0csTUFBTyxXQUNQaTJCLEtBQU0sVUFDTmd6QyxPQUFRLFlBQ1J4bEYsVUFBVyxnQkFFZixPQUNBLFNBQWV1N0MsR0FDWCxJQUFJdWhFLEVBQUs5b0IsRUFRVCxPQVBBQSxFQUFVdHhGLEVBQUVzdUUsTUFBTSxHQUFJMnJDLEVBQW1CcGhFLEdBT2xDLENBQ0h3aEUsS0FQSkQsRUFBTSxDQUNGQyxLQTZCQUEsRUFBTSxDQUNOdmpFLFFBQVMsQ0FDTC85QixTQUFVLFdBQ1ZyYixRQUFTLGdCQUViRixLQUFNLENBQ0Z1YixTQUFVLFdBQ1Y0bUUsSUFBSyxJQUNMM21FLEtBQU0sSUFDTnNoRyxZQUFhLGNBQ2JDLFVBQVcsT0FDWHZnQixRQUFTLEtBRWJoMUYsTUFBTyxDQUNIK1QsU0FBVSxXQUNWeWhHLGNBQWUsTUFDZkMsZ0JBQWlCLGVBRXJCQyxnQkFBaUIsQ0FDYjNoRyxTQUFVLFdBQ1Z5aEcsY0FBZSxPQUVuQk4sS0FBTSxDQUNGbmhHLFNBQVUsV0FDVjRtRSxJQUFLLE9BQ0wzbUUsS0FBTSxJQUNOMmhHLE9BQVEsTUFDUmo5RyxRQUFTLFFBRWJrOUcsSUFBSyxDQUNENWhHLEtBQU0sSUFDTittRSxNQUFPLFFBRVg4NkIsSUFBSyxDQUNEN2hHLEtBQU0sT0FDTittRSxNQUFPLE9BR1gvL0UsRUFBRXF5RyxVQUNGcnlHLEVBQUVzdUUsTUFBTStyQyxFQUFJcjFHLE1BQU8sQ0FDZjgxRyxnQkFBaUIsd0ZBR2xCVCxHQXZFSC9vQixRQUFTQSxFQUNUbHVGLE1BYVcyMkIsRUFiS3UzRCxFQWNiLENBQ0h4NkMsUUFBUyxnQkFBa0IvYyxFQUFFK2MsUUFBVSxZQUN2Q29qRSxLQUFNLGVBQWlCbmdGLEVBQUVtZ0YsS0FBTyxhQWZoQ3JnSCxVQUFXa2hILEVBQWV6cEIsS0FHakIrb0IsSUFDVGozRyxLQUFNZzNHLEVBQUloM0csS0FDVmt1RixRQUFTOG9CLEVBQUk5b0IsUUFDYnozRixVQUFXdWdILEVBQUl2Z0gsVUFDZnkwRSxNQUFPLFNBQVN6MUIsR0FDWjc0QyxFQUFFc3VFLE1BQU16MUIsRUFBR3VoRSxLQUl2QixJQUFtQnJnRixFQWFuQixJQUNRc2dGLEdBUlIsU0FBU1UsRUFBZXpwQixHQUNwQixJQUFJejNGLEVBQVksR0FJaEIsT0FIQW1HLEVBQUVxQixLQUFLaXdGLEdBQVMsU0FBU3IwRCxFQUFHaEQsR0FDeEJwZ0MsRUFBVW9nQyxHQUFLLElBQU1nRCxLQUVsQnBqQyxHQTlDTCxHQStGTm1oSCxFQUFXLFdBQ1gsYUFDQSxJQUFlQyxFQVFmLFNBQVNELEVBQVNuaUUsR0FDVEEsR0FBTUEsRUFBRTk5QyxJQUNUdkIsRUFBRWlOLE1BQU0sbUNBRVp4TSxLQUFLaWhILElBQU0xaEgsRUFBRXEvQyxFQUFFOTlDLElBd0JuQixNQW5DWSxhQUNaa2dILEVBQWlCLENBQ2Jqc0csT0FBUSxXQUNSbXNHLGFBQWMsZ0JBQ2RDLE9BQVEsV0FDUkMsYUFBYyxpQkFRbEJyN0csRUFBRXN1RSxNQUFNMHNDLEVBQVN6OEcsVUFBVyxDQUN4Qis4RyxTQUFVLFNBQVNwaUgsRUFBTTRHLEdBQ3JCLElBQUl5N0csRUFJSixPQUhBQSxFQUFLL2hILEVBQUVnaUgsTUFoQkgsYUFnQnFCdGlILElBQ3hCNEcsRUFBT0EsR0FBUSxJQUFJZzdDLFFBQVF5Z0UsR0FDNUJ0aEgsS0FBS2loSCxJQUFJaDRHLFFBQVEwekIsTUFBTTM4QixLQUFLaWhILElBQUtwN0csR0FDMUJ5N0csR0FFWGp5QyxPQUFRLFNBQVNwd0UsR0FDYixJQUFJNEcsRUFHSixPQUZBQSxFQUFPLEdBQUdJLE1BQU16QixLQUFLbzRCLFVBQVcsR0FDM0I1OEIsS0FBS3FoSCxTQUFTLFNBQVdwaUgsRUFBTTRHLEdBQzFCNGhGLHNCQUVkeCtFLFFBQVMsU0FBU2hLLEdBQ2QsSUFBSXVpSCxFQUNKeGhILEtBQUtxaEgsU0FBU3BpSCxFQUFNLEdBQUdnSCxNQUFNekIsS0FBS280QixVQUFXLEtBQ3pDNGtGLEVBQWlCUixFQUFlL2hILEtBQ2hDZSxLQUFLcWhILFNBQVNHLEVBQWdCLEdBQUd2N0csTUFBTXpCLEtBQUtvNEIsVUFBVyxPQUk1RG1rRixFQXRDSSxHQXdDWHQvRyxFQUFlLFdBQ2YsYUFDQSxJQUFJZ2dILEVBQVcsTUFBTzd0RSxFQW1FZHQwQyxPQUFPNjRDLGFBQ00sU0FBOEIxYixHQUN2QzBiLGNBQWEsV0FDVDFiLFFBSUssU0FBNEJBLEdBQ3JDMGMsWUFBVyxXQUNQMWMsTUFDRCxJQTVFZixNQUFPLENBQ0hpbEYsT0F5QkosU0FBZ0I1MUQsRUFBTzRzRCxFQUFJdDJELEdBQ3ZCLE9BQU8vZ0QsRUFBR21ELEtBQUt4RSxLQUFNLE9BQVE4ckQsRUFBTzRzRCxFQUFJdDJELElBekJ4Q3UvRCxRQXFCSixTQUFpQjcxRCxFQUFPNHNELEVBQUl0MkQsR0FDeEIsT0FBTy9nRCxFQUFHbUQsS0FBS3hFLEtBQU0sUUFBUzhyRCxFQUFPNHNELEVBQUl0MkQsSUFyQnpDUSxJQTBCSixTQUFha0osR0FDVCxJQUFJN3NELEVBQ0osSUFBS2UsS0FBSzRoSCxXQUNOLE9BQU81aEgsS0FHWCxJQURBOHJELEVBQVFBLEVBQU10Z0QsTUFBTWkyRyxHQUNieGlILEVBQU82c0QsRUFBTXBKLGdCQUNUMWlELEtBQUs0aEgsV0FBVzNpSCxHQUUzQixPQUFPZSxNQWxDUGlKLFFBb0NKLFNBQWlCNmlELEdBQ2IsSUFBSTdzRCxFQUFNNGlILEVBQVdoOEcsRUFBTWk4RyxFQUFXQyxFQUN0QyxJQUFLL2hILEtBQUs0aEgsV0FDTixPQUFPNWhILEtBSVgsSUFGQThyRCxFQUFRQSxFQUFNdGdELE1BQU1pMkcsR0FDcEI1N0csRUFBTyxHQUFHSSxNQUFNekIsS0FBS280QixVQUFXLElBQ3hCMzlCLEVBQU82c0QsRUFBTXBKLFdBQWFtL0QsRUFBWTdoSCxLQUFLNGhILFdBQVczaUgsS0FDMUQ2aUgsRUFBWUUsRUFBU0gsRUFBVXZDLEtBQU10L0csS0FBTSxDQUFFZixHQUFPa0gsT0FBT04sSUFDM0RrOEcsRUFBYUMsRUFBU0gsRUFBVTdNLE1BQU9oMUcsS0FBTSxDQUFFZixHQUFPa0gsT0FBT04sSUFDN0RpOEcsS0FBZWx1RSxFQUFTbXVFLEdBRTVCLE9BQU8vaEgsT0E5Q1gsU0FBU3FCLEVBQUdrNEIsRUFBUXV5QixFQUFPNHNELEVBQUl0MkQsR0FDM0IsSUFBSW5qRCxFQUNKLElBQUt5NUcsRUFDRCxPQUFPMTRHLEtBS1gsSUFIQThyRCxFQUFRQSxFQUFNdGdELE1BQU1pMkcsR0FDcEIvSSxFQUFLdDJELEVBcUVULFNBQXFCM2xCLEVBQUkybEIsR0FDckIsT0FBTzNsQixFQUFHMTNCLEtBQU8wM0IsRUFBRzEzQixLQUFLcTlDLEdBQVcsV0FDaEMzbEIsRUFBR0UsTUFBTXlsQixFQUFTLEdBQUduOEMsTUFBTXpCLEtBQUtvNEIsVUFBVyxLQXZFaENxbEYsQ0FBWXZKLEVBQUl0MkQsR0FBV3MyRCxFQUMxQzE0RyxLQUFLNGhILFdBQWE1aEgsS0FBSzRoSCxZQUFjLEdBQzlCM2lILEVBQU82c0QsRUFBTXBKLFNBQ2hCMWlELEtBQUs0aEgsV0FBVzNpSCxHQUFRZSxLQUFLNGhILFdBQVczaUgsSUFBUyxDQUM3Q3FnSCxLQUFNLEdBQ050SyxNQUFPLElBRVhoMUcsS0FBSzRoSCxXQUFXM2lILEdBQU1zNkIsR0FBUWo1QixLQUFLbzRHLEdBRXZDLE9BQU8xNEcsS0FpQ1gsU0FBU2dpSCxFQUFTSCxFQUFXei9ELEVBQVN2OEMsR0FDbEMsT0FDQSxXQUVJLElBREEsSUFBSXMxRyxFQUNLMTFHLEVBQUksRUFBR203QixFQUFNaWhGLEVBQVU5aEgsUUFBU283RyxHQUFhMTFHLEVBQUltN0IsRUFBS243QixHQUFLLEVBQ2hFMDFHLEdBQWtELElBQXRDMEcsRUFBVXA4RyxHQUFHazNCLE1BQU15bEIsRUFBU3Y4QyxHQUU1QyxPQUFRczFHLElBaEVELEdBMEZmOTNHLEVBQVksU0FBUzYrRyxHQUNyQixhQUNBLElBQUk5OUQsRUFBVyxDQUNYOW9CLEtBQU0sS0FDTnE0QyxRQUFTLEtBQ1RpVSxRQUFTLFNBQ1Q1SCxVQUFXLEtBQ1htaUMsV0FBVyxFQUNYQyxlQUFlLEdBRW5CLE9BQU8sU0FBb0J4akUsR0FDdkIsSUFBSXlqRSxHQUNKempFLEVBQUk3NEMsRUFBRXN1RSxNQUFNLEdBQUlqd0IsRUFBVXhGLElBQ25CdGpCLE1BQVNzakIsRUFBRSswQixVQUdsQi8wQixFQUFFKzBCLFFBQVU1dEUsRUFBRUMsUUFBUTQ0QyxFQUFFKzBCLFNBQVcvMEIsRUFBRSswQixRQUFVLENBQUUvMEIsRUFBRSswQixTQUNuRDB1QyxFQTBCSixTQUFrQkMsRUFBVUYsRUFBZUQsR0FFdkMsSUFEQSxJQUEwQkksRUFBdEJDLEVBQWtCLEdBQ2IvOEcsRUFBSSxFQUFHbTdCLEVBQU0waEYsRUFBU3ZpSCxPQUFRMEYsRUFBSW03QixFQUFLbjdCLElBQzVDKzhHLEVBQWdCbGlILEtBQUt5RixFQUFFdXlHLGlCQUFpQmdLLEVBQVM3OEcsS0FHckQsT0FEQTg4RyxFQUFXSixFQUFZLE9BQVNLLEVBQWdCaGlILEtBQUssS0FBTyxPQUFTLElBQU1naUgsRUFBZ0JoaUgsS0FBSyxLQUFPLElBQ2hHNGhILEVBQWdCLElBQUl2cUcsT0FBTzBxRyxHQUFZLElBQUkxcUcsT0FBTzBxRyxFQUFVLEtBaEMzREUsQ0FBUzdqRSxFQUFFKzBCLFFBQVMvMEIsRUFBRXdqRSxjQUFleGpFLEVBQUV1akUsV0FjL0MsU0FBU08sRUFBUzVoSCxFQUFJNmhILEdBRWxCLElBREEsSUFBSUMsRUFDS245RyxFQUFJLEVBQUdBLEVBQUkzRSxFQUFHbWEsV0FBV2xiLE9BQVEwRixJQURWLEtBRTVCbTlHLEVBQVk5aEgsRUFBR21hLFdBQVd4VixJQUNaK2xELFNBQ1YvbEQsR0FBS2s5RyxFQUFtQkMsR0FBYSxFQUFJLEVBRXpDRixFQUFTRSxFQUFXRCxHQXBCaENELENBQVM5akUsRUFBRXRqQixNQUNYLFNBQTRCdW5GLEdBQ3hCLElBQUl0bUcsRUFBT3VtRyxFQUFhQyxFQVN4QixPQVJJeG1HLEVBQVE4bEcsRUFBTTN5RSxLQUFLbXpFLEVBQVNuaUgsU0FDNUJxaUgsRUFBY2IsRUFBSS94RyxjQUFjeXVDLEVBQUVncEMsU0FDbENocEMsRUFBRW9oQyxZQUFjK2lDLEVBQVkvaUMsVUFBWXBoQyxFQUFFb2hDLFlBQzFDOGlDLEVBQWNELEVBQVNHLFVBQVV6bUcsRUFBTWtDLFFBQzNCdWtHLFVBQVV6bUcsRUFBTSxHQUFHeGMsUUFDL0JnakgsRUFBWTd4RyxZQUFZNHhHLEVBQVlHLFdBQVUsSUFDOUNKLEVBQVNocUcsV0FBV3FxRyxhQUFhSCxFQUFhRCxNQUV6Q3ZtRyxPQTdCTCxDQW1EZGpkLE9BQU9vTyxVQUNMeTFHLEVBQVEsV0FDUixhQUNBLElBQUlDLEVBVUosU0FBU0QsRUFBTXZrRSxFQUFHdWhFLEdBbUxsQixJQUE2Qjd6RyxHQWxMekJzeUMsRUFBSUEsR0FBSyxJQUNGN3pDLE9BQ0h4TCxFQUFFaU4sTUFBTSxvQkFFWjJ6RyxFQUFJOXJDLE1BQU1yMEUsTUFDVkEsS0FBS3FqSCxNQUFROWpILEVBQUVxL0MsRUFBRXI3QyxNQUNqQnZELEtBQUtzTSxPQUFTL00sRUFBRXEvQyxFQUFFN3pDLE9BQ2xCL0ssS0FBSzBFLE1BQVExRSxLQUFLc00sT0FBT2xLLE1BQ3pCcEMsS0FBS3NqSCxpQkFBbUJ0akgsS0FBS3VqSCxXQUFhdmpILEtBQUswRSxNQUFRLEtBQ3ZEMUUsS0FBS3dqSCxpQkF5S29CbDNHLEVBektrQnRNLEtBQUtzTSxPQTBLekMvTSxFQUFFLGtDQUFrQzZnSCxJQUFJLENBQzNDdGhHLFNBQVUsV0FDVjJrRyxXQUFZLFNBQ1pDLFdBQVksTUFDWkMsV0FBWXIzRyxFQUFPOHpHLElBQUksZUFDdkJ3RCxTQUFVdDNHLEVBQU84ekcsSUFBSSxhQUNyQnlELFVBQVd2M0csRUFBTzh6RyxJQUFJLGNBQ3RCMEQsWUFBYXgzRyxFQUFPOHpHLElBQUksZ0JBQ3hCMkQsV0FBWXozRyxFQUFPOHpHLElBQUksZUFDdkI0RCxZQUFhMTNHLEVBQU84ekcsSUFBSSxnQkFDeEI2RCxjQUFlMzNHLEVBQU84ekcsSUFBSSxrQkFDMUI4RCxXQUFZNTNHLEVBQU84ekcsSUFBSSxlQUN2QitELGNBQWU3M0csRUFBTzh6RyxJQUFJLGtCQUMxQmdFLGNBQWU5M0csRUFBTzh6RyxJQUFJLG9CQUMzQmlFLFlBQVkvM0csSUF2TGZ0TSxLQUFLc2tILDBCQUNxQixJQUF0QnRrSCxLQUFLcWpILE1BQU10akgsU0FDWEMsS0FBS3VrSCxRQUFVdmtILEtBQUt3a0gsUUFBVXhrSCxLQUFLeWtILFVBQVl6a0gsS0FBSzBrSCxtQkFBcUIzK0csRUFBRTZrRSxNQXFLbkYsT0EzTEF3NEMsRUFBb0IsQ0FDaEJ1QixFQUFHLE1BQ0hDLEdBQUksTUFDSkMsR0FBSSxPQUNKQyxHQUFJLFFBQ0pDLEdBQUksUUFDSkMsR0FBSSxLQUNKQyxHQUFJLFFBa0JSOUIsRUFBTStCLGVBQWlCLFNBQVN6a0YsR0FDNUIsT0FBTzE2QixFQUFFeXlHLE1BQU0vM0UsR0FBS3orQixRQUFRLFFBQVMsSUFBSUEsUUFBUSxVQUFXLE1BRWhFK0QsRUFBRXN1RSxNQUFNOHVDLEVBQU03K0csVUFBVzdDLEVBQWMsQ0FDbkMwakgsUUFBUyxXQUNMbmxILEtBQUtvbEgsa0JBQ0xwbEgsS0FBS2lKLFFBQVEsWUFFakJvOEcsU0FBVSxXQUNOcmxILEtBQUtzakgsaUJBQW1CdGpILEtBQUswRSxNQUM3QjFFLEtBQUtpSixRQUFRLFlBRWpCcThHLFdBQVksU0FBbUJoRSxHQUMzQixJQUFJaUUsRUFBVW5DLEVBQWtCOUIsRUFBR3Z0RyxPQUFTdXRHLEVBQUd6ekcsU0FDL0M3TixLQUFLd2xILHNCQUFzQkQsRUFBU2pFLEdBQ2hDaUUsR0FBV3ZsSCxLQUFLeWxILGVBQWVGLEVBQVNqRSxJQUN4Q3RoSCxLQUFLaUosUUFBUXM4RyxFQUFVLFFBQVNqRSxJQUd4Q29FLFNBQVUsV0FDTjFsSCxLQUFLMmxILFVBQVUzbEgsS0FBSzRsSCxpQkFDcEI1bEgsS0FBSzBrSCxxQkFDTDFrSCxLQUFLc2tILDJCQUVUa0Isc0JBQXVCLFNBQThCRCxFQUFTakUsR0FDMUQsSUFBSXh6RyxFQUNKLE9BQVF5M0csR0FDTixJQUFLLEtBQ0wsSUFBSyxPQUNIejNHLEdBQWtCKzNHLEVBQWF2RSxHQUMvQixNQUVGLFFBQ0V4ekcsR0FBaUIsRUFFckJBLEdBQWtCd3pHLEVBQUd4ekcsa0JBRXpCMjNHLGVBQWdCLFNBQXVCRixFQUFTakUsR0FDNUMsSUFBSXI0RyxFQUNKLE9BQVFzOEcsR0FDTixJQUFLLE1BQ0h0OEcsR0FBVzQ4RyxFQUFhdkUsR0FDeEIsTUFFRixRQUNFcjRHLEdBQVUsRUFFZCxPQUFPQSxHQUVYcTdHLHdCQUF5QixXQUNyQixJQUFJL2tDLEdBQU92L0UsS0FBS3NNLE9BQU84ekcsSUFBSSxjQUFnQixPQUFPNW1GLGNBQzlDeDVCLEtBQUt1L0UsTUFBUUEsSUFDYnYvRSxLQUFLdS9FLElBQU1BLEVBQ1h2L0UsS0FBS3FqSCxNQUFNOXdHLEtBQUssTUFBT2d0RSxHQUN2QnYvRSxLQUFLaUosUUFBUSxpQkFBa0JzMkUsS0FHdkNvbUMsVUFBVyxTQUFrQnZqSCxFQUFLMGpILEdBQzlCLElBQUlDLEVBQWVDLEVBMEhHN21GLEVBQUdTLEVBQUhULEVBekhlLzhCLEVBeUhadzlCLEVBekhpQjUvQixLQUFLMEUsTUFDL0NzaEgsS0FEQUQsRUEwSEc1QyxFQUFNK0IsZUFBZS9sRixLQUFPZ2tGLEVBQU0rQixlQUFldGxGLEtBekhYNS9CLEtBQUswRSxNQUFNM0UsU0FBV3FDLEVBQUlyQyxPQUNuRUMsS0FBSzBFLE1BQVF0QyxFQUNSMGpILEdBQVdDLEdBRUpELEdBQVVFLEdBQ2xCaG1ILEtBQUtpSixRQUFRLG9CQUFxQmpKLEtBQUswRSxPQUZ2QzFFLEtBQUtpSixRQUFRLGVBQWdCakosS0FBSzBFLFFBSzFDSyxLQUFNLFdBQ0YsSUFBaUJraEgsRUFBUUMsRUFBU0MsRUFBV0MsRUFBekMzNEcsRUFBT3pOLEtBZ0JYLE9BZkFpbUgsRUFBU2xnSCxFQUFFaEIsS0FBSy9FLEtBQUttbEgsUUFBU25sSCxNQUM5QmttSCxFQUFVbmdILEVBQUVoQixLQUFLL0UsS0FBS3FsSCxTQUFVcmxILE1BQ2hDbW1ILEVBQVlwZ0gsRUFBRWhCLEtBQUsvRSxLQUFLc2xILFdBQVl0bEgsTUFDcENvbUgsRUFBVXJnSCxFQUFFaEIsS0FBSy9FLEtBQUswbEgsU0FBVTFsSCxNQUNoQ0EsS0FBS3NNLE9BQU9qTCxHQUFHLFVBQVc0a0gsR0FBUTVrSCxHQUFHLFdBQVk2a0gsR0FBUzdrSCxHQUFHLGFBQWM4a0gsSUFDdEVwZ0gsRUFBRXF5RyxVQUFZcnlHLEVBQUVxeUcsU0FBVyxFQUM1QnA0RyxLQUFLc00sT0FBT2pMLEdBQUcsV0FBWStrSCxHQUUzQnBtSCxLQUFLc00sT0FBT2pMLEdBQUcsMENBQTBDLFNBQVNpZ0gsR0FDMUQ4QixFQUFrQjlCLEVBQUd2dEcsT0FBU3V0RyxFQUFHenpHLFVBR3JDOUgsRUFBRTh4QyxNQUFNOXhDLEVBQUVoQixLQUFLMEksRUFBS2k0RyxTQUFVajRHLEVBQU02ekcsT0FHckN0aEgsTUFFWGtzRixNQUFPLFdBQ0hsc0YsS0FBS3NNLE9BQU80L0UsU0FFaEJDLEtBQU0sV0FDRm5zRixLQUFLc00sT0FBTzYvRSxRQUVoQms2QixXQUFZLFdBQ1IsT0FBT3JtSCxLQUFLdS9FLEtBRWhCK21DLFNBQVUsV0FDTixPQUFPdG1ILEtBQUswRSxPQUFTLElBRXpCNmhILFNBQVUsU0FBa0Jua0gsRUFBSzBqSCxHQUM3QjlsSCxLQUFLd21ILGNBQWNwa0gsR0FDbkJwQyxLQUFLMmxILFVBQVV2akgsRUFBSzBqSCxJQUV4QlcsOEJBQStCLFdBQzNCLE9BQU96bUgsS0FBSzBFLFFBQVUxRSxLQUFLc2pILGtCQUUvQnNDLGNBQWUsV0FDWCxPQUFPNWxILEtBQUtzTSxPQUFPbEssT0FFdkJva0gsY0FBZSxTQUF1QjlpSCxHQUNsQzFELEtBQUtzTSxPQUFPbEssSUFBSXNCLEdBQ2hCMUQsS0FBSzBrSCxxQkFDTDFrSCxLQUFLc2tILDJCQUVUYyxnQkFBaUIsV0FDYnBsSCxLQUFLd21ILGNBQWN4bUgsS0FBSzBFLFFBRTVCOC9HLFFBQVMsV0FDTCxPQUFPeGtILEtBQUtxakgsTUFBTWpoSCxPQUV0Qm1pSCxRQUFTLFNBQWlCN2dILEdBQ3RCMUQsS0FBS3FqSCxNQUFNamhILElBQUlzQixJQUVuQitnSCxVQUFXLFdBQ1B6a0gsS0FBS3VrSCxRQUFRLEtBRWpCRyxtQkFBb0IsV0FDaEIsSUFBSXRpSCxFQUFLbUIsRUFBTW1qSCxFQUdmQSxHQUZBdGtILEVBQU1wQyxLQUFLNGxILG9CQUNYcmlILEVBQU92RCxLQUFLd2tILFlBQzhDLElBQXRCamhILEVBQUs0NEIsUUFBUS81QixJQUMvQixLQUFSQSxJQUFjc2tILEdBQXNCMW1ILEtBQUsybUgsZ0JBQ3ZDM21ILEtBQUt5a0gsYUFFckJsQixTQUFVLFdBQ04sT0FBT3ZqSCxLQUFLc00sT0FBTy9KLEdBQUcsV0FFMUJva0gsWUFBYSxXQUNULElBQUlDLEVBQWE1bUgsS0FBS3NNLE9BQU9vUyxRQUFVLEVBRXZDLE9BREExZSxLQUFLd2pILGdCQUFnQjdnSCxLQUFLM0MsS0FBSzRsSCxpQkFDeEI1bEgsS0FBS3dqSCxnQkFBZ0I5a0csU0FBV2tvRyxHQUUzQ0MsY0FBZSxXQUNYLElBQUlDLEVBQWFDLEVBQWdCcnlDLEVBR2pDLE9BRkFveUMsRUFBYzltSCxLQUFLc00sT0FBT2xLLE1BQU1yQyxPQUNoQ2duSCxFQUFpQi9tSCxLQUFLc00sT0FBTyxHQUFHeTZHLGVBQzVCaGhILEVBQUV3ckUsU0FBU3cxQyxHQUNKQSxJQUFtQkQsR0FDbkJwNUcsU0FBU3M1RyxhQUNoQnR5QyxFQUFRaG5FLFNBQVNzNUcsVUFBVS9zRyxlQUNyQmd0RyxVQUFVLGFBQWNILEdBQ3ZCQSxJQUFnQnB5QyxFQUFNL3hFLEtBQUs1QyxTQUkxQ2kzQixRQUFTLFdBQ0xoM0IsS0FBS3FqSCxNQUFNemdFLElBQUksT0FDZjVpRCxLQUFLc00sT0FBT3MyQyxJQUFJLE9BQ2hCNWlELEtBQUt3akgsZ0JBQWdCLzZHLFNBQ3JCekksS0FBS3FqSCxNQUFRcmpILEtBQUtzTSxPQUFTdE0sS0FBS3dqSCxnQkFBa0Jqa0gsRUFBRSxZQUdyRDRqSCxFQXFCUCxTQUFTMEMsRUFBYXZFLEdBQ2xCLE9BQU9BLEVBQUdwNUIsUUFBVW81QixFQUFHejNCLFNBQVd5M0IsRUFBR3I1QixTQUFXcTVCLEVBQUduNUIsVUFwTi9DLEdBdU5SKytCLEVBQVUsV0FDVixhQUNBLElBQUl0aEgsRUFBTXVoSCxFQU1WLFNBQVNELEVBQVF0b0UsRUFBR3VoRSxHQW1NcEIsSUFBcUIxL0UsR0FsTWpCbWUsRUFBSUEsR0FBSyxJQUNQaDZDLFVBQVlnNkMsRUFBRWg2QyxXQUFhLEdBQzdCZzZDLEVBQUVoNkMsVUFBVUQsU0FBV2k2QyxFQUFFaDZDLFVBQVVELFVBQVlpNkMsRUFBRWg2QyxVQUFVZ2IsTUFDdERnL0IsRUFBRXIzQyxRQUNIaEksRUFBRWlOLE1BQU0sa0JBRVBveUMsRUFBRXRqQixNQUNILzdCLEVBQUVpTixNQUFNLGdCQUVSb3lDLEVBQUVqM0MsT0F5TFc4NEIsRUF6TFVtZSxFQUFFajNDLE1BMEx0QixtQkFBbUIwN0IsS0FBSzVDLEtBekwzQmxoQyxFQUFFaU4sTUFBTSx5QkFBMkJveUMsRUFBRWozQyxNQUV6Q3c0RyxFQUFJOXJDLE1BQU1yMEUsTUFDVkEsS0FBS3FELFlBQWN1N0MsRUFBRXY3QyxVQUNyQnJELEtBQUsySCxLQUFPaTNDLEVBQUVqM0MsTUFBUXcvRyxJQUN0Qm5uSCxLQUFLMkQsTUFBUWk3QyxFQUFFajdDLE9BQVMsRUFDeEIzRCxLQUFLb25ILFVBK0pULFNBQXNCM2pILEdBRWxCLE9BREFBLEVBQVVBLEdBQVdzQyxFQUFFczVDLFVBQ2hCdDVDLEVBQUU0M0MsV0FBV2w2QyxHQUFXQSxFQUFVMmpILEVBQ3pDLFNBQVNBLEVBQVV6aEgsR0FDZixPQUFPQSxFQUFJbEMsSUFuS0U0akgsQ0FBYXpvRSxFQUFFbjdDLFNBQVdtN0MsRUFBRTBvRSxZQUM3Q3RuSCxLQUFLNEUsVUFxS1QsU0FBc0JBLEVBQVd3aUgsR0FDN0IsTUFBTyxDQUNIemlILFNBQVVDLEVBQVVELFVBQVlvQixFQUFFOHlHLFdBQVdqMEcsRUFBVUQsVUFDdkRGLFFBQVNHLEVBQVVILFNBQVdzQixFQUFFOHlHLFdBQVdqMEcsRUFBVUgsU0FDckQrTCxPQUFRNUwsRUFBVTRMLFFBQVV6SyxFQUFFOHlHLFdBQVdqMEcsRUFBVTRMLFFBQ25ETyxPQUFRbk0sRUFBVW1NLFFBQVVoTCxFQUFFOHlHLFdBQVdqMEcsRUFBVW1NLFFBQ25EN00sV0FBWVUsRUFBVVYsWUFBY3FqSCxHQUV4QyxTQUFTQSxFQUFtQm5sRSxHQUN4QixPQUFPN2lELEVBQUUsU0FBU29ELEtBQUt5a0gsRUFBVWhsRSxLQTlLcEJvbEUsQ0FBYTVvRSxFQUFFaDZDLFVBQVc1RSxLQUFLb25ILFdBQ2hEcG5ILEtBQUt1SCxPQUFTcTNDLEVBQUVyM0MsT0FBTzgzRyxZQUFjemdFLEVBQUVyM0MsT0FBTzgzRyxjQUFnQnpnRSxFQUFFcjNDLE9BQ2hFdkgsS0FBS2cxRyxNQUFRanZHLEVBQUVnMUUsWUFBWW44QixFQUFFbzJELE9BQVNoMUcsS0FBS3VILE9BQU94SCxPQUFTLElBQU02K0MsRUFBRW8yRCxNQUNuRWgxRyxLQUFLeW5ILHVCQUNMem5ILEtBQUtpaEgsSUFBTTFoSCxFQUFFcS9DLEVBQUV0akIsTUFBTXhsQixTQUFTOVYsS0FBS3EzRixRQUFRem1GLFNBQVNrRixTQUFTOVYsS0FBS3EzRixRQUFRem1GLFFBQVUsSUFBTTVRLEtBQUsySCxNQXlKbkcsT0FwTEEvQixFQUFPLENBQ0h4RCxJQUFLLHdCQUNMdUQsSUFBSyx3QkFFVHdoSCxFQUFnQnBoSCxFQUFFNnlHLGlCQXlCbEJzTyxFQUFRUSxZQUFjLFNBQXFCNW1ILEdBQ3ZDLElBQUltZ0gsRUFBTTFoSCxFQUFFdUIsR0FDWixPQUFJbWdILEVBQUl2Z0gsS0FBS2tGLEVBQUtELEtBQ1AsQ0FDSHZELElBQUs2K0csRUFBSXZnSCxLQUFLa0YsRUFBS3hELE1BQVEsR0FDM0J1RCxJQUFLczdHLEVBQUl2Z0gsS0FBS2tGLEVBQUtELE1BQVEsTUFHNUIsTUFFWEksRUFBRXN1RSxNQUFNNnlDLEVBQVE1aUgsVUFBVzdDLEVBQWMsQ0FDckNrbUgsV0FBWSxTQUFtQmpqSCxFQUFPa2pILElBQ2xDQSxFQUFjQSxHQUFlLElBQ2I3bkgsT0FDWkMsS0FBSzZuSCxtQkFBbUJuakgsRUFBT2tqSCxHQUN4QjVuSCxLQUFLZzFHLE9BQVNoMUcsS0FBSzRFLFVBQVVILFFBQ3BDekUsS0FBSzhuSCxlQUFlcGpILElBQ1oxRSxLQUFLZzFHLE9BQVNoMUcsS0FBSzRFLFVBQVVELFNBQ3JDM0UsS0FBSytuSCxnQkFBZ0JyakgsR0FFckIxRSxLQUFLZ29ILFNBRVRob0gsS0FBS2lKLFFBQVEsV0FBWWpKLEtBQUsySCxLQUFNaWdILEdBQWEsSUFFckRLLFFBQVMsU0FBZ0J2akgsRUFBT2tqSCxJQUM1QkEsRUFBY0EsR0FBZSxJQUNiN25ILFFBQVVDLEtBQUtrb0gsZ0JBQWdCbm9ILE9BQzNDQyxLQUFLbW9ILG1CQUFtQnpqSCxFQUFPa2pILEdBQ3hCQSxFQUFZN25ILE9BQ25CQyxLQUFLNm5ILG1CQUFtQm5qSCxFQUFPa2pILElBQ3ZCNW5ILEtBQUtrb0gsZ0JBQWdCbm9ILFFBQVVDLEtBQUs0RSxVQUFVRCxVQUN0RDNFLEtBQUsrbkgsZ0JBQWdCcmpILEdBRXpCMUUsS0FBS2lKLFFBQVEsV0FBWWpKLEtBQUsySCxLQUFNaWdILEdBQWEsSUFFckRDLG1CQUFvQixTQUEyQm5qSCxFQUFPa2pILEdBQ2xELElBQUlRLEVBQ0pBLEVBQVlwb0gsS0FBS3FvSCx3QkFBd0IzakgsRUFBT2tqSCxHQUNoRDVuSCxLQUFLa29ILGdCQUFrQkUsRUFBVTF1RyxXQUFXMjVCLE9BQzVDcnpDLEtBQUtpaEgsSUFBSTkzRyxLQUFLaS9HLEdBQVc1bkUsUUFBUXhnRCxLQUFLc29ILFdBQVc1akgsRUFBT2tqSCxJQUFjNStHLE9BQU9oSixLQUFLdW9ILFdBQVc3akgsRUFBT2tqSCxLQUV4R08sbUJBQW9CLFNBQTJCempILEVBQU9rakgsR0FDbEQsSUFBSVEsRUFBV0YsRUFFZkEsR0FEQUUsRUFBWXBvSCxLQUFLcW9ILHdCQUF3QjNqSCxFQUFPa2pILElBQ3BCbHVHLFdBQVcyNUIsT0FDdkNyekMsS0FBS2tvSCxnQkFBZ0I3eUMsTUFBTSt5QyxHQUMzQnBvSCxLQUFLa29ILGdCQUFrQkEsR0FFM0JKLGVBQWdCLFNBQXVCcGpILEdBQ25DLElBQUkzRCxFQUFXZixLQUFLNEUsVUFBVUgsUUFDOUJ6RSxLQUFLeW5ILHVCQUNMMW1ILEdBQVlmLEtBQUtpaEgsSUFBSTkzRyxLQUFLcEksRUFBUyxDQUMvQjJELE1BQU9BLEVBQ1BrTSxRQUFTNVEsS0FBSzJILFNBR3RCb2dILGdCQUFpQixTQUF3QnJqSCxHQUNyQyxJQUFJM0QsRUFBV2YsS0FBSzRFLFVBQVVELFNBQzlCM0UsS0FBS3luSCx1QkFDTDFtSCxHQUFZZixLQUFLaWhILElBQUk5M0csS0FBS3BJLEVBQVMsQ0FDL0IyRCxNQUFPQSxFQUNQa00sUUFBUzVRLEtBQUsySCxTQUd0QnFnSCxPQUFRLFdBQ0pob0gsS0FBS2loSCxJQUFJcmhHLFFBQ1Q1ZixLQUFLeW5ILHdCQUVUWSx3QkFBeUIsU0FBZ0MzakgsRUFBT2tqSCxHQUM1RCxJQUFpQlksRUFBYi82RyxFQUFPek4sS0FhWCxPQVpBd29ILEVBQVc5NkcsU0FBUys2Ryx5QkFDcEIxaUgsRUFBRXFCLEtBQUt3Z0gsR0FBYSxTQUEyQjFqSCxHQUMzQyxJQUFJKzhHLEVBQUs3K0QsRUFDVEEsRUFBVTMwQyxFQUFLaTdHLGFBQWFoa0gsRUFBT1IsR0FDbkMrOEcsRUFBTTFoSCxFQUFFa08sRUFBSzdJLFVBQVVWLFdBQVdrK0MsSUFBVTFoRCxLQUFLa0YsRUFBS0QsSUFBS3pCLEdBQVl4RCxLQUFLa0YsRUFBS3hELElBQUtxTCxFQUFLMjVHLFVBQVVsakgsSUFBYTRSLFNBQVNySSxFQUFLNHBGLFFBQVFuekYsV0FBYSxJQUFNdUosRUFBSzRwRixRQUFRNm9CLFlBQ3hLc0ksRUFBU3QzRyxZQUFZK3ZHLEVBQUksT0FFN0JqaEgsS0FBS3FELFdBQWFBLEVBQVUsQ0FDeEIyOEUsVUFBV2hnRixLQUFLcTNGLFFBQVFoMEYsVUFDeEJpNEIsS0FBTWt0RixFQUNONzBDLFFBQVNqdkUsSUFFTm5GLEVBQUVpcEgsSUFFYkQsV0FBWSxTQUFtQjdqSCxFQUFPa2pILEdBQ2xDLE9BQU81bkgsS0FBSzRFLFVBQVVtTSxPQUFTL1EsS0FBSzRFLFVBQVVtTSxPQUFPLENBQ2pEck0sTUFBT0EsRUFDUGtqSCxZQUFhQSxFQUNiaDNHLFFBQVM1USxLQUFLMkgsT0FDYixNQUVUMmdILFdBQVksU0FBbUI1akgsRUFBT2tqSCxHQUNsQyxPQUFPNW5ILEtBQUs0RSxVQUFVNEwsT0FBU3hRLEtBQUs0RSxVQUFVNEwsT0FBTyxDQUNqRDlMLE1BQU9BLEVBQ1BrakgsWUFBYUEsRUFDYmgzRyxRQUFTNVEsS0FBSzJILE9BQ2IsTUFFVDgvRyxxQkFBc0IsV0FDbEJ6bkgsS0FBS2tvSCxnQkFBa0Izb0gsS0FFM0JtcEgsYUFBYyxTQUFxQmhrSCxFQUFPaUIsR0FDdEMsT0FBT0ksRUFBRSttQyxTQUFTbm5DLEdBQU9JLEVBQUVzdUUsTUFBTSxDQUM3QnMwQyxPQUFRamtILEdBQ1RpQixHQUFPQSxHQUVkazJCLE9BQVEsU0FBZ0JuM0IsR0FDcEIsSUFBSStJLEVBQU96TixLQUFNNG9ILEdBQVcsRUFBT0MsR0FBYSxFQUFPQyxFQUFXLEVBU2xFLFNBQVN4SixFQUFLc0ksR0FDTmlCLElBR0pBLEdBQWEsRUFDYmpCLEdBQWVBLEdBQWUsSUFBSTNoSCxNQUFNLEVBQUd3SCxFQUFLOUosT0FDaERtbEgsRUFBV2xCLEVBQVk3bkgsT0FDdkIwTixFQUFLazZHLFdBQVdqakgsRUFBT2tqSCxHQUNuQmtCLEVBQVdyN0csRUFBSzlKLE9BQVM4SixFQUFLdW5HLE9BQzlCdm5HLEVBQUt4RSxRQUFRLGlCQUFrQnZFLElBakJ2QzFFLEtBQUswd0UsU0FDTDF3RSxLQUFLMHdFLE9BQVMsV0FDVms0QyxHQUFXLEVBQ1huN0csRUFBS2lqRSxPQUFTbnhFLEVBQUVxckUsS0FDaEJuOUQsRUFBS3VuRyxPQUFTdm5HLEVBQUt4RSxRQUFRLGdCQUFpQnZFLElBRWhEMUUsS0FBS3VILE9BQU83QyxFQUFPNDZHLEdBY25CLFNBQWVzSSxHQUNYQSxFQUFjQSxHQUFlLElBQ3hCZ0IsR0FBWUUsRUFBV3I3RyxFQUFLOUosUUFDN0I4SixFQUFLaWpFLE9BQVNueEUsRUFBRXFyRSxLQUNoQmsrQyxHQUFZbEIsRUFBWTduSCxPQUN4QjBOLEVBQUt3NkcsUUFBUXZqSCxFQUFPa2pILEVBQVkzaEgsTUFBTSxFQUFHd0gsRUFBSzlKLE1BQVFtbEgsSUFDdERyN0csRUFBS3VuRyxPQUFTdm5HLEVBQUt4RSxRQUFRLGdCQUFpQnZFLFFBbkJuRG1rSCxHQUFjdkosRUFBSyxLQXVCeEI1dUMsT0FBUW54RSxFQUFFcXJFLEtBQ1Z4eEIsTUFBTyxXQUNIcDVDLEtBQUtnb0gsU0FDTGhvSCxLQUFLMHdFLFNBQ0wxd0UsS0FBS2lKLFFBQVEsWUFFakJzeEUsUUFBUyxXQUNMLE9BQU92NkUsS0FBS2loSCxJQUFJMStHLEdBQUcsV0FFdkJ5MEIsUUFBUyxXQUNMaDNCLEtBQUtpaEgsSUFBTTFoSCxFQUFFLFlBR2QybkgsRUF2TEcsR0ErTVY2QixFQUFPLFdBQ1AsYUFDQSxTQUFTQSxFQUFLbnFFLEVBQUd1aEUsR0FDYixJQUFJMXlHLEVBQU96TixNQUNYNCtDLEVBQUlBLEdBQUssSUFDRnRqQixNQUNILzdCLEVBQUVpTixNQUFNLG9CQUVaMnpHLEVBQUk5ckMsTUFBTXIwRSxNQUNWQSxLQUFLZ3BILE1BQVF6cEgsRUFBRXEvQyxFQUFFdGpCLE1BQ2pCdDdCLEtBQUswRSxNQUFRLEtBQ2IxRSxLQUFLaXBILFNBQVdsakgsRUFBRTB0QixJQUFJbXJCLEVBQUVxcUUsVUFDeEIsU0FBMkJDLEdBQ3ZCLElBQUk1dEYsRUFBTzd0QixFQUFLdTdHLE1BQU05bUgsS0FBS2duSCxFQUFTNXRGLE1BQU1wcEIsUUFFMUMsT0FEQWczRyxFQUFTNXRGLEtBQU9BLEVBQUt2N0IsT0FBU3U3QixFQUFPLzdCLEVBQUUsU0FBUyt1QixTQUFTN2dCLEVBQUt1N0csT0FDdkQsSUFBSTlCLEVBQVFnQyxFQUFVL0ksTUF5SHJDLE9BdEhBcDZHLEVBQUVzdUUsTUFBTTAwQyxFQUFLemtILFVBQVc3QyxFQUFjLENBQ2xDMG5ILG1CQUFvQixTQUEyQjdILEdBQzNDdGhILEtBQUtpSixRQUFRLG9CQUFxQjFKLEVBQUUraEgsRUFBR3gxRyxpQkFFM0NzOUcsWUFBYSxTQUFvQm5xSCxFQUFNMlIsRUFBU2czRyxFQUFhNVMsR0FDekRoMUcsS0FBS2dwSCxNQUFNajZHLFlBQVkvTyxLQUFLcTNGLFFBQVF6M0UsTUFBTzVmLEtBQUtxcEgscUJBQ2hEcnBILEtBQUtpSixRQUFRLGtCQUFtQjJILEVBQVNnM0csRUFBYTVTLElBRTFEc1UsV0FBWSxXQUNSdHBILEtBQUtncEgsTUFBTWo2RyxZQUFZL08sS0FBS3EzRixRQUFRejNFLE1BQU81ZixLQUFLcXBILHFCQUNoRHJwSCxLQUFLaUosUUFBUSxtQkFFakJzZ0gsV0FBWSxXQUNSdnBILEtBQUtpSixRQUFRMHpCLE1BQU0zOEIsS0FBTTQ4QixZQUU3QnlzRixrQkFBbUIsV0FDZixPQUFPdGpILEVBQUU2ekUsTUFBTTU1RSxLQUFLaXBILFVBQ3BCLFNBQXdCcjRHLEdBQ3BCLE9BQU9BLEVBQVEycEUsY0FHdkJpdkMsZ0JBQWlCLFdBQ2IsT0FBT3hwSCxLQUFLZ3BILE1BQU05bUgsS0FBS2xDLEtBQUtKLFVBQVVzZ0gsYUFFMUN1SixjQUFlLFdBQ1gsSUFBSUMsRUFBYzFwSCxLQUFLMnBILHNCQUN2QkQsR0FBZUEsRUFBWXI2RyxZQUFZclAsS0FBS3EzRixRQUFReE8sU0FFeEQrZ0MsZUFBZ0IsU0FBdUIzSSxHQUNuQyxJQUFJNEksRUFBT0MsRUFBVUMsRUFBZUMsRUFFcENGLEdBREFELEVBQVE1SSxFQUFJbmlHLFdBQVc0bUUsS0FDSnU3QixFQUFJZ0osYUFBWSxHQUNuQ0YsRUFBZ0IvcEgsS0FBS2dwSCxNQUFNNW1DLFlBQzNCNG5DLEVBQWFocUgsS0FBS2dwSCxNQUFNcGxDLFNBQVd2dkQsU0FBU3IwQixLQUFLZ3BILE1BQU01SSxJQUFJLGNBQWUsSUFBTS9yRixTQUFTcjBCLEtBQUtncEgsTUFBTTVJLElBQUksaUJBQWtCLElBQ3RIeUosRUFBUSxFQUNSN3BILEtBQUtncEgsTUFBTTVtQyxVQUFVMm5DLEVBQWdCRixHQUM5QkcsRUFBYUYsR0FDcEI5cEgsS0FBS2dwSCxNQUFNNW1DLFVBQVUybkMsR0FBaUJELEVBQVdFLEtBR3pEamxILEtBQU0sV0FDRixJQUFpQm1sSCxFQUFiejhHLEVBQU96TixLQU1YLE9BTEFrcUgsRUFBb0Jua0gsRUFBRWhCLEtBQUsvRSxLQUFLbXBILG1CQUFvQm5wSCxNQUNwREEsS0FBS2dwSCxNQUFNM25ILEdBQUcsV0FBWXJCLEtBQUtKLFVBQVVzZ0gsV0FBWWdLLEdBQ3JEbmtILEVBQUVxQixLQUFLcEgsS0FBS2lwSCxVQUFVLFNBQVNyNEcsR0FDM0JBLEVBQVE4d0csT0FBTyxpQkFBa0JqMEcsRUFBSzg3RyxXQUFZOTdHLEdBQU1pMEcsT0FBTyxnQkFBaUJqMEcsRUFBSzg3RyxXQUFZOTdHLEdBQU1pMEcsT0FBTyxnQkFBaUJqMEcsRUFBSzg3RyxXQUFZOTdHLEdBQU1pMEcsT0FBTyxXQUFZajBHLEVBQUsyN0csWUFBYTM3RyxHQUFNaTBHLE9BQU8sVUFBV2owRyxFQUFLNjdHLFdBQVk3N0csTUFFak96TixNQUVYbXFILE9BQVEsV0FDSixPQUFPbnFILEtBQUtncEgsTUFBTTU1RyxTQUFTcFAsS0FBS3EzRixRQUFReGhELE9BRTVDQSxLQUFNLFdBQ0Y3MUMsS0FBS2dwSCxNQUFNbHpHLFNBQVM5VixLQUFLcTNGLFFBQVF4aEQsT0FFckNFLE1BQU8sV0FDSC8xQyxLQUFLZ3BILE1BQU0zNUcsWUFBWXJQLEtBQUtxM0YsUUFBUXhoRCxNQUNwQzcxQyxLQUFLeXBILGlCQUVUVyxxQkFBc0IsU0FBOEI3cUMsR0FDaER2L0UsS0FBS2dwSCxNQUFNejJHLEtBQUssTUFBT2d0RSxJQUUzQjhxQywyQkFBNEIsU0FBb0N2cEIsR0FDNUQsSUFBSXdwQixFQUFjQyxFQUFzQjVoRyxFQU94QyxPQU5BNGhHLEVBQWF2cUgsS0FBSzJwSCxzQkFDbEJXLEVBQWV0cUgsS0FBS3dwSCxtQkFLQyxLQURyQjdnRyxHQURBQSxJQURBQSxHQURXNGhHLEVBQWFELEVBQWE3ckcsTUFBTThyRyxJQUFlLEdBQ3BDenBCLEdBQ0MsSUFBTXdwQixFQUFhdnFILE9BQVMsR0FBSyxJQUNqQyxFQUFJdXFILEVBQWF2cUgsT0FBUyxFQUFJNG9CLEdBQzVCLEtBQU8yaEcsRUFBYTlnRixHQUFHN2dCLElBRXBENmhHLFVBQVcsU0FBbUJkLEdBQzFCMXBILEtBQUt5cEgsaUJBQ0RDLEVBQWNBLEdBQWVBLEVBQVl4M0csV0FDekN3M0csRUFBWTV6RyxTQUFTOVYsS0FBS3EzRixRQUFReE8sUUFDbEM3b0YsS0FBSzRwSCxlQUFlRixLQUc1QmUsa0JBQW1CLFNBQTJCeEosR0FDMUMsT0FBT0EsR0FBT0EsRUFBSWxoSCxPQUFTbW5ILEVBQVFRLFlBQVl6RyxHQUFPLE1BRTFEMEksb0JBQXFCLFdBQ2pCLElBQUlELEVBQWMxcEgsS0FBS3dwSCxrQkFBa0IvdEYsT0FBT3o3QixLQUFLSixVQUFVaXBGLFFBQVEzMkUsUUFDdkUsT0FBT3czRyxFQUFZM3BILE9BQVMycEgsRUFBYyxNQUU5Q2dCLGlCQUFrQixXQUNkLElBQUloQixFQUFjMXBILEtBQUt3cEgsa0JBQWtCdDNHLFFBQ3pDLE9BQU93M0csRUFBWTNwSCxPQUFTMnBILEVBQWMsTUFFOUM3dEYsT0FBUSxTQUFnQm4zQixHQUNwQixJQUFJaW1ILEVBQWdCam1ILElBQVUxRSxLQUFLMEUsTUFLbkMsT0FKSWltSCxJQUNBM3FILEtBQUswRSxNQUFRQSxFQUNicUIsRUFBRXFCLEtBQUtwSCxLQUFLaXBILFVBR2hCLFNBQXVCcjRHLEdBQ25CQSxFQUFRaXJCLE9BQU9uM0IsT0FGWmltSCxHQUtYL3FHLE1BQU8sV0FDSDdaLEVBQUVxQixLQUFLcEgsS0FBS2lwSCxVQUdaLFNBQXNCcjRHLEdBQ2xCQSxFQUFRd29DLFdBSFpwNUMsS0FBSzBFLE1BQVEsS0FDYjFFLEtBQUtncEgsTUFBTWx6RyxTQUFTOVYsS0FBS3EzRixRQUFRejNFLFFBS3JDb1gsUUFBUyxXQUNMaDNCLEtBQUtncEgsTUFBTXBtRSxJQUFJLE9BQ2Y1aUQsS0FBS2dwSCxNQUFRenBILEVBQUUsU0FDZndHLEVBQUVxQixLQUFLcEgsS0FBS2lwSCxVQUNaLFNBQXdCcjRHLEdBQ3BCQSxFQUFRb21CLGdCQUliK3hGLEVBeElBLEdBMElQNkIsRUFBYyxXQUNkLGFBQ0EsSUFBSXhyRixFQUFJMnBGLEVBQUt6a0gsVUFDYixTQUFTc21ILElBQ0w3QixFQUFLcHNGLE1BQU0zOEIsS0FBTSxHQUFHaUcsTUFBTXpCLEtBQUtvNEIsVUFBVyxJQXNDOUMsT0FwQ0E3MkIsRUFBRXN1RSxNQUFNdTJDLEVBQVl0bUgsVUFBV3lrSCxFQUFLemtILFVBQVcsQ0FDM0N1eEMsS0FBTSxXQUVGLE9BREM3MUMsS0FBS3FwSCxxQkFBdUJycEgsS0FBSzZxSCxRQUMzQnpyRixFQUFFeVcsS0FBS2xaLE1BQU0zOEIsS0FBTSxHQUFHaUcsTUFBTXpCLEtBQUtvNEIsVUFBVyxLQUV2RG1aLE1BQU8sV0FFSCxPQURBLzFDLEtBQUs4cUgsUUFDRTFyRixFQUFFMlcsTUFBTXBaLE1BQU0zOEIsS0FBTSxHQUFHaUcsTUFBTXpCLEtBQUtvNEIsVUFBVyxLQUV4RHdzRixZQUFhLFdBTVQsT0FMSXBwSCxLQUFLcXBILG9CQUNMcnBILEtBQUs4cUgsUUFFTDlxSCxLQUFLbXFILFVBQVlucUgsS0FBSzZxSCxRQUVuQnpyRixFQUFFZ3FGLFlBQVl6c0YsTUFBTTM4QixLQUFNLEdBQUdpRyxNQUFNekIsS0FBS280QixVQUFXLEtBRTlEMHNGLFdBQVksV0FNUixPQUxJdHBILEtBQUtxcEgsb0JBQ0xycEgsS0FBSzhxSCxRQUVMOXFILEtBQUttcUgsVUFBWW5xSCxLQUFLNnFILFFBRW5CenJGLEVBQUVrcUYsV0FBVzNzRixNQUFNMzhCLEtBQU0sR0FBR2lHLE1BQU16QixLQUFLbzRCLFVBQVcsS0FFN0R3dEYscUJBQXNCLFNBQThCN3FDLEdBRWhELE9BREF2L0UsS0FBS2dwSCxNQUFNNUksSUFBWSxRQUFSN2dDLEVBQWdCdi9FLEtBQUtvZ0gsSUFBSU8sSUFBTTNnSCxLQUFLb2dILElBQUlRLEtBQ2hEeGhGLEVBQUVnckYscUJBQXFCenRGLE1BQU0zOEIsS0FBTSxHQUFHaUcsTUFBTXpCLEtBQUtvNEIsVUFBVyxLQUV2RWt1RixNQUFPLFdBQ0g5cUgsS0FBS2dwSCxNQUFNMTZFLFFBRWZ1OEUsTUFBTyxXQUNIN3FILEtBQUtncEgsTUFBTTVJLElBQUksVUFBVyxZQUczQndLLEVBMUNPLEdBNENkRyxFQUFZLFdBQ1osYUFDQSxTQUFTQSxFQUFVbnNFLEVBQUd1aEUsR0FDbEIsSUFBSTZLLEVBQVdDLEVBQVdDLEVBQWNDLEVBQVlDLEVBQVlDLEVBQVdDLEVBQWFDLEVBQWFDLEVBQWNDLEVBQWdCQyxHQUNuSTlzRSxFQUFJQSxHQUFLLElBQ0Y3ekMsT0FDSHhMLEVBQUVpTixNQUFNLGlCQUVQb3lDLEVBQUVxaEUsTUFDSDFnSCxFQUFFaU4sTUFBTSxnQkFFUG95QyxFQUFFK3NFLFVBQ0hwc0gsRUFBRWlOLE1BQU0scUJBRVoyekcsRUFBSTlyQyxNQUFNcjBFLE1BQ1ZBLEtBQUsyckgsU0FBVy9zRSxFQUFFK3NFLFNBQ2xCM3JILEtBQUtvRCxVQUFZMkMsRUFBRXdyRSxTQUFTM3lCLEVBQUV4N0MsV0FBYXc3QyxFQUFFeDdDLFVBQVksRUFDekRwRCxLQUFLK0ssTUFBUTZ6QyxFQUFFN3pDLE1BQ2YvSyxLQUFLaWdILEtBQU9yaEUsRUFBRXFoRSxLQUNkamdILEtBQUs0ckgsU0FBVSxFQUNmNXJILEtBQUs4TyxRQUFTLEVBQ2Q5TyxLQUFLK0ssTUFBTXc0RyxZQUFjdmpILEtBQUs2ckgsV0FDOUI3ckgsS0FBS3UvRSxJQUFNdi9FLEtBQUsrSyxNQUFNczdHLGFBQ3RCcm1ILEtBQUs4ckgsU0FDTDlySCxLQUFLaWdILEtBQUtsN0csT0FBTzI4RyxPQUFPLG9CQUFxQjFoSCxLQUFLK3JILHFCQUFzQi9ySCxNQUFNMGhILE9BQU8saUJBQWtCMWhILEtBQUtnc0gsa0JBQW1CaHNILE1BQU0waEgsT0FBTyxnQkFBaUIxaEgsS0FBS2lzSCxpQkFBa0Jqc0gsTUFBTTBoSCxPQUFPLGdCQUFpQjFoSCxLQUFLa3NILGlCQUFrQmxzSCxNQUFNMGhILE9BQU8sa0JBQW1CMWhILEtBQUttc0gsbUJBQW9CbnNILE1BQU0waEgsT0FBTyxpQkFBa0IxaEgsS0FBS29zSCxrQkFBbUJwc0gsTUFDelZnckgsRUFBWWxyRixFQUFFOS9CLEtBQU0sV0FBWSxPQUFRLGNBQ3hDaXJILEVBQVluckYsRUFBRTkvQixLQUFNLGFBQWMsY0FDbENrckgsRUFBZXByRixFQUFFOS9CLEtBQU0sV0FBWSxTQUFVLGlCQUM3Q21ySCxFQUFhcnJGLEVBQUU5L0IsS0FBTSxXQUFZLFNBQVUsZUFDM0NvckgsRUFBYXRyRixFQUFFOS9CLEtBQU0sV0FBWSxlQUNqQ3FySCxFQUFZdnJGLEVBQUU5L0IsS0FBTSxXQUFZLE9BQVEsY0FDeENzckgsRUFBY3hyRixFQUFFOS9CLEtBQU0sV0FBWSxPQUFRLGdCQUMxQ3VySCxFQUFjenJGLEVBQUU5L0IsS0FBTSxXQUFZLFNBQVUsZ0JBQzVDd3JILEVBQWUxckYsRUFBRTkvQixLQUFNLFdBQVksU0FBVSxpQkFDN0N5ckgsRUFBaUIzckYsRUFBRTkvQixLQUFNLGdCQUFpQixtQkFDMUMwckgsRUFBc0I1ckYsRUFBRTkvQixLQUFNLGdCQUFpQix3QkFDL0NBLEtBQUsrSyxNQUFNaEcsT0FBTzI4RyxPQUFPLFVBQVdzSixFQUFXaHJILE1BQU0waEgsT0FBTyxVQUFXdUosRUFBV2pySCxNQUFNMGhILE9BQU8sYUFBY3dKLEVBQWNsckgsTUFBTTBoSCxPQUFPLFdBQVl5SixFQUFZbnJILE1BQU0waEgsT0FBTyxXQUFZMEosRUFBWXBySCxNQUFNMGhILE9BQU8sVUFBVzJKLEVBQVdyckgsTUFBTTBoSCxPQUFPLFlBQWE0SixFQUFhdHJILE1BQU0waEgsT0FBTyxZQUFhNkosRUFBYXZySCxNQUFNMGhILE9BQU8sYUFBYzhKLEVBQWN4ckgsTUFBTTBoSCxPQUFPLGVBQWdCK0osRUFBZ0J6ckgsTUFBTTBoSCxPQUFPLG9CQUFxQmdLLEVBQXFCMXJILE1BQU0waEgsT0FBTyxpQkFBa0IxaEgsS0FBS3FzSCxrQkFBbUJyc0gsTUFrTzlmLE9BaE9BK0YsRUFBRXN1RSxNQUFNMDJDLEVBQVV6bUgsVUFBVyxDQUN6QnduSCxPQUFRLFdBQ0osSUFBSXgvRyxFQUFRZ2dILEVBQ1poZ0gsRUFBU3RNLEtBQUsrSyxNQUFNdUIsUUFBVS9NLEVBQUUsU0FDaEMrc0gsRUFBUXRzSCxLQUFLaWdILEtBQUsrSSxPQUFTenBILEVBQUUsU0FDN0IrTSxFQUFPakwsR0FBRyxXQUFXLFNBQVNpZ0gsR0FDMUIsSUFBSXh5RyxFQUFReTlHLEVBQVVDLEVBQ3RCMTlHLEVBQVNwQixTQUFTaTZFLGNBQ2xCNGtDLEVBQVdELEVBQU0vcEgsR0FBR3VNLEdBQ3BCMDlHLEVBQVlGLEVBQU0vOUUsSUFBSXovQixHQUFRL08sT0FBUyxFQUNuQ2dHLEVBQUVxeUcsV0FBYW1VLEdBQVlDLEtBQzNCbEwsRUFBR3h6RyxpQkFDSHd6RyxFQUFHdG9HLDJCQUNIalQsRUFBRTh4QyxPQUFNLFdBQ0p2ckMsRUFBTzQvRSxlQUluQm9nQyxFQUFNanJILEdBQUcsZ0JBQWdCLFNBQVNpZ0gsR0FDOUJBLEVBQUd4ekcscUJBR1hpK0cscUJBQXNCLFNBQTZCOXNILEVBQU1naUgsR0FDckRqaEgsS0FBS21oSCxPQUFPRixJQUVoQm1MLGtCQUFtQixXQUNmcHNILEtBQUt5c0gsZUFFVE4sbUJBQW9CLFNBQTJCbHRILEVBQU0yUixFQUFTZzNHLEVBQWE1UyxHQUN2RWgxRyxLQUFLeXNILGNBQ0x6c0gsS0FBSzJySCxTQUFTMWlILFFBQVEsU0FBVTIrRyxFQUFhNVMsRUFBT3BrRyxJQUV4RG83RyxrQkFBbUIsU0FBMEIvc0gsRUFBTTJSLEVBQVNsTSxHQUN4RDFFLEtBQUsyckgsU0FBUzFpSCxRQUFRLGVBQWdCdkUsRUFBT2tNLElBRWpEcTdHLGlCQUFrQixTQUF5Qmh0SCxFQUFNMlIsRUFBU2xNLEdBQ3REMUUsS0FBSzJySCxTQUFTMWlILFFBQVEsY0FBZXZFLEVBQU9rTSxJQUVoRHM3RyxpQkFBa0IsU0FBeUJqdEgsRUFBTTJSLEVBQVNsTSxHQUN0RDFFLEtBQUsyckgsU0FBUzFpSCxRQUFRLGVBQWdCdkUsRUFBT2tNLElBRWpEODdHLFdBQVksV0FDUjFzSCxLQUFLMnNILGlCQUFtQjNzSCxLQUFLaWdILEtBQUtwa0YsT0FBTzc3QixLQUFLK0ssTUFBTXU3RyxhQUV4RHNHLFdBQVksV0FDSjVzSCxLQUFLK0ssTUFBTTA3RyxpQ0FDWHptSCxLQUFLMnJILFNBQVMxaUgsUUFBUSxTQUFVakosS0FBSytLLE1BQU11N0csYUFHbkR1RyxjQUFlLFNBQXNCNXRILEVBQU1xaUgsR0FDdkMsSUFBSW9JLEdBQ0FBLEVBQWMxcEgsS0FBS2lnSCxLQUFLMEosd0JBQ3hCM3BILEtBQUttaEgsT0FBT3VJLElBQWdCcEksRUFBR3h6RyxrQkFHdkNnL0csWUFBYSxTQUFvQjd0SCxFQUFNcWlILEdBQ25DLElBQUlvSSxHQUNBQSxFQUFjMXBILEtBQUtpZ0gsS0FBSzBKLHVCQUN4QjNwSCxLQUFLbWhILE9BQU91SSxJQUFnQnBJLEVBQUd4ekcsa0JBQ3hCNDdHLEVBQWMxcEgsS0FBS2lnSCxLQUFLeUsscUJBQy9CMXFILEtBQUtvaEgsYUFBYXNJLElBQWdCcEksRUFBR3h6RyxrQkFHN0NpL0csWUFBYSxXQUNUL3NILEtBQUsrMUMsU0FFVGkzRSxXQUFZLFdBQ1JodEgsS0FBS2l0SCxZQUFZLElBRXJCQyxhQUFjLFdBQ1ZsdEgsS0FBS2l0SCxXQUFXLElBRXBCRSxhQUFjLFdBQ08sUUFBYm50SCxLQUFLdS9FLEtBQWlCdi9FLEtBQUsrSyxNQUFNODdHLGlCQUNqQzdtSCxLQUFLb2hILGFBQWFwaEgsS0FBS2lnSCxLQUFLeUsscUJBR3BDMEMsY0FBZSxXQUNNLFFBQWJwdEgsS0FBS3UvRSxLQUFpQnYvRSxLQUFLK0ssTUFBTTg3RyxpQkFDakM3bUgsS0FBS29oSCxhQUFhcGhILEtBQUtpZ0gsS0FBS3lLLHFCQUdwQzJDLGdCQUFpQixTQUF3QnJvSCxFQUFHTixHQUN4QzFFLEtBQUsyc0gsY0FBY2pvSCxHQUFTMUUsS0FBS2lnSCxLQUFLcGtGLE9BQU9uM0IsR0FBUzFFLEtBQUtpZ0gsS0FBS3JnRyxTQUVwRTB0RyxxQkFBc0IsV0FDbEJ0dEgsS0FBS3lzSCxlQUVUSixrQkFBbUIsU0FBMEJybkgsRUFBR3U2RSxHQUN4Q3YvRSxLQUFLdS9FLE1BQVFBLElBQ2J2L0UsS0FBS3UvRSxJQUFNQSxFQUNYdi9FLEtBQUtpZ0gsS0FBS21LLHFCQUFxQjdxQyxLQUd2Q2d1QyxjQUFlLFdBQ1h2dEgsS0FBS3VzSCxZQUFjdnNILEtBQUs2MUMsUUFFNUI4MkUsY0FBZSxTQUFzQmpvSCxHQUVqQyxPQURBQSxFQUFRcUIsRUFBRXlyRSxTQUFTOXNFLEdBQVNBLEVBQVExRSxLQUFLK0ssTUFBTXU3RyxZQUFjLElBQ2hEdm1ILFFBQVVDLEtBQUtvRCxXQUVoQ3FwSCxZQUFhLFdBQ1QsSUFBSS9DLEVBQWFocEgsRUFBTTBCLEVBQUtzQyxFQUFPOG9ILEVBQStCanhHLEVBQ2xFbXRHLEVBQWMxcEgsS0FBS2lnSCxLQUFLeUssbUJBQ3hCaHFILEVBQU9WLEtBQUtpZ0gsS0FBS3dLLGtCQUFrQmYsR0FDbkN0bkgsRUFBTXBDLEtBQUsrSyxNQUFNNjZHLGlCQUNibGxILEdBQVNxRixFQUFFc3lHLGNBQWNqMkcsSUFBU3BDLEtBQUsrSyxNQUFNNDdHLGNBTzdDM21ILEtBQUsrSyxNQUFNMDVHLGFBTlgvL0csRUFBUXkrRyxFQUFNK0IsZUFBZTlpSCxHQUM3Qm9ySCxFQUFlem5ILEVBQUV1eUcsaUJBQWlCNXpHLElBRWxDNlgsRUFEa0IsSUFBSTFFLE9BQU8sT0FBUzIxRyxFQUFlLFNBQVUsS0FDdkM5OUUsS0FBS2h2QyxFQUFLMEIsT0FDekJwQyxLQUFLK0ssTUFBTXc1RyxRQUFRbmlILEVBQU1tYSxFQUFNLE1BS2hEa3hHLFVBQVcsV0FDUCxPQUFPenRILEtBQUs0ckgsU0FFaEIvMUcsT0FBUSxXQUNKN1YsS0FBSzRySCxTQUFVLEdBRW5COEIsUUFBUyxXQUNMMXRILEtBQUs0ckgsU0FBVSxHQUVuQlcsU0FBVSxXQUNOLE9BQU92c0gsS0FBSzhPLFFBRWhCKzhHLFNBQVUsV0FDTixRQUFJN3JILEtBQUt1c0gsZUFFR3ZzSCxLQUFLeXRILGFBQWV6dEgsS0FBSzJySCxTQUFTdDhDLE9BQU8sYUFHakRydkUsS0FBSzhPLFFBQVMsRUFDZDlPLEtBQUsyckgsU0FBUzFpSCxRQUFRLFdBQ2YsSUFHZjBrSCxXQUFZLFdBQ1IsT0FBSzN0SCxLQUFLdXNILGFBRUN2c0gsS0FBSzJySCxTQUFTdDhDLE9BQU8sVUFHNUJydkUsS0FBSzhPLFFBQVMsRUFDZDlPLEtBQUsrMUMsUUFDTC8xQyxLQUFLMnJILFNBQVMxaUgsUUFBUSxTQUNmLElBR2ZraEgsT0FBUSxXQUNKLE9BQU9ucUgsS0FBS2lnSCxLQUFLa0ssVUFFckJ0MEUsS0FBTSxXQU1GLE9BTEs3MUMsS0FBS21xSCxVQUFhbnFILEtBQUsyckgsU0FBU3Q4QyxPQUFPLFVBQ3hDcnZFLEtBQUtpZ0gsS0FBS3BxRSxPQUNWNzFDLEtBQUt5c0gsY0FDTHpzSCxLQUFLMnJILFNBQVMxaUgsUUFBUSxTQUVuQmpKLEtBQUttcUgsVUFFaEJwMEUsTUFBTyxXQU9ILE9BTkkvMUMsS0FBS21xSCxXQUFhbnFILEtBQUsyckgsU0FBU3Q4QyxPQUFPLFdBQ3ZDcnZFLEtBQUtpZ0gsS0FBS2xxRSxRQUNWLzFDLEtBQUsrSyxNQUFNMDVHLFlBQ1h6a0gsS0FBSytLLE1BQU1xNkcsa0JBQ1hwbEgsS0FBSzJySCxTQUFTMWlILFFBQVEsV0FFbEJqSixLQUFLbXFILFVBRWpCeUQsT0FBUSxTQUFnQnhySCxHQUNwQnBDLEtBQUsrSyxNQUFNdzdHLFNBQVN4Z0gsRUFBRXl5RyxNQUFNcDJHLEtBRWhDeXJILE9BQVEsV0FDSixPQUFPN3RILEtBQUsrSyxNQUFNdTdHLFlBRXRCbkYsT0FBUSxTQUFnQnVJLEdBQ3BCLElBQUlocEgsRUFBT1YsS0FBS2lnSCxLQUFLd0ssa0JBQWtCZixHQUN2QyxTQUFJaHBILEdBQVNWLEtBQUsyckgsU0FBU3Q4QyxPQUFPLFNBQVUzdUUsRUFBS2lGLE9BQzdDM0YsS0FBSytLLE1BQU13N0csU0FBUzdsSCxFQUFLMEIsS0FBSyxHQUM5QnBDLEtBQUsyckgsU0FBUzFpSCxRQUFRLFNBQVV2SSxFQUFLaUYsS0FDckMzRixLQUFLKzFDLFFBQ0UsS0FJZnFyRSxhQUFjLFNBQXNCc0ksR0FDaEMsSUFBSWhsSCxFQUFPaEUsRUFJWCxPQUhBZ0UsRUFBUTFFLEtBQUsrSyxNQUFNdTdHLGVBQ25CNWxILEVBQU9WLEtBQUtpZ0gsS0FBS3dLLGtCQUFrQmYsS0FDakJobEgsSUFBVWhFLEVBQUswQixLQUNqQnBDLEtBQUsyckgsU0FBU3Q4QyxPQUFPLGVBQWdCM3VFLEVBQUtpRixPQUN0RDNGLEtBQUsrSyxNQUFNdzdHLFNBQVM3bEgsRUFBSzBCLEtBQ3pCcEMsS0FBSzJySCxTQUFTMWlILFFBQVEsZUFBZ0J2SSxFQUFLaUYsS0FDcEMsS0FJZnNuSCxXQUFZLFNBQW9CbnNCLEdBQzVCLElBQUlwOEYsRUFBT29wSCxFQUFZcHRILEVBQU1xdEgsRUFNN0IsT0FMQXJwSCxFQUFRMUUsS0FBSytLLE1BQU11N0csV0FDbkJ3SCxFQUFhOXRILEtBQUtpZ0gsS0FBS29LLDJCQUEyQnZwQixHQUVsRGl0QixHQURBcnRILEVBQU9WLEtBQUtpZ0gsS0FBS3dLLGtCQUFrQnFELElBQ2xCcHRILEVBQUtpRixJQUFNLE9BQ2YzRixLQUFLMnNILGlCQUFtQjNzSCxLQUFLaWdILEtBQUtwa0YsT0FBT24zQixJQUNsQzFFLEtBQUsyckgsU0FBU3Q4QyxPQUFPLGVBQWdCMCtDLEtBQ3JEL3RILEtBQUtpZ0gsS0FBS3VLLFVBQVVzRCxHQUNoQnB0SCxFQUNBVixLQUFLK0ssTUFBTXk3RyxjQUFjOWxILEVBQUswQixNQUU5QnBDLEtBQUsrSyxNQUFNcTZHLGtCQUNYcGxILEtBQUt5c0gsZUFFVHpzSCxLQUFLMnJILFNBQVMxaUgsUUFBUSxlQUFnQjhrSCxHQUMvQixLQUlmLzJGLFFBQVMsV0FDTGgzQixLQUFLK0ssTUFBTWlzQixVQUNYaDNCLEtBQUtpZ0gsS0FBS2pwRixhQUdYK3pGLEVBQ1AsU0FBU2pyRixFQUFFdU8sR0FDUCxJQUFJN1gsRUFBVSxHQUFHdndCLE1BQU16QixLQUFLbzRCLFVBQVcsR0FDdkMsT0FBTyxXQUNILElBQUkvMkIsRUFBTyxHQUFHSSxNQUFNekIsS0FBS280QixXQUN6QjcyQixFQUFFcUIsS0FBS292QixHQUFTLFNBQVMrQyxHQUNyQixPQUFPOFUsRUFBSTlVLEdBQVFvRCxNQUFNMFIsRUFBS3hvQyxRQTVROUIsUUFpUmhCLFdBQ0ksYUFDQSxJQUFJdTVHLEVBQUt4NUcsRUFBTTR3QixFQXVLZixTQUFTdzNGLEVBQU9DLEVBQU14eEYsR0FDbEJ3eEYsRUFBSzdtSCxNQUFLLFdBQ04sSUFBc0J0QyxFQUFsQndILEVBQVMvTSxFQUFFUyxPQUNkOEUsRUFBWXdILEVBQU81TCxLQUFLa0YsRUFBS2QsYUFBZTIzQixFQUFHMzNCLEVBQVd3SCxNQUduRSxTQUFTNGhILEVBQW1CNWhILEVBQVE2ekcsR0FDaEMsT0FBTzd6RyxFQUFPaWlCLFFBQVF6WSxTQUFTcXFHLEVBQUk5b0IsUUFBUTl6RixNQUFNOGlCLGFBQWErNUYsSUFBSUQsRUFBSUMsSUFBSTc4RyxNQUFNNjhHLEtBc0J2RGEsRUF0QitFMzBHLEVBdUJqRyxDQUNINmhILHFCQUFzQmxOLEVBQUliLElBQUkseUJBQzlCZ08sZUFBZ0JuTixFQUFJYixJQUFJLG1CQUN4QkksZ0JBQWlCUyxFQUFJYixJQUFJLG9CQUN6QlMsZ0JBQWlCSSxFQUFJYixJQUFJLG9CQUN6QmlPLGlCQUFrQnBOLEVBQUliLElBQUkscUJBQzFCa08sbUJBQW9Cck4sRUFBSWIsSUFBSSx1QkFDNUJtTyxpQkFBa0J0TixFQUFJYixJQUFJLHFCQUMxQm9PLGVBQWdCdk4sRUFBSWIsSUFBSSxzQkEvQnFGbDlHLEtBQUssWUFBWSxHQUFNb2pCLFdBQVcsZ0NBQWdDL1QsS0FBSyxDQUNwTDZ1RyxhQUFjLE1BQ2RxTixXQUFZLFFBQ1pDLFVBQVcsSUFtQm5CLElBQTZCek4sRUFoQjdCLFNBQVMwTixFQUFVcmlILEVBQVE2ekcsR0FDdkI3ekcsRUFBTzVMLEtBQUtrRixFQUFLZ3BILE1BQU8sQ0FDcEJydkMsSUFBS2p6RSxFQUFPaUcsS0FBSyxPQUNqQjZ1RyxhQUFjOTBHLEVBQU9pRyxLQUFLLGdCQUMxQms4RyxXQUFZbmlILEVBQU9pRyxLQUFLLGNBQ3hCc0ksTUFBT3ZPLEVBQU9pRyxLQUFLLFdBRXZCakcsRUFBT3dKLFNBQVNxcUcsRUFBSTlvQixRQUFRdHNGLE9BQU93SCxLQUFLLENBQ3BDNnVHLGFBQWMsTUFDZHFOLFlBQVksSUFFaEIsS0FDS25pSCxFQUFPaUcsS0FBSyxRQUFVakcsRUFBT2lHLEtBQUssTUFBTyxRQUM1QyxNQUFPdk4sSUFDVCxPQUFPc0gsRUEyQlgsU0FBU3VpSCxFQUFVbHBILEdBQ2YsSUFBYXM3RyxFQUdiLE9BREFBLEVBRFVsN0csRUFBRXd5RyxTQUFTNXlHLElBQVFJLEVBQUV1MEUsVUFBVTMwRSxHQUN6QnBHLEVBQUVvRyxHQUFLdU0sUUFBVSxJQUN0Qm5TLE9BQVNraEgsRUFBTSxLQWhPOUI3QixFQUFNNy9HLEVBQUVrOUIsR0FBRzMzQixVQUNYYyxFQUFPLENBQ0h1NkcsSUFBSyxTQUNMeU8sTUFBTyxXQUNQOXBILFVBQVcsZ0JBRWYweEIsRUFBVSxDQUNONm5GLFdBQVksU0FBb0J6L0QsRUFBR3FxRSxHQUMvQixJQUFJOUksRUFJSixPQUhBOEksRUFBV2xqSCxFQUFFQyxRQUFRaWpILEdBQVlBLEVBQVcsR0FBR2hqSCxNQUFNekIsS0FBS280QixVQUFXLEdBRXJFdWpGLEVBQU1KLEdBRE5uaEUsRUFBSUEsR0FBSyxJQUNHa3dFLFlBQ0w5dUgsS0FBS29ILEtBQUsybkgsR0FDakIsU0FBU0EsSUFDTCxJQUFJemlILEVBQVEwaUgsRUFBVTNMLEVBQU9pSixFQUFPMkMsRUFBYUMsRUFBYXZELEVBQVU1Z0gsRUFBT2sxRyxFQUFNbjdHLEVBQVdxcUgsRUFDaEdwcEgsRUFBRXFCLEtBQUs2aEgsR0FBVSxTQUFTOWtGLEdBQ3RCQSxFQUFFOWdDLFlBQWN1N0MsRUFBRXY3QyxhQUV0QmlKLEVBQVMvTSxFQUFFUyxNQUNYZ3ZILEVBQVd6dkgsRUFBRTRnSCxFQUFJaDNHLEtBQUswekMsU0FDdEJ3bUUsRUFBUXdMLEVBQVVqd0UsRUFBRXI3QyxNQUNwQitvSCxFQUFRdUMsRUFBVWp3RSxFQUFFcWhFLE1BQ3BCZ1AsR0FBeUIsSUFBWHJ3RSxFQUFFcjdDLE9BQW1COC9HLEVBQ25DNkwsR0FBeUIsSUFBWHR3RSxFQUFFcWhFLE9BQW1CcU0sRUFDbkMyQyxJQUFnQjVMLEVBQVE2SyxFQUFtQjVoSCxFQUFRNnpHLElBQ25EK08sSUFBZ0I1QyxFQUFRL3NILEVBQUU0Z0gsRUFBSWgzRyxLQUFLODJHLE1BQU1HLElBQUlELEVBQUlDLElBQUlILE9BQ3JEb0QsR0FBU0EsRUFBTWpoSCxJQUFJLElBQ25Ca0ssRUFBU3FpSCxFQUFVcmlILEVBQVE2ekcsSUFDdkI4TyxHQUFlQyxLQUNmRixFQUFTNU8sSUFBSUQsRUFBSUMsSUFBSXZqRSxTQUNyQnZ3QyxFQUFPOHpHLElBQUk2TyxFQUFjOU8sRUFBSUMsSUFBSXIxRyxNQUFRbzFHLEVBQUlDLElBQUlLLGlCQUNqRG4wRyxFQUFPeXNFLEtBQUtpMkMsR0FBVXg3RSxTQUFTZ04sUUFBUXl1RSxFQUFjNUwsRUFBUSxNQUFNcjZHLE9BQU9rbUgsRUFBYzVDLEVBQVEsT0FFcEc2QyxFQUFrQkQsRUFBY3RFLEVBQWM3QixFQUM5QzRDLEVBQVcsSUFBSTVLLEVBQVMsQ0FDcEJqZ0gsR0FBSXdMLElBRVJ2QixFQUFRLElBQUlvNEcsRUFBTSxDQUNkNS9HLEtBQU04L0csRUFDTnQ0RyxNQUFPdUIsR0FDUjZ6RyxHQUNIRixFQUFPLElBQUlrUCxFQUFnQixDQUN2Qjd6RixLQUFNZ3hGLEVBQ05yRCxTQUFVQSxHQUNYOUksR0FDSHI3RyxFQUFZLElBQUlpbUgsRUFBVSxDQUN0QmhnSCxNQUFPQSxFQUNQazFHLEtBQU1BLEVBQ04wTCxTQUFVQSxFQUNWdm9ILFVBQVd3N0MsRUFBRXg3QyxXQUNkKzhHLEdBQ0g3ekcsRUFBTzVMLEtBQUtrRixFQUFLdTZHLElBQUtBLEdBQ3RCN3pHLEVBQU81TCxLQUFLa0YsRUFBS2QsVUFBV0EsS0FHcEMyb0gsVUFBVyxXQUNQLElBQUk3QixFQUlKLE9BSEFvQyxFQUFPaHVILEtBQUtrUyxTQUFTLFNBQVNrNEIsR0FDMUJ3aEYsRUFBVXhoRixFQUFFcWpGLGVBRVQ3QixHQUVYLzFHLE9BQVEsV0FJSixPQUhBbTRHLEVBQU9odUgsTUFBTSxTQUFTb3FDLEdBQ2xCQSxFQUFFdjBCLFlBRUM3VixNQUVYMHRILFFBQVMsV0FJTCxPQUhBTSxFQUFPaHVILE1BQU0sU0FBU29xQyxHQUNsQkEsRUFBRXNqRixhQUVDMXRILE1BRVh1c0gsU0FBVSxXQUNOLElBQUl6OUcsRUFJSixPQUhBay9HLEVBQU9odUgsS0FBS2tTLFNBQVMsU0FBU2s0QixHQUMxQnQ3QixFQUFTczdCLEVBQUVtaUYsY0FFUno5RyxHQUVYKzhHLFNBQVUsV0FJTixPQUhBbUMsRUFBT2h1SCxNQUFNLFNBQVNvcUMsR0FDbEJBLEVBQUV5aEYsY0FFQzdySCxNQUVYMnRILFdBQVksV0FJUixPQUhBSyxFQUFPaHVILE1BQU0sU0FBU29xQyxHQUNsQkEsRUFBRXVqRixnQkFFQzN0SCxNQUVYbXFILE9BQVEsV0FDSixJQUFJdDBFLEVBSUosT0FIQW00RSxFQUFPaHVILEtBQUtrUyxTQUFTLFNBQVNrNEIsR0FDMUJ5TCxFQUFPekwsRUFBRSsvRSxZQUVOdDBFLEdBRVhBLEtBQU0sV0FJRixPQUhBbTRFLEVBQU9odUgsTUFBTSxTQUFTb3FDLEdBQ2xCQSxFQUFFeUwsVUFFQzcxQyxNQUVYKzFDLE1BQU8sV0FJSCxPQUhBaTRFLEVBQU9odUgsTUFBTSxTQUFTb3FDLEdBQ2xCQSxFQUFFMkwsV0FFQy8xQyxNQUVYbWhILE9BQVEsU0FBZ0JyZ0gsR0FDcEIsSUFBSSsxQixHQUFVLEVBQU9vcUYsRUFBTTFoSCxFQUFFdUIsR0FJN0IsT0FIQWt0SCxFQUFPaHVILEtBQUtrUyxTQUFTLFNBQVNrNEIsR0FDMUJ2VCxFQUFVdVQsRUFBRSsyRSxPQUFPRixNQUVoQnBxRixHQUVYdXFGLGFBQWMsU0FBc0J0Z0gsR0FDaEMsSUFBSSsxQixHQUFVLEVBQU9vcUYsRUFBTTFoSCxFQUFFdUIsR0FJN0IsT0FIQWt0SCxFQUFPaHVILEtBQUtrUyxTQUFTLFNBQVNrNEIsR0FDMUJ2VCxFQUFVdVQsRUFBRWczRSxhQUFhSCxNQUV0QnBxRixHQUVYbzJGLFdBQVksU0FBb0Juc0IsR0FDNUIsSUFBSWpxRSxHQUFVLEVBSWQsT0FIQW0zRixFQUFPaHVILEtBQUtrUyxTQUFTLFNBQVNrNEIsR0FDMUJ2VCxFQUFVdVQsRUFBRTZpRixXQUFXbnNCLE1BRXBCanFFLEdBRVh6MEIsSUFBSyxTQUFhZ3RILEdBQ2QsSUFBSTFxSCxFQUNKLE9BQUtrNEIsVUFBVTc4QixRQU1YaXVILEVBQU9odUgsTUFBTSxTQUFTb3FDLEdBQ2xCQSxFQUFFd2pGLE9BQU93QixNQUVOcHZILE9BUlBndUgsRUFBT2h1SCxLQUFLa1MsU0FBUyxTQUFTazRCLEdBQzFCMWxDLEVBQVEwbEMsRUFBRXlqRixZQUVQbnBILElBUWZzeUIsUUFBUyxXQUtMLE9BSkFnM0YsRUFBT2h1SCxNQUFNLFNBQVM4RSxFQUFXd0gsSUEyRHpDLFNBQWdCQSxHQUNaLElBQUk2ekcsRUFBSzZPLEVBQ1Q3TyxFQUFNN3pHLEVBQU81TCxLQUFLa0YsRUFBS3U2RyxLQUN2QjZPLEVBQVcxaUgsRUFBT2tuQyxTQUFTL1gsT0FBTzBrRixFQUFJdmdILFVBQVVpOUMsU0FDaEQ5MkMsRUFBRXFCLEtBQUtrRixFQUFPNUwsS0FBS2tGLEVBQUtncEgsUUFBUSxTQUFTeHNILEVBQUs4RCxHQUMxQ0gsRUFBRWcxRSxZQUFZMzRFLEdBQU9rSyxFQUFPZ2EsV0FBV3BnQixHQUFPb0csRUFBT2lHLEtBQUtyTSxFQUFLOUQsTUFFbkVrSyxFQUFPK1osV0FBV3pnQixFQUFLZCxXQUFXdWhCLFdBQVd6Z0IsRUFBS3U2RyxLQUFLOTVGLFdBQVd6Z0IsRUFBSzJNLE1BQU1sRCxZQUFZOHdHLEVBQUk5b0IsUUFBUXRzRixPQUNqR2lrSCxFQUFTanZILFNBQ1R1TSxFQUFPK2lILFNBQVNoTCxZQUFZMkssR0FDNUJBLEVBQVN2bUgsV0FwRUw2bUgsQ0FBT2hqSCxHQUNQeEgsRUFBVWt5QixhQUVQaDNCLE9BR2ZULEVBQUVrOUIsR0FBRzMzQixVQUFZLFNBQVN5MEIsR0FDdEIsT0FBSS9DLEVBQVErQyxHQUNEL0MsRUFBUStDLEdBQVFvRCxNQUFNMzhCLEtBQU0sR0FBR2lHLE1BQU16QixLQUFLbzRCLFVBQVcsSUFFckRwRyxFQUFRNm5GLFdBQVcxaEYsTUFBTTM4QixLQUFNNDhCLFlBRzlDcjlCLEVBQUVrOUIsR0FBRzMzQixVQUFVODJFLFdBQWEsV0FFeEIsT0FEQXI4RSxFQUFFazlCLEdBQUczM0IsVUFBWXM2RyxFQUNWcC9HLE1BdktmLEdBM3dDSyxJQUFTVCxFQUNWd0csRUF3SUFnNkcsRUErRkFnQixFQXdDQXQvRyxFQTBGQTRCLEVBb0RBOC9HLEVBdU5BK0QsRUErTUE2QixFQTBJQTZCLEVBNENBRyxHQWhnQ0MsNEIsMkRDaDVCVCxJQUFJd0UsRUFBbUIsQ0FDckIsUUFDQSxXQUNBLGtCQUNBLGNBQ0EsdUJBQ0Esd0JBQ0Esd0JBQ0EsMkJBQ0EsMkJBQ0EsZ0JBQ0EsZ0JBQ0EsUUFPRixTQUFTcnVFLEVBQU1sbEIsRUFBS21CLEdBQ0ssb0JBQVo1d0IsVUFDVEEsUUFBUTIwQyxLQUFLLGNBQWdCbGxCLEdBRXpCbUIsR0FDRjV3QixRQUFRMjBDLEtBQUsvakIsRUFBSWk3QixRQWV2QixTQUFTdHJCLEVBQVVubkMsR0FDakIsT0FBZSxPQUFSQSxHQUErQixpQkFBUkEsRUFHaEMsSUFBSVMsRUFBVy9CLE9BQU9DLFVBQVU4QixTQUVoQyxTQUFTMjZELEVBQWVwN0QsR0FDdEIsTUFGa0Isb0JBRVhTLEVBQVM1QixLQUFLbUIsR0FHdkIsU0FBU2sxRSxFQUFRejRFLEdBQ2YsT0FBT0EsUUFHVCxTQUFTb3RILElBRVAsSUFEQSxJQUFJM3BILEVBQU8sR0FBSSs2QixFQUFNaEUsVUFBVTc4QixPQUN2QjZnQyxLQUFRLzZCLEVBQU0rNkIsR0FBUWhFLFVBQVdnRSxHQUV6QyxJQUFJNWpCLEVBQVMsS0FDVHpOLEVBQVMsS0FpQmIsT0FoQm9CLElBQWhCMUosRUFBSzlGLE9BQ0grc0MsRUFBU2puQyxFQUFLLEtBQU91RyxNQUFNcEcsUUFBUUgsRUFBSyxJQUMxQzBKLEVBQVMxSixFQUFLLEdBQ2MsaUJBQVpBLEVBQUssS0FDckJtWCxFQUFTblgsRUFBSyxJQUVTLElBQWhCQSxFQUFLOUYsU0FDUyxpQkFBWjhGLEVBQUssS0FDZG1YLEVBQVNuWCxFQUFLLEtBR1ppbkMsRUFBU2puQyxFQUFLLEtBQU91RyxNQUFNcEcsUUFBUUgsRUFBSyxPQUMxQzBKLEVBQVMxSixFQUFLLEtBSVgsQ0FBRW1YLE9BQVFBLEVBQVF6TixPQUFRQSxHQUduQyxTQUFTa2dILEVBQVk5cEgsR0FDbkIsT0FBT2lYLEtBQUtDLE1BQU1ELEtBQUt5aUMsVUFBVTE1QyxJQVluQyxTQUFTdWxCLEVBQVUrUyxFQUFLOTVCLEdBQ3RCLFNBQVU4NUIsRUFBSTlCLFFBQVFoNEIsR0FHeEIsSUFBSUksRUFBaUJGLE9BQU9DLFVBQVVDLGVBQ3RDLFNBQVM0dUcsRUFBUXh0RyxFQUFLTyxHQUNwQixPQUFPM0IsRUFBZUMsS0FBS21CLEVBQUtPLEdBR2xDLFNBQVN3c0UsRUFBT2xxRSxHQUlkLElBSEEsSUFBSWtuSCxFQUFjOXlGLFVBRWQreUYsRUFBU3RySCxPQUFPbUUsR0FDWC9DLEVBQUksRUFBR0EsRUFBSW0zQixVQUFVNzhCLE9BQVEwRixJQUFLLENBQ3pDLElBQUk4QixFQUFTbW9ILEVBQVlqcUgsR0FDekIsR0FBSThCLFFBQXlDLENBQzNDLElBQUlyQixPQUFNLEVBQ1YsSUFBS0EsS0FBT3FCLEVBQ040ckcsRUFBTzVyRyxFQUFRckIsS0FDYjRtQyxFQUFTdmxDLEVBQU9yQixJQUNsQnlwSCxFQUFPenBILEdBQU93c0UsRUFBTWk5QyxFQUFPenBILEdBQU1xQixFQUFPckIsSUFFeEN5cEgsRUFBT3pwSCxHQUFPcUIsRUFBT3JCLEtBTS9CLE9BQU95cEgsRUFHVCxTQUFTQyxFQUFZendGLEVBQUdTLEdBQ3RCLEdBQUlULElBQU1TLEVBQUssT0FBTyxFQUN0QixJQUFJaXdGLEVBQVkvaUYsRUFBUzNOLEdBQ3JCMndGLEVBQVloakYsRUFBU2xOLEdBQ3pCLElBQUlpd0YsSUFBYUMsRUFzQlYsT0FBS0QsSUFBY0MsR0FDakJ4dkYsT0FBT25CLEtBQU9tQixPQUFPVixHQXRCNUIsSUFDRSxJQUFJbXdGLEVBQVczakgsTUFBTXBHLFFBQVFtNUIsR0FDekI2d0YsRUFBVzVqSCxNQUFNcEcsUUFBUTQ1QixHQUM3QixHQUFJbXdGLEdBQVlDLEVBQ2QsT0FBTzd3RixFQUFFcC9CLFNBQVc2L0IsRUFBRTcvQixRQUFVby9CLEVBQUV5NkMsT0FBTSxTQUFVNTBFLEVBQUdTLEdBQ25ELE9BQU9tcUgsRUFBVzVxSCxFQUFHNDZCLEVBQUVuNkIsT0FFcEIsR0FBS3NxSCxHQUFhQyxFQVF2QixPQUFPLEVBUFAsSUFBSUMsRUFBUTVySCxPQUFPdUIsS0FBS3U1QixHQUNwQit3RixFQUFRN3JILE9BQU91QixLQUFLZzZCLEdBQ3hCLE9BQU9xd0YsRUFBTWx3SCxTQUFXbXdILEVBQU1ud0gsUUFBVWt3SCxFQUFNcjJDLE9BQU0sU0FBVTF6RSxHQUM1RCxPQUFPMHBILEVBQVd6d0YsRUFBRWo1QixHQUFNMDVCLEVBQUUxNUIsT0FNaEMsTUFBT2xCLEdBRVAsT0FBTyxHQTJEYixJQUFJcXZFLEVBQVEsQ0FDVjg3QyxhQUFjLFdBQ1osSUFBSTVwSCxFQUFVdkcsS0FBS293SCxTQUduQixHQUZBN3BILEVBQVF1VyxLQUFPdlcsRUFBUXVXLE9BQVN2VyxFQUFROHBILE9BQVMsR0FBSyxNQUVsRDlwSCxFQUFRdVcsTUFDVixHQUFJdlcsRUFBUXVXLGdCQUFnQkMsRUFBUyxDQUVuQyxHQUFJeFcsRUFBUThwSCxPQUNWLElBQ0UsSUFBSUMsRUFBaUIsR0FDckIvcEgsRUFBUThwSCxPQUFPOXFILFNBQVEsU0FBVWdySCxHQUMvQkQsRUFBaUI1OUMsRUFBTTQ5QyxFQUFnQjF6RyxLQUFLQyxNQUFNMHpHLE9BRXBEbHNILE9BQU91QixLQUFLMHFILEdBQWdCL3FILFNBQVEsU0FBVXlYLEdBQzVDelcsRUFBUXVXLEtBQUswekcsbUJBQW1CeHpHLEVBQVFzekcsRUFBZXR6RyxPQUV6RCxNQUFPaFksSUFNWGhGLEtBQUt5d0gsTUFBUWxxSCxFQUFRdVcsS0FDckI5YyxLQUFLMHdILGFBQWUxd0gsS0FBS3l3SCxNQUFNRSxxQkFDMUIsR0FBSTV2RCxFQUFjeDZELEVBQVF1VyxNQUFPLENBY3RDLEdBWkk5YyxLQUFLNHdILE9BQVM1d0gsS0FBSzR3SCxNQUFNQyxPQUFTN3dILEtBQUs0d0gsTUFBTUMsaUJBQWlCOXpHLElBQ2hFeFcsRUFBUXVXLEtBQUt3dUMsS0FBT3RyRCxLQUFLNHdILE1BQ3pCcnFILEVBQVF1VyxLQUFLRyxVQUFZamQsS0FBSzR3SCxNQUFNQyxNQUFNNXpHLFVBQzFDMVcsRUFBUXVXLEtBQUtnMEcsZUFBaUI5d0gsS0FBSzR3SCxNQUFNQyxNQUFNQyxlQUMvQ3ZxSCxFQUFRdVcsS0FBS2kwRyx1QkFBeUIvd0gsS0FBSzR3SCxNQUFNQyxNQUFNRSx1QkFDdkR4cUgsRUFBUXVXLEtBQUtrMEcsc0JBQXdCaHhILEtBQUs0d0gsTUFBTUMsTUFBTUcsc0JBQ3REenFILEVBQVF1VyxLQUFLbTBHLG1CQUFxQmp4SCxLQUFLNHdILE1BQU1DLE1BQU1JLG1CQUNuRDFxSCxFQUFRdVcsS0FBS28wRyxtQkFBcUJseEgsS0FBSzR3SCxNQUFNQyxNQUFNSyxtQkFDbkQzcUgsRUFBUXVXLEtBQUtxMEcseUJBQTJCbnhILEtBQUs0d0gsTUFBTUMsTUFBTU0sMEJBSXZENXFILEVBQVE4cEgsT0FDVixJQUNFLElBQUllLEVBQW1CLEdBQ3ZCN3FILEVBQVE4cEgsT0FBTzlxSCxTQUFRLFNBQVVnckgsR0FDL0JhLEVBQW1CMStDLEVBQU0wK0MsRUFBa0J4MEcsS0FBS0MsTUFBTTB6RyxPQUV4RGhxSCxFQUFRdVcsS0FBS3JPLFNBQVcyaUgsRUFDeEIsTUFBT3BzSCxJQU9YLElBQ0lxc0gsRUFETTlxSCxFQUFRdVcsS0FDT3UwRyxlQUNyQkEsR0FBa0J0d0QsRUFBY3N3RCxLQUNsQzlxSCxFQUFRdVcsS0FBS3JPLFNBQVdpa0UsRUFBTW5zRSxFQUFRdVcsS0FBS3JPLFNBQVU0aUgsSUFHdkRyeEgsS0FBS3l3SCxNQUFRLElBQUkxekcsRUFBUXhXLEVBQVF1VyxNQUNqQzljLEtBQUswd0gsYUFBZTF3SCxLQUFLeXdILE1BQU1FLHNCQUVMdHhILElBQXRCa0gsRUFBUXVXLEtBQUt3aUcsTUFBd0IvNEcsRUFBUXVXLEtBQUt3aUcsUUFDcER0L0csS0FBS3N4SCxlQUFpQnR4SCxLQUFLNndILE1BQU1VLHFCQU81QnZ4SCxLQUFLNHdILE9BQVM1d0gsS0FBSzR3SCxNQUFNQyxPQUFTN3dILEtBQUs0d0gsTUFBTUMsaUJBQWlCOXpHLEVBRXZFL2MsS0FBS3l3SCxNQUFRendILEtBQUs0d0gsTUFBTUMsTUFDZnRxSCxFQUFRaXRDLFFBQVVqdEMsRUFBUWl0QyxPQUFPcTlFLE9BQVN0cUgsRUFBUWl0QyxPQUFPcTlFLGlCQUFpQjl6RyxJQUVuRi9jLEtBQUt5d0gsTUFBUWxxSCxFQUFRaXRDLE9BQU9xOUUsUUFJaENXLFlBQWEsV0FDWCxJQUFJanJILEVBQVV2RyxLQUFLb3dILFNBQ25CN3BILEVBQVF1VyxLQUFPdlcsRUFBUXVXLE9BQVN2VyxFQUFROHBILE9BQVMsR0FBSyxNQUVsRDlwSCxFQUFRdVcsTUFDTnZXLEVBQVF1VyxnQkFBZ0JDLEdBSWpCZ2tELEVBQWN4NkQsRUFBUXVXLFNBRi9COWMsS0FBS3l3SCxNQUFNZ0Isc0JBQXNCenhILE1BQ2pDQSxLQUFLMHhILGNBQWUsSUFTYjF4SCxLQUFLNHdILE9BQVM1d0gsS0FBSzR3SCxNQUFNQyxPQUFTN3dILEtBQUs0d0gsTUFBTUMsaUJBQWlCOXpHLEdBRzlEeFcsRUFBUWl0QyxRQUFVanRDLEVBQVFpdEMsT0FBT3E5RSxPQUFTdHFILEVBQVFpdEMsT0FBT3E5RSxpQkFBaUI5ekcsS0FGbkYvYyxLQUFLeXdILE1BQU1nQixzQkFBc0J6eEgsTUFDakNBLEtBQUsweEgsY0FBZSxJQU94QkMsY0FBZSxXQUNiLEdBQUszeEgsS0FBS3l3SCxNQUFWLENBRUEsSUFBSWxnRixFQUFPdndDLEtBQ1hBLEtBQUs0eEgsV0FBVSxXQUNUcmhGLEVBQUttaEYsZUFDUG5oRixFQUFLa2dGLE1BQU1vQix3QkFBd0J0aEYsVUFDNUJBLEVBQUttaEYsY0FHVm5oRixFQUFLbWdGLGVBQ1BuZ0YsRUFBS21nRixlQUNMbmdGLEVBQUtrZ0YsTUFBTXFCLG1CQUNKdmhGLEVBQUttZ0YsY0FHVm5nRixFQUFLK2dGLGlCQUNQL2dGLEVBQUsrZ0Ysd0JBQ0UvZ0YsRUFBSytnRixnQkFHZC9nRixFQUFLa2dGLE1BQVEsV0FPZnNCLEVBQXlCLENBQzNCcHFILEtBQU0sT0FDTnFxSCxZQUFZLEVBQ1p4MEYsTUFBTyxDQUNMeVosSUFBSyxDQUNIaDRDLEtBQU1xaEMsUUFFUmpGLEtBQU0sQ0FDSnA4QixLQUFNcWhDLE9BQ04yeEYsVUFBVSxHQUVaajFHLE9BQVEsQ0FDTi9kLEtBQU1xaEMsUUFFUjR4RixPQUFRLENBQ05qekgsS0FBTSxDQUFDbU4sTUFBTy9ILFVBR2xCMFEsT0FBUSxTQUFpQm92QyxFQUFHODlCLEdBQzFCLElBQUl2aEYsRUFBT3VoRixFQUFJdmhGLEtBQ1g4eUMsRUFBU3l1QyxFQUFJenVDLE9BQ2JoVyxFQUFReWtELEVBQUl6a0QsTUFDWjIwRixFQUFRbHdDLEVBQUlrd0MsTUFFWnRCLEVBQVFyOUUsRUFBT3E5RSxNQUNuQixHQUFLQSxFQUFMLENBT0EsSUFBSXgxRixFQUFPbUMsRUFBTW5DLEtBQ2JyZSxFQUFTd2dCLEVBQU14Z0IsT0FDZmsxRyxFQUFTMTBGLEVBQU0wMEYsT0FDZjNpSCxFQUFTNGlILElBQ1R6NEcsRUFBV20zRyxFQUFNcHJILEVBQ25CNDFCLEVBQ0FyZSxFQVdOLFNBQThCek4sR0FDNUIsSUFBSXJNLEVBQ0osSUFBS0EsS0FBUXFNLEVBQ1gsR0FBYSxZQUFUck0sRUFBc0IsT0FBTyxFQUVuQyxPQUFPa3ZILFFBQVFsdkgsR0FmWG12SCxDQUFvQjlpSCxJQUFXMmlILEVBa0JyQyxTQUEwQng0RyxFQUFVdzRHLEdBQ2xDLElBQUkzaUgsRUFBUzJpSCxFQW9CZixTQUFpQ0EsR0FLL0IsT0FBTzlsSCxNQUFNcEcsUUFBUWtzSCxHQUNqQkEsRUFBTy8xQyxPQUFPbTJDLEVBQWtCLElBQ2hDanVILE9BQU93d0MsT0FBTyxHQUFJcTlFLEdBM0JBSyxDQUF1QkwsR0FBVSxHQUV2RCxJQUFLeDRHLEVBQVksT0FBT25LLEVBT3hCLElBQUlpakgsR0FKSjk0RyxFQUFXQSxFQUFTK2hCLFFBQU8sU0FBVStrRCxHQUNuQyxPQUFPQSxFQUFNdnBDLEtBQTZCLEtBQXRCdXBDLEVBQU03OUUsS0FBS3dYLFdBR1B5L0QsTUFBTTY0QyxHQUtoQyxPQUFPLzRHLEVBQVN5aUUsT0FDZHEyQyxFQUFhRSxFQUFtQkosRUFDaEMvaUgsR0FsQ01vakgsQ0FBZ0JwakgsRUFBT2l0QixRQUFTMDFGLEdBQ2hDM2lILEdBR0YwbkMsRUFBTXpaLEVBQU15WixLQUFPLE9BQ3ZCLE9BQU9BLEVBQU1rTixFQUFFbE4sRUFBS3YyQyxFQUFNZ1osR0FBWUEsS0EyQzFDLFNBQVNnNUcsRUFBa0JuakgsRUFBUWl4RSxHQUlqQyxPQUhJQSxFQUFNOS9FLE1BQVE4L0UsRUFBTTkvRSxLQUFLa3VILE9BQVNwdUMsRUFBTTkvRSxLQUFLa3VILE1BQU1nRSxRQUNyRHJqSCxFQUFPaXhFLEVBQU05L0UsS0FBS2t1SCxNQUFNZ0UsT0FBU3B5QyxHQUU1Qmp4RSxFQUdULFNBQVMraUgsRUFBa0IvaUgsRUFBUWl4RSxFQUFPL2hFLEdBRXhDLE9BREFsUCxFQUFPa1AsR0FBUytoRSxFQUNUanhFLEVBR1QsU0FBU2tqSCxFQUF3QkksR0FDL0IsT0FBT1QsUUFBUVMsRUFBTW55SCxNQUFRbXlILEVBQU1ueUgsS0FBS2t1SCxPQUFTaUUsRUFBTW55SCxLQUFLa3VILE1BQU1nRSxPQUtwRSxJQTZMSS94SCxFQTdMQWl5SCxFQUFrQixDQUNwQm5ySCxLQUFNLFNBQ05xcUgsWUFBWSxFQUNaeDBGLE1BQU8sQ0FDTHlaLElBQUssQ0FDSGg0QyxLQUFNcWhDLE9BQ045RCxRQUFTLFFBRVg5NEIsTUFBTyxDQUNMekUsS0FBTXFRLE9BQ04yaUgsVUFBVSxHQUVadnVGLE9BQVEsQ0FDTnprQyxLQUFNLENBQUNxaEMsT0FBUWo4QixTQUVqQjJZLE9BQVEsQ0FDTi9kLEtBQU1xaEMsU0FHVnZyQixPQUFRLFNBQWlCb3ZDLEVBQUc4OUIsR0FDMUIsSUFBSXprRCxFQUFReWtELEVBQUl6a0QsTUFDWmdXLEVBQVN5dUMsRUFBSXp1QyxPQUNiOXlDLEVBQU91aEYsRUFBSXZoRixLQUVYb2MsRUFBTzAyQixFQUFPcTlFLE1BRWxCLElBQUsvekcsRUFJSCxPQUFPLEtBR1QsSUFBSTVXLEVBQU0sS0FDTkssRUFBVSxLQUVjLGlCQUFqQmkzQixFQUFNa0csT0FDZng5QixFQUFNczNCLEVBQU1rRyxPQUNIb0osRUFBU3RQLEVBQU1rRyxVQUNwQmxHLEVBQU1rRyxPQUFPeDlCLE1BQ2ZBLEVBQU1zM0IsRUFBTWtHLE9BQU94OUIsS0FJckJLLEVBQVVsQyxPQUFPdUIsS0FBSzQzQixFQUFNa0csUUFBUXk0QyxRQUFPLFNBQVU0MkMsRUFBSzd2SCxHQUN4RCxJQUFJeUMsRUFFSixPQUFJdWxCLEVBQVNxa0csRUFBa0Jyc0gsR0FDdEJtQixPQUFPd3dDLE9BQU8sR0FBSWsrRSxJQUFPcHRILEVBQU0sSUFBUXpDLEdBQVFzNkIsRUFBTWtHLE9BQU94Z0MsR0FBT3lDLElBRXJFb3RILElBQ04sT0FHTCxJQUFJLzFHLEVBQVN3Z0IsRUFBTXhnQixRQUFVRixFQUFLRSxPQUM5QmcyRyxFQUFRbDJHLEVBQUttMkcsS0FBS3oxRixFQUFNOTVCLE1BQU9zWixFQUFROVcsRUFBS0ssR0FFNUNXLEVBQVM4ckgsRUFBTXYvRixLQUFJLFNBQVV5L0YsRUFBTXowRyxHQUNyQyxJQUFJOVksRUFFQXd0SCxFQUFPenlILEVBQUsweUgsYUFBZTF5SCxFQUFLMHlILFlBQVlGLEVBQUtqMEgsTUFDckQsT0FBT2swSCxFQUFPQSxJQUFPeHRILEVBQU0sSUFBUXV0SCxFQUFLajBILE1BQVFpMEgsRUFBS3h2SCxNQUFPaUMsRUFBSThZLE1BQVFBLEVBQU85WSxFQUFJcXRILE1BQVFBLEVBQU9ydEgsSUFBU3V0SCxFQUFLeHZILFNBR2xILE9BQU95Z0QsRUFBRTNtQixFQUFNeVosSUFBSyxDQUNsQjIzRSxNQUFPbHVILEVBQUtrdUgsTUFDWixNQUFTbHVILEVBQVksTUFDckIyeUgsWUFBYTN5SCxFQUFLMnlILGFBQ2pCbnNILEtBTVAsU0FBU25DLEVBQU1qRSxFQUFJODZCLEVBQVNpM0YsR0FDckJTLEVBQU94eUgsRUFBSSt4SCxJQUVoQnpvRixFQUFFdHBDLEVBQUk4NkIsRUFBU2kzRixHQUdqQixTQUFTaDNGLEVBQVEvNkIsRUFBSTg2QixFQUFTaTNGLEVBQU9VLEdBQ25DLEdBQUtELEVBQU94eUgsRUFBSSt4SCxHQUFoQixDQUVBLElBQUkvMUcsRUFBTysxRyxFQUFNendFLFFBQVF5dUUsT0EwQzNCLFNBQXNCL3ZILEVBQUkreEgsR0FDeEIsSUFBSWp5SCxFQUFLaXlILEVBQU16d0UsUUFDZixPQUFPdGhELEVBQUcweUgsVUFBWTV5SCxFQUFHaXdILE1BQU03ekcsUUEzQzNCeTJHLENBQVkzeUgsRUFBSSt4SCxJQUNqQmpELEVBQVdoMEYsRUFBUWw0QixNQUFPazRCLEVBQVFFLFdBQ2xDOHpGLEVBQVc5dUgsRUFBRzR5SCxlQUFnQjUyRyxFQUFLNjJHLGlCQUFpQjcyRyxFQUFLRSxVQUU1RG90QixFQUFFdHBDLEVBQUk4NkIsRUFBU2kzRixJQUdqQixTQUFTOTJGLEVBQVFqN0IsRUFBSTg2QixFQUFTaTNGLEVBQU9VLEdBRW5DLEdBRFNWLEVBQU16d0UsUUFDZixDQUtBLElBQUl0bEMsRUFBTysxRyxFQUFNendFLFFBQVF5dUUsT0FBUyxHQUM3QmoxRixFQUFRZzRGLFVBQVVDLFVBQWEvMkcsRUFBS3EwRywyQkFDdkNyd0gsRUFBR2d6SCxZQUFjLElBRW5CaHpILEVBQUdpekgsU0FBTTEwSCxTQUNGeUIsRUFBUSxJQUNmQSxFQUFHMHlILGFBQVVuMEgsU0FDTnlCLEVBQVksUUFDbkJBLEVBQUc0eUgsb0JBQWlCcjBILFNBQ2J5QixFQUFtQixvQkFieEJvZ0QsRUFBSyxpREFnQlQsU0FBU295RSxFQUFReHlILEVBQUkreEgsR0FDbkIsSUFBSWp5SCxFQUFLaXlILEVBQU16d0UsUUFDZixPQUFLeGhELElBS0FBLEVBQUdpd0gsUUFDTjN2RSxFQUFLLHFEQUNFLElBTlBBLEVBQUssa0RBQ0UsR0FnQlgsU0FBUzlXLEVBQUd0cEMsRUFBSTg2QixFQUFTaTNGLEdBQ3ZCLElBQUltQixFQUFPQyxFQUlQaHlDLEVBeUJOLFNBQXFCditFLEdBQ25CLElBQUkyM0IsRUFDQXJlLEVBQ0FuWCxFQUNBcXVILEVBV0osTUFUcUIsaUJBQVZ4d0gsRUFDVDIzQixFQUFPMzNCLEVBQ0VxOUQsRUFBY3I5RCxLQUN2QjIzQixFQUFPMzNCLEVBQU0yM0IsS0FDYnJlLEVBQVN0WixFQUFNc1osT0FDZm5YLEVBQU9uQyxFQUFNbUMsS0FDYnF1SCxFQUFTeHdILEVBQU13d0gsUUFHVixDQUFFNzRGLEtBQU1BLEVBQU1yZSxPQUFRQSxFQUFRblgsS0FBTUEsRUFBTXF1SCxPQUFRQSxHQXhDL0NDLENBRkV2NEYsRUFBUWw0QixPQUdoQjIzQixFQUFPNG1ELEVBQUk1bUQsS0FDWHJlLEVBQVNpbEUsRUFBSWpsRSxPQUNiblgsRUFBT284RSxFQUFJcDhFLEtBQ1hxdUgsRUFBU2p5QyxFQUFJaXlDLE9BQ2pCLEdBQUs3NEYsR0FBU3JlLEdBQVduWCxFQUt6QixHQUFLdzFCLEVBQUwsQ0FLQSxJQUFJejZCLEVBQUtpeUgsRUFBTXp3RSxRQUVidGhELEVBQUdpekgsSUFBTWp6SCxFQUFHZ3pILFlBRFZJLEdBQ3lCRixFQUFRcHpILEVBQUdpd0gsT0FBT3VELEdBQUd6M0YsTUFBTXEzRixFQUFPLENBQUUzNEYsRUFBTTY0RixHQUFTL3RILE9BQVFrdUgsRUFBV3IzRyxFQUFRblgsTUFFOUVvdUgsRUFBUXJ6SCxFQUFHaXdILE9BQU96bUYsRUFBRXpOLE1BQU1zM0YsRUFBTyxDQUFFNTRGLEdBQU9sMUIsT0FBUWt1SCxFQUFXcjNHLEVBQVFuWCxLQUVsRy9FLEVBQUcweUgsUUFBVTV5SCxFQUFHaXdILE1BQU03ekcsT0FDdEJsYyxFQUFHNHlILGVBQWlCOXlILEVBQUdpd0gsTUFBTThDLGlCQUFpQi95SCxFQUFHaXdILE1BQU03ekcsYUFYckRra0MsRUFBSyw0Q0FMTEEsRUFBSyw0QkFxQ1QsU0FBU216RSxFQUFZcjNHLEVBQVFuWCxHQUMzQixJQUFJMEosRUFBUyxHQU9iLE9BTEF5TixHQUFVek4sRUFBT2pQLEtBQUswYyxHQUNsQm5YLElBQVN1RyxNQUFNcEcsUUFBUUgsSUFBU2s3RCxFQUFjbDdELEtBQ2hEMEosRUFBT2pQLEtBQUt1RixHQUdQMEosRUFLVCxTQUFTK2tILEVBQVNDLEdBTWhCRCxFQUFRRSxXQUFZLEdBRXBCM3pILEVBQU0wekgsR0FFYXptRixTQUFXeCtCLE9BQU96TyxFQUFJaXRDLFFBQVF0aUMsTUFBTSxLQUFLLElBeGU5RCxTQUFpQjNLLEdBQ1ZBLEVBQUl5RCxVQUFVQyxlQUFlLFVBRWhDRixPQUFPdW9DLGVBQWUvckMsRUFBSXlELFVBQVcsUUFBUyxDQUM1Q3FHLElBQUssV0FBa0IsT0FBTzNLLEtBQUt5d0gsU0FJdkM1dkgsRUFBSXlELFVBQVVtd0gsR0FBSyxTQUFVdnVILEdBRTNCLElBREEsSUFBSWdCLEVBQVMsR0FBSTA1QixFQUFNaEUsVUFBVTc4QixPQUFTLEVBQ2xDNmdDLEtBQVEsR0FBSTE1QixFQUFRMDVCLEdBQVFoRSxVQUFXZ0UsRUFBTSxHQUVyRCxJQUFJOWpCLEVBQU85YyxLQUFLNndILE1BQ2hCLE9BQU8vekcsRUFBS2k5QixHQUFHcGQsTUFBTTdmLEVBQU0sQ0FBRTVXLEVBQUs0VyxFQUFLRSxPQUFRRixFQUFLNDNHLGVBQWdCMTBILE1BQU9tRyxPQUFRZSxLQUdyRnJHLEVBQUl5RCxVQUFVcXdILElBQU0sU0FBVXp1SCxFQUFLZ3VILEdBRWpDLElBREEsSUFBSWh0SCxFQUFTLEdBQUkwNUIsRUFBTWhFLFVBQVU3OEIsT0FBUyxFQUNsQzZnQyxLQUFRLEdBQUkxNUIsRUFBUTA1QixHQUFRaEUsVUFBV2dFLEVBQU0sR0FFckQsSUFBSTlqQixFQUFPOWMsS0FBSzZ3SCxNQUNoQixPQUFPL3pHLEVBQUs4M0csSUFBSWo0RixNQUFNN2YsRUFBTSxDQUFFNVcsRUFBSzRXLEVBQUtFLE9BQVFGLEVBQUs0M0csZUFBZ0IxMEgsS0FBTWswSCxHQUFTL3RILE9BQVFlLEtBRzlGckcsRUFBSXlELFVBQVV1d0gsSUFBTSxTQUFVM3VILEVBQUs4VyxHQUNqQyxJQUFJRixFQUFPOWMsS0FBSzZ3SCxNQUNoQixPQUFPL3pHLEVBQUtnNEcsSUFBSTV1SCxFQUFLNFcsRUFBS0UsT0FBUUYsRUFBSzQzRyxlQUFnQjEzRyxJQUd6RG5jLEVBQUl5RCxVQUFVeXdILEdBQUssU0FBVXJ4SCxHQUkzQixJQUhBLElBQUl1K0UsRUFFQXA4RSxFQUFPLEdBQUkrNkIsRUFBTWhFLFVBQVU3OEIsT0FBUyxFQUNoQzZnQyxLQUFRLEdBQUkvNkIsRUFBTSs2QixHQUFRaEUsVUFBV2dFLEVBQU0sR0FDbkQsT0FBUXFoRCxFQUFNamlGLEtBQUs2d0gsT0FBTzFzRixFQUFFeEgsTUFBTXNsRCxFQUFLLENBQUV2K0UsR0FBUXlDLE9BQVFOLEtBRzNEaEYsRUFBSXlELFVBQVUwd0gsR0FBSyxTQUFVdHhILEdBSTNCLElBSEEsSUFBSXUrRSxFQUVBcDhFLEVBQU8sR0FBSSs2QixFQUFNaEUsVUFBVTc4QixPQUFTLEVBQ2hDNmdDLEtBQVEsR0FBSS82QixFQUFNKzZCLEdBQVFoRSxVQUFXZ0UsRUFBTSxHQUNuRCxPQUFRcWhELEVBQU1qaUYsS0FBSzZ3SCxPQUFPNXhGLEVBQUV0QyxNQUFNc2xELEVBQUssQ0FBRXYrRSxHQUFReUMsT0FBUU4sS0FxYzNEc3pFLENBQU90NEUsR0FDUEEsRUFBSXd6RSxNQUFNQSxHQUNWeHpFLEVBQUk4NkIsVUFBVSxJQUFLLENBQUU1MkIsS0FBTUEsRUFBTTgyQixPQUFRQSxFQUFRRSxPQUFRQSxJQUN6RGw3QixFQUFJbzBILFVBQVVsRCxFQUF1QnBxSCxLQUFNb3FILEdBQzNDbHhILEVBQUlvMEgsVUFBVW5DLEVBQWdCbnJILEtBQU1tckgsR0FHdkJqeUgsRUFBSW1DLE9BQU9reUgsc0JBQ2pCcDRHLEtBQU8sU0FBVXE0RyxFQUFXQyxHQUNqQyxZQUFvQi8xSCxJQUFiKzFILEVBQ0hELEVBQ0FDLEdBTVIsSUFBSUMsRUFBZ0IsV0FDbEJyMUgsS0FBS3MxSCxRQUFVanhILE9BQU9vb0MsT0FBTyxPQUcvQjRvRixFQUFjL3dILFVBQVVnNUUsWUFBYyxTQUFzQnArRSxFQUFTZ0ksR0FDbkUsSUFBS0EsRUFDSCxNQUFPLENBQUNoSSxHQUVWLElBQUlpRyxFQUFTbkYsS0FBS3MxSCxRQUFRcDJILEdBSzFCLE9BSktpRyxJQUNIQSxFQVdKLFNBQWdCdStCLEdBS2QsSUFKQSxJQUFJditCLEVBQVMsR0FDVDJaLEVBQVcsRUFFWG5jLEVBQU8sR0FDSm1jLEVBQVc0a0IsRUFBTzNqQyxRQUFRLENBQy9CLElBQUl3MUgsRUFBTzd4RixFQUFPNWtCLEtBQ2xCLEdBQWEsTUFBVHkyRyxFQUFjLENBQ1o1eUgsR0FDRndDLEVBQU83RSxLQUFLLENBQUVyQixLQUFNLE9BQVF5RSxNQUFPZixJQUdyQ0EsRUFBTyxHQUNQLElBQUk2eUgsRUFBTSxHQUVWLElBREFELEVBQU83eEYsRUFBTzVrQixVQUNFemYsSUFBVGsySCxHQUErQixNQUFUQSxHQUMzQkMsR0FBT0QsRUFDUEEsRUFBTzd4RixFQUFPNWtCLEtBRWhCLElBQUkyMkcsRUFBb0IsTUFBVEYsRUFFWHQySCxFQUFPeTJILEVBQW9CcnlGLEtBQUtteUYsR0FDaEMsT0FDQUMsR0FBWUUsRUFBcUJ0eUYsS0FBS215RixHQUNwQyxRQUNBLFVBQ05yd0gsRUFBTzdFLEtBQUssQ0FBRW9ELE1BQU84eEgsRUFBS3YySCxLQUFNQSxRQUNkLE1BQVRzMkgsRUFFa0IsTUFBdkI3eEYsRUFBTyxLQUNUL2dDLEdBQVE0eUgsR0FHVjV5SCxHQUFRNHlILEVBTVosT0FGQTV5SCxHQUFRd0MsRUFBTzdFLEtBQUssQ0FBRXJCLEtBQU0sT0FBUXlFLE1BQU9mLElBRXBDd0MsRUFsREkwWCxDQUFNM2QsR0FDZmMsS0FBS3MxSCxRQUFRcDJILEdBQVdpRyxHQW9ENUIsU0FBa0JBLEVBQVErQixHQUN4QixJQUFJMHVILEVBQVcsR0FDWG4zRyxFQUFRLEVBRVI4NEIsRUFBT25yQyxNQUFNcEcsUUFBUWtCLEdBQ3JCLE9BQ0E0bEMsRUFBUzVsQyxHQUNQLFFBQ0EsVUFDTixHQUFhLFlBQVRxd0MsRUFBc0IsT0FBT3ErRSxFQUVqQyxLQUFPbjNHLEVBQVF0WixFQUFPcEYsUUFBUSxDQUM1QixJQUFJeUYsRUFBUUwsRUFBT3NaLEdBQ25CLE9BQVFqWixFQUFNdkcsTUFDWixJQUFLLE9BQ0gyMkgsRUFBU3QxSCxLQUFLa0YsRUFBTTlCLE9BQ3BCLE1BQ0YsSUFBSyxPQUNIa3lILEVBQVN0MUgsS0FBSzRHLEVBQU9tdEIsU0FBUzd1QixFQUFNOUIsTUFBTyxNQUMzQyxNQUNGLElBQUssUUFDVSxVQUFUNnpDLEdBQ0ZxK0UsRUFBU3QxSCxLQUFLLEVBQVNrRixFQUFNOUIsUUFhbkMrYSxJQUdGLE9BQU9tM0csRUF4RkFDLENBQVExd0gsRUFBUStCLElBS3pCLElBQUl3dUgsRUFBc0IsV0FDdEJDLEVBQXVCLFdBOEd2QkcsRUFBbUIsR0FFdkJBLEVBWmtCLEdBWWMsQ0FDOUIsR0FBTSxDQWJVLEdBY2hCLE1BQVMsQ0FYSSxFQVRGLEdBcUJYLElBQUssQ0FYVyxHQVloQixJQUFPLENBVFEsSUFZakJBLEVBbEJjLEdBa0JjLENBQzFCLEdBQU0sQ0FuQk0sR0FvQlosSUFBSyxDQW5CWSxHQW9CakIsSUFBSyxDQWxCVyxHQW1CaEIsSUFBTyxDQWhCUSxJQW1CakJBLEVBeEJtQixHQXdCYyxDQUMvQixHQUFNLENBekJXLEdBMEJqQixNQUFTLENBekJJLEVBVEYsR0FtQ1gsRUFBSyxDQTFCUSxFQVRGLEdBb0NYLE9BQVUsQ0EzQkcsRUFURixJQXVDYkEsRUE5QmUsR0E4QmMsQ0FDM0IsTUFBUyxDQS9CSSxFQVRGLEdBeUNYLEVBQUssQ0FoQ1EsRUFURixHQTBDWCxPQUFVLENBakNHLEVBVEYsR0EyQ1gsR0FBTSxDQXBDTSxFQU5ILEdBMkNULElBQUssQ0FwQ1ksRUFQUixHQTRDVCxJQUFLLENBbkNXLEVBVFAsR0E2Q1QsSUFBTyxDQWpDUSxFQVpOLElBZ0RYQSxFQXZDa0IsR0F1Q2MsQ0FDOUIsSUFBSyxDQXZDZSxFQVhULEdBbURYLElBQUssQ0F2Q2UsRUFaVCxHQW9EWCxJQUFLLENBMUNXLEVBUk8sR0FtRHZCLElBQUssQ0E5Q08sRUFKTSxHQW1EbEIsSUF4Q1UsRUF5Q1YsS0FBUSxDQTdDUSxFQVZMLElBMERiQSxFQS9Dc0IsR0ErQ2MsQ0FDbEMsSUFBSyxDQWpEVyxFQVZMLEdBNERYLElBOUNVLEVBK0NWLEtBQVEsQ0FsRFksRUFYVCxJQWdFYkEsRUFwRHNCLEdBb0RjLENBQ2xDLElBQUssQ0F2RFcsRUFWTCxHQWtFWCxJQXBEVSxFQXFEVixLQUFRLENBdkRZLEVBWlQsSUEwRWIsSUFBSUMsRUFBaUIsa0RBcUJyQixTQUFTQyxFQUFpQnZaLEdBQ3hCLEdBQUlBLFFBQW1DLE1BQU8sTUFJOUMsT0FGV0EsRUFBR2o5RSxXQUFXLElBR3ZCLEtBQUssR0FDTCxLQUFLLEdBQ0wsS0FBSyxHQUNMLEtBQUssR0FDTCxLQUFLLEdBQ0gsT0FBT2k5RSxFQUVULEtBQUssR0FDTCxLQUFLLEdBQ0wsS0FBSyxHQUNILE1BQU8sUUFFVCxLQUFLLEVBQ0wsS0FBSyxHQUNMLEtBQUssR0FDTCxLQUFLLElBQ0wsS0FBSyxNQUNMLEtBQUssS0FDTCxLQUFLLEtBQ0gsTUFBTyxLQUdYLE1BQU8sUUF5SFQsSUFBSXdaLEVBQVcsV0FDYmoySCxLQUFLeTdHLE9BQVNwM0csT0FBT29vQyxPQUFPLE9BTTlCd3BGLEVBQVMzeEgsVUFBVTR4SCxVQUFZLFNBQW9CNzZGLEdBQ2pELElBQUk4NkYsRUFBTW4ySCxLQUFLeTdHLE9BQU9wZ0YsR0FPdEIsT0FOSzg2RixJQUNIQSxFQTlHSixTQUFrQjk2RixHQUNoQixJQUlJeUUsRUFDQTU1QixFQUNBa3dILEVBQ0FuM0gsRUFDQW8zSCxFQUNBcHhELEVBQ0FxeEQsRUFWQTF3SCxFQUFPLEdBQ1A2WSxHQUFTLEVBQ1Q4NEIsRUE3SVksRUE4SVpnL0UsRUFBZSxFQVFmdnhELEVBQVUsR0F1Q2QsU0FBU3d4RCxJQUNQLElBQUlDLEVBQVdwN0YsRUFBSzVjLEVBQVEsR0FDNUIsR0ExTGtCLElBMExiODRCLEdBQXlDLE1BQWJrL0UsR0F6TGYsSUEwTGZsL0UsR0FBeUMsTUFBYmsvRSxFQUk3QixPQUhBaDRHLElBQ0EyM0csRUFBVSxLQUFPSyxFQUNqQnp4RCxFQXpNTyxNQTBNQSxFQUlYLElBaERBQSxFQTdKUyxHQTZKTyxnQkFDRjNsRSxJQUFSNkcsSUFDRk4sRUFBS3RGLEtBQUs0RixHQUNWQSxPQUFNN0csSUFJVjJsRSxFQXJLVyxHQXFLTyxnQkFDSjNsRSxJQUFSNkcsRUFDRkEsRUFBTWt3SCxFQUVObHdILEdBQU9rd0gsR0FJWHB4RCxFQTNLdUIsR0EyS08sV0FDNUJBLEVBOUtTLEtBK0tUdXhELEtBR0Z2eEQsRUEvS2tCLEdBK0tPLFdBQ3ZCLEdBQUl1eEQsRUFBZSxFQUNqQkEsSUFDQWgvRSxFQTNLWSxFQTRLWnl0QixFQXRMTyxTQXVMRixDQUVMLEdBREF1eEQsRUFBZSxPQUNIbDNILElBQVI2RyxFQUFxQixPQUFPLEVBRWhDLElBQVksS0FEWkEsRUF0RE4sU0FBd0JtMUIsR0FDdEIsSUFsRG9Cb0YsRUFDaEJ0QixFQVRjOE0sRUEwRGR5cUYsRUFBVXI3RixFQUFLbGhCLE9BRW5CLE9BQXVCLE1BQW5Ca2hCLEVBQUtxRixPQUFPLEtBQWNsVixNQUFNNlAsTUE1RGxCNFEsRUE4RER5cUYsRUE3RFZYLEVBQWUxeUYsS0FBSzRJLElBUXZCOU0sR0FEZ0JzQixFQXNEb0JpMkYsR0FyRDVCbDNGLFdBQVcsTUFDZmlCLEVBQUlqQixXQUFXaUIsRUFBSTFnQyxPQUFTLElBQ1gsS0FBTm8vQixHQUFvQixLQUFOQSxFQUU3QnNCLEVBREFBLEVBQUl4NkIsTUFBTSxHQUFJLEdBa0RpQyxJQUFNeXdILEdBaUQvQ0MsQ0FBY3p3SCxJQUVsQixPQUFPLEVBRVA4K0QsRUE3TEcsT0E2TU8sT0FBVHp0QixHQUlMLEdBSEE5NEIsSUFHVSxRQUZWcWhCLEVBQUl6RSxFQUFLNWMsTUFFUyszRyxJQUFsQixDQVFBLEdBSkF2M0gsRUFBTysySCxFQUFnQmwyRixHQXhNZixLQTBNUnUyRixHQURBQyxFQUFVUixFQUFpQnYrRSxJQUNOdDRDLElBQVNxM0gsRUFBYyxNQTFNcEMsR0E2TU4sT0FLRixHQUZBLytFLEVBQU84K0UsRUFBVyxJQUNsQnB4RCxFQUFTRCxFQUFRcXhELEVBQVcsT0FHMUJELE9BQXNCLzJILEtBRHRCKzJILEVBQVVDLEVBQVcsSUFFakJ2MkYsRUFDQXMyRixHQUNhLElBQWJueEQsS0FDRixPQUlKLEdBN05hLElBNk5UMXRCLEVBQ0YsT0FBTzN4QyxHQW1CSGd4SCxDQUFRdjdGLE1BRVpyN0IsS0FBS3k3RyxPQUFPcGdGLEdBQVE4NkYsR0FHakJBLEdBQU8sSUFNaEJGLEVBQVMzeEgsVUFBVXV5SCxhQUFlLFNBQXVCbHhILEVBQUswMUIsR0FDNUQsSUFBS3lSLEVBQVNubkMsR0FBUSxPQUFPLEtBRTdCLElBQUlpeUQsRUFBUTUzRCxLQUFLazJILFVBQVU3NkYsR0FDM0IsR0FBcUIsSUFBakJ1OEIsRUFBTTczRCxPQUNSLE9BQU8sS0FLUCxJQUhBLElBQUlBLEVBQVM2M0QsRUFBTTczRCxPQUNmc3pDLEVBQU8xdEMsRUFDUEYsRUFBSSxFQUNEQSxFQUFJMUYsR0FBUSxDQUNqQixJQUFJMkQsRUFBUTJ2QyxFQUFLdWtCLEVBQU1ueUQsSUFDdkIsUUFBY3BHLElBQVZxRSxFQUNGLE9BQU8sS0FFVDJ2QyxFQUFPM3ZDLEVBQ1ArQixJQUdGLE9BQU80dEMsR0FRWCxJQTY5Qkl5akYsRUE3OUJBQyxFQUFpQiwwQkFDakJDLEVBQWlCLG9EQUNqQkMsRUFBdUIscUJBQ3ZCQyxFQUFrQixRQUNsQkMsRUFBbUIsQ0FDckIsTUFBUyxTQUFVMTJGLEdBQU8sT0FBT0EsRUFBSTIyRixxQkFDckMsTUFBUyxTQUFVMzJGLEdBQU8sT0FBT0EsRUFBSTQyRixxQkFDckMsV0FBYyxTQUFVNTJGLEdBQU8sTUFBUSxHQUFNQSxFQUFJQyxPQUFPLEdBQUcwMkYsb0JBQXdCMzJGLEVBQUkvNkIsT0FBTyxLQUc1RjR4SCxFQUFtQixJQUFJakMsRUFFdkJ0NEcsRUFBVSxTQUFrQnhXLEdBQzlCLElBQUk0NkUsRUFBU25oRixVQUNJLElBQVp1RyxJQUFxQkEsRUFBVSxLQU0vQjFGLEdBQXlCLG9CQUFYdkIsUUFBMEJBLE9BQU91QixLQUNsRHl6SCxFQUFRaDFILE9BQU91QixLQUdqQixJQUFJbWMsRUFBU3pXLEVBQVF5VyxRQUFVLFFBQzNCOHpHLEdBQTRDLElBQTNCdnFILEVBQVF1cUgsaUJBRXpCdnFILEVBQVF1cUgsZ0JBQWtCLFNBQzFCcmlILEVBQVdsSSxFQUFRa0ksVUFBWSxHQUMvQjhvSCxFQUFrQmh4SCxFQUFRZ3hILGlCQUFtQixHQUM3Q0MsRUFBZ0JqeEgsRUFBUWl4SCxlQUFpQixHQUU3Q3gzSCxLQUFLeTNILElBQU0sS0FDWHozSCxLQUFLMDNILFdBQWFueEgsRUFBUTBXLFdBQWFxNkcsRUFDdkN0M0gsS0FBSzIzSCxXQUFhcHhILEVBQVFxdEgsV0FBYSxHQUN2QzV6SCxLQUFLNDNILFNBQVdyeEgsRUFBUXN4SCxTQUFXLEtBQ25DNzNILEtBQUs4M0gsTUFBUXZ4SCxFQUFRK2tELE1BQVEsS0FDN0J0ckQsS0FBSyszSCxXQUF5QjE0SCxJQUFqQmtILEVBQVErNEcsUUFBOEIvNEcsRUFBUSs0RyxLQUMzRHQvRyxLQUFLZzRILG1CQUF5QzM0SCxJQUF6QmtILEVBQVEweEgsZ0JBRXZCMXhILEVBQVEweEgsYUFDZGo0SCxLQUFLazRILDZCQUE2RDc0SCxJQUFuQ2tILEVBQVF3cUgsMEJBRWpDeHFILEVBQVF3cUgsdUJBQ2Qvd0gsS0FBS200SCw0QkFBMkQ5NEgsSUFBbENrSCxFQUFReXFILHVCQUVsQ3pxSCxFQUFReXFILHNCQUNaaHhILEtBQUtvNEgseUJBQXFELzRILElBQS9Ca0gsRUFBUTBxSCxzQkFFN0IxcUgsRUFBUTBxSCxtQkFDZGp4SCxLQUFLcTRILG9CQUFzQixHQUMzQnI0SCxLQUFLczRILGtCQUFvQixHQUN6QnQ0SCxLQUFLdTRILE1BQVEsSUFBSXRDLEVBQ2pCajJILEtBQUt3NEgsZUFBaUIsR0FDdEJ4NEgsS0FBS3k0SCwrQkFBaUVwNUgsSUFBckNrSCxFQUFRNHFILDRCQUVuQzVxSCxFQUFRNHFILHlCQUNkbnhILEtBQUtreEgsbUJBQXFCM3FILEVBQVEycUgsb0JBQXNCLEdBQ3hEbHhILEtBQUswNEgsbUJBQXFCbnlILEVBQVFveUgsbUJBQXFCLE1BQ3ZEMzRILEtBQUs0NEgsaUJBQW1CcnlILEVBQVFzeUgsaUJBQW1CLEtBRW5ENzRILEtBQUs4NEgsT0FBUyxTQUFVNTVILEVBQVNnSCxHQUMvQixTQUFLaEgsSUFBWWdILEdBQ1oyMEUsRUFBT3NHLEVBQU9vM0MsTUFBTTFCLGFBQWEzM0gsRUFBU2dILE1BRTNDaEgsRUFBUWdILEtBSWtCLFNBQTVCbEcsS0FBSzA0SCxvQkFBNkQsVUFBNUIxNEgsS0FBSzA0SCxvQkFDN0NyMEgsT0FBT3VCLEtBQUs2SSxHQUFVbEosU0FBUSxTQUFVeVgsR0FDdENta0UsRUFBTzQzQyxvQkFBb0IvN0csRUFBUW1rRSxFQUFPdTNDLG1CQUFvQmpxSCxFQUFTdU8sT0FJM0VoZCxLQUFLZzVILFFBQVEsQ0FDWGg4RyxPQUFRQSxFQUNSOHpHLGVBQWdCQSxFQUNoQnJpSCxTQUFVQSxFQUNWOG9ILGdCQUFpQkEsRUFDakJDLGNBQWVBLEtBSWZ2MkMsRUFBcUIsQ0FBRXJnRixHQUFJLENBQUUrOEIsY0FBYyxHQUFPbHZCLFNBQVUsQ0FBRWt2QixjQUFjLEdBQU80NUYsZ0JBQWlCLENBQUU1NUYsY0FBYyxHQUFPNjVGLGNBQWUsQ0FBRTc1RixjQUFjLEdBQU9zN0YsaUJBQWtCLENBQUV0N0YsY0FBYyxHQUFPM2dCLE9BQVEsQ0FBRTJnQixjQUFjLEdBQU9tekYsZUFBZ0IsQ0FBRW56RixjQUFjLEdBQU9vekYsdUJBQXdCLENBQUVwekYsY0FBYyxHQUFPazZGLFFBQVMsQ0FBRWw2RixjQUFjLEdBQU8xZ0IsVUFBVyxDQUFFMGdCLGNBQWMsR0FBT3F6RixzQkFBdUIsQ0FBRXJ6RixjQUFjLEdBQU9zekYsbUJBQW9CLENBQUV0ekYsY0FBYyxHQUFPd3pGLHlCQUEwQixDQUFFeHpGLGNBQWMsR0FBT2c3RixrQkFBbUIsQ0FBRWg3RixjQUFjLEdBQU9rN0YsZ0JBQWlCLENBQUVsN0YsY0FBYyxJQUUxbEI1Z0IsRUFBUXpZLFVBQVV5MEgsb0JBQXNCLFNBQThCLzdHLEVBQVFrOEcsRUFBT2g2SCxHQUNuRixJQUVJdTlCLEVBQUssU0FBVXk4RixFQUFPbDhHLEVBQVE5ZCxFQUFTMDRELEdBQ3pDLEdBQUltSixFQUFjN2hFLEdBQ2hCbUYsT0FBT3VCLEtBQUsxRyxHQUFTcUcsU0FBUSxTQUFVVyxHQUNyQyxJQUFJOUQsRUFBTWxELEVBQVFnSCxHQUNkNjZELEVBQWMzK0QsSUFDaEJ3MUQsRUFBTXQzRCxLQUFLNEYsR0FDWDB4RCxFQUFNdDNELEtBQUssS0FDWG04QixFQUFHeThGLEVBQU9sOEcsRUFBUTVhLEVBQUt3MUQsR0FDdkJBLEVBQU0zekIsTUFDTjJ6QixFQUFNM3pCLFFBRU4yekIsRUFBTXQzRCxLQUFLNEYsR0FDWHUyQixFQUFHeThGLEVBQU9sOEcsRUFBUTVhLEVBQUt3MUQsR0FDdkJBLEVBQU0zekIsZUFHTCxHQUFJNzNCLE1BQU1wRyxRQUFROUcsR0FDdkJBLEVBQVFxRyxTQUFRLFNBQVVwQixFQUFNc2EsR0FDMUJzaUQsRUFBYzU4RCxJQUNoQnl6RCxFQUFNdDNELEtBQU0sSUFBTW1lLEVBQVEsS0FDMUJtNUMsRUFBTXQzRCxLQUFLLEtBQ1htOEIsRUFBR3k4RixFQUFPbDhHLEVBQVE3WSxFQUFNeXpELEdBQ3hCQSxFQUFNM3pCLE1BQ04yekIsRUFBTTN6QixRQUVOMnpCLEVBQU10M0QsS0FBTSxJQUFNbWUsRUFBUSxLQUMxQmdlLEVBQUd5OEYsRUFBT2w4RyxFQUFRN1ksRUFBTXl6RCxHQUN4QkEsRUFBTTN6QixlQUdMLEdBQXVCLGlCQUFaL2tDLEdBQ042M0gsRUFBZTF6RixLQUFLbmtDLEdBQ3JCLENBQ1AsSUFBSTg4QixFQUFNLDZCQUErQjk4QixFQUFVLGlCQUFvQjA0RCxFQUFNcDNELEtBQUssSUFBTyxTQUFXd2MsRUFBUyw2RkFDL0YsU0FBVms4RyxFQUNGaDRFLEVBQUtsbEIsR0FDYyxVQUFWazlGLEdBbHBDbkIsU0FBZ0JsOUYsRUFBS21CLEdBQ0ksb0JBQVo1d0IsU0FDVEEsUUFBUUMsTUFBTSxjQUFnQnd2QixHQWlwQ3hCeHZCLENBQU13dkIsS0FNZFMsRUFBR3k4RixFQUFPbDhHLEVBQVE5ZCxFQTdDTixLQWdEZDZkLEVBQVF6WSxVQUFVMDBILFFBQVUsU0FBa0J0NEgsR0FDNUMsSUFBSW9sSCxFQUFTamxILEVBQUltQyxPQUFPOGlILE9BQ3hCamxILEVBQUltQyxPQUFPOGlILFFBQVMsRUFDcEI5bEgsS0FBS3kzSCxJQUFNLElBQUk1MkgsRUFBSSxDQUFFSCxLQUFNQSxJQUMzQkcsRUFBSW1DLE9BQU84aUgsT0FBU0EsR0FHdEIvb0csRUFBUXpZLFVBQVV3dEgsVUFBWSxXQUM1Qjl4SCxLQUFLeTNILElBQUkwQixZQUdYcDhHLEVBQVF6WSxVQUFVbXRILHNCQUF3QixTQUFnQzd3SCxHQUN4RVosS0FBS3c0SCxlQUFlbDRILEtBQUtNLElBRzNCbWMsRUFBUXpZLFVBQVV1dEgsd0JBQTBCLFNBQWtDanhILElBdG5DOUUsU0FBaUJxOUIsRUFBSzk1QixHQUNwQixHQUFJODVCLEVBQUlsK0IsT0FBUSxDQUNkLElBQUkwZSxFQUFRd2YsRUFBSTlCLFFBQVFoNEIsR0FDcEJzYSxHQUFTLEdBQ0p3ZixFQUFJaUksT0FBT3puQixFQUFPLElBbW5DN0JoVyxDQUFPekksS0FBS3c0SCxlQUFnQjUzSCxJQUc5Qm1jLEVBQVF6WSxVQUFVcXNILGNBQWdCLFdBQ2hDLElBQUlwZ0YsRUFBT3Z3QyxLQUNYLE9BQU9BLEtBQUt5M0gsSUFBSTJCLE9BQU8sU0FBUyxXQUU5QixJQURBLElBQUkzekgsRUFBSThxQyxFQUFLaW9GLGVBQWV6NEgsT0FDckIwRixLQUNMNUUsRUFBSSt5QyxVQUFTLFdBQ1hyRCxFQUFLaW9GLGVBQWUveUgsSUFBTThxQyxFQUFLaW9GLGVBQWUveUgsR0FBRzR6SCxvQkFHcEQsQ0FBRUMsTUFBTSxLQUdidjhHLEVBQVF6WSxVQUFVaXRILFlBQWMsV0FFOUIsSUFBS3Z4SCxLQUFLKzNILFFBQVUvM0gsS0FBSzgzSCxNQUFTLE9BQU8sS0FDekMsSUFBSXR2SCxFQUFTeEksS0FBS3kzSCxJQUNsQixPQUFPejNILEtBQUs4M0gsTUFBTWpILE1BQU1qd0gsR0FBR3c0SCxPQUFPLFVBQVUsU0FBVWgzSCxHQUNwRG9HLEVBQU8rd0gsS0FBSy93SCxFQUFRLFNBQVVwRyxHQUM5Qm9HLEVBQU82d0gsaUJBQ04sQ0FBRXZnQixXQUFXLEtBR2xCNzNCLEVBQW1CcmdGLEdBQUcrSixJQUFNLFdBQWMsT0FBTzNLLEtBQUt5M0gsS0FFdER4MkMsRUFBbUJ4eUUsU0FBUzlELElBQU0sV0FBYyxPQUFPOGtILEVBQVd6dkgsS0FBSzAwSCxpQkFDdkV6ekMsRUFBbUJzMkMsZ0JBQWdCNXNILElBQU0sV0FBYyxPQUFPOGtILEVBQVd6dkgsS0FBS3c1SCx3QkFDOUV2NEMsRUFBbUJ1MkMsY0FBYzdzSCxJQUFNLFdBQWMsT0FBTzhrSCxFQUFXenZILEtBQUt5NUgsc0JBQzVFeDRDLEVBQW1CZzRDLGlCQUFpQnR1SCxJQUFNLFdBQWMsT0FBT3RHLE9BQU91QixLQUFLNUYsS0FBS3lPLFVBQVUreUQsUUFFMUZ5ZixFQUFtQmprRSxPQUFPclMsSUFBTSxXQUFjLE9BQU8zSyxLQUFLeTNILElBQUl6NkcsUUFDOURpa0UsRUFBbUJqa0UsT0FBT2hTLElBQU0sU0FBVWdTLEdBQ3hDaGQsS0FBS3kzSCxJQUFJOEIsS0FBS3Y1SCxLQUFLeTNILElBQUssU0FBVXo2RyxJQUdwQ2lrRSxFQUFtQjZ2QyxlQUFlbm1ILElBQU0sV0FBYyxPQUFPM0ssS0FBS3kzSCxJQUFJM0csZ0JBQ3RFN3ZDLEVBQW1CNnZDLGVBQWU5bEgsSUFBTSxTQUFVZ1MsR0FDaERoZCxLQUFLMDVILGtCQUFvQixHQUN6QjE1SCxLQUFLeTNILElBQUk4QixLQUFLdjVILEtBQUt5M0gsSUFBSyxpQkFBa0J6NkcsSUFHNUNpa0UsRUFBbUI4dkMsdUJBQXVCcG1ILElBQU0sV0FBYyxPQUFPM0ssS0FBS2s0SCx5QkFDMUVqM0MsRUFBbUI4dkMsdUJBQXVCL2xILElBQU0sU0FBVTJ1SCxHQUFZMzVILEtBQUtrNEgsd0JBQTBCeUIsR0FFckcxNEMsRUFBbUI0MkMsUUFBUWx0SCxJQUFNLFdBQWMsT0FBTzNLLEtBQUs0M0gsVUFDM0QzMkMsRUFBbUI0MkMsUUFBUTdzSCxJQUFNLFNBQVVvd0IsR0FBV3A3QixLQUFLNDNILFNBQVd4OEYsR0FFdEU2bEQsRUFBbUJoa0UsVUFBVXRTLElBQU0sV0FBYyxPQUFPM0ssS0FBSzAzSCxZQUM3RHoyQyxFQUFtQmhrRSxVQUFValMsSUFBTSxTQUFVaVMsR0FBYWpkLEtBQUswM0gsV0FBYXo2RyxHQUU1RWdrRSxFQUFtQit2QyxzQkFBc0JybUgsSUFBTSxXQUFjLE9BQU8zSyxLQUFLbTRILHdCQUN6RWwzQyxFQUFtQit2QyxzQkFBc0JobUgsSUFBTSxTQUFVODZHLEdBQVU5bEgsS0FBS200SCx1QkFBeUJyUyxHQUVqRzdrQyxFQUFtQmd3QyxtQkFBbUJ0bUgsSUFBTSxXQUFjLE9BQU8zSyxLQUFLbzRILHFCQUN0RW4zQyxFQUFtQmd3QyxtQkFBbUJqbUgsSUFBTSxTQUFVODZHLEdBQVU5bEgsS0FBS280SCxvQkFBc0J0UyxHQUUzRjdrQyxFQUFtQmt3Qyx5QkFBeUJ4bUgsSUFBTSxXQUFjLE9BQU8zSyxLQUFLeTRILDJCQUM1RXgzQyxFQUFtQmt3Qyx5QkFBeUJubUgsSUFBTSxTQUFVNm9ILEdBQVk3ekgsS0FBS3k0SCwwQkFBNEI1RSxHQUV6RzV5QyxFQUFtQjAzQyxrQkFBa0JodUgsSUFBTSxXQUFjLE9BQU8zSyxLQUFLMDRILG9CQUNyRXozQyxFQUFtQjAzQyxrQkFBa0IzdEgsSUFBTSxTQUFVa3VILEdBQ2pELElBQUkvM0MsRUFBU25oRixLQUVYNDVILEVBQVc1NUgsS0FBSzA0SCxtQkFFcEIsR0FEQTE0SCxLQUFLMDRILG1CQUFxQlEsRUFDdEJVLElBQWFWLElBQW9CLFNBQVZBLEdBQThCLFVBQVZBLEdBQW9CLENBQ2pFLElBQUl6cUgsRUFBV3pPLEtBQUswMEgsZUFDcEJyd0gsT0FBT3VCLEtBQUs2SSxHQUFVbEosU0FBUSxTQUFVeVgsR0FDdENta0UsRUFBTzQzQyxvQkFBb0IvN0csRUFBUW1rRSxFQUFPdTNDLG1CQUFvQmpxSCxFQUFTdU8sU0FLN0Vpa0UsRUFBbUI0M0MsZ0JBQWdCbHVILElBQU0sV0FBYyxPQUFPM0ssS0FBSzQ0SCxrQkFDbkUzM0MsRUFBbUI0M0MsZ0JBQWdCN3RILElBQU0sU0FBVW93QixHQUFXcDdCLEtBQUs0NEgsaUJBQW1CeDlGLEdBRXRGcmUsRUFBUXpZLFVBQVVvd0gsYUFBZSxXQUEyQixPQUFPMTBILEtBQUt5M0gsSUFBSWhwSCxVQUM1RXNPLEVBQVF6WSxVQUFVazFILG9CQUFzQixXQUFrQyxPQUFPeDVILEtBQUt5M0gsSUFBSUYsaUJBQzFGeDZHLEVBQVF6WSxVQUFVbTFILGtCQUFvQixXQUFnQyxPQUFPejVILEtBQUt5M0gsSUFBSUQsZUFFdEZ6NkcsRUFBUXpZLFVBQVV1MUgsYUFBZSxTQUF1Qjc4RyxFQUFROVcsRUFBS2txQyxFQUFReHZDLEVBQUlzRyxFQUFRNHlILEdBQ3ZGLElBQUtqL0MsRUFBT3pxQyxHQUFXLE9BQU9BLEVBQzlCLEdBQUlwd0MsS0FBSzQzSCxTQUFVLENBQ2pCLElBQUltQyxFQUFhLzVILEtBQUs0M0gsU0FBU2o3RixNQUFNLEtBQU0sQ0FBQzNmLEVBQVE5VyxFQUFLdEYsRUFBSXNHLElBQzdELEdBQTBCLGlCQUFmNnlILEVBQ1QsT0FBT0EsRUFXWCxHQUFJLzVILEtBQUtrNEgsd0JBQXlCLENBQ2hDLElBQUk4QixFQUFheEssRUFBVTd5RixXQUFNLEVBQVF6MUIsR0FDekMsT0FBT2xILEtBQUtpNkgsUUFBUS96SCxFQUFLNHpILEVBQWlCRSxFQUFXenFILE9BQVFySixHQUU3RCxPQUFPQSxHQUlYNlcsRUFBUXpZLFVBQVU0MUgsZ0JBQWtCLFNBQTBCOTNILEdBQzVELE9BQVFBLElBQVF5NEUsRUFBTzc2RSxLQUFLODNILFFBQVU5M0gsS0FBS2c0SCxlQUc3Q2o3RyxFQUFRelksVUFBVTYxSCxzQkFBd0IsU0FBZ0NqMEgsR0FDeEUsT0FBT2xHLEtBQUtvNEgsK0JBQStCdmdILE9BQ3ZDN1gsS0FBS280SCxvQkFBb0IvMEYsS0FBS245QixHQUM5QmxHLEtBQUtvNEgscUJBR1hyN0csRUFBUXpZLFVBQVU4MUgsa0JBQW9CLFNBQTRCcDlHLEVBQVE5VyxHQUN4RSxPQUFPbEcsS0FBS202SCxzQkFBc0JqMEgsS0FBU2xHLEtBQUtrNkgsbUJBQXFCbDlHLElBQVdoZCxLQUFLOHdILGlCQUd2Ri96RyxFQUFRelksVUFBVSsxSCx5QkFBMkIsU0FBbUNuMEgsR0FDOUUsT0FBT2xHLEtBQUttNEgsa0NBQWtDdGdILE9BQzFDN1gsS0FBS200SCx1QkFBdUI5MEYsS0FBS245QixHQUNqQ2xHLEtBQUttNEgsd0JBR1hwN0csRUFBUXpZLFVBQVVnMkgsYUFBZSxTQUMvQnQ5RyxFQUNBOWQsRUFDQWdILEVBQ0E0OUMsRUFDQWcyRSxFQUNBNXlILEVBQ0FxekgsR0FFQSxJQUFLcjdILEVBQVcsT0FBTyxLQUV2QixJQUdJNnhDLEVBSEF5cEYsRUFBVXg2SCxLQUFLdTRILE1BQU0xQixhQUFhMzNILEVBQVNnSCxHQUMvQyxHQUFJa0csTUFBTXBHLFFBQVF3MEgsSUFBWXo1RCxFQUFjeTVELEdBQVksT0FBT0EsRUFHL0QsR0FBSTMvQyxFQUFPMi9DLEdBQVUsQ0FFbkIsSUFBSXo1RCxFQUFjN2hFLEdBU2hCLE9BQU8sS0FQUCxHQUFtQixpQkFEbkI2eEMsRUFBTTd4QyxFQUFRZ0gsSUFLWixPQUFPLFNBS04sQ0FFTCxHQUF1QixpQkFBWnMwSCxFQU1ULE9BQU8sS0FMUHpwRixFQUFNeXBGLEVBY1YsT0FKSXpwRixFQUFJNVUsUUFBUSxPQUFTLEdBQUs0VSxFQUFJNVUsUUFBUSxPQUFTLEtBQ2pENFUsRUFBTS93QyxLQUFLeTZILE1BQU16OUcsRUFBUTlkLEVBQVM2eEMsRUFBSytTLEVBQU0sTUFBTzU4QyxFQUFRcXpILElBR3ZEdjZILEtBQUtpNkgsUUFBUWxwRixFQUFLK29GLEVBQWlCNXlILEVBQVFoQixJQUdwRDZXLEVBQVF6WSxVQUFVbTJILE1BQVEsU0FDeEJ6OUcsRUFDQTlkLEVBQ0F1aEMsRUFDQXFqQixFQUNBZzJFLEVBQ0E1eUgsRUFDQXF6SCxHQUVBLElBQUl4cEYsRUFBTXRRLEVBS05ua0IsRUFBVXkwQixFQUFJeDBCLE1BQU15NkcsR0FDeEIsSUFBSyxJQUFJMEQsS0FBT3ArRyxFQUdkLEdBQUtBLEVBQVEvWCxlQUFlbTJILEdBQTVCLENBR0EsSUFBSUMsRUFBT3IrRyxFQUFRbytHLEdBQ2ZFLEVBQXVCRCxFQUFLcCtHLE1BQU0wNkcsR0FDbEM0RCxFQUFhRCxFQUFxQixHQUNoQ0UsRUFBZ0JGLEVBQXFCLEdBR3ZDRyxFQUFrQkosRUFBSzM0SCxRQUFRNjRILEVBQVksSUFBSTc0SCxRQUFRazFILEVBQWlCLElBRTVFLEdBQUloc0csRUFBU3F2RyxFQUFrQlEsR0FJN0IsT0FBT2hxRixFQUVUd3BGLEVBQWlCajZILEtBQUt5NkgsR0FHdEIsSUFBSUMsRUFBYWg3SCxLQUFLczZILGFBQ3BCdDlHLEVBQVE5ZCxFQUFTNjdILEVBQWlCajNFLEVBQ2QsUUFBcEJnMkUsRUFBNEIsU0FBV0EsRUFDbkIsUUFBcEJBLE9BQTRCejZILEVBQVk2SCxFQUN4Q3F6SCxHQUdGLEdBQUl2NkgsS0FBS2s2SCxnQkFBZ0JjLEdBQWEsQ0FLcEMsSUFBS2g3SCxLQUFLODNILE1BQVMsTUFBTXozRixNQUFNLG9CQUMvQixJQUFJaXJCLEVBQU90ckQsS0FBSzgzSCxNQUFNakgsTUFDdEJtSyxFQUFhMXZFLEVBQUsydkUsV0FDaEIzdkUsRUFBS29wRSxlQUFnQnBwRSxFQUFLdHVDLE9BQVFzdUMsRUFBS3dsRSxlQUN2Q2lLLEVBQWlCajNFLEVBQU1nMkUsRUFBaUI1eUgsR0FHNUM4ekgsRUFBYWg3SCxLQUFLNjVILGFBQ2hCNzhHLEVBQVErOUcsRUFBaUJDLEVBQVlsM0UsRUFDckMxM0MsTUFBTXBHLFFBQVFrQixHQUFVQSxFQUFTLENBQUNBLEdBQ2xDNHlILEdBR0U5NUgsS0FBSzIzSCxXQUFXcHpILGVBQWV1MkgsR0FDakNFLEVBQWFoN0gsS0FBSzIzSCxXQUFXbUQsR0FBZUUsR0FDbkM3RCxFQUFpQjV5SCxlQUFldTJILEtBQ3pDRSxFQUFhN0QsRUFBaUIyRCxHQUFlRSxJQUcvQ1QsRUFBaUJ0MkYsTUFHakI4TSxFQUFPaXFGLEVBQW1CanFGLEVBQUkvdUMsUUFBUTI0SCxFQUFNSyxHQUF4QmpxRixFQUd0QixPQUFPQSxHQUdUaDBCLEVBQVF6WSxVQUFVMjFILFFBQVUsU0FBa0IvNkgsRUFBUzQ2SCxFQUFpQjV5SCxFQUFRbTBCLEdBQzlFLElBQUkwVixFQUFNL3dDLEtBQUswM0gsV0FBV3A2QyxZQUFZcCtFLEVBQVNnSSxFQUFRbTBCLEdBU3ZELE9BTkswVixJQUNIQSxFQUFNdW1GLEVBQWlCaDZDLFlBQVlwK0UsRUFBU2dJLEVBQVFtMEIsSUFLM0IsV0FBcEJ5K0YsR0FBK0MsaUJBQVIvb0YsRUFBbUJBLEVBQUl2d0MsS0FBSyxJQUFNdXdDLEdBR2xGaDBCLEVBQVF6WSxVQUFVNDJILG1CQUFxQixTQUE2QjEvRSxFQUFPcjNDLEVBQU1nM0gsR0FDL0UsSUFBSUMsR0FBUyxFQVliLE9BWEtsd0csRUFBU3N3QixFQUFPcjNDLEtBQ25CaTNILEdBQVMsRUFDTGozSCxJQUNGaTNILEVBQW1DLE1BQTFCajNILEVBQUtBLEVBQUtwRSxPQUFTLEdBQzVCb0UsRUFBT0EsRUFBS25DLFFBQVEsS0FBTSxJQUMxQnc1QyxFQUFNbDdDLEtBQUs2RCxHQUNQZzNILEdBQVVBLEVBQU9oM0gsS0FDbkJpM0gsRUFBU0QsRUFBT2gzSCxNQUlmaTNILEdBR1RyK0csRUFBUXpZLFVBQVUrMkgscUJBQXVCLFNBQStCNy9FLEVBQU94K0IsRUFBUW0rRyxHQUNyRixJQUFJQyxFQUNBajJILEVBQVM2WCxFQUFPeFIsTUFBTSxLQUMxQixFQUFHLENBQ0QsSUFBSXJILEVBQU9nQixFQUFPM0UsS0FBSyxLQUN2QjQ2SCxFQUFTcDdILEtBQUtrN0gsbUJBQW1CMS9FLEVBQU9yM0MsRUFBTWczSCxHQUM5Q2gySCxFQUFPK2dDLFFBQVEsRUFBRyxTQUNYL2dDLEVBQU9wRixTQUFzQixJQUFYcTdILEdBQzNCLE9BQU9BLEdBR1RyK0csRUFBUXpZLFVBQVVnM0gsb0JBQXNCLFNBQThCOS9FLEVBQU8rL0UsRUFBT0osR0FFbEYsSUFEQSxJQUFJQyxHQUFTLEVBQ0ozMUgsRUFBSSxFQUFJQSxFQUFJODFILEVBQU14N0gsUUFBOEIsa0JBQVhxN0gsRUFBdUIzMUgsSUFBSyxDQUN4RSxJQUFJdVgsRUFBU3UrRyxFQUFNOTFILEdBQ25CMjFILEVBQVNwN0gsS0FBS3E3SCxxQkFBcUI3L0UsRUFBT3grQixFQUFRbStHLEdBRXBELE9BQU9DLEdBR1RyK0csRUFBUXpZLFVBQVVrM0gsZ0JBQWtCLFNBQTBCLzRELEVBQU9xdUQsR0FDbkUsR0FBYyxLQUFWcnVELEVBQWdCLE1BQU8sR0FFdEJ6aUUsS0FBSzA1SCxvQkFDUjE1SCxLQUFLMDVILGtCQUFvQixJQUczQixJQUFJbCtFLEVBQVF4N0MsS0FBSzA1SCxrQkFBa0JqM0QsR0FDbkMsSUFBS2puQixFQUFPLENBQ0xzMUUsSUFDSEEsRUFBaUI5d0gsS0FBSzh3SCxnQkFFeEJ0MUUsRUFBUSxHQU1SLElBSEEsSUFZSTRJLEVBWkFtM0UsRUFBUSxDQUFDOTRELEdBR05yMkQsTUFBTXBHLFFBQVF1MUgsSUFDbkJBLEVBQVF2N0gsS0FBS3M3SCxvQkFDWDkvRSxFQUNBKy9FLEVBQ0F6SyxJQW9CRnlLLEVBRHNCLGlCQVp0Qm4zRSxFQURFaDRDLE1BQU1wRyxRQUFROHFILEdBQ0xBLEVBQ0ZBLGFBQTBCenNILE9BQy9CeXNILEVBQXdCLFFBQ2ZBLEVBQXdCLFFBRXhCLEtBR0ZBLEdBS0gsQ0FBQzFzRSxHQUVEQSxJQUdScGtELEtBQUtzN0gsb0JBQ0g5L0UsRUFDQSsvRSxFQUNBLE1BR0p2N0gsS0FBSzA1SCxrQkFBa0JqM0QsR0FBU2puQixFQUVsQyxPQUFPQSxHQUdUeitCLEVBQVF6WSxVQUFVMjJILFdBQWEsU0FDN0J4c0gsRUFDQXVPLEVBQ0EyOEcsRUFDQXp6SCxFQUNBNDlDLEVBQ0FnMkUsRUFDQWowSCxHQUlBLElBRkEsSUFDSTQxSCxFQURBamdGLEVBQVF4N0MsS0FBS3c3SCxnQkFBZ0J4K0csRUFBUTI4RyxHQUVoQ2wwSCxFQUFJLEVBQUdBLEVBQUkrMUMsRUFBTXo3QyxPQUFRMEYsSUFBSyxDQUNyQyxJQUFJczNCLEVBQU95ZSxFQUFNLzFDLEdBR2pCLElBQUtvMUUsRUFGTDRnRCxFQUNFejdILEtBQUtzNkgsYUFBYXY5RixFQUFNdHVCLEVBQVNzdUIsR0FBTzcyQixFQUFLNDlDLEVBQU1nMkUsRUFBaUJqMEgsRUFBTSxDQUFDSyxLQUszRSxPQUFPdTFILEVBR1gsT0FBTyxNQUdUMStHLEVBQVF6WSxVQUFVeTFDLEdBQUssU0FBYTd6QyxFQUFLc3RILEVBQVMva0gsRUFBVXExQyxHQUl4RCxJQUhBLElBQUltK0IsRUFFQS82RSxFQUFTLEdBQUkwNUIsRUFBTWhFLFVBQVU3OEIsT0FBUyxFQUNsQzZnQyxLQUFRLEdBQUkxNUIsRUFBUTA1QixHQUFRaEUsVUFBV2dFLEVBQU0sR0FDdkQsSUFBSzE2QixFQUFPLE1BQU8sR0FFbkIsSUFBSTh6SCxFQUFheEssRUFBVTd5RixXQUFNLEVBQVF6MUIsR0FDckM4VixFQUFTZzlHLEVBQVdoOUcsUUFBVXcyRyxFQUU5QnppRixFQUFNL3dDLEtBQUtpN0gsV0FDYnhzSCxFQUFVdU8sRUFBUWhkLEtBQUs4d0gsZUFBZ0I1cUgsRUFDdkM0OUMsRUFBTSxTQUFVazJFLEVBQVd6cUgsUUFFN0IsR0FBSXZQLEtBQUtrNkgsZ0JBQWdCbnBGLEdBQU0sQ0FLN0IsSUFBSy93QyxLQUFLODNILE1BQVMsTUFBTXozRixNQUFNLG9CQUMvQixPQUFRNGhELEVBQU1qaUYsS0FBSzgzSCxPQUFPckQsR0FBRzkzRixNQUFNc2xELEVBQUssQ0FBRS83RSxHQUFNQyxPQUFRZSxJQU14RCxPQUpBNnBDLEVBQU0vd0MsS0FBSzY1SCxhQUFhNzhHLEVBQVE5VyxFQUFLNnFDLEVBQUsrUyxFQUFNNThDLEVBQVEsVUFDcERsSCxLQUFLNDRILGtCQUFMNTRILE1BQXlCK3dDLElBQzNCQSxFQUFNL3dDLEtBQUs0NEgsaUJBQWlCN25GLEVBQUs3cUMsSUFFNUI2cUMsR0FJWGgwQixFQUFRelksVUFBVThsQyxFQUFJLFNBQVlsa0MsR0FJOUIsSUFIQSxJQUFJKzdFLEVBRUEvNkUsRUFBUyxHQUFJMDVCLEVBQU1oRSxVQUFVNzhCLE9BQVMsRUFDbEM2Z0MsS0FBUSxHQUFJMTVCLEVBQVEwNUIsR0FBUWhFLFVBQVdnRSxFQUFNLEdBQ3ZELE9BQVFxaEQsRUFBTWppRixNQUFNKzVDLEdBQUdwZCxNQUFNc2xELEVBQUssQ0FBRS83RSxFQUFLbEcsS0FBS2dkLE9BQVFoZCxLQUFLMDBILGVBQWdCLE1BQU92dUgsT0FBUWUsS0FHNUY2VixFQUFRelksVUFBVTAxQyxHQUFLLFNBQWE5ekMsRUFBSzhXLEVBQVF2TyxFQUFVcTFDLEVBQU01OEMsR0FDL0QsSUFBSTZwQyxFQUNGL3dDLEtBQUtpN0gsV0FBV3hzSCxFQUFVdU8sRUFBUWhkLEtBQUs4d0gsZUFBZ0I1cUgsRUFBSzQ5QyxFQUFNLE1BQU81OEMsR0FDM0UsR0FBSWxILEtBQUtrNkgsZ0JBQWdCbnBGLEdBQU0sQ0FJN0IsSUFBSy93QyxLQUFLODNILE1BQVMsTUFBTXozRixNQUFNLG9CQUMvQixPQUFPcmdDLEtBQUs4M0gsTUFBTWpILE1BQU1wckgsRUFBRVMsRUFBSzhXLEVBQVE5VixHQUV2QyxPQUFPbEgsS0FBSzY1SCxhQUFhNzhHLEVBQVE5VyxFQUFLNnFDLEVBQUsrUyxFQUFNLENBQUM1OEMsR0FBUyxRQUkvRDZWLEVBQVF6WSxVQUFVbUIsRUFBSSxTQUFZUyxFQUFLOFcsRUFBUTlWLEdBRTdDLE9BQUtoQixHQUVpQixpQkFBWDhXLElBQ1RBLEVBQVNoZCxLQUFLZ2QsUUFHVGhkLEtBQUtnNkMsR0FBRzl6QyxFQUFLOFcsRUFBUWhkLEtBQUswMEgsZUFBZ0IsS0FBTXh0SCxJQU5wQyxJQVNyQjZWLEVBQVF6WSxVQUFVc3dILElBQU0sU0FDdEIxdUgsRUFDQXN0SCxFQUNBL2tILEVBQ0FxMUMsRUFDQW93RSxHQUtFLElBSEEsSUFBSWp5QyxFQUVBLzZFLEVBQVMsR0FBSTA1QixFQUFNaEUsVUFBVTc4QixPQUFTLEVBQ2xDNmdDLEtBQVEsR0FBSTE1QixFQUFRMDVCLEdBQVFoRSxVQUFXZ0UsRUFBTSxHQUN2RCxJQUFLMTZCLEVBQU8sTUFBTyxRQUNKN0csSUFBWDYwSCxJQUNGQSxFQUFTLEdBR1gsSUFBSXdILEVBQWEsQ0FBRSxNQUFTeEgsRUFBUSxFQUFLQSxHQUNyQzhGLEVBQWF4SyxFQUFVN3lGLFdBQU0sRUFBUXoxQixHQUd6QyxPQUZBOHlILEVBQVd6cUgsT0FBU2xMLE9BQU93d0MsT0FBTzZtRixFQUFZMUIsRUFBV3pxSCxRQUN6RHJJLEVBQStCLE9BQXRCOHlILEVBQVdoOUcsT0FBa0IsQ0FBQ2c5RyxFQUFXenFILFFBQVUsQ0FBQ3lxSCxFQUFXaDlHLE9BQVFnOUcsRUFBV3pxSCxRQUNwRnZQLEtBQUsyN0gsYUFBYTE1QyxFQUFNamlGLE1BQU0rNUMsR0FBR3BkLE1BQU1zbEQsRUFBSyxDQUFFLzdFLEVBQUtzdEgsRUFBUy9rSCxFQUFVcTFDLEdBQU8zOUMsT0FBUWUsSUFBV2d0SCxJQUd6R24zRyxFQUFRelksVUFBVXEzSCxZQUFjLFNBQXNCejhILEVBQVNnMUgsR0FFN0QsSUFBS2gxSCxHQUE4QixpQkFBWkEsRUFBd0IsT0FBTyxLQUN0RCxJQUFJMDhILEVBQVUxOEgsRUFBUXNNLE1BQU0sS0FHNUIsT0FBS293SCxFQURMMUgsRUFBU2wwSCxLQUFLNjdILGVBQWUzSCxFQUFRMEgsRUFBUTc3SCxTQUV0QzY3SCxFQUFRMUgsR0FBUS81RyxPQURRamIsR0FTakM2ZCxFQUFRelksVUFBVXUzSCxlQUFpQixTQUF5QjNILEVBQVE0SCxHQUVsRSxJQUE0QkMsRUFBU0MsRUFjckMsT0FBSWg4SCxLQUFLZ2QsVUFBVWhkLEtBQUtreEgsbUJBQ2ZseEgsS0FBS2t4SCxtQkFBbUJseEgsS0FBS2dkLFFBQVEyZixNQUFNMzhCLEtBQU0sQ0FBQ2swSCxFQUFRNEgsS0FmdkNDLEVBaUJQN0gsRUFqQmdCOEgsRUFpQlJGLEVBaEIzQkMsRUFBVXZtSCxLQUFLaXpCLElBQUlzekYsR0FFSSxJQUFuQkMsRUFDS0QsRUFDSEEsRUFBVSxFQUNSLEVBQ0EsRUFDRixFQUdDQSxFQUFVdm1ILEtBQUsycUIsSUFBSTQ3RixFQUFTLEdBQUssSUFVNUNoL0csRUFBUXpZLFVBQVU4dkgsR0FBSyxTQUFhbHVILEVBQUtndUgsR0FJckMsSUFIQSxJQUFJanlDLEVBRUEvNkUsRUFBUyxHQUFJMDVCLEVBQU1oRSxVQUFVNzhCLE9BQVMsRUFDbEM2Z0MsS0FBUSxHQUFJMTVCLEVBQVEwNUIsR0FBUWhFLFVBQVdnRSxFQUFNLEdBQ3ZELE9BQVFxaEQsRUFBTWppRixNQUFNNDBILElBQUlqNEYsTUFBTXNsRCxFQUFLLENBQUUvN0UsRUFBS2xHLEtBQUtnZCxPQUFRaGQsS0FBSzAwSCxlQUFnQixLQUFNUixHQUFTL3RILE9BQVFlLEtBR3JHNlYsRUFBUXpZLFVBQVV3d0gsSUFBTSxTQUFjNXVILEVBQUs4VyxFQUFRdk8sR0FFL0MsSUFEQSxJQUFJNUksRUFBTyxHQUFJKzZCLEVBQU1oRSxVQUFVNzhCLE9BQVMsRUFDaEM2Z0MsS0FBUSxHQUFJLzZCLEVBQU0rNkIsR0FBUWhFLFVBQVdnRSxFQUFNLEdBRXJELElBQUk0eUYsRUFBVWhFLEVBQVU3eUYsV0FBTSxFQUFROTJCLEdBQU1tWCxRQUFVQSxFQUN0RCxPQUFPaGQsS0FBSzg0SCxPQUFPcnFILEVBQVMra0gsR0FBVXR0SCxJQUd4QzZXLEVBQVF6WSxVQUFVMjNILEdBQUssU0FBYS8xSCxFQUFLOFcsR0FDdkMsT0FBT2hkLEtBQUs4MEgsSUFBSTV1SCxFQUFLbEcsS0FBS2dkLE9BQVFoZCxLQUFLMDBILGVBQWdCMTNHLElBR3pERCxFQUFRelksVUFBVXF2SCxpQkFBbUIsU0FBMkIzMkcsR0FDOUQsT0FBT3l5RyxFQUFXenZILEtBQUt5M0gsSUFBSWhwSCxTQUFTdU8sSUFBVyxLQUdqREQsRUFBUXpZLFVBQVU0M0gsaUJBQW1CLFNBQTJCbC9HLEVBQVE5ZCxHQUN0QyxTQUE1QmMsS0FBSzA0SCxvQkFBNkQsVUFBNUIxNEgsS0FBSzA0SCxvQkFDN0MxNEgsS0FBSys0SCxvQkFBb0IvN0csRUFBUWhkLEtBQUswNEgsbUJBQW9CeDVILEdBRTVEYyxLQUFLeTNILElBQUk4QixLQUFLdjVILEtBQUt5M0gsSUFBSWhwSCxTQUFVdU8sRUFBUTlkLElBRzNDNmQsRUFBUXpZLFVBQVVrc0gsbUJBQXFCLFNBQTZCeHpHLEVBQVE5ZCxHQUMxQyxTQUE1QmMsS0FBSzA0SCxvQkFBNkQsVUFBNUIxNEgsS0FBSzA0SCxvQkFDN0MxNEgsS0FBSys0SCxvQkFBb0IvN0csRUFBUWhkLEtBQUswNEgsbUJBQW9CeDVILEdBRTVEYyxLQUFLeTNILElBQUk4QixLQUFLdjVILEtBQUt5M0gsSUFBSWhwSCxTQUFVdU8sRUFBUTAxRCxFQUFNLEdBQUkxeUUsS0FBS3kzSCxJQUFJaHBILFNBQVN1TyxJQUFXLEdBQUk5ZCxLQUd0RjZkLEVBQVF6WSxVQUFVNjNILGtCQUFvQixTQUE0Qm4vRyxHQUNoRSxPQUFPeXlHLEVBQVd6dkgsS0FBS3kzSCxJQUFJRixnQkFBZ0J2NkcsSUFBVyxLQUd4REQsRUFBUXpZLFVBQVU4M0gsa0JBQW9CLFNBQTRCcC9HLEVBQVEwbUIsR0FDeEUxakMsS0FBS3kzSCxJQUFJOEIsS0FBS3Y1SCxLQUFLeTNILElBQUlGLGdCQUFpQnY2RyxFQUFRMG1CLEdBQ2hEMWpDLEtBQUtxOEgscUJBQXFCci9HLEVBQVEwbUIsSUFHcEMzbUIsRUFBUXpZLFVBQVVnNEgsb0JBQXNCLFNBQThCdC9HLEVBQVEwbUIsR0FDNUUxakMsS0FBS3kzSCxJQUFJOEIsS0FBS3Y1SCxLQUFLeTNILElBQUlGLGdCQUFpQnY2RyxFQUFRMDFELEVBQU0xeUUsS0FBS3kzSCxJQUFJRixnQkFBZ0J2NkcsSUFBVyxHQUFJMG1CLElBQzlGMWpDLEtBQUtxOEgscUJBQXFCci9HLEVBQVEwbUIsSUFHcEMzbUIsRUFBUXpZLFVBQVUrM0gscUJBQXVCLFNBQStCci9HLEVBQVEwbUIsR0FDOUUsSUFBSyxJQUFJeDlCLEtBQU93OUIsRUFBUSxDQUN0QixJQUFJaDBCLEVBQUtzTixFQUFTLEtBQU85VyxFQUVwQmxHLEtBQUtxNEgsb0JBQW9COXpILGVBQWVtTCxXQUl0QzFQLEtBQUtxNEgsb0JBQW9CM29ILEtBSXBDcU4sRUFBUXpZLFVBQVVpNEgsa0JBQW9CLFNBQ3BDNzRILEVBQ0FzWixFQUNBMjhHLEVBQ0FwQyxFQUNBcnhILEdBTUEsSUFKQSxJQUFJc3RILEVBQVV4MkcsRUFDVncvRyxFQUFVakYsRUFBZ0IvRCxHQUUxQmg0RSxFQUFReDdDLEtBQUt3N0gsZ0JBQWdCeCtHLEVBQVEyOEcsR0FDaENsMEgsRUFBSSxFQUFHQSxFQUFJKzFDLEVBQU16N0MsT0FBUTBGLElBQUssQ0FDckMsSUFDSXMzQixFQUFPeWUsRUFBTS8xQyxHQUlqQixHQUZBK3RILEVBQVV6MkYsR0FFTjg5QyxFQUhKMmhELEVBQVVqRixFQUFnQng2RixNQUdIODlDLEVBQU8yaEQsRUFBUXQySCxJQUtwQyxNQUlKLEdBQUkyMEUsRUFBTzJoRCxJQUFZM2hELEVBQU8yaEQsRUFBUXQySCxJQUNwQyxPQUFPLEtBRVAsSUFBSXc5QixFQUFTODRGLEVBQVF0MkgsR0FDakJ3SixFQUFLOGpILEVBQVUsS0FBT3R0SCxFQUN0QitXLEVBQVlqZCxLQUFLcTRILG9CQUFvQjNvSCxHQUl6QyxPQUhLdU4sSUFDSEEsRUFBWWpkLEtBQUtxNEgsb0JBQW9CM29ILEdBQU0sSUFBSStzSCxLQUFLQyxlQUFlbEosRUFBUzl2RixJQUV2RXptQixFQUFVeW1CLE9BQU9oZ0MsSUFJNUJxWixFQUFRelksVUFBVW80QyxHQUFLLFNBQWFoNUMsRUFBT3NaLEVBQVE5VyxHQU9qRCxJQUFLQSxFQUNILE9BQU8sSUFBSXUySCxLQUFLQyxlQUFlMS9HLEdBQVEwbUIsT0FBT2hnQyxHQUdoRCxJQUFJcXRDLEVBQ0Yvd0MsS0FBS3U4SCxrQkFBa0I3NEgsRUFBT3NaLEVBQVFoZCxLQUFLOHdILGVBQWdCOXdILEtBQUt3NUgsc0JBQXVCdHpILEdBQ3pGLEdBQUlsRyxLQUFLazZILGdCQUFnQm5wRixHQUFNLENBSzdCLElBQUsvd0MsS0FBSzgzSCxNQUFTLE1BQU16M0YsTUFBTSxvQkFDL0IsT0FBT3JnQyxLQUFLODNILE1BQU1qSCxNQUFNMXNGLEVBQUV6Z0MsRUFBT3dDLEVBQUs4VyxHQUV0QyxPQUFPK3pCLEdBQU8sSUFJbEJoMEIsRUFBUXpZLFVBQVU2L0IsRUFBSSxTQUFZemdDLEdBRTlCLElBREEsSUFBSW1DLEVBQU8sR0FBSSs2QixFQUFNaEUsVUFBVTc4QixPQUFTLEVBQ2hDNmdDLEtBQVEsR0FBSS82QixFQUFNKzZCLEdBQVFoRSxVQUFXZ0UsRUFBTSxHQUVyRCxJQUFJNWpCLEVBQVNoZCxLQUFLZ2QsT0FDZDlXLEVBQU0sS0FzQlYsT0FwQm9CLElBQWhCTCxFQUFLOUYsT0FDZ0IsaUJBQVo4RixFQUFLLEdBQ2RLLEVBQU1MLEVBQUssR0FDRmluQyxFQUFTam5DLEVBQUssTUFDbkJBLEVBQUssR0FBR21YLFNBQ1ZBLEVBQVNuWCxFQUFLLEdBQUdtWCxRQUVmblgsRUFBSyxHQUFHSyxNQUNWQSxFQUFNTCxFQUFLLEdBQUdLLE1BR08sSUFBaEJMLEVBQUs5RixTQUNTLGlCQUFaOEYsRUFBSyxLQUNkSyxFQUFNTCxFQUFLLElBRVUsaUJBQVpBLEVBQUssS0FDZG1YLEVBQVNuWCxFQUFLLEtBSVg3RixLQUFLMDhDLEdBQUdoNUMsRUFBT3NaLEVBQVE5VyxJQUdoQzZXLEVBQVF6WSxVQUFVcTRILGdCQUFrQixTQUEwQjMvRyxHQUM1RCxPQUFPeXlHLEVBQVd6dkgsS0FBS3kzSCxJQUFJRCxjQUFjeDZHLElBQVcsS0FHdERELEVBQVF6WSxVQUFVczRILGdCQUFrQixTQUEwQjUvRyxFQUFRMG1CLEdBQ3BFMWpDLEtBQUt5M0gsSUFBSThCLEtBQUt2NUgsS0FBS3kzSCxJQUFJRCxjQUFleDZHLEVBQVEwbUIsR0FDOUMxakMsS0FBSzY4SCxtQkFBbUI3L0csRUFBUTBtQixJQUdsQzNtQixFQUFRelksVUFBVXc0SCxrQkFBb0IsU0FBNEI5L0csRUFBUTBtQixHQUN4RTFqQyxLQUFLeTNILElBQUk4QixLQUFLdjVILEtBQUt5M0gsSUFBSUQsY0FBZXg2RyxFQUFRMDFELEVBQU0xeUUsS0FBS3kzSCxJQUFJRCxjQUFjeDZHLElBQVcsR0FBSTBtQixJQUMxRjFqQyxLQUFLNjhILG1CQUFtQjcvRyxFQUFRMG1CLElBR2xDM21CLEVBQVF6WSxVQUFVdTRILG1CQUFxQixTQUE2QjcvRyxFQUFRMG1CLEdBQzFFLElBQUssSUFBSXg5QixLQUFPdzlCLEVBQVEsQ0FDdEIsSUFBSWgwQixFQUFLc04sRUFBUyxLQUFPOVcsRUFFcEJsRyxLQUFLczRILGtCQUFrQi96SCxlQUFlbUwsV0FJcEMxUCxLQUFLczRILGtCQUFrQjVvSCxLQUlsQ3FOLEVBQVF6WSxVQUFVeTRILG9CQUFzQixTQUN0Q3I1SCxFQUNBc1osRUFDQTI4RyxFQUNBbkMsRUFDQXR4SCxFQUNBSyxHQU1BLElBSkEsSUFBSWl0SCxFQUFVeDJHLEVBQ1Z3L0csRUFBVWhGLEVBQWNoRSxHQUV4Qmg0RSxFQUFReDdDLEtBQUt3N0gsZ0JBQWdCeCtHLEVBQVEyOEcsR0FDaENsMEgsRUFBSSxFQUFHQSxFQUFJKzFDLEVBQU16N0MsT0FBUTBGLElBQUssQ0FDckMsSUFDSXMzQixFQUFPeWUsRUFBTS8xQyxHQUlqQixHQUZBK3RILEVBQVV6MkYsR0FFTjg5QyxFQUhKMmhELEVBQVVoRixFQUFjejZGLE1BR0Q4OUMsRUFBTzJoRCxFQUFRdDJILElBS3BDLE1BSUosR0FBSTIwRSxFQUFPMmhELElBQVkzaEQsRUFBTzJoRCxFQUFRdDJILElBQ3BDLE9BQU8sS0FFUCxJQUVJK1csRUFGQXltQixFQUFTODRGLEVBQVF0MkgsR0FHckIsR0FBSUssRUFFRjBXLEVBQVksSUFBSXcvRyxLQUFLTyxhQUFheEosRUFBU252SCxPQUFPd3dDLE9BQU8sR0FBSW5SLEVBQVFuOUIsUUFDaEUsQ0FDTCxJQUFJbUosRUFBSzhqSCxFQUFVLEtBQU90dEgsR0FDMUIrVyxFQUFZamQsS0FBS3M0SCxrQkFBa0I1b0gsTUFFakN1TixFQUFZamQsS0FBS3M0SCxrQkFBa0I1b0gsR0FBTSxJQUFJK3NILEtBQUtPLGFBQWF4SixFQUFTOXZGLElBRzVFLE9BQU96bUIsR0FJWEYsRUFBUXpZLFVBQVVpM0MsR0FBSyxTQUFhNzNDLEVBQU9zWixFQUFROVcsRUFBS0ssR0FFdEQsSUFBS3dXLEVBQVErNUcsZUFBZW1HLGFBSTFCLE1BQU8sR0FHVCxJQUFLLzJILEVBRUgsT0FEVUssRUFBMEMsSUFBSWsySCxLQUFLTyxhQUFhaGdILEVBQVF6VyxHQUE5RCxJQUFJazJILEtBQUtPLGFBQWFoZ0gsSUFDaEMwbUIsT0FBT2hnQyxHQUduQixJQUFJdVosRUFBWWpkLEtBQUsrOEgsb0JBQW9CcjVILEVBQU9zWixFQUFRaGQsS0FBSzh3SCxlQUFnQjl3SCxLQUFLeTVILG9CQUFxQnZ6SCxFQUFLSyxHQUN4R3dxQyxFQUFNOXpCLEdBQWFBLEVBQVV5bUIsT0FBT2hnQyxHQUN4QyxHQUFJMUQsS0FBS2s2SCxnQkFBZ0JucEYsR0FBTSxDQUs3QixJQUFLL3dDLEtBQUs4M0gsTUFBUyxNQUFNejNGLE1BQU0sb0JBQy9CLE9BQU9yZ0MsS0FBSzgzSCxNQUFNakgsTUFBTTV4RixFQUFFdjdCLEVBQU9XLE9BQU93d0MsT0FBTyxHQUFJLENBQUUzdUMsSUFBS0EsRUFBSzhXLE9BQVFBLEdBQVV6VyxJQUVqRixPQUFPd3FDLEdBQU8sSUFJbEJoMEIsRUFBUXpZLFVBQVUyNkIsRUFBSSxTQUFZdjdCLEdBRTlCLElBREEsSUFBSW1DLEVBQU8sR0FBSSs2QixFQUFNaEUsVUFBVTc4QixPQUFTLEVBQ2hDNmdDLEtBQVEsR0FBSS82QixFQUFNKzZCLEdBQVFoRSxVQUFXZ0UsRUFBTSxHQUVyRCxJQUFJNWpCLEVBQVNoZCxLQUFLZ2QsT0FDZDlXLEVBQU0sS0FDTkssRUFBVSxLQWdDZCxPQTlCb0IsSUFBaEJWLEVBQUs5RixPQUNnQixpQkFBWjhGLEVBQUssR0FDZEssRUFBTUwsRUFBSyxHQUNGaW5DLEVBQVNqbkMsRUFBSyxNQUNuQkEsRUFBSyxHQUFHbVgsU0FDVkEsRUFBU25YLEVBQUssR0FBR21YLFFBRWZuWCxFQUFLLEdBQUdLLE1BQ1ZBLEVBQU1MLEVBQUssR0FBR0ssS0FJaEJLLEVBQVVsQyxPQUFPdUIsS0FBS0MsRUFBSyxJQUFJczJFLFFBQU8sU0FBVTQyQyxFQUFLN3NILEdBQ2pELElBQUlQLEVBRU4sT0FBSXVsQixFQUFTcWtHLEVBQWtCcnBILEdBQ3RCN0IsT0FBT3d3QyxPQUFPLEdBQUlrK0UsSUFBT3B0SCxFQUFNLElBQVFPLEdBQU9MLEVBQUssR0FBR0ssR0FBTVAsSUFFOURvdEgsSUFDTixPQUVvQixJQUFoQmx0SCxFQUFLOUYsU0FDUyxpQkFBWjhGLEVBQUssS0FDZEssRUFBTUwsRUFBSyxJQUVVLGlCQUFaQSxFQUFLLEtBQ2RtWCxFQUFTblgsRUFBSyxLQUlYN0YsS0FBS3U3QyxHQUFHNzNDLEVBQU9zWixFQUFROVcsRUFBS0ssSUFHckN3VyxFQUFRelksVUFBVTJ1SCxLQUFPLFNBQWV2dkgsRUFBT3NaLEVBQVE5VyxFQUFLSyxHQUUxRCxJQUFLd1csRUFBUSs1RyxlQUFlbUcsYUFJMUIsTUFBTyxHQUdULElBQUsvMkgsRUFFSCxPQURVSyxFQUEwQyxJQUFJazJILEtBQUtPLGFBQWFoZ0gsRUFBUXpXLEdBQTlELElBQUlrMkgsS0FBS08sYUFBYWhnSCxJQUNoQ2tnSCxjQUFjeDVILEdBRzFCLElBQUl1WixFQUFZamQsS0FBSys4SCxvQkFBb0JyNUgsRUFBT3NaLEVBQVFoZCxLQUFLOHdILGVBQWdCOXdILEtBQUt5NUgsb0JBQXFCdnpILEVBQUtLLEdBQ3hHd3FDLEVBQU05ekIsR0FBYUEsRUFBVWlnSCxjQUFjeDVILEdBQy9DLEdBQUkxRCxLQUFLazZILGdCQUFnQm5wRixHQUFNLENBSzdCLElBQUsvd0MsS0FBSzgzSCxNQUFTLE1BQU16M0YsTUFBTSxvQkFDL0IsT0FBT3JnQyxLQUFLODNILE1BQU1qSCxNQUFNb0MsS0FBS3Z2SCxFQUFPc1osRUFBUTlXLEVBQUtLLEdBRWpELE9BQU93cUMsR0FBTyxJQUlsQjFzQyxPQUFPazVCLGlCQUFrQnhnQixFQUFRelksVUFBVzI4RSxHQUk1QzU4RSxPQUFPdW9DLGVBQWU3dkIsRUFBUyxpQkFBa0IsQ0FDL0NwUyxJQUFLLFdBQ0gsSUFBS21zSCxFQUFnQixDQUNuQixJQUFJcUcsRUFBOEIsb0JBQVRWLEtBQ3pCM0YsRUFBaUIsQ0FDZnNHLGVBQWdCRCxRQUE4QyxJQUF4QlYsS0FBS0MsZUFDM0NPLGFBQWNFLFFBQTRDLElBQXRCVixLQUFLTyxjQUk3QyxPQUFPbEcsS0FJWC81RyxFQUFRdTNHLFFBQVVBLEVBQ2xCdjNHLEVBQVErd0IsUUFBVSxTQUVsQixXLDhFQzdpRUEsSUFBSS80QixFQUFTLFdBQ1gsSUFBSTBpSCxFQUFNejNILEtBQ05nOEMsRUFBS3k3RSxFQUFJNEYsZUFDVDVoRixFQUFLZzhFLEVBQUk2RixNQUFNN2hGLElBQU1PLEVBQ3pCLE9BQU9QLEVBQUcsTUFBTyxDQUFFbXpFLE1BQU8sQ0FBRWwvRyxHQUFJLFNBQVksQ0FDMUMrckMsRUFBRyxNQUFPLENBQUU0M0UsWUFBYSxnQkFBa0IsQ0FDekM1M0UsRUFBRyxNQUFPLENBQUU0M0UsWUFBYSxjQUFnQixDQUN2Q29FLEVBQUkvN0UsR0FBRyxXQUFhKzdFLEVBQUk3N0UsR0FBRzY3RSxFQUFJOEYsZ0JBQWtCLFlBRW5EOUYsRUFBSS83RSxHQUFHLEtBQ1BELEVBQUcsTUFBTyxDQUFFNDNFLFlBQWEsWUFBYyxDQUNyQ29FLEVBQUkvN0UsR0FBRyxXQUFhKzdFLEVBQUk3N0UsR0FBRzY3RSxFQUFJNTNILE1BQy9CNDdDLEVBQUcsT0FBUSxDQUFFNDNFLFlBQWEsaUJBRTVCb0UsRUFBSS83RSxHQUFHLEtBQ1BELEVBQUcsTUFBTyxDQUFFNDNFLFlBQWEsb0JBQXNCLENBQzdDb0UsRUFBSS83RSxHQUFHLFdBQWErN0UsRUFBSTc3RSxHQUFHNjdFLEVBQUkrRixzQkFBd0IsaUJBTS9Eem9ILEVBQU8wb0gsZUFBZ0IsRSxlQ3RCOEwsUUFBZSxFQUFHLEUsYUNRbk94SSxHQUFZLEUsU0FBQSxHQUNkLEVBQ0FsZ0gsRUZXb0IsSUVUcEIsRUFDQSxLQUNBLFdBQ0EsTUF1QkZrZ0gsRUFBVTF1SCxRQUFRbTNILE9BQVMsNkJBQzNCLFFBQWV6SSxFLHNGQ3ZDZixJQUFJbGdILEVBQVMsV0FDWCxJQUFJMGlILEVBQU16M0gsS0FDTmc4QyxFQUFLeTdFLEVBQUk0RixlQUNUNWhGLEVBQUtnOEUsRUFBSTZGLE1BQU03aEYsSUFBTU8sRUFDekIsT0FBT1AsRUFDTCxNQUNBLENBQUVtekUsTUFBTyxDQUFFbC9HLEdBQUksMkJBQ2YsQ0FDZ0MsT0FBOUIrbkgsRUFBSWtHLHNCQUNBbGlGLEVBQUcsUUFBUyxDQUNWNDNFLFlBQWEsb0JBQ2JoeUgsR0FBSSxDQUFFMDBDLE1BQU8waEYsRUFBSW1HLFlBQ2pCeEssWUFBYXFFLEVBQUlvRyxHQUNmLENBQ0UsQ0FDRTMzSCxJQUFLLE9BQ0x1MkIsR0FBSSxXQUNGLE1BQU8sQ0FDTGc3RixFQUFJcUcsdUJBQ0FyaUYsRUFBRyxNQUFPLENBQUU0M0UsWUFBYSx1QkFBeUIsQ0FDaEQ1M0UsRUFBRyxNQUFPLENBQUU0M0UsWUFBYSxjQUUzQm9FLEVBQUkvNEUsS0FDUis0RSxFQUFJLzdFLEdBQUcsS0FDUEQsRUFBRyxTQUFVLENBQ1h3bUMsSUFBSyxTQUNMb3hDLFlBQWEscUJBQ2J6RSxNQUFPLENBQ0xqNUUsSUFBSzhoRixFQUFJc0csbUJBQ1RDLE9BQVEsSUFDUkMsT0FBUSxJQUNSQyxVQUFXLFFBRWI3OEgsR0FBSSxDQUNGODhILFVBQVcxRyxFQUFJMkcsYUFDZkMsS0FBTTVHLEVBQUk2RyxtQkFLbEI3bEIsT0FBTyxHQUVULENBQ0V2eUcsSUFBSyxTQUNMdTJCLEdBQUksV0FDRixNQUFPLENBQ0xnZixFQUNFLFNBQ0EsQ0FDRTQzRSxZQUFhLDhCQUNiekUsTUFBTyxDQUNMM3ZILEtBQU0sU0FDTixhQUFjdzRILEVBQUloRCxHQUFHLGVBQ3JCOWdHLFNBQVU4akcsRUFBSThHLDJCQUVoQmw5SCxHQUFJLENBQ0ZnUixNQUFPLFNBQVNtc0gsR0FHZCxPQUZBQSxFQUFPMXdILGlCQUNQMHdILEVBQU92M0Msa0JBQ0F3d0MsRUFBSWdILFNBQVNELE1BSTFCLENBQ0UvRyxFQUFJLzdFLEdBQ0YsYUFDRSs3RSxFQUFJNzdFLEdBQUc2N0UsRUFBSWhELEdBQUcsaUJBQ2QsY0FJUmdELEVBQUkvN0UsR0FBRyxLQUNQRCxFQUNFLFNBQ0EsQ0FDRTQzRSxZQUFhLDRCQUNiekUsTUFBTyxDQUNMM3ZILEtBQU0sU0FDTixhQUFjdzRILEVBQUloRCxHQUFHLGtCQUNyQjlnRyxTQUNnQyxPQUE5QjhqRyxFQUFJaUgsdUJBQ0pqSCxFQUFJOEcsMkJBRVJsOUgsR0FBSSxDQUNGZ1IsTUFBTyxTQUFTbXNILEdBR2QsT0FGQUEsRUFBTzF3SCxpQkFDUDB3SCxFQUFPdjNDLGtCQUNBd3dDLEVBQUlrSCxhQUFhSCxNQUk5QixDQUNFL2lGLEVBQUcsSUFBSyxDQUFFNDNFLFlBQWEsa0JBQW9CLENBQ3pDb0UsRUFBSS83RSxHQUFHLHlCQUVUKzdFLEVBQUkvN0UsR0FDRixhQUNFKzdFLEVBQUk3N0UsR0FBRzY3RSxFQUFJaEQsR0FBRyxtQkFDZCxjQUlSZ0QsRUFBSS83RSxHQUFHLEtBQ1BELEVBQ0UsU0FDQSxDQUNFNDNFLFlBQWEsNEJBQ2J6RSxNQUFPLENBQ0wzdkgsS0FBTSxTQUNOLGFBQWN3NEgsRUFBSWhELEdBQUcsY0FDckI5Z0csU0FDNEIsT0FBMUI4akcsRUFBSW1ILG1CQUNKbkgsRUFBSThHLDJCQUVSbDlILEdBQUksQ0FDRmdSLE1BQU8sU0FBU21zSCxHQUdkLE9BRkFBLEVBQU8xd0gsaUJBQ1Awd0gsRUFBT3YzQyxrQkFDQXd3QyxFQUFJb0gsU0FBU0wsTUFJMUIsQ0FDRS9HLEVBQUkvN0UsR0FDRixhQUNFKzdFLEVBQUk3N0UsR0FBRzY3RSxFQUFJaEQsR0FBRyxlQUNkLGNBRUpoNUUsRUFBRyxJQUFLLENBQUU0M0UsWUFBYSxrQkFBb0IsQ0FDekNvRSxFQUFJLzdFLEdBQUcsNEJBSWIrN0UsRUFBSS83RSxHQUFHLEtBQ1BELEVBQ0UsU0FDQSxDQUNFNDNFLFlBQWEsa0JBQ2J6RSxNQUFPLENBQ0wzdkgsS0FBTSxTQUNOLGFBQWN3NEgsRUFBSWhELEdBQUcsY0FDckI5Z0csU0FDRThqRyxFQUFJOEcsNEJBQ0g5RyxFQUFJcUgsZUFFVHo5SCxHQUFJLENBQ0ZnUixNQUFPLFNBQVNtc0gsR0FHZCxPQUZBQSxFQUFPMXdILGlCQUNQMHdILEVBQU92M0Msa0JBQ0F3d0MsRUFBSXNILFdBQVdQLE1BSTVCLENBQ0cvRyxFQUFJOEcsMEJBUUQ5RyxFQUFJLzRFLEtBUEpqRCxFQUFHLE9BQVEsQ0FDVGc4RSxFQUFJLzdFLEdBQ0YsZUFDRSs3RSxFQUFJNzdFLEdBQUc2N0UsRUFBSWhELEdBQUcsZUFDZCxnQkFJVmdELEVBQUkvN0UsR0FBRyxLQUNQKzdFLEVBQUk4RywwQkFDQTlpRixFQUFHLE9BQVEsQ0FDVDQzRSxZQUFhLG1DQUNiekUsTUFBTyxDQUFFb1EsS0FBTSxTQUFVLGNBQWUsVUFFMUN2SCxFQUFJLzRFLFNBS2hCKzVELE9BQU8sR0FFVCxDQUNFdnlHLElBQUssVUFDTHUyQixHQUFJLFdBQ0YsTUFBTyxDQUNMZ2YsRUFBRyxVQUFXLENBQ1ptekUsTUFBTyxDQUNMLG9CQUFxQjZJLEVBQUl3SCxvQkFDekIsdUJBQXdCeEgsRUFBSWtHLHNCQUM1QixrQkFBbUJsRyxFQUFJeUgsZUFFekI3OUgsR0FBSSxDQUFFNjFCLGtCQUFtQnVnRyxFQUFJdmdHLHVCQUluQ3VoRixPQUFPLElBR1gsTUFDQSxFQUNBLGNBR0pnZixFQUFJLzRFLEtBQ1IrNEUsRUFBSS83RSxHQUFHLEtBQ1BELEVBQ0UsTUFDQSxDQUNFNDNFLFlBQWEsc0JBQ2JoeUgsR0FBSSxDQUNGZ1IsTUFBTyxTQUFTbXNILEdBR2QsT0FGQUEsRUFBTzF3SCxpQkFDUDB3SCxFQUFPdjNDLGtCQUNBd3dDLEVBQUkwSCxhQUFhWCxNQUk5QixDQUNFL0csRUFBSTJILFlBQ0EzakYsRUFBRyxRQUFTLENBQ1ZtekUsTUFBTyxDQUNMLGNBQWU2SSxFQUFJaEQsR0FBRyw4QkFDdEIsZUFBZ0JnRCxFQUFJaEQsR0FBRyxnQkFDdkIsZ0JBQWlCZ0QsRUFBSWhELEdBQUcsaUJBQ3hCLGNBQWVnRCxFQUFJaEQsR0FBRyxlQUN0QjRLLGNBQWMsR0FFaEJoK0gsR0FBSSxDQUNGMDBDLE1BQU8waEYsRUFBSTZILGlCQUNYQyxRQUFTOUgsRUFBSStILGtCQUVmcE0sWUFBYXFFLEVBQUlvRyxHQUNmLENBQ0UsQ0FDRTMzSCxJQUFLLE9BQ0x1MkIsR0FBSSxXQUNGLE1BQU8sQ0FDTGdmLEVBQUcsSUFBSyxDQUNOZ2tGLFNBQVUsQ0FDUmh2SCxVQUFXZ25ILEVBQUk3N0UsR0FDYjY3RSxFQUFJaEQsR0FBRyw0QkFBNkIsQ0FDbEMsb0JBQ0VnRCxFQUFJaUksZ0NBT2xCam5CLE9BQU8sSUFHWCxNQUNBLEVBQ0EsY0FHSmdmLEVBQUkvNEUsTUFFVixJQUdKLElBSUozcEMsRUFBTzBvSCxlQUFnQixFLGVDclFnTixRQUFlLEVBQUcsRSxhQ1FyUHhJLEdBQVksRSxTQUFBLEdBQ2QsRUFDQWxnSCxFRjBQb0IsSUV4UHBCLEVBQ0EsS0FDQSxLQUNBLE1BdUJGa2dILEVBQVUxdUgsUUFBUW0zSCxPQUFTLHFFQUMzQixRQUFlekksRSx1RkN2Q2YsSUFBSWxnSCxFQUFTLFdBQ1gsSUFBSTBpSCxFQUFNejNILEtBQ05nOEMsRUFBS3k3RSxFQUFJNEYsZUFDVDVoRixFQUFLZzhFLEVBQUk2RixNQUFNN2hGLElBQU1PLEVBQ3pCLE9BQU9QLEVBQ0wsTUFDQSxDQUFFNDNFLFlBQWEsZUFBZ0JoeUgsR0FBSSxDQUFFZ1IsTUFBT29sSCxFQUFJMEgsZUFDaEQsQ0FDRTFqRixFQUFHLE1BQU8sQ0FBRTQzRSxZQUFhLGVBQWlCLENBQ3hDb0UsRUFBSS83RSxHQUNGLFNBQ0UrN0UsRUFBSTc3RSxHQUNGNjdFLEVBQUloRCxHQUFHLGtDQUFtQyxDQUN4QyxhQUFjZ0QsRUFBSWtJLGlCQUFpQjUvSCxVQUd2QyxVQUdOMDNILEVBQUkvN0UsR0FBRyxLQUNQRCxFQUFHLE1BQU8sQ0FBRTQzRSxZQUFhLGNBQWdCLENBQ3ZDb0UsRUFBSW1JLHdCQUNBbmtGLEVBQ0UsS0FDQSxDQUFFNDNFLFlBQWEsZ0JBQ2ZvRSxFQUFJb0ksR0FBR3BJLEVBQUlxSSxlQUFlckksRUFBSWprSCxZQUFjLElBQUksU0FDOUNzTSxFQUNBNVosR0FFQSxPQUFPdTFDLEVBQ0wsS0FDQSxDQUNFdjFDLElBQUtBLEVBQ0w2NUgsTUFBTyxDQUFDLGVBQWdCdEksRUFBSWhoRyxXQUFXM1csRUFBWXBRLEtBQ25Eck8sR0FBSSxDQUNGZ1IsTUFBTyxTQUFTbXNILEdBQ2QsT0FBTy9HLEVBQUl2Z0csa0JBQWtCcFgsTUFJbkMsQ0FDRTIzRyxFQUFJLzdFLEdBQ0YsYUFBZSs3RSxFQUFJNzdFLEdBQUc5N0IsRUFBWXJnQixPQUFTLGNBRTdDZzhDLEVBQUcsSUFBSyxDQUFFNDNFLFlBQWEsa0JBQW9CLENBQUNvRSxFQUFJLzdFLEdBQUcsZUFJekQsR0FFRkQsRUFBRyxNQUFPLENBQUU0M0UsWUFBYSxpQkFBbUIsQ0FDMUM1M0UsRUFBRyxNQUFPLENBQUVtekUsTUFBTyxDQUFFajVFLElBQUs4aEYsRUFBSXlILGlCQUM5QnpILEVBQUkvN0UsR0FBRyxLQUNQRCxFQUFHLElBQUssQ0FBRTQzRSxZQUFhLHFCQUF1QixDQUM1Q29FLEVBQUkvN0UsR0FDRixhQUNFKzdFLEVBQUk3N0UsR0FBRzY3RSxFQUFJaEQsR0FBRyx3QkFDZCxrQkFLZGdELEVBQUkvN0UsR0FBRyxLQUNQKzdFLEVBQUltSSx3QkFDQW5rRixFQUNFLE1BQ0EsQ0FBRTQzRSxZQUFhLGVBQ2YsQ0FDRTUzRSxFQUFHLGFBQWMsQ0FDZm16RSxNQUFPLENBQUUsb0JBQXFCLEdBQUlvUixNQUFPdkksRUFBSWtJLGtCQUM3Q3QrSCxHQUFJLENBQUU0K0gsVUFBV3hJLEVBQUl5SSxtQkFHekIsR0FFRnpJLEVBQUkvNEUsUUFLZDNwQyxFQUFPMG9ILGVBQWdCLEUsZUNoRnVNLFFBQWUsRUFBRyxFLGFDUTVPeEksR0FBWSxFLFNBQUEsR0FDZCxFQUNBbGdILEVGcUVvQixJRW5FcEIsRUFDQSxLQUNBLEtBQ0EsTUF1QkZrZ0gsRUFBVTF1SCxRQUFRbTNILE9BQVMsNERBQzNCLFFBQWV6SSxFLHVGQ3ZDZixJQUFJbGdILEVBQVMsV0FDWCxJQUFJMGlILEVBQU16M0gsS0FDTmc4QyxFQUFLeTdFLEVBQUk0RixlQUNUNWhGLEVBQUtnOEUsRUFBSTZGLE1BQU03aEYsSUFBTU8sRUFDekIsT0FBT1AsRUFDTCxNQUNBLENBQUVtekUsTUFBTyxDQUFFbC9HLEdBQUksNkJBQ2YsQ0FDRStyQyxFQUNFLE1BQ0EsQ0FDRXNrRixNQUFPLENBQ0wsV0FDQSxxQkFDQSxDQUFFSSxLQUFNMUksRUFBSXBvRyxNQUFNdHZCLFFBQVUsSUFFOUI2dUgsTUFBTyxDQUFFbC9HLEdBQUksNEJBRWYsQ0FDRStyQyxFQUNFLE1BQ0EsQ0FDRXNrRixNQUFPLENBQ0wsYUFDQSxrQkFDQSxDQUFFLFNBQVV0SSxFQUFJem9ILFNBQVd5b0gsRUFBSXBvRyxNQUFNdHZCLFFBQVUsS0FHbkQsQ0FBQzAzSCxFQUFJMkksR0FBRyxLQUVWM0ksRUFBSS83RSxHQUFHLEtBQ1BELEVBQ0UsTUFDQSxDQUNFc2tGLE1BQU8sQ0FDTCxhQUNBLGFBQ0Esa0JBQ0EsZUFDQSxDQUFFLFNBQVV0SSxFQUFJem9ILFNBQVd5b0gsRUFBSXBvRyxNQUFNdHZCLE9BQVMsS0FHbEQsQ0FDRTA3QyxFQUFHLElBQUssQ0FBRTQzRSxZQUFhLGtCQUFvQixDQUN6Q29FLEVBQUkvN0UsR0FBRyxpQkFFVEQsRUFBRyxNQUNIZzhFLEVBQUkvN0UsR0FBRyxXQUFhKzdFLEVBQUk3N0UsR0FBRzY3RSxFQUFJaEQsR0FBRyx1QkFDbENoNUUsRUFBRyxNQUNIZzhFLEVBQUkvN0UsR0FBRyxLQUNQRCxFQUFHLElBQUssQ0FBQ2c4RSxFQUFJLzdFLEdBQUcrN0UsRUFBSTc3RSxHQUFHNjdFLEVBQUloRCxHQUFHLDBCQUM5Qmg1RSxFQUFHLE1BQ0hnOEUsRUFBSS83RSxHQUFHLEtBQ1BELEVBQUcsUUFBUyxDQUNWZzhFLEVBQUkvN0UsR0FBRyxhQUFlKzdFLEVBQUk3N0UsR0FBRzY3RSxFQUFJaEQsR0FBRyw0QkFDcENoNUUsRUFBRyxNQUNIZzhFLEVBQUkvN0UsR0FDRixhQUNFKzdFLEVBQUk3N0UsR0FBRzY3RSxFQUFJaEQsR0FBRyw4QkFDZCxnQkFLVmdELEVBQUkvN0UsR0FBRyxLQUNQKzdFLEVBQUl6b0gsUUFDQXlzQyxFQUFHLE1BQU8sQ0FBRTQzRSxZQUFhLG9CQUFzQixDQUM3QzUzRSxFQUFHLE1BQU8sQ0FBRTQzRSxZQUFhLGNBRTNCb0UsRUFBSS80RSxPQUdaKzRFLEVBQUkvN0UsR0FBRyxLQUNQKzdFLEVBQUk0SSxjQUFjdGdJLE9BQVMsRUFDdkIwN0MsRUFBRyxrQkFBbUIsQ0FDcEI0M0UsWUFBYSxrQkFDYnpFLE1BQU8sQ0FDTCxpQkFBa0I2SSxFQUFJNEksY0FDdEIxcEcsU0FBVThnRyxFQUFJOWdHLFNBQ2R0SCxNQUFPb29HLEVBQUlwb0csTUFDWDlSLFFBQVNrNkcsRUFBSWw2RyxRQUNiLGtCQUFtQms2RyxFQUFJNkksZUFDdkJ0eEgsUUFBU3lvSCxFQUFJOEksZUFFZmwvSCxHQUFJLENBQ0ZtL0gsWUFBYS9JLEVBQUkrSSxZQUNqQkMsZ0JBQWlCaEosRUFBSWlKLFVBQ3JCQyxVQUFXbEosRUFBSWtKLFVBQ2ZDLGlCQUFrQm5KLEVBQUltSixpQkFDdEJDLGFBQWNwSixFQUFJcUosbUJBQ2xCQyxZQUFhdEosRUFBSXVKLGlCQUdyQnZKLEVBQUkvNEUsS0FDUis0RSxFQUFJLzdFLEdBQUcsS0FDUCs3RSxFQUFJd0osYUFDQXhsRixFQUFHLFFBQVMsQ0FDVm16RSxNQUFPLENBQ0x5USxjQUFjLEVBQ2QsY0FBZTVILEVBQUk5QyxJQUFJLGNBQWUzMEgsS0FBS3FnSSxjQUFjdGdJLE9BQVEsQ0FDL0QsWUFBYUMsS0FBS3FnSSxjQUFjdGdJLFNBRWxDLGdCQUFpQjAzSCxFQUFJaEQsR0FBRyxnQkFDeEIsZUFBZ0JnRCxFQUFJaEQsR0FBRyxnQkFFekJwekgsR0FBSSxDQUFFaytILFFBQVM5SCxFQUFJZ0osZ0JBQWlCMXFGLE1BQU8waEYsRUFBSXlKLGFBRWpEekosRUFBSS80RSxLQUNSKzRFLEVBQUkvN0UsR0FBRyxLQUNQRCxFQUFHLE1BQU8sQ0FBRTQzRSxZQUFhLHNCQUF3QixDQUMvQzUzRSxFQUFHLE1BQU8sQ0FBRTQzRSxZQUFhLDhCQUFnQyxDQUN2RG9FLEVBQUkySSxHQUFHLEdBQ1AzSSxFQUFJLzdFLEdBQUcsS0FDUCs3RSxFQUFJMkksR0FBRyxHQUNQM0ksRUFBSS83RSxHQUFHLEtBQ1ArN0UsRUFBSTJJLEdBQUcsR0FDUDNJLEVBQUkvN0UsR0FBRyxLQUNQKzdFLEVBQUkySSxHQUFHLEdBQ1AzSSxFQUFJLzdFLEdBQUcsS0FDUCs3RSxFQUFJMkksR0FBRyxHQUNQM0ksRUFBSS83RSxHQUFHLEtBQ1ArN0UsRUFBSTJJLEdBQUcsR0FDUDNJLEVBQUkvN0UsR0FBRyxLQUNQRCxFQUFHLE1BQU8sQ0FBRTQzRSxZQUFhLFdBQWEsQ0FDcENvRSxFQUFJLzdFLEdBQUcsYUFBZSs3RSxFQUFJNzdFLEdBQUc2N0UsRUFBSWhELEdBQUcsaUJBQW1CLGtCQUk3RGdELEVBQUkvN0UsR0FBRyxLQUNQKzdFLEVBQUk0SSxjQUFjdGdJLE9BQVMsR0FBSzAzSCxFQUFJMEosY0FDaEMxbEYsRUFBRyx1QkFBd0IsQ0FDekJtekUsTUFBTyxDQUFFdi9GLE1BQU9vb0csRUFBSTRJLGVBQ3BCaC9ILEdBQUksQ0FBRTQxQixhQUFjd2dHLEVBQUl1SixpQkFFMUJ2SixFQUFJLzRFLE1BRVYsSUE0RUozcEMsRUFBTzBvSCxlQUFnQixFLGVDcE53TSxRQUFlLEVBQUcsRSxhQ1E3T3hJLEdBQVksRSxTQUFBLEdBQ2QsRUFDQWxnSCxFRmlJb0IsQ0FDcEIsV0FDRSxJQUFJMGlILEVBQU16M0gsS0FDTmc4QyxFQUFLeTdFLEVBQUk0RixlQUNUNWhGLEVBQUtnOEUsRUFBSTZGLE1BQU03aEYsSUFBTU8sRUFDekIsT0FBT1AsRUFBRyxNQUFPLENBQ2ZBLEVBQUcsT0FBUSxDQUNUQSxFQUFHLElBQUssQ0FBRTQzRSxZQUFhLGtCQUFvQixDQUFDb0UsRUFBSS83RSxHQUFHLHNCQUl6RCxXQUNFLElBQ0lNLEVBRE1oOEMsS0FDR3E5SCxlQUNUNWhGLEVBRk16N0MsS0FFR3M5SCxNQUFNN2hGLElBQU1PLEVBQ3pCLE9BQU9QLEVBQUcsTUFBTyxDQUFFNDNFLFlBQWEsWUFBYyxDQUM1QzUzRSxFQUFHLE1BQU8sQ0FBRW16RSxNQUFPLENBQUUsb0JBQXFCLFNBRzlDLFdBQ0UsSUFDSTV5RSxFQURNaDhDLEtBQ0dxOUgsZUFDVDVoRixFQUZNejdDLEtBRUdzOUgsTUFBTTdoRixJQUFNTyxFQUN6QixPQUFPUCxFQUFHLE1BQU8sQ0FBRTQzRSxZQUFhLGVBQWlCLENBQy9DNTNFLEVBQUcsT0FBUSxDQUNUNDNFLFlBQWEsWUFDYnpFLE1BQU8sQ0FBRSx5QkFBMEIsU0FJekMsV0FDRSxJQUFJNkksRUFBTXozSCxLQUNOZzhDLEVBQUt5N0UsRUFBSTRGLGVBQ1Q1aEYsRUFBS2c4RSxFQUFJNkYsTUFBTTdoRixJQUFNTyxFQUN6QixPQUFPUCxFQUFHLE1BQU8sQ0FBRTQzRSxZQUFhLG1CQUFxQixDQUNuRDUzRSxFQUFHLE9BQVEsQ0FBQ2c4RSxFQUFJLzdFLEdBQUcsVUFHdkIsV0FDRSxJQUFJKzdFLEVBQU16M0gsS0FDTmc4QyxFQUFLeTdFLEVBQUk0RixlQUNUNWhGLEVBQUtnOEUsRUFBSTZGLE1BQU03aEYsSUFBTU8sRUFDekIsT0FBT1AsRUFBRyxNQUFPLENBQUU0M0UsWUFBYSxpQkFBbUIsQ0FDakQ1M0UsRUFBRyxPQUFRLENBQUNnOEUsRUFBSS83RSxHQUFHLFVBR3ZCLFdBQ0UsSUFDSU0sRUFETWg4QyxLQUNHcTlILGVBQ1Q1aEYsRUFGTXo3QyxLQUVHczlILE1BQU03aEYsSUFBTU8sRUFDekIsT0FBT1AsRUFBRyxNQUFPLENBQUU0M0UsWUFBYSxvQkFBc0IsQ0FDcEQ1M0UsRUFBRyxPQUFRLENBQUVtekUsTUFBTyxDQUFFLHVCQUF3QixTQUdsRCxXQUNFLElBQUk2SSxFQUFNejNILEtBQ05nOEMsRUFBS3k3RSxFQUFJNEYsZUFDVDVoRixFQUFLZzhFLEVBQUk2RixNQUFNN2hGLElBQU1PLEVBQ3pCLE9BQU9QLEVBQUcsTUFBTyxDQUFFNDNFLFlBQWEsWUFBYyxDQUM1QzUzRSxFQUFHLElBQUssQ0FBRTQzRSxZQUFhLGlDQUFtQyxDQUN4RG9FLEVBQUkvN0UsR0FBRyxvQkFFVCs3RSxFQUFJLzdFLEdBQUcsS0FDUEQsRUFBRyxNQUFPLENBQUU0M0UsWUFBYSxlQUFpQixDQUN4QzUzRSxFQUFHLFFBQVMsQ0FDVkEsRUFBRyxRQUFTLENBQUVtekUsTUFBTyxDQUFFM3ZILEtBQU0sY0FDN0J3NEgsRUFBSS83RSxHQUFHLEtBQ1BELEVBQUcsSUFBSyxDQUFFNDNFLFlBQWEsaUNFbE0vQixFQUNBLEtBQ0EsS0FDQSxNQXVCRjRCLEVBQVUxdUgsUUFBUW0zSCxPQUFTLG9EQUMzQixRQUFlekksRSxzRkN2Q2YsSUFBSWxnSCxFQUFTLFdBQ1gsSUFBSTBpSCxFQUFNejNILEtBQ05nOEMsRUFBS3k3RSxFQUFJNEYsZUFDVDVoRixFQUFLZzhFLEVBQUk2RixNQUFNN2hGLElBQU1PLEVBQ3pCLE9BQU9QLEVBQ0wsTUFDQSxDQUNFNDNFLFlBQWEsT0FDYnpFLE1BQU8sQ0FBRUYsU0FBVSxLQUFNc1EsS0FBTSxTQUFVLGNBQWUsU0FFMUQsQ0FDRXZqRixFQUFHLE1BQU8sQ0FBRTQzRSxZQUFhLGFBQ3pCb0UsRUFBSS83RSxHQUFHLEtBQ1BELEVBQUcsTUFBTyxDQUFFNDNFLFlBQWEscUJBQXVCLENBQzlDb0UsRUFBSTJJLEdBQUcsR0FDUDNJLEVBQUkvN0UsR0FBRyxLQUNQRCxFQUFHLE1BQU8sQ0FBRTQzRSxZQUFhLDZCQUErQixDQUN0RDUzRSxFQUFHLE1BQU8sQ0FBRTQzRSxZQUFhLGlCQUFtQixDQUMxQzUzRSxFQUFHLE1BQU8sQ0FBRTQzRSxZQUFhLGtCQUN6Qm9FLEVBQUkvN0UsR0FBRyxLQUNQRCxFQUNFLFNBQ0EsQ0FDRTQzRSxZQUFhLG1DQUNiekUsTUFBTyxDQUNMM3ZILEtBQU0sU0FDTlEsTUFBT2c0SCxFQUFJaEQsR0FBRyw0QkFHbEIsQ0FBQ2g1RSxFQUFHLElBQUssQ0FBRTQzRSxZQUFhLGtCQUFvQixDQUFDb0UsRUFBSS83RSxHQUFHLGFBRXREKzdFLEVBQUkvN0UsR0FBRyxLQUNQRCxFQUNFLFNBQ0EsQ0FDRTQzRSxZQUFhLG1DQUNiekUsTUFBTyxDQUFFM3ZILEtBQU0sU0FBVVEsTUFBT2c0SCxFQUFJaEQsR0FBRyxxQkFFekMsQ0FDRWg1RSxFQUFHLElBQUssQ0FBRTQzRSxZQUFhLGtCQUFvQixDQUN6Q29FLEVBQUkvN0UsR0FBRyxxQkFJYis3RSxFQUFJLzdFLEdBQUcsS0FDUEQsRUFDRSxTQUNBLENBQ0U0M0UsWUFBYSxnQ0FDYnpFLE1BQU8sQ0FDTDN2SCxLQUFNLFNBQ05RLE1BQU9nNEgsRUFBSWhELEdBQUcsNkJBR2xCLENBQ0VoNUUsRUFBRyxJQUFLLENBQUU0M0UsWUFBYSxrQkFBb0IsQ0FDekNvRSxFQUFJLzdFLEdBQUcsa0JBSWIrN0UsRUFBSS83RSxHQUFHLEtBQ1BELEVBQ0UsU0FDQSxDQUNFNDNFLFlBQWEsa0NBQ2J6RSxNQUFPLENBQ0wzdkgsS0FBTSxTQUNOUSxNQUFPZzRILEVBQUloRCxHQUFHLDJCQUdsQixDQUFDaDVFLEVBQUcsSUFBSyxDQUFFNDNFLFlBQWEsa0JBQW9CLENBQUNvRSxFQUFJLzdFLEdBQUcsZUFFdEQrN0UsRUFBSS83RSxHQUFHLEtBQ1ArN0UsRUFBSTJJLEdBQUcsS0FFVDNJLEVBQUkvN0UsR0FBRyxLQUNQKzdFLEVBQUkySSxHQUFHLEdBQ1AzSSxFQUFJLzdFLEdBQUcsS0FDUEQsRUFDRSxTQUNBLENBQ0U0M0UsWUFBYSx5Q0FDYnpFLE1BQU8sQ0FDTDN2SCxLQUFNLFNBQ05RLE1BQU9nNEgsRUFBSWhELEdBQUcsK0JBR2xCLENBQUNoNUUsRUFBRyxJQUFLLENBQUU0M0UsWUFBYSxrQkFBb0IsQ0FBQ29FLEVBQUkvN0UsR0FBRyxrQkFFdEQrN0UsRUFBSS83RSxHQUFHLEtBQ1BELEVBQ0UsU0FDQSxDQUNFNDNFLFlBQWEsMENBQ2J6RSxNQUFPLENBQUUzdkgsS0FBTSxTQUFVUSxNQUFPZzRILEVBQUloRCxHQUFHLDJCQUV6QyxDQUNFaDVFLEVBQUcsSUFBSyxDQUFFNDNFLFlBQWEsa0JBQW9CLENBQ3pDb0UsRUFBSS83RSxHQUFHLHFCQUliKzdFLEVBQUkvN0UsR0FBRyxLQUNQKzdFLEVBQUkySSxHQUFHLFVBcURqQnJySCxFQUFPMG9ILGVBQWdCLEUsZUM1SmtOLFFBQWUsRUFBRyxFLGFDUXZQeEksR0FBWSxFLFNBQUEsR0FDZCxFQUNBbGdILEVGbUdvQixDQUNwQixXQUNFLElBQUkwaUgsRUFBTXozSCxLQUNOZzhDLEVBQUt5N0UsRUFBSTRGLGVBQ1Q1aEYsRUFBS2c4RSxFQUFJNkYsTUFBTTdoRixJQUFNTyxFQUN6QixPQUFPUCxFQUFHLE1BQU8sQ0FBRTQzRSxZQUFhLG1CQUFxQixDQUNuRDUzRSxFQUFHLE1BQU8sQ0FBRTQzRSxZQUFhLGVBQ3pCb0UsRUFBSS83RSxHQUFHLEtBQ1BELEVBQUcsTUFBTyxDQUFFNDNFLFlBQWEsZUFDekJvRSxFQUFJLzdFLEdBQUcsS0FDUEQsRUFBRyxNQUFPLENBQUU0M0UsWUFBYSxrQkFHN0IsV0FDRSxJQUNJcjNFLEVBRE1oOEMsS0FDR3E5SCxlQUNUNWhGLEVBRk16N0MsS0FFR3M5SCxNQUFNN2hGLElBQU1PLEVBQ3pCLE9BQU9QLEVBQUcsTUFBTyxDQUFFNDNFLFlBQWEsbUJBQXFCLENBQ25ENTNFLEVBQUcsTUFBTyxDQUFFNDNFLFlBQWEsd0JBQTBCLENBQ2pENTNFLEVBQUcsTUFBTyxDQUFFNDNFLFlBQWEsd0JBQTBCLENBQ2pENTNFLEVBQUcsTUFBTyxDQUFFNDNFLFlBQWEsa0NBS2pDLFdBQ0UsSUFDSXIzRSxFQURNaDhDLEtBQ0dxOUgsZUFDVDVoRixFQUZNejdDLEtBRUdzOUgsTUFBTTdoRixJQUFNTyxFQUN6QixPQUFPUCxFQUNMLE1BQ0EsQ0FDRTQzRSxZQUNFLGdFQUVKLENBQUM1M0UsRUFBRyxNQUFPLENBQUU0M0UsWUFBYSwyQkFHOUIsV0FDRSxJQUNJcjNFLEVBRE1oOEMsS0FDR3E5SCxlQUNUNWhGLEVBRk16N0MsS0FFR3M5SCxNQUFNN2hGLElBQU1PLEVBQ3pCLE9BQU9QLEVBQUcsTUFBTyxDQUFFNDNFLFlBQWEsaUJBQW1CLENBQ2pENTNFLEVBQUcsTUFBTyxDQUFFNDNFLFlBQWEsK0JFNUk3QixFQUNBLEtBQ0EsS0FDQSxNQXVCRjRCLEVBQVUxdUgsUUFBUW0zSCxPQUFTLDhEQUMzQixRQUFlekksRSx1RkN2Q2YsSUFBSWxnSCxFQUFTLFdBQ1gsSUFBSTBpSCxFQUFNejNILEtBQ05nOEMsRUFBS3k3RSxFQUFJNEYsZUFDVDVoRixFQUFLZzhFLEVBQUk2RixNQUFNN2hGLElBQU1PLEVBQ3pCLE9BQU9QLEVBQUcsTUFBTyxDQUFFNDNFLFlBQWEsbUJBQXFCLENBQ25ENTNFLEVBQUcsTUFBTyxDQUFFNDNFLFlBQWEsOEJBQWdDLENBQ3ZENTNFLEVBQUcsTUFBTyxDQUFFNDNFLFlBQWEsK0JBQWlDLENBQ3hENTNFLEVBQUcsSUFBSyxDQUNONDNFLFlBQWEseUJBQ2JvTSxTQUFVLENBQ1JodkgsVUFBV2duSCxFQUFJNzdFLEdBQ2I2N0UsRUFBSWhELEdBQUcsdUJBQXdCLENBQzdCLFlBQWFnRCxFQUFJNEksY0FBY3RnSSxlQU16QzAzSCxFQUFJLzdFLEdBQUcsS0FDUEQsRUFBRyxNQUFPLENBQUU0M0UsWUFBYSxnQ0FBa0MsQ0FDekQ1M0UsRUFDRSxJQUNBLENBQ0U0M0UsWUFBYSxpQkFDYnpFLE1BQU8sQ0FDTCxjQUFlLFlBQ2Ysc0JBQXVCNkksRUFBSWhELEdBQUcsZ0JBRWhDcHpILEdBQUksQ0FDRmdSLE1BQU8sU0FBU21zSCxHQUNkLE9BQU8vRyxFQUFJMkosTUFBTSxrQkFJdkIsQ0FBQzNKLEVBQUkvN0UsR0FBRyxZQUVWKzdFLEVBQUkvN0UsR0FBRyxLQUNQKzdFLEVBQUk3OUYsYUFDQTZoQixFQUNFLElBQ0EsQ0FDRTQzRSxZQUFhLGlCQUNiekUsTUFBTyxDQUNMLGNBQWUsWUFDZixzQkFBdUI2SSxFQUFJaEQsR0FBRyw0QkFFaENwekgsR0FBSSxDQUFFZ1IsTUFBT29sSCxFQUFJNEosa0JBRW5CLENBQUM1SixFQUFJLzdFLEdBQUcsa0JBRVYrN0UsRUFBSS80RSxLQUNSKzRFLEVBQUkvN0UsR0FBRyxLQUNQRCxFQUNFLElBQ0EsQ0FDRTQzRSxZQUFhLGlCQUNiekUsTUFBTyxDQUNMLGNBQWUsWUFDZixzQkFBdUI2SSxFQUFJaEQsR0FBRyxrQkFFaENwekgsR0FBSSxDQUNGZ1IsTUFBTyxTQUFTbXNILEdBRWQsT0FEQUEsRUFBT3YzQyxrQkFDQXd3QyxFQUFJMkosTUFBTSxzQkFJdkIsQ0FBQzNKLEVBQUkvN0UsR0FBRyxZQUVWKzdFLEVBQUkvN0UsR0FBRyxLQUNQRCxFQUNFLElBQ0EsQ0FDRTQzRSxZQUFhLGlCQUNiekUsTUFBTyxDQUNMLGNBQWUsWUFDZixzQkFBdUI2SSxFQUFJaEQsR0FBRyxpQkFFaENwekgsR0FBSSxDQUNGZ1IsTUFBTyxTQUFTbXNILEdBQ2QsT0FBTy9HLEVBQUkySixNQUFNLGtCQUl2QixDQUFDM0osRUFBSS83RSxHQUFHLGVBSWQrN0UsRUFBSS83RSxHQUFHLEtBQ1ArN0UsRUFBSXBvRyxNQUFNdHZCLE9BQVMsR0FBSzAzSCxFQUFJNEksY0FBY3RnSSxTQUFXMDNILEVBQUlwb0csTUFBTXR2QixPQUMzRDA3QyxFQUNFLElBQ0EsQ0FDRTQzRSxZQUFhLHlCQUNiaHlILEdBQUksQ0FDRmdSLE1BQU8sU0FBU21zSCxHQUNkLE9BQU8vRyxFQUFJMkosTUFBTSxnQkFJdkIsQ0FBQzNKLEVBQUkvN0UsR0FBRyxTQUFXKzdFLEVBQUk3N0UsR0FBRzY3RSxFQUFJaEQsR0FBRyxxQkFBdUIsVUFFMURnRCxFQUFJLzRFLEtBQ1IrNEUsRUFBSS83RSxHQUFHLEtBQ1ArN0UsRUFBSTRJLGNBQWN0Z0ksU0FBVzAzSCxFQUFJcG9HLE1BQU10dkIsT0FDbkMwN0MsRUFDRSxJQUNBLENBQ0U0M0UsWUFBYSwyQkFDYmh5SCxHQUFJLENBQ0ZnUixNQUFPLFNBQVNtc0gsR0FDZCxPQUFPL0csRUFBSTJKLE1BQU0sa0JBSXZCLENBQUMzSixFQUFJLzdFLEdBQUcsU0FBVys3RSxFQUFJNzdFLEdBQUc2N0UsRUFBSWhELEdBQUcsdUJBQXlCLFVBRTVEZ0QsRUFBSS80RSxLQUNSKzRFLEVBQUkvN0UsR0FBRyxLQUNjLE9BQXJCKzdFLEVBQUk3OUYsYUFDQTZoQixFQUNFLE1BQ0EsQ0FDRTQzRSxZQUFhLHVDQUNiekUsTUFBTyxDQUNMLGNBQWU2SSxFQUFJNkosaUJBQ25CLHNCQUF1QjdKLEVBQUloRCxHQUFHLDZCQUdsQyxDQUNFaDVFLEVBQUcsUUFBUyxDQUNWQSxFQUFHLFFBQVMsQ0FDVm16RSxNQUFPLENBQUUzdkgsS0FBTSxXQUFZMDBCLFNBQVU4akcsRUFBSThKLFNBQ3pDOUIsU0FBVSxDQUFFMW1ILFFBQVMwK0csRUFBSThKLFNBQ3pCbGdJLEdBQUksQ0FDRit6QixPQUFRLFNBQVNvcEcsR0FHZixPQUZBQSxFQUFPMXdILGlCQUNQMHdILEVBQU92M0Msa0JBQ0F3d0MsRUFBSStKLGFBQWFoRCxPQUk5Qi9HLEVBQUkvN0UsR0FBRyxLQUNQRCxFQUFHLElBQUssQ0FBRTQzRSxZQUFhLHdCQUN2Qm9FLEVBQUkvN0UsR0FDRixXQUFhKzdFLEVBQUk3N0UsR0FBRzY3RSxFQUFJaEQsR0FBRyxzQkFBd0IsY0FLM0RnRCxFQUFJLzRFLEtBQ1IrNEUsRUFBSS83RSxHQUFHLEtBQ1BELEVBQUcsUUFBUyxDQUNWNDNFLFlBQWEsOEJBQ2J6RSxNQUFPLENBQUUzdkgsS0FBTSxRQUNmb0MsR0FBSSxDQUNGK3pCLE9BQVEsU0FBU29wRyxHQUdmLE9BRkFBLEVBQU8xd0gsaUJBQ1Awd0gsRUFBT3YzQyxrQkFDQXd3QyxFQUFJZ0ssV0FBV2pELE9BSTVCL0csRUFBSS83RSxHQUFHLEtBQ2MsT0FBckIrN0UsRUFBSTc5RixhQUNBNmhCLEVBQUcsTUFBTyxDQUFFNDNFLFlBQWEseUJBQTJCLENBQ2xENTNFLEVBQ0UsUUFDQSxDQUNFNDNFLFlBQWEsZ0JBQ2J6RSxNQUFPLENBQUU4UyxJQUFLLHFCQUVoQixDQUFDakssRUFBSS83RSxHQUFHKzdFLEVBQUk3N0UsR0FBRzY3RSxFQUFJaEQsR0FBRyxzQkFFeEJnRCxFQUFJLzdFLEdBQUcsS0FDUCs3RSxFQUFJbDZHLFFBQVF4ZCxPQUFTLEVBQ2pCMDdDLEVBQUcsTUFBTyxDQUFFNDNFLFlBQWEsWUFBYyxDQUNyQzUzRSxFQUNFLFNBQ0EsQ0FDRTQzRSxZQUNFLGlFQUNGekUsTUFBTyxDQUNMM3ZILEtBQU0sU0FDTixjQUFlLFdBQ2YsZ0JBQWlCLE9BQ2pCLGdCQUFpQixRQUNqQnlRLEdBQUksMEJBR1IsQ0FDRStuSCxFQUFJLzdFLEdBQ0YsYUFDRSs3RSxFQUFJNzdFLEdBQUc2N0UsRUFBSTZJLGVBQWVxQixVQUMxQixjQUlSbEssRUFBSS83RSxHQUFHLEtBQ1BELEVBQ0UsTUFDQSxDQUNFNDNFLFlBQWEscUNBQ2J6RSxNQUFPLENBQUUsa0JBQW1CLHdCQUU5QjZJLEVBQUlvSSxHQUFHcEksRUFBSWw2RyxTQUFTLFNBQVNQLEdBQzNCLE9BQU95K0IsRUFDTCxPQUNBLENBQ0V2MUMsSUFBSzhXLEVBQU9yVixLQUNaMHJILFlBQWEsK0JBQ2J6RSxNQUFPLENBQUUsY0FBZTV4RyxFQUFPMmtILFdBRWpDLENBQ0VsSyxFQUFJLzdFLEdBQ0YsZUFBaUIrN0UsRUFBSTc3RSxHQUFHNStCLEVBQU9yVixNQUFRLG1CQUsvQyxLQUdKOHZILEVBQUkvNEUsT0FFVis0RSxFQUFJLzRFLEtBQ1IrNEUsRUFBSS83RSxHQUFHLEtBQ2MsT0FBckIrN0UsRUFBSTc5RixhQUNBNmhCLEVBQUcsV0FBWSxDQUNibW1GLFdBQVksQ0FDVixDQUNFajZILEtBQU0sUUFDTms2SCxRQUFTLFVBQ1RuK0gsTUFBTyt6SCxFQUFJcUssYUFBYXJLLEVBQUk2SSxlQUFleUIsU0FDM0NDLFdBQVkseUNBR2hCM08sWUFBYSxlQUNiekUsTUFBTyxDQUFFbC9HLEdBQUksbUJBQW9CL0gsS0FBTSxvQkFDdkM4M0gsU0FBVSxDQUFFLzdILE1BQU8rekgsRUFBSXFLLGFBQWFySyxFQUFJNkksZUFBZXlCLFVBQ3ZEMWdJLEdBQUksQ0FDRit6QixPQUFRLFNBQVNvcEcsR0FHZixPQUZBQSxFQUFPMXdILGlCQUNQMHdILEVBQU92M0Msa0JBQ0F3d0MsRUFBSS9pQyxRQUFROHBDLElBRXJCeUQsTUFBTyxTQUFTekQsR0FHZCxPQUZBQSxFQUFPMXdILGlCQUNQMHdILEVBQU92M0Msa0JBQ0F3d0MsRUFBSS9pQyxRQUFROHBDLElBRXJCenpILE1BQU8sU0FBU3l6SCxHQUNWQSxFQUFPaDJILE9BQU8wNUgsV0FHbEJ6SyxFQUFJOEIsS0FDRjlCLEVBQUlxSyxhQUNKckssRUFBSTZJLGVBQWV5QixRQUNuQnZELEVBQU9oMkgsT0FBTzlFLFdBS3RCK3pILEVBQUkvNEUsS0FDUis0RSxFQUFJLzdFLEdBQUcsS0FDUCs3RSxFQUFJNzlGLGFBQ0E2aEIsRUFBRyxNQUFPLENBQUU0M0UsWUFBYSxvQ0FBc0MsQ0FDN0Q1M0UsRUFDRSxTQUNBLENBQ0U0M0UsWUFBYSxzQ0FDYnpFLE1BQU8sQ0FBRTN2SCxLQUFNLFVBQ2ZvQyxHQUFJLENBQ0ZnUixNQUFPLFNBQVNtc0gsR0FDZCxPQUFPL0csRUFBSTJKLE1BQ1QsbUJBQ0EzSixFQUFJcUssYUFDSnJLLEVBQUkwSyxjQUtaLENBQ0cxSyxFQUFJem9ILFFBUUR5b0gsRUFBSS80RSxLQVBKakQsRUFBRyxPQUFRLENBQ1RnOEUsRUFBSS83RSxHQUNGLGFBQ0UrN0UsRUFBSTc3RSxHQUFHNjdFLEVBQUloRCxHQUFHLHFCQUNkLGNBSVZnRCxFQUFJLzdFLEdBQUcsS0FDUCs3RSxFQUFJem9ILFFBQ0F5c0MsRUFBRyxPQUFRLENBQ1Q0M0UsWUFBYSxtQ0FDYnpFLE1BQU8sQ0FBRW9RLEtBQU0sU0FBVSxjQUFlLFVBRTFDdkgsRUFBSS80RSxTQUlkKzRFLEVBQUkvNEUsUUFJWjNwQyxFQUFPMG9ILGVBQWdCLEUsZUNsVDhNLFFBQWUsRUFBRyxFLGFDUW5QeEksR0FBWSxFLFNBQUEsR0FDZCxFQUNBbGdILEVGdVNvQixJRXJTcEIsRUFDQSxLQUNBLEtBQ0EsTUF1QkZrZ0gsRUFBVTF1SCxRQUFRbTNILE9BQVMsMERBQzNCLFFBQWV6SSxFLHVGQ3ZDZixJQUFJbGdILEVBQVMsV0FDWCxJQUFJMGlILEVBQU16M0gsS0FDTmc4QyxFQUFLeTdFLEVBQUk0RixlQUNUNWhGLEVBQUtnOEUsRUFBSTZGLE1BQU03aEYsSUFBTU8sRUFDekIsT0FBT1AsRUFBRyxNQUFPLENBQUU0M0UsWUFBYSxpQ0FBbUMsQ0FDakU1M0UsRUFBRyxNQUFPLENBQUU0M0UsWUFBYSxZQUFjLENBQ3JDNTNFLEVBQ0UsU0FDQSxDQUNFc2tGLE1BQU8sQ0FDTCxNQUNBLGtCQUNBdEksRUFBSTJLLGdCQUFnQnJpSSxPQUFTLEVBQ3pCLGNBQ0Esd0JBQ0osT0FFRjZ1SCxNQUFPLENBQ0wzdkgsS0FBTSxTQUNOLGNBQWUsV0FDZixnQkFBaUIsT0FDakIsZ0JBQWlCLFFBQ2pCeVEsR0FBSSx3QkFHUixDQUNFK25ILEVBQUkvN0UsR0FDRixXQUNFKzdFLEVBQUk3N0UsR0FBRzY3RSxFQUFJeGxHLE9BQ1gsSUFDQXdsRyxFQUFJNzdFLEdBQUc2N0UsRUFBSTRLLFNBQ1gsWUFJUjVLLEVBQUkvN0UsR0FBRyxLQUNQRCxFQUNFLE1BQ0EsQ0FDRTQzRSxZQUFhLGdCQUNiekUsTUFBTyxDQUFFLGtCQUFtQix1QkFDNUJ2dEgsR0FBSSxDQUNGZ1IsTUFBTyxTQUFTbXNILEdBQ2QsT0FBTy9HLEVBQUkwSCxhQUFhWCxNQUk5Qi9HLEVBQUlvSSxHQUFHcEksRUFBSS85RyxVQUFVLFNBQVMraEIsR0FDNUIsT0FBT2dnQixFQUFHLE1BQU8sQ0FBRXYxQyxJQUFLdTFCLEVBQU8vckIsR0FBSTJqSCxZQUFhLGVBQWlCLENBQy9ENTNFLEVBQUcsUUFBUyxDQUFFNDNFLFlBQWEsaUJBQW1CLENBQzVDNTNFLEVBQUcsTUFBTyxDQUFFNDNFLFlBQWEseUJBQTJCLENBQ2xENTNFLEVBQUcsUUFBUyxDQUNWbXpFLE1BQU8sQ0FBRTN2SCxLQUFNLFlBQ2Z3Z0ksU0FBVSxDQUFFMW1ILFFBQVMwK0csRUFBSTZLLFVBQVU3bUcsSUFDbkNwNkIsR0FBSSxDQUNGK3pCLE9BQVEsU0FBU29wRyxHQUNmLE9BQU8vRyxFQUFJOEssYUFBYTltRyxPQUk5Qmc4RixFQUFJLzdFLEdBQUcsS0FDUEQsRUFBRyxJQUFLLENBQUU0M0UsWUFBYSx3QkFDdkJvRSxFQUFJLzdFLEdBQUcsaUJBQW1CKzdFLEVBQUk3N0UsR0FBR25nQixFQUFPOXpCLE1BQVEseUJBS3hELFFBTVJvTixFQUFPMG9ILGVBQWdCLEUsZUN6RThNLFFBQWUsRUFBRyxFLGFDUW5QeEksR0FBWSxFLFNBQUEsR0FDZCxFQUNBbGdILEVGOERvQixJRTVEcEIsRUFDQSxLQUNBLEtBQ0EsTUF1QkZrZ0gsRUFBVTF1SCxRQUFRbTNILE9BQVMseURBQzNCLFFBQWV6SSxFLHNGQ3ZDZixJQUFJbGdILEVBQVMsV0FDWCxJQUFJMGlILEVBQU16M0gsS0FDTmc4QyxFQUFLeTdFLEVBQUk0RixlQUNUNWhGLEVBQUtnOEUsRUFBSTZGLE1BQU03aEYsSUFBTU8sRUFDekIsT0FBT1AsRUFBRyxNQUFPLENBQUU0M0UsWUFBYSx3QkFBMEIsQ0FDeERvRSxFQUFJLzVHLFFBQVEzZCxPQUNSMDdDLEVBQUcsUUFBUyxDQUFFNDNFLFlBQWEsaUJBQW1CLENBQzVDb0UsRUFBSS83RSxHQUFHKzdFLEVBQUk3N0UsR0FBRzY3RSxFQUFJaEQsR0FBRyxxQkFFdkJnRCxFQUFJLzRFLEtBQ1IrNEUsRUFBSS83RSxHQUFHLEtBQ1ArN0UsRUFBSS81RyxRQUFRM2QsT0FDUjA3QyxFQUNFLE1BQ0EsQ0FBRTQzRSxZQUFhLDZCQUNmLENBQ0VvRSxFQUFJb0ksR0FBR3BJLEVBQUkvNUcsU0FBUyxTQUFTK2QsR0FDM0IsT0FBT2dnQixFQUFHLGtCQUFtQixDQUMzQnYxQyxJQUFLdTFCLEVBQU8vckIsR0FDWmsvRyxNQUFPLENBQ0xsMUcsU0FBVStoQixFQUFPM1csV0FDakIsWUFBYTJXLEVBQU8vckIsR0FDcEJ1aUIsTUFBT3dKLEVBQU85ekIsTUFFaEJ0RyxHQUFJLENBQUVtaEksVUFBVy9LLEVBQUkrSyxVQUFXQyxhQUFjaEwsRUFBSWdMLG1CQUd0RGhMLEVBQUkvN0UsR0FBRyxLQUNQKzdFLEVBQUlpTCxzQkFBd0IsRUFDeEJqbkYsRUFDRSxTQUNBLENBQ0U0M0UsWUFDRSx1REFDRnpFLE1BQU8sQ0FBRTN2SCxLQUFNLFVBQ2ZvQyxHQUFJLENBQUVnUixNQUFPb2xILEVBQUlrTCxXQUVuQixDQUNFbG5GLEVBQUcsSUFBSyxDQUFFNDNFLFlBQWEsa0JBQW9CLENBQ3pDb0UsRUFBSS83RSxHQUFHLFdBRVQrN0UsRUFBSS83RSxHQUNGLFdBQ0UrN0UsRUFBSTc3RSxHQUNGNjdFLEVBQUk5QyxJQUFJLGdCQUFpQjhDLEVBQUlpTCxzQkFBdUIsQ0FDbEQsY0FBZWpMLEVBQUlpTCx5QkFHdkIsWUFJUmpMLEVBQUkvNEUsTUFFVixHQUVGKzRFLEVBQUkvNEUsUUFJWjNwQyxFQUFPMG9ILGVBQWdCLEUsZUM1RHVNLFFBQWUsRUFBRyxFLGFDUTVPeEksR0FBWSxFLFNBQUEsR0FDZCxFQUNBbGdILEVGaURvQixJRS9DcEIsRUFDQSxLQUNBLEtBQ0EsTUF1QkZrZ0gsRUFBVTF1SCxRQUFRbTNILE9BQVMsa0RBQzNCLFFBQWV6SSxFLHVGQ3ZDZixJQUFJbGdILEVBQVMsV0FDWCxJQUFJMGlILEVBQU16M0gsS0FDTmc4QyxFQUFLeTdFLEVBQUk0RixlQUNUNWhGLEVBQUtnOEUsRUFBSTZGLE1BQU03aEYsSUFBTU8sRUFDekIsT0FBT1AsRUFBRyxNQUFPLENBQUU0M0UsWUFBYSwwQkFBNEIsQ0FDMUQ1M0UsRUFBRyxNQUFPLENBQUU0M0UsWUFBYSwrQkFBaUMsQ0FDeEQ1M0UsRUFDRSxNQUNBLENBQUU0M0UsWUFBYSxnQkFDZixDQUNFb0UsRUFBSW9JLEdBQUdwSSxFQUFJbUwseUJBQXlCLFNBQVNDLEdBQzNDLE9BQU9wTCxFQUFJb0ksR0FBR2dELEVBQWMvOUcsWUFBWSxTQUN0Q2crRyxHQUVBLE9BQU9ybkYsRUFDTCxPQUNBLENBQUV2MUMsSUFBSzQ4SCxFQUFrQnB6SCxHQUFJMmpILFlBQWEsT0FDMUMsQ0FDRW9FLEVBQUkvN0UsR0FDRixlQUNFKzdFLEVBQUk3N0UsR0FBR2luRixFQUFjbDdILE1BQ3JCLEtBQ0E4dkgsRUFBSTc3RSxHQUFHa25GLEVBQWtCbjdILE1BQ3pCLGdCQUVKOHpDLEVBQ0UsSUFDQSxDQUNFNDNFLFlBQWEsaUJBQ2JoeUgsR0FBSSxDQUNGZ1IsTUFBTyxTQUFTbXNILEdBR2QsT0FGQUEsRUFBTzF3SCxpQkFDUDB3SCxFQUFPdjNDLGtCQUNBd3dDLEVBQUlzTCxnQkFDVEQsRUFDQUQsTUFLUixDQUFDcEwsRUFBSS83RSxHQUFHLG9CQU9wQixHQUVGKzdFLEVBQUkvN0UsR0FBRyxLQUNQRCxFQUFHLFFBQVMsQ0FDVjQzRSxZQUFhLHVDQUNiekUsTUFBTyxDQUFFM3ZILEtBQU0sT0FBUWk5QixZQUFhdTdGLEVBQUloRCxHQUFHLDJCQUcvQ2dELEVBQUkvN0UsR0FBRyxLQUNQRCxFQUFHLE1BQU8sQ0FBRTQzRSxZQUFhLHNDQUF3QyxDQUMvRDUzRSxFQUNFLE1BQ0EsQ0FDRTQzRSxZQUFhLDJCQUNiekUsTUFBTyxDQUFFbC9HLEdBQUksNkJBRWYsQ0FDRStyQyxFQUNFLE1BQ0EsQ0FBRTQzRSxZQUFhLHNCQUNmb0UsRUFBSW9JLEdBQUdwSSxFQUFJOXlHLGlCQUFpQixTQUFTK1IsR0FDbkMsT0FBTytrQixFQUNMLE1BQ0EsQ0FBRXYxQyxJQUFLd3dCLEVBQWVobkIsR0FBSTJqSCxZQUFhLG1CQUN2QyxDQUNFNTNFLEVBQUcsTUFBTyxDQUFFNDNFLFlBQWEsMEJBQTRCLENBQ25ENTNFLEVBQ0UsTUFDQSxDQUFFNDNFLFlBQWEsd0NBQ2YsQ0FDRTUzRSxFQUFHLFFBQVMsQ0FDVkEsRUFBRyxRQUFTLENBQ1Y0M0UsWUFBYSwyQkFDYnpFLE1BQU8sQ0FDTDN2SCxLQUFNLFdBQ04wSSxLQUFNLFlBQWMrdUIsRUFBZWhuQixJQUVyQyt2SCxTQUFVLENBQ1IxbUgsUUFBUzArRyxFQUFJdUwsYUFBYTkzRyxTQUFTd0wsSUFFckNyMUIsR0FBSSxDQUNGK3pCLE9BQVEsU0FBU29wRyxHQUdmLE9BRkFBLEVBQU8xd0gsaUJBQ1Awd0gsRUFBT3YzQyxrQkFDQXd3QyxFQUFJOStHLFVBQVUrZCxPQUkzQitnRyxFQUFJLzdFLEdBQUcsS0FDUEQsRUFBRyxJQUFLLENBQUU0M0UsWUFBYSw0QkFJN0JvRSxFQUFJLzdFLEdBQUcsS0FDUEQsRUFDRSxJQUNBLENBQ0U0M0UsWUFBYSxpQ0FDYnpFLE1BQU8sQ0FDTCxjQUFlLFdBQ2ZyK0IsS0FBTSxvQkFBc0I3NUQsRUFBZWhuQixLQUcvQyxDQUNFK25ILEVBQUkvN0UsR0FDRixtQkFDRSs3RSxFQUFJNzdFLEdBQUdsbEIsRUFBZS91QixNQUN0QixzQkFLVjh2SCxFQUFJLzdFLEdBQUcsS0FDUEQsRUFDRSxNQUNBLENBQ0U0M0UsWUFDRSw4Q0FDRnpFLE1BQU8sQ0FBRWwvRyxHQUFJLG1CQUFxQmduQixFQUFlaG5CLEtBRW5EK25ILEVBQUlvSSxHQUFHbnBHLEVBQWU1UixZQUFZLFNBQVNFLEdBQ3pDLE9BQU95MkIsRUFDTCxRQUNBLENBQ0V2MUMsSUFBSzhlLEVBQVV0VixHQUNmcXdILE1BQU8sQ0FDTCxpQkFDQXRJLEVBQUl3TCxpQkFBaUJqK0csRUFBVzBSLElBRWxDazRGLE1BQU8sQ0FBRThTLElBQUssYUFBZTE4RyxFQUFVdFYsS0FFekMsQ0FDRStyQyxFQUFHLFFBQVMsQ0FDVm16RSxNQUFPLENBQ0wzdkgsS0FBTSxXQUNOMEksS0FBTSxhQUFlcWQsRUFBVXRWLEdBQy9CQSxHQUFJLGFBQWVzVixFQUFVdFYsSUFFL0JyTyxHQUFJLENBQ0YrekIsT0FBUSxTQUFTb3BHLEdBQ2YsT0FBTy9HLEVBQUl5TCxnQkFDVGwrRyxFQUNBMFIsT0FLUitnRyxFQUFJLzdFLEdBQUcsS0FDUEQsRUFBRyxNQUFPLENBQUU0M0UsWUFBYSwwQkFBNEIsQ0FDbkRydUcsRUFBVW0rRyxNQUNOMW5GLEVBQUcsT0FBUSxDQUNUNDNFLFlBQWEsdUJBQ2J4NEcsTUFBTyxxQkFBdUJtSyxFQUFVbStHLFFBRTFDMUwsRUFBSS80RSxLQUNSKzRFLEVBQUkvN0UsR0FBRyxLQUNQRCxFQUFHLE9BQVEsQ0FBRTQzRSxZQUFhLHVCQUF5QixDQUNqRG9FLEVBQUkvN0UsR0FBRys3RSxFQUFJNzdFLEdBQUc1MkIsRUFBVXJkLGdCQU1sQyxRQUtSLFVBUVpvTixFQUFPMG9ILGVBQWdCLEUsZUN2TGtOLFFBQWUsRUFBRyxFLGFDUXZQeEksR0FBWSxFLFNBQUEsR0FDZCxFQUNBbGdILEVGNEtvQixJRTFLcEIsRUFDQSxLQUNBLEtBQ0EsTUF1QkZrZ0gsRUFBVTF1SCxRQUFRbTNILE9BQVMsK0RBQzNCLFFBQWV6SSxFLHVGQ3ZDZixJQUFJbGdILEVBQVMsV0FDWCxJQUFJMGlILEVBQU16M0gsS0FDTmc4QyxFQUFLeTdFLEVBQUk0RixlQUNUNWhGLEVBQUtnOEUsRUFBSTZGLE1BQU03aEYsSUFBTU8sRUFDekIsT0FBT1AsRUFDTCxNQUNBLENBQUVtekUsTUFBTyxDQUFFbC9HLEdBQUksa0NBQ2YsQ0FDRStuSCxFQUFJd0osYUFDQXhsRixFQUFHLFFBQVMsQ0FDVm16RSxNQUFPLENBQUUsY0FBZTZJLEVBQUloRCxHQUFHLGVBQWdCNEssY0FBYyxHQUM3RGgrSCxHQUFJLENBQUUwMEMsTUFBTzBoRixFQUFJbUcsWUFDakJ4SyxZQUFhcUUsRUFBSW9HLEdBQ2YsQ0FDRSxDQUNFMzNILElBQUssT0FDTHUyQixHQUFJLFdBQ0YsTUFBTyxDQUNMZzdGLEVBQUk5eUcsZ0JBQ0E4MkIsRUFBRyxzQkFBdUIsQ0FDeEJtekUsTUFBTyxDQUNMLG1CQUFvQjZJLEVBQUk5eUcsZ0JBQ3hCLDRCQUNFOHlHLEVBQUltTCx5QkFFUnZoSSxHQUFJLENBQ0YraEksZUFBZ0IzTCxFQUFJMkwsZUFDcEJDLGVBQWdCNUwsRUFBSTRMLGVBQ3BCQyxZQUFhN0wsRUFBSTZMLFlBQ2pCM3FILFVBQVc4K0csRUFBSTkrRyxhQUduQjgrRyxFQUFJLzRFLE9BR1orNUQsT0FBTyxHQUVULENBQ0V2eUcsSUFBSyxzQkFDTHUyQixHQUFJLFdBQ0YsTUFBTyxDQUNMZ2YsRUFDRSxTQUNBLENBQ0U0M0UsWUFBYSw0QkFDYnpFLE1BQU8sQ0FDTDN2SCxLQUFNLFNBQ04sYUFBY3c0SCxFQUFJaEQsR0FBRyxnQkFFdkJwekgsR0FBSSxDQUNGZ1IsTUFBTyxTQUFTbXNILEdBR2QsT0FGQUEsRUFBTzF3SCxpQkFDUDB3SCxFQUFPdjNDLGtCQUNBd3dDLEVBQUltRyxXQUFXWSxNQUk1QixDQUNFL0csRUFBSS83RSxHQUNGLGFBQ0UrN0UsRUFBSTc3RSxHQUFHNjdFLEVBQUloRCxHQUFHLGdCQUNkLGNBSVJnRCxFQUFJLzdFLEdBQUcsS0FDUEQsRUFDRSxTQUNBLENBQ0U0M0UsWUFBYSxrQkFDYnpFLE1BQU8sQ0FDTDN2SCxLQUFNLFNBQ04wMEIsVUFDRzhqRyxFQUFJOEwseUJBQTJCOUwsRUFBSXpvSCxTQUV4QzNOLEdBQUksQ0FDRmdSLE1BQU8sU0FBU21zSCxHQUdkLE9BRkFBLEVBQU8xd0gsaUJBQ1Awd0gsRUFBT3YzQyxrQkFDQXd3QyxFQUFJK0wscUJBQXFCaEYsTUFJdEMsQ0FDRy9HLEVBQUl6b0gsUUFpQkR5b0gsRUFBSS80RSxLQWhCSmpELEVBQUcsT0FBUSxDQUNUZzhFLEVBQUkvN0UsR0FDRixlQUNFKzdFLEVBQUk3N0UsR0FDRjY3RSxFQUFJOUMsSUFDRixtQkFDQThDLEVBQUk4TCx3QkFDSixDQUNFLG1CQUNFOUwsRUFBSThMLDJCQUlaLGdCQUlWOUwsRUFBSS83RSxHQUFHLEtBQ1ArN0UsRUFBSXpvSCxRQUNBeXNDLEVBQUcsT0FBUSxDQUNUNDNFLFlBQWEsbUNBQ2J6RSxNQUFPLENBQUVvUSxLQUFNLFNBQVUsY0FBZSxVQUUxQ3ZILEVBQUkvNEUsU0FLaEIrNUQsT0FBTyxJQUdYLE1BQ0EsRUFDQSxjQUdKZ2YsRUFBSS80RSxNQUVWLElBSUozcEMsRUFBTzBvSCxlQUFnQixFLGVDL0hvTixRQUFlLEVBQUcsRSxJQ096UHhJLEdBQVksRSxTQUFBLEdBQ2QsRUFDQWxnSCxFRnFIb0IsSUVuSHBCLEVBQ0EsS0FDQSxLQUNBLE1BdUJGa2dILEVBQVUxdUgsUUFBUW0zSCxPQUFTLGlFQUMzQixRQUFlekksRSx1RkN0Q2YsSUFBSWxnSCxFQUFTLFdBQ1gsSUFBSTBpSCxFQUFNejNILEtBQ05nOEMsRUFBS3k3RSxFQUFJNEYsZUFDVDVoRixFQUFLZzhFLEVBQUk2RixNQUFNN2hGLElBQU1PLEVBQ3pCLE9BQU9QLEVBQ0wsTUFDQSxDQUNFQSxFQUFHLGFBQWMsQ0FBRW16RSxNQUFPLENBQUVqbkgsS0FBTSxTQUFZLENBQzVDOHpDLEVBQ0UsTUFDQSxDQUFFNDNFLFlBQWEsY0FDZixDQUNFNTNFLEVBQ0UsTUFDQSxDQUNFNDNFLFlBQWEscUNBQ2J6RSxNQUFPLENBQUVvUSxLQUFNLGFBRWpCLENBQ0V2akYsRUFDRSxNQUNBLENBQ0VtbUYsV0FBWSxDQUNWLENBQ0VqNkgsS0FBTSxnQkFDTms2SCxRQUFTLGtCQUNUbitILE1BQU8rekgsRUFBSTFoRixNQUNYaXNGLFdBQVksVUFHaEIzTyxZQUFhLGdCQUNiekUsTUFBTyxDQUNMLGtCQUFtQixhQUNuQixtQkFBb0IscUJBR3hCLENBQ0VuekUsRUFDRSxTQUNBLENBQUU0M0UsWUFBYSxnQkFDZixDQUNFb0UsRUFBSTE5RSxHQUFHLFNBQVUsQ0FDZjBCLEVBQUcsS0FBTSxDQUFFNDNFLFlBQWEsZUFBaUIsQ0FDdkNvRSxFQUFJLzdFLEdBQ0YscUJBQ0UrN0UsRUFBSTc3RSxHQUFHNjdFLEVBQUlnTSxZQUNYLHNCQUdOaE0sRUFBSS83RSxHQUFHLEtBQ1BELEVBQ0UsU0FDQSxDQUNFNDNFLFlBQWEsUUFDYnpFLE1BQU8sQ0FDTDN2SCxLQUFNLFNBQ04sZUFBZ0IsUUFDaEIsYUFBYyxTQUVoQm9DLEdBQUksQ0FDRmdSLE1BQU8sU0FBU21zSCxHQUdkLE9BRkFBLEVBQU8xd0gsaUJBQ1Awd0gsRUFBT3YzQyxrQkFDQXd3QyxFQUFJMWhGLE1BQU15b0YsTUFJdkIsQ0FDRS9pRixFQUFHLE9BQVEsQ0FBRW16RSxNQUFPLENBQUUsY0FBZSxTQUFZLENBQy9DNkksRUFBSS83RSxHQUFHLFlBTWpCLEdBRUYrN0UsRUFBSS83RSxHQUFHLEtBQ1BELEVBQ0UsVUFDQSxDQUFFNDNFLFlBQWEsY0FDZixDQUFDb0UsRUFBSTE5RSxHQUFHLFNBQ1IsR0FFRjA5RSxFQUFJLzdFLEdBQUcsS0FDUEQsRUFDRSxTQUNBLENBQUU0M0UsWUFBYSxnQkFDZixDQUNHb0UsRUFBSTRILGFBMkJENUgsRUFBSS80RSxLQTFCSis0RSxFQUFJMTlFLEdBQUcsU0FBVSxDQUNmMEIsRUFDRSxTQUNBLENBQ0U0M0UsWUFBYSw0QkFDYnpFLE1BQU8sQ0FDTDN2SCxLQUFNLFNBQ04sYUFBYyxlQUVoQm9DLEdBQUksQ0FDRmdSLE1BQU8sU0FBU21zSCxHQUdkLE9BRkFBLEVBQU8xd0gsaUJBQ1Awd0gsRUFBT3YzQyxrQkFDQXd3QyxFQUFJMWhGLE1BQU15b0YsTUFJdkIsQ0FDRS9HLEVBQUkvN0UsR0FDRixxQkFDRSs3RSxFQUFJNzdFLEdBQUc2N0UsRUFBSWlNLFlBQ1gsd0JBTWRqTSxFQUFJLzdFLEdBQUcsS0FDUCs3RSxFQUFJNEgsYUFDQTVILEVBQUkxOUUsR0FBRyxzQkFBdUIsQ0FDNUIwQixFQUNFLFNBQ0EsQ0FDRTQzRSxZQUFhLDRCQUNiekUsTUFBTyxDQUNMM3ZILEtBQU0sU0FDTixhQUFjLGVBRWhCb0MsR0FBSSxDQUNGZ1IsTUFBTyxTQUFTbXNILEdBR2QsT0FGQUEsRUFBTzF3SCxpQkFDUDB3SCxFQUFPdjNDLGtCQUNBd3dDLEVBQUkxaEYsTUFBTXlvRixNQUl2QixDQUNFL0csRUFBSS83RSxHQUNGLHFCQUNFKzdFLEVBQUk3N0UsR0FBRzY3RSxFQUFJa00sYUFDWCxzQkFJUmxNLEVBQUkvN0UsR0FBRyxLQUNQRCxFQUNFLFNBQ0EsQ0FDRTQzRSxZQUFhLGtCQUNiekUsTUFBTyxDQUFFM3ZILEtBQU0sVUFDZm9DLEdBQUksQ0FDRmdSLE1BQU8sU0FBU21zSCxHQUdkLE9BRkFBLEVBQU8xd0gsaUJBQ1Awd0gsRUFBT3YzQyxrQkFDQXd3QyxFQUFJOEgsUUFBUWYsTUFJekIsQ0FDRS9HLEVBQUkvN0UsR0FDRixxQkFDRSs3RSxFQUFJNzdFLEdBQUc2N0UsRUFBSW1NLGNBQ1gsd0JBS1ZuTSxFQUFJLzRFLE1BRVYsT0FNVis0RSxFQUFJLzdFLEdBQUcsS0FDUCs3RSxFQUFJMTlFLEdBQUcsWUFFVCxLQUdKMDlFLEVBQUkvN0UsR0FBRyxLQUNQRCxFQUFHLE1BQU8sQ0FDUjQzRSxZQUFhLHNCQUNiaHlILEdBQUksQ0FDRmdSLE1BQU8sU0FBU21zSCxHQUdkLE9BRkFBLEVBQU8xd0gsaUJBQ1Awd0gsRUFBT3YzQyxrQkFDQXd3QyxFQUFJMWhGLE1BQU15b0YsUUFLekIsSUFJSnpwSCxFQUFPMG9ILGVBQWdCLEUsZUNyTXlMLFFBQWUsRUFBRyxFLGFDUTlOeEksR0FBWSxFLFNBQUEsR0FDZCxFQUNBbGdILEVGMExvQixJRXhMcEIsRUFDQSxLQUNBLFdBQ0EsTUF1QkZrZ0gsRUFBVTF1SCxRQUFRbTNILE9BQVMsOEJBQzNCLFFBQWV6SSxFLHVGQ3ZDZixJQUFJbGdILEVBQVMsV0FDWCxJQUFJMGlILEVBQU16M0gsS0FDTmc4QyxFQUFLeTdFLEVBQUk0RixlQUNUNWhGLEVBQUtnOEUsRUFBSTZGLE1BQU03aEYsSUFBTU8sRUFDekIsT0FBT1AsRUFBRyxNQUFPLENBQUU0M0UsWUFBYSxjQUFnQixDQUM5QzUzRSxFQUNFLEtBQ0EsQ0FBRTQzRSxZQUFhLG1CQUNmLENBQ0U1M0UsRUFBRyxLQUFNLENBQUU0M0UsWUFBYSx1Q0FBeUMsQ0FDL0Q1M0UsRUFDRSxTQUNBLENBQ0VtekUsTUFBTyxDQUFFajdGLFNBQThCLElBQXBCOGpHLEVBQUlqa0gsYUFDdkJuUyxHQUFJLENBQ0ZnUixNQUFPLFNBQVNtc0gsR0FDZCxPQUFPL0csRUFBSW9NLFNBQVNwTSxFQUFJamtILFlBQWMsTUFJNUMsQ0FDRWlvQyxFQUFHLElBQUssQ0FBRTQzRSxZQUFhLGtCQUFvQixDQUN6Q29FLEVBQUkvN0UsR0FBRyxzQkFLZis3RSxFQUFJLzdFLEdBQUcsS0FDUCs3RSxFQUFJb0ksR0FBR3BJLEVBQUlxSSxnQkFBZ0IsU0FBU3BzSCxFQUFNeE4sR0FDeEMsT0FBT3UxQyxFQUNMLEtBQ0EsQ0FBRXYxQyxJQUFLQSxFQUFLNjVILE1BQU8sQ0FBQyxrQkFBbUJ0SSxFQUFJbEwsU0FBU3JtSCxLQUNwRCxDQUNFdTFDLEVBQ0UsU0FDQSxDQUNFcDZDLEdBQUksQ0FDRmdSLE1BQU8sU0FBU21zSCxHQUNkLE9BQU8vRyxFQUFJb00sU0FBUzM5SCxFQUFNLE1BSWhDLENBQUN1eEgsRUFBSS83RSxHQUFHLGFBQWUrN0UsRUFBSTc3RSxHQUFHMTFDLEVBQU0sR0FBSyxtQkFLakR1eEgsRUFBSS83RSxHQUFHLEtBQ1BELEVBQUcsS0FBTSxDQUFFNDNFLFlBQWEsbUNBQXFDLENBQzNENTNFLEVBQ0UsU0FDQSxDQUNFbXpFLE1BQU8sQ0FDTGo3RixTQUFVOGpHLEVBQUlqa0gsY0FBZ0Jpa0gsRUFBSXFJLGVBQWUvL0gsUUFFbkRzQixHQUFJLENBQ0ZnUixNQUFPLFNBQVNtc0gsR0FDZCxPQUFPL0csRUFBSW9NLFNBQVNwTSxFQUFJamtILFlBQWMsTUFJNUMsQ0FDRWlvQyxFQUFHLElBQUssQ0FBRTQzRSxZQUFhLGtCQUFvQixDQUN6Q29FLEVBQUkvN0UsR0FBRyx3QkFNakIsTUFLTjNtQyxFQUFPMG9ILGVBQWdCLEUsZUMxRThMLFFBQWUsRUFBRyxFLGFDUW5PeEksR0FBWSxFLFNBQUEsR0FDZCxFQUNBbGdILEVGK0RvQixJRTdEcEIsRUFDQSxLQUNBLEtBQ0EsTUF1QkZrZ0gsRUFBVTF1SCxRQUFRbTNILE9BQVMsbUNBQzNCLFFBQWV6SSxFLHNDQ2pDQSxTQUFTNk8sRUFDdEJDLEVBQ0FodkgsRUFDQWl2SCxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxHQUdBLElBcUJJQyxFQXJCQS85SCxFQUFtQyxtQkFBbEJ3OUgsRUFDakJBLEVBQWN4OUgsUUFDZHc5SCxFQXNESixHQW5ESWh2SCxJQUNGeE8sRUFBUXdPLE9BQVNBLEVBQ2pCeE8sRUFBUXk5SCxnQkFBa0JBLEVBQzFCejlILEVBQVFnK0gsV0FBWSxHQUlsQk4sSUFDRjE5SCxFQUFReXJILFlBQWEsR0FJbkJtUyxJQUNGNTlILEVBQVFpK0gsU0FBVyxVQUFZTCxHQUk3QkMsR0FDRkUsRUFBTyxTQUFVbGlGLElBRWZBLEVBQ0VBLEdBQ0NwaUQsS0FBS3lrSSxRQUFVemtJLEtBQUt5a0ksT0FBT0MsWUFDM0Ixa0ksS0FBS3d6QyxRQUFVeHpDLEtBQUt3ekMsT0FBT2l4RixRQUFVemtJLEtBQUt3ekMsT0FBT2l4RixPQUFPQyxhQUVaLG9CQUF4QkMsc0JBQ3JCdmlGLEVBQVV1aUYscUJBR1JULEdBQ0ZBLEVBQWExL0gsS0FBS3hFLEtBQU1vaUQsR0FHdEJBLEdBQVdBLEVBQVF3aUYsdUJBQ3JCeGlGLEVBQVF3aUYsc0JBQXNCdjBILElBQUkrekgsSUFLdEM3OUgsRUFBUXMrSCxhQUFlUCxHQUNkSixJQUNUSSxFQUFPRCxFQUNILFdBQ0FILEVBQWExL0gsS0FDWHhFLE1BQ0N1RyxFQUFReXJILFdBQWFoeUgsS0FBS3d6QyxPQUFTeHpDLE1BQU00d0gsTUFBTVIsU0FBU3RvQyxhQUczRG84QyxHQUdGSSxFQUNGLEdBQUkvOUgsRUFBUXlySCxXQUFZLENBR3RCenJILEVBQVF1K0gsY0FBZ0JSLEVBRXhCLElBQUlTLEVBQWlCeCtILEVBQVF3TyxPQUM3QnhPLEVBQVF3TyxPQUFTLFNBQW1Db3ZDLEVBQUcvQixHQUVyRCxPQURBa2lGLEVBQUs5L0gsS0FBSzQ5QyxHQUNIMmlGLEVBQWU1Z0YsRUFBRy9CLFFBRXRCLENBRUwsSUFBSTFCLEVBQVduNkMsRUFBUTRwSCxhQUN2QjVwSCxFQUFRNHBILGFBQWV6dkUsRUFDbkIsR0FBR3Y2QyxPQUFPdTZDLEVBQVU0akYsR0FDcEIsQ0FBQ0EsR0FJVCxNQUFPLENBQ0xqb0csUUFBUzBuRyxFQUNUeDlILFFBQVNBLEcsa0NDNUZiLElBQUlnSyxFQUFVLEVBQVEsT0FDbkJBLEVBQVErckIsYUFBWS9yQixFQUFVQSxFQUFRaXNCLFNBQ25CLGlCQUFaanNCLElBQXNCQSxFQUFVLENBQUMsQ0FBQzZyQixFQUFPMXNCLEdBQUlhLEVBQVMsTUFDN0RBLEVBQVF5MEgsU0FBUTVvRyxFQUFPQyxRQUFVOXJCLEVBQVF5MEgsU0FHL0IzMEgsRUFESCxZQUNPLFdBQVlFLEdBQVMsRUFBTyxLLGdCQ043QyxJQUFJQSxFQUFVLEVBQVEsT0FDbkJBLEVBQVErckIsYUFBWS9yQixFQUFVQSxFQUFRaXNCLFNBQ25CLGlCQUFaanNCLElBQXNCQSxFQUFVLENBQUMsQ0FBQzZyQixFQUFPMXNCLEdBQUlhLEVBQVMsTUFDN0RBLEVBQVF5MEgsU0FBUTVvRyxFQUFPQyxRQUFVOXJCLEVBQVF5MEgsU0FHL0IzMEgsRUFESCxZQUNPLFdBQVlFLEdBQVMsRUFBTyxLLGdCQ043QyxJQUFJQSxFQUFVLEVBQVEsT0FDbkJBLEVBQVErckIsYUFBWS9yQixFQUFVQSxFQUFRaXNCLFNBQ25CLGlCQUFaanNCLElBQXNCQSxFQUFVLENBQUMsQ0FBQzZyQixFQUFPMXNCLEdBQUlhLEVBQVMsTUFDN0RBLEVBQVF5MEgsU0FBUTVvRyxFQUFPQyxRQUFVOXJCLEVBQVF5MEgsU0FHL0IzMEgsRUFESCxZQUNPLFdBQVlFLEdBQVMsRUFBTyxLLGdCQ043QyxJQUFJQSxFQUFVLEVBQVEsT0FDbkJBLEVBQVErckIsYUFBWS9yQixFQUFVQSxFQUFRaXNCLFNBQ25CLGlCQUFaanNCLElBQXNCQSxFQUFVLENBQUMsQ0FBQzZyQixFQUFPMXNCLEdBQUlhLEVBQVMsTUFDN0RBLEVBQVF5MEgsU0FBUTVvRyxFQUFPQyxRQUFVOXJCLEVBQVF5MEgsU0FHL0IzMEgsRUFESCxZQUNPLFdBQVlFLEdBQVMsRUFBTyxLLGdCQ043QyxJQUFJQSxFQUFVLEVBQVEsT0FDbkJBLEVBQVErckIsYUFBWS9yQixFQUFVQSxFQUFRaXNCLFNBQ25CLGlCQUFaanNCLElBQXNCQSxFQUFVLENBQUMsQ0FBQzZyQixFQUFPMXNCLEdBQUlhLEVBQVMsTUFDN0RBLEVBQVF5MEgsU0FBUTVvRyxFQUFPQyxRQUFVOXJCLEVBQVF5MEgsU0FHL0IzMEgsRUFESCxZQUNPLFdBQVlFLEdBQVMsRUFBTyxLLGdCQ043QyxJQUFJQSxFQUFVLEVBQVEsT0FDbkJBLEVBQVErckIsYUFBWS9yQixFQUFVQSxFQUFRaXNCLFNBQ25CLGlCQUFaanNCLElBQXNCQSxFQUFVLENBQUMsQ0FBQzZyQixFQUFPMXNCLEdBQUlhLEVBQVMsTUFDN0RBLEVBQVF5MEgsU0FBUTVvRyxFQUFPQyxRQUFVOXJCLEVBQVF5MEgsU0FHL0IzMEgsRUFESCxZQUNPLFdBQVlFLEdBQVMsRUFBTyxLLGdCQ043QyxJQUFJQSxFQUFVLEVBQVEsT0FDbkJBLEVBQVErckIsYUFBWS9yQixFQUFVQSxFQUFRaXNCLFNBQ25CLGlCQUFaanNCLElBQXNCQSxFQUFVLENBQUMsQ0FBQzZyQixFQUFPMXNCLEdBQUlhLEVBQVMsTUFDN0RBLEVBQVF5MEgsU0FBUTVvRyxFQUFPQyxRQUFVOXJCLEVBQVF5MEgsU0FHL0IzMEgsRUFESCxZQUNPLFdBQVlFLEdBQVMsRUFBTyxLLGdCQ043QyxJQUFJQSxFQUFVLEVBQVEsT0FDbkJBLEVBQVErckIsYUFBWS9yQixFQUFVQSxFQUFRaXNCLFNBQ25CLGlCQUFaanNCLElBQXNCQSxFQUFVLENBQUMsQ0FBQzZyQixFQUFPMXNCLEdBQUlhLEVBQVMsTUFDN0RBLEVBQVF5MEgsU0FBUTVvRyxFQUFPQyxRQUFVOXJCLEVBQVF5MEgsU0FHL0IzMEgsRUFESCxZQUNPLFdBQVlFLEdBQVMsRUFBTyxLLGdCQ043QyxJQUFJQSxFQUFVLEVBQVEsT0FDbkJBLEVBQVErckIsYUFBWS9yQixFQUFVQSxFQUFRaXNCLFNBQ25CLGlCQUFaanNCLElBQXNCQSxFQUFVLENBQUMsQ0FBQzZyQixFQUFPMXNCLEdBQUlhLEVBQVMsTUFDN0RBLEVBQVF5MEgsU0FBUTVvRyxFQUFPQyxRQUFVOXJCLEVBQVF5MEgsU0FHL0IzMEgsRUFESCxZQUNPLFdBQVlFLEdBQVMsRUFBTyxLLGdCQ043QyxJQUFJQSxFQUFVLEVBQVEsT0FDbkJBLEVBQVErckIsYUFBWS9yQixFQUFVQSxFQUFRaXNCLFNBQ25CLGlCQUFaanNCLElBQXNCQSxFQUFVLENBQUMsQ0FBQzZyQixFQUFPMXNCLEdBQUlhLEVBQVMsTUFDN0RBLEVBQVF5MEgsU0FBUTVvRyxFQUFPQyxRQUFVOXJCLEVBQVF5MEgsU0FHL0IzMEgsRUFESCxZQUNPLFdBQVlFLEdBQVMsRUFBTyxLLGdCQ043QyxJQUFJQSxFQUFVLEVBQVEsT0FDbkJBLEVBQVErckIsYUFBWS9yQixFQUFVQSxFQUFRaXNCLFNBQ25CLGlCQUFaanNCLElBQXNCQSxFQUFVLENBQUMsQ0FBQzZyQixFQUFPMXNCLEdBQUlhLEVBQVMsTUFDN0RBLEVBQVF5MEgsU0FBUTVvRyxFQUFPQyxRQUFVOXJCLEVBQVF5MEgsU0FHL0IzMEgsRUFESCxZQUNPLFdBQVlFLEdBQVMsRUFBTyxLLDZCQ0w5QixTQUFTMDBILEVBQWNDLEVBQVVobkYsR0FHOUMsSUFGQSxJQUFJeXVDLEVBQVMsR0FDVHc0QyxFQUFZLEdBQ1AxL0gsRUFBSSxFQUFHQSxFQUFJeTRDLEVBQUtuK0MsT0FBUTBGLElBQUssQ0FDcEMsSUFBSXRCLEVBQU8rNUMsRUFBS3o0QyxHQUNaaUssRUFBS3ZMLEVBQUssR0FJVit1SCxFQUFPLENBQ1R4akgsR0FBSXcxSCxFQUFXLElBQU16L0gsRUFDckIyNkcsSUFMUWo4RyxFQUFLLEdBTWJpaEksTUFMVWpoSSxFQUFLLEdBTWZraEksVUFMY2xoSSxFQUFLLElBT2hCZ2hJLEVBQVV6MUgsR0FHYnkxSCxFQUFVejFILEdBQUlzakgsTUFBTTF5SCxLQUFLNHlILEdBRnpCdm1DLEVBQU9yc0YsS0FBSzZrSSxFQUFVejFILEdBQU0sQ0FBRUEsR0FBSUEsRUFBSXNqSCxNQUFPLENBQUNFLEtBS2xELE9BQU92bUMsRSxpQkNqQlQsSUFBSTI0QyxFQUFrQyxvQkFBYjUzSCxTQUV6QixHQUFxQixvQkFBVjgxQixPQUF5QkEsUUFDN0I4aEcsRUFDSCxNQUFNLElBQUlqbEcsTUFDViwySkFrQkosSUFBSWtsRyxFQUFjLEdBUWRueUYsRUFBT2t5RixJQUFnQjUzSCxTQUFTMGxDLE1BQVExbEMsU0FBUzgzSCxxQkFBcUIsUUFBUSxJQUM5RUMsRUFBbUIsS0FDbkJDLEVBQW1CLEVBQ25CQyxHQUFlLEVBQ2YvNkQsRUFBTyxhQUNQcmtFLEVBQVUsS0FDVnEvSCxFQUFXLGtCQUlYQyxFQUErQixvQkFBZGh5RixXQUE2QixlQUFleFEsS0FBS3dRLFVBQVV5RixVQUFVOWYsZUFFM0UsU0FBU3NzRyxFQUFpQlosRUFBVWhuRixFQUFNNm5GLEVBQWV2M0MsR0FDdEVtM0MsRUFBZUksRUFFZngvSCxFQUFVaW9GLEdBQVksR0FFdEIsSUFBSTdCLEVBQVNzNEMsRUFBYUMsRUFBVWhuRixHQUdwQyxPQUZBOG5GLEVBQWVyNUMsR0FFUixTQUFpQnM1QyxHQUV0QixJQURBLElBQUlDLEVBQVksR0FDUHpnSSxFQUFJLEVBQUdBLEVBQUlrbkYsRUFBTzVzRixPQUFRMEYsSUFBSyxDQUN0QyxJQUFJdEIsRUFBT3dvRixFQUFPbG5GLElBQ2QwZ0ksRUFBV1osRUFBWXBoSSxFQUFLdUwsS0FDdkIwMkgsT0FDVEYsRUFBVTVsSSxLQUFLNmxJLEdBUWpCLElBTklGLEVBRUZELEVBREFyNUMsRUFBU3M0QyxFQUFhQyxFQUFVZSxJQUdoQ3Q1QyxFQUFTLEdBRUZsbkYsRUFBSSxFQUFHQSxFQUFJeWdJLEVBQVVubUksT0FBUTBGLElBQUssQ0FDekMsSUFBSTBnSSxFQUNKLEdBQXNCLEtBRGxCQSxFQUFXRCxFQUFVemdJLElBQ1oyZ0ksS0FBWSxDQUN2QixJQUFLLElBQUk5bUcsRUFBSSxFQUFHQSxFQUFJNm1HLEVBQVNuVCxNQUFNanpILE9BQVF1L0IsSUFDekM2bUcsRUFBU25ULE1BQU0xekYsWUFFVmltRyxFQUFZWSxFQUFTejJILE9BTXBDLFNBQVNzMkgsRUFBZ0JyNUMsR0FDdkIsSUFBSyxJQUFJbG5GLEVBQUksRUFBR0EsRUFBSWtuRixFQUFPNXNGLE9BQVEwRixJQUFLLENBQ3RDLElBQUl0QixFQUFPd29GLEVBQU9sbkYsR0FDZDBnSSxFQUFXWixFQUFZcGhJLEVBQUt1TCxJQUNoQyxHQUFJeTJILEVBQVUsQ0FDWkEsRUFBU0MsT0FDVCxJQUFLLElBQUk5bUcsRUFBSSxFQUFHQSxFQUFJNm1HLEVBQVNuVCxNQUFNanpILE9BQVF1L0IsSUFDekM2bUcsRUFBU25ULE1BQU0xekYsR0FBR243QixFQUFLNnVILE1BQU0xekYsSUFFL0IsS0FBT0EsRUFBSW43QixFQUFLNnVILE1BQU1qekgsT0FBUXUvQixJQUM1QjZtRyxFQUFTblQsTUFBTTF5SCxLQUFLK2xJLEVBQVNsaUksRUFBSzZ1SCxNQUFNMXpGLEtBRXRDNm1HLEVBQVNuVCxNQUFNanpILE9BQVNvRSxFQUFLNnVILE1BQU1qekgsU0FDckNvbUksRUFBU25ULE1BQU1qekgsT0FBU29FLEVBQUs2dUgsTUFBTWp6SCxZQUVoQyxDQUNMLElBQUlpekgsRUFBUSxHQUNaLElBQVMxekYsRUFBSSxFQUFHQSxFQUFJbjdCLEVBQUs2dUgsTUFBTWp6SCxPQUFRdS9CLElBQ3JDMHpGLEVBQU0xeUgsS0FBSytsSSxFQUFTbGlJLEVBQUs2dUgsTUFBTTF6RixLQUVqQ2ltRyxFQUFZcGhJLEVBQUt1TCxJQUFNLENBQUVBLEdBQUl2TCxFQUFLdUwsR0FBSTAySCxLQUFNLEVBQUdwVCxNQUFPQSxLQUs1RCxTQUFTc1QsSUFDUCxJQUFJQyxFQUFlNzRILFNBQVN5QyxjQUFjLFNBRzFDLE9BRkFvMkgsRUFBYXRuSSxLQUFPLFdBQ3BCbTBDLEVBQUtsaUMsWUFBWXExSCxHQUNWQSxFQUdULFNBQVNGLEVBQVUxZ0ksR0FDakIsSUFBSWsyQixFQUFRcHpCLEVBQ1I4OUgsRUFBZTc0SCxTQUFTK0QsY0FBYyxTQUFXbTBILEVBQVcsTUFBUWpnSSxFQUFJK0osR0FBSyxNQUVqRixHQUFJNjJILEVBQWMsQ0FDaEIsR0FBSVosRUFHRixPQUFPLzZELEVBT1AyN0QsRUFBYTF0SCxXQUFXcWdDLFlBQVlxdEYsR0FJeEMsR0FBSVYsRUFBUyxDQUVYLElBQUlXLEVBQWFkLElBQ2pCYSxFQUFlZCxJQUFxQkEsRUFBbUJhLEtBQ3ZEenFHLEVBQVM0cUcsRUFBb0IxaEksS0FBSyxLQUFNd2hJLEVBQWNDLEdBQVksR0FDbEUvOUgsRUFBU2crSCxFQUFvQjFoSSxLQUFLLEtBQU13aEksRUFBY0MsR0FBWSxRQUdsRUQsRUFBZUQsSUFDZnpxRyxFQUFTNnFHLEVBQVczaEksS0FBSyxLQUFNd2hJLEdBQy9COTlILEVBQVMsV0FDUDg5SCxFQUFhMXRILFdBQVdxZ0MsWUFBWXF0RixJQU14QyxPQUZBMXFHLEVBQU9sMkIsR0FFQSxTQUFzQmdoSSxHQUMzQixHQUFJQSxFQUFRLENBQ1YsR0FBSUEsRUFBT3ZtQixNQUFRejZHLEVBQUl5NkcsS0FDbkJ1bUIsRUFBT3ZCLFFBQVV6L0gsRUFBSXkvSCxPQUNyQnVCLEVBQU90QixZQUFjMS9ILEVBQUkwL0gsVUFDM0IsT0FFRnhwRyxFQUFPbDJCLEVBQU1naEksUUFFYmwrSCxLQUtOLElBQ01tK0gsRUFERkMsR0FDRUQsRUFBWSxHQUVULFNBQVVub0gsRUFBT3FvSCxHQUV0QixPQURBRixFQUFVbm9ILEdBQVNxb0gsRUFDWkYsRUFBVW5yRyxPQUFPMjJGLFNBQVM1eEgsS0FBSyxRQUkxQyxTQUFTaW1JLEVBQXFCRixFQUFjOW5ILEVBQU9oVyxFQUFROUMsR0FDekQsSUFBSXk2RyxFQUFNMzNHLEVBQVMsR0FBSzlDLEVBQUl5NkcsSUFFNUIsR0FBSW1tQixFQUFhUSxXQUNmUixFQUFhUSxXQUFXQyxRQUFVSCxFQUFZcG9ILEVBQU8yaEcsT0FDaEQsQ0FDTCxJQUFJNm1CLEVBQVV2NUgsU0FBUzRNLGVBQWU4bEcsR0FDbENubEcsRUFBYXNySCxFQUFhdHJILFdBQzFCQSxFQUFXd0QsSUFBUThuSCxFQUFhcnRGLFlBQVlqK0IsRUFBV3dELElBQ3ZEeEQsRUFBV2xiLE9BQ2J3bUksRUFBYWxzSCxhQUFhNHNILEVBQVNoc0gsRUFBV3dELElBRTlDOG5ILEVBQWFyMUgsWUFBWSsxSCxJQUsvQixTQUFTUCxFQUFZSCxFQUFjNWdJLEdBQ2pDLElBQUl5NkcsRUFBTXo2RyxFQUFJeTZHLElBQ1ZnbEIsRUFBUXovSCxFQUFJeS9ILE1BQ1pDLEVBQVkxL0gsRUFBSTAvSCxVQWlCcEIsR0FmSUQsR0FDRm1CLEVBQWE1MUgsYUFBYSxRQUFTeTBILEdBRWpDNytILEVBQVEyZ0ksT0FDVlgsRUFBYTUxSCxhQUFhaTFILEVBQVVqZ0ksRUFBSStKLElBR3RDMjFILElBR0ZqbEIsR0FBTyxtQkFBcUJpbEIsRUFBVTdsRixRQUFRLEdBQUssTUFFbkQ0Z0UsR0FBTyx1REFBeURuaEUsS0FBS0UsU0FBU0MsbUJBQW1CeGlDLEtBQUt5aUMsVUFBVWdtRixNQUFnQixPQUc5SGtCLEVBQWFRLFdBQ2ZSLEVBQWFRLFdBQVdDLFFBQVU1bUIsTUFDN0IsQ0FDTCxLQUFPbW1CLEVBQWFuc0gsWUFDbEJtc0gsRUFBYXJ0RixZQUFZcXRGLEVBQWFuc0gsWUFFeENtc0gsRUFBYXIxSCxZQUFZeEQsU0FBUzRNLGVBQWU4bEcsTyxnQkMxTm5EaGtGLEVBQU9DLFFBQVUsRUFBakIsUSw2QkNJVyxJQUFJcjNCLEVBQUVYLE9BQU84aUksT0FBTyxJQUFJLFNBQVMvOEYsRUFBRXBsQyxHQUFHLE9BQU8sTUFBTUEsRUFBRSxTQUFTaTZCLEVBQUVqNkIsR0FBRyxPQUFPLE1BQU1BLEVBQUUsU0FBU3U2QixFQUFFdjZCLEdBQUcsT0FBTSxJQUFLQSxFQUFFLFNBQVNTLEVBQUVULEdBQUcsTUFBTSxpQkFBaUJBLEdBQUcsaUJBQWlCQSxHQUFHLGlCQUFpQkEsR0FBRyxrQkFBa0JBLEVBQUUsU0FBUzQ1QyxFQUFFNTVDLEdBQUcsT0FBTyxPQUFPQSxHQUFHLGlCQUFpQkEsRUFBRSxJQUFJbTZCLEVBQUU5NkIsT0FBT0MsVUFBVThCLFNBQVMsU0FBU2c1QixFQUFFcDZCLEdBQUcsTUFBTSxvQkFBb0JtNkIsRUFBRTM2QixLQUFLUSxHQUFHLFNBQVM4NkIsRUFBRTk2QixHQUFHLElBQUlvbEMsRUFBRThnQixXQUFXNXFCLE9BQU90N0IsSUFBSSxPQUFPb2xDLEdBQUcsR0FBRzUwQixLQUFLK29CLE1BQU02TCxLQUFLQSxHQUFHWCxTQUFTemtDLEdBQUcsU0FBU29pSSxFQUFFcGlJLEdBQUcsT0FBT2k2QixFQUFFajZCLElBQUksbUJBQW1CQSxFQUFFbUosTUFBTSxtQkFBbUJuSixFQUFFcUosTUFBTSxTQUFTNHhCLEVBQUVqN0IsR0FBRyxPQUFPLE1BQU1BLEVBQUUsR0FBR29ILE1BQU1wRyxRQUFRaEIsSUFBSW82QixFQUFFcDZCLElBQUlBLEVBQUVvQixXQUFXKzRCLEVBQUV2aUIsS0FBS3lpQyxVQUFVcjZDLEVBQUUsS0FBSyxHQUFHczdCLE9BQU90N0IsR0FBRyxTQUFTa3BDLEVBQUVscEMsR0FBRyxJQUFJb2xDLEVBQUU4Z0IsV0FBV2xtRCxHQUFHLE9BQU93bUIsTUFBTTRlLEdBQUdwbEMsRUFBRW9sQyxFQUFFLFNBQVNsRixFQUFFbGdDLEVBQUVvbEMsR0FBRyxJQUFJLElBQUluTCxFQUFFNTZCLE9BQU9vb0MsT0FBTyxNQUFNbE4sRUFBRXY2QixFQUFFd0csTUFBTSxLQUFLL0YsRUFBRSxFQUFFQSxFQUFFODVCLEVBQUV4L0IsT0FBTzBGLElBQUl3NUIsRUFBRU0sRUFBRTk1QixLQUFJLEVBQUcsT0FBTzJrQyxFQUFFLFNBQVNwbEMsR0FBRyxPQUFPaTZCLEVBQUVqNkIsRUFBRXcwQixnQkFBZ0IsU0FBU3gwQixHQUFHLE9BQU9pNkIsRUFBRWo2QixJQUFJLElBQUltL0IsRUFBRWUsRUFBRSxrQkFBaUIsR0FBSWxDLEVBQUVrQyxFQUFFLDhCQUE4QixTQUFTaWYsRUFBRW4vQyxFQUFFb2xDLEdBQUcsR0FBR3BsQyxFQUFFakYsT0FBTyxDQUFDLElBQUlrL0IsRUFBRWo2QixFQUFFbTNCLFFBQVFpTyxHQUFHLEdBQUduTCxHQUFHLEVBQUUsT0FBT2o2QixFQUFFa2hDLE9BQU9qSCxFQUFFLElBQUksSUFBSThFLEVBQUUxL0IsT0FBT0MsVUFBVUMsZUFBZSxTQUFTbzdCLEVBQUUzNkIsRUFBRW9sQyxHQUFHLE9BQU9yRyxFQUFFdi9CLEtBQUtRLEVBQUVvbEMsR0FBRyxTQUFTOFosRUFBRWwvQyxHQUFHLElBQUlvbEMsRUFBRS9sQyxPQUFPb29DLE9BQU8sTUFBTSxPQUFPLFNBQVN4TixHQUFHLE9BQU9tTCxFQUFFbkwsS0FBS21MLEVBQUVuTCxHQUFHajZCLEVBQUVpNkIsS0FBSyxJQUFJbDVCLEVBQUUsU0FBUzY1QixFQUFFc2tCLEdBQUUsU0FBU2wvQyxHQUFHLE9BQU9BLEVBQUVoRCxRQUFRK0QsR0FBRSxTQUFTZixFQUFFb2xDLEdBQUcsT0FBT0EsRUFBRUEsRUFBRTNHLGNBQWMsU0FBT2xrQyxFQUFFMmtELEdBQUUsU0FBU2wvQyxHQUFHLE9BQU9BLEVBQUUwN0IsT0FBTyxHQUFHK0MsY0FBY3orQixFQUFFaUIsTUFBTSxNQUFLODZDLEVBQUUsYUFBYTFSLEVBQUU2VSxHQUFFLFNBQVNsL0MsR0FBRyxPQUFPQSxFQUFFaEQsUUFBUSsrQyxFQUFFLE9BQU92bkIsaUJBQW9Ca0csRUFBRTRQLFNBQVNockMsVUFBVVMsS0FBSyxTQUFTQyxFQUFFb2xDLEdBQUcsT0FBT3BsQyxFQUFFRCxLQUFLcWxDLElBQUksU0FBU3BsQyxFQUFFb2xDLEdBQUcsU0FBU25MLEVBQUVBLEdBQUcsSUFBSU0sRUFBRTNDLFVBQVU3OEIsT0FBTyxPQUFPdy9CLEVBQUVBLEVBQUUsRUFBRXY2QixFQUFFMjNCLE1BQU15TixFQUFFeE4sV0FBVzUzQixFQUFFUixLQUFLNGxDLEVBQUVuTCxHQUFHajZCLEVBQUVSLEtBQUs0bEMsR0FBRyxPQUFPbkwsRUFBRW9vRyxRQUFRcmlJLEVBQUVqRixPQUFPay9CLEdBQUcsU0FBU2UsRUFBRWg3QixFQUFFb2xDLEdBQUdBLEVBQUVBLEdBQUcsRUFBRSxJQUFJLElBQUluTCxFQUFFajZCLEVBQUVqRixPQUFPcXFDLEVBQUU3SyxFQUFFLElBQUluekIsTUFBTTZ5QixHQUFHQSxLQUFLTSxFQUFFTixHQUFHajZCLEVBQUVpNkIsRUFBRW1MLEdBQUcsT0FBTzdLLEVBQUUsU0FBU3VWLEVBQUU5dkMsRUFBRW9sQyxHQUFHLElBQUksSUFBSW5MLEtBQUttTCxFQUFFcGxDLEVBQUVpNkIsR0FBR21MLEVBQUVuTCxHQUFHLE9BQU9qNkIsRUFBRSxTQUFTcW9DLEVBQUVyb0MsR0FBRyxJQUFJLElBQUlvbEMsRUFBRSxHQUFHbkwsRUFBRSxFQUFFQSxFQUFFajZCLEVBQUVqRixPQUFPay9CLElBQUlqNkIsRUFBRWk2QixJQUFJNlYsRUFBRTFLLEVBQUVwbEMsRUFBRWk2QixJQUFJLE9BQU9tTCxFQUFFLFNBQVMyRSxFQUFFL3BDLEVBQUVvbEMsRUFBRW5MLElBQUksSUFBSXdPLEVBQUUsU0FBU3pvQyxFQUFFb2xDLEVBQUVuTCxHQUFHLE9BQU0sR0FBSXFvRyxFQUFFLFNBQVN0aUksR0FBRyxPQUFPQSxHQUFHLFNBQVN1aUksRUFBRXZpSSxFQUFFb2xDLEdBQUcsR0FBR3BsQyxJQUFJb2xDLEVBQUUsT0FBTSxFQUFHLElBQUluTCxFQUFFMmYsRUFBRTU1QyxHQUFHdTZCLEVBQUVxZixFQUFFeFUsR0FBRyxJQUFJbkwsSUFBSU0sRUFBRSxPQUFPTixJQUFJTSxHQUFHZSxPQUFPdDdCLEtBQUtzN0IsT0FBTzhKLEdBQUcsSUFBSSxJQUFJM2tDLEVBQUUyRyxNQUFNcEcsUUFBUWhCLEdBQUdtNkIsRUFBRS95QixNQUFNcEcsUUFBUW9rQyxHQUFHLEdBQUcza0MsR0FBRzA1QixFQUFFLE9BQU9uNkIsRUFBRWpGLFNBQVNxcUMsRUFBRXJxQyxRQUFRaUYsRUFBRTQwRSxPQUFNLFNBQVM1MEUsRUFBRWk2QixHQUFHLE9BQU9zb0csRUFBRXZpSSxFQUFFb2xDLEVBQUVuTCxPQUFNLEdBQUdqNkIsYUFBYWdzRCxNQUFNNW1CLGFBQWE0bUIsS0FBSyxPQUFPaHNELEVBQUVtbUYsWUFBWS9nRCxFQUFFK2dELFVBQVUsR0FBRzFsRixHQUFHMDVCLEVBQUUsT0FBTSxFQUFHLElBQUlDLEVBQUUvNkIsT0FBT3VCLEtBQUtaLEdBQUc4NkIsRUFBRXo3QixPQUFPdUIsS0FBS3drQyxHQUFHLE9BQU9oTCxFQUFFci9CLFNBQVMrL0IsRUFBRS8vQixRQUFRcS9CLEVBQUV3NkMsT0FBTSxTQUFTMzZDLEdBQUcsT0FBT3NvRyxFQUFFdmlJLEVBQUVpNkIsR0FBR21MLEVBQUVuTCxPQUFNLE1BQU1qNkIsR0FBRyxPQUFNLEdBQUksU0FBU3M2QixFQUFFdDZCLEVBQUVvbEMsR0FBRyxJQUFJLElBQUluTCxFQUFFLEVBQUVBLEVBQUVqNkIsRUFBRWpGLE9BQU9rL0IsSUFBSSxHQUFHc29HLEVBQUV2aUksRUFBRWk2QixHQUFHbUwsR0FBRyxPQUFPbkwsRUFBRSxPQUFPLEVBQUUsU0FBU3VOLEVBQUV4bkMsR0FBRyxJQUFJb2xDLEdBQUUsRUFBRyxPQUFPLFdBQVdBLElBQUlBLEdBQUUsRUFBR3BsQyxFQUFFMjNCLE1BQU0zOEIsS0FBSzQ4QixhQUFhLElBQUk0cUcsRUFBRSx1QkFBdUJDLEVBQUUsQ0FBQyxZQUFZLFlBQVksVUFBVUMsRUFBRSxDQUFDLGVBQWUsVUFBVSxjQUFjLFVBQVUsZUFBZSxVQUFVLGdCQUFnQixZQUFZLFlBQVksY0FBYyxnQkFBZ0Isa0JBQWtCLzRGLEVBQUUsQ0FBQ3VtRixzQkFBc0I3d0gsT0FBT29vQyxPQUFPLE1BQU1xNUUsUUFBTyxFQUFHNmhCLGVBQWMsRUFBR0MsVUFBUyxFQUFHQyxhQUFZLEVBQUdDLGFBQWEsS0FBS0MsWUFBWSxLQUFLQyxnQkFBZ0IsR0FBR0MsU0FBUzVqSSxPQUFPb29DLE9BQU8sTUFBTXk3RixjQUFjejZGLEVBQUUwNkYsZUFBZTE2RixFQUFFMjZGLGlCQUFpQjM2RixFQUFFNDZGLGdCQUFnQnQ1RixFQUFFdTVGLHFCQUFxQmhCLEVBQUVpQixZQUFZOTZGLEVBQUV1bkUsT0FBTSxFQUFHd3pCLGdCQUFnQmQsR0FBR2ptRyxFQUFFLDhKQUE4SixTQUFTK04sRUFBRXhxQyxFQUFFb2xDLEVBQUVuTCxFQUFFTSxHQUFHbDdCLE9BQU91b0MsZUFBZTVuQyxFQUFFb2xDLEVBQUUsQ0FBQzFtQyxNQUFNdTdCLEVBQUV2QixhQUFhNkIsRUFBRTNCLFVBQVMsRUFBR0QsY0FBYSxJQUFLLElBQThDK1AsRUFBMUMrNkYsRUFBRSxJQUFJNXdILE9BQU8sS0FBSzRwQixFQUFFbDZCLE9BQU8sV0FBaUJrb0MsRUFBRSxhQUFhLEdBQUdwUSxFQUFFLG9CQUFvQi8vQixPQUFPb3BJLEVBQUUsb0JBQW9CQyxpQkFBaUJBLGNBQWMxdkMsU0FBU2prRCxFQUFFMHpGLEdBQUdDLGNBQWMxdkMsU0FBU3ovRCxjQUFjb3ZHLEVBQUV2cEcsR0FBRy8vQixPQUFPdTBDLFVBQVV5RixVQUFVOWYsY0FBY29PLEVBQUVnaEcsR0FBRyxlQUFldmxHLEtBQUt1bEcsR0FBR3o1RixFQUFFeTVGLEdBQUdBLEVBQUV6c0csUUFBUSxZQUFZLEVBQUUwc0csRUFBRUQsR0FBR0EsRUFBRXpzRyxRQUFRLFNBQVMsRUFBRTBTLEdBQUcrNUYsR0FBR0EsRUFBRXpzRyxRQUFRLFdBQVd5c0csR0FBRyx1QkFBdUJ2bEcsS0FBS3VsRyxJQUFJLFFBQVE1ekYsR0FBRzh6RixJQUFHRixHQUFHLGNBQWN2bEcsS0FBS3VsRyxHQUFHQSxHQUFHLFlBQVl2bEcsS0FBS3VsRyxHQUFHQSxHQUFHQSxFQUFFcnNILE1BQU0sbUJBQW1Cd3NILEdBQUUsR0FBRzE5SCxNQUFNMjlILElBQUUsRUFBRyxHQUFHM3BHLEVBQUUsSUFBSSxJQUFJd2pELEdBQUcsR0FBR3grRSxPQUFPdW9DLGVBQWVpMkMsR0FBRyxVQUFVLENBQUNsNEUsSUFBSSxXQUFXcStILElBQUUsS0FBTTFwSSxPQUFPZ1MsaUJBQWlCLGVBQWUsS0FBS3V4RSxJQUFJLE1BQU03OUUsSUFBSSxJQUFJaTNILEdBQUcsV0FBVyxZQUFPLElBQVN2dUYsSUFBSUEsR0FBR3JPLElBQUlxcEcsUUFBRyxJQUFvQixFQUFBeGtGLEdBQVMsRUFBQUEsRUFBT2pSLFNBQVMsV0FBVyxFQUFBaVIsRUFBT2pSLFFBQVE4dkMsSUFBSWttRCxTQUFVdjdGLEdBQUc3SixHQUFHeEUsR0FBRy8vQixPQUFPNHBJLDZCQUE2QixTQUFTQyxHQUFHbmtJLEdBQUcsTUFBTSxtQkFBbUJBLEdBQUcsY0FBY3ErQixLQUFLcitCLEVBQUVvQixZQUFZLElBQUlnakksR0FBR0MsR0FBRyxvQkFBb0J0MEYsUUFBUW8wRixHQUFHcDBGLFNBQVMsb0JBQW9CNEssU0FBU3dwRixHQUFHeHBGLFFBQVFHLFNBQVNzcEYsR0FBRyxvQkFBb0J6MUUsS0FBS3cxRSxHQUFHeDFFLEtBQUtBLElBQUksV0FBVyxTQUFTM3VELElBQUloRixLQUFLZ0wsSUFBSTNHLE9BQU9vb0MsT0FBTyxNQUFNLE9BQU96bkMsRUFBRVYsVUFBVWlxQyxJQUFJLFNBQVN2cEMsR0FBRyxPQUFNLElBQUtoRixLQUFLZ0wsSUFBSWhHLElBQUlBLEVBQUVWLFVBQVUrTCxJQUFJLFNBQVNyTCxHQUFHaEYsS0FBS2dMLElBQUloRyxJQUFHLEdBQUlBLEVBQUVWLFVBQVU4MEMsTUFBTSxXQUFXcDVDLEtBQUtnTCxJQUFJM0csT0FBT29vQyxPQUFPLE9BQU96bkMsRUFBdk4sR0FBNE4sSUFBSXNrSSxHQUFHdjZGLEVBQUV3NkYsR0FBRyxFQUFFQyxHQUFHLFdBQVd4cEksS0FBSzBQLEdBQUc2NUgsS0FBS3ZwSSxLQUFLeXBJLEtBQUssSUFBSUQsR0FBR2xsSSxVQUFVb2xJLE9BQU8sU0FBUzFrSSxHQUFHaEYsS0FBS3lwSSxLQUFLbnBJLEtBQUswRSxJQUFJd2tJLEdBQUdsbEksVUFBVXFsSSxVQUFVLFNBQVMza0ksR0FBR20vQyxFQUFFbmtELEtBQUt5cEksS0FBS3prSSxJQUFJd2tJLEdBQUdsbEksVUFBVXNsSSxPQUFPLFdBQVdKLEdBQUdoaEksUUFBUWdoSSxHQUFHaGhJLE9BQU9xaEksT0FBTzdwSSxPQUFPd3BJLEdBQUdsbEksVUFBVWd2QyxPQUFPLFdBQVcsSUFBSSxJQUFJdHVDLEVBQUVoRixLQUFLeXBJLEtBQUt4akksUUFBUW1rQyxFQUFFLEVBQUVuTCxFQUFFajZCLEVBQUVqRixPQUFPcXFDLEVBQUVuTCxFQUFFbUwsSUFBSXBsQyxFQUFFb2xDLEdBQUd2TyxVQUFVMnRHLEdBQUdoaEksT0FBTyxLQUFLLElBQUlzaEksR0FBRyxHQUFHLFNBQVNDLEdBQUcva0ksR0FBRzhrSSxHQUFHeHBJLEtBQUswRSxHQUFHd2tJLEdBQUdoaEksT0FBT3hELEVBQUUsU0FBU2dsSSxLQUFLRixHQUFHN2xHLE1BQU11bEcsR0FBR2hoSSxPQUFPc2hJLEdBQUdBLEdBQUcvcEksT0FBTyxHQUFHLElBQUlrcUksR0FBRyxTQUFTamxJLEVBQUVvbEMsRUFBRW5MLEVBQUVNLEVBQUU5NUIsRUFBRW01QyxFQUFFemYsRUFBRUMsR0FBR3AvQixLQUFLaTNDLElBQUlqeUMsRUFBRWhGLEtBQUtVLEtBQUswcEMsRUFBRXBxQyxLQUFLMFosU0FBU3VsQixFQUFFai9CLEtBQUsyQyxLQUFLNDhCLEVBQUV2L0IsS0FBS2txSSxJQUFJemtJLEVBQUV6RixLQUFLbXFJLFFBQUcsRUFBT25xSSxLQUFLb2lELFFBQVF4RCxFQUFFNStDLEtBQUtvcUksZUFBVSxFQUFPcHFJLEtBQUtxcUksZUFBVSxFQUFPcnFJLEtBQUtzcUksZUFBVSxFQUFPdHFJLEtBQUtrRyxJQUFJa2tDLEdBQUdBLEVBQUVsa0MsSUFBSWxHLEtBQUt1cUksaUJBQWlCcHJHLEVBQUVuL0IsS0FBS3dxSSx1QkFBa0IsRUFBT3hxSSxLQUFLd3pDLFlBQU8sRUFBT3h6QyxLQUFLeXFJLEtBQUksRUFBR3pxSSxLQUFLMHFJLFVBQVMsRUFBRzFxSSxLQUFLMnFJLGNBQWEsRUFBRzNxSSxLQUFLNHFJLFdBQVUsRUFBRzVxSSxLQUFLNnFJLFVBQVMsRUFBRzdxSSxLQUFLOHFJLFFBQU8sRUFBRzlxSSxLQUFLK3FJLGFBQWEzckcsRUFBRXAvQixLQUFLZ3JJLGVBQVUsRUFBT2hySSxLQUFLaXJJLG9CQUFtQixHQUFJQyxHQUFHLENBQUMxcUQsTUFBTSxDQUFDN2lELGNBQWEsSUFBS3V0RyxHQUFHMXFELE1BQU03MUUsSUFBSSxXQUFXLE9BQU8zSyxLQUFLd3FJLG1CQUFtQm5tSSxPQUFPazVCLGlCQUFpQjBzRyxHQUFHM2xJLFVBQVU0bUksSUFBSSxJQUFJQyxHQUFHLFNBQVNubUksUUFBRyxJQUFTQSxJQUFJQSxFQUFFLElBQUksSUFBSW9sQyxFQUFFLElBQUk2L0YsR0FBRyxPQUFPNy9GLEVBQUV6bkMsS0FBS3FDLEVBQUVvbEMsRUFBRXdnRyxXQUFVLEVBQUd4Z0csR0FBRyxTQUFTZ2hHLEdBQUdwbUksR0FBRyxPQUFPLElBQUlpbEksUUFBRyxPQUFPLE9BQU8sRUFBTzNwRyxPQUFPdDdCLElBQUksU0FBU3FtSSxHQUFHcm1JLEdBQUcsSUFBSW9sQyxFQUFFLElBQUk2L0YsR0FBR2psSSxFQUFFaXlDLElBQUlqeUMsRUFBRXRFLEtBQUtzRSxFQUFFMFUsVUFBVTFVLEVBQUUwVSxTQUFTelQsUUFBUWpCLEVBQUVyQyxLQUFLcUMsRUFBRWtsSSxJQUFJbGxJLEVBQUVvOUMsUUFBUXA5QyxFQUFFdWxJLGlCQUFpQnZsSSxFQUFFK2xJLGNBQWMsT0FBTzNnRyxFQUFFKy9GLEdBQUdubEksRUFBRW1sSSxHQUFHLy9GLEVBQUVzZ0csU0FBUzFsSSxFQUFFMGxJLFNBQVN0Z0csRUFBRWxrQyxJQUFJbEIsRUFBRWtCLElBQUlra0MsRUFBRXdnRyxVQUFVNWxJLEVBQUU0bEksVUFBVXhnRyxFQUFFZ2dHLFVBQVVwbEksRUFBRW9sSSxVQUFVaGdHLEVBQUVpZ0csVUFBVXJsSSxFQUFFcWxJLFVBQVVqZ0csRUFBRWtnRyxVQUFVdGxJLEVBQUVzbEksVUFBVWxnRyxFQUFFNGdHLFVBQVVobUksRUFBRWdtSSxVQUFVNWdHLEVBQUV5Z0csVUFBUyxFQUFHemdHLEVBQUUsSUFBSUcsR0FBR24rQixNQUFNOUgsVUFBVWduSSxHQUFHam5JLE9BQU9vb0MsT0FBT2xDLElBQUksQ0FBQyxPQUFPLE1BQU0sUUFBUSxVQUFVLFNBQVMsT0FBTyxXQUFXaGxDLFNBQVEsU0FBU1AsR0FBRyxJQUFJb2xDLEVBQUVHLEdBQUd2bEMsR0FBR3dxQyxFQUFFODdGLEdBQUd0bUksR0FBRSxXQUFXLElBQUksSUFBSWk2QixFQUFFLEdBQUdNLEVBQUUzQyxVQUFVNzhCLE9BQU93L0IsS0FBS04sRUFBRU0sR0FBRzNDLFVBQVUyQyxHQUFHLElBQUk5NUIsRUFBRW01QyxFQUFFeFUsRUFBRXpOLE1BQU0zOEIsS0FBS2kvQixHQUFHRSxFQUFFbi9CLEtBQUt1ckksT0FBTyxPQUFPdm1JLEdBQUcsSUFBSSxPQUFPLElBQUksVUFBVVMsRUFBRXc1QixFQUFFLE1BQU0sSUFBSSxTQUFTeDVCLEVBQUV3NUIsRUFBRWg1QixNQUFNLEdBQUcsT0FBT1IsR0FBRzA1QixFQUFFcXNHLGFBQWEvbEksR0FBRzA1QixFQUFFc3NHLElBQUluNEYsU0FBU3NMLFFBQU0sSUFBSUYsR0FBR3I2QyxPQUFPMDdDLG9CQUFvQnVyRixJQUFJSSxJQUFHLEVBQUcsU0FBU3BxQixHQUFHdDhHLEdBQUcwbUksR0FBRzFtSSxFQUFFLElBQUkybUksR0FBRyxTQUFTM21JLEdBQUcsSUFBSW9sQyxFQUFFcHFDLEtBQUswRCxNQUFNc0IsRUFBRWhGLEtBQUt5ckksSUFBSSxJQUFJakMsR0FBR3hwSSxLQUFLNHJJLFFBQVEsRUFBRXA4RixFQUFFeHFDLEVBQUUsU0FBU2hGLE1BQU1vTSxNQUFNcEcsUUFBUWhCLElBQUl5cUMsR0FBR3JGLEVBQUVraEcsR0FBR3RtSSxFQUFFMnZHLFVBQVV2cUUsR0FBRyxTQUFTcGxDLEVBQUVvbEMsRUFBRW5MLEdBQUcsSUFBSSxJQUFJTSxFQUFFLEVBQUU5NUIsRUFBRXc1QixFQUFFbC9CLE9BQU93L0IsRUFBRTk1QixFQUFFODVCLElBQUksQ0FBQyxJQUFJcWYsRUFBRTNmLEVBQUVNLEdBQUdpUSxFQUFFeHFDLEVBQUU0NUMsRUFBRXhVLEVBQUV3VSxLQUFuRSxDQUF5RTU1QyxFQUFFc21JLEdBQUc1c0YsSUFBSTErQyxLQUFLd3JJLGFBQWF4bUksSUFBSWhGLEtBQUs2ckksS0FBSzdtSSxJQUFJLFNBQVM4bUksR0FBRzltSSxFQUFFb2xDLEdBQUcsSUFBSW5MLEVBQUUsR0FBRzJmLEVBQUU1NUMsTUFBTUEsYUFBYWlsSSxJQUFJLE9BQU90cUcsRUFBRTM2QixFQUFFLFdBQVdBLEVBQUV1bUksa0JBQWtCSSxHQUFHMXNHLEVBQUVqNkIsRUFBRXVtSSxPQUFPRyxLQUFLelAsT0FBTzd2SCxNQUFNcEcsUUFBUWhCLElBQUlvNkIsRUFBRXA2QixLQUFLWCxPQUFPMG5JLGFBQWEvbUksS0FBS0EsRUFBRWduSSxTQUFTL3NHLEVBQUUsSUFBSTBzRyxHQUFHM21JLElBQUlvbEMsR0FBR25MLEdBQUdBLEVBQUUyc0csVUFBVTNzRyxFQUFFLFNBQVNxTCxHQUFHdGxDLEVBQUVvbEMsRUFBRW5MLEVBQUVNLEVBQUU5NUIsR0FBRyxJQUFJbTVDLEVBQUUsSUFBSTRxRixHQUFHcnFHLEVBQUU5NkIsT0FBTzRuSSx5QkFBeUJqbkksRUFBRW9sQyxHQUFHLElBQUlqTCxJQUFHLElBQUtBLEVBQUV4QixhQUFhLENBQUMsSUFBSXlCLEVBQUVELEdBQUdBLEVBQUV4MEIsSUFBSW0xQixFQUFFWCxHQUFHQSxFQUFFbjBCLElBQUlvMEIsSUFBSVUsR0FBRyxJQUFJbEQsVUFBVTc4QixTQUFTay9CLEVBQUVqNkIsRUFBRW9sQyxJQUFJLElBQUlnOUYsR0FBRzNoSSxHQUFHcW1JLEdBQUc3c0csR0FBRzU2QixPQUFPdW9DLGVBQWU1bkMsRUFBRW9sQyxFQUFFLENBQUMxTSxZQUFXLEVBQUdDLGNBQWEsRUFBR2h6QixJQUFJLFdBQVcsSUFBSXkvQixFQUFFaEwsRUFBRUEsRUFBRTU2QixLQUFLUSxHQUFHaTZCLEVBQUUsT0FBT3VxRyxHQUFHaGhJLFNBQVNvMkMsRUFBRWdyRixTQUFTeEMsSUFBSUEsRUFBRXFFLElBQUk3QixTQUFTeDlILE1BQU1wRyxRQUFRb2tDLElBQUksU0FBU3BsQyxFQUFFb2xDLEdBQUcsSUFBSSxJQUFJbkwsT0FBRSxFQUFPTSxFQUFFLEVBQUU5NUIsRUFBRTJrQyxFQUFFcnFDLE9BQU93L0IsRUFBRTk1QixFQUFFODVCLEtBQUtOLEVBQUVtTCxFQUFFN0ssS0FBS04sRUFBRXNzRyxRQUFRdHNHLEVBQUVzc0csT0FBT0UsSUFBSTdCLFNBQVN4OUgsTUFBTXBHLFFBQVFpNUIsSUFBSWo2QixFQUFFaTZCLEdBQXBILENBQXdIbUwsS0FBS0EsR0FBR3AvQixJQUFJLFNBQVNvL0IsR0FBRyxJQUFJN0ssRUFBRUgsRUFBRUEsRUFBRTU2QixLQUFLUSxHQUFHaTZCLEVBQUVtTCxJQUFJN0ssR0FBRzZLLEdBQUdBLEdBQUc3SyxHQUFHQSxHQUFHSCxJQUFJVSxJQUFJQSxFQUFFQSxFQUFFdDdCLEtBQUtRLEVBQUVvbEMsR0FBR25MLEVBQUVtTCxFQUFFZzlGLEdBQUczaEksR0FBR3FtSSxHQUFHMWhHLEdBQUd3VSxFQUFFdEwsY0FBYyxTQUFTNDRGLEdBQUdsbkksRUFBRW9sQyxFQUFFbkwsR0FBRyxHQUFHN3lCLE1BQU1wRyxRQUFRaEIsSUFBSTg2QixFQUFFc0ssR0FBRyxPQUFPcGxDLEVBQUVqRixPQUFPeVYsS0FBSzRxQixJQUFJcDdCLEVBQUVqRixPQUFPcXFDLEdBQUdwbEMsRUFBRWtoQyxPQUFPa0UsRUFBRSxFQUFFbkwsR0FBR0EsRUFBRSxHQUFHbUwsS0FBS3BsQyxLQUFLb2xDLEtBQUsvbEMsT0FBT0MsV0FBVyxPQUFPVSxFQUFFb2xDLEdBQUduTCxFQUFFQSxFQUFFLElBQUlNLEVBQUV2NkIsRUFBRXVtSSxPQUFPLE9BQU92bUksRUFBRWduSSxRQUFRenNHLEdBQUdBLEVBQUVxc0csUUFBUTNzRyxFQUFFTSxHQUFHK0ssR0FBRy9LLEVBQUU3N0IsTUFBTTBtQyxFQUFFbkwsR0FBR00sRUFBRWtzRyxJQUFJbjRGLFNBQVNyVSxJQUFJajZCLEVBQUVvbEMsR0FBR25MLEVBQUVBLEdBQUcsU0FBU2t0RyxHQUFHbm5JLEVBQUVvbEMsR0FBRyxHQUFHaCtCLE1BQU1wRyxRQUFRaEIsSUFBSTg2QixFQUFFc0ssR0FBR3BsQyxFQUFFa2hDLE9BQU9rRSxFQUFFLE9BQU8sQ0FBQyxJQUFJbkwsRUFBRWo2QixFQUFFdW1JLE9BQU92bUksRUFBRWduSSxRQUFRL3NHLEdBQUdBLEVBQUUyc0csU0FBU2pzRyxFQUFFMzZCLEVBQUVvbEMsWUFBWXBsQyxFQUFFb2xDLEdBQUduTCxHQUFHQSxFQUFFd3NHLElBQUluNEYsV0FBV3E0RixHQUFHcm5JLFVBQVV1bkksS0FBSyxTQUFTN21JLEdBQUcsSUFBSSxJQUFJb2xDLEVBQUUvbEMsT0FBT3VCLEtBQUtaLEdBQUdpNkIsRUFBRSxFQUFFQSxFQUFFbUwsRUFBRXJxQyxPQUFPay9CLElBQUlxTCxHQUFHdGxDLEVBQUVvbEMsRUFBRW5MLEtBQUswc0csR0FBR3JuSSxVQUFVa25JLGFBQWEsU0FBU3htSSxHQUFHLElBQUksSUFBSW9sQyxFQUFFLEVBQUVuTCxFQUFFajZCLEVBQUVqRixPQUFPcXFDLEVBQUVuTCxFQUFFbUwsSUFBSTBoRyxHQUFHOW1JLEVBQUVvbEMsS0FBSyxJQUFJZ2lHLEdBQUd6OUYsRUFBRXVtRixzQkFBc0IsU0FBU21YLEdBQUdybkksRUFBRW9sQyxHQUFHLElBQUlBLEVBQUUsT0FBT3BsQyxFQUFFLElBQUksSUFBSWk2QixFQUFFTSxFQUFFOTVCLEVBQUVtNUMsRUFBRXlxRixHQUFHMXBGLFFBQVFHLFFBQVExVixHQUFHL2xDLE9BQU91QixLQUFLd2tDLEdBQUdqTCxFQUFFLEVBQUVBLEVBQUV5ZixFQUFFNytDLE9BQU9vL0IsSUFBSSxZQUFZRixFQUFFMmYsRUFBRXpmLE1BQU1JLEVBQUV2NkIsRUFBRWk2QixHQUFHeDVCLEVBQUUya0MsRUFBRW5MLEdBQUdVLEVBQUUzNkIsRUFBRWk2QixHQUFHTSxJQUFJOTVCLEdBQUcyNUIsRUFBRUcsSUFBSUgsRUFBRTM1QixJQUFJNG1JLEdBQUc5c0csRUFBRTk1QixHQUFHeW1JLEdBQUdsbkksRUFBRWk2QixFQUFFeDVCLElBQUksT0FBT1QsRUFBRSxTQUFTc25JLEdBQUd0bkksRUFBRW9sQyxFQUFFbkwsR0FBRyxPQUFPQSxFQUFFLFdBQVcsSUFBSU0sRUFBRSxtQkFBbUI2SyxFQUFFQSxFQUFFNWxDLEtBQUt5NkIsRUFBRUEsR0FBR21MLEVBQUUza0MsRUFBRSxtQkFBbUJULEVBQUVBLEVBQUVSLEtBQUt5NkIsRUFBRUEsR0FBR2o2QixFQUFFLE9BQU91NkIsRUFBRThzRyxHQUFHOXNHLEVBQUU5NUIsR0FBR0EsR0FBRzJrQyxFQUFFcGxDLEVBQUUsV0FBVyxPQUFPcW5JLEdBQUcsbUJBQW1CamlHLEVBQUVBLEVBQUU1bEMsS0FBS3hFLEtBQUtBLE1BQU1vcUMsRUFBRSxtQkFBbUJwbEMsRUFBRUEsRUFBRVIsS0FBS3hFLEtBQUtBLE1BQU1nRixJQUFJb2xDLEVBQUVwbEMsRUFBRSxTQUFTdW5JLEdBQUd2bkksRUFBRW9sQyxHQUFHLElBQUluTCxFQUFFbUwsRUFBRXBsQyxFQUFFQSxFQUFFbUIsT0FBT2lrQyxHQUFHaCtCLE1BQU1wRyxRQUFRb2tDLEdBQUdBLEVBQUUsQ0FBQ0EsR0FBR3BsQyxFQUFFLE9BQU9pNkIsRUFBRSxTQUFTajZCLEdBQUcsSUFBSSxJQUFJb2xDLEVBQUUsR0FBR25MLEVBQUUsRUFBRUEsRUFBRWo2QixFQUFFakYsT0FBT2svQixLQUFLLElBQUltTCxFQUFFak8sUUFBUW4zQixFQUFFaTZCLEtBQUttTCxFQUFFOXBDLEtBQUswRSxFQUFFaTZCLElBQUksT0FBT21MLEVBQXRGLENBQXlGbkwsR0FBR0EsRUFBRSxTQUFTdXRHLEdBQUd4bkksRUFBRW9sQyxFQUFFbkwsRUFBRU0sR0FBRyxJQUFJOTVCLEVBQUVwQixPQUFPb29DLE9BQU96bkMsR0FBRyxNQUFNLE9BQU9vbEMsRUFBRTBLLEVBQUVydkMsRUFBRTJrQyxHQUFHM2tDLEVBQUUybUksR0FBRzFySSxLQUFLLFNBQVNzRSxFQUFFb2xDLEVBQUVuTCxHQUFHLE9BQU9BLEVBQUVxdEcsR0FBR3RuSSxFQUFFb2xDLEVBQUVuTCxHQUFHbUwsR0FBRyxtQkFBbUJBLEVBQUVwbEMsRUFBRXNuSSxHQUFHdG5JLEVBQUVvbEMsSUFBSXM5RixFQUFFbmlJLFNBQVEsU0FBU1AsR0FBR29uSSxHQUFHcG5JLEdBQUd1bkksTUFBSzlFLEVBQUVsaUksU0FBUSxTQUFTUCxHQUFHb25JLEdBQUdwbkksRUFBRSxLQUFLd25JLE1BQUtKLEdBQUcvZ0ksTUFBTSxTQUFTckcsRUFBRW9sQyxFQUFFbkwsRUFBRU0sR0FBRyxHQUFHdjZCLElBQUkrakksS0FBSS9qSSxPQUFFLEdBQVFvbEMsSUFBSTIrRixLQUFJMytGLE9BQUUsSUFBU0EsRUFBRSxPQUFPL2xDLE9BQU9vb0MsT0FBT3puQyxHQUFHLE1BQU0sSUFBSUEsRUFBRSxPQUFPb2xDLEVBQUUsSUFBSTNrQyxFQUFFLEdBQUcsSUFBSSxJQUFJbTVDLEtBQUs5SixFQUFFcnZDLEVBQUVULEdBQUdvbEMsRUFBRSxDQUFDLElBQUlqTCxFQUFFMTVCLEVBQUVtNUMsR0FBR3hmLEVBQUVnTCxFQUFFd1UsR0FBR3pmLElBQUkveUIsTUFBTXBHLFFBQVFtNUIsS0FBS0EsRUFBRSxDQUFDQSxJQUFJMTVCLEVBQUVtNUMsR0FBR3pmLEVBQUVBLEVBQUVoNUIsT0FBT2k1QixHQUFHaHpCLE1BQU1wRyxRQUFRbzVCLEdBQUdBLEVBQUUsQ0FBQ0EsR0FBRyxPQUFPMzVCLEdBQUcybUksR0FBRzV1RyxNQUFNNHVHLEdBQUc1MUcsUUFBUTQxRyxHQUFHSyxPQUFPTCxHQUFHM3hFLFNBQVMsU0FBU3oxRCxFQUFFb2xDLEVBQUVuTCxFQUFFTSxHQUFHLElBQUl2NkIsRUFBRSxPQUFPb2xDLEVBQUUsSUFBSTNrQyxFQUFFcEIsT0FBT29vQyxPQUFPLE1BQU0sT0FBT3FJLEVBQUVydkMsRUFBRVQsR0FBR29sQyxHQUFHMEssRUFBRXJ2QyxFQUFFMmtDLEdBQUcza0MsR0FBRzJtSSxHQUFHTSxRQUFRSixHQUFHLElBQUlLLEdBQUcsU0FBUzNuSSxFQUFFb2xDLEdBQUcsWUFBTyxJQUFTQSxFQUFFcGxDLEVBQUVvbEMsR0FBRyxTQUFTd2lHLEdBQUc1bkksRUFBRW9sQyxFQUFFbkwsR0FBRyxHQUFHLG1CQUFtQm1MLElBQUlBLEVBQUVBLEVBQUU3akMsU0FBUyxTQUFTdkIsRUFBRW9sQyxHQUFHLElBQUluTCxFQUFFajZCLEVBQUV3NEIsTUFBTSxHQUFHeUIsRUFBRSxDQUFDLElBQUlNLEVBQUU5NUIsRUFBRW01QyxFQUFFLEdBQUcsR0FBR3h5QyxNQUFNcEcsUUFBUWk1QixHQUFHLElBQUlNLEVBQUVOLEVBQUVsL0IsT0FBT3cvQixLQUFLLGlCQUFpQjk1QixFQUFFdzVCLEVBQUVNLE1BQU1xZixFQUFFaGYsRUFBRW42QixJQUFJLENBQUN4RyxLQUFLLFlBQVksR0FBR21nQyxFQUFFSCxHQUFHLElBQUksSUFBSUUsS0FBS0YsRUFBRXg1QixFQUFFdzVCLEVBQUVFLEdBQUd5ZixFQUFFaGYsRUFBRVQsSUFBSUMsRUFBRTM1QixHQUFHQSxFQUFFLENBQUN4RyxLQUFLd0csR0FBR1QsRUFBRXc0QixNQUFNb2hCLEdBQTFNLENBQThNeFUsR0FBRyxTQUFTcGxDLEVBQUVvbEMsR0FBRyxJQUFJbkwsRUFBRWo2QixFQUFFeW5JLE9BQU8sR0FBR3h0RyxFQUFFLENBQUMsSUFBSU0sRUFBRXY2QixFQUFFeW5JLE9BQU8sR0FBRyxHQUFHcmdJLE1BQU1wRyxRQUFRaTVCLEdBQUcsSUFBSSxJQUFJeDVCLEVBQUUsRUFBRUEsRUFBRXc1QixFQUFFbC9CLE9BQU8wRixJQUFJODVCLEVBQUVOLEVBQUV4NUIsSUFBSSxDQUFDOFAsS0FBSzBwQixFQUFFeDVCLFNBQVMsR0FBRzI1QixFQUFFSCxHQUFHLElBQUksSUFBSTJmLEtBQUszZixFQUFFLENBQUMsSUFBSUUsRUFBRUYsRUFBRTJmLEdBQUdyZixFQUFFcWYsR0FBR3hmLEVBQUVELEdBQUcyVixFQUFFLENBQUN2L0IsS0FBS3FwQyxHQUFHemYsR0FBRyxDQUFDNXBCLEtBQUs0cEIsS0FBOUwsQ0FBb01pTCxHQUFHLFNBQVNwbEMsR0FBRyxJQUFJb2xDLEVBQUVwbEMsRUFBRTQ4SCxXQUFXLEdBQUd4M0YsRUFBRSxJQUFJLElBQUluTCxLQUFLbUwsRUFBRSxDQUFDLElBQUk3SyxFQUFFNkssRUFBRW5MLEdBQUcsbUJBQW1CTSxJQUFJNkssRUFBRW5MLEdBQUcsQ0FBQ2w2QixLQUFLdzZCLEVBQUUxRCxPQUFPMEQsS0FBMUcsQ0FBZ0g2SyxJQUFJQSxFQUFFeWlHLFFBQVF6aUcsRUFBRTBpRyxVQUFVOW5JLEVBQUU0bkksR0FBRzVuSSxFQUFFb2xDLEVBQUUwaUcsUUFBUTd0RyxJQUFJbUwsRUFBRTJpRyxRQUFRLElBQUksSUFBSXh0RyxFQUFFLEVBQUU5NUIsRUFBRTJrQyxFQUFFMmlHLE9BQU9odEksT0FBT3cvQixFQUFFOTVCLEVBQUU4NUIsSUFBSXY2QixFQUFFNG5JLEdBQUc1bkksRUFBRW9sQyxFQUFFMmlHLE9BQU94dEcsR0FBR04sR0FBRyxJQUFJMmYsRUFBRXpmLEVBQUUsR0FBRyxJQUFJeWYsS0FBSzU1QyxFQUFFODZCLEVBQUU4ZSxHQUFHLElBQUlBLEtBQUt4VSxFQUFFekssRUFBRTM2QixFQUFFNDVDLElBQUk5ZSxFQUFFOGUsR0FBRyxTQUFTOWUsRUFBRVAsR0FBRyxJQUFJOTVCLEVBQUUybUksR0FBRzdzRyxJQUFJb3RHLEdBQUd4dEcsRUFBRUksR0FBRzk1QixFQUFFVCxFQUFFdTZCLEdBQUc2SyxFQUFFN0ssR0FBR04sRUFBRU0sR0FBRyxPQUFPSixFQUFFLFNBQVM2dEcsR0FBR2hvSSxFQUFFb2xDLEVBQUVuTCxFQUFFTSxHQUFHLEdBQUcsaUJBQWlCTixFQUFFLENBQUMsSUFBSXg1QixFQUFFVCxFQUFFb2xDLEdBQUcsR0FBR3pLLEVBQUVsNkIsRUFBRXc1QixHQUFHLE9BQU94NUIsRUFBRXc1QixHQUFHLElBQUkyZixFQUFFaGYsRUFBRVgsR0FBRyxHQUFHVSxFQUFFbDZCLEVBQUVtNUMsR0FBRyxPQUFPbjVDLEVBQUVtNUMsR0FBRyxJQUFJemYsRUFBRTUvQixFQUFFcS9DLEdBQUcsT0FBT2pmLEVBQUVsNkIsRUFBRTA1QixHQUFHMTVCLEVBQUUwNUIsR0FBRzE1QixFQUFFdzVCLElBQUl4NUIsRUFBRW01QyxJQUFJbjVDLEVBQUUwNUIsSUFBSSxTQUFTOHRHLEdBQUdqb0ksRUFBRW9sQyxFQUFFbkwsRUFBRU0sR0FBRyxJQUFJOTVCLEVBQUUya0MsRUFBRXBsQyxHQUFHNDVDLEdBQUdqZixFQUFFVixFQUFFajZCLEdBQUdtNkIsRUFBRUYsRUFBRWo2QixHQUFHbzZCLEVBQUU4dEcsR0FBRzlhLFFBQVEzc0gsRUFBRXhHLE1BQU0sR0FBR21nQyxHQUFHLEVBQUUsR0FBR3dmLElBQUlqZixFQUFFbDZCLEVBQUUsV0FBVzA1QixHQUFFLE9BQVEsR0FBRyxLQUFLQSxHQUFHQSxJQUFJa1EsRUFBRXJxQyxHQUFHLENBQUMsSUFBSTg2QixFQUFFb3RHLEdBQUc1c0csT0FBTzc2QixFQUFFeEcsT0FBTzZnQyxFQUFFLEdBQUdWLEVBQUVVLEtBQUtYLEdBQUUsR0FBSSxRQUFHLElBQVNBLEVBQUUsQ0FBQ0EsRUFBRSxTQUFTbjZCLEVBQUVvbEMsRUFBRW5MLEdBQUcsR0FBSVUsRUFBRXlLLEVBQUUsV0FBUixDQUEwQixJQUFJN0ssRUFBRTZLLEVBQUU1TixRQUFRLE9BQUd4M0IsR0FBR0EsRUFBRW9ySCxTQUFTK2MsZ0JBQVcsSUFBU25vSSxFQUFFb3JILFNBQVMrYyxVQUFVbHVHLFNBQUksSUFBU2o2QixFQUFFb29JLE9BQU9udUcsR0FBVWo2QixFQUFFb29JLE9BQU9udUcsR0FBUyxtQkFBbUJNLEdBQUcsYUFBYTh0RyxHQUFHampHLEVBQUVuckMsTUFBTXNnQyxFQUFFLzZCLEtBQUtRLEdBQUd1NkIsR0FBOU4sQ0FBaU9BLEVBQUU5NUIsRUFBRVQsR0FBRyxJQUFJb2lJLEVBQUVzRSxHQUFHcHFCLElBQUcsR0FBSXdxQixHQUFHM3NHLEdBQUdtaUYsR0FBRzhsQixHQUFHLE9BQU9qb0csRUFBRSxTQUFTa3VHLEdBQUdyb0ksR0FBRyxJQUFJb2xDLEVBQUVwbEMsR0FBR0EsRUFBRW9CLFdBQVdtVyxNQUFNLHNCQUFzQixPQUFPNnRCLEVBQUVBLEVBQUUsR0FBRyxHQUFHLFNBQVNrakcsR0FBR3RvSSxFQUFFb2xDLEdBQUcsT0FBT2lqRyxHQUFHcm9JLEtBQUtxb0ksR0FBR2pqRyxHQUFHLFNBQVM4aUcsR0FBR2xvSSxFQUFFb2xDLEdBQUcsSUFBSWgrQixNQUFNcEcsUUFBUW9rQyxHQUFHLE9BQU9rakcsR0FBR2xqRyxFQUFFcGxDLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSWk2QixFQUFFLEVBQUVNLEVBQUU2SyxFQUFFcnFDLE9BQU9rL0IsRUFBRU0sRUFBRU4sSUFBSSxHQUFHcXVHLEdBQUdsakcsRUFBRW5MLEdBQUdqNkIsR0FBRyxPQUFPaTZCLEVBQUUsT0FBTyxFQUFFLFNBQVNzdUcsR0FBR3ZvSSxFQUFFb2xDLEVBQUVuTCxHQUFHOHFHLEtBQUssSUFBSSxHQUFHMy9GLEVBQUUsSUFBSSxJQUFJN0ssRUFBRTZLLEVBQUU3SyxFQUFFQSxFQUFFaXVHLFNBQVMsQ0FBQyxJQUFJL25JLEVBQUU4NUIsRUFBRTZ3RixTQUFTcWQsY0FBYyxHQUFHaG9JLEVBQUUsSUFBSSxJQUFJbTVDLEVBQUUsRUFBRUEsRUFBRW41QyxFQUFFMUYsT0FBTzYrQyxJQUFJLElBQUksSUFBRyxJQUFLbjVDLEVBQUVtNUMsR0FBR3A2QyxLQUFLKzZCLEVBQUV2NkIsRUFBRW9sQyxFQUFFbkwsR0FBRyxPQUFPLE1BQU1qNkIsR0FBRzBvSSxHQUFHMW9JLEVBQUV1NkIsRUFBRSx1QkFBdUJtdUcsR0FBRzFvSSxFQUFFb2xDLEVBQUVuTCxHQUFHLFFBQVErcUcsTUFBTSxTQUFTMkQsR0FBRzNvSSxFQUFFb2xDLEVBQUVuTCxFQUFFTSxFQUFFOTVCLEdBQUcsSUFBSW01QyxFQUFFLEtBQUtBLEVBQUUzZixFQUFFajZCLEVBQUUyM0IsTUFBTXlOLEVBQUVuTCxHQUFHajZCLEVBQUVSLEtBQUs0bEMsTUFBTXdVLEVBQUVvdEYsUUFBUTVFLEVBQUV4b0YsS0FBS0EsRUFBRWd2RixXQUFXaHZGLEVBQUV2d0MsT0FBTSxTQUFTckosR0FBRyxPQUFPdW9JLEdBQUd2b0ksRUFBRXU2QixFQUFFOTVCLEVBQUUsdUJBQXNCbTVDLEVBQUVndkYsVUFBUyxHQUFJLE1BQU01b0ksR0FBR3VvSSxHQUFHdm9JLEVBQUV1NkIsRUFBRTk1QixHQUFHLE9BQU9tNUMsRUFBRSxTQUFTOHVGLEdBQUcxb0ksRUFBRW9sQyxFQUFFbkwsR0FBRyxHQUFHMFAsRUFBRW01RixhQUFhLElBQUksT0FBT241RixFQUFFbTVGLGFBQWF0akksS0FBSyxLQUFLUSxFQUFFb2xDLEVBQUVuTCxHQUFHLE1BQU1tTCxHQUFHQSxJQUFJcGxDLEdBQUc2b0ksR0FBR3pqRyxHQUE4QnlqRyxHQUFHN29JLEdBQU8sU0FBUzZvSSxHQUFHN29JLEVBQUVvbEMsRUFBRW5MLEdBQUcsSUFBSUksSUFBSXFwRyxHQUFHLG9CQUFvQm44SCxRQUFRLE1BQU12SCxFQUFFdUgsUUFBUUMsTUFBTXhILEdBQUcsSUFBSThvSSxHQUFHQyxJQUFHLEVBQUdDLEdBQUcsR0FBR0MsSUFBRyxFQUFHLFNBQVNDLEtBQUtELElBQUcsRUFBRyxJQUFJanBJLEVBQUVncEksR0FBRy9uSSxNQUFNLEdBQUcrbkksR0FBR2p1SSxPQUFPLEVBQUUsSUFBSSxJQUFJcXFDLEVBQUUsRUFBRUEsRUFBRXBsQyxFQUFFakYsT0FBT3FxQyxJQUFJcGxDLEVBQUVvbEMsS0FBSyxHQUFHLG9CQUFvQjhJLFNBQVNpMkYsR0FBR2oyRixTQUFTLENBQUMsSUFBSWk3RixHQUFHajdGLFFBQVFyVyxVQUFVaXhHLEdBQUcsV0FBV0ssR0FBR2hnSSxLQUFLKy9ILElBQUlyL0YsR0FBR3NLLFdBQVdwSyxJQUFJZy9GLElBQUcsT0FBUSxHQUFHbm1HLEdBQUcsb0JBQW9CbUwsbUJBQW1CbzJGLEdBQUdwMkYsbUJBQW1CLHlDQUF5Q0EsaUJBQWlCM3NDLFdBQVcwbkksR0FBRyxvQkFBb0IzMUYsY0FBY2d4RixHQUFHaHhGLGNBQWMsV0FBV0EsYUFBYSsxRixLQUFLLFdBQVcvMEYsV0FBVyswRixHQUFHLFFBQVEsQ0FBQyxJQUFJRSxHQUFHLEVBQUVDLEdBQUcsSUFBSXQ3RixpQkFBaUJtN0YsSUFBSUksR0FBRzVnSSxTQUFTNE0sZUFBZWdtQixPQUFPOHRHLEtBQUtDLEdBQUdyNkYsUUFBUXM2RixHQUFHLENBQUNyNkYsZUFBYyxJQUFLNjVGLEdBQUcsV0FBV00sSUFBSUEsR0FBRyxHQUFHLEVBQUVFLEdBQUc1dEksS0FBSzQvQixPQUFPOHRHLEtBQUtMLElBQUcsRUFBRyxTQUFTUSxHQUFHdnBJLEVBQUVvbEMsR0FBRyxJQUFJbkwsRUFBRSxHQUFHK3VHLEdBQUcxdEksTUFBSyxXQUFXLEdBQUcwRSxFQUFFLElBQUlBLEVBQUVSLEtBQUs0bEMsR0FBRyxNQUFNcGxDLEdBQUd1b0ksR0FBR3ZvSSxFQUFFb2xDLEVBQUUsaUJBQWlCbkwsR0FBR0EsRUFBRW1MLE1BQUs2akcsS0FBS0EsSUFBRyxFQUFHSCxPQUFPOW9JLEdBQUcsb0JBQW9Ca3VDLFFBQVEsT0FBTyxJQUFJQSxTQUFRLFNBQVNsdUMsR0FBR2k2QixFQUFFajZCLEtBQUksSUFBSXdwSSxHQUFHLElBQUlwRixHQUFHLFNBQVNxRixHQUFHenBJLElBQUksU0FBU0EsRUFBRW9sQyxFQUFFbkwsR0FBRyxJQUFJTSxFQUFFOTVCLEVBQU0wNUIsRUFBRS95QixNQUFNcEcsUUFBUW9rQyxHQUFHLE1BQUlqTCxJQUFJeWYsRUFBRXhVLElBQUkvbEMsT0FBT3FxSSxTQUFTdGtHLElBQUlBLGFBQWE2L0YsSUFBL0MsQ0FBeUQsR0FBRzcvRixFQUFFbWhHLE9BQU8sQ0FBQyxJQUFJbnNHLEVBQUVnTCxFQUFFbWhHLE9BQU9FLElBQUkvN0gsR0FBRyxHQUFHdXZCLEVBQUVzUCxJQUFJblAsR0FBRyxPQUFPSCxFQUFFNXVCLElBQUkrdUIsR0FBRyxHQUFHRCxFQUFFLElBQUlJLEVBQUU2SyxFQUFFcnFDLE9BQU93L0IsS0FBS3Y2QixFQUFFb2xDLEVBQUU3SyxHQUFHTixRQUFRLElBQXFCTSxHQUFqQjk1QixFQUFFcEIsT0FBT3VCLEtBQUt3a0MsSUFBT3JxQyxPQUFPdy9CLEtBQUt2NkIsRUFBRW9sQyxFQUFFM2tDLEVBQUU4NUIsSUFBSU4sSUFBOVAsQ0FBa1FqNkIsRUFBRXdwSSxJQUFJQSxHQUFHcDFGLFFBQVEsSUFBSXUxRixHQUFHenFGLEdBQUUsU0FBU2wvQyxHQUFHLElBQUlvbEMsRUFBRSxNQUFNcGxDLEVBQUUwN0IsT0FBTyxHQUFHekIsRUFBRSxPQUFPajZCLEVBQUVvbEMsRUFBRXBsQyxFQUFFaUIsTUFBTSxHQUFHakIsR0FBRzA3QixPQUFPLEdBQUduQixFQUFFLE9BQU92NkIsRUFBRWk2QixFQUFFajZCLEVBQUVpQixNQUFNLEdBQUdqQixHQUFHMDdCLE9BQU8sR0FBRyxNQUFNLENBQUMvNEIsS0FBSzNDLEVBQUV1NkIsRUFBRXY2QixFQUFFaUIsTUFBTSxHQUFHakIsRUFBRXU5QyxLQUFLdGpCLEVBQUUydkcsUUFBUXJ2RyxFQUFFc3ZHLFFBQVF6a0csTUFBSyxTQUFTMGtHLEdBQUc5cEksRUFBRW9sQyxHQUFHLFNBQVNuTCxJQUFJLElBQUlqNkIsRUFBRTQzQixVQUFVMkMsRUFBRU4sRUFBRTh2RyxJQUFJLElBQUkzaUksTUFBTXBHLFFBQVF1NUIsR0FBRyxPQUFPb3VHLEdBQUdwdUcsRUFBRSxLQUFLM0MsVUFBVXdOLEVBQUUsZ0JBQWdCLElBQUksSUFBSTNrQyxFQUFFODVCLEVBQUV0NUIsUUFBUTI0QyxFQUFFLEVBQUVBLEVBQUVuNUMsRUFBRTFGLE9BQU82K0MsSUFBSSt1RixHQUFHbG9JLEVBQUVtNUMsR0FBRyxLQUFLNTVDLEVBQUVvbEMsRUFBRSxnQkFBZ0IsT0FBT25MLEVBQUU4dkcsSUFBSS9wSSxFQUFFaTZCLEVBQUUsU0FBUyt2RyxHQUFHaHFJLEVBQUVpNkIsRUFBRXg1QixFQUFFbTVDLEVBQUV6ZixFQUFFQyxHQUFHLElBQUlVLEVBQUVzbkcsRUFBRW5uRyxFQUFFaU8sRUFBRSxJQUFJcE8sS0FBSzk2QixFQUFFb2lJLEVBQUVwaUksRUFBRTg2QixHQUFHRyxFQUFFaEIsRUFBRWEsR0FBR29PLEVBQUV5Z0csR0FBRzd1RyxHQUFHc0ssRUFBRWc5RixLQUFLaDlGLEVBQUVuSyxJQUFJbUssRUFBRWc5RixFQUFFMkgsT0FBTzNILEVBQUVwaUksRUFBRTg2QixHQUFHZ3ZHLEdBQUcxSCxFQUFFaG9HLElBQUlHLEVBQUUyTyxFQUFFcVUsUUFBUTZrRixFQUFFcGlJLEVBQUU4NkIsR0FBR1gsRUFBRStPLEVBQUV2bUMsS0FBS3kvSCxFQUFFbDVGLEVBQUUwZ0csVUFBVW5wSSxFQUFFeW9DLEVBQUV2bUMsS0FBS3kvSCxFQUFFbDVGLEVBQUUwZ0csUUFBUTFnRyxFQUFFMmdHLFFBQVEzZ0csRUFBRTMrQixTQUFTNjNILElBQUlubkcsSUFBSUEsRUFBRTh1RyxJQUFJM0gsRUFBRXBpSSxFQUFFODZCLEdBQUdHLElBQUksSUFBSUgsS0FBS2IsRUFBRW1MLEVBQUVwbEMsRUFBRTg2QixLQUFLOGUsR0FBRzFRLEVBQUV5Z0csR0FBRzd1RyxJQUFJbjRCLEtBQUtzM0IsRUFBRWEsR0FBR29PLEVBQUUwZ0csU0FBUyxTQUFTbGlHLEdBQUcxbkMsRUFBRVMsRUFBRW01QyxHQUFHLElBQUl6ZixFQUFFbjZCLGFBQWFpbEksS0FBS2psSSxFQUFFQSxFQUFFdEUsS0FBSzRqSSxPQUFPdC9ILEVBQUV0RSxLQUFLNGpJLEtBQUssS0FBSyxJQUFJbGxHLEVBQUVwNkIsRUFBRVMsR0FBRyxTQUFTcTZCLElBQUk4ZSxFQUFFamlCLE1BQU0zOEIsS0FBSzQ4QixXQUFXdW5CLEVBQUVobEIsRUFBRTR2RyxJQUFJanZHLEdBQUdzSyxFQUFFaEwsR0FBR0QsRUFBRTJ2RyxHQUFHLENBQUNodkcsSUFBSWIsRUFBRUcsRUFBRTJ2RyxNQUFNeHZHLEVBQUVILEVBQUU2dkcsU0FBUzl2RyxFQUFFQyxHQUFHMnZHLElBQUl6dUksS0FBS3cvQixHQUFHWCxFQUFFMnZHLEdBQUcsQ0FBQzF2RyxFQUFFVSxJQUFJWCxFQUFFOHZHLFFBQU8sRUFBR2pxSSxFQUFFUyxHQUFHMDVCLEVBQUUsU0FBUyt2RyxHQUFHbHFJLEVBQUVvbEMsRUFBRTdLLEVBQUU5NUIsRUFBRW01QyxHQUFHLEdBQUczZixFQUFFbUwsR0FBRyxDQUFDLEdBQUd6SyxFQUFFeUssRUFBRTdLLEdBQUcsT0FBT3Y2QixFQUFFdTZCLEdBQUc2SyxFQUFFN0ssR0FBR3FmLFVBQVV4VSxFQUFFN0ssSUFBRyxFQUFHLEdBQUdJLEVBQUV5SyxFQUFFM2tDLEdBQUcsT0FBT1QsRUFBRXU2QixHQUFHNkssRUFBRTNrQyxHQUFHbTVDLFVBQVV4VSxFQUFFM2tDLElBQUcsRUFBRyxPQUFNLEVBQUcsU0FBU3VzRSxHQUFHaHRFLEdBQUcsT0FBT1MsRUFBRVQsR0FBRyxDQUFDb21JLEdBQUdwbUksSUFBSW9ILE1BQU1wRyxRQUFRaEIsR0FBRyxTQUFTQSxFQUFFNDVDLEVBQUV6ZixHQUFHLElBQWFXLEVBQUVzbkcsRUFBRW5uRyxFQUFFaU8sRUFBZjlPLEVBQUUsR0FBZSxJQUFJVSxFQUFFLEVBQUVBLEVBQUU4ZSxFQUFFNytDLE9BQU8rL0IsSUFBSXNLLEVBQUVnOUYsRUFBRXhvRixFQUFFOWUsS0FBSyxrQkFBa0JzbkcsSUFBaUJsNUYsRUFBRTlPLEVBQWZhLEVBQUViLEVBQUVyL0IsT0FBTyxHQUFTcU0sTUFBTXBHLFFBQVFvaEksR0FBR0EsRUFBRXJuSSxPQUFPLElBQUlvdkksSUFBSS9ILEVBQUVwaUksRUFBRW9pSSxHQUFHam9HLEdBQUcsSUFBSSxJQUFJVyxJQUFJLEtBQUtxdkcsR0FBR2poRyxLQUFLOU8sRUFBRWEsR0FBR21yRyxHQUFHbDlGLEVBQUV2ckMsS0FBS3lrSSxFQUFFLEdBQUd6a0ksTUFBTXlrSSxFQUFFMWtGLFNBQVN0akIsRUFBRTkrQixLQUFLcThCLE1BQU15QyxFQUFFZ29HLElBQUkzaEksRUFBRTJoSSxHQUFHK0gsR0FBR2poRyxHQUFHOU8sRUFBRWEsR0FBR21yRyxHQUFHbDlGLEVBQUV2ckMsS0FBS3lrSSxHQUFHLEtBQUtBLEdBQUdob0csRUFBRTkrQixLQUFLOHFJLEdBQUdoRSxJQUFJK0gsR0FBRy9ILElBQUkrSCxHQUFHamhHLEdBQUc5TyxFQUFFYSxHQUFHbXJHLEdBQUdsOUYsRUFBRXZyQyxLQUFLeWtJLEVBQUV6a0ksT0FBTzQ4QixFQUFFcWYsRUFBRXd3RixXQUFXbndHLEVBQUVtb0csRUFBRW53RixNQUFNN00sRUFBRWc5RixFQUFFbGhJLE1BQU0rNEIsRUFBRUUsS0FBS2lvRyxFQUFFbGhJLElBQUksVUFBVWk1QixFQUFFLElBQUlXLEVBQUUsTUFBTVYsRUFBRTkrQixLQUFLOG1JLEtBQUssT0FBT2hvRyxFQUFqYSxDQUFvYXA2QixRQUFHLEVBQU8sU0FBU21xSSxHQUFHbnFJLEdBQUcsT0FBT2k2QixFQUFFajZCLElBQUlpNkIsRUFBRWo2QixFQUFFckMsUUFBTyxJQUFLcUMsRUFBRTRsSSxVQUFVLFNBQVN5RSxHQUFHcnFJLEVBQUVvbEMsR0FBRyxHQUFHcGxDLEVBQUUsQ0FBQyxJQUFJLElBQUlpNkIsRUFBRTU2QixPQUFPb29DLE9BQU8sTUFBTWxOLEVBQUU4cEcsR0FBRzFwRixRQUFRRyxRQUFROTZDLEdBQUdYLE9BQU91QixLQUFLWixHQUFHUyxFQUFFLEVBQUVBLEVBQUU4NUIsRUFBRXgvQixPQUFPMEYsSUFBSSxDQUFDLElBQUltNUMsRUFBRXJmLEVBQUU5NUIsR0FBRyxHQUFHLFdBQVdtNUMsRUFBRSxDQUFDLElBQUksSUFBSXpmLEVBQUVuNkIsRUFBRTQ1QyxHQUFHcnBDLEtBQUs2cEIsRUFBRWdMLEVBQUVoTCxHQUFHLENBQUMsR0FBR0EsRUFBRWt3RyxXQUFXM3ZHLEVBQUVQLEVBQUVrd0csVUFBVW53RyxHQUFHLENBQUNGLEVBQUUyZixHQUFHeGYsRUFBRWt3RyxVQUFVbndHLEdBQUcsTUFBTUMsRUFBRUEsRUFBRW91RyxRQUFRLElBQUlwdUcsR0FBRyxZQUFZcDZCLEVBQUU0NUMsR0FBRyxDQUFDLElBQUk5ZSxFQUFFOTZCLEVBQUU0NUMsR0FBR3BpQixRQUFReUMsRUFBRTJmLEdBQUcsbUJBQW1COWUsRUFBRUEsRUFBRXQ3QixLQUFLNGxDLEdBQUd0SyxJQUFJLE9BQU9iLEdBQUcsU0FBU3N3RyxHQUFHdnFJLEVBQUVvbEMsR0FBRyxJQUFJcGxDLElBQUlBLEVBQUVqRixPQUFPLE1BQU0sR0FBRyxJQUFJLElBQUlrL0IsRUFBRSxHQUFHTSxFQUFFLEVBQUU5NUIsRUFBRVQsRUFBRWpGLE9BQU93L0IsRUFBRTk1QixFQUFFODVCLElBQUksQ0FBQyxJQUFJcWYsRUFBRTU1QyxFQUFFdTZCLEdBQUdKLEVBQUV5ZixFQUFFbCtDLEtBQUssR0FBR3krQixHQUFHQSxFQUFFeXZGLE9BQU96dkYsRUFBRXl2RixNQUFNdUUsYUFBYWgwRixFQUFFeXZGLE1BQU11RSxLQUFLdjBFLEVBQUV3RCxVQUFVaFksR0FBR3dVLEVBQUV3ckYsWUFBWWhnRyxJQUFJakwsR0FBRyxNQUFNQSxFQUFFZzBGLE1BQU1sMEYsRUFBRXpDLFVBQVV5QyxFQUFFekMsUUFBUSxLQUFLbDhCLEtBQUtzK0MsT0FBTyxDQUFDLElBQUl4ZixFQUFFRCxFQUFFZzBGLEtBQUtyekYsRUFBRWIsRUFBRUcsS0FBS0gsRUFBRUcsR0FBRyxJQUFJLGFBQWF3ZixFQUFFM0gsSUFBSW5YLEVBQUV4L0IsS0FBS3E4QixNQUFNbUQsRUFBRThlLEVBQUVsbEMsVUFBVSxJQUFJb21CLEVBQUV4L0IsS0FBS3MrQyxJQUFJLElBQUksSUFBSXdvRixLQUFLbm9HLEVBQUVBLEVBQUVtb0csR0FBR3h0RCxNQUFNbDBDLFlBQVl6RyxFQUFFbW9HLEdBQUcsT0FBT25vRyxFQUFFLFNBQVN5RyxHQUFHMWdDLEdBQUcsT0FBT0EsRUFBRTRsSSxZQUFZNWxJLEVBQUUrbEksY0FBYyxNQUFNL2xJLEVBQUVyQyxLQUFLLFNBQVM2c0ksR0FBR3BsRyxFQUFFbkwsRUFBRU0sR0FBRyxJQUFJOTVCLEVBQUVtNUMsRUFBRXY2QyxPQUFPdUIsS0FBS3E1QixHQUFHbC9CLE9BQU8sRUFBRW8vQixFQUFFaUwsSUFBSUEsRUFBRXFsRyxTQUFTN3dGLEVBQUV4ZixFQUFFZ0wsR0FBR0EsRUFBRXNsRyxLQUFLLEdBQUd0bEcsRUFBRSxDQUFDLEdBQUdBLEVBQUV1bEcsWUFBWSxPQUFPdmxHLEVBQUV1bEcsWUFBWSxHQUFHeHdHLEdBQUdJLEdBQUdBLElBQUl2NkIsR0FBR282QixJQUFJRyxFQUFFbXdHLE9BQU85d0YsSUFBSXJmLEVBQUVxd0csV0FBVyxPQUFPcndHLEVBQUUsSUFBSSxJQUFJTyxLQUFLcjZCLEVBQUUsR0FBRzJrQyxFQUFFQSxFQUFFdEssSUFBSSxNQUFNQSxFQUFFLEtBQUtyNkIsRUFBRXE2QixHQUFHK3ZHLEdBQUc1d0csRUFBRWEsRUFBRXNLLEVBQUV0SyxVQUFVcjZCLEVBQUUsR0FBRyxJQUFJLElBQUkyaEksS0FBS25vRyxFQUFFbW9HLEtBQUszaEksSUFBSUEsRUFBRTJoSSxHQUFHMEksR0FBRzd3RyxFQUFFbW9HLElBQUksT0FBT2g5RixHQUFHL2xDLE9BQU8wbkksYUFBYTNoRyxLQUFLQSxFQUFFdWxHLFlBQVlscUksR0FBRytwQyxFQUFFL3BDLEVBQUUsVUFBVTA1QixHQUFHcVEsRUFBRS9wQyxFQUFFLE9BQU8yNUIsR0FBR29RLEVBQUUvcEMsRUFBRSxhQUFhbTVDLEdBQUduNUMsRUFBRSxTQUFTb3FJLEdBQUc3cUksRUFBRW9sQyxFQUFFbkwsR0FBRyxJQUFJTSxFQUFFLFdBQVcsSUFBSXY2QixFQUFFNDNCLFVBQVU3OEIsT0FBT2svQixFQUFFdEMsTUFBTSxLQUFLQyxXQUFXcUMsRUFBRSxJQUFJLE9BQU9qNkIsRUFBRUEsR0FBRyxpQkFBaUJBLElBQUlvSCxNQUFNcEcsUUFBUWhCLEdBQUcsQ0FBQ0EsR0FBR2d0RSxHQUFHaHRFLE1BQU0sSUFBSUEsRUFBRWpGLFFBQVEsSUFBSWlGLEVBQUVqRixRQUFRaUYsRUFBRSxHQUFHNGxJLGdCQUFXLEVBQU81bEksR0FBRyxPQUFPaTZCLEVBQUV3NUUsT0FBT3AwRyxPQUFPdW9DLGVBQWU1bkMsRUFBRW9sQyxFQUFFLENBQUN6L0IsSUFBSTQwQixFQUFFN0IsWUFBVyxFQUFHQyxjQUFhLElBQUs0QixFQUFFLFNBQVN1d0csR0FBRzlxSSxFQUFFb2xDLEdBQUcsT0FBTyxXQUFXLE9BQU9wbEMsRUFBRW9sQyxJQUFJLFNBQVMybEcsR0FBRy9xSSxFQUFFb2xDLEdBQUcsSUFBSTdLLEVBQUU5NUIsRUFBRTA1QixFQUFFQyxFQUFFVSxFQUFFLEdBQUcxekIsTUFBTXBHLFFBQVFoQixJQUFJLGlCQUFpQkEsRUFBRSxJQUFJdTZCLEVBQUUsSUFBSW56QixNQUFNcEgsRUFBRWpGLFFBQVEwRixFQUFFLEVBQUUwNUIsRUFBRW42QixFQUFFakYsT0FBTzBGLEVBQUUwNUIsRUFBRTE1QixJQUFJODVCLEVBQUU5NUIsR0FBRzJrQyxFQUFFcGxDLEVBQUVTLEdBQUdBLFFBQVEsR0FBRyxpQkFBaUJULEVBQUUsSUFBSXU2QixFQUFFLElBQUluekIsTUFBTXBILEdBQUdTLEVBQUUsRUFBRUEsRUFBRVQsRUFBRVMsSUFBSTg1QixFQUFFOTVCLEdBQUcya0MsRUFBRTNrQyxFQUFFLEVBQUVBLFFBQVEsR0FBR201QyxFQUFFNTVDLEdBQUcsR0FBR3FrSSxJQUFJcmtJLEVBQUUrdkMsT0FBTzVFLFVBQVUsQ0FBQzVRLEVBQUUsR0FBRyxJQUFJLElBQUk2bkcsRUFBRXBpSSxFQUFFK3ZDLE9BQU81RSxZQUFZbFEsRUFBRW1uRyxFQUFFOTJGLFFBQVFyUSxFQUFFL0MsTUFBTXFDLEVBQUVqL0IsS0FBSzhwQyxFQUFFbkssRUFBRXY4QixNQUFNNjdCLEVBQUV4L0IsU0FBU2tnQyxFQUFFbW5HLEVBQUU5MkYsWUFBWSxJQUFJbFIsRUFBRS82QixPQUFPdUIsS0FBS1osR0FBR3U2QixFQUFFLElBQUluekIsTUFBTWd6QixFQUFFci9CLFFBQVEwRixFQUFFLEVBQUUwNUIsRUFBRUMsRUFBRXIvQixPQUFPMEYsRUFBRTA1QixFQUFFMTVCLElBQUlxNkIsRUFBRVYsRUFBRTM1QixHQUFHODVCLEVBQUU5NUIsR0FBRzJrQyxFQUFFcGxDLEVBQUU4NkIsR0FBR0EsRUFBRXI2QixHQUFHLE9BQU93NUIsRUFBRU0sS0FBS0EsRUFBRSxJQUFJQSxFQUFFNnZHLFVBQVMsRUFBRzd2RyxFQUFFLFNBQVN5d0csR0FBR2hySSxFQUFFb2xDLEVBQUVuTCxFQUFFTSxHQUFHLElBQUk5NUIsRUFBRW01QyxFQUFFNStDLEtBQUtpd0ksYUFBYWpySSxHQUFHNDVDLEdBQUczZixFQUFFQSxHQUFHLEdBQUdNLElBQUlOLEVBQUU2VixFQUFFQSxFQUFFLEdBQUd2VixHQUFHTixJQUFJeDVCLEVBQUVtNUMsRUFBRTNmLElBQUltTCxHQUFHM2tDLEVBQUV6RixLQUFLa3dJLE9BQU9sckksSUFBSW9sQyxFQUFFLElBQUlqTCxFQUFFRixHQUFHQSxFQUFFazBGLEtBQUssT0FBT2gwRixFQUFFbi9CLEtBQUtxOUgsZUFBZSxXQUFXLENBQUNsSyxLQUFLaDBGLEdBQUcxNUIsR0FBR0EsRUFBRSxTQUFTMHFJLEdBQUduckksR0FBRyxPQUFPZ29JLEdBQUdodEksS0FBS293SCxTQUFTLFVBQVVwckgsSUFBSXNpSSxFQUFFLFNBQVM4SSxHQUFHcHJJLEVBQUVvbEMsR0FBRyxPQUFPaCtCLE1BQU1wRyxRQUFRaEIsSUFBSSxJQUFJQSxFQUFFbTNCLFFBQVFpTyxHQUFHcGxDLElBQUlvbEMsRUFBRSxTQUFTeEUsR0FBRzVnQyxFQUFFb2xDLEVBQUVuTCxFQUFFTSxFQUFFOTVCLEdBQUcsSUFBSW01QyxFQUFFalEsRUFBRXM1RixTQUFTNzlGLElBQUluTCxFQUFFLE9BQU94NUIsR0FBRzg1QixJQUFJb1AsRUFBRXM1RixTQUFTNzlGLEdBQUdnbUcsR0FBRzNxSSxFQUFFODVCLEdBQUdxZixFQUFFd3hGLEdBQUd4eEYsRUFBRTU1QyxHQUFHdTZCLEVBQUU4UCxFQUFFOVAsS0FBSzZLLE9BQUUsRUFBTyxTQUFTMlAsR0FBRy8wQyxFQUFFb2xDLEVBQUVuTCxFQUFFTSxFQUFFOTVCLEdBQUcsR0FBR3c1QixHQUFLMmYsRUFBRTNmLEdBQUcsQ0FBQyxJQUFJRSxFQUFFL3lCLE1BQU1wRyxRQUFRaTVCLEtBQUtBLEVBQUVvTyxFQUFFcE8sSUFBSSxJQUFJRyxFQUFFLFNBQVN3ZixHQUFHLEdBQUcsVUFBVUEsR0FBRyxVQUFVQSxHQUFHNWIsRUFBRTRiLEdBQUd6ZixFQUFFbjZCLE1BQU0sQ0FBQyxJQUFJbzZCLEVBQUVwNkIsRUFBRTRwSCxPQUFPNXBILEVBQUU0cEgsTUFBTTN2SCxLQUFLa2dDLEVBQUVJLEdBQUdvUCxFQUFFNDVGLFlBQVluK0YsRUFBRWhMLEVBQUV3ZixHQUFHNTVDLEVBQUV5NkgsV0FBV3o2SCxFQUFFeTZILFNBQVMsSUFBSXo2SCxFQUFFNHBILFFBQVE1cEgsRUFBRTRwSCxNQUFNLElBQUksSUFBSTl1RixFQUFFRixFQUFFZ2YsR0FBR3dvRixFQUFFLzNGLEVBQUV1UCxHQUFHOWUsS0FBS1gsR0FBR2lvRyxLQUFLam9HLElBQUlBLEVBQUV5ZixHQUFHM2YsRUFBRTJmLEdBQUduNUMsS0FBS1QsRUFBRTNELEtBQUsyRCxFQUFFM0QsR0FBRyxLQUFLLFVBQVV1OUMsR0FBRyxTQUFTNTVDLEdBQUdpNkIsRUFBRTJmLEdBQUc1NUMsTUFBTSxJQUFJLElBQUk4NkIsS0FBS2IsRUFBRUcsRUFBRVUsR0FBUSxPQUFPOTZCLEVBQUUsU0FBU3FySSxHQUFHcnJJLEVBQUVvbEMsR0FBRyxJQUFJbkwsRUFBRWovQixLQUFLc3dJLGVBQWV0d0ksS0FBS3N3SSxhQUFhLElBQUkvd0csRUFBRU4sRUFBRWo2QixHQUFHLE9BQU91NkIsSUFBSTZLLEdBQUttbUcsR0FBR2h4RyxFQUFFTixFQUFFajZCLEdBQUdoRixLQUFLb3dILFNBQVM0VCxnQkFBZ0JoL0gsR0FBR1IsS0FBS3hFLEtBQUt3d0ksYUFBYSxLQUFLeHdJLE1BQU0sYUFBYWdGLEdBQUUsR0FBL0Z1NkIsRUFBc0csU0FBU2sxRixHQUFHenZILEVBQUVvbEMsRUFBRW5MLEdBQUcsT0FBT3N4RyxHQUFHdnJJLEVBQUUsV0FBV29sQyxHQUFHbkwsRUFBRSxJQUFJQSxFQUFFLEtBQUksR0FBSWo2QixFQUFFLFNBQVN1ckksR0FBR3ZySSxFQUFFb2xDLEVBQUVuTCxHQUFHLEdBQUc3eUIsTUFBTXBHLFFBQVFoQixHQUFHLElBQUksSUFBSXU2QixFQUFFLEVBQUVBLEVBQUV2NkIsRUFBRWpGLE9BQU93L0IsSUFBSXY2QixFQUFFdTZCLElBQUksaUJBQWlCdjZCLEVBQUV1NkIsSUFBSWt4RyxHQUFHenJJLEVBQUV1NkIsR0FBRzZLLEVBQUUsSUFBSTdLLEVBQUVOLFFBQVF3eEcsR0FBR3pySSxFQUFFb2xDLEVBQUVuTCxHQUFHLFNBQVN3eEcsR0FBR3pySSxFQUFFb2xDLEVBQUVuTCxHQUFHajZCLEVBQUUwbEksVUFBUyxFQUFHMWxJLEVBQUVrQixJQUFJa2tDLEVBQUVwbEMsRUFBRThsSSxPQUFPN3JHLEVBQUUsU0FBU3l4RyxHQUFHMXJJLEVBQUVvbEMsR0FBRyxHQUFHQSxHQUFLaEwsRUFBRWdMLEdBQUcsQ0FBQyxJQUFJbkwsRUFBRWo2QixFQUFFM0QsR0FBRzJELEVBQUUzRCxHQUFHeXpDLEVBQUUsR0FBRzl2QyxFQUFFM0QsSUFBSSxHQUFHLElBQUksSUFBSWsrQixLQUFLNkssRUFBRSxDQUFDLElBQUkza0MsRUFBRXc1QixFQUFFTSxHQUFHcWYsRUFBRXhVLEVBQUU3SyxHQUFHTixFQUFFTSxHQUFHOTVCLEVBQUUsR0FBR1UsT0FBT1YsRUFBRW01QyxHQUFHQSxHQUFRLE9BQU81NUMsRUFBRSxTQUFTMnJJLEdBQUczckksRUFBRW9sQyxFQUFFbkwsRUFBRU0sR0FBRzZLLEVBQUVBLEdBQUcsQ0FBQ3FsRyxTQUFTeHdHLEdBQUcsSUFBSSxJQUFJeDVCLEVBQUUsRUFBRUEsRUFBRVQsRUFBRWpGLE9BQU8wRixJQUFJLENBQUMsSUFBSW01QyxFQUFFNTVDLEVBQUVTLEdBQUcyRyxNQUFNcEcsUUFBUTQ0QyxHQUFHK3hGLEdBQUcveEYsRUFBRXhVLEVBQUVuTCxHQUFHMmYsSUFBSUEsRUFBRTY1RCxRQUFRNzVELEVBQUVuaUIsR0FBR2c4RSxPQUFNLEdBQUlydUUsRUFBRXdVLEVBQUUxNEMsS0FBSzA0QyxFQUFFbmlCLElBQUksT0FBTzhDLElBQUk2SyxFQUFFc2xHLEtBQUtud0csR0FBRzZLLEVBQUUsU0FBU3dtRyxHQUFHNXJJLEVBQUVvbEMsR0FBRyxJQUFJLElBQUluTCxFQUFFLEVBQUVBLEVBQUVtTCxFQUFFcnFDLE9BQU9rL0IsR0FBRyxFQUFFLENBQUMsSUFBSU0sRUFBRTZLLEVBQUVuTCxHQUFHLGlCQUFpQk0sR0FBR0EsSUFBSXY2QixFQUFFb2xDLEVBQUVuTCxJQUFJbUwsRUFBRW5MLEVBQUUsSUFBSSxPQUFPajZCLEVBQUUsU0FBUzZySSxHQUFHN3JJLEVBQUVvbEMsR0FBRyxNQUFNLGlCQUFpQnBsQyxFQUFFb2xDLEVBQUVwbEMsRUFBRUEsRUFBRSxTQUFTOHJJLEdBQUc5ckksR0FBR0EsRUFBRStySSxHQUFHdGMsR0FBR3p2SCxFQUFFdTJDLEdBQUdyTixFQUFFbHBDLEVBQUU0MkMsR0FBRzNiLEVBQUVqN0IsRUFBRTY2SCxHQUFHa1EsR0FBRy9xSSxFQUFFKzBDLEdBQUdpMkYsR0FBR2hySSxFQUFFZ3NJLEdBQUd6SixFQUFFdmlJLEVBQUVnMUMsR0FBRzFhLEVBQUV0NkIsRUFBRW83SCxHQUFHaVEsR0FBR3JySSxFQUFFaXNJLEdBQUdkLEdBQUduckksRUFBRWkxQyxHQUFHclUsR0FBRzVnQyxFQUFFa3NJLEdBQUduM0YsR0FBRy8wQyxFQUFFMDJDLEdBQUcwdkYsR0FBR3BtSSxFQUFFMDVDLEdBQUd5c0YsR0FBR25tSSxFQUFFNjRILEdBQUc4UyxHQUFHM3JJLEVBQUVtc0ksR0FBR1QsR0FBRzFySSxFQUFFMDNDLEdBQUdrMEYsR0FBRzVySSxFQUFFb3NJLEdBQUdQLEdBQUcsU0FBU1EsR0FBR2puRyxFQUFFbkwsRUFBRXg1QixFQUFFbTVDLEVBQUV6ZixHQUFHLElBQUlDLEVBQUVVLEVBQUU5L0IsS0FBS29uSSxFQUFFam9HLEVBQUU1NEIsUUFBUW81QixFQUFFaWYsRUFBRSxTQUFTeGYsRUFBRS82QixPQUFPb29DLE9BQU9tUyxJQUFJMHlGLFVBQVUxeUYsR0FBR3hmLEVBQUV3ZixFQUFFQSxFQUFFQSxFQUFFMHlGLFdBQVcsSUFBSXJ4RyxFQUFFVixFQUFFNm5HLEVBQUU3QyxXQUFXcjJGLEdBQUdqTyxFQUFFamdDLEtBQUtVLEtBQUswcEMsRUFBRXBxQyxLQUFLdzlCLE1BQU15QixFQUFFai9CLEtBQUswWixTQUFTalUsRUFBRXpGLEtBQUt3ekMsT0FBT29MLEVBQUU1K0MsS0FBS3FpRCxVQUFValksRUFBRS9vQyxJQUFJMkQsRUFBRWhGLEtBQUt1eEksV0FBV2xDLEdBQUdqSSxFQUFFcUYsT0FBTzd0RixHQUFHNStDLEtBQUtteUgsTUFBTSxXQUFXLE9BQU9yeUYsRUFBRW93RyxRQUFRVixHQUFHcGxHLEVBQUVncEYsWUFBWXR6RixFQUFFb3dHLE9BQU9YLEdBQUc5cEksRUFBRW01QyxJQUFJOWUsRUFBRW93RyxRQUFRN3JJLE9BQU91b0MsZUFBZTVzQyxLQUFLLGNBQWMsQ0FBQzA5QixZQUFXLEVBQUcveUIsSUFBSSxXQUFXLE9BQU82a0ksR0FBR3BsRyxFQUFFZ3BGLFlBQVlwekgsS0FBS215SCxZQUFZbHlGLElBQUlqZ0MsS0FBS293SCxTQUFTZ1gsRUFBRXBuSSxLQUFLa3dJLE9BQU9sd0ksS0FBS215SCxRQUFRbnlILEtBQUtpd0ksYUFBYVQsR0FBR3BsRyxFQUFFZ3BGLFlBQVlwekgsS0FBS2t3SSxTQUFTOUksRUFBRTVDLFNBQVN4a0ksS0FBS3k3QyxHQUFHLFNBQVN6MkMsRUFBRW9sQyxFQUFFbkwsRUFBRU0sR0FBRyxJQUFJOTVCLEVBQUUrckksR0FBR3B5RyxFQUFFcDZCLEVBQUVvbEMsRUFBRW5MLEVBQUVNLEVBQUUyTyxHQUFHLE9BQU96b0MsSUFBSTJHLE1BQU1wRyxRQUFRUCxLQUFLQSxFQUFFNmtJLFVBQVVsRCxFQUFFNUMsU0FBUy8rSCxFQUFFMmtJLFVBQVV4ckYsR0FBR241QyxHQUFHekYsS0FBS3k3QyxHQUFHLFNBQVN6MkMsRUFBRW9sQyxFQUFFbkwsRUFBRU0sR0FBRyxPQUFPaXlHLEdBQUdweUcsRUFBRXA2QixFQUFFb2xDLEVBQUVuTCxFQUFFTSxFQUFFMk8sSUFBSSxTQUFTdWpHLEdBQUd6c0ksRUFBRW9sQyxFQUFFbkwsRUFBRU0sRUFBRTk1QixHQUFHLElBQUltNUMsRUFBRXlzRixHQUFHcm1JLEdBQUcsT0FBTzQ1QyxFQUFFd3JGLFVBQVVuckcsRUFBRTJmLEVBQUV5ckYsVUFBVTlxRyxFQUFFNkssRUFBRStvRixRQUFRdjBFLEVBQUVsK0MsT0FBT2srQyxFQUFFbCtDLEtBQUssS0FBS3l5SCxLQUFLL29GLEVBQUUrb0YsTUFBTXYwRSxFQUFFLFNBQVM4eUYsR0FBRzFzSSxFQUFFb2xDLEdBQUcsSUFBSSxJQUFJbkwsS0FBS21MLEVBQUVwbEMsRUFBRTQ2QixFQUFFWCxJQUFJbUwsRUFBRW5MLEdBQUc2eEcsR0FBR08sR0FBRy9zSSxXQUFXLElBQUlxdEksR0FBRyxDQUFDbmtJLEtBQUssU0FBU3hJLEVBQUVvbEMsR0FBRyxHQUFHcGxDLEVBQUV3bEksb0JBQW9CeGxJLEVBQUV3bEksa0JBQWtCb0gsY0FBYzVzSSxFQUFFdEUsS0FBS214SSxVQUFVLENBQUMsSUFBSXR5RyxFQUFFdjZCLEVBQUUyc0ksR0FBR0csU0FBU3Z5RyxFQUFFQSxRQUFTdjZCLEVBQUV3bEksa0JBQWtCLFNBQVN4bEksRUFBRW9sQyxHQUFHLElBQUk3SyxFQUFFLENBQUN3eUcsY0FBYSxFQUFHQyxhQUFhaHRJLEVBQUV3dUMsT0FBT3BKLEdBQUcza0MsRUFBRVQsRUFBRXRFLEtBQUt1eEksZUFBNkUsT0FBOURoekcsRUFBRXg1QixLQUFLODVCLEVBQUV4cUIsT0FBT3RQLEVBQUVzUCxPQUFPd3FCLEVBQUV5a0csZ0JBQWdCditILEVBQUV1K0gsaUJBQXdCLElBQUloL0gsRUFBRXVsSSxpQkFBaUJweEUsS0FBSzU1QixHQUF2TCxDQUEyTHY2QixFQUFFa3RJLEtBQUtDLE9BQU8vbkcsRUFBRXBsQyxFQUFFa2xJLFNBQUksRUFBTzkvRixJQUFLMG5HLFNBQVMsU0FBUzFuRyxFQUFFbkwsR0FBRyxJQUFJTSxFQUFFTixFQUFFc3JHLGtCQUFrQixTQUFTbmdHLEVBQUVuTCxFQUFFTSxFQUFFOTVCLEVBQUVtNUMsR0FBRyxJQUFJemYsRUFBRTE1QixFQUFFL0UsS0FBSzB5SCxZQUFZaDBGLEVBQUVnTCxFQUFFNmxHLGFBQWFud0csS0FBS1gsSUFBSUEsRUFBRXN3RyxTQUFTcndHLElBQUlwNkIsSUFBSW82QixFQUFFcXdHLFNBQVN0d0csR0FBR2lMLEVBQUU2bEcsYUFBYVAsT0FBT3Z3RyxFQUFFdXdHLE1BQU10SSxLQUFLeG9GLEdBQUd4VSxFQUFFZ21GLFNBQVNnaUIsaUJBQWlCdHlHLEdBQXNFLEdBQW5Fc0ssRUFBRWdtRixTQUFTNGhCLGFBQWF2c0ksRUFBRTJrQyxFQUFFcTZGLE9BQU9oL0gsRUFBRTJrQyxFQUFFaW9HLFNBQVNqb0csRUFBRWlvRyxPQUFPNytGLE9BQU8vdEMsR0FBTTJrQyxFQUFFZ21GLFNBQVNnaUIsZ0JBQWdCeHpGLEVBQUV4VSxFQUFFa29HLE9BQU83c0ksRUFBRS9FLEtBQUtrdUgsT0FBTzVwSCxFQUFFb2xDLEVBQUVtb0csV0FBV2h6RyxHQUFHdjZCLEVBQUVpNkIsR0FBR21MLEVBQUVnbUYsU0FBUzV5RixNQUFNLENBQUM4akYsSUFBRyxHQUFJLElBQUksSUFBSXJoRixFQUFFbUssRUFBRWdqRyxPQUFPbC9GLEVBQUU5RCxFQUFFZ21GLFNBQVNvaUIsV0FBVyxHQUFHdHRHLEVBQUUsRUFBRUEsRUFBRWdKLEVBQUVudUMsT0FBT21sQyxJQUFJLENBQUMsSUFBSWYsRUFBRStKLEVBQUVoSixHQUFHbEMsRUFBRW9ILEVBQUVnbUYsU0FBUzV5RixNQUFNeUMsRUFBRWtFLEdBQUc4b0csR0FBRzlvRyxFQUFFbkIsRUFBRS9ELEVBQUVtTCxHQUFHazNFLElBQUcsR0FBSWwzRSxFQUFFZ21GLFNBQVMrYyxVQUFVbHVHLEVBQUVNLEVBQUVBLEdBQUd2NkIsRUFBRSxJQUFJbS9DLEVBQUUvWixFQUFFZ21GLFNBQVNxaUIsaUJBQWlCcm9HLEVBQUVnbUYsU0FBU3FpQixpQkFBaUJsekcsRUFBRW16RyxHQUFHdG9HLEVBQUU3SyxFQUFFNGtCLEdBQUdpakYsSUFBSWg5RixFQUFFOGxHLE9BQU9YLEdBQUczd0YsRUFBRW41QyxFQUFFMjhDLFNBQVNoWSxFQUFFaXZGLGdCQUF0bEIsQ0FBdW1CcDZGLEVBQUV1ckcsa0JBQWtCcGdHLEVBQUVvZ0csa0JBQWtCanJHLEVBQUU0dEcsVUFBVTV0RyxFQUFFOGlCLFVBQVVwakIsRUFBRU0sRUFBRTdsQixXQUFXaTVILE9BQU8sU0FBUzN0SSxHQUFHLElBQUlvbEMsRUFBRW5MLEVBQUVqNkIsRUFBRW85QyxRQUFRN2lCLEVBQUV2NkIsRUFBRXdsSSxrQkFBa0JqckcsRUFBRXF6RyxhQUFhcnpHLEVBQUVxekcsWUFBVyxFQUFHQyxHQUFHdHpHLEVBQUUsWUFBWXY2QixFQUFFdEUsS0FBS214SSxZQUFZNXlHLEVBQUUyekcsYUFBYXhvRyxFQUFFN0ssR0FBR3V6RyxXQUFVLEVBQUczMUgsR0FBRzdjLEtBQUs4cEMsSUFBSTJvRyxHQUFHeHpHLEdBQUUsS0FBTXZJLFFBQVEsU0FBU2h5QixHQUFHLElBQUlvbEMsRUFBRXBsQyxFQUFFd2xJLGtCQUFrQnBnRyxFQUFFd25HLGVBQWU1c0ksRUFBRXRFLEtBQUtteEksVUFBVSxTQUFTN3NJLEVBQUVvbEMsRUFBRW5MLEdBQUcsS0FBR0EsSUFBSW1MLEVBQUU0b0csaUJBQWdCLEVBQUdDLEdBQUc3b0csS0FBZUEsRUFBRTBvRyxXQUFVLENBQUMxb0csRUFBRTBvRyxXQUFVLEVBQUcsSUFBSSxJQUFJdnpHLEVBQUUsRUFBRUEsRUFBRTZLLEVBQUU4b0csVUFBVW56SSxPQUFPdy9CLElBQUl2NkIsRUFBRW9sQyxFQUFFOG9HLFVBQVUzekcsSUFBSXN6RyxHQUFHem9HLEVBQUUsZ0JBQXRKLENBQXVLQSxHQUFFLEdBQUlBLEVBQUUrdUYsY0FBY2dhLEdBQUc5dUksT0FBT3VCLEtBQUsrckksSUFBSSxTQUFTeUIsR0FBRzN0SSxFQUFFMDVCLEVBQUVDLEVBQUVVLEVBQUVHLEdBQUcsSUFBSW1LLEVBQUUza0MsR0FBRyxDQUFDLElBQUl5b0MsRUFBRTlPLEVBQUVneEYsU0FBU3ljLE1BQU0sR0FBR2p1RixFQUFFbjVDLEtBQUtBLEVBQUV5b0MsRUFBRWlyQyxPQUFPMXpFLElBQUksbUJBQW1CQSxFQUFFLENBQUMsSUFBSXkvQixFQUFFLEdBQUdrRixFQUFFM2tDLEVBQUU0dEksV0FBTSxLQUFVNXRJLEVBQUUsU0FBU1QsRUFBRVMsR0FBRyxHQUFHODVCLEVBQUV2NkIsRUFBRXdILFFBQVF5eUIsRUFBRWo2QixFQUFFc3VJLFdBQVcsT0FBT3R1SSxFQUFFc3VJLFVBQVUsR0FBR3IwRyxFQUFFajZCLEVBQUV1dUksVUFBVSxPQUFPdnVJLEVBQUV1dUksU0FBUyxJQUFJcDBHLEVBQUVxMEcsR0FBOEQsR0FBM0RyMEcsR0FBR0YsRUFBRWo2QixFQUFFeXVJLFVBQVUsSUFBSXp1SSxFQUFFeXVJLE9BQU90M0csUUFBUWdELElBQUluNkIsRUFBRXl1SSxPQUFPbnpJLEtBQUs2K0IsR0FBTUksRUFBRXY2QixFQUFFZ0ssVUFBVWl3QixFQUFFajZCLEVBQUUwdUksYUFBYSxPQUFPMXVJLEVBQUUwdUksWUFBWSxHQUFHdjBHLElBQUlGLEVBQUVqNkIsRUFBRXl1SSxRQUFRLENBQUMsSUFBSXIwRyxFQUFFcDZCLEVBQUV5dUksT0FBTyxDQUFDdDBHLEdBQUdXLEdBQUUsRUFBR0csRUFBRSxLQUFLaU8sRUFBRSxLQUFLL08sRUFBRXcwRyxJQUFJLGtCQUFpQixXQUFXLE9BQU94dkYsRUFBRS9rQixFQUFFRCxNQUFLLElBQUkrRixFQUFFLFNBQVNsZ0MsR0FBRyxJQUFJLElBQUlvbEMsRUFBRSxFQUFFbkwsRUFBRUcsRUFBRXIvQixPQUFPcXFDLEVBQUVuTCxFQUFFbUwsSUFBSWhMLEVBQUVnTCxHQUFHaXZGLGVBQWVyMEgsSUFBSW82QixFQUFFci9CLE9BQU8sRUFBRSxPQUFPa2dDLElBQUl1eUIsYUFBYXZ5QixHQUFHQSxFQUFFLE1BQU0sT0FBT2lPLElBQUlza0IsYUFBYXRrQixHQUFHQSxFQUFFLFFBQVEvSixFQUFFcUksR0FBRSxTQUFTcEMsR0FBR3BsQyxFQUFFdXVJLFNBQVNLLEdBQUd4cEcsRUFBRTNrQyxHQUFHcTZCLEVBQUVWLEVBQUVyL0IsT0FBTyxFQUFFbWxDLEdBQUUsTUFBTWxDLEVBQUV3SixHQUFFLFNBQVNwQyxHQUFHbkwsRUFBRWo2QixFQUFFc3VJLGFBQWF0dUksRUFBRXdILE9BQU0sRUFBRzA0QixHQUFFLE9BQU9uQixFQUFFLytCLEVBQUVtL0IsRUFBRW5CLEdBQUcsT0FBTzRiLEVBQUU3YSxLQUFLcWpHLEVBQUVyakcsR0FBR3FHLEVBQUVwbEMsRUFBRXV1SSxXQUFXeHZHLEVBQUU1MUIsS0FBS2cyQixFQUFFbkIsR0FBR29rRyxFQUFFcmpHLEVBQUVreEYsYUFBYWx4RixFQUFFa3hGLFVBQVU5bUgsS0FBS2cyQixFQUFFbkIsR0FBRy9ELEVBQUU4RSxFQUFFdjNCLFNBQVN4SCxFQUFFc3VJLFVBQVVNLEdBQUc3dkcsRUFBRXYzQixNQUFNL0csSUFBSXc1QixFQUFFOEUsRUFBRS8wQixXQUFXaEssRUFBRTB1SSxZQUFZRSxHQUFHN3ZHLEVBQUUvMEIsUUFBUXZKLEdBQUcsSUFBSXMrQixFQUFFNHNDLE1BQU0zckUsRUFBRWdLLFNBQVEsRUFBR2l4QixFQUFFa1osWUFBVyxXQUFXbFosRUFBRSxLQUFLbUssRUFBRXBsQyxFQUFFdXVJLFdBQVducEcsRUFBRXBsQyxFQUFFd0gsU0FBU3hILEVBQUVnSyxTQUFRLEVBQUdrMkIsR0FBRSxNQUFNbkIsRUFBRTRzQyxPQUFPLE1BQU0xeEMsRUFBRThFLEVBQUVnMUUsV0FBVzdxRSxFQUFFaUwsWUFBVyxXQUFXakwsRUFBRSxLQUFLOUQsRUFBRXBsQyxFQUFFdXVJLFdBQVd2d0csRUFBRSxRQUFPZSxFQUFFZzFFLFlBQVlqNUUsR0FBRSxFQUFHOTZCLEVBQUVnSyxRQUFRaEssRUFBRTB1SSxZQUFZMXVJLEVBQUV1dUksVUFBaC9CLENBQTIvQnJ1RyxFQUFFei9CLEVBQUV5b0MsSUFBSSxPQUFPLFNBQVNscEMsRUFBRW9sQyxFQUFFbkwsRUFBRU0sRUFBRTk1QixHQUFHLElBQUltNUMsRUFBRXVzRixLQUFLLE9BQU92c0YsRUFBRW1zRixhQUFhL2xJLEVBQUU0NUMsRUFBRW9zRixVQUFVLENBQUN0cUksS0FBSzBwQyxFQUFFZ1ksUUFBUW5qQixFQUFFdmxCLFNBQVM2bEIsRUFBRTBYLElBQUl4eEMsR0FBR201QyxFQUF2RyxDQUEwRzFaLEVBQUUvRixFQUFFQyxFQUFFVSxFQUFFRyxHQUFHZCxFQUFFQSxHQUFHLEdBQUc2MUYsR0FBR3Z2SCxHQUFHdzVCLEVBQUVFLEVBQUU5MEIsUUFBUSxTQUFTckYsRUFBRW9sQyxHQUFHLElBQUk3SyxFQUFFdjZCLEVBQUVxRixPQUFPckYsRUFBRXFGLE1BQU1uSCxNQUFNLFFBQVF1QyxFQUFFVCxFQUFFcUYsT0FBT3JGLEVBQUVxRixNQUFNdEcsT0FBTyxTQUFTcW1DLEVBQUV3a0YsUUFBUXhrRixFQUFFd2tGLE1BQU0sS0FBS3J2RixHQUFHNkssRUFBRS8vQixNQUFNM0csTUFBTSxJQUFJazdDLEVBQUV4VSxFQUFFL29DLEtBQUsrb0MsRUFBRS9vQyxHQUFHLElBQUk4OUIsRUFBRXlmLEVBQUVuNUMsR0FBRzI1QixFQUFFZ0wsRUFBRS8vQixNQUFNaUIsU0FBUzJ6QixFQUFFRSxJQUFJL3lCLE1BQU1wRyxRQUFRbTVCLElBQUksSUFBSUEsRUFBRWhELFFBQVFpRCxHQUFHRCxJQUFJQyxLQUFLd2YsRUFBRW41QyxHQUFHLENBQUMyNUIsR0FBR2o1QixPQUFPZzVCLElBQUl5ZixFQUFFbjVDLEdBQUcyNUIsRUFBelAsQ0FBNFAzNUIsRUFBRWMsUUFBUTQ0QixHQUFHLElBQUlnRixFQUFFLFNBQVNuL0IsRUFBRXU2QixFQUFFOTVCLEdBQUcsSUFBSW01QyxFQUFFcmYsRUFBRWg1QixRQUFRaTNCLE1BQU0sSUFBSTRNLEVBQUV3VSxHQUFHLENBQUMsSUFBSXpmLEVBQUUsR0FBR0MsRUFBRXA2QixFQUFFNHBILE1BQU05dUYsRUFBRTk2QixFQUFFdzRCLE1BQU0sR0FBR3lCLEVBQUVHLElBQUlILEVBQUVhLEdBQUcsSUFBSSxJQUFJc25HLEtBQUt4b0YsRUFBRSxDQUFDLElBQUkzZSxFQUFFb1AsRUFBRSszRixHQUFHOEgsR0FBRy92RyxFQUFFVyxFQUFFc25HLEVBQUVubkcsR0FBRSxJQUFLaXZHLEdBQUcvdkcsRUFBRUMsRUFBRWdvRyxFQUFFbm5HLEdBQUUsR0FBSSxPQUFPZCxHQUE1SixDQUFnS0EsRUFBRTE1QixHQUFHLEdBQUc4NUIsRUFBRTk1QixFQUFFYyxRQUFReXJILFlBQVksT0FBTyxTQUFTNW5GLEVBQUU3SyxFQUFFOTVCLEVBQUVtNUMsRUFBRXpmLEdBQUcsSUFBSUMsRUFBRWdMLEVBQUU3akMsUUFBUXU1QixFQUFFLEdBQUdzbkcsRUFBRWhvRyxFQUFFNUIsTUFBTSxHQUFHeUIsRUFBRW1vRyxHQUFHLElBQUksSUFBSW5uRyxLQUFLbW5HLEVBQUV0bkcsRUFBRUcsR0FBR2d0RyxHQUFHaHRHLEVBQUVtbkcsRUFBRTduRyxHQUFHdjZCLFFBQVFpNkIsRUFBRXg1QixFQUFFbXBILFFBQVE4aUIsR0FBRzV4RyxFQUFFcjZCLEVBQUVtcEgsT0FBTzN2RixFQUFFeDVCLEVBQUUrM0IsUUFBUWswRyxHQUFHNXhHLEVBQUVyNkIsRUFBRSszQixPQUFPLElBQUkwUSxFQUFFLElBQUltakcsR0FBRzVySSxFQUFFcTZCLEVBQUVYLEVBQUV5ZixFQUFFeFUsR0FBR2xGLEVBQUU5RixFQUFFcnFCLE9BQU92USxLQUFLLEtBQUswcEMsRUFBRXVOLEdBQUd2TixHQUFHLEdBQUdoSixhQUFhK2tHLEdBQUcsT0FBT3dILEdBQUd2c0csRUFBRXovQixFQUFFeW9DLEVBQUVzRixPQUFPcFUsR0FBRyxHQUFHaHpCLE1BQU1wRyxRQUFRay9CLEdBQUcsQ0FBQyxJQUFJLElBQUlmLEVBQUU2dEMsR0FBRzlzQyxJQUFJLEdBQUdsQyxFQUFFLElBQUk1MkIsTUFBTSszQixFQUFFcGtDLFFBQVFva0QsRUFBRSxFQUFFQSxFQUFFaGdCLEVBQUVwa0MsT0FBT29rRCxJQUFJbmhCLEVBQUVtaEIsR0FBR3N0RixHQUFHdHRHLEVBQUVnZ0IsR0FBRzErQyxFQUFFeW9DLEVBQUVzRixPQUFPcFUsR0FBRyxPQUFPNEQsR0FBM1csQ0FBK1d2OUIsRUFBRTArQixFQUFFaEYsRUFBRUMsRUFBRVUsR0FBRyxJQUFJa0QsRUFBRTdELEVBQUU5OUIsR0FBRyxHQUFHODlCLEVBQUU5OUIsR0FBRzg5QixFQUFFMDBHLFNBQVN0MEcsRUFBRTk1QixFQUFFYyxRQUFRdXRJLFVBQVUsQ0FBQyxJQUFJL3ZHLEVBQUU1RSxFQUFFZzBGLEtBQUtoMEYsRUFBRSxHQUFHNEUsSUFBSTVFLEVBQUVnMEYsS0FBS3B2RixJQUFJLFNBQVMvK0IsR0FBRyxJQUFJLElBQUlvbEMsRUFBRXBsQyxFQUFFcy9ILE9BQU90L0gsRUFBRXMvSCxLQUFLLElBQUlybEcsRUFBRSxFQUFFQSxFQUFFazBHLEdBQUdwekksT0FBT2svQixJQUFJLENBQUMsSUFBSU0sRUFBRTR6RyxHQUFHbDBHLEdBQUd4NUIsRUFBRTJrQyxFQUFFN0ssR0FBR3FmLEVBQUUreUYsR0FBR3B5RyxHQUFHOTVCLElBQUltNUMsR0FBR241QyxHQUFHQSxFQUFFc3VJLFVBQVUzcEcsRUFBRTdLLEdBQUc5NUIsRUFBRXV1SSxHQUFHcDFGLEVBQUVuNUMsR0FBR201QyxJQUEvSCxDQUFvSXpmLEdBQUcsSUFBSVEsRUFBRWw2QixFQUFFYyxRQUFRb0IsTUFBTXM0QixFQUFFLE9BQU8sSUFBSWdxRyxHQUFHLGlCQUFpQnhrSSxFQUFFNHRJLEtBQUsxekcsRUFBRSxJQUFJQSxFQUFFLElBQUlSLE9BQUUsT0FBTyxPQUFPLEVBQU9DLEVBQUUsQ0FBQys1QixLQUFLMXpELEVBQUUwbkksVUFBVWhwRyxFQUFFa2UsVUFBVXJmLEVBQUVpVSxJQUFJaFgsRUFBRXZtQixTQUFTb21CLEdBQUdvRixLQUFLLFNBQVM4dUcsR0FBR2h2SSxFQUFFb2xDLEdBQUcsSUFBSW5MLEVBQUUsU0FBU0EsRUFBRU0sR0FBR3Y2QixFQUFFaTZCLEVBQUVNLEdBQUc2SyxFQUFFbkwsRUFBRU0sSUFBSSxPQUFPTixFQUFFODBHLFNBQVEsRUFBRzkwRyxFQUFnQixTQUFTdXlHLEdBQUd4c0ksRUFBRW02QixFQUFFQyxFQUFFVSxFQUFFc25HLEVBQUVubkcsR0FBRyxPQUFPN3pCLE1BQU1wRyxRQUFRbzVCLElBQUkzNUIsRUFBRTI1QixNQUFNZ29HLEVBQUV0bkcsRUFBRUEsRUFBRVYsRUFBRUEsT0FBRSxHQUFRRyxFQUFFVSxLQUFLbW5HLEVBQXJGLEdBQTJGLFNBQVNwaUksRUFBRVMsRUFBRTA1QixFQUFFQyxFQUFFVSxHQUFHLE9BQUdiLEVBQUVFLElBQUlGLEVBQUVFLEVBQUVvc0csUUFBZUosTUFBS2xzRyxFQUFFRSxJQUFJRixFQUFFRSxFQUFFNThCLE1BQU1rRCxFQUFFMDVCLEVBQUU1OEIsSUFBUWtELEdBQWMyRyxNQUFNcEcsUUFBUW81QixJQUFJLG1CQUFtQkEsRUFBRSxNQUFNRCxFQUFFQSxHQUFHLElBQUlpMEYsWUFBWSxDQUFDNTJGLFFBQVE0QyxFQUFFLElBQUlBLEVBQUVyL0IsT0FBTyxHQUFwUixJQUF1UisvQixFQUFPVixFQUFFNHlDLEdBQUc1eUMsR0FBeFMsSUFBMlNVLElBQVNWLEVBQUUsU0FBU3A2QixHQUFHLElBQUksSUFBSW9sQyxFQUFFLEVBQUVBLEVBQUVwbEMsRUFBRWpGLE9BQU9xcUMsSUFBSSxHQUFHaCtCLE1BQU1wRyxRQUFRaEIsRUFBRW9sQyxJQUFJLE9BQU9oK0IsTUFBTTlILFVBQVU2QixPQUFPdzJCLE1BQU0sR0FBRzMzQixHQUFHLE9BQU9BLEVBQS9HLENBQWtIbzZCLElBQWUsaUJBQWlCMzVCLEdBQVN3NkIsRUFBRWo3QixFQUFFeS9ILFFBQVF6L0gsRUFBRXkvSCxPQUFPMEYsSUFBSXg3RixFQUFFMDVGLGdCQUFnQjVpSSxHQUFHMmhJLEVBQUV6NEYsRUFBRXU1RixjQUFjemlJLEdBQUcsSUFBSXdrSSxHQUFHdDdGLEVBQUUyNUYscUJBQXFCN2lJLEdBQUcwNUIsRUFBRUMsT0FBRSxPQUFPLEVBQU9wNkIsR0FBR202QixHQUFHQSxFQUFFODBHLE1BQU1oMUcsRUFBRWlQLEVBQUU4K0YsR0FBR2hvSSxFQUFFb3JILFNBQVMsYUFBYTNxSCxJQUFJLElBQUl3a0ksR0FBR3hrSSxFQUFFMDVCLEVBQUVDLE9BQUUsT0FBTyxFQUFPcDZCLEdBQUdvdUksR0FBR2xsRyxFQUFFL08sRUFBRW42QixFQUFFbzZCLEVBQUUzNUIsSUFBUTJoSSxFQUFFZ00sR0FBRzN0SSxFQUFFMDVCLEVBQUVuNkIsRUFBRW82QixHQUFVaHpCLE1BQU1wRyxRQUFRb2hJLEdBQUdBLEVBQUVub0csRUFBRW1vRyxJQUFJbm9HLEVBQUVnQixJQUFJLFNBQVNqN0IsRUFBRVMsRUFBRW01QyxFQUFFemYsR0FBbUQsR0FBaEQxNUIsRUFBRTBrSSxHQUFHdnJGLEVBQUUsa0JBQWtCbjVDLEVBQUV3eEMsTUFBTTJILE9BQUUsRUFBT3pmLEdBQUUsR0FBT0YsRUFBRXg1QixFQUFFaVUsVUFBVSxJQUFJLElBQUkwbEIsRUFBRSxFQUFFVSxFQUFFcjZCLEVBQUVpVSxTQUFTM1osT0FBT3EvQixFQUFFVSxFQUFFVixJQUFJLENBQUMsSUFBSWdvRyxFQUFFM2hJLEVBQUVpVSxTQUFTMGxCLEdBQUdILEVBQUVtb0csRUFBRW53RixPQUFPN00sRUFBRWc5RixFQUFFK0MsS0FBSzVxRyxFQUFFSixJQUFJLFFBQVFpb0csRUFBRW53RixNQUFNanlDLEVBQUVvaUksRUFBRXhvRixFQUFFemYsSUFBaE0sQ0FBcU1pb0csRUFBRW5uRyxHQUFHaEIsRUFBRUUsSUFBSSxTQUFTbjZCLEdBQUc0NUMsRUFBRTU1QyxFQUFFNlYsUUFBUTR6SCxHQUFHenBJLEVBQUU2VixPQUFPK2pDLEVBQUU1NUMsRUFBRSs2SCxRQUFRME8sR0FBR3pwSSxFQUFFKzZILE9BQXJELENBQTZENWdHLEdBQUdpb0csR0FBRytELE1BQXR6QkEsTUFBa1AsSUFBSS9ELEVBQUVubkcsRUFBNkJpTyxFQUEvVyxDQUFzNUJscEMsRUFBRW02QixFQUFFQyxFQUFFVSxFQUFFc25HLEdBQUcsSUFBSThNLEdBQUdWLEdBQUcsS0FBSyxTQUFTSSxHQUFHNXVJLEVBQUVvbEMsR0FBRyxPQUFPcGxDLEVBQUVzM0IsWUFBWStzRyxJQUFJLFdBQVdya0ksRUFBRSt2QyxPQUFPc2QsZ0JBQWdCcnRELEVBQUVBLEVBQUV3M0IsU0FBU29pQixFQUFFNTVDLEdBQUdvbEMsRUFBRSt1QyxPQUFPbjBFLEdBQUdBLEVBQUUsU0FBU212SSxHQUFHbnZJLEdBQUcsT0FBT0EsRUFBRTRsSSxXQUFXNWxJLEVBQUUrbEksYUFBYSxTQUFTcUosR0FBR3B2SSxHQUFHLEdBQUdvSCxNQUFNcEcsUUFBUWhCLEdBQUcsSUFBSSxJQUFJb2xDLEVBQUUsRUFBRUEsRUFBRXBsQyxFQUFFakYsT0FBT3FxQyxJQUFJLENBQUMsSUFBSTdLLEVBQUV2NkIsRUFBRW9sQyxHQUFHLEdBQUduTCxFQUFFTSxLQUFLTixFQUFFTSxFQUFFZ3JHLG1CQUFtQjRKLEdBQUc1MEcsSUFBSSxPQUFPQSxHQUFHLFNBQVM4MEcsR0FBR3J2SSxFQUFFb2xDLEdBQUc4cEcsR0FBR1AsSUFBSTN1SSxFQUFFb2xDLEdBQUcsU0FBU2txRyxHQUFHdHZJLEVBQUVvbEMsR0FBRzhwRyxHQUFHSyxLQUFLdnZJLEVBQUVvbEMsR0FBRyxTQUFTb3FHLEdBQUd4dkksRUFBRW9sQyxHQUFHLElBQUluTCxFQUFFaTFHLEdBQUcsT0FBTyxTQUFTMzBHLElBQUksT0FBTzZLLEVBQUV6TixNQUFNLEtBQUtDLFlBQVlxQyxFQUFFczFHLEtBQUt2dkksRUFBRXU2QixJQUFJLFNBQVNtekcsR0FBRzF0SSxFQUFFb2xDLEVBQUVuTCxHQUFHaTFHLEdBQUdsdkksRUFBRWdxSSxHQUFHNWtHLEVBQUVuTCxHQUFHLEdBQUdvMUcsR0FBR0MsR0FBR0UsR0FBR3h2SSxHQUFHa3ZJLFFBQUcsRUFBTyxJQUFJaEMsR0FBRyxLQUFLLFNBQVN1QyxHQUFHenZJLEdBQUcsSUFBSW9sQyxFQUFFOG5HLEdBQUcsT0FBT0EsR0FBR2x0SSxFQUFFLFdBQVdrdEksR0FBRzluRyxHQUFHLFNBQVM2b0csR0FBR2p1SSxHQUFHLEtBQUtBLElBQUlBLEVBQUVBLEVBQUV3b0ksVUFBVSxHQUFHeG9JLEVBQUU4dEksVUFBVSxPQUFNLEVBQUcsT0FBTSxFQUFHLFNBQVNDLEdBQUcvdEksRUFBRW9sQyxHQUFHLEdBQUdBLEdBQUcsR0FBR3BsQyxFQUFFZ3VJLGlCQUFnQixFQUFHQyxHQUFHanVJLEdBQUcsWUFBWSxHQUFHQSxFQUFFZ3VJLGdCQUFnQixPQUFPLEdBQUdodUksRUFBRTh0SSxXQUFXLE9BQU85dEksRUFBRTh0SSxVQUFVLENBQUM5dEksRUFBRTh0SSxXQUFVLEVBQUcsSUFBSSxJQUFJN3pHLEVBQUUsRUFBRUEsRUFBRWo2QixFQUFFa3VJLFVBQVVuekksT0FBT2svQixJQUFJOHpHLEdBQUcvdEksRUFBRWt1SSxVQUFVajBHLElBQUk0ekcsR0FBRzd0SSxFQUFFLGNBQWMsU0FBUzZ0SSxHQUFHN3RJLEVBQUVvbEMsR0FBRzIvRixLQUFLLElBQUk5cUcsRUFBRWo2QixFQUFFb3JILFNBQVNobUYsR0FBRzdLLEVBQUU2SyxFQUFFLFFBQVEsR0FBR25MLEVBQUUsSUFBSSxJQUFJeDVCLEVBQUUsRUFBRW01QyxFQUFFM2YsRUFBRWwvQixPQUFPMEYsRUFBRW01QyxFQUFFbjVDLElBQUlrb0ksR0FBRzF1RyxFQUFFeDVCLEdBQUdULEVBQUUsS0FBS0EsRUFBRXU2QixHQUFHdjZCLEVBQUUwdkksZUFBZTF2SSxFQUFFbzhILE1BQU0sUUFBUWgzRixHQUFHNC9GLEtBQUssSUFBSTJLLEdBQUcsR0FBR3gzSCxHQUFHLEdBQUd5M0gsR0FBRyxHQUFHQyxJQUFHLEVBQUdDLElBQUcsRUFBR3p6SSxHQUFHLEVBQU0wekksR0FBRyxFQUFFQyxHQUFHaGtGLEtBQUtwWSxJQUFJLEdBQUd2WixJQUFJdUksRUFBRSxDQUFDLElBQUlxdEcsR0FBRzMxSSxPQUFPdW9JLFlBQVlvTixJQUFJLG1CQUFtQkEsR0FBR3I4RixLQUFLbzhGLEtBQUt0bkksU0FBUzZ6RSxZQUFZLFNBQVMyekQsWUFBWUYsR0FBRyxXQUFXLE9BQU9DLEdBQUdyOEYsUUFBUSxTQUFTakksS0FBSyxJQUFJM3JDLEVBQUVvbEMsRUFBRSxJQUFJMnFHLEdBQUdDLEtBQUtGLElBQUcsRUFBR0gsR0FBR256RSxNQUFLLFNBQVN4OEQsRUFBRW9sQyxHQUFHLE9BQU9wbEMsRUFBRTBLLEdBQUcwNkIsRUFBRTE2QixNQUFLck8sR0FBRyxFQUFFQSxHQUFHc3pJLEdBQUc1MEksT0FBT3NCLE1BQU0yRCxFQUFFMnZJLEdBQUd0ekksS0FBS2d1RSxRQUFRcnFFLEVBQUVxcUUsU0FBU2psQyxFQUFFcGxDLEVBQUUwSyxHQUFHa2xJLEdBQUd4cUcsR0FBRyxLQUFLcGxDLEVBQUUwekMsTUFBTSxJQUFJelosRUFBRTloQixHQUFHbFgsUUFBUXM1QixFQUFFbzFHLEdBQUcxdUksUUFBUTVFLEdBQUdzekksR0FBRzUwSSxPQUFPb2QsR0FBR3BkLE9BQU8sRUFBRTYwSSxHQUFHLEdBQUdDLEdBQUdDLElBQUcsRUFBRyxTQUFTOXZJLEdBQUcsSUFBSSxJQUFJb2xDLEVBQUUsRUFBRUEsRUFBRXBsQyxFQUFFakYsT0FBT3FxQyxJQUFJcGxDLEVBQUVvbEMsR0FBRzBvRyxXQUFVLEVBQUdDLEdBQUcvdEksRUFBRW9sQyxJQUFHLEdBQWpFLENBQXNFbkwsR0FBRyxTQUFTajZCLEdBQWtCLElBQWYsSUFBSW9sQyxFQUFFcGxDLEVBQUVqRixPQUFZcXFDLEtBQUssQ0FBQyxJQUFJbkwsRUFBRWo2QixFQUFFb2xDLEdBQUc3SyxFQUFFTixFQUFFcitCLEdBQUcyK0IsRUFBRTQxRyxXQUFXbDJHLEdBQUdNLEVBQUVxekcsYUFBYXJ6RyxFQUFFcXlHLGNBQWNpQixHQUFHdHpHLEVBQUUsWUFBNUcsQ0FBeUhBLEdBQUdzRSxJQUFJOEssRUFBRWk1RixVQUFVL2pHLEdBQUd6NEIsS0FBSyxTQUFTLElBQUlncUksR0FBRyxFQUFFMzRHLEdBQUcsU0FBU3ozQixFQUFFb2xDLEVBQUVuTCxFQUFFTSxFQUFFOTVCLEdBQUd6RixLQUFLWSxHQUFHb0UsRUFBRVMsSUFBSVQsRUFBRW13SSxTQUFTbjFJLE1BQU1nRixFQUFFcXdJLFVBQVUvMEksS0FBS04sTUFBTXUvQixHQUFHdi9CLEtBQUtzNUgsT0FBTy81RixFQUFFKzVGLEtBQUt0NUgsS0FBS3MxSSxPQUFPLzFHLEVBQUUrMUcsS0FBS3QxSSxLQUFLdTFJLE9BQU9oMkcsRUFBRWcyRyxLQUFLdjFJLEtBQUtzL0csT0FBTy8vRSxFQUFFKy9FLEtBQUt0L0csS0FBS3F2RSxPQUFPOXZDLEVBQUU4dkMsUUFBUXJ2RSxLQUFLczVILEtBQUt0NUgsS0FBS3MxSSxLQUFLdDFJLEtBQUt1MUksS0FBS3YxSSxLQUFLcy9HLE1BQUssRUFBR3QvRyxLQUFLMDRHLEdBQUd6NUUsRUFBRWovQixLQUFLMFAsS0FBSzBsSSxHQUFHcDFJLEtBQUs4TyxRQUFPLEVBQUc5TyxLQUFLdzFJLE1BQU14MUksS0FBS3UxSSxLQUFLdjFJLEtBQUt5MUksS0FBSyxHQUFHejFJLEtBQUswMUksUUFBUSxHQUFHMTFJLEtBQUsyMUksT0FBTyxJQUFJdk0sR0FBR3BwSSxLQUFLNDFJLFVBQVUsSUFBSXhNLEdBQUdwcEksS0FBS2dpSSxXQUFXLEdBQUcsbUJBQW1CNTNGLEVBQUVwcUMsS0FBSzYxSSxPQUFPenJHLEdBQUdwcUMsS0FBSzYxSSxPQUFPLFNBQVM3d0ksR0FBRyxJQUFJeWpJLEVBQUVwbEcsS0FBS3IrQixHQUFHLENBQUMsSUFBSW9sQyxFQUFFcGxDLEVBQUV3RyxNQUFNLEtBQUssT0FBTyxTQUFTeEcsR0FBRyxJQUFJLElBQUlpNkIsRUFBRSxFQUFFQSxFQUFFbUwsRUFBRXJxQyxPQUFPay9CLElBQUksQ0FBQyxJQUFJajZCLEVBQUUsT0FBT0EsRUFBRUEsRUFBRW9sQyxFQUFFbkwsSUFBSSxPQUFPajZCLElBQTNILENBQWdJb2xDLEdBQUdwcUMsS0FBSzYxSSxTQUFTNzFJLEtBQUs2MUksT0FBTzltRyxJQUFJL3VDLEtBQUswRCxNQUFNMUQsS0FBS3UxSSxVQUFLLEVBQU92MUksS0FBSzJLLE9BQU84eEIsR0FBR240QixVQUFVcUcsSUFBSSxXQUFXLElBQUkzRixFQUFFK2tJLEdBQUcvcEksTUFBTSxJQUFJb3FDLEVBQUVwcUMsS0FBS1ksR0FBRyxJQUFJb0UsRUFBRWhGLEtBQUs2MUksT0FBT3J4SSxLQUFLNGxDLEVBQUVBLEdBQUcsTUFBTXBsQyxHQUFHLElBQUloRixLQUFLczFJLEtBQUssTUFBTXR3SSxFQUFFdW9JLEdBQUd2b0ksRUFBRW9sQyxFQUFFLHVCQUF1QnBxQyxLQUFLZ2lJLFdBQVcsS0FBSyxRQUFRaGlJLEtBQUtzNUgsTUFBTW1WLEdBQUd6cEksR0FBR2dsSSxLQUFLaHFJLEtBQUs4MUksY0FBYyxPQUFPOXdJLEdBQUd5M0IsR0FBR240QixVQUFVdWxJLE9BQU8sU0FBUzdrSSxHQUFHLElBQUlvbEMsRUFBRXBsQyxFQUFFMEssR0FBRzFQLEtBQUs0MUksVUFBVXJuRyxJQUFJbkUsS0FBS3BxQyxLQUFLNDFJLFVBQVV2bEksSUFBSSs1QixHQUFHcHFDLEtBQUswMUksUUFBUXAxSSxLQUFLMEUsR0FBR2hGLEtBQUsyMUksT0FBT3BuRyxJQUFJbkUsSUFBSXBsQyxFQUFFMGtJLE9BQU8xcEksUUFBUXk4QixHQUFHbjRCLFVBQVV3eEksWUFBWSxXQUFXLElBQUksSUFBSTl3SSxFQUFFaEYsS0FBS3kxSSxLQUFLMTFJLE9BQU9pRixLQUFLLENBQUMsSUFBSW9sQyxFQUFFcHFDLEtBQUt5MUksS0FBS3p3SSxHQUFHaEYsS0FBSzQxSSxVQUFVcm5HLElBQUluRSxFQUFFMTZCLEtBQUswNkIsRUFBRXUvRixVQUFVM3BJLE1BQU0sSUFBSWkvQixFQUFFai9CLEtBQUsyMUksT0FBTzMxSSxLQUFLMjFJLE9BQU8zMUksS0FBSzQxSSxVQUFVNTFJLEtBQUs0MUksVUFBVTMyRyxFQUFFai9CLEtBQUs0MUksVUFBVXg4RixRQUFRbmEsRUFBRWovQixLQUFLeTFJLEtBQUt6MUksS0FBS3kxSSxLQUFLejFJLEtBQUswMUksUUFBUTExSSxLQUFLMDFJLFFBQVF6MkcsRUFBRWovQixLQUFLMDFJLFFBQVEzMUksT0FBTyxHQUFHMDhCLEdBQUduNEIsVUFBVXUzQixPQUFPLFdBQVc3N0IsS0FBS3UxSSxLQUFLdjFJLEtBQUt3MUksT0FBTSxFQUFHeDFJLEtBQUtzL0csS0FBS3QvRyxLQUFLMDRDLE1BQU0sU0FBUzF6QyxHQUFHLElBQUlvbEMsRUFBRXBsQyxFQUFFMEssR0FBRyxHQUFHLE1BQU1rbEksR0FBR3hxRyxHQUFHLENBQUMsR0FBR3dxRyxHQUFHeHFHLElBQUcsRUFBRzBxRyxHQUFHLENBQUMsSUFBSSxJQUFJNzFHLEVBQUUwMUcsR0FBRzUwSSxPQUFPLEVBQUVrL0IsRUFBRTU5QixJQUFJc3pJLEdBQUcxMUcsR0FBR3Z2QixHQUFHMUssRUFBRTBLLElBQUl1dkIsSUFBSTAxRyxHQUFHenVHLE9BQU9qSCxFQUFFLEVBQUUsRUFBRWo2QixRQUFRMnZJLEdBQUdyMEksS0FBSzBFLEdBQUc2dkksS0FBS0EsSUFBRyxFQUFHdEcsR0FBRzU5RixNQUF2SixDQUE4SjN3QyxPQUFPeThCLEdBQUduNEIsVUFBVW8wQyxJQUFJLFdBQVcsR0FBRzE0QyxLQUFLOE8sT0FBTyxDQUFDLElBQUk5SixFQUFFaEYsS0FBSzJLLE1BQU0sR0FBRzNGLElBQUloRixLQUFLMEQsT0FBT2s3QyxFQUFFNTVDLElBQUloRixLQUFLczVILEtBQUssQ0FBQyxJQUFJbHZGLEVBQUVwcUMsS0FBSzBELE1BQU0sR0FBRzFELEtBQUswRCxNQUFNc0IsRUFBRWhGLEtBQUtzMUksS0FBSyxJQUFJdDFJLEtBQUswNEcsR0FBR2wwRyxLQUFLeEUsS0FBS1ksR0FBR29FLEVBQUVvbEMsR0FBRyxNQUFNcGxDLEdBQUd1b0ksR0FBR3ZvSSxFQUFFaEYsS0FBS1ksR0FBRyx5QkFBeUJaLEtBQUtnaUksV0FBVyxVQUFVaGlJLEtBQUswNEcsR0FBR2wwRyxLQUFLeEUsS0FBS1ksR0FBR29FLEVBQUVvbEMsTUFBTTNOLEdBQUduNEIsVUFBVWs1RSxTQUFTLFdBQVd4OUUsS0FBSzBELE1BQU0xRCxLQUFLMkssTUFBTTNLLEtBQUt3MUksT0FBTSxHQUFJLzRHLEdBQUduNEIsVUFBVXNsSSxPQUFPLFdBQVcsSUFBSSxJQUFJNWtJLEVBQUVoRixLQUFLeTFJLEtBQUsxMUksT0FBT2lGLEtBQUtoRixLQUFLeTFJLEtBQUt6d0ksR0FBRzRrSSxVQUFVbnRHLEdBQUduNEIsVUFBVXl4SSxTQUFTLFdBQVcsR0FBRy8xSSxLQUFLOE8sT0FBTyxDQUFDOU8sS0FBS1ksR0FBR28xSSxtQkFBbUI3eEYsRUFBRW5rRCxLQUFLWSxHQUFHeTBJLFVBQVVyMUksTUFBTSxJQUFJLElBQUlnRixFQUFFaEYsS0FBS3kxSSxLQUFLMTFJLE9BQU9pRixLQUFLaEYsS0FBS3kxSSxLQUFLendJLEdBQUcya0ksVUFBVTNwSSxNQUFNQSxLQUFLOE8sUUFBTyxJQUFLLElBQUltbkksR0FBRyxDQUFDdjRHLFlBQVcsRUFBR0MsY0FBYSxFQUFHaHpCLElBQUlva0MsRUFBRS9qQyxJQUFJK2pDLEdBQUcsU0FBU21uRyxHQUFHbHhJLEVBQUVvbEMsRUFBRW5MLEdBQUdnM0csR0FBR3RySSxJQUFJLFdBQVcsT0FBTzNLLEtBQUtvcUMsR0FBR25MLElBQUlnM0csR0FBR2pySSxJQUFJLFNBQVNoRyxHQUFHaEYsS0FBS29xQyxHQUFHbkwsR0FBR2o2QixHQUFHWCxPQUFPdW9DLGVBQWU1bkMsRUFBRWk2QixFQUFFZzNHLElBQXVuQyxJQUFJRSxHQUFHLENBQUNaLE1BQUssR0FBSSxTQUFTYSxHQUFHcHhJLEVBQUVvbEMsRUFBRW5MLEdBQUcsSUFBSU0sR0FBRzA4RixLQUFLLG1CQUFtQmg5RixHQUFHZzNHLEdBQUd0ckksSUFBSTQwQixFQUFFODJHLEdBQUdqc0csR0FBR2tzRyxHQUFHcjNHLEdBQUdnM0csR0FBR2pySSxJQUFJK2pDLElBQUlrbkcsR0FBR3RySSxJQUFJczBCLEVBQUV0MEIsSUFBSTQwQixJQUFHLElBQUtOLEVBQUUzN0IsTUFBTSt5SSxHQUFHanNHLEdBQUdrc0csR0FBR3IzRyxFQUFFdDBCLEtBQUtva0MsRUFBRWtuRyxHQUFHanJJLElBQUlpMEIsRUFBRWowQixLQUFLK2pDLEdBQUcxcUMsT0FBT3VvQyxlQUFlNW5DLEVBQUVvbEMsRUFBRTZyRyxJQUFJLFNBQVNJLEdBQUdyeEksR0FBRyxPQUFPLFdBQVcsSUFBSW9sQyxFQUFFcHFDLEtBQUt1MkksbUJBQW1CdjJJLEtBQUt1Mkksa0JBQWtCdnhJLEdBQUcsR0FBR29sQyxFQUFFLE9BQU9BLEVBQUVvckcsT0FBT3ByRyxFQUFFb3pDLFdBQVdnc0QsR0FBR2hoSSxRQUFRNGhDLEVBQUV3L0YsU0FBU3gvRixFQUFFMW1DLE9BQU8sU0FBUzR5SSxHQUFHdHhJLEdBQUcsT0FBTyxXQUFXLE9BQU9BLEVBQUVSLEtBQUt4RSxLQUFLQSxPQUFPLFNBQVN1N0MsR0FBR3YyQyxFQUFFb2xDLEVBQUVuTCxFQUFFTSxHQUFHLE9BQU9ILEVBQUVILEtBQUtNLEVBQUVOLEVBQUVBLEVBQUVBLEVBQUU3RCxTQUFTLGlCQUFpQjZELElBQUlBLEVBQUVqNkIsRUFBRWk2QixJQUFJajZCLEVBQUVvMEgsT0FBT2h2RixFQUFFbkwsRUFBRU0sR0FBRyxJQUFJaTNHLEdBQUcsRUFBRSxTQUFTeGhCLEdBQUdod0gsR0FBRyxJQUFJb2xDLEVBQUVwbEMsRUFBRXVCLFFBQVEsR0FBR3ZCLEVBQUV5eEksTUFBTSxDQUFDLElBQUl4M0csRUFBRSsxRixHQUFHaHdILEVBQUV5eEksT0FBTyxHQUFHeDNHLElBQUlqNkIsRUFBRTB4SSxhQUFhLENBQUMxeEksRUFBRTB4SSxhQUFhejNHLEVBQUUsSUFBSU0sRUFBRSxTQUFTdjZCLEdBQUcsSUFBSW9sQyxFQUFFbkwsRUFBRWo2QixFQUFFdUIsUUFBUWc1QixFQUFFdjZCLEVBQUUyeEksY0FBYyxJQUFJLElBQUlseEksS0FBS3c1QixFQUFFQSxFQUFFeDVCLEtBQUs4NUIsRUFBRTk1QixLQUFLMmtDLElBQUlBLEVBQUUsSUFBSUEsRUFBRTNrQyxHQUFHdzVCLEVBQUV4NUIsSUFBSSxPQUFPMmtDLEVBQXpHLENBQTRHcGxDLEdBQUd1NkIsR0FBR3VWLEVBQUU5dkMsRUFBRTR4SSxjQUFjcjNHLElBQUk2SyxFQUFFcGxDLEVBQUV1QixRQUFRcW1JLEdBQUczdEcsRUFBRWo2QixFQUFFNHhJLGdCQUFnQmp2SSxPQUFPeWlDLEVBQUVwcEMsV0FBV29wQyxFQUFFemlDLE1BQU0zQyxJQUFJLE9BQU9vbEMsRUFBRSxTQUFTeXNHLEdBQUc3eEksR0FBR2hGLEtBQUs4MkksTUFBTTl4SSxHQUEycUIsU0FBUyt4SSxHQUFHL3hJLEdBQUcsT0FBT0EsSUFBSUEsRUFBRW0wRCxLQUFLNXlELFFBQVFvQixNQUFNM0MsRUFBRWl5QyxLQUFLLFNBQVMrL0YsR0FBR2h5SSxFQUFFb2xDLEdBQUcsT0FBT2grQixNQUFNcEcsUUFBUWhCLEdBQUdBLEVBQUVtM0IsUUFBUWlPLElBQUksRUFBRSxpQkFBaUJwbEMsRUFBRUEsRUFBRXdHLE1BQU0sS0FBSzJ3QixRQUFRaU8sSUFBSSxHQUFHbkwsRUFBRWo2QixFQUFFLG9CQUFvQm02QixFQUFFMzZCLEtBQUt5NkIsSUFBSWo2QixFQUFFcStCLEtBQUsrRyxJQUFJLElBQUluTCxFQUFFLFNBQVNnNEcsR0FBR2p5SSxFQUFFb2xDLEdBQUcsSUFBSW5MLEVBQUVqNkIsRUFBRTFCLE1BQU1pOEIsRUFBRXY2QixFQUFFWSxLQUFLSCxFQUFFVCxFQUFFcXRJLE9BQU8sSUFBSSxJQUFJenpGLEtBQUszZixFQUFFLENBQUMsSUFBSUUsRUFBRUYsRUFBRTJmLEdBQUcsR0FBR3pmLEVBQUUsQ0FBQyxJQUFJQyxFQUFFMjNHLEdBQUc1M0csRUFBRW9yRyxrQkFBa0JuckcsSUFBSWdMLEVBQUVoTCxJQUFJODNHLEdBQUdqNEcsRUFBRTJmLEVBQUVyZixFQUFFOTVCLEtBQUssU0FBU3l4SSxHQUFHbHlJLEVBQUVvbEMsRUFBRW5MLEVBQUVNLEdBQUcsSUFBSTk1QixFQUFFVCxFQUFFb2xDLElBQUkza0MsR0FBRzg1QixHQUFHOTVCLEVBQUV3eEMsTUFBTTFYLEVBQUUwWCxLQUFLeHhDLEVBQUUra0ksa0JBQWtCclIsV0FBV24wSCxFQUFFb2xDLEdBQUcsS0FBSytaLEVBQUVsbEIsRUFBRW1MLElBQUksU0FBU0EsR0FBR0EsRUFBRTlsQyxVQUFVd3lJLE1BQU0sU0FBUzFzRyxHQUFHLElBQUluTCxFQUFFai9CLEtBQUtpL0IsRUFBRWs0RyxLQUFLWCxLQUFLdjNHLEVBQUUrc0csUUFBTyxFQUFHNWhHLEdBQUdBLEVBQUUybkcsYUFBYSxTQUFTL3NJLEVBQUVvbEMsR0FBRyxJQUFJbkwsRUFBRWo2QixFQUFFb3JILFNBQVMvckgsT0FBT29vQyxPQUFPem5DLEVBQUUwOEIsWUFBWW43QixTQUFTZzVCLEVBQUU2SyxFQUFFNG5HLGFBQWEveUcsRUFBRXVVLE9BQU9wSixFQUFFb0osT0FBT3ZVLEVBQUUreUcsYUFBYXp5RyxFQUFFLElBQUk5NUIsRUFBRTg1QixFQUFFZ3JHLGlCQUFpQnRyRyxFQUFFa3VHLFVBQVUxbkksRUFBRTBuSSxVQUFVbHVHLEVBQUV3ekcsaUJBQWlCaHRJLEVBQUU0OEMsVUFBVXBqQixFQUFFbXpHLGdCQUFnQjNzSSxFQUFFaVUsU0FBU3VsQixFQUFFbTRHLGNBQWMzeEksRUFBRXd4QyxJQUFJN00sRUFBRXIxQixTQUFTa3FCLEVBQUVscUIsT0FBT3ExQixFQUFFcjFCLE9BQU9rcUIsRUFBRStrRyxnQkFBZ0I1NUYsRUFBRTQ1RixpQkFBNVMsQ0FBOFQva0csRUFBRW1MLEdBQUduTCxFQUFFbXhGLFNBQVN3YyxHQUFHNVgsR0FBRy8xRixFQUFFeUMsYUFBYTBJLEdBQUcsR0FBR25MLEdBQUdBLEVBQUV1eEcsYUFBYXZ4RyxFQUFFQSxFQUFFcStGLE1BQU1yK0YsRUFBRSxTQUFTajZCLEdBQUcsSUFBSW9sQyxFQUFFcGxDLEVBQUVvckgsU0FBU254RixFQUFFbUwsRUFBRW9KLE9BQU8sR0FBR3ZVLElBQUltTCxFQUFFMHBHLFNBQVMsQ0FBQyxLQUFLNzBHLEVBQUVteEYsU0FBUzBqQixVQUFVNzBHLEVBQUV1dUcsU0FBU3Z1RyxFQUFFQSxFQUFFdXVHLFFBQVF2dUcsRUFBRWkwRyxVQUFVNXlJLEtBQUswRSxHQUFHQSxFQUFFd29JLFFBQVF2dUcsRUFBRWo2QixFQUFFNHJILE1BQU0zeEYsRUFBRUEsRUFBRTJ4RixNQUFNNXJILEVBQUVBLEVBQUVrdUksVUFBVSxHQUFHbHVJLEVBQUVxeUksTUFBTSxHQUFHcnlJLEVBQUVtd0ksU0FBUyxLQUFLbndJLEVBQUU4dEksVUFBVSxLQUFLOXRJLEVBQUVndUksaUJBQWdCLEVBQUdodUksRUFBRTR0SSxZQUFXLEVBQUc1dEksRUFBRTRzSSxjQUFhLEVBQUc1c0ksRUFBRWd4SSxtQkFBa0IsRUFBdFMsQ0FBMFMvMkcsR0FBRyxTQUFTajZCLEdBQUdBLEVBQUVpN0MsUUFBUTU3QyxPQUFPb29DLE9BQU8sTUFBTXpuQyxFQUFFMHZJLGVBQWMsRUFBRyxJQUFJdHFHLEVBQUVwbEMsRUFBRW9ySCxTQUFTcWlCLGlCQUFpQnJvRyxHQUFHc29HLEdBQUcxdEksRUFBRW9sQyxHQUF2RyxDQUEyR25MLEdBQUcsU0FBU21MLEdBQUdBLEVBQUVpb0csT0FBTyxLQUFLam9HLEVBQUVrbUcsYUFBYSxLQUFLLElBQUlyeEcsRUFBRW1MLEVBQUVnbUYsU0FBUzd3RixFQUFFNkssRUFBRXE2RixPQUFPeGxHLEVBQUUreUcsYUFBYXZzSSxFQUFFODVCLEdBQUdBLEVBQUU2aUIsUUFBUWhZLEVBQUU4bEcsT0FBT1gsR0FBR3R3RyxFQUFFbXpHLGdCQUFnQjNzSSxHQUFHMmtDLEVBQUU2bEcsYUFBYWpySSxFQUFFb2xDLEVBQUVxUixHQUFHLFNBQVN6MkMsRUFBRWk2QixFQUFFTSxFQUFFOTVCLEdBQUcsT0FBTytySSxHQUFHcG5HLEVBQUVwbEMsRUFBRWk2QixFQUFFTSxFQUFFOTVCLEdBQUUsSUFBSzJrQyxFQUFFaXpGLGVBQWUsU0FBU3I0SCxFQUFFaTZCLEVBQUVNLEVBQUU5NUIsR0FBRyxPQUFPK3JJLEdBQUdwbkcsRUFBRXBsQyxFQUFFaTZCLEVBQUVNLEVBQUU5NUIsR0FBRSxJQUFLLElBQUltNUMsRUFBRXJmLEdBQUdBLEVBQUU3K0IsS0FBSzRwQyxHQUFHRixFQUFFLFNBQVN3VSxHQUFHQSxFQUFFZ3dFLE9BQU81cEgsRUFBRSxNQUFLLEdBQUlzbEMsR0FBR0YsRUFBRSxhQUFhbkwsRUFBRXd6RyxrQkFBa0J6dEksRUFBRSxNQUFLLEdBQXhXLENBQTZXaTZCLEdBQUc0ekcsR0FBRzV6RyxFQUFFLGdCQUFnQixTQUFTajZCLEdBQUcsSUFBSW9sQyxFQUFFaWxHLEdBQUdycUksRUFBRW9ySCxTQUFTcWMsT0FBT3puSSxHQUFHb2xDLElBQUlrM0UsSUFBRyxHQUFJajlHLE9BQU91QixLQUFLd2tDLEdBQUc3a0MsU0FBUSxTQUFTMDVCLEdBQUdxTCxHQUFHdGxDLEVBQUVpNkIsRUFBRW1MLEVBQUVuTCxPQUFNcWlGLElBQUcsSUFBMUcsQ0FBZ0hyaUYsR0FBbDdJLFNBQVlqNkIsR0FBR0EsRUFBRXF3SSxVQUFVLEdBQUcsSUFBSWpyRyxFQUFFcGxDLEVBQUVvckgsU0FBU2htRixFQUFFNU0sT0FBTyxTQUFTeDRCLEVBQUVvbEMsR0FBRyxJQUFJbkwsRUFBRWo2QixFQUFFb3JILFNBQVMrYyxXQUFXLEdBQUc1dEcsRUFBRXY2QixFQUFFb29JLE9BQU8sR0FBRzNuSSxFQUFFVCxFQUFFb3JILFNBQVNvaUIsVUFBVSxHQUFHeHRJLEVBQUV3b0ksU0FBU2xzQixJQUFHLEdBQUksSUFBSTFpRSxFQUFFLFNBQVNBLEdBQUduNUMsRUFBRW5GLEtBQUtzK0MsR0FBRyxJQUFJemYsRUFBRTh0RyxHQUFHcnVGLEVBQUV4VSxFQUFFbkwsRUFBRWo2QixHQUFHc2xDLEdBQUcvSyxFQUFFcWYsRUFBRXpmLEdBQUd5ZixLQUFLNTVDLEdBQUdreEksR0FBR2x4SSxFQUFFLFNBQVM0NUMsSUFBSSxJQUFJLElBQUl6ZixLQUFLaUwsRUFBRXdVLEVBQUV6ZixHQUFHbWlGLElBQUcsR0FBaE4sQ0FBcU50OEcsRUFBRW9sQyxFQUFFNU0sT0FBTzRNLEVBQUU1VCxTQUFTLFNBQVN4eEIsRUFBRW9sQyxHQUFvQixJQUFJLElBQUluTCxLQUF6Qmo2QixFQUFFb3JILFNBQVM1eUYsTUFBbUI0TSxFQUFFcGxDLEVBQUVpNkIsR0FBRyxtQkFBbUJtTCxFQUFFbkwsR0FBRzhQLEVBQUVyUCxFQUFFMEssRUFBRW5MLEdBQUdqNkIsR0FBcEYsQ0FBd0ZBLEVBQUVvbEMsRUFBRTVULFNBQVM0VCxFQUFFMXBDLEtBQUssU0FBU3NFLEdBQUcsSUFBSW9sQyxFQUFFcGxDLEVBQUVvckgsU0FBUzF2SCxLQUFLMCtCLEVBQUVnTCxFQUFFcGxDLEVBQUVzeUksTUFBTSxtQkFBbUJsdEcsRUFBRSxTQUFTcGxDLEVBQUVvbEMsR0FBRzIvRixLQUFLLElBQUksT0FBTy9rSSxFQUFFUixLQUFLNGxDLEVBQUVBLEdBQUcsTUFBTXBsQyxHQUFHLE9BQU91b0ksR0FBR3ZvSSxFQUFFb2xDLEVBQUUsVUFBVSxHQUFHLFFBQVE0L0YsTUFBdEYsQ0FBNkY1L0YsRUFBRXBsQyxHQUFHb2xDLEdBQUcsTUFBTUEsRUFBRSxJQUE0RSxJQUF4RSxJQUErS2pMLEVBQTNLRixFQUFFNTZCLE9BQU91QixLQUFLd2tDLEdBQUc3SyxFQUFFdjZCLEVBQUVvckgsU0FBUzV5RixNQUFNLzNCLEdBQUdULEVBQUVvckgsU0FBUzU1RixRQUFReUksRUFBRWwvQixRQUFhMEYsS0FBSyxDQUFDLElBQUltNUMsRUFBRTNmLEVBQUV4NUIsR0FBRzg1QixHQUFHSSxFQUFFSixFQUFFcWYsSUFBYyxNQUFNemYsR0FBR3lmLEVBQUUsSUFBSXBmLFdBQVcsS0FBSyxLQUFLTCxHQUFHKzJHLEdBQUdseEksRUFBRSxRQUFRNDVDLEdBQVVrdEYsR0FBRzFoRyxHQUFFLEdBQTFXLENBQStXcGxDLEdBQUc4bUksR0FBRzltSSxFQUFFc3lJLE1BQU0sSUFBRyxHQUFJbHRHLEVBQUVxd0IsVUFBVSxTQUFTejFELEVBQUVvbEMsR0FBRyxJQUFJbkwsRUFBRWo2QixFQUFFdXhJLGtCQUFrQmx5SSxPQUFPb29DLE9BQU8sTUFBTWxOLEVBQUUwOEYsS0FBSyxJQUFJLElBQUl4MkgsS0FBSzJrQyxFQUFFLENBQUMsSUFBSXdVLEVBQUV4VSxFQUFFM2tDLEdBQUcwNUIsRUFBRSxtQkFBbUJ5ZixFQUFFQSxFQUFFQSxFQUFFajBDLElBQUk0MEIsSUFBSU4sRUFBRXg1QixHQUFHLElBQUlnM0IsR0FBR3ozQixFQUFFbTZCLEdBQUc0UCxFQUFFQSxFQUFFb25HLEtBQUsxd0ksS0FBS1QsR0FBR294SSxHQUFHcHhJLEVBQUVTLEVBQUVtNUMsSUFBMUssQ0FBK0s1NUMsRUFBRW9sQyxFQUFFcXdCLFVBQVVyd0IsRUFBRS8rQixPQUFPKytCLEVBQUUvK0IsUUFBUTA5SCxJQUFHLFNBQVMvakksRUFBRW9sQyxHQUFHLElBQUksSUFBSW5MLEtBQUttTCxFQUFFLENBQUMsSUFBSTdLLEVBQUU2SyxFQUFFbkwsR0FBRyxHQUFHN3lCLE1BQU1wRyxRQUFRdTVCLEdBQUcsSUFBSSxJQUFJOTVCLEVBQUUsRUFBRUEsRUFBRTg1QixFQUFFeC9CLE9BQU8wRixJQUFJODFDLEdBQUd2MkMsRUFBRWk2QixFQUFFTSxFQUFFOTVCLFNBQVM4MUMsR0FBR3YyQyxFQUFFaTZCLEVBQUVNLElBQWpILENBQXNIdjZCLEVBQUVvbEMsRUFBRS8rQixPQUF5MEdrc0ksQ0FBR3Q0RyxHQUFHLFNBQVNqNkIsR0FBRyxJQUFJb2xDLEVBQUVwbEMsRUFBRW9ySCxTQUFTc2MsUUFBUXRpRyxJQUFJcGxDLEVBQUVzcUksVUFBVSxtQkFBbUJsbEcsRUFBRUEsRUFBRTVsQyxLQUFLUSxHQUFHb2xDLEdBQXBGLENBQXdGbkwsR0FBRzR6RyxHQUFHNXpHLEVBQUUsV0FBV0EsRUFBRW14RixTQUFTdHZILElBQUltK0IsRUFBRWt6RyxPQUFPbHpHLEVBQUVteEYsU0FBU3R2SCxLQUE3Z0QsQ0FBbWhEKzFJLElBQUksU0FBUzd4SSxHQUFvRlgsT0FBT3VvQyxlQUFlNW5DLEVBQUVWLFVBQVUsUUFBN0csQ0FBQ3FHLElBQUksV0FBVyxPQUFPM0ssS0FBS3MzSSxTQUE0Rmp6SSxPQUFPdW9DLGVBQWU1bkMsRUFBRVYsVUFBVSxTQUFwSCxDQUFDcUcsSUFBSSxXQUFXLE9BQU8zSyxLQUFLb3RJLFVBQW9HcG9JLEVBQUVWLFVBQVVpMUgsS0FBSzJTLEdBQUdsbkksRUFBRVYsVUFBVWt6SSxRQUFRckwsR0FBR25uSSxFQUFFVixVQUFVODBILE9BQU8sU0FBU3AwSCxFQUFFb2xDLEVBQUVuTCxHQUFHLEdBQUdHLEVBQUVnTCxHQUFHLE9BQU9tUixHQUFHdjdDLEtBQUtnRixFQUFFb2xDLEVBQUVuTCxJQUFJQSxFQUFFQSxHQUFHLElBQUlxMkcsTUFBSyxFQUFHLElBQUkvMUcsRUFBRSxJQUFJOUMsR0FBR3o4QixLQUFLZ0YsRUFBRW9sQyxFQUFFbkwsR0FBRyxHQUFHQSxFQUFFNjVFLFVBQVUsSUFBSTF1RSxFQUFFNWxDLEtBQUt4RSxLQUFLdS9CLEVBQUU3N0IsT0FBTyxNQUFNc0IsR0FBR3VvSSxHQUFHdm9JLEVBQUVoRixLQUFLLG1DQUFtQ3UvQixFQUFFeWlHLFdBQVcsS0FBSyxPQUFPLFdBQVd6aUcsRUFBRXcyRyxhQUFuZCxDQUFpZWMsSUFBSSxTQUFTN3hJLEdBQUcsSUFBSW9sQyxFQUFFLFNBQVNwbEMsRUFBRVYsVUFBVXF2SSxJQUFJLFNBQVMzdUksRUFBRWk2QixHQUFHLElBQUlNLEVBQUV2L0IsS0FBSyxHQUFHb00sTUFBTXBHLFFBQVFoQixHQUFHLElBQUksSUFBSVMsRUFBRSxFQUFFbTVDLEVBQUU1NUMsRUFBRWpGLE9BQU8wRixFQUFFbTVDLEVBQUVuNUMsSUFBSTg1QixFQUFFbzBHLElBQUkzdUksRUFBRVMsR0FBR3c1QixRQUFRTSxFQUFFMGdCLFFBQVFqN0MsS0FBS3U2QixFQUFFMGdCLFFBQVFqN0MsR0FBRyxLQUFLMUUsS0FBSzIrQixHQUFHbUwsRUFBRS9HLEtBQUtyK0IsS0FBS3U2QixFQUFFbTFHLGVBQWMsR0FBSSxPQUFPbjFHLEdBQUd2NkIsRUFBRVYsVUFBVW16SSxNQUFNLFNBQVN6eUksRUFBRW9sQyxHQUFHLElBQUluTCxFQUFFai9CLEtBQUssU0FBU3UvQixJQUFJTixFQUFFczFHLEtBQUt2dkksRUFBRXU2QixHQUFHNkssRUFBRXpOLE1BQU1zQyxFQUFFckMsV0FBVyxPQUFPMkMsRUFBRTlDLEdBQUcyTixFQUFFbkwsRUFBRTAwRyxJQUFJM3VJLEVBQUV1NkIsR0FBR04sR0FBR2o2QixFQUFFVixVQUFVaXdJLEtBQUssU0FBU3Z2SSxFQUFFb2xDLEdBQUcsSUFBSW5MLEVBQUVqL0IsS0FBSyxJQUFJNDhCLFVBQVU3OEIsT0FBTyxPQUFPay9CLEVBQUVnaEIsUUFBUTU3QyxPQUFPb29DLE9BQU8sTUFBTXhOLEVBQUUsR0FBRzd5QixNQUFNcEcsUUFBUWhCLEdBQUcsQ0FBQyxJQUFJLElBQUl1NkIsRUFBRSxFQUFFOTVCLEVBQUVULEVBQUVqRixPQUFPdy9CLEVBQUU5NUIsRUFBRTg1QixJQUFJTixFQUFFczFHLEtBQUt2dkksRUFBRXU2QixHQUFHNkssR0FBRyxPQUFPbkwsRUFBRSxJQUFJMmYsRUFBRXpmLEVBQUVGLEVBQUVnaEIsUUFBUWo3QyxHQUFHLElBQUltNkIsRUFBRSxPQUFPRixFQUFFLElBQUltTCxFQUFFLE9BQU9uTCxFQUFFZ2hCLFFBQVFqN0MsR0FBRyxLQUFLaTZCLEVBQUUsSUFBSSxJQUFJRyxFQUFFRCxFQUFFcC9CLE9BQU9xL0IsS0FBSyxJQUFJd2YsRUFBRXpmLEVBQUVDLE1BQU1nTCxHQUFHd1UsRUFBRW5pQixLQUFLMk4sRUFBRSxDQUFDakwsRUFBRStHLE9BQU85RyxFQUFFLEdBQUcsTUFBTSxPQUFPSCxHQUFHajZCLEVBQUVWLFVBQVU4OEgsTUFBTSxTQUFTcDhILEdBQUcsSUFBSW9sQyxFQUFFcHFDLEtBQUtpZ0QsUUFBUWo3QyxHQUFHLEdBQUdvbEMsRUFBRSxDQUFDQSxFQUFFQSxFQUFFcnFDLE9BQU8sRUFBRWlnQyxFQUFFb0ssR0FBR0EsRUFBRSxJQUFJLElBQUluTCxFQUFFZSxFQUFFcEQsVUFBVSxHQUFHMkMsRUFBRSxzQkFBc0J2NkIsRUFBRSxJQUFJUyxFQUFFLEVBQUVtNUMsRUFBRXhVLEVBQUVycUMsT0FBTzBGLEVBQUVtNUMsRUFBRW41QyxJQUFJa29JLEdBQUd2akcsRUFBRTNrQyxHQUFHekYsS0FBS2kvQixFQUFFai9CLEtBQUt1L0IsR0FBRyxPQUFPdi9CLE1BQXAxQixDQUEyMUI2MkksSUFBSSxTQUFTN3hJLEdBQUdBLEVBQUVWLFVBQVVvekksUUFBUSxTQUFTMXlJLEVBQUVvbEMsR0FBRyxJQUFJbkwsRUFBRWovQixLQUFLdS9CLEVBQUVOLEVBQUVnaUYsSUFBSXg3RyxFQUFFdzVCLEVBQUVvekcsT0FBT3p6RixFQUFFNjFGLEdBQUd4MUcsR0FBR0EsRUFBRW96RyxPQUFPcnRJLEVBQUVpNkIsRUFBRWdpRixJQUFJeDdHLEVBQUV3NUIsRUFBRTA0RyxVQUFVbHlJLEVBQUVULEdBQUdpNkIsRUFBRTA0RyxVQUFVMTRHLEVBQUVnaUYsSUFBSWo4RyxFQUFFb2xDLEdBQUUsR0FBSXdVLElBQUlyZixJQUFJQSxFQUFFcTRHLFFBQVEsTUFBTTM0RyxFQUFFZ2lGLE1BQU1oaUYsRUFBRWdpRixJQUFJMjJCLFFBQVEzNEcsR0FBR0EsRUFBRXdsRyxRQUFReGxHLEVBQUV1dUcsU0FBU3Z1RyxFQUFFd2xHLFNBQVN4bEcsRUFBRXV1RyxRQUFRNkUsU0FBU3B6RyxFQUFFdXVHLFFBQVF2c0IsSUFBSWhpRixFQUFFZ2lGLE1BQU1qOEcsRUFBRVYsVUFBVSswSCxhQUFhLFdBQVdyNUgsS0FBS20xSSxVQUFVbjFJLEtBQUttMUksU0FBU3Q1RyxVQUFVNzJCLEVBQUVWLFVBQVU2MEgsU0FBUyxXQUFXLElBQUluMEgsRUFBRWhGLEtBQUssSUFBSWdGLEVBQUVneEksa0JBQWtCLENBQUNuRCxHQUFHN3RJLEVBQUUsaUJBQWlCQSxFQUFFZ3hJLG1CQUFrQixFQUFHLElBQUk1ckcsRUFBRXBsQyxFQUFFd29JLFNBQVNwakcsR0FBR0EsRUFBRTRyRyxtQkFBbUJoeEksRUFBRW9ySCxTQUFTMGpCLFVBQVUzdkYsRUFBRS9aLEVBQUU4b0csVUFBVWx1SSxHQUFHQSxFQUFFbXdJLFVBQVVud0ksRUFBRW13SSxTQUFTWSxXQUFXLElBQUksSUFBSTkyRyxFQUFFajZCLEVBQUVxd0ksVUFBVXQxSSxPQUFPay9CLEtBQUtqNkIsRUFBRXF3SSxVQUFVcDJHLEdBQUc4MkcsV0FBVy93SSxFQUFFc3lJLE1BQU0vTCxRQUFRdm1JLEVBQUVzeUksTUFBTS9MLE9BQU9LLFVBQVU1bUksRUFBRTRzSSxjQUFhLEVBQUc1c0ksRUFBRTJ5SSxVQUFVM3lJLEVBQUVxdEksT0FBTyxNQUFNUSxHQUFHN3RJLEVBQUUsYUFBYUEsRUFBRXV2SSxPQUFPdnZJLEVBQUVpOEcsTUFBTWo4RyxFQUFFaThHLElBQUkyMkIsUUFBUSxNQUFNNXlJLEVBQUV5L0gsU0FBU3ovSCxFQUFFeS9ILE9BQU9qeEYsT0FBTyxRQUE3eEIsQ0FBc3lCcWpHLElBQUksU0FBUzd4SSxHQUFHOHJJLEdBQUc5ckksRUFBRVYsV0FBV1UsRUFBRVYsVUFBVXN0SCxVQUFVLFNBQVM1c0gsR0FBRyxPQUFPdXBJLEdBQUd2cEksRUFBRWhGLE9BQU9nRixFQUFFVixVQUFVMjFILFFBQVEsV0FBVyxJQUFJajFILEVBQUVvbEMsRUFBRXBxQyxLQUFLaS9CLEVBQUVtTCxFQUFFZ21GLFNBQVM3d0YsRUFBRU4sRUFBRWxxQixPQUFPdFAsRUFBRXc1QixFQUFFK3lHLGFBQWF2c0ksSUFBSTJrQyxFQUFFNmxHLGFBQWFULEdBQUcvcEksRUFBRS9FLEtBQUsweUgsWUFBWWhwRixFQUFFOGxHLE9BQU85bEcsRUFBRTZsRyxlQUFlN2xHLEVBQUVxNkYsT0FBT2gvSCxFQUFFLElBQUkrdEksR0FBR3BwRyxFQUFFcGxDLEVBQUV1NkIsRUFBRS82QixLQUFLNGxDLEVBQUVvbUcsYUFBYXBtRyxFQUFFaXpGLGdCQUFnQixNQUFNcCtGLEdBQUdzdUcsR0FBR3R1RyxFQUFFbUwsRUFBRSxVQUFVcGxDLEVBQUVvbEMsRUFBRWlvRyxPQUFPLFFBQVFtQixHQUFHLEtBQUssT0FBT3BuSSxNQUFNcEcsUUFBUWhCLElBQUksSUFBSUEsRUFBRWpGLFNBQVNpRixFQUFFQSxFQUFFLElBQUlBLGFBQWFpbEksS0FBS2psSSxFQUFFbW1JLE1BQU1ubUksRUFBRXd1QyxPQUFPL3RDLEVBQUVULEdBQWpiLENBQXFiNnhJLElBQUksSUFBSWdCLEdBQUcsQ0FBQ3YzRyxPQUFPem9CLE9BQU96TCxPQUFPMHJJLEdBQUcsQ0FBQ0MsVUFBVSxDQUFDcHdJLEtBQUssYUFBYW1zSSxVQUFTLEVBQUd0MkcsTUFBTSxDQUFDdzZHLFFBQVFILEdBQUdJLFFBQVFKLEdBQUd6M0csSUFBSSxDQUFDRSxPQUFPaHhCLFNBQVM0b0ksUUFBUSxXQUFXbDRJLEtBQUtzRCxNQUFNZSxPQUFPb29DLE9BQU8sTUFBTXpzQyxLQUFLNEYsS0FBSyxJQUFJdXlJLFVBQVUsV0FBVyxJQUFJLElBQUluekksS0FBS2hGLEtBQUtzRCxNQUFNNHpJLEdBQUdsM0ksS0FBS3NELE1BQU0wQixFQUFFaEYsS0FBSzRGLE9BQU93eUksUUFBUSxXQUFXLElBQUlwekksRUFBRWhGLEtBQUtBLEtBQUtvNUgsT0FBTyxXQUFVLFNBQVNodkYsR0FBRzZzRyxHQUFHanlJLEdBQUUsU0FBU0EsR0FBRyxPQUFPZ3lJLEdBQUc1c0csRUFBRXBsQyxTQUFPaEYsS0FBS281SCxPQUFPLFdBQVUsU0FBU2h2RixHQUFHNnNHLEdBQUdqeUksR0FBRSxTQUFTQSxHQUFHLE9BQU9neUksR0FBRzVzRyxFQUFFcGxDLFVBQVErUCxPQUFPLFdBQVcsSUFBSS9QLEVBQUVoRixLQUFLa3dJLE9BQU8xekcsUUFBUTROLEVBQUVncUcsR0FBR3B2SSxHQUFHaTZCLEVBQUVtTCxHQUFHQSxFQUFFbWdHLGlCQUFpQixHQUFHdHJHLEVBQUUsQ0FBQyxJQUFJTSxFQUFFdzNHLEdBQUc5M0csR0FBR3g1QixFQUFFekYsS0FBS2c0SSxRQUFRcDVGLEVBQUU1K0MsS0FBS2k0SSxRQUFRLEdBQUd4eUksS0FBSzg1QixJQUFJeTNHLEdBQUd2eEksRUFBRTg1QixLQUFLcWYsR0FBR3JmLEdBQUd5M0csR0FBR3A0RixFQUFFcmYsR0FBRyxPQUFPNkssRUFBRSxJQUFJakwsRUFBRW4vQixLQUFLc0QsTUFBTTg3QixFQUFFcC9CLEtBQUs0RixLQUFLazZCLEVBQUUsTUFBTXNLLEVBQUVsa0MsSUFBSSs0QixFQUFFazZCLEtBQUtrNkUsS0FBS3AwRyxFQUFFZ1ksSUFBSSxLQUFLaFksRUFBRWdZLElBQUksSUFBSTdNLEVBQUVsa0MsSUFBSWk1QixFQUFFVyxJQUFJc0ssRUFBRW9nRyxrQkFBa0JyckcsRUFBRVcsR0FBRzBxRyxrQkFBa0JybUYsRUFBRS9rQixFQUFFVSxHQUFHVixFQUFFOStCLEtBQUt3L0IsS0FBS1gsRUFBRVcsR0FBR3NLLEVBQUVoTCxFQUFFOStCLEtBQUt3L0IsR0FBRzkvQixLQUFLb2dDLEtBQUtoQixFQUFFci9CLE9BQU9zMEIsU0FBU3IwQixLQUFLb2dDLE1BQU04MkcsR0FBRy8zRyxFQUFFQyxFQUFFLEdBQUdBLEVBQUVwL0IsS0FBS3F5SSxTQUFTam9HLEVBQUUxcEMsS0FBS214SSxXQUFVLEVBQUcsT0FBT3puRyxHQUFHcGxDLEdBQUdBLEVBQUUsT0FBTyxTQUFTQSxHQUFHLElBQUlvbEMsRUFBRSxDQUFDei9CLElBQUksV0FBVyxPQUFPZ2tDLElBQUl0cUMsT0FBT3VvQyxlQUFlNW5DLEVBQUUsU0FBU29sQyxHQUFHcGxDLEVBQUVxekksS0FBSyxDQUFDbjNGLEtBQUtvb0YsR0FBR253RCxPQUFPcmtDLEVBQUV3akcsYUFBYTFMLEdBQUcyTCxlQUFlanVHLElBQUl0bEMsRUFBRWdHLElBQUlraEksR0FBR2xuSSxFQUFFd3pJLE9BQU9yTSxHQUFHbm5JLEVBQUU0dUMsU0FBUzI2RixHQUFHdnBJLEVBQUV5ekksV0FBVyxTQUFTenpJLEdBQUcsT0FBTzhtSSxHQUFHOW1JLEdBQUdBLEdBQUdBLEVBQUV1QixRQUFRbEMsT0FBT29vQyxPQUFPLE1BQU1nN0YsRUFBRWxpSSxTQUFRLFNBQVM2a0MsR0FBR3BsQyxFQUFFdUIsUUFBUTZqQyxFQUFFLEtBQUsvbEMsT0FBT29vQyxPQUFPLFNBQVF6bkMsRUFBRXVCLFFBQVFzbUksTUFBTTduSSxFQUFFOHZDLEVBQUU5dkMsRUFBRXVCLFFBQVF2RixXQUFXODJJLElBQUksU0FBUzl5SSxHQUFHQSxFQUFFcVksSUFBSSxTQUFTclksR0FBRyxJQUFJb2xDLEVBQUVwcUMsS0FBSzA0SSxvQkFBb0IxNEksS0FBSzA0SSxrQkFBa0IsSUFBSSxHQUFHdHVHLEVBQUVqTyxRQUFRbjNCLElBQUksRUFBRSxPQUFPaEYsS0FBSyxJQUFJaS9CLEVBQUVlLEVBQUVwRCxVQUFVLEdBQUcsT0FBT3FDLEVBQUU0aEIsUUFBUTdnRCxNQUFNLG1CQUFtQmdGLEVBQUVzdkgsUUFBUXR2SCxFQUFFc3ZILFFBQVEzM0YsTUFBTTMzQixFQUFFaTZCLEdBQUcsbUJBQW1CajZCLEdBQUdBLEVBQUUyM0IsTUFBTSxLQUFLc0MsR0FBR21MLEVBQUU5cEMsS0FBSzBFLEdBQUdoRixNQUFyUSxDQUE0UWdGLEdBQUcsU0FBU0EsR0FBR0EsRUFBRXF2RSxNQUFNLFNBQVNydkUsR0FBRyxPQUFPaEYsS0FBS3VHLFFBQVFxbUksR0FBRzVzSSxLQUFLdUcsUUFBUXZCLEdBQUdoRixNQUF2RSxDQUE4RWdGLEdBQWp0TixTQUFZQSxHQUFHQSxFQUFFcXVJLElBQUksRUFBRSxJQUFJanBHLEVBQUUsRUFBRXBsQyxFQUFFbTBFLE9BQU8sU0FBU24wRSxHQUFHQSxFQUFFQSxHQUFHLEdBQUcsSUFBSWk2QixFQUFFai9CLEtBQUt1L0IsRUFBRU4sRUFBRW8wRyxJQUFJNXRJLEVBQUVULEVBQUUyekksUUFBUTN6SSxFQUFFMnpJLE1BQU0sSUFBSSxHQUFHbHpJLEVBQUU4NUIsR0FBRyxPQUFPOTVCLEVBQUU4NUIsR0FBRyxJQUFJcWYsRUFBRTU1QyxFQUFFMkMsTUFBTXMzQixFQUFFMTRCLFFBQVFvQixLQUFLdzNCLEVBQUUsU0FBU242QixHQUFHaEYsS0FBSzgySSxNQUFNOXhJLElBQUksT0FBT202QixFQUFFNzZCLFVBQVVELE9BQU9vb0MsT0FBT3hOLEVBQUUzNkIsWUFBWW85QixZQUFZdkMsRUFBRUEsRUFBRWswRyxJQUFJanBHLElBQUlqTCxFQUFFNTRCLFFBQVFxbUksR0FBRzN0RyxFQUFFMTRCLFFBQVF2QixHQUFHbTZCLEVBQUVzM0csTUFBTXgzRyxFQUFFRSxFQUFFNTRCLFFBQVFpM0IsT0FBTyxTQUFTeDRCLEdBQUcsSUFBSW9sQyxFQUFFcGxDLEVBQUV1QixRQUFRaTNCLE1BQU0sSUFBSSxJQUFJeUIsS0FBS21MLEVBQUU4ckcsR0FBR2x4SSxFQUFFVixVQUFVLFNBQVMyNkIsR0FBekUsQ0FBNkVFLEdBQUdBLEVBQUU1NEIsUUFBUWswRCxVQUFVLFNBQVN6MUQsR0FBRyxJQUFJb2xDLEVBQUVwbEMsRUFBRXVCLFFBQVFrMEQsU0FBUyxJQUFJLElBQUl4N0IsS0FBS21MLEVBQUVnc0csR0FBR3B4SSxFQUFFVixVQUFVMjZCLEVBQUVtTCxFQUFFbkwsSUFBdkUsQ0FBNEVFLEdBQUdBLEVBQUVnNkMsT0FBT2w2QyxFQUFFazZDLE9BQU9oNkMsRUFBRWsxQyxNQUFNcDFDLEVBQUVvMUMsTUFBTWwxQyxFQUFFOWhCLElBQUk0aEIsRUFBRTVoQixJQUFJb3FILEVBQUVsaUksU0FBUSxTQUFTUCxHQUFHbTZCLEVBQUVuNkIsR0FBR2k2QixFQUFFajZCLE1BQUs0NUMsSUFBSXpmLEVBQUU1NEIsUUFBUXZGLFdBQVc0OUMsR0FBR3pmLEdBQUdBLEVBQUV1M0csYUFBYXozRyxFQUFFMTRCLFFBQVE0NEIsRUFBRXkzRyxjQUFjNXhJLEVBQUVtNkIsRUFBRXczRyxjQUFjN2hHLEVBQUUsR0FBRzNWLEVBQUU1NEIsU0FBU2QsRUFBRTg1QixHQUFHSixFQUFFQSxHQUEraU15NUcsQ0FBRzV6SSxHQUFHLFNBQVNBLEdBQUd5aUksRUFBRWxpSSxTQUFRLFNBQVM2a0MsR0FBR3BsQyxFQUFFb2xDLEdBQUcsU0FBU3BsQyxFQUFFaTZCLEdBQUcsT0FBT0EsR0FBRyxjQUFjbUwsR0FBR2hMLEVBQUVILEtBQUtBLEVBQUV0M0IsS0FBS3MzQixFQUFFdDNCLE1BQU0zQyxFQUFFaTZCLEVBQUVqL0IsS0FBS3VHLFFBQVFzbUksTUFBTTF6RCxPQUFPbDZDLElBQUksY0FBY21MLEdBQUcsbUJBQW1CbkwsSUFBSUEsRUFBRSxDQUFDbDZCLEtBQUtrNkIsRUFBRXBELE9BQU9vRCxJQUFJai9CLEtBQUt1RyxRQUFRNmpDLEVBQUUsS0FBS3BsQyxHQUFHaTZCLEVBQUVBLEdBQUdqL0IsS0FBS3VHLFFBQVE2akMsRUFBRSxLQUFLcGxDLE9BQXJQLENBQTRQQSxHQUFuOEIsQ0FBdThCNnhJLElBQUl4eUksT0FBT3VvQyxlQUFlaXFHLEdBQUd2eUksVUFBVSxZQUFZLENBQUNxRyxJQUFJc3hILEtBQUs1M0gsT0FBT3VvQyxlQUFlaXFHLEdBQUd2eUksVUFBVSxjQUFjLENBQUNxRyxJQUFJLFdBQVcsT0FBTzNLLEtBQUt5a0ksUUFBUXprSSxLQUFLeWtJLE9BQU9DLGNBQWNyZ0ksT0FBT3VvQyxlQUFlaXFHLEdBQUcsMEJBQTBCLENBQUNuekksTUFBTTJ0SSxLQUFLd0YsR0FBRy9vRyxRQUFRLFNBQVMsSUFBSStxRyxHQUFHM3pHLEVBQUUsZUFBZTR6RyxHQUFHNXpHLEVBQUUseUNBQXlDNnpHLEdBQUcsU0FBUy96SSxFQUFFb2xDLEVBQUVuTCxHQUFHLE1BQU0sVUFBVUEsR0FBRzY1RyxHQUFHOXpJLElBQUksV0FBV29sQyxHQUFHLGFBQWFuTCxHQUFHLFdBQVdqNkIsR0FBRyxZQUFZaTZCLEdBQUcsVUFBVWo2QixHQUFHLFVBQVVpNkIsR0FBRyxVQUFVajZCLEdBQUdnMEksR0FBRzl6RyxFQUFFLHdDQUF3Qyt6RyxHQUFHL3pHLEVBQUUsc0NBQWdJZzBHLEdBQUdoMEcsRUFBRSx3WUFBd1lpMEcsR0FBRywrQkFBK0JDLEdBQUcsU0FBU3AwSSxHQUFHLE1BQU0sTUFBTUEsRUFBRTA3QixPQUFPLElBQUksVUFBVTE3QixFQUFFaUIsTUFBTSxFQUFFLElBQUlvekksR0FBRyxTQUFTcjBJLEdBQUcsT0FBT28wSSxHQUFHcDBJLEdBQUdBLEVBQUVpQixNQUFNLEVBQUVqQixFQUFFakYsUUFBUSxJQUFJdTVJLEdBQUcsU0FBU3QwSSxHQUFHLE9BQU8sTUFBTUEsSUFBRyxJQUFLQSxHQUFtUSxTQUFTdTBJLEdBQUd2MEksRUFBRW9sQyxHQUFHLE1BQU0sQ0FBQ2lwRixZQUFZbW1CLEdBQUd4MEksRUFBRXF1SCxZQUFZanBGLEVBQUVpcEYsYUFBYTBNLE1BQU05Z0csRUFBRWo2QixFQUFFKzZILE9BQU8sQ0FBQy82SCxFQUFFKzZILE1BQU0zMUYsRUFBRTIxRixPQUFPMzFGLEVBQUUyMUYsT0FBTyxTQUFTeVosR0FBR3gwSSxFQUFFb2xDLEdBQUcsT0FBT3BsQyxFQUFFb2xDLEVBQUVwbEMsRUFBRSxJQUFJb2xDLEVBQUVwbEMsRUFBRW9sQyxHQUFHLEdBQUcsU0FBU3F2RyxHQUFHejBJLEdBQUcsT0FBT29ILE1BQU1wRyxRQUFRaEIsR0FBRyxTQUFTQSxHQUFHLElBQUksSUFBSW9sQyxFQUFFN0ssRUFBRSxHQUFHOTVCLEVBQUUsRUFBRW01QyxFQUFFNTVDLEVBQUVqRixPQUFPMEYsRUFBRW01QyxFQUFFbjVDLElBQUl3NUIsRUFBRW1MLEVBQUVxdkcsR0FBR3owSSxFQUFFUyxNQUFNLEtBQUsya0MsSUFBSTdLLElBQUlBLEdBQUcsS0FBS0EsR0FBRzZLLEdBQUcsT0FBTzdLLEVBQW5HLENBQXNHdjZCLEdBQUc0NUMsRUFBRTU1QyxHQUFHLFNBQVNBLEdBQUcsSUFBSW9sQyxFQUFFLEdBQUcsSUFBSSxJQUFJbkwsS0FBS2o2QixFQUFFQSxFQUFFaTZCLEtBQUttTCxJQUFJQSxHQUFHLEtBQUtBLEdBQUduTCxHQUFHLE9BQU9tTCxFQUFwRSxDQUF1RXBsQyxHQUFHLGlCQUFpQkEsRUFBRUEsRUFBRSxHQUFHLElBQUkwMEksR0FBRyxDQUFDNy9DLElBQUksNkJBQTZCOC9DLEtBQUssc0NBQXNDQyxHQUFHMTBHLEVBQUUsc25CQUFzbkIyMEcsR0FBRzMwRyxFQUFFLGtOQUFpTixHQUFJNDBHLEdBQUcsU0FBUzkwSSxHQUFHLE9BQU80MEksR0FBRzUwSSxJQUFJNjBJLEdBQUc3MEksSUFBSSxTQUFTKzBJLEdBQUcvMEksR0FBRyxPQUFPNjBJLEdBQUc3MEksR0FBRyxNQUFNLFNBQVNBLEVBQUUsWUFBTyxFQUFPLElBQUlnMUksR0FBRzMxSSxPQUFPb29DLE9BQU8sTUFBVXd0RyxHQUFHLzBHLEVBQUUsNkNBQTZDLFNBQVNnMUcsR0FBR2wxSSxHQUFHLE1BQUcsaUJBQWlCQSxFQUFTMEksU0FBUytELGNBQWN6TSxJQUFhMEksU0FBU3lDLGNBQWMsT0FBY25MLEVBQUUsSUFBSW0xSSxHQUFHOTFJLE9BQU84aUksT0FBTyxDQUFDaDNILGNBQWMsU0FBU25MLEVBQUVvbEMsR0FBRyxJQUFJbkwsRUFBRXZ4QixTQUFTeUMsY0FBY25MLEdBQUcsTUFBTSxXQUFXQSxHQUFLb2xDLEVBQUUxcEMsTUFBTTBwQyxFQUFFMXBDLEtBQUtrdUgsWUFBTyxJQUFTeGtGLEVBQUUxcEMsS0FBS2t1SCxNQUFNd3JCLFVBQVVuN0csRUFBRXR1QixhQUFhLFdBQVcsWUFBbkZzdUIsR0FBbUc2NkQsZ0JBQWdCLFNBQVM5MEYsRUFBRW9sQyxHQUFHLE9BQU8xOEIsU0FBU29zRixnQkFBZ0I0L0MsR0FBRzEwSSxHQUFHb2xDLElBQUk5dkIsZUFBZSxTQUFTdFYsR0FBRyxPQUFPMEksU0FBUzRNLGVBQWV0VixJQUFJcTFJLGNBQWMsU0FBU3IxSSxHQUFHLE9BQU8wSSxTQUFTMnNJLGNBQWNyMUksSUFBSXFWLGFBQWEsU0FBU3JWLEVBQUVvbEMsRUFBRW5MLEdBQUdqNkIsRUFBRXFWLGFBQWErdkIsRUFBRW5MLElBQUlpYSxZQUFZLFNBQVNsMEMsRUFBRW9sQyxHQUFHcGxDLEVBQUVrMEMsWUFBWTlPLElBQUlsNUIsWUFBWSxTQUFTbE0sRUFBRW9sQyxHQUFHcGxDLEVBQUVrTSxZQUFZazVCLElBQUl2eEIsV0FBVyxTQUFTN1QsR0FBRyxPQUFPQSxFQUFFNlQsWUFBWTYrRSxZQUFZLFNBQVMxeUYsR0FBRyxPQUFPQSxFQUFFMHlGLGFBQWE5UCxRQUFRLFNBQVM1aUYsR0FBRyxPQUFPQSxFQUFFNGlGLFNBQVMweUQsZUFBZSxTQUFTdDFJLEVBQUVvbEMsR0FBR3BsQyxFQUFFOHVILFlBQVkxcEYsR0FBR213RyxjQUFjLFNBQVN2MUksRUFBRW9sQyxHQUFHcGxDLEVBQUUyTCxhQUFheTVCLEVBQUUsT0FBTytYLEdBQUcsQ0FBQzFWLE9BQU8sU0FBU3puQyxFQUFFb2xDLEdBQUdvd0csR0FBR3B3RyxJQUFJdk8sT0FBTyxTQUFTNzJCLEVBQUVvbEMsR0FBR3BsQyxFQUFFdEUsS0FBS3VoRixNQUFNNzNDLEVBQUUxcEMsS0FBS3VoRixNQUFNdTRELEdBQUd4MUksR0FBRSxHQUFJdzFJLEdBQUdwd0csS0FBS3BULFFBQVEsU0FBU2h5QixHQUFHdzFJLEdBQUd4MUksR0FBRSxLQUFNLFNBQVN3MUksR0FBR3gxSSxFQUFFb2xDLEdBQUcsSUFBSTdLLEVBQUV2NkIsRUFBRXRFLEtBQUt1aEYsSUFBSSxHQUFHaGpELEVBQUVNLEdBQUcsQ0FBQyxJQUFJOTVCLEVBQUVULEVBQUVvOUMsUUFBUXhELEVBQUU1NUMsRUFBRXdsSSxtQkFBbUJ4bEksRUFBRWtsSSxJQUFJL3FHLEVBQUUxNUIsRUFBRTR4SSxNQUFNanRHLEVBQUVoK0IsTUFBTXBHLFFBQVFtNUIsRUFBRUksSUFBSTRrQixFQUFFaGxCLEVBQUVJLEdBQUdxZixHQUFHemYsRUFBRUksS0FBS3FmLElBQUl6ZixFQUFFSSxRQUFHLEdBQVF2NkIsRUFBRXRFLEtBQUsrNUksU0FBU3J1SSxNQUFNcEcsUUFBUW01QixFQUFFSSxJQUFJSixFQUFFSSxHQUFHcEQsUUFBUXlpQixHQUFHLEdBQUd6ZixFQUFFSSxHQUFHai9CLEtBQUtzK0MsR0FBR3pmLEVBQUVJLEdBQUcsQ0FBQ3FmLEdBQUd6ZixFQUFFSSxHQUFHcWYsR0FBRyxJQUFJODdGLEdBQUcsSUFBSXpRLEdBQUcsR0FBRyxHQUFHLElBQUkwUSxHQUFHLENBQUMsU0FBUyxXQUFXLFNBQVMsU0FBUyxXQUFXLFNBQVNDLEdBQUc1MUksRUFBRVMsR0FBRyxPQUFPVCxFQUFFa0IsTUFBTVQsRUFBRVMsTUFBTWxCLEVBQUVpeUMsTUFBTXh4QyxFQUFFd3hDLEtBQUtqeUMsRUFBRTRsSSxZQUFZbmxJLEVBQUVtbEksV0FBVzNyRyxFQUFFajZCLEVBQUV0RSxRQUFRdStCLEVBQUV4NUIsRUFBRS9FLE9BQU8sU0FBU3NFLEVBQUVvbEMsR0FBRyxHQUFHLFVBQVVwbEMsRUFBRWl5QyxJQUFJLE9BQU0sRUFBRyxJQUFJMVgsRUFBRTk1QixFQUFFdzVCLEVBQUVNLEVBQUV2NkIsRUFBRXRFLE9BQU91K0IsRUFBRU0sRUFBRUEsRUFBRXF2RixRQUFRcnZGLEVBQUV0Z0MsS0FBSzIvQyxFQUFFM2YsRUFBRU0sRUFBRTZLLEVBQUUxcEMsT0FBT3UrQixFQUFFTSxFQUFFQSxFQUFFcXZGLFFBQVFydkYsRUFBRXRnQyxLQUFLLE9BQU93RyxJQUFJbTVDLEdBQUdxN0YsR0FBR3gwSSxJQUFJdzBJLEdBQUdyN0YsR0FBaEosQ0FBb0o1NUMsRUFBRVMsSUFBSTg1QixFQUFFdjZCLEVBQUVpbUkscUJBQXFCam1JLEVBQUUrbEksZUFBZXRsSSxFQUFFc2xJLGNBQWMzZ0csRUFBRTNrQyxFQUFFc2xJLGFBQWF2K0gsUUFBUSxTQUFTcXVJLEdBQUc3MUksRUFBRW9sQyxFQUFFN0ssR0FBRyxJQUFJOTVCLEVBQUVtNUMsRUFBRXpmLEVBQUUsR0FBRyxJQUFJMTVCLEVBQUUya0MsRUFBRTNrQyxHQUFHODVCLElBQUk5NUIsRUFBRXc1QixFQUFFMmYsRUFBRTU1QyxFQUFFUyxHQUFHUyxPQUFPaTVCLEVBQUV5ZixHQUFHbjVDLEdBQUcsT0FBTzA1QixFQUFFLElBQUkyN0csR0FBRyxDQUFDcnVHLE9BQU9zdUcsR0FBR2wvRyxPQUFPay9HLEdBQUcvakgsUUFBUSxTQUFTaHlCLEdBQUcrMUksR0FBRy8xSSxFQUFFMDFJLE1BQU0sU0FBU0ssR0FBRy8xSSxFQUFFb2xDLElBQUlwbEMsRUFBRXRFLEtBQUtraEksWUFBWXgzRixFQUFFMXBDLEtBQUtraEksYUFBYSxTQUFTNThILEVBQUVvbEMsR0FBRyxJQUFJbkwsRUFBRU0sRUFBRTk1QixFQUFFbTVDLEVBQUU1NUMsSUFBSTAxSSxHQUFHdjdHLEVBQUVpTCxJQUFJc3dHLEdBQUd0N0csRUFBRTQ3RyxHQUFHaDJJLEVBQUV0RSxLQUFLa2hJLFdBQVc1OEgsRUFBRW85QyxTQUFTdGlCLEVBQUVrN0csR0FBRzV3RyxFQUFFMXBDLEtBQUtraEksV0FBV3gzRixFQUFFZ1ksU0FBU2dsRixFQUFFLEdBQUdubkcsRUFBRSxHQUFHLElBQUloQixLQUFLYSxFQUFFUCxFQUFFSCxFQUFFSCxHQUFHeDVCLEVBQUVxNkIsRUFBRWIsR0FBR00sR0FBRzk1QixFQUFFcTJCLFNBQVN5RCxFQUFFNzdCLE1BQU0rQixFQUFFdzFJLE9BQU8xN0csRUFBRXZDLElBQUlrK0csR0FBR3oxSSxFQUFFLFNBQVMya0MsRUFBRXBsQyxHQUFHUyxFQUFFdXhDLEtBQUt2eEMsRUFBRXV4QyxJQUFJbWtHLGtCQUFrQmw3RyxFQUFFMy9CLEtBQUttRixLQUFLeTFJLEdBQUd6MUksRUFBRSxPQUFPMmtDLEVBQUVwbEMsR0FBR1MsRUFBRXV4QyxLQUFLdnhDLEVBQUV1eEMsSUFBSW9rRyxVQUFVaFUsRUFBRTltSSxLQUFLbUYsSUFBSSxHQUFHMmhJLEVBQUVybkksT0FBTyxDQUFDLElBQUltdUMsRUFBRSxXQUFXLElBQUksSUFBSWpQLEVBQUUsRUFBRUEsRUFBRW1vRyxFQUFFcm5JLE9BQU9rL0IsSUFBSWk4RyxHQUFHOVQsRUFBRW5vRyxHQUFHLFdBQVdtTCxFQUFFcGxDLElBQUk0NUMsRUFBRWxTLEdBQUd0QyxFQUFFLFNBQVM4RCxHQUFHQSxJQUF1RyxHQUFuR2pPLEVBQUVsZ0MsUUFBUTJzQyxHQUFHdEMsRUFBRSxhQUFZLFdBQVcsSUFBSSxJQUFJbkwsRUFBRSxFQUFFQSxFQUFFZ0IsRUFBRWxnQyxPQUFPay9CLElBQUlpOEcsR0FBR2o3RyxFQUFFaEIsR0FBRyxtQkFBbUJtTCxFQUFFcGxDLE9BQVM0NUMsRUFBRSxJQUFJM2YsS0FBS0csRUFBRVUsRUFBRWIsSUFBSWk4RyxHQUFHOTdHLEVBQUVILEdBQUcsU0FBU2o2QixFQUFFQSxFQUFFbTZCLEdBQS9oQixDQUFtaUJuNkIsRUFBRW9sQyxHQUFHLElBQUlpeEcsR0FBR2gzSSxPQUFPb29DLE9BQU8sTUFBTSxTQUFTdXVHLEdBQUdoMkksRUFBRW9sQyxHQUFHLElBQUluTCxFQUFFTSxFQUFFOTVCLEVBQUVwQixPQUFPb29DLE9BQU8sTUFBTSxJQUFJem5DLEVBQUUsT0FBT1MsRUFBRSxJQUFJdzVCLEVBQUUsRUFBRUEsRUFBRWo2QixFQUFFakYsT0FBT2svQixLQUFLTSxFQUFFdjZCLEVBQUVpNkIsSUFBSTIwRixZQUFZcjBGLEVBQUVxMEYsVUFBVXluQixJQUFJNTFJLEVBQUU2MUksR0FBRy83RyxJQUFJQSxFQUFFQSxFQUFFeVgsSUFBSWcyRixHQUFHNWlHLEVBQUVnbUYsU0FBUyxhQUFhN3dGLEVBQUU1M0IsTUFBTSxPQUFPbEMsRUFBRSxTQUFTNjFJLEdBQUd0MkksR0FBRyxPQUFPQSxFQUFFNjhILFNBQVM3OEgsRUFBRTJDLEtBQUssSUFBSXRELE9BQU91QixLQUFLWixFQUFFNHVILFdBQVcsSUFBSXB6SCxLQUFLLEtBQUssU0FBUzA2SSxHQUFHbDJJLEVBQUVvbEMsRUFBRW5MLEVBQUVNLEVBQUU5NUIsR0FBRyxJQUFJbTVDLEVBQUU1NUMsRUFBRWd5QyxLQUFLaHlDLEVBQUVneUMsSUFBSTVNLEdBQUcsR0FBR3dVLEVBQUUsSUFBSUEsRUFBRTNmLEVBQUVpckcsSUFBSWxsSSxFQUFFaTZCLEVBQUVNLEVBQUU5NUIsR0FBRyxNQUFNODVCLEdBQUdndUcsR0FBR2h1RyxFQUFFTixFQUFFbWpCLFFBQVEsYUFBYXA5QyxFQUFFMkMsS0FBSyxJQUFJeWlDLEVBQUUsVUFBVSxJQUFJbXhHLEdBQUcsQ0FBQ3A1RixHQUFHMjRGLElBQUksU0FBU1UsR0FBR3gySSxFQUFFdTZCLEdBQUcsSUFBSTk1QixFQUFFODVCLEVBQUVnckcsaUJBQWlCLEtBQUt0ckcsRUFBRXg1QixLQUFJLElBQUtBLEVBQUUwekQsS0FBSzV5RCxRQUFRazFJLGNBQWNyeEcsRUFBRXBsQyxFQUFFdEUsS0FBS2t1SCxRQUFReGtGLEVBQUU3SyxFQUFFNytCLEtBQUtrdUgsUUFBUSxDQUFDLElBQUlod0UsRUFBRXpmLEVBQUVDLEVBQUVHLEVBQUUycUcsSUFBSXBxRyxFQUFFOTZCLEVBQUV0RSxLQUFLa3VILE9BQU8sR0FBR3dZLEVBQUU3bkcsRUFBRTcrQixLQUFLa3VILE9BQU8sR0FBRyxJQUFJaHdFLEtBQUszZixFQUFFbW9HLEVBQUVtRSxVQUFVbkUsRUFBRTduRyxFQUFFNytCLEtBQUtrdUgsTUFBTTk1RSxFQUFFLEdBQUdzeUYsSUFBSUEsRUFBRWpvRyxFQUFFaW9HLEVBQUV4b0YsR0FBRzllLEVBQUU4ZSxLQUFLemYsR0FBR3U4RyxHQUFHdDhHLEVBQUV3ZixFQUFFemYsR0FBRyxJQUFJeWYsS0FBS2hYLEdBQUdpaEcsSUFBSXpCLEVBQUUxakksUUFBUW84QixFQUFFcDhCLE9BQU9nNEksR0FBR3Q4RyxFQUFFLFFBQVFnb0csRUFBRTFqSSxPQUFPbzhCLEVBQUVzSyxFQUFFZzlGLEVBQUV4b0YsTUFBTXc2RixHQUFHeDZGLEdBQUd4ZixFQUFFdThHLGtCQUFrQnhDLEdBQUdFLEdBQUd6NkYsSUFBSW82RixHQUFHcDZGLElBQUl4ZixFQUFFNHRFLGdCQUFnQnB1RCxLQUFLLFNBQVM4OEYsR0FBRzEySSxFQUFFb2xDLEVBQUVuTCxHQUFHajZCLEVBQUU0aUYsUUFBUXpyRCxRQUFRLE1BQU0sRUFBRXkvRyxHQUFHNTJJLEVBQUVvbEMsRUFBRW5MLEdBQUdpNkcsR0FBRzl1RyxHQUFHa3ZHLEdBQUdyNkcsR0FBR2o2QixFQUFFZ29HLGdCQUFnQjVpRSxJQUFJbkwsRUFBRSxvQkFBb0JtTCxHQUFHLFVBQVVwbEMsRUFBRTRpRixRQUFRLE9BQU94OUMsRUFBRXBsQyxFQUFFMkwsYUFBYXk1QixFQUFFbkwsSUFBSSs1RyxHQUFHNXVHLEdBQUdwbEMsRUFBRTJMLGFBQWF5NUIsRUFBNXVMLFNBQVNwbEMsRUFBRW9sQyxHQUFHLE9BQU9rdkcsR0FBR2x2RyxJQUFJLFVBQVVBLEVBQUUsUUFBUSxvQkFBb0JwbEMsR0FBR2kwSSxHQUFHN3VHLEdBQUdBLEVBQUUsT0FBK3BMeXhHLENBQUd6eEcsRUFBRW5MLElBQUltNkcsR0FBR2h2RyxHQUFHa3ZHLEdBQUdyNkcsR0FBR2o2QixFQUFFMjJJLGtCQUFrQnhDLEdBQUdFLEdBQUdqdkcsSUFBSXBsQyxFQUFFODJJLGVBQWUzQyxHQUFHL3VHLEVBQUVuTCxHQUFHMjhHLEdBQUc1MkksRUFBRW9sQyxFQUFFbkwsR0FBRyxTQUFTMjhHLEdBQUc1MkksRUFBRW9sQyxFQUFFbkwsR0FBRyxHQUFHcTZHLEdBQUdyNkcsR0FBR2o2QixFQUFFZ29HLGdCQUFnQjVpRSxPQUFPLENBQUMsR0FBR3hDLElBQUl1SCxHQUFHLGFBQWFucUMsRUFBRTRpRixTQUFTLGdCQUFnQng5QyxHQUFHLEtBQUtuTCxJQUFJajZCLEVBQUUrMkksT0FBTyxDQUFDLElBQUl4OEcsRUFBRSxTQUFTNkssR0FBR0EsRUFBRXB4QiwyQkFBMkJoVSxFQUFFMDJCLG9CQUFvQixRQUFRNkQsSUFBSXY2QixFQUFFc00saUJBQWlCLFFBQVFpdUIsR0FBR3Y2QixFQUFFKzJJLFFBQU8sRUFBRy8ySSxFQUFFMkwsYUFBYXk1QixFQUFFbkwsSUFBSSxJQUFJKzhHLEdBQUcsQ0FBQ3Z2RyxPQUFPK3VHLEdBQUczL0csT0FBTzIvRyxJQUFJLFNBQVNTLEdBQUdqM0ksRUFBRXU2QixHQUFHLElBQUk5NUIsRUFBRTg1QixFQUFFMnFHLElBQUl0ckYsRUFBRXJmLEVBQUU3K0IsS0FBS3krQixFQUFFbjZCLEVBQUV0RSxLQUFLLEtBQUswcEMsRUFBRXdVLEVBQUV5MEUsY0FBY2pwRixFQUFFd1UsRUFBRW1oRixTQUFTMzFGLEVBQUVqTCxJQUFJaUwsRUFBRWpMLEVBQUVrMEYsY0FBY2pwRixFQUFFakwsRUFBRTRnRyxTQUFTLENBQUMsSUFBSTNnRyxFQUEza0wsU0FBWXA2QixHQUFHLElBQUksSUFBSW9sQyxFQUFFcGxDLEVBQUV0RSxLQUFLNitCLEVBQUV2NkIsRUFBRVMsRUFBRVQsRUFBRWk2QixFQUFFeDVCLEVBQUUra0kscUJBQXFCL2tJLEVBQUVBLEVBQUUra0ksa0JBQWtCNkgsU0FBUzVzSSxFQUFFL0UsT0FBTzBwQyxFQUFFbXZHLEdBQUc5ekksRUFBRS9FLEtBQUswcEMsSUFBSSxLQUFLbkwsRUFBRU0sRUFBRUEsRUFBRWlVLFNBQVNqVSxHQUFHQSxFQUFFNytCLE9BQU8wcEMsRUFBRW12RyxHQUFHbnZHLEVBQUU3SyxFQUFFNytCLE9BQU8sT0FBTyxTQUFTc0UsRUFBRW9sQyxHQUFHLE9BQUduTCxFQUFFajZCLElBQUlpNkIsRUFBRW1MLEdBQVVvdkcsR0FBR3gwSSxFQUFFeTBJLEdBQUdydkcsSUFBVSxHQUFyRCxDQUF5REEsRUFBRWlwRixZQUFZanBGLEVBQUUyMUYsT0FBbzFLbWMsQ0FBRzM4RyxHQUFHTyxFQUFFcjZCLEVBQUUwMkksbUJBQW1CbDlHLEVBQUVhLEtBQUtWLEVBQUVvNkcsR0FBR3A2RyxFQUFFcTZHLEdBQUczNUcsS0FBS1YsSUFBSTM1QixFQUFFMjJJLGFBQWEzMkksRUFBRWtMLGFBQWEsUUFBUXl1QixHQUFHMzVCLEVBQUUyMkksV0FBV2g5RyxJQUFJLElBQUlpOUcsR0FBR0MsR0FBR0MsR0FBR0MsR0FBR0MsR0FBR0MsR0FBR0MsR0FBRyxDQUFDbHdHLE9BQU93dkcsR0FBR3BnSCxPQUFPb2dILElBQUlXLEdBQUcsZ0JBQWdCLFNBQVNDLEdBQUc3M0ksR0FBRyxJQUFJb2xDLEVBQUVuTCxFQUFFTSxFQUFFOTVCLEVBQUVtNUMsRUFBRXpmLEdBQUUsRUFBR0MsR0FBRSxFQUFHVSxHQUFFLEVBQUdzbkcsR0FBRSxFQUFHbm5HLEVBQUUsRUFBRWlPLEVBQUUsRUFBRWhKLEVBQUUsRUFBRWYsRUFBRSxFQUFFLElBQUk1RSxFQUFFLEVBQUVBLEVBQUV2NkIsRUFBRWpGLE9BQU93L0IsSUFBSSxHQUFHTixFQUFFbUwsRUFBRUEsRUFBRXBsQyxFQUFFdzZCLFdBQVdELEdBQUdKLEVBQUUsS0FBS2lMLEdBQUcsS0FBS25MLElBQUlFLEdBQUUsUUFBUyxHQUFHQyxFQUFFLEtBQUtnTCxHQUFHLEtBQUtuTCxJQUFJRyxHQUFFLFFBQVMsR0FBR1UsRUFBRSxLQUFLc0ssR0FBRyxLQUFLbkwsSUFBSWEsR0FBRSxRQUFTLEdBQUdzbkcsRUFBRSxLQUFLaDlGLEdBQUcsS0FBS25MLElBQUltb0csR0FBRSxRQUFTLEdBQUcsTUFBTWg5RixHQUFHLE1BQU1wbEMsRUFBRXc2QixXQUFXRCxFQUFFLElBQUksTUFBTXY2QixFQUFFdzZCLFdBQVdELEVBQUUsSUFBSVUsR0FBR2lPLEdBQUdoSixFQUFFLENBQUMsT0FBT2tGLEdBQUcsS0FBSyxHQUFHaEwsR0FBRSxFQUFHLE1BQU0sS0FBSyxHQUFHRCxHQUFFLEVBQUcsTUFBTSxLQUFLLEdBQUdXLEdBQUUsRUFBRyxNQUFNLEtBQUssR0FBR29GLElBQUksTUFBTSxLQUFLLEdBQUdBLElBQUksTUFBTSxLQUFLLEdBQUdnSixJQUFJLE1BQU0sS0FBSyxHQUFHQSxJQUFJLE1BQU0sS0FBSyxJQUFJak8sSUFBSSxNQUFNLEtBQUssSUFBSUEsSUFBSSxHQUFHLEtBQUttSyxFQUFFLENBQUMsSUFBSSxJQUFJcEgsRUFBRXpELEVBQUUsRUFBRTRrQixPQUFFLEVBQU9uaEIsR0FBRyxHQUFHLE9BQU9taEIsRUFBRW4vQyxFQUFFMDdCLE9BQU9zQyxJQUFJQSxLQUFLbWhCLEdBQUd5NEYsR0FBR3Y1RyxLQUFLOGdCLEtBQUtpakYsR0FBRSxjQUFVLElBQVMzaEksR0FBRzArQixFQUFFNUUsRUFBRSxFQUFFOTVCLEVBQUVULEVBQUVpQixNQUFNLEVBQUVzNUIsR0FBR3BsQixRQUFRNHBCLElBQUksU0FBU0EsS0FBSzZhLElBQUlBLEVBQUUsS0FBS3QrQyxLQUFLMEUsRUFBRWlCLE1BQU1rK0IsRUFBRTVFLEdBQUdwbEIsUUFBUWdxQixFQUFFNUUsRUFBRSxFQUFFLFFBQUcsSUFBUzk1QixFQUFFQSxFQUFFVCxFQUFFaUIsTUFBTSxFQUFFczVCLEdBQUdwbEIsT0FBTyxJQUFJZ3FCLEdBQUdKLElBQUk2YSxFQUFFLElBQUlyZixFQUFFLEVBQUVBLEVBQUVxZixFQUFFNytDLE9BQU93L0IsSUFBSTk1QixFQUFFcTNJLEdBQUdyM0ksRUFBRW01QyxFQUFFcmYsSUFBSSxPQUFPOTVCLEVBQUUsU0FBU3EzSSxHQUFHOTNJLEVBQUVvbEMsR0FBRyxJQUFJbkwsRUFBRW1MLEVBQUVqTyxRQUFRLEtBQUssR0FBRzhDLEVBQUUsRUFBRSxNQUFNLE9BQU9tTCxFQUFFLE1BQU1wbEMsRUFBRSxJQUFJLElBQUl1NkIsRUFBRTZLLEVBQUVua0MsTUFBTSxFQUFFZzVCLEdBQUd4NUIsRUFBRTJrQyxFQUFFbmtDLE1BQU1nNUIsRUFBRSxHQUFHLE1BQU0sT0FBT00sRUFBRSxNQUFNdjZCLEdBQUcsTUFBTVMsRUFBRSxJQUFJQSxFQUFFQSxHQUFHLFNBQVNzM0ksR0FBRy8zSSxFQUFFb2xDLEdBQUc3OUIsUUFBUUMsTUFBTSxtQkFBbUJ4SCxHQUFHLFNBQVNnNEksR0FBR2g0SSxFQUFFb2xDLEdBQUcsT0FBT3BsQyxFQUFFQSxFQUFFeXVCLEtBQUksU0FBU3p1QixHQUFHLE9BQU9BLEVBQUVvbEMsTUFBSzNPLFFBQU8sU0FBU3oyQixHQUFHLE9BQU9BLEtBQUksR0FBRyxTQUFTaTRJLEdBQUdqNEksRUFBRW9sQyxFQUFFbkwsRUFBRU0sRUFBRTk1QixJQUFJVCxFQUFFdzRCLFFBQVF4NEIsRUFBRXc0QixNQUFNLEtBQUtsOUIsS0FBSzQ4SSxHQUFHLENBQUN2MUksS0FBS3lpQyxFQUFFMW1DLE1BQU11N0IsRUFBRWsrRyxRQUFRMTNJLEdBQUc4NUIsSUFBSXY2QixFQUFFbzRJLE9BQU0sRUFBRyxTQUFTQyxHQUFHcjRJLEVBQUVvbEMsRUFBRW5MLEVBQUVNLEVBQUU5NUIsSUFBSUEsRUFBRVQsRUFBRXM0SSxlQUFldDRJLEVBQUVzNEksYUFBYSxJQUFJdDRJLEVBQUU0cEgsUUFBUTVwSCxFQUFFNHBILE1BQU0sS0FBS3R1SCxLQUFLNDhJLEdBQUcsQ0FBQ3YxSSxLQUFLeWlDLEVBQUUxbUMsTUFBTXU3QixFQUFFaytHLFFBQVExM0ksR0FBRzg1QixJQUFJdjZCLEVBQUVvNEksT0FBTSxFQUFHLFNBQVNHLEdBQUd2NEksRUFBRW9sQyxFQUFFbkwsRUFBRU0sR0FBR3Y2QixFQUFFdzRJLFNBQVNwekcsR0FBR25MLEVBQUVqNkIsRUFBRXk0SSxVQUFVbjlJLEtBQUs0OEksR0FBRyxDQUFDdjFJLEtBQUt5aUMsRUFBRTFtQyxNQUFNdTdCLEdBQUdNLElBQUksU0FBU20rRyxHQUFHMTRJLEVBQUVvbEMsRUFBRW5MLEVBQUVNLEVBQUU5NUIsRUFBRW01QyxFQUFFemYsRUFBRUMsSUFBSXA2QixFQUFFNDhILGFBQWE1OEgsRUFBRTQ4SCxXQUFXLEtBQUt0aEksS0FBSzQ4SSxHQUFHLENBQUN2MUksS0FBS3lpQyxFQUFFeTNGLFFBQVE1aUcsRUFBRXY3QixNQUFNNjdCLEVBQUV2QyxJQUFJdjNCLEVBQUVrNEksYUFBYS8rRixFQUFFZzFFLFVBQVV6MEYsR0FBR0MsSUFBSXA2QixFQUFFbzRJLE9BQU0sRUFBRyxTQUFTUSxHQUFHNTRJLEVBQUVvbEMsRUFBRW5MLEdBQUcsT0FBT0EsRUFBRSxNQUFNbUwsRUFBRSxLQUFLcGxDLEVBQUUsS0FBS0EsRUFBRW9sQyxFQUFFLFNBQVN5ekcsR0FBR3p6RyxFQUFFbkwsRUFBRU0sRUFBRTk1QixFQUFFbTVDLEVBQUV6ZixFQUFFQyxFQUFFVSxHQUFHLElBQUlzbkcsR0FBRzNoSSxFQUFFQSxHQUFHVCxHQUFHOGdGLE1BQU1obUQsRUFBRWIsRUFBRSxJQUFJQSxFQUFFLDhCQUE4QkEsRUFBRSxJQUFJLFVBQVVBLElBQUlBLEVBQUUscUJBQXFCeDVCLEVBQUVxZ0YsT0FBT3JnRixFQUFFcTRJLFNBQVNoK0csRUFBRWIsRUFBRSxJQUFJQSxFQUFFLDBCQUEwQkEsRUFBRSxJQUFJLFVBQVVBLElBQUlBLEVBQUUsWUFBWXg1QixFQUFFbXBJLGlCQUFpQm5wSSxFQUFFbXBJLFFBQVEzdkcsRUFBRTIrRyxHQUFHLElBQUkzK0csRUFBRWEsSUFBSXI2QixFQUFFODhDLGNBQWM5OEMsRUFBRTg4QyxLQUFLdGpCLEVBQUUyK0csR0FBRyxJQUFJMytHLEVBQUVhLElBQUlyNkIsRUFBRW9wSSxpQkFBaUJwcEksRUFBRW9wSSxRQUFRNXZHLEVBQUUyK0csR0FBRyxJQUFJMytHLEVBQUVhLElBQUlyNkIsRUFBRXM0SSxlQUFldDRJLEVBQUVzNEksT0FBTzNXLEVBQUVoOUYsRUFBRTR6RyxlQUFlNXpHLEVBQUU0ekcsYUFBYSxLQUFLNVcsRUFBRWg5RixFQUFFcVcsU0FBU3JXLEVBQUVxVyxPQUFPLElBQUksSUFBSXhnQixFQUFFaTlHLEdBQUcsQ0FBQ3g1SSxNQUFNNjdCLEVBQUVwbEIsT0FBT2dqSSxRQUFRcjlHLEdBQUdWLEdBQUczNUIsSUFBSVQsSUFBSWk3QixFQUFFMnpGLFVBQVVudUgsR0FBRyxJQUFJeW9DLEVBQUVrNUYsRUFBRW5vRyxHQUFHN3lCLE1BQU1wRyxRQUFRa29DLEdBQUcwUSxFQUFFMVEsRUFBRTJTLFFBQVE1Z0IsR0FBR2lPLEVBQUU1dEMsS0FBSzIvQixHQUFHbW5HLEVBQUVub0csR0FBR2lQLEVBQUUwUSxFQUFFLENBQUMzZSxFQUFFaU8sR0FBRyxDQUFDQSxFQUFFak8sR0FBR0EsRUFBRW1LLEVBQUVnekcsT0FBTSxFQUFHLFNBQVNhLEdBQUdqNUksRUFBRW9sQyxFQUFFbkwsR0FBRyxJQUFJTSxFQUFFMitHLEdBQUdsNUksRUFBRSxJQUFJb2xDLElBQUk4ekcsR0FBR2w1SSxFQUFFLFVBQVVvbEMsR0FBRyxHQUFHLE1BQU03SyxFQUFFLE9BQU9zOUcsR0FBR3Q5RyxHQUFHLElBQUcsSUFBS04sRUFBRSxDQUFDLElBQUl4NUIsRUFBRXk0SSxHQUFHbDVJLEVBQUVvbEMsR0FBRyxHQUFHLE1BQU0za0MsRUFBRSxPQUFPbVgsS0FBS3lpQyxVQUFVNTVDLElBQUksU0FBU3k0SSxHQUFHbDVJLEVBQUVvbEMsRUFBRW5MLEdBQUcsSUFBSU0sRUFBRSxHQUFHLE9BQU9BLEVBQUV2NkIsRUFBRXc0SSxTQUFTcHpHLElBQUksSUFBSSxJQUFJM2tDLEVBQUVULEVBQUV5NEksVUFBVTcrRixFQUFFLEVBQUV6ZixFQUFFMTVCLEVBQUUxRixPQUFPNitDLEVBQUV6ZixFQUFFeWYsSUFBSSxHQUFHbjVDLEVBQUVtNUMsR0FBR2ozQyxPQUFPeWlDLEVBQUUsQ0FBQzNrQyxFQUFFeWdDLE9BQU8wWSxFQUFFLEdBQUcsTUFBTSxPQUFPM2YsVUFBVWo2QixFQUFFdzRJLFNBQVNwekcsR0FBRzdLLEVBQUUsU0FBUzQrRyxHQUFHbjVJLEVBQUVvbEMsR0FBRyxJQUFJLElBQUluTCxFQUFFajZCLEVBQUV5NEksVUFBVWwrRyxFQUFFLEVBQUU5NUIsRUFBRXc1QixFQUFFbC9CLE9BQU93L0IsRUFBRTk1QixFQUFFODVCLElBQUksQ0FBQyxJQUFJcWYsRUFBRTNmLEVBQUVNLEdBQUcsR0FBRzZLLEVBQUUvRyxLQUFLdWIsRUFBRWozQyxNQUFNLE9BQU9zM0IsRUFBRWlILE9BQU8zRyxFQUFFLEdBQUdxZixHQUFHLFNBQVNzK0YsR0FBR2w0SSxFQUFFb2xDLEdBQUcsT0FBT0EsSUFBSSxNQUFNQSxFQUFFcTRCLFFBQVF6OUQsRUFBRXk5RCxNQUFNcjRCLEVBQUVxNEIsT0FBTyxNQUFNcjRCLEVBQUVnNUIsTUFBTXArRCxFQUFFbytELElBQUloNUIsRUFBRWc1QixNQUFNcCtELEVBQUUsU0FBU281SSxHQUFHcDVJLEVBQUVvbEMsRUFBRW5MLEdBQUcsSUFBSU0sRUFBRU4sR0FBRyxHQUFHeDVCLEVBQUU4NUIsRUFBRXU0QixPQUFPbFosRUFBRSxNQUFNcmYsRUFBRXBsQixPQUFPeWtDLEVBQUUsOENBQThDbjVDLElBQUltNUMsRUFBRSxNQUFNQSxFQUFFLEtBQUssSUFBSXpmLEVBQUVrL0csR0FBR2owRyxFQUFFd1UsR0FBRzU1QyxFQUFFcUYsTUFBTSxDQUFDM0csTUFBTSxJQUFJMG1DLEVBQUUsSUFBSTQzRixXQUFXcGxILEtBQUt5aUMsVUFBVWpWLEdBQUc5K0IsU0FBUyxtQkFBbUI2ekIsRUFBRSxLQUFLLFNBQVNrL0csR0FBR3I1SSxFQUFFb2xDLEdBQUcsSUFBSW5MLEVBQUUsU0FBU2o2QixHQUFHLEdBQUdBLEVBQUVBLEVBQUVtVixPQUFPa2lJLEdBQUdyM0ksRUFBRWpGLE9BQU9pRixFQUFFbTNCLFFBQVEsS0FBSyxHQUFHbjNCLEVBQUVrMkUsWUFBWSxLQUFLbWhFLEdBQUcsRUFBRSxPQUFPRyxHQUFHeDNJLEVBQUVrMkUsWUFBWSxPQUFPLEVBQUUsQ0FBQ2p2QyxJQUFJam5DLEVBQUVpQixNQUFNLEVBQUV1MkksSUFBSXQySSxJQUFJLElBQUlsQixFQUFFaUIsTUFBTXUySSxHQUFHLEdBQUcsS0FBSyxDQUFDdndHLElBQUlqbkMsRUFBRWtCLElBQUksTUFBc0IsSUFBaEJvMkksR0FBR3QzSSxFQUFFdzNJLEdBQUdDLEdBQUdDLEdBQUcsR0FBUTRCLE1BQU1DLEdBQUdoQyxHQUFHaUMsTUFBTUMsR0FBR2xDLElBQUksS0FBS0EsSUFBSW1DLEdBQUduQyxJQUFJLE1BQU0sQ0FBQ3R3RyxJQUFJam5DLEVBQUVpQixNQUFNLEVBQUV3MkksSUFBSXYySSxJQUFJbEIsRUFBRWlCLE1BQU13MkksR0FBRyxFQUFFQyxLQUF6UixDQUErUjEzSSxHQUFHLE9BQU8sT0FBT2k2QixFQUFFLzRCLElBQUlsQixFQUFFLElBQUlvbEMsRUFBRSxRQUFRbkwsRUFBRWdOLElBQUksS0FBS2hOLEVBQUUvNEIsSUFBSSxLQUFLa2tDLEVBQUUsSUFBSSxTQUFTbzBHLEtBQUssT0FBT2xDLEdBQUc5OEcsYUFBYWc5RyxJQUFJLFNBQVM4QixLQUFLLE9BQU85QixJQUFJSCxHQUFHLFNBQVNrQyxHQUFHdjVJLEdBQUcsT0FBTyxLQUFLQSxHQUFHLEtBQUtBLEVBQUUsU0FBUzA1SSxHQUFHMTVJLEdBQUcsSUFBSW9sQyxFQUFFLEVBQUUsSUFBSXF5RyxHQUFHRCxJQUFJOEIsTUFBTSxHQUFHQyxHQUFHdjVJLEVBQUV3NUksTUFBTUMsR0FBR3o1SSxRQUFRLEdBQUcsS0FBS0EsR0FBR29sQyxJQUFJLEtBQUtwbEMsR0FBR29sQyxJQUFJLElBQUlBLEVBQUUsQ0FBQ3N5RyxHQUFHRixHQUFHLE9BQU8sU0FBU2lDLEdBQUd6NUksR0FBRyxJQUFJLElBQUlvbEMsRUFBRXBsQyxHQUFHczVJLE9BQU90NUksRUFBRXc1SSxRQUFRcDBHLEtBQUssSUFBSXUwRyxHQUFxQixTQUFTQyxHQUFHNTVJLEVBQUVvbEMsRUFBRW5MLEdBQUcsSUFBSU0sRUFBRW8vRyxHQUFHLE9BQU8sU0FBU2w1SSxJQUFJLE9BQU8ya0MsRUFBRXpOLE1BQU0sS0FBS0MsWUFBWWlpSCxHQUFHNzVJLEVBQUVTLEVBQUV3NUIsRUFBRU0sSUFBSSxJQUFJdS9HLEdBQUcvUSxNQUFNakYsSUFBR3g1SCxPQUFPdzVILEdBQUUsS0FBSyxJQUFJLFNBQVNpVyxHQUFHLzVJLEVBQUVvbEMsRUFBRW5MLEVBQUVNLEdBQUcsR0FBR3UvRyxHQUFHLENBQUMsSUFBSXI1SSxFQUFFc3ZJLEdBQUduMkYsRUFBRXhVLEVBQUVBLEVBQUV3VSxFQUFFb2dHLFNBQVMsU0FBU2g2SSxHQUFHLEdBQUdBLEVBQUV3RCxTQUFTeEQsRUFBRThHLGVBQWU5RyxFQUFFa3dJLFdBQVd6dkksR0FBR1QsRUFBRWt3SSxXQUFXLEdBQUdsd0ksRUFBRXdELE9BQU8yK0UsZ0JBQWdCejVFLFNBQVMsT0FBT2t4QyxFQUFFamlCLE1BQU0zOEIsS0FBSzQ4QixZQUFZK2hILEdBQUdydEksaUJBQWlCdE0sRUFBRW9sQyxFQUFFNCtGLEdBQUUsQ0FBQzRGLFFBQVEzdkcsRUFBRTR2RyxRQUFRdHZHLEdBQUdOLEdBQUcsU0FBUzQvRyxHQUFHNzVJLEVBQUVvbEMsRUFBRW5MLEVBQUVNLElBQUlBLEdBQUdvL0csSUFBSWpqSCxvQkFBb0IxMkIsRUFBRW9sQyxFQUFFNDBHLFVBQVU1MEcsRUFBRW5MLEdBQUcsU0FBU2dnSCxHQUFHajZJLEVBQUV1NkIsR0FBRyxJQUFJNkssRUFBRXBsQyxFQUFFdEUsS0FBS1csTUFBTStvQyxFQUFFN0ssRUFBRTcrQixLQUFLVyxJQUFJLENBQUMsSUFBSW9FLEVBQUU4NUIsRUFBRTcrQixLQUFLVyxJQUFJLEdBQUd1OUMsRUFBRTU1QyxFQUFFdEUsS0FBS1csSUFBSSxHQUFHczlJLEdBQUdwL0csRUFBRTJxRyxJQUFJLFNBQVNsbEksR0FBRyxHQUFHaTZCLEVBQUVqNkIsRUFBSSxLQUFHLENBQUMsSUFBSW9sQyxFQUFFeEMsRUFBRSxTQUFTLFFBQVE1aUMsRUFBRW9sQyxHQUFHLEdBQUdqa0MsT0FBT25CLEVBQUksSUFBRUEsRUFBRW9sQyxJQUFJLFdBQVdwbEMsRUFBSSxJQUFFaTZCLEVBQUVqNkIsRUFBSSxPQUFLQSxFQUFFb3dCLE9BQU8sR0FBR2p2QixPQUFPbkIsRUFBSSxJQUFFQSxFQUFFb3dCLFFBQVEsV0FBV3B3QixFQUFJLEtBQTNKLENBQStKUyxHQUFHdXBJLEdBQUd2cEksRUFBRW01QyxFQUFFbWdHLEdBQUdGLEdBQUdELEdBQUdyL0csRUFBRTZpQixTQUFTdThGLFFBQUcsR0FBUSxJQUFJTyxHQUFHOTZHLEdBQUcsQ0FBQ3FJLE9BQU93eUcsR0FBR3BqSCxPQUFPb2pILElBQUksU0FBU0UsR0FBR242SSxFQUFFdTZCLEdBQUcsSUFBSTZLLEVBQUVwbEMsRUFBRXRFLEtBQUsrK0gsWUFBWXIxRixFQUFFN0ssRUFBRTcrQixLQUFLKytILFVBQVUsQ0FBQyxJQUFJaDZILEVBQUVtNUMsRUFBRXpmLEVBQUVJLEVBQUUycUcsSUFBSTlxRyxFQUFFcDZCLEVBQUV0RSxLQUFLKytILFVBQVUsR0FBRzMvRixFQUFFUCxFQUFFNytCLEtBQUsrK0gsVUFBVSxHQUFHLElBQUloNkgsS0FBS3c1QixFQUFFYSxFQUFFeXJHLFVBQVV6ckcsRUFBRVAsRUFBRTcrQixLQUFLKytILFNBQVMzcUYsRUFBRSxHQUFHaFYsSUFBSVYsRUFBRTM1QixLQUFLcTZCLElBQUlYLEVBQUUxNUIsR0FBRyxJQUFJLElBQUlBLEtBQUtxNkIsRUFBRSxDQUFDLEdBQUc4ZSxFQUFFOWUsRUFBRXI2QixHQUFHLGdCQUFnQkEsR0FBRyxjQUFjQSxFQUFFLENBQUMsR0FBRzg1QixFQUFFN2xCLFdBQVc2bEIsRUFBRTdsQixTQUFTM1osT0FBTyxHQUFHNitDLElBQUl4ZixFQUFFMzVCLEdBQUcsU0FBUyxJQUFJMDVCLEVBQUVsa0IsV0FBV2xiLFFBQVFvL0IsRUFBRStaLFlBQVkvWixFQUFFbGtCLFdBQVcsSUFBSSxHQUFHLFVBQVV4VixHQUFHLGFBQWEwNUIsRUFBRXlvRCxRQUFRLENBQUN6b0QsRUFBRWlnSCxPQUFPeGdHLEVBQUUsSUFBSXdvRixFQUFFaDlGLEVBQUV3VSxHQUFHLEdBQUd0ZSxPQUFPc2UsR0FBR3lnRyxHQUFHbGdILEVBQUVpb0csS0FBS2pvRyxFQUFFejdCLE1BQU0wakksUUFBUSxHQUFHLGNBQWMzaEksR0FBR28wSSxHQUFHMTZHLEVBQUV5b0QsVUFBVXg5QyxFQUFFakwsRUFBRTF1QixXQUFXLEVBQUV5dUksR0FBR0EsSUFBSXh4SSxTQUFTeUMsY0FBYyxRQUFRTSxVQUFVLFFBQVFtdUMsRUFBRSxTQUFTLElBQUksSUFBSTNlLEVBQUVpL0csR0FBRzlrSSxXQUFXK2tCLEVBQUUva0IsWUFBWStrQixFQUFFK1osWUFBWS9aLEVBQUUva0IsWUFBWSxLQUFLNmxCLEVBQUU3bEIsWUFBWStrQixFQUFFanVCLFlBQVkrdUIsRUFBRTdsQixpQkFBaUIsR0FBR3drQyxJQUFJeGYsRUFBRTM1QixHQUFHLElBQUkwNUIsRUFBRTE1QixHQUFHbTVDLEVBQUUsTUFBTTU1QyxPQUFPLFNBQVNxNkksR0FBR3I2SSxFQUFFb2xDLEdBQUcsT0FBT3BsQyxFQUFFazlILFlBQVksV0FBV2w5SCxFQUFFNGlGLFNBQVMsU0FBUzVpRixFQUFFb2xDLEdBQUcsSUFBSW5MLEdBQUUsRUFBRyxJQUFJQSxFQUFFdnhCLFNBQVNpNkUsZ0JBQWdCM2lGLEVBQUUsTUFBTUEsSUFBSSxPQUFPaTZCLEdBQUdqNkIsRUFBRXRCLFFBQVEwbUMsRUFBdEYsQ0FBeUZwbEMsRUFBRW9sQyxJQUFJLFNBQVNwbEMsRUFBRW9sQyxHQUFHLElBQUk3SyxFQUFFdjZCLEVBQUV0QixNQUFNK0IsRUFBRVQsRUFBRXM2SSxZQUFZLEdBQUdyZ0gsRUFBRXg1QixHQUFHLENBQUMsR0FBR0EsRUFBRXF5RCxPQUFPLE9BQU81cEIsRUFBRTNPLEtBQUsyTyxFQUFFOUQsR0FBRyxHQUFHM2tDLEVBQUUwVSxLQUFLLE9BQU9vbEIsRUFBRXBsQixTQUFTaXdCLEVBQUVqd0IsT0FBTyxPQUFPb2xCLElBQUk2SyxFQUFwSSxDQUF1SXBsQyxFQUFFb2xDLElBQUksSUFBSW0xRyxHQUFHLENBQUM5eUcsT0FBTzB5RyxHQUFHdGpILE9BQU9zakgsSUFBSXJpQyxHQUFHNTRELEdBQUUsU0FBU2wvQyxHQUFHLElBQUlvbEMsRUFBRSxHQUFHbkwsRUFBRSxRQUFRLE9BQU9qNkIsRUFBRXdHLE1BQU0saUJBQWlCakcsU0FBUSxTQUFTUCxHQUFHLEdBQUdBLEVBQUUsQ0FBQyxJQUFJdTZCLEVBQUV2NkIsRUFBRXdHLE1BQU15ekIsR0FBR00sRUFBRXgvQixPQUFPLElBQUlxcUMsRUFBRTdLLEVBQUUsR0FBR3BsQixRQUFRb2xCLEVBQUUsR0FBR3BsQixZQUFXaXdCLEtBQUksU0FBU28xRyxHQUFHeDZJLEdBQUcsSUFBSW9sQyxFQUFFcTFHLEdBQUd6NkksRUFBRTZWLE9BQU8sT0FBTzdWLEVBQUUwNkksWUFBWTVxRyxFQUFFOXZDLEVBQUUwNkksWUFBWXQxRyxHQUFHQSxFQUFFLFNBQVNxMUcsR0FBR3o2SSxHQUFHLE9BQU9vSCxNQUFNcEcsUUFBUWhCLEdBQUdxb0MsRUFBRXJvQyxHQUFHLGlCQUFpQkEsRUFBRTgzRyxHQUFHOTNHLEdBQUdBLEVBQUUsSUFBSTRwRixHQUFHK3dELEdBQUcsTUFBTUMsR0FBRyxpQkFBaUJDLEdBQUcsU0FBUzc2SSxFQUFFb2xDLEVBQUVuTCxHQUFHLEdBQUcwZ0gsR0FBR3Q4RyxLQUFLK0csR0FBR3BsQyxFQUFFNlYsTUFBTWlsSSxZQUFZMTFHLEVBQUVuTCxRQUFRLEdBQUcyZ0gsR0FBR3Y4RyxLQUFLcEUsR0FBR2o2QixFQUFFNlYsTUFBTWlsSSxZQUFZendHLEVBQUVqRixHQUFHbkwsRUFBRWo5QixRQUFRNDlJLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJcmdILEVBQUV3Z0gsR0FBRzMxRyxHQUFHLEdBQUdoK0IsTUFBTXBHLFFBQVFpNUIsR0FBRyxJQUFJLElBQUl4NUIsRUFBRSxFQUFFbTVDLEVBQUUzZixFQUFFbC9CLE9BQU8wRixFQUFFbTVDLEVBQUVuNUMsSUFBSVQsRUFBRTZWLE1BQU0wa0IsR0FBR04sRUFBRXg1QixRQUFRVCxFQUFFNlYsTUFBTTBrQixHQUFHTixJQUFJK2dILEdBQUcsQ0FBQyxTQUFTLE1BQU0sTUFBTUQsR0FBRzc3RixHQUFFLFNBQVNsL0MsR0FBRyxHQUFHNHBGLEdBQUdBLElBQUlsaEYsU0FBU3lDLGNBQWMsT0FBTzBLLE1BQU0sWUFBWTdWLEVBQUU0NkIsRUFBRTU2QixLQUFLQSxLQUFLNHBGLEdBQUcsT0FBTzVwRixFQUFFLElBQUksSUFBSW9sQyxFQUFFcGxDLEVBQUUwN0IsT0FBTyxHQUFHK0MsY0FBY3orQixFQUFFaUIsTUFBTSxHQUFHZzVCLEVBQUUsRUFBRUEsRUFBRStnSCxHQUFHamdKLE9BQU9rL0IsSUFBSSxDQUFDLElBQUlNLEVBQUV5Z0gsR0FBRy9nSCxHQUFHbUwsRUFBRSxHQUFHN0ssS0FBS3F2RCxHQUFHLE9BQU9ydkQsTUFBSyxTQUFTMGdILEdBQUdqN0ksRUFBRXU2QixHQUFHLElBQUk5NUIsRUFBRTg1QixFQUFFNytCLEtBQUtrK0MsRUFBRTU1QyxFQUFFdEUsS0FBSyxLQUFLMHBDLEVBQUUza0MsRUFBRWk2SSxjQUFjdDFHLEVBQUUza0MsRUFBRW9WLFFBQVF1dkIsRUFBRXdVLEVBQUU4Z0csY0FBY3QxRyxFQUFFd1UsRUFBRS9qQyxRQUFRLENBQUMsSUFBSXNrQixFQUFFQyxFQUFFVSxFQUFFUCxFQUFFMnFHLElBQUk5QyxFQUFFeG9GLEVBQUU4Z0csWUFBWXovRyxFQUFFMmUsRUFBRXNoRyxpQkFBaUJ0aEcsRUFBRS9qQyxPQUFPLEdBQUdxekIsRUFBRWs1RixHQUFHbm5HLEVBQUVpRixFQUFFdTZHLEdBQUdsZ0gsRUFBRTcrQixLQUFLbWEsUUFBUSxHQUFHMGtCLEVBQUU3K0IsS0FBS3cvSSxnQkFBZ0JqaEgsRUFBRWlHLEVBQUVxbUcsUUFBUXoyRixFQUFFLEdBQUc1UCxHQUFHQSxFQUFFLElBQUlmLEVBQUUsU0FBU24vQixFQUFFb2xDLEdBQW1CLElBQWhCLElBQUluTCxFQUFFTSxFQUFFLEdBQWdCOTVCLEVBQUVULEVBQUVTLEVBQUUra0ksb0JBQW9CL2tJLEVBQUVBLEVBQUUra0ksa0JBQWtCNkgsU0FBUzVzSSxFQUFFL0UsT0FBT3UrQixFQUFFdWdILEdBQUcvNUksRUFBRS9FLFFBQVFvMEMsRUFBRXZWLEVBQUVOLElBQUlBLEVBQUV1Z0gsR0FBR3g2SSxFQUFFdEUsUUFBUW8wQyxFQUFFdlYsRUFBRU4sR0FBRyxJQUFJLElBQUkyZixFQUFFNTVDLEVBQUU0NUMsRUFBRUEsRUFBRXBMLFFBQVFvTCxFQUFFbCtDLE9BQU91K0IsRUFBRXVnSCxHQUFHNWdHLEVBQUVsK0MsUUFBUW8wQyxFQUFFdlYsRUFBRU4sR0FBRyxPQUFPTSxFQUFuTixDQUFzTkEsR0FBTSxJQUFJSCxLQUFLOE8sRUFBRTlELEVBQUVqRyxFQUFFL0UsS0FBS3lnSCxHQUFHLy9HLEVBQUVWLEVBQUUsSUFBSSxJQUFJQSxLQUFLK0UsR0FBR2hGLEVBQUVnRixFQUFFL0UsTUFBTThPLEVBQUU5TyxJQUFJeWdILEdBQUcvL0csRUFBRVYsRUFBRSxNQUFNRCxFQUFFLEdBQUdBLElBQUksSUFBSWdoSCxHQUFHLENBQUMxekcsT0FBT3d6RyxHQUFHcGtILE9BQU9va0gsSUFBSUcsR0FBRyxNQUFNLFNBQVNDLEdBQUdyN0ksRUFBRW9sQyxHQUFHLEdBQUdBLElBQUlBLEVBQUVBLEVBQUVqd0IsUUFBUSxHQUFHblYsRUFBRW9MLFVBQVVnNkIsRUFBRWpPLFFBQVEsTUFBTSxFQUFFaU8sRUFBRTUrQixNQUFNNDBJLElBQUk3NkksU0FBUSxTQUFTNmtDLEdBQUcsT0FBT3BsQyxFQUFFb0wsVUFBVUMsSUFBSSs1QixNQUFLcGxDLEVBQUVvTCxVQUFVQyxJQUFJKzVCLE9BQU8sQ0FBQyxJQUFJbkwsRUFBRSxLQUFLajZCLEVBQUVrc0YsYUFBYSxVQUFVLElBQUksSUFBSWp5RCxFQUFFOUMsUUFBUSxJQUFJaU8sRUFBRSxLQUFLLEdBQUdwbEMsRUFBRTJMLGFBQWEsU0FBU3N1QixFQUFFbUwsR0FBR2p3QixTQUFTLFNBQVM2L0IsR0FBR2gxQyxFQUFFb2xDLEdBQUcsR0FBR0EsSUFBSUEsRUFBRUEsRUFBRWp3QixRQUFRLEdBQUduVixFQUFFb0wsVUFBVWc2QixFQUFFak8sUUFBUSxNQUFNLEVBQUVpTyxFQUFFNStCLE1BQU00MEksSUFBSTc2SSxTQUFRLFNBQVM2a0MsR0FBRyxPQUFPcGxDLEVBQUVvTCxVQUFVM0gsT0FBTzJoQyxNQUFLcGxDLEVBQUVvTCxVQUFVM0gsT0FBTzJoQyxHQUFHcGxDLEVBQUVvTCxVQUFVclEsUUFBUWlGLEVBQUVnb0csZ0JBQWdCLGFBQWEsQ0FBQyxJQUFJLElBQUkvdEUsRUFBRSxLQUFLajZCLEVBQUVrc0YsYUFBYSxVQUFVLElBQUksSUFBSTN4RCxFQUFFLElBQUk2SyxFQUFFLElBQUluTCxFQUFFOUMsUUFBUW9ELElBQUksR0FBR04sRUFBRUEsRUFBRWo5QixRQUFRdTlCLEVBQUUsTUFBTU4sRUFBRUEsRUFBRTlrQixRQUFRblYsRUFBRTJMLGFBQWEsUUFBUXN1QixHQUFHajZCLEVBQUVnb0csZ0JBQWdCLFVBQVUsU0FBUytQLEdBQUcvM0csR0FBRyxHQUFHQSxFQUFFLENBQUMsR0FBRyxpQkFBaUJBLEVBQUUsQ0FBQyxJQUFJb2xDLEVBQUUsR0FBRyxPQUFNLElBQUtwbEMsRUFBRW83RyxLQUFLdHJFLEVBQUUxSyxFQUFFazJHLEdBQUd0N0ksRUFBRTJDLE1BQU0sTUFBTW10QyxFQUFFMUssRUFBRXBsQyxHQUFHb2xDLEVBQUUsTUFBTSxpQkFBaUJwbEMsRUFBRXM3SSxHQUFHdDdJLFFBQUcsR0FBUSxJQUFJczdJLEdBQUdwOEYsR0FBRSxTQUFTbC9DLEdBQUcsTUFBTSxDQUFDdTdJLFdBQVd2N0ksRUFBRSxTQUFTdzdJLGFBQWF4N0ksRUFBRSxZQUFZeTdJLGlCQUFpQno3SSxFQUFFLGdCQUFnQjA3SSxXQUFXMTdJLEVBQUUsU0FBUzI3SSxhQUFhMzdJLEVBQUUsWUFBWTQ3SSxpQkFBaUI1N0ksRUFBRSxvQkFBbUI2N0ksR0FBR3hoSCxJQUFJOFAsRUFBRTJ4RyxHQUFHLGFBQWE3NEcsR0FBRyxZQUFZODRHLEdBQUcsYUFBYUMsR0FBRyxnQkFBZ0JDLEdBQUcsWUFBWUMsR0FBRyxlQUFlTCxVQUFLLElBQVN2aEosT0FBTzZoSixzQkFBaUIsSUFBUzdoSixPQUFPOGhKLHdCQUF3QkwsR0FBRyxtQkFBbUJDLEdBQUcsNEJBQXVCLElBQVMxaEosT0FBTytoSixxQkFBZ0IsSUFBUy9oSixPQUFPZ2lKLHVCQUF1QkwsR0FBRyxrQkFBa0JDLEdBQUcsdUJBQXVCLElBQUlLLEdBQUdsaUgsRUFBRS8vQixPQUFPbzVGLHNCQUFzQnA1RixPQUFPbzVGLHNCQUFzQjN6RixLQUFLekYsUUFBUTY1QyxXQUFXLFNBQVNuMEMsR0FBRyxPQUFPQSxLQUFLLFNBQVN3OEksR0FBR3g4SSxHQUFHdThJLElBQUcsV0FBV0EsR0FBR3Y4SSxNQUFLLFNBQVN5OEksR0FBR3o4SSxFQUFFb2xDLEdBQUcsSUFBSW5MLEVBQUVqNkIsRUFBRW0zSSxxQkFBcUJuM0ksRUFBRW0zSSxtQkFBbUIsSUFBSWw5RyxFQUFFOUMsUUFBUWlPLEdBQUcsSUFBSW5MLEVBQUUzK0IsS0FBSzhwQyxHQUFHaTJHLEdBQUdyN0ksRUFBRW9sQyxJQUFJLFNBQVNzM0csR0FBRzE4SSxFQUFFb2xDLEdBQUdwbEMsRUFBRW0zSSxvQkFBb0JoNEYsRUFBRW4vQyxFQUFFbTNJLG1CQUFtQi94RyxHQUFHNFAsR0FBR2gxQyxFQUFFb2xDLEdBQUcsU0FBU3UzRyxHQUFHMzhJLEVBQUVvbEMsRUFBRW5MLEdBQUcsSUFBSU0sRUFBRXFpSCxHQUFHNThJLEVBQUVvbEMsR0FBRzNrQyxFQUFFODVCLEVBQUV0Z0MsS0FBSzIvQyxFQUFFcmYsRUFBRXc1RSxRQUFRNTVFLEVBQUVJLEVBQUVzaUgsVUFBVSxJQUFJcDhJLEVBQUUsT0FBT3c1QixJQUFJLElBQUlHLEVBQUUzNUIsSUFBSXE3SSxHQUFHRSxHQUFHRSxHQUFHcGhILEVBQUUsRUFBRXNuRyxFQUFFLFdBQVdwaUksRUFBRTAyQixvQkFBb0IwRCxFQUFFYSxHQUFHaEIsS0FBS2dCLEVBQUUsU0FBU21LLEdBQUdBLEVBQUU1aEMsU0FBU3hELEtBQUs4NkIsR0FBR1gsR0FBR2lvRyxLQUFLanVGLFlBQVcsV0FBV3JaLEVBQUVYLEdBQUdpb0csTUFBS3hvRixFQUFFLEdBQUc1NUMsRUFBRXNNLGlCQUFpQjh0QixFQUFFYSxHQUFHLElBQUk2aEgsR0FBRyx5QkFBeUIsU0FBU0YsR0FBRzU4SSxFQUFFb2xDLEdBQUcsSUFBSW5MLEVBQUVNLEVBQUVqZ0MsT0FBT3lnRixpQkFBaUIvNkUsR0FBR1MsR0FBRzg1QixFQUFFd2hILEdBQUcsVUFBVSxJQUFJdjFJLE1BQU0sTUFBTW96QyxHQUFHcmYsRUFBRXdoSCxHQUFHLGFBQWEsSUFBSXYxSSxNQUFNLE1BQU0yekIsRUFBRTRpSCxHQUFHdDhJLEVBQUVtNUMsR0FBR3hmLEdBQUdHLEVBQUUwaEgsR0FBRyxVQUFVLElBQUl6MUksTUFBTSxNQUFNczBCLEdBQUdQLEVBQUUwaEgsR0FBRyxhQUFhLElBQUl6MUksTUFBTSxNQUFNNDdILEVBQUUyYSxHQUFHM2lILEVBQUVVLEdBQUdHLEVBQUUsRUFBRWlPLEVBQUUsRUFBRSxPQUFPOUQsSUFBSTAyRyxHQUFHM2hILEVBQUUsSUFBSUYsRUFBRTZoSCxHQUFHN2dILEVBQUVkLEVBQUUrTyxFQUFFMFEsRUFBRTcrQyxRQUFRcXFDLElBQUluQyxHQUFHbS9GLEVBQUUsSUFBSW5vRyxFQUFFZ0osR0FBR2hJLEVBQUVtbkcsRUFBRWw1RixFQUFFcE8sRUFBRS8vQixRQUFRbXVDLEdBQUdqUCxHQUFHZ0IsRUFBRXpxQixLQUFLNHFCLElBQUlqQixFQUFFaW9HLElBQUksRUFBRWpvRyxFQUFFaW9HLEVBQUUwWixHQUFHNzRHLEdBQUcsTUFBTWhKLElBQUk2aEgsR0FBR2xpRyxFQUFFNytDLE9BQU8rL0IsRUFBRS8vQixPQUFPLEVBQUUsQ0FBQ2QsS0FBS2dnQyxFQUFFODVFLFFBQVE5NEUsRUFBRTRoSCxVQUFVM3pHLEVBQUU4ekcsYUFBYS9pSCxJQUFJNmhILElBQUlnQixHQUFHeitHLEtBQUs5RCxFQUFFd2hILEdBQUcsY0FBYyxTQUFTZ0IsR0FBRy84SSxFQUFFb2xDLEdBQUcsS0FBS3BsQyxFQUFFakYsT0FBT3FxQyxFQUFFcnFDLFFBQVFpRixFQUFFQSxFQUFFbUIsT0FBT25CLEdBQUcsT0FBT3dRLEtBQUs0cUIsSUFBSXpELE1BQU0sS0FBS3lOLEVBQUUzVyxLQUFJLFNBQVMyVyxFQUFFbkwsR0FBRyxPQUFPZ2pILEdBQUc3M0csR0FBRzYzRyxHQUFHajlJLEVBQUVpNkIsUUFBTyxTQUFTZ2pILEdBQUdqOUksR0FBRyxPQUFPLElBQUlzSyxPQUFPdEssRUFBRWlCLE1BQU0sR0FBRyxHQUFHakUsUUFBUSxJQUFJLE1BQU0sU0FBU2tnSixHQUFHbDlJLEVBQUV1NkIsR0FBRyxJQUFJOTVCLEVBQUVULEVBQUVrbEksSUFBSWpyRyxFQUFFeDVCLEVBQUUwOEksWUFBWTE4SSxFQUFFMDhJLFNBQVNobkMsV0FBVSxFQUFHMTFHLEVBQUUwOEksWUFBWSxJQUFJaGpILEVBQUU0OUUsR0FBRy8zRyxFQUFFdEUsS0FBSzIxSCxZQUFZLElBQUlqc0YsRUFBRWpMLEtBQUtGLEVBQUV4NUIsRUFBRTI4SSxXQUFXLElBQUkzOEksRUFBRStsRCxTQUFTLENBQUMsSUFBSSxJQUFJcHNCLEVBQUVELEVBQUVpaEYsSUFBSXRnRixFQUFFWCxFQUFFbGdDLEtBQUttb0ksRUFBRWpvRyxFQUFFb2hILFdBQVd0Z0gsRUFBRWQsRUFBRXFoSCxhQUFhdDdHLEVBQUUvRixFQUFFc2hILGlCQUFpQnQ4RyxFQUFFaEYsRUFBRWtqSCxZQUFZci9HLEVBQUU3RCxFQUFFbWpILGNBQWNuK0YsRUFBRWhsQixFQUFFb2pILGtCQUFrQngrRyxFQUFFNUUsRUFBRXFqSCxZQUFZN2lILEVBQUVSLEVBQUV3VSxNQUFNdVEsRUFBRS9rQixFQUFFc2pILFdBQVcxOEksRUFBRW81QixFQUFFdWpILGVBQWU5aUgsRUFBRVQsRUFBRXdqSCxhQUFhcGpKLEVBQUU0L0IsRUFBRXlqSCxPQUFPN2hHLEVBQUU1aEIsRUFBRTBqSCxZQUFZeHpHLEVBQUVsUSxFQUFFMmpILGdCQUFnQnBqSCxFQUFFUCxFQUFFLy9CLFNBQVM0Z0MsRUFBRWt5RyxHQUFHcDlGLEVBQUVvOUYsR0FBR3pOLE9BQU8zdkYsR0FBR0EsRUFBRXRCLFFBQVF4VCxFQUFFOFUsRUFBRXNOLFFBQVF0TixFQUFFQSxFQUFFdEIsT0FBTyxJQUFJbkcsR0FBR3JOLEVBQUU0eUcsYUFBYTV0SSxFQUFFMmxJLGFBQWEsSUFBSXQ5RixHQUFHOXRDLEdBQUcsS0FBS0EsRUFBRSxDQUFDLElBQUl3dkMsRUFBRTFCLEdBQUdsSixFQUFFQSxFQUFFaWpHLEVBQUUzNUYsRUFBRUosR0FBRzhXLEVBQUVBLEVBQUVqZixFQUFFb2lHLEVBQUVqNkYsR0FBR3JLLEVBQUVBLEVBQUUvQyxFQUFFc25HLEVBQUVsNkYsR0FBR3pOLEdBQUdtRSxFQUFFekUsRUFBRStOLEdBQUcsbUJBQW1COXRDLEVBQUVBLEVBQUVvZ0MsRUFBRTZuRyxFQUFFbjZGLEdBQUcwVCxHQUFHbUQsRUFBRXVqRixFQUFFcDZGLEdBQUdnQyxHQUFHdHBDLEVBQUUyaEksRUFBRXg1RixFQUFFMFEsRUFBRWxmLEdBQUdBLEVBQUVpVSxNQUFNalUsR0FBR2lQLEdBQUUsSUFBS3ZQLElBQUkrUCxFQUFFMU4sRUFBRXNoSCxHQUFHempILEdBQUdrUSxFQUFFL3BDLEVBQUUyOEksU0FBUzUxRyxHQUFFLFdBQVdtQyxJQUFJK3lHLEdBQUdqOEksRUFBRTZoSSxHQUFHb2EsR0FBR2o4SSxFQUFFZ29DLElBQUkrQixFQUFFMnJFLFdBQVd4c0UsR0FBRyt5RyxHQUFHajhJLEVBQUVzcEMsR0FBRzA0RixHQUFHQSxFQUFFaGlJLElBQUkraEksR0FBR0EsRUFBRS9oSSxHQUFHQSxFQUFFMjhJLFNBQVMsUUFBT3A5SSxFQUFFdEUsS0FBSzJRLE1BQU1xN0IsR0FBRzFuQyxFQUFFLFVBQVMsV0FBVyxJQUFJb2xDLEVBQUUza0MsRUFBRW9ULFdBQVdvbUIsRUFBRW1MLEdBQUdBLEVBQUU0NEcsVUFBVTU0RyxFQUFFNDRHLFNBQVNoK0ksRUFBRWtCLEtBQUsrNEIsR0FBR0EsRUFBRWdZLE1BQU1qeUMsRUFBRWl5QyxLQUFLaFksRUFBRWlyRyxJQUFJaVksVUFBVWxqSCxFQUFFaXJHLElBQUlpWSxXQUFXN2lILEdBQUdBLEVBQUU3NUIsRUFBRStwQyxNQUFLKzNGLEdBQUdBLEVBQUU5aEksR0FBR2twQyxJQUFJOHlHLEdBQUdoOEksRUFBRXNwQyxHQUFHMHlHLEdBQUdoOEksRUFBRWdvQyxHQUFHK3pHLElBQUcsV0FBV0UsR0FBR2o4SSxFQUFFc3BDLEdBQUdTLEVBQUUyckUsWUFBWXNtQyxHQUFHaDhJLEVBQUU2aEksR0FBRzdsRyxJQUFJd2hILEdBQUd2YixHQUFHdnVGLFdBQVczSixFQUFFazRGLEdBQUdpYSxHQUFHbDhJLEVBQUVxNkIsRUFBRTBQLFNBQVF4cUMsRUFBRXRFLEtBQUsyUSxPQUFPa3VCLEdBQUdBLElBQUlELEdBQUdBLEVBQUU3NUIsRUFBRStwQyxJQUFJYixHQUFHbE4sR0FBRytOLE1BQU0sU0FBUzB6RyxHQUFHbCtJLEVBQUV1NkIsR0FBRyxJQUFJOTVCLEVBQUVULEVBQUVrbEksSUFBSWpyRyxFQUFFeDVCLEVBQUUyOEksWUFBWTM4SSxFQUFFMjhJLFNBQVNqbkMsV0FBVSxFQUFHMTFHLEVBQUUyOEksWUFBWSxJQUFJampILEVBQUU0OUUsR0FBRy8zRyxFQUFFdEUsS0FBSzIxSCxZQUFZLEdBQUdqc0YsRUFBRWpMLElBQUksSUFBSTE1QixFQUFFK2xELFNBQVMsT0FBT2pzQixJQUFJLElBQUlOLEVBQUV4NUIsRUFBRTA4SSxVQUFVLENBQUMsSUFBSS9pSCxFQUFFRCxFQUFFaWhGLElBQUl0Z0YsRUFBRVgsRUFBRWxnQyxLQUFLbW9JLEVBQUVqb0csRUFBRXVoSCxXQUFXemdILEVBQUVkLEVBQUV3aEgsYUFBYXo3RyxFQUFFL0YsRUFBRXloSCxpQkFBaUJ6OEcsRUFBRWhGLEVBQUVna0gsWUFBWW5nSCxFQUFFN0QsRUFBRWlrSCxNQUFNai9GLEVBQUVobEIsRUFBRWtrSCxXQUFXdC9HLEVBQUU1RSxFQUFFbWtILGVBQWUzakgsRUFBRVIsRUFBRW9rSCxXQUFXci9GLEVBQUUva0IsRUFBRS8vQixTQUFTMkcsR0FBRSxJQUFLcTVCLElBQUkrUCxFQUFFdlAsRUFBRW1qSCxHQUFHLy9HLEdBQUd6akMsRUFBRTJ1QyxFQUFFMFEsRUFBRXNGLEdBQUdBLEVBQUVrL0YsTUFBTWwvRixHQUFHbkQsRUFBRXQ3QyxFQUFFMDhJLFNBQVMzMUcsR0FBRSxXQUFXL21DLEVBQUVvVCxZQUFZcFQsRUFBRW9ULFdBQVdtcUksV0FBV3Y5SSxFQUFFb1QsV0FBV21xSSxTQUFTaCtJLEVBQUVrQixLQUFLLE1BQU1ILElBQUkyN0ksR0FBR2o4SSxFQUFFdzZCLEdBQUd5aEgsR0FBR2o4SSxFQUFFeS9CLElBQUk2YixFQUFFbzZELFdBQVdwMUcsR0FBRzI3SSxHQUFHajhJLEVBQUUyaEksR0FBR3JqRyxHQUFHQSxFQUFFdCtCLEtBQUs4NUIsSUFBSTRrQixHQUFHQSxFQUFFMStDLElBQUlBLEVBQUUwOEksU0FBUyxRQUFPeGlILEVBQUVBLEVBQUUwUCxHQUFHQSxJQUFJLFNBQVNBLElBQUkwUixFQUFFbzZELGFBQWFuMkcsRUFBRXRFLEtBQUsyUSxNQUFNNUwsRUFBRW9ULGNBQWNwVCxFQUFFb1QsV0FBV21xSSxXQUFXdjlJLEVBQUVvVCxXQUFXbXFJLFNBQVMsS0FBS2grSSxFQUFFa0IsS0FBS2xCLEdBQUdtL0IsR0FBR0EsRUFBRTErQixHQUFHTSxJQUFJMDdJLEdBQUdoOEksRUFBRTJoSSxHQUFHcWEsR0FBR2g4SSxFQUFFeS9CLEdBQUdzOEcsSUFBRyxXQUFXRSxHQUFHajhJLEVBQUUyaEksR0FBR3JtRixFQUFFbzZELFlBQVlzbUMsR0FBR2g4SSxFQUFFdzZCLEdBQUdMLElBQUlxakgsR0FBRzFqSixHQUFHNDVDLFdBQVc0SCxFQUFFeGhELEdBQUdvaUosR0FBR2w4SSxFQUFFcTZCLEVBQUVpaEIsU0FBUS9kLEdBQUdBLEVBQUV2OUIsRUFBRXM3QyxHQUFHaDdDLEdBQUc2NUIsR0FBR21oQixNQUFNLFNBQVNraUcsR0FBR2orSSxHQUFHLE1BQU0saUJBQWlCQSxJQUFJd21CLE1BQU14bUIsR0FBRyxTQUFTKzlJLEdBQUcvOUksR0FBRyxHQUFHb2xDLEVBQUVwbEMsR0FBRyxPQUFNLEVBQUcsSUFBSXU2QixFQUFFdjZCLEVBQUUrcEksSUFBSSxPQUFPOXZHLEVBQUVNLEdBQUd3akgsR0FBRzMySSxNQUFNcEcsUUFBUXU1QixHQUFHQSxFQUFFLEdBQUdBLElBQUl2NkIsRUFBRXFpSSxTQUFTcmlJLEVBQUVqRixRQUFRLEVBQUUsU0FBU3lqSixHQUFHeCtJLEVBQUVvbEMsSUFBRyxJQUFLQSxFQUFFMXBDLEtBQUsyUSxNQUFNNndJLEdBQUc5M0csR0FBRyxJQUFJcTVHLEdBQUcsU0FBU3orSSxHQUFHLElBQUk0NUMsRUFBRXpmLEVBQUVDLEVBQUUsR0FBR1UsRUFBRTk2QixFQUFFbW5CLFFBQVFpN0csRUFBRXBpSSxFQUFFMCtJLFFBQVEsSUFBSTlrRyxFQUFFLEVBQUVBLEVBQUUrN0YsR0FBRzU2SSxTQUFTNitDLEVBQUUsSUFBSXhmLEVBQUV1N0csR0FBRy83RixJQUFJLEdBQUd6ZixFQUFFLEVBQUVBLEVBQUVXLEVBQUUvL0IsU0FBU28vQixFQUFFRixFQUFFYSxFQUFFWCxHQUFHdzdHLEdBQUcvN0YsTUFBTXhmLEVBQUV1N0csR0FBRy83RixJQUFJdCtDLEtBQUt3L0IsRUFBRVgsR0FBR3c3RyxHQUFHLzdGLEtBQUssU0FBUzNlLEVBQUVqN0IsR0FBRyxJQUFJb2xDLEVBQUVnOUYsRUFBRXZ1SCxXQUFXN1QsR0FBR2k2QixFQUFFbUwsSUFBSWc5RixFQUFFbHVGLFlBQVk5TyxFQUFFcGxDLEdBQUcsU0FBU2twQyxFQUFFbHBDLEVBQUVvbEMsRUFBRTNrQyxFQUFFbTVDLEVBQUV6ZixFQUFFVyxFQUFFRyxHQUFHLEdBQUdoQixFQUFFajZCLEVBQUVrbEksTUFBTWpyRyxFQUFFYSxLQUFLOTZCLEVBQUU4NkIsRUFBRUcsR0FBR29yRyxHQUFHcm1JLElBQUlBLEVBQUUybEksY0FBY3hyRyxHQUFHLFNBQVNuNkIsRUFBRW9sQyxFQUFFM2tDLEVBQUVtNUMsR0FBRyxJQUFJemYsRUFBRW42QixFQUFFdEUsS0FBSyxHQUFHdStCLEVBQUVFLEdBQUcsQ0FBQyxJQUFJVyxFQUFFYixFQUFFajZCLEVBQUV3bEksb0JBQW9CcnJHLEVBQUUweUcsVUFBVSxHQUFHNXlHLEVBQUVFLEVBQUVBLEVBQUVtbEcsT0FBT3JsRyxFQUFFRSxFQUFFQSxFQUFFM3hCLE9BQU8yeEIsRUFBRW42QixHQUFFLEdBQUlpNkIsRUFBRWo2QixFQUFFd2xJLG1CQUFtQixPQUFPcm1HLEVBQUVuL0IsRUFBRW9sQyxHQUFHcEgsRUFBRXY5QixFQUFFVCxFQUFFa2xJLElBQUl0ckYsR0FBR3JmLEVBQUVPLElBQUksU0FBUzk2QixFQUFFb2xDLEVBQUU3SyxFQUFFOTVCLEdBQUcsSUFBSSxJQUFJbTVDLEVBQUV6ZixFQUFFbjZCLEVBQUVtNkIsRUFBRXFyRyxtQkFBbUIsR0FBZ0N2ckcsRUFBRTJmLEdBQS9CemYsRUFBRUEsRUFBRXFyRyxrQkFBa0I2SCxRQUFhM3hJLE9BQU91K0IsRUFBRTJmLEVBQUVBLEVBQUV5M0UsWUFBWSxDQUFDLElBQUl6M0UsRUFBRSxFQUFFQSxFQUFFeGYsRUFBRXlzRixTQUFTOXJILFNBQVM2K0MsRUFBRXhmLEVBQUV5c0YsU0FBU2p0RSxHQUFHODdGLEdBQUd2N0csR0FBR2lMLEVBQUU5cEMsS0FBSzYrQixHQUFHLE1BQU02RCxFQUFFekQsRUFBRXY2QixFQUFFa2xJLElBQUl6a0ksR0FBbk0sQ0FBdU1ULEVBQUVvbEMsRUFBRTNrQyxFQUFFbTVDLElBQUcsR0FBL1gsQ0FBb1k1NUMsRUFBRW9sQyxFQUFFM2tDLEVBQUVtNUMsR0FBRyxDQUFDLElBQUkxUSxFQUFFbHBDLEVBQUV0RSxLQUFLd2tDLEVBQUVsZ0MsRUFBRTBVLFNBQVNxcUIsRUFBRS8rQixFQUFFaXlDLElBQUloWSxFQUFFOEUsSUFBSS8rQixFQUFFa2xJLElBQUlsbEksRUFBRW1sSSxHQUFHL0MsRUFBRXR0QyxnQkFBZ0I5MEYsRUFBRW1sSSxHQUFHcG1HLEdBQUdxakcsRUFBRWozSCxjQUFjNHpCLEVBQUUvK0IsR0FBR2svQyxFQUFFbC9DLEdBQUdtL0MsRUFBRW4vQyxFQUFFa2dDLEVBQUVrRixHQUFHbkwsRUFBRWlQLElBQUl2TyxFQUFFMzZCLEVBQUVvbEMsR0FBR3BILEVBQUV2OUIsRUFBRVQsRUFBRWtsSSxJQUFJdHJGLElBQUlyZixFQUFFdjZCLEVBQUU0bEksWUFBWTVsSSxFQUFFa2xJLElBQUk5QyxFQUFFaVQsY0FBY3IxSSxFQUFFckMsTUFBTXFnQyxFQUFFdjlCLEVBQUVULEVBQUVrbEksSUFBSXRyRixLQUFLNTVDLEVBQUVrbEksSUFBSTlDLEVBQUU5c0gsZUFBZXRWLEVBQUVyQyxNQUFNcWdDLEVBQUV2OUIsRUFBRVQsRUFBRWtsSSxJQUFJdHJGLEtBQUssU0FBU3phLEVBQUVuL0IsRUFBRW9sQyxHQUFHbkwsRUFBRWo2QixFQUFFdEUsS0FBS2lqSixpQkFBaUJ2NUcsRUFBRTlwQyxLQUFLcThCLE1BQU15TixFQUFFcGxDLEVBQUV0RSxLQUFLaWpKLGVBQWUzK0ksRUFBRXRFLEtBQUtpakosY0FBYyxNQUFNMytJLEVBQUVrbEksSUFBSWxsSSxFQUFFd2xJLGtCQUFrQnZwQixJQUFJbDlFLEVBQUUvK0IsSUFBSTI2QixFQUFFMzZCLEVBQUVvbEMsR0FBRzhaLEVBQUVsL0MsS0FBS3cxSSxHQUFHeDFJLEdBQUdvbEMsRUFBRTlwQyxLQUFLMEUsSUFBSSxTQUFTZytCLEVBQUVoK0IsRUFBRW9sQyxFQUFFN0ssR0FBR04sRUFBRWo2QixLQUFLaTZCLEVBQUVNLEdBQUc2bkcsRUFBRXZ1SCxXQUFXMG1CLEtBQUt2NkIsR0FBR29pSSxFQUFFL3NILGFBQWFyVixFQUFFb2xDLEVBQUU3SyxHQUFHNm5HLEVBQUVsMkgsWUFBWWxNLEVBQUVvbEMsSUFBSSxTQUFTK1osRUFBRW4vQyxFQUFFb2xDLEVBQUVuTCxHQUFHLEdBQUc3eUIsTUFBTXBHLFFBQVFva0MsR0FBRyxJQUFJLElBQUk3SyxFQUFFLEVBQUVBLEVBQUU2SyxFQUFFcnFDLFNBQVN3L0IsRUFBRTJPLEVBQUU5RCxFQUFFN0ssR0FBR04sRUFBRWo2QixFQUFFa2xJLElBQUksTUFBSyxFQUFHOS9GLEVBQUU3SyxRQUFROTVCLEVBQUVULEVBQUVyQyxPQUFPeWtJLEVBQUVsMkgsWUFBWWxNLEVBQUVrbEksSUFBSTlDLEVBQUU5c0gsZUFBZWdtQixPQUFPdDdCLEVBQUVyQyxRQUFRLFNBQVNvaEMsRUFBRS8rQixHQUFHLEtBQUtBLEVBQUV3bEksbUJBQW1CeGxJLEVBQUVBLEVBQUV3bEksa0JBQWtCNkgsT0FBTyxPQUFPcHpHLEVBQUVqNkIsRUFBRWl5QyxLQUFLLFNBQVN0WCxFQUFFMzZCLEVBQUVvbEMsR0FBRyxJQUFJLElBQUk3SyxFQUFFLEVBQUVBLEVBQUVILEVBQUVxTixPQUFPMXNDLFNBQVN3L0IsRUFBRUgsRUFBRXFOLE9BQU9sTixHQUFHbTdHLEdBQUcxMUksR0FBR2k2QixFQUFFMmYsRUFBRTU1QyxFQUFFdEUsS0FBSzRqSSxRQUFRcmxHLEVBQUUyZixFQUFFblMsU0FBU21TLEVBQUVuUyxPQUFPaXVHLEdBQUcxMUksR0FBR2k2QixFQUFFMmYsRUFBRSt6RixTQUFTdm9HLEVBQUU5cEMsS0FBSzBFLElBQUksU0FBU2svQyxFQUFFbC9DLEdBQUcsSUFBSW9sQyxFQUFFLEdBQUduTCxFQUFFbUwsRUFBRXBsQyxFQUFFc2xJLFdBQVdsRCxFQUFFbVQsY0FBY3YxSSxFQUFFa2xJLElBQUk5L0YsUUFBUSxJQUFJLElBQUk3SyxFQUFFdjZCLEVBQUV1NkIsR0FBR04sRUFBRW1MLEVBQUU3SyxFQUFFNmlCLFVBQVVuakIsRUFBRW1MLEVBQUVBLEVBQUVnbUYsU0FBU29VLFdBQVc0QyxFQUFFbVQsY0FBY3YxSSxFQUFFa2xJLElBQUk5L0YsR0FBRzdLLEVBQUVBLEVBQUVpVSxPQUFPdlUsRUFBRW1MLEVBQUU4bkcsS0FBSzluRyxJQUFJcGxDLEVBQUVvOUMsU0FBU2hZLElBQUlwbEMsRUFBRW9sSSxXQUFXbnJHLEVBQUVtTCxFQUFFQSxFQUFFZ21GLFNBQVNvVSxXQUFXNEMsRUFBRW1ULGNBQWN2MUksRUFBRWtsSSxJQUFJOS9GLEdBQUcsU0FBU3JrQyxFQUFFZixFQUFFb2xDLEVBQUVuTCxFQUFFTSxFQUFFOTVCLEVBQUVtNUMsR0FBRyxLQUFLcmYsR0FBRzk1QixJQUFJODVCLEVBQUUyTyxFQUFFalAsRUFBRU0sR0FBR3FmLEVBQUU1NUMsRUFBRW9sQyxHQUFFLEVBQUduTCxFQUFFTSxHQUFHLFNBQVNLLEVBQUU1NkIsR0FBRyxJQUFJb2xDLEVBQUU3SyxFQUFFOTVCLEVBQUVULEVBQUV0RSxLQUFLLEdBQUd1K0IsRUFBRXg1QixHQUFHLElBQUl3NUIsRUFBRW1MLEVBQUUza0MsRUFBRTYrSCxPQUFPcmxHLEVBQUVtTCxFQUFFQSxFQUFFcFQsVUFBVW9ULEVBQUVwbEMsR0FBR29sQyxFQUFFLEVBQUVBLEVBQUVoTCxFQUFFcEksUUFBUWozQixTQUFTcXFDLEVBQUVoTCxFQUFFcEksUUFBUW9ULEdBQUdwbEMsR0FBRyxHQUFHaTZCLEVBQUVtTCxFQUFFcGxDLEVBQUUwVSxVQUFVLElBQUk2bEIsRUFBRSxFQUFFQSxFQUFFdjZCLEVBQUUwVSxTQUFTM1osU0FBU3cvQixFQUFFSyxFQUFFNTZCLEVBQUUwVSxTQUFTNmxCLElBQUksU0FBU2hnQyxFQUFFeUYsRUFBRW9sQyxFQUFFN0ssR0FBRyxLQUFLNkssR0FBRzdLLElBQUk2SyxFQUFFLENBQUMsSUFBSTNrQyxFQUFFVCxFQUFFb2xDLEdBQUduTCxFQUFFeDVCLEtBQUt3NUIsRUFBRXg1QixFQUFFd3hDLE1BQU04SixFQUFFdDdDLEdBQUdtNkIsRUFBRW42QixJQUFJdzZCLEVBQUV4NkIsRUFBRXlrSSxPQUFPLFNBQVNucEYsRUFBRS83QyxFQUFFb2xDLEdBQUcsR0FBR25MLEVBQUVtTCxJQUFJbkwsRUFBRWo2QixFQUFFdEUsTUFBTSxDQUFDLElBQUk2K0IsRUFBRTk1QixFQUFFMjVCLEVBQUUzMkIsT0FBTzFJLE9BQU8sRUFBRSxJQUFJay9CLEVBQUVtTCxHQUFHQSxFQUFFaVksV0FBVzU4QyxFQUFFMmtDLEVBQUUsU0FBU3BsQyxFQUFFb2xDLEdBQUcsU0FBU25MLElBQUksS0FBS0EsRUFBRW9qQixXQUFXcGlCLEVBQUVqN0IsR0FBRyxPQUFPaTZCLEVBQUVvakIsVUFBVWpZLEVBQUVuTCxFQUF2RSxDQUEwRWo2QixFQUFFa2xJLElBQUl6a0ksR0FBR3c1QixFQUFFTSxFQUFFdjZCLEVBQUV3bEksb0JBQW9CdnJHLEVBQUVNLEVBQUVBLEVBQUU4eUcsU0FBU3B6RyxFQUFFTSxFQUFFNytCLE9BQU9xZ0QsRUFBRXhoQixFQUFFNkssR0FBRzdLLEVBQUUsRUFBRUEsRUFBRUgsRUFBRTMyQixPQUFPMUksU0FBU3cvQixFQUFFSCxFQUFFMzJCLE9BQU84MkIsR0FBR3Y2QixFQUFFb2xDLEdBQUduTCxFQUFFTSxFQUFFdjZCLEVBQUV0RSxLQUFLNGpJLE9BQU9ybEcsRUFBRU0sRUFBRUEsRUFBRTkyQixRQUFRODJCLEVBQUV2NkIsRUFBRW9sQyxHQUFHQSxTQUFTbkssRUFBRWo3QixFQUFFa2xJLEtBQUssU0FBUzc2RixFQUFFcnFDLEVBQUVvbEMsRUFBRTdLLEVBQUU5NUIsR0FBRyxJQUFJLElBQUltNUMsRUFBRXJmLEVBQUVxZixFQUFFbjVDLEVBQUVtNUMsSUFBSSxDQUFDLElBQUl6ZixFQUFFaUwsRUFBRXdVLEdBQUcsR0FBRzNmLEVBQUVFLElBQUl5N0csR0FBRzUxSSxFQUFFbTZCLEdBQUcsT0FBT3lmLEdBQUcsU0FBU2xmLEVBQUUxNkIsRUFBRVMsRUFBRW01QyxFQUFFemYsRUFBRVcsRUFBRUcsR0FBRyxHQUFHajdCLElBQUlTLEVBQUUsQ0FBQ3c1QixFQUFFeDVCLEVBQUV5a0ksTUFBTWpyRyxFQUFFRSxLQUFLMTVCLEVBQUUwNUIsRUFBRVcsR0FBR3VyRyxHQUFHNWxJLElBQUksSUFBSXkvQixFQUFFei9CLEVBQUV5a0ksSUFBSWxsSSxFQUFFa2xJLElBQUksR0FBRzNxRyxFQUFFdjZCLEVBQUVpbUksb0JBQW9CaHNHLEVBQUV4NUIsRUFBRXNsSSxhQUFhd0ksVUFBVWxtRyxFQUFFcm9DLEVBQUVrbEksSUFBSXprSSxFQUFFbTVDLEdBQUduNUMsRUFBRXdsSSxvQkFBbUIsT0FBUSxHQUFHMXJHLEVBQUU5NUIsRUFBRWlsSSxXQUFXbnJHLEVBQUV2NkIsRUFBRTBsSSxXQUFXamxJLEVBQUVTLE1BQU1sQixFQUFFa0IsTUFBTXE1QixFQUFFOTVCLEVBQUVvbEksV0FBV3RyRyxFQUFFOTVCLEVBQUVxbEksU0FBU3JsSSxFQUFFK2tJLGtCQUFrQnhsSSxFQUFFd2xJLHNCQUFzQixDQUFDLElBQUlybUcsRUFBRW5CLEVBQUV2OUIsRUFBRS9FLEtBQUt1K0IsRUFBRStELElBQUkvRCxFQUFFa0YsRUFBRW5CLEVBQUVzaEcsT0FBT3JsRyxFQUFFa0YsRUFBRUEsRUFBRTJ0RyxXQUFXM3RHLEVBQUVuL0IsRUFBRVMsR0FBRyxJQUFJMCtDLEVBQUVuL0MsRUFBRTBVLFNBQVNpbUIsRUFBRWw2QixFQUFFaVUsU0FBUyxHQUFHdWxCLEVBQUUrRCxJQUFJZSxFQUFFdCtCLEdBQUcsQ0FBQyxJQUFJMCtCLEVBQUUsRUFBRUEsRUFBRS9FLEVBQUV2RCxPQUFPOTdCLFNBQVNva0MsRUFBRS9FLEVBQUV2RCxPQUFPc0ksR0FBR24vQixFQUFFUyxHQUFHdzVCLEVBQUVrRixFQUFFbkIsRUFBRXNoRyxPQUFPcmxHLEVBQUVrRixFQUFFQSxFQUFFdEksU0FBU3NJLEVBQUVuL0IsRUFBRVMsR0FBRzJrQyxFQUFFM2tDLEVBQUU5QyxNQUFNczhCLEVBQUVrbEIsSUFBSWxsQixFQUFFVSxHQUFHd2tCLElBQUl4a0IsR0FBRyxTQUFTMzZCLEVBQUV1NkIsRUFBRTk1QixFQUFFbTVDLEVBQUV6ZixHQUFHLElBQUksSUFBSUMsRUFBRVUsRUFBRUcsRUFBRWlGLEVBQUUsRUFBRWYsRUFBRSxFQUFFbkIsRUFBRXpELEVBQUV4L0IsT0FBTyxFQUFFb2tELEVBQUU1a0IsRUFBRSxHQUFHd0UsRUFBRXhFLEVBQUV5RCxHQUFHckQsRUFBRWw2QixFQUFFMUYsT0FBTyxFQUFFbWtELEVBQUV6K0MsRUFBRSxHQUFHbTZCLEVBQUVuNkIsRUFBRWs2QixHQUFHb2hCLEdBQUc1aEIsRUFBRStGLEdBQUdsQyxHQUFHbUIsR0FBR3hFLEdBQUd5SyxFQUFFK1osR0FBR0EsRUFBRTVrQixJQUFJMkYsR0FBR2tGLEVBQUVyRyxHQUFHQSxFQUFFeEUsSUFBSXlELEdBQUc0M0csR0FBR3oyRixFQUFFRCxJQUFJeGtCLEVBQUV5a0IsRUFBRUQsRUFBRXRGLEVBQUVuNUMsRUFBRTArQixHQUFHZ2dCLEVBQUU1a0IsSUFBSTJGLEdBQUdnZixFQUFFeitDLElBQUkwK0IsSUFBSXkyRyxHQUFHNzJHLEVBQUVuRSxJQUFJRixFQUFFcUUsRUFBRW5FLEVBQUVnZixFQUFFbjVDLEVBQUVrNkIsR0FBR29FLEVBQUV4RSxJQUFJeUQsR0FBR3BELEVBQUVuNkIsSUFBSWs2QixJQUFJaTdHLEdBQUd6MkYsRUFBRXZrQixJQUFJRixFQUFFeWtCLEVBQUV2a0IsRUFBRWdmLEVBQUVuNUMsRUFBRWs2QixHQUFHb2hCLEdBQUdxbUYsRUFBRS9zSCxhQUFhclYsRUFBRW0vQyxFQUFFK2xGLElBQUk5QyxFQUFFMXZDLFlBQVkzekQsRUFBRW1tRyxNQUFNL2xGLEVBQUU1a0IsSUFBSTJGLEdBQUd0RixFQUFFbjZCLElBQUlrNkIsSUFBSWk3RyxHQUFHNzJHLEVBQUVtZ0IsSUFBSXhrQixFQUFFcUUsRUFBRW1nQixFQUFFdEYsRUFBRW41QyxFQUFFMCtCLEdBQUc0YyxHQUFHcW1GLEVBQUUvc0gsYUFBYXJWLEVBQUUrK0IsRUFBRW1tRyxJQUFJL2xGLEVBQUUrbEYsS0FBS25tRyxFQUFFeEUsSUFBSXlELEdBQUdraEIsRUFBRXorQyxJQUFJMCtCLEtBQUtpRyxFQUFFaEwsS0FBS0EsRUFBRXk3RyxHQUFHdDdHLEVBQUUyRixFQUFFbEMsSUFBSW9ILEVBQUV0SyxFQUFFYixFQUFFaWxCLEVBQUVoK0MsS0FBS2s1QixFQUFFOGtCLEVBQUVoK0MsS0FBS21wQyxFQUFFNlUsRUFBRTNrQixFQUFFMkYsRUFBRWxDLElBQUlrTCxFQUFFZ1csRUFBRXRGLEVBQUU1NUMsRUFBRW0vQyxFQUFFK2xGLEtBQUksRUFBR3prSSxFQUFFMCtCLEdBQUd5MkcsR0FBRzM2RyxFQUFFVixFQUFFTyxHQUFHb2tCLElBQUl4a0IsRUFBRU8sRUFBRWlrQixFQUFFdEYsRUFBRW41QyxFQUFFMCtCLEdBQUc1RSxFQUFFTyxRQUFHLEVBQU9paEIsR0FBR3FtRixFQUFFL3NILGFBQWFyVixFQUFFaTdCLEVBQUVpcUcsSUFBSS9sRixFQUFFK2xGLE1BQU1oOEYsRUFBRWdXLEVBQUV0RixFQUFFNTVDLEVBQUVtL0MsRUFBRStsRixLQUFJLEVBQUd6a0ksRUFBRTArQixHQUFHK2YsRUFBRXorQyxJQUFJMCtCLElBQUllLEVBQUVsQyxFQUFFajlCLEVBQUVmLEVBQUVvbEMsRUFBRTNrQyxFQUFFazZCLEVBQUUsSUFBSSxLQUFLbDZCLEVBQUVrNkIsRUFBRSxHQUFHdXFHLElBQUl6a0ksRUFBRTArQixFQUFFeEUsRUFBRWlmLEdBQUd6YSxFQUFFeEUsR0FBR3BnQyxFQUFFZ2dDLEVBQUUyRixFQUFFbEMsR0FBOW1CLENBQWtuQmtDLEVBQUVpZixFQUFFeGtCLEVBQUVpZixFQUFFM2UsR0FBR2hCLEVBQUVVLElBQUlWLEVBQUVqNkIsRUFBRXJDLE9BQU95a0ksRUFBRWtULGVBQWVwMUcsRUFBRSxJQUFJbi9CLEVBQUVtL0IsRUFBRSxLQUFLdkYsRUFBRSxFQUFFQSxFQUFFNS9CLE9BQU8sRUFBRTYrQyxJQUFJM2YsRUFBRWtsQixHQUFHNWtELEVBQUU0a0QsRUFBRSxFQUFFQSxFQUFFcGtELE9BQU8sR0FBR2svQixFQUFFajZCLEVBQUVyQyxPQUFPeWtJLEVBQUVrVCxlQUFlcDFHLEVBQUUsSUFBSWxnQyxFQUFFckMsT0FBTzhDLEVBQUU5QyxNQUFNeWtJLEVBQUVrVCxlQUFlcDFHLEVBQUV6L0IsRUFBRTlDLE1BQU1zOEIsRUFBRStELElBQUkvRCxFQUFFa0YsRUFBRW5CLEVBQUVzaEcsT0FBT3JsRyxFQUFFa0YsRUFBRUEsRUFBRXkvRyxZQUFZei9HLEVBQUVuL0IsRUFBRVMsS0FBSyxTQUFTdTZCLEVBQUVoN0IsRUFBRW9sQyxFQUFFM2tDLEdBQUcsR0FBRzg1QixFQUFFOTVCLElBQUl3NUIsRUFBRWo2QixFQUFFd3VDLFFBQVF4dUMsRUFBRXd1QyxPQUFPOXlDLEtBQUtpakosY0FBY3Y1RyxPQUFPLElBQUksSUFBSXdVLEVBQUUsRUFBRUEsRUFBRXhVLEVBQUVycUMsU0FBUzYrQyxFQUFFeFUsRUFBRXdVLEdBQUdsK0MsS0FBSzRqSSxLQUFLcU8sT0FBT3ZvRyxFQUFFd1UsSUFBSSxJQUFJOUosRUFBRTVQLEVBQUUsMkNBQTJDLFNBQVNtSSxFQUFFcm9DLEVBQUVvbEMsRUFBRTNrQyxFQUFFbTVDLEdBQUcsSUFBSXpmLEVBQUVDLEVBQUVnTCxFQUFFNk0sSUFBSW5YLEVBQUVzSyxFQUFFMXBDLEtBQUswbUksRUFBRWg5RixFQUFFMXdCLFNBQVMsR0FBR2tsQyxFQUFFQSxHQUFHOWUsR0FBR0EsRUFBRW0wRyxJQUFJN3BHLEVBQUU4L0YsSUFBSWxsSSxFQUFFdTZCLEVBQUU2SyxFQUFFd2dHLFlBQVkzckcsRUFBRW1MLEVBQUUyZ0csY0FBYyxPQUFPM2dHLEVBQUU2Z0csb0JBQW1CLEdBQUcsRUFBRyxHQUFHaHNHLEVBQUVhLEtBQUtiLEVBQUVFLEVBQUVXLEVBQUV3a0csT0FBT3JsRyxFQUFFRSxFQUFFQSxFQUFFM3hCLE9BQU8yeEIsRUFBRWlMLEdBQUUsR0FBSW5MLEVBQUVFLEVBQUVpTCxFQUFFb2dHLG9CQUFvQixPQUFPcm1HLEVBQUVpRyxFQUFFM2tDLElBQUcsRUFBRyxHQUFHdzVCLEVBQUVHLEdBQUcsQ0FBQyxHQUFHSCxFQUFFbW9HLEdBQUcsR0FBR3BpSSxFQUFFNitJLGdCQUFnQixHQUFHNWtILEVBQUVFLEVBQUVXLElBQUliLEVBQUVFLEVBQUVBLEVBQUVzZ0csV0FBV3hnRyxFQUFFRSxFQUFFQSxFQUFFMXVCLFlBQVksR0FBRzB1QixJQUFJbjZCLEVBQUV5TCxVQUFVLE9BQU0sTUFBTyxDQUFDLElBQUksSUFBSXd2QixHQUFFLEVBQUdpTyxFQUFFbHBDLEVBQUVvVixXQUFXOHFCLEVBQUUsRUFBRUEsRUFBRWtpRyxFQUFFcm5JLE9BQU9tbEMsSUFBSSxDQUFDLElBQUlnSixJQUFJYixFQUFFYSxFQUFFazVGLEVBQUVsaUcsR0FBR3ovQixFQUFFbTVDLEdBQUcsQ0FBQzNlLEdBQUUsRUFBRyxNQUFNaU8sRUFBRUEsRUFBRXdwRCxZQUFZLElBQUl6M0QsR0FBR2lPLEVBQUUsT0FBTSxPQUFRaVcsRUFBRS9aLEVBQUVnOUYsRUFBRTNoSSxHQUFHLEdBQUd3NUIsRUFBRWEsR0FBRyxDQUFDLElBQUlrRCxHQUFFLEVBQUcsSUFBSSxJQUFJZSxLQUFLakUsRUFBRSxJQUFJZ1YsRUFBRS9RLEdBQUcsQ0FBQ2YsR0FBRSxFQUFHckQsRUFBRXlLLEVBQUUza0MsR0FBRyxPQUFPdTlCLEdBQUdsRCxFQUFFaWdHLE9BQU8wTyxHQUFHM3VHLEVBQUVpZ0csYUFBYS82SCxFQUFFdEUsT0FBTzBwQyxFQUFFem5DLE9BQU9xQyxFQUFFdEUsS0FBSzBwQyxFQUFFem5DLE1BQU0sT0FBTSxFQUFHLE9BQU8sU0FBU3FDLEVBQUVTLEVBQUVtNUMsRUFBRXpmLEdBQUcsSUFBSWlMLEVBQUUza0MsR0FBRyxDQUFDLElBQUlxNkIsRUFBRUcsR0FBRSxFQUFHaUYsRUFBRSxHQUFHLEdBQUdrRixFQUFFcGxDLEdBQUdpN0IsR0FBRSxFQUFHaU8sRUFBRXpvQyxFQUFFeS9CLE9BQU8sQ0FBQyxJQUFJZixFQUFFbEYsRUFBRWo2QixFQUFFd21ELFVBQVUsSUFBSXJuQixHQUFHeTJHLEdBQUc1MUksRUFBRVMsR0FBR2k2QixFQUFFMTZCLEVBQUVTLEVBQUV5L0IsRUFBRSxLQUFLLEtBQUsvRixPQUFPLENBQUMsR0FBR2dGLEVBQUUsQ0FBQyxHQUFHLElBQUluL0IsRUFBRXdtRCxVQUFVeG1ELEVBQUVrdEYsYUFBYXMxQyxLQUFLeGlJLEVBQUVnb0csZ0JBQWdCdzZCLEdBQUc1b0YsR0FBRSxHQUFJcmYsRUFBRXFmLElBQUl2UixFQUFFcm9DLEVBQUVTLEVBQUV5L0IsR0FBRyxPQUFPbEYsRUFBRXY2QixFQUFFeS9CLEdBQUUsR0FBSWxnQyxFQUFFODZCLEVBQUU5NkIsRUFBRUEsRUFBRSxJQUFJaWxJLEdBQUc3QyxFQUFFeC9DLFFBQVE5bkQsR0FBR3RHLGNBQWMsR0FBRyxRQUFHLEVBQU9zRyxHQUFHLElBQUlrRCxFQUFFaCtCLEVBQUVrbEksSUFBSS9sRixFQUFFaWpGLEVBQUV2dUgsV0FBV21xQixHQUFHLEdBQUdrTCxFQUFFem9DLEVBQUV5L0IsRUFBRWxDLEVBQUVtL0csU0FBUyxLQUFLaCtGLEVBQUVpakYsRUFBRTF2QyxZQUFZMTBELElBQUkvRCxFQUFFeDVCLEVBQUUrdEMsUUFBUSxJQUFJLElBQUk3VCxFQUFFbDZCLEVBQUUrdEMsT0FBTzBRLEVBQUVuZ0IsRUFBRXQrQixHQUFHazZCLEdBQUcsQ0FBQyxJQUFJLElBQUk1NUIsRUFBRSxFQUFFQSxFQUFFcTVCLEVBQUVwSSxRQUFRajNCLFNBQVNnRyxFQUFFcTVCLEVBQUVwSSxRQUFRanhCLEdBQUc0NUIsR0FBRyxHQUFHQSxFQUFFdXFHLElBQUl6a0ksRUFBRXlrSSxJQUFJaG1GLEVBQUUsQ0FBQyxJQUFJLElBQUluRCxFQUFFLEVBQUVBLEVBQUUzaEIsRUFBRXFOLE9BQU8xc0MsU0FBU2doRCxFQUFFM2hCLEVBQUVxTixPQUFPc1UsR0FBRzI1RixHQUFHLzZHLEdBQUcsSUFBSTBQLEVBQUUxUCxFQUFFai9CLEtBQUs0akksS0FBS3FPLE9BQU8sR0FBR3RqRyxFQUFFNC9GLE9BQU8sSUFBSSxJQUFJbjZGLEVBQUUsRUFBRUEsRUFBRXpGLEVBQUUwL0YsSUFBSWh2SSxPQUFPKzBDLElBQUl6RixFQUFFMC9GLElBQUlqNkYsVUFBVTBsRyxHQUFHNzZHLEdBQUdBLEVBQUVBLEVBQUU2VCxPQUFPdlUsRUFBRWtsQixHQUFHNWtELEVBQUUsQ0FBQ3lGLEdBQUcsRUFBRSxHQUFHaTZCLEVBQUVqNkIsRUFBRWl5QyxNQUFNclgsRUFBRTU2QixJQUFJLE9BQU9nN0IsRUFBRXY2QixFQUFFeS9CLEVBQUVqRixHQUFHeDZCLEVBQUV5a0ksSUFBSWpyRyxFQUFFajZCLElBQUk0NkIsRUFBRTU2QixJQUFyMEssQ0FBMDBLLENBQUMwK0ksUUFBUXZKLEdBQUdodUgsUUFBUSxDQUFDNnZILEdBQUdXLEdBQUd2NEcsR0FBR203RyxHQUFHWSxHQUFHOWdILEVBQUUsQ0FBQ29OLE9BQU8rMkcsR0FBRzMzQixTQUFTMjNCLEdBQUcvNkksT0FBTyxTQUFTekQsRUFBRW9sQyxJQUFHLElBQUtwbEMsRUFBRXRFLEtBQUsyUSxLQUFLNnhJLEdBQUdsK0ksRUFBRW9sQyxHQUFHQSxNQUFNLElBQUlqa0MsT0FBT28xSSxNQUFNcHNHLEdBQUd6aEMsU0FBUzRELGlCQUFpQixtQkFBa0IsV0FBVyxJQUFJdE0sRUFBRTBJLFNBQVNpNkUsY0FBYzNpRixHQUFHQSxFQUFFOCtJLFFBQVFDLEdBQUcvK0ksRUFBRSxZQUFXLElBQUlnL0ksR0FBRyxDQUFDNUksU0FBUyxTQUFTcDJJLEVBQUVvbEMsRUFBRW5MLEVBQUVNLEdBQUcsV0FBV04sRUFBRWdZLEtBQUsxWCxFQUFFMnFHLE1BQU0zcUcsRUFBRTJxRyxJQUFJK1osVUFBVXYzRyxHQUFHek4sRUFBRSxhQUFZLFdBQVcra0gsR0FBRzdJLGlCQUFpQm4ySSxFQUFFb2xDLEVBQUVuTCxNQUFLaWxILEdBQUdsL0ksRUFBRW9sQyxFQUFFbkwsRUFBRW1qQixTQUFTcDlDLEVBQUVpL0ksVUFBVSxHQUFHeHdILElBQUlqdkIsS0FBS1EsRUFBRXVCLFFBQVE0OUksTUFBTSxhQUFhbGxILEVBQUVnWSxLQUFLZ2pHLEdBQUdqMUksRUFBRS9GLFNBQVMrRixFQUFFczZJLFlBQVlsMUcsRUFBRXdwRixVQUFVeHBGLEVBQUV3cEYsVUFBVTJoQixPQUFPdndJLEVBQUVzTSxpQkFBaUIsbUJBQW1COHlJLElBQUlwL0ksRUFBRXNNLGlCQUFpQixpQkFBaUIreUksSUFBSXIvSSxFQUFFc00saUJBQWlCLFNBQVMreUksSUFBSWwxRyxJQUFJbnFDLEVBQUU4K0ksUUFBTyxNQUFPM0ksaUJBQWlCLFNBQVNuMkksRUFBRW9sQyxFQUFFbkwsR0FBRyxHQUFHLFdBQVdBLEVBQUVnWSxJQUFJLENBQUNpdEcsR0FBR2wvSSxFQUFFb2xDLEVBQUVuTCxFQUFFbWpCLFNBQVMsSUFBSTdpQixFQUFFdjZCLEVBQUVpL0ksVUFBVXgrSSxFQUFFVCxFQUFFaS9JLFVBQVUsR0FBR3h3SCxJQUFJanZCLEtBQUtRLEVBQUV1QixRQUFRNDlJLElBQU8xK0ksRUFBRTgyRSxNQUFLLFNBQVN2M0UsRUFBRW9sQyxHQUFHLE9BQU9tOUYsRUFBRXZpSSxFQUFFdTZCLEVBQUU2SyxTQUFPcGxDLEVBQUVvMUksU0FBU2h3RyxFQUFFMW1DLE1BQU02NEUsTUFBSyxTQUFTdjNFLEdBQUcsT0FBT3MvSSxHQUFHdC9JLEVBQUVTLE1BQUsya0MsRUFBRTFtQyxRQUFRMG1DLEVBQUV0TyxVQUFVd29ILEdBQUdsNkcsRUFBRTFtQyxNQUFNK0IsS0FBS3MrSSxHQUFHLytJLEVBQUUsYUFBYSxTQUFTay9JLEdBQUdsL0ksRUFBRW9sQyxFQUFFbkwsR0FBR3NsSCxHQUFHdi9JLEVBQUVvbEMsSUFBTXhDLEdBQUdpaEcsSUFBSTF2RixZQUFXLFdBQVdvckcsR0FBR3YvSSxFQUFFb2xDLEtBQU0sR0FBRyxTQUFTbTZHLEdBQUd2L0ksRUFBRW9sQyxFQUFFbkwsR0FBRyxJQUFJTSxFQUFFNkssRUFBRTFtQyxNQUFNK0IsRUFBRVQsRUFBRW8xSSxTQUFTLElBQUkzMEksR0FBRzJHLE1BQU1wRyxRQUFRdTVCLEdBQUcsQ0FBQyxJQUFJLElBQUlxZixFQUFFemYsRUFBRUMsRUFBRSxFQUFFVSxFQUFFOTZCLEVBQUV1QixRQUFReEcsT0FBT3EvQixFQUFFVSxFQUFFVixJQUFJLEdBQUdELEVBQUVuNkIsRUFBRXVCLFFBQVE2NEIsR0FBRzM1QixFQUFFbTVDLEVBQUV0ZixFQUFFQyxFQUFFNGtILEdBQUdobEgsS0FBSyxFQUFFQSxFQUFFcWxILFdBQVc1bEcsSUFBSXpmLEVBQUVxbEgsU0FBUzVsRyxRQUFRLEdBQUcyb0YsRUFBRTRjLEdBQUdobEgsR0FBR0ksR0FBRyxZQUFZdjZCLEVBQUV5L0ksZ0JBQWdCcmxILElBQUlwNkIsRUFBRXkvSSxjQUFjcmxILElBQUkzNUIsSUFBSVQsRUFBRXkvSSxlQUFlLElBQUksU0FBU0gsR0FBR3QvSSxFQUFFb2xDLEdBQUcsT0FBT0EsRUFBRXd2QyxPQUFNLFNBQVN4dkMsR0FBRyxPQUFPbTlGLEVBQUVuOUYsRUFBRXBsQyxNQUFLLFNBQVNtL0ksR0FBR24vSSxHQUFHLE1BQU0sV0FBV0EsRUFBRUEsRUFBRW82SSxPQUFPcDZJLEVBQUV0QixNQUFNLFNBQVMwZ0osR0FBR3AvSSxHQUFHQSxFQUFFd0QsT0FBTzA1SCxXQUFVLEVBQUcsU0FBU21pQixHQUFHci9JLEdBQUdBLEVBQUV3RCxPQUFPMDVILFlBQVlsOUgsRUFBRXdELE9BQU8wNUgsV0FBVSxFQUFHNmhCLEdBQUcvK0ksRUFBRXdELE9BQU8sVUFBVSxTQUFTdTdJLEdBQUcvK0ksRUFBRW9sQyxHQUFHLElBQUluTCxFQUFFdnhCLFNBQVM2ekUsWUFBWSxjQUFjdGlELEVBQUV5bEgsVUFBVXQ2RyxHQUFFLEdBQUcsR0FBSXBsQyxFQUFFdzlFLGNBQWN2akQsR0FBRyxTQUFTMGxILEdBQUczL0ksR0FBRyxPQUFPQSxFQUFFd2xJLG1CQUFtQnhsSSxFQUFFdEUsTUFBTXNFLEVBQUV0RSxLQUFLMjFILFdBQVdyeEgsRUFBRTIvSSxHQUFHMy9JLEVBQUV3bEksa0JBQWtCNkgsUUFBUSxJQUFJdVMsR0FBRyxDQUFDdjZJLE1BQU0yNUksR0FBRzN5SSxLQUFLLENBQUN0TSxLQUFLLFNBQVNDLEVBQUVvbEMsRUFBRW5MLEdBQUcsSUFBSU0sRUFBRTZLLEVBQUUxbUMsTUFBTStCLEdBQUd3NUIsRUFBRTBsSCxHQUFHMWxILElBQUl2K0IsTUFBTXUrQixFQUFFditCLEtBQUsyMUgsV0FBV3ozRSxFQUFFNTVDLEVBQUU2L0ksbUJBQW1CLFNBQVM3L0ksRUFBRTZWLE1BQU1wWCxRQUFRLEdBQUd1QixFQUFFNlYsTUFBTXBYLFFBQVE4N0IsR0FBRzk1QixHQUFHdzVCLEVBQUV2K0IsS0FBSzJRLE1BQUssRUFBRzZ3SSxHQUFHampILEdBQUUsV0FBV2o2QixFQUFFNlYsTUFBTXBYLFFBQVFtN0MsTUFBSzU1QyxFQUFFNlYsTUFBTXBYLFFBQVE4N0IsRUFBRXFmLEVBQUUsUUFBUS9pQixPQUFPLFNBQVM3MkIsRUFBRW9sQyxFQUFFbkwsR0FBRyxJQUFJTSxFQUFFNkssRUFBRTFtQyxPQUFPNjdCLElBQUk2SyxFQUFFdE8sWUFBWW1ELEVBQUUwbEgsR0FBRzFsSCxJQUFJditCLE1BQU11K0IsRUFBRXYrQixLQUFLMjFILFlBQVlwM0YsRUFBRXYrQixLQUFLMlEsTUFBSyxFQUFHa3VCLEVBQUUyaUgsR0FBR2pqSCxHQUFFLFdBQVdqNkIsRUFBRTZWLE1BQU1wWCxRQUFRdUIsRUFBRTYvSSxzQkFBcUIzQixHQUFHamtILEdBQUUsV0FBV2o2QixFQUFFNlYsTUFBTXBYLFFBQVEsV0FBVXVCLEVBQUU2VixNQUFNcFgsUUFBUTg3QixFQUFFdjZCLEVBQUU2L0ksbUJBQW1CLFNBQVM5b0gsT0FBTyxTQUFTLzJCLEVBQUVvbEMsRUFBRW5MLEVBQUVNLEVBQUU5NUIsR0FBR0EsSUFBSVQsRUFBRTZWLE1BQU1wWCxRQUFRdUIsRUFBRTYvSSx1QkFBdUJDLEdBQUcsQ0FBQ245SSxLQUFLMjRCLE9BQU9zaUgsT0FBT3h3QixRQUFRaFMsSUFBSWdTLFFBQVE3NkUsS0FBS2pYLE9BQU9yaEMsS0FBS3FoQyxPQUFPaWdILFdBQVdqZ0gsT0FBT29nSCxXQUFXcGdILE9BQU9rZ0gsYUFBYWxnSCxPQUFPcWdILGFBQWFyZ0gsT0FBT21nSCxpQkFBaUJuZ0gsT0FBT3NnSCxpQkFBaUJ0Z0gsT0FBTytoSCxZQUFZL2hILE9BQU9paUgsa0JBQWtCamlILE9BQU9naUgsY0FBY2hpSCxPQUFPbGhDLFNBQVMsQ0FBQ2tRLE9BQU9neEIsT0FBT2o4QixTQUFTLFNBQVNxUixHQUFHMVEsR0FBRyxJQUFJb2xDLEVBQUVwbEMsR0FBR0EsRUFBRXVsSSxpQkFBaUIsT0FBT25nRyxHQUFHQSxFQUFFK3VCLEtBQUs1eUQsUUFBUXV0SSxTQUFTcCtILEdBQUcwK0gsR0FBR2hxRyxFQUFFMXdCLFdBQVcxVSxFQUFFLFNBQVMrL0ksR0FBRy8vSSxHQUFHLElBQUlvbEMsRUFBRSxHQUFHbkwsRUFBRWo2QixFQUFFb3JILFNBQVMsSUFBSSxJQUFJN3dGLEtBQUtOLEVBQUVrdUcsVUFBVS9pRyxFQUFFN0ssR0FBR3Y2QixFQUFFdTZCLEdBQUcsSUFBSTk1QixFQUFFdzVCLEVBQUV3ekcsaUJBQWlCLElBQUksSUFBSTd6RixLQUFLbjVDLEVBQUUya0MsRUFBRXhLLEVBQUVnZixJQUFJbjVDLEVBQUVtNUMsR0FBRyxPQUFPeFUsRUFBRSxTQUFTNDZHLEdBQUdoZ0osRUFBRW9sQyxHQUFHLEdBQUcsaUJBQWlCL0csS0FBSytHLEVBQUU2TSxLQUFLLE9BQU9qeUMsRUFBRSxhQUFhLENBQUN3NEIsTUFBTTRNLEVBQUVtZ0csaUJBQWlCNEMsWUFBWSxJQUFJOFgsR0FBRyxTQUFTamdKLEdBQUcsT0FBT0EsRUFBRWl5QyxLQUFLazlGLEdBQUdudkksSUFBSWtnSixHQUFHLFNBQVNsZ0osR0FBRyxNQUFNLFNBQVNBLEVBQUUyQyxNQUFNdzlJLEdBQUcsQ0FBQ3g5SSxLQUFLLGFBQWE2MUIsTUFBTXNuSCxHQUFHaFIsVUFBUyxFQUFHLytILE9BQU8sU0FBUy9QLEdBQUcsSUFBSW9sQyxFQUFFcHFDLEtBQUtpL0IsRUFBRWovQixLQUFLa3dJLE9BQU8xekcsUUFBUSxHQUFHeUMsSUFBSUEsRUFBRUEsRUFBRXhELE9BQU93cEgsS0FBS2xsSixPQUFPLENBQUMsSUFBSXcvQixFQUFFdi9CLEtBQUt1M0MsS0FBS3FILEVBQUUzZixFQUFFLEdBQUcsR0FBRyxTQUFTajZCLEdBQUcsS0FBS0EsRUFBRUEsRUFBRXd1QyxRQUFRLEdBQUd4dUMsRUFBRXRFLEtBQUsyMUgsV0FBVyxPQUFNLEVBQXhELENBQTREcjJILEtBQUt5a0ksUUFBUSxPQUFPN2xGLEVBQUUsSUFBSXpmLEVBQUV6cEIsR0FBR2twQyxHQUFHLElBQUl6ZixFQUFFLE9BQU95ZixFQUFFLEdBQUc1K0MsS0FBS29sSixTQUFTLE9BQU9KLEdBQUdoZ0osRUFBRTQ1QyxHQUFHLElBQUl4ZixFQUFFLGdCQUFnQnAvQixLQUFLbTNJLEtBQUssSUFBSWg0RyxFQUFFajVCLElBQUksTUFBTWk1QixFQUFFajVCLElBQUlpNUIsRUFBRXlyRyxVQUFVeHJHLEVBQUUsVUFBVUEsRUFBRUQsRUFBRThYLElBQUl4eEMsRUFBRTA1QixFQUFFajVCLEtBQUssSUFBSW82QixPQUFPbkIsRUFBRWo1QixLQUFLaTJCLFFBQVFpRCxHQUFHRCxFQUFFajVCLElBQUlrNUIsRUFBRUQsRUFBRWo1QixJQUFJaTVCLEVBQUVqNUIsSUFBSSxJQUFJNDVCLEdBQUdYLEVBQUV6K0IsT0FBT3krQixFQUFFeitCLEtBQUssS0FBSzIxSCxXQUFXMHVCLEdBQUcva0osTUFBTW9uSSxFQUFFcG5JLEtBQUtxeUksT0FBT3B5RyxFQUFFdnFCLEdBQUcweEgsR0FBRyxHQUFHam9HLEVBQUV6K0IsS0FBS2toSSxZQUFZemlHLEVBQUV6K0IsS0FBS2toSSxXQUFXcmxELEtBQUsyb0UsTUFBTS9sSCxFQUFFeitCLEtBQUsyUSxNQUFLLEdBQUk0dUIsR0FBR0EsRUFBRXYvQixPQUFPLFNBQVNzRSxFQUFFb2xDLEdBQUcsT0FBT0EsRUFBRWxrQyxNQUFNbEIsRUFBRWtCLEtBQUtra0MsRUFBRTZNLE1BQU1qeUMsRUFBRWl5QyxJQUE5QyxDQUFtRDlYLEVBQUVjLEtBQUtrMEcsR0FBR2wwRyxNQUFNQSxFQUFFdXFHLG9CQUFvQnZxRyxFQUFFdXFHLGtCQUFrQjZILE9BQU96SCxXQUFXLENBQUMsSUFBSTE4RixFQUFFak8sRUFBRXYvQixLQUFLMjFILFdBQVd2aEYsRUFBRSxHQUFHaFYsR0FBRyxHQUFHLFdBQVdQLEVBQUUsT0FBT3YvQixLQUFLb2xKLFVBQVMsRUFBRzE0RyxHQUFHd0IsRUFBRSxjQUFhLFdBQVc5RCxFQUFFZzdHLFVBQVMsRUFBR2g3RyxFQUFFaXZGLGtCQUFpQjJyQixHQUFHaGdKLEVBQUU0NUMsR0FBRyxHQUFHLFdBQVdyZixFQUFFLENBQUMsR0FBRzQwRyxHQUFHaDFHLEdBQUcsT0FBT2lvRyxFQUFFLElBQUlsaUcsRUFBRWYsRUFBRSxXQUFXZSxLQUFLd0gsR0FBRzVNLEVBQUUsYUFBYXFFLEdBQUd1SSxHQUFHNU0sRUFBRSxpQkFBaUJxRSxHQUFHdUksR0FBR3dCLEVBQUUsY0FBYSxTQUFTbHBDLEdBQUdrZ0MsRUFBRWxnQyxNQUFLLE9BQU80NUMsS0FBS3ltRyxHQUFHdndHLEVBQUUsQ0FBQ21DLElBQUkzVyxPQUFPZ2xILFVBQVVobEgsUUFBUXdrSCxJQUFJLFNBQVNTLEdBQUd2Z0osR0FBR0EsRUFBRWtsSSxJQUFJc2IsU0FBU3hnSixFQUFFa2xJLElBQUlzYixVQUFVeGdKLEVBQUVrbEksSUFBSWtZLFVBQVVwOUksRUFBRWtsSSxJQUFJa1ksV0FBVyxTQUFTcUQsR0FBR3pnSixHQUFHQSxFQUFFdEUsS0FBS2dsSixPQUFPMWdKLEVBQUVrbEksSUFBSXhtRCx3QkFBd0IsU0FBU2lpRSxHQUFHM2dKLEdBQUcsSUFBSW9sQyxFQUFFcGxDLEVBQUV0RSxLQUFLazNDLElBQUkzWSxFQUFFajZCLEVBQUV0RSxLQUFLZ2xKLE9BQU9ubUgsRUFBRTZLLEVBQUVyckIsS0FBS2tnQixFQUFFbGdCLEtBQUt0WixFQUFFMmtDLEVBQUVzN0MsSUFBSXptRCxFQUFFeW1ELElBQUksR0FBR25tRCxHQUFHOTVCLEVBQUUsQ0FBQ1QsRUFBRXRFLEtBQUtrbEosT0FBTSxFQUFHLElBQUlobkcsRUFBRTU1QyxFQUFFa2xJLElBQUlydkgsTUFBTStqQyxFQUFFdDJDLFVBQVVzMkMsRUFBRWluRyxnQkFBZ0IsYUFBYXRtSCxFQUFFLE1BQU05NUIsRUFBRSxNQUFNbTVDLEVBQUVrbkcsbUJBQW1CLGFBQWFULEdBQUc5dEcsS0FBSyxJQUFJd3VHLEdBQUcsQ0FBQ0MsV0FBV2IsR0FBR2MsZ0JBQWdCLENBQUN6b0gsTUFBTTZuSCxHQUFHN3pCLFlBQVksV0FBVyxJQUFJeHNILEVBQUVoRixLQUFLb3FDLEVBQUVwcUMsS0FBSzAzSSxRQUFRMTNJLEtBQUswM0ksUUFBUSxTQUFTejRHLEVBQUVNLEdBQUcsSUFBSTk1QixFQUFFZ3ZJLEdBQUd6dkksR0FBR0EsRUFBRTJ5SSxVQUFVM3lJLEVBQUVxdEksT0FBT3J0SSxFQUFFa2hKLE1BQUssR0FBRyxHQUFJbGhKLEVBQUVxdEksT0FBT3J0SSxFQUFFa2hKLEtBQUt6Z0osSUFBSTJrQyxFQUFFNWxDLEtBQUtRLEVBQUVpNkIsRUFBRU0sS0FBS3hxQixPQUFPLFNBQVMvUCxHQUFHLElBQUksSUFBSW9sQyxFQUFFcHFDLEtBQUtpM0MsS0FBS2ozQyxLQUFLeWtJLE9BQU8vakksS0FBS3UyQyxLQUFLLE9BQU9oWSxFQUFFNTZCLE9BQU9vb0MsT0FBTyxNQUFNbE4sRUFBRXYvQixLQUFLbW1KLGFBQWFubUosS0FBSzBaLFNBQVNqVSxFQUFFekYsS0FBS2t3SSxPQUFPMXpHLFNBQVMsR0FBR29pQixFQUFFNStDLEtBQUswWixTQUFTLEdBQUd5bEIsRUFBRTRsSCxHQUFHL2tKLE1BQU1vL0IsRUFBRSxFQUFFQSxFQUFFMzVCLEVBQUUxRixPQUFPcS9CLElBQUksQ0FBQyxJQUFJVSxFQUFFcjZCLEVBQUUyNUIsR0FBR1UsRUFBRW1YLEtBQUssTUFBTW5YLEVBQUU1NUIsS0FBSyxJQUFJbzZCLE9BQU9SLEVBQUU1NUIsS0FBS2kyQixRQUFRLGFBQWF5aUIsRUFBRXQrQyxLQUFLdy9CLEdBQUdiLEVBQUVhLEVBQUU1NUIsS0FBSzQ1QixHQUFHQSxFQUFFcC9CLE9BQU9vL0IsRUFBRXAvQixLQUFLLEtBQUsyMUgsV0FBV2wzRixHQUFHLEdBQUdJLEVBQUUsQ0FBQyxJQUFJLElBQUk2bkcsRUFBRSxHQUFHbm5HLEVBQUUsR0FBR2lPLEVBQUUsRUFBRUEsRUFBRTNPLEVBQUV4L0IsT0FBT211QyxJQUFJLENBQUMsSUFBSWhKLEVBQUUzRixFQUFFMk8sR0FBR2hKLEVBQUV4a0MsS0FBSzIxSCxXQUFXbDNGLEVBQUUrRixFQUFFeGtDLEtBQUtrM0MsSUFBSTFTLEVBQUVnbEcsSUFBSXhtRCx3QkFBd0J6a0QsRUFBRWlHLEVBQUVoL0IsS0FBS2toSSxFQUFFOW1JLEtBQUs0a0MsR0FBR2pGLEVBQUUzL0IsS0FBSzRrQyxHQUFHbGxDLEtBQUtrbUosS0FBS2xoSixFQUFFb2xDLEVBQUUsS0FBS2c5RixHQUFHcG5JLEtBQUt5eUIsUUFBUXdOLEVBQUUsT0FBT2o3QixFQUFFb2xDLEVBQUUsS0FBS3dVLElBQUl3bkcsUUFBUSxXQUFXLElBQUlwaEosRUFBRWhGLEtBQUttbUosYUFBYS83RyxFQUFFcHFDLEtBQUtzbEosWUFBWXRsSixLQUFLMkgsTUFBTSxLQUFLLFFBQVEzQyxFQUFFakYsUUFBUUMsS0FBS3FtSixRQUFRcmhKLEVBQUUsR0FBR2tsSSxJQUFJOS9GLEtBQUtwbEMsRUFBRU8sUUFBUWdnSixJQUFJdmdKLEVBQUVPLFFBQVFrZ0osSUFBSXpnSixFQUFFTyxRQUFRb2dKLElBQUkzbEosS0FBS3NtSixRQUFRNTRJLFNBQVNvRCxLQUFLNDRFLGFBQWExa0YsRUFBRU8sU0FBUSxTQUFTUCxHQUFHLEdBQUdBLEVBQUV0RSxLQUFLa2xKLE1BQU0sQ0FBQyxJQUFJM21ILEVBQUVqNkIsRUFBRWtsSSxJQUFJM3FHLEVBQUVOLEVBQUVwa0IsTUFBTTRtSSxHQUFHeGlILEVBQUVtTCxHQUFHN0ssRUFBRWozQixVQUFVaTNCLEVBQUVzbUgsZ0JBQWdCdG1ILEVBQUV1bUgsbUJBQW1CLEdBQUc3bUgsRUFBRTN0QixpQkFBaUIwdkksR0FBRy9oSCxFQUFFdW1ILFFBQVEsU0FBU3hnSixFQUFFdTZCLEdBQUdBLEdBQUdBLEVBQUUvMkIsU0FBU3kyQixHQUFHTSxJQUFJLGFBQWE4RCxLQUFLOUQsRUFBRWduSCxnQkFBZ0J0bkgsRUFBRXZELG9CQUFvQnNsSCxHQUFHaDhJLEdBQUdpNkIsRUFBRXVtSCxRQUFRLEtBQUs5RCxHQUFHemlILEVBQUVtTCxZQUFXNVQsUUFBUSxDQUFDNnZILFFBQVEsU0FBU3JoSixFQUFFb2xDLEdBQUcsSUFBSXkyRyxHQUFHLE9BQU0sRUFBRyxHQUFHN2dKLEtBQUt3bUosU0FBUyxPQUFPeG1KLEtBQUt3bUosU0FBUyxJQUFJdm5ILEVBQUVqNkIsRUFBRWkrRyxZQUFZaitHLEVBQUVtM0ksb0JBQW9CbjNJLEVBQUVtM0ksbUJBQW1CNTJJLFNBQVEsU0FBU1AsR0FBR2cxQyxHQUFHL2EsRUFBRWo2QixNQUFLcTdJLEdBQUdwaEgsRUFBRW1MLEdBQUduTCxFQUFFcGtCLE1BQU1wWCxRQUFRLE9BQU96RCxLQUFLaWhILElBQUkvdkcsWUFBWSt0QixHQUFHLElBQUlNLEVBQUVxaUgsR0FBRzNpSCxHQUFHLE9BQU9qL0IsS0FBS2loSCxJQUFJL25FLFlBQVlqYSxHQUFHai9CLEtBQUt3bUosU0FBU2puSCxFQUFFeWlILGlCQUFpQm5MLEdBQUc3ekksT0FBT3VsSSxZQUFZd1EsR0FBR2xDLEdBQUc3ekksT0FBT2tsSSxjQUFjNFIsR0FBR2pELEdBQUc3ekksT0FBT21sSSxlQUFlMFEsR0FBR2hDLEdBQUc3ekksT0FBT3FsSSxnQkFBZ0IwUixHQUFHbEQsR0FBRzd6SSxPQUFPb2xJLGlCQUFpQixTQUFTcGpJLEdBQUcsSUFBSXE2QixFQUFFLE9BQU0sRUFBRyxHQUFHeTZHLEdBQUc5MEksR0FBRyxPQUFNLEVBQUcsR0FBR0EsRUFBRUEsRUFBRXcwQixjQUFjLE1BQU13Z0gsR0FBR2gxSSxHQUFHLE9BQU9nMUksR0FBR2gxSSxHQUFHLElBQUlvbEMsRUFBRTE4QixTQUFTeUMsY0FBY25MLEdBQUcsT0FBT0EsRUFBRW0zQixRQUFRLE1BQU0sRUFBRTY5RyxHQUFHaDFJLEdBQUdvbEMsRUFBRTFJLGNBQWNwaUMsT0FBT21uSixvQkFBb0JyOEcsRUFBRTFJLGNBQWNwaUMsT0FBT29uSixZQUFZMU0sR0FBR2gxSSxHQUFHLHFCQUFxQnErQixLQUFLK0csRUFBRWhrQyxhQUFhMHVDLEVBQUUraEcsR0FBR3R3SSxRQUFRcTdILFdBQVdnakIsSUFBSTl2RyxFQUFFK2hHLEdBQUd0d0ksUUFBUXZGLFdBQVcra0osSUFBSWxQLEdBQUd2eUksVUFBVXF6SSxVQUFVdDRHLEVBQUVva0gsR0FBRzEwRyxFQUFFOG5HLEdBQUd2eUksVUFBVTZ0SSxPQUFPLFNBQVNudEksRUFBRW9sQyxHQUFHLE9BQU8sU0FBU3BsQyxFQUFFb2xDLEVBQUVuTCxHQUFHLElBQUlNLEVBQUUsT0FBT3Y2QixFQUFFaThHLElBQUk3MkUsRUFBRXBsQyxFQUFFb3JILFNBQVNyN0csU0FBUy9QLEVBQUVvckgsU0FBU3I3RyxPQUFPbzJILElBQUkwSCxHQUFHN3RJLEVBQUUsZUFBZXU2QixFQUFFLFdBQVd2NkIsRUFBRTB5SSxRQUFRMXlJLEVBQUVpMUgsVUFBVWg3RixJQUFJLElBQUl4QyxHQUFHejNCLEVBQUV1NkIsRUFBRXdQLEVBQUUsQ0FBQ3NnQyxPQUFPLFdBQVdycUUsRUFBRTR0SSxhQUFhNXRJLEVBQUU0c0ksY0FBY2lCLEdBQUc3dEksRUFBRSxtQkFBa0IsR0FBSWk2QixHQUFFLEVBQUcsTUFBTWo2QixFQUFFeS9ILFNBQVN6L0gsRUFBRTR0SSxZQUFXLEVBQUdDLEdBQUc3dEksRUFBRSxZQUFZQSxFQUEzUixDQUE4UmhGLEtBQUtnRixFQUFFQSxHQUFHcTZCLEVBQUU2NkcsR0FBR2wxSSxRQUFHLEVBQU9vbEMsSUFBSS9LLEdBQUc4WixZQUFXLFdBQVd4SyxFQUFFaTVGLFVBQVUvakcsSUFBSUEsR0FBR3o0QixLQUFLLE9BQU95ckksTUFBSyxHQUFHLElBQW1mOFAsR0FBL2VDLEdBQUcsMkJBQTJCQyxHQUFHLHlCQUF5QkMsR0FBRzVpRyxHQUFFLFNBQVNsL0MsR0FBRyxJQUFJb2xDLEVBQUVwbEMsRUFBRSxHQUFHaEQsUUFBUTZrSixHQUFHLFFBQVE1bkgsRUFBRWo2QixFQUFFLEdBQUdoRCxRQUFRNmtKLEdBQUcsUUFBUSxPQUFPLElBQUlodkksT0FBT3V5QixFQUFFLGdCQUFnQm5MLEVBQUUsUUFBVzhuSCxHQUFHLENBQUNDLFdBQVcsQ0FBQyxlQUFlQyxjQUFjLFNBQVNqaUosRUFBRW9sQyxHQUFHQSxFQUFFOFcsS0FBSyxJQUFJamlCLEVBQUVpL0csR0FBR2w1SSxFQUFFLFNBQVNpNkIsSUFBSWo2QixFQUFFcXVILFlBQVl6MkcsS0FBS3lpQyxVQUFVcGdCLElBQUksSUFBSU0sRUFBRTArRyxHQUFHajVJLEVBQUUsU0FBUSxHQUFJdTZCLElBQUl2NkIsRUFBRWtpSixhQUFhM25ILElBQUk0bkgsUUFBUSxTQUFTbmlKLEdBQUcsSUFBSW9sQyxFQUFFLEdBQUcsT0FBT3BsQyxFQUFFcXVILGNBQWNqcEYsR0FBRyxlQUFlcGxDLEVBQUVxdUgsWUFBWSxLQUFLcnVILEVBQUVraUosZUFBZTk4RyxHQUFHLFNBQVNwbEMsRUFBRWtpSixhQUFhLEtBQUs5OEcsSUFBV2c5RyxHQUFHLENBQUNKLFdBQVcsQ0FBQyxlQUFlQyxjQUFjLFNBQVNqaUosRUFBRW9sQyxHQUFHQSxFQUFFOFcsS0FBSyxJQUFJamlCLEVBQUVpL0csR0FBR2w1SSxFQUFFLFNBQVNpNkIsSUFBSWo2QixFQUFFMDZJLFlBQVk5aUksS0FBS3lpQyxVQUFVeTlELEdBQUc3OUUsS0FBSyxJQUFJTSxFQUFFMCtHLEdBQUdqNUksRUFBRSxTQUFRLEdBQUl1NkIsSUFBSXY2QixFQUFFcWlKLGFBQWE5bkgsSUFBSTRuSCxRQUFRLFNBQVNuaUosR0FBRyxJQUFJb2xDLEVBQUUsR0FBRyxPQUFPcGxDLEVBQUUwNkksY0FBY3QxRyxHQUFHLGVBQWVwbEMsRUFBRTA2SSxZQUFZLEtBQUsxNkksRUFBRXFpSixlQUFlajlHLEdBQUcsVUFBVXBsQyxFQUFFcWlKLGFBQWEsTUFBTWo5RyxJQUE0Rms5RyxHQUFHcGlILEVBQUUsNkZBQTZGcWlILEdBQUdyaUgsRUFBRSwyREFBMkRzaUgsR0FBR3RpSCxFQUFFLG1TQUFtU3VpSCxHQUFHLDRFQUE0RUMsR0FBRyx3R0FBd0dDLEdBQUcsNkJBQTZCbG1ILEVBQUVsNkIsT0FBTyxLQUFLcWdKLEdBQUcsT0FBT0QsR0FBRyxRQUFRQSxHQUFHLElBQUlFLEdBQUcsSUFBSWh3SSxPQUFPLEtBQUsrdkksSUFBSUUsR0FBRyxhQUFhQyxHQUFHLElBQUlsd0ksT0FBTyxRQUFRK3ZJLEdBQUcsVUFBVUksR0FBRyxxQkFBcUJDLEdBQUcsU0FBU0MsR0FBRyxRQUFRQyxHQUFHampILEVBQUUseUJBQXdCLEdBQUlrakgsR0FBRyxHQUFHQyxHQUFHLENBQUMsT0FBTyxJQUFJLE9BQU8sSUFBSSxTQUFTLElBQUksUUFBUSxJQUFJLFFBQVEsS0FBSyxPQUFPLEtBQUssUUFBUSxLQUFLQyxHQUFHLDRCQUE0QkMsR0FBRyxtQ0FBbUNDLEdBQUd0akgsRUFBRSxnQkFBZSxHQUFJdWpILEdBQUcsU0FBU3pqSixFQUFFb2xDLEdBQUcsT0FBT3BsQyxHQUFHd2pKLEdBQUd4akosSUFBSSxPQUFPb2xDLEVBQUUsSUFBSSxTQUFTcytHLEdBQUcxakosRUFBRW9sQyxHQUFHLElBQUluTCxFQUFFbUwsRUFBRW0rRyxHQUFHRCxHQUFHLE9BQU90akosRUFBRWhELFFBQVFpOUIsR0FBRSxTQUFTajZCLEdBQUcsT0FBT3FqSixHQUFHcmpKLE1BQUssSUFBSTJqSixHQUFHQyxHQUFHQyxHQUFHQyxHQUFHQyxHQUFHQyxHQUFHQyxHQUFHQyxHQUFHQyxHQUFHLFlBQVlDLEdBQUcsZUFBZUMsR0FBRyxxQ0FBcUNDLEdBQUcsaUNBQWlDQyxHQUFHLFdBQVdDLEdBQUcsV0FBV0MsR0FBRyxTQUFTQyxHQUFHLGtCQUFrQkMsR0FBRyx3QkFBd0JDLEdBQUcsa0JBQWtCQyxHQUFHLFNBQVNDLEdBQUcsT0FBT0MsR0FBRzdsRyxHQUFwZ0QsU0FBU2wvQyxHQUFHLE9BQU8yaEosR0FBR0EsSUFBSWo1SSxTQUFTeUMsY0FBYyxRQUFRTSxVQUFVekwsRUFBRTJoSixHQUFHN3lCLGVBQWs4Q2syQixHQUFHLFVBQVUsU0FBU2h4RCxHQUFHaDBGLEVBQUVvbEMsRUFBRW5MLEdBQUcsTUFBTSxDQUFDaGdDLEtBQUssRUFBRWc0QyxJQUFJanlDLEVBQUV5NEksVUFBVXJ6RyxFQUFFb3pHLFNBQVN5TSxHQUFHNy9HLEdBQUc4L0csWUFBWSxHQUFHMTJHLE9BQU92VSxFQUFFdmxCLFNBQVMsSUFBbXJLLFNBQVN5d0ksR0FBR25sSixFQUFFb2xDLEdBQUcsSUFBSW5MLEVBQUVNLEdBQUdBLEVBQUUwK0csR0FBR2gvRyxFQUFFajZCLEVBQUUsVUFBVWk2QixFQUFFLzRCLElBQUlxNUIsR0FBR3Y2QixFQUFFbzRJLE9BQU9wNEksRUFBRWtCLE1BQU1sQixFQUFFb3VILGNBQWNwdUgsRUFBRXk0SSxVQUFVMTlJLE9BQU8sU0FBU2lGLEdBQUcsSUFBSW9sQyxFQUFFNnpHLEdBQUdqNUksRUFBRSxPQUFPb2xDLElBQUlwbEMsRUFBRWk5RSxJQUFJNzNDLEVBQUVwbEMsRUFBRXkxSSxTQUFTLFNBQVN6MUksR0FBVyxJQUFSLElBQUlvbEMsRUFBRXBsQyxFQUFPb2xDLEdBQUcsQ0FBQyxRQUFHLElBQVNBLEVBQUVzM0YsSUFBSSxPQUFNLEVBQUd0M0YsRUFBRUEsRUFBRW9KLE9BQU8sT0FBTSxFQUF6RSxDQUE2RXh1QyxJQUFsSSxDQUF1SUEsR0FBRyxTQUFTQSxHQUFHLElBQUlvbEMsRUFBRSxhQUFhcGxDLEVBQUVpeUMsS0FBSzdNLEVBQUU4ekcsR0FBR2w1SSxFQUFFLFNBQVNBLEVBQUVvbEosVUFBVWhnSCxHQUFHOHpHLEdBQUdsNUksRUFBRSxnQkFBZ0JvbEMsRUFBRTh6RyxHQUFHbDVJLEVBQUUsaUJBQWlCQSxFQUFFb2xKLFVBQVVoZ0gsR0FBRyxJQUFJbkwsRUFBRWcvRyxHQUFHajVJLEVBQUUsUUFBNFEsR0FBcFFpNkIsSUFBSWo2QixFQUFFcWxKLFdBQVcsT0FBT3BySCxFQUFFLFlBQVlBLEVBQUVqNkIsRUFBRXNsSixxQkFBcUJ0bEosRUFBRXc0SSxTQUFTLFdBQVd4NEksRUFBRXc0SSxTQUFTLGdCQUFnQixhQUFheDRJLEVBQUVpeUMsS0FBS2p5QyxFQUFFb2xKLFdBQVcvTSxHQUFHcjRJLEVBQUUsT0FBT2k2QixFQUFFLFNBQVNqNkIsRUFBRW9sQyxHQUFHLE9BQU9wbEMsRUFBRWtsSixZQUFZLElBQUk5L0csSUFBSXBsQyxFQUFFa2xKLFlBQVksVUFBVTkvRyxJQUFJcGxDLEVBQUVrbEosWUFBWTkvRyxHQUFyRixDQUF5RnBsQyxFQUFFLFVBQWEsYUFBYUEsRUFBRWl5QyxJQUFJLENBQUMsSUFBSTFYLEVBQUU0K0csR0FBR241SSxFQUFFNGtKLElBQUksR0FBR3JxSCxFQUFFLENBQUMsSUFBSTk1QixFQUFFOGtKLEdBQUdockgsR0FBR3FmLEVBQUVuNUMsRUFBRWtDLEtBQUt3M0IsRUFBRTE1QixFQUFFMDNJLFFBQVFuNEksRUFBRXFsSixXQUFXenJHLEVBQUU1NUMsRUFBRXNsSixrQkFBa0JuckgsRUFBRW42QixFQUFFb2xKLFVBQVU3cUgsRUFBRTc3QixPQUFPc21KLFFBQVEsQ0FBQyxJQUFJNXFILEVBQUUrK0csR0FBR241SSxFQUFFNGtKLElBQUksR0FBR3hxSCxFQUFFLENBQUMsSUFBSVUsRUFBRTk2QixFQUFFb3VILGNBQWNwdUgsRUFBRW91SCxZQUFZLElBQUlnVSxFQUFFbWpCLEdBQUduckgsR0FBR2EsRUFBRW1uRyxFQUFFei9ILEtBQUt1bUMsRUFBRWs1RixFQUFFK1YsUUFBUWo0RyxFQUFFcEYsRUFBRUcsR0FBRys0RCxHQUFHLFdBQVcsR0FBR2gwRixHQUFHa2dDLEVBQUVtbEgsV0FBV3BxSCxFQUFFaUYsRUFBRW9sSCxrQkFBa0JwOEcsRUFBRWhKLEVBQUV4ckIsU0FBUzFVLEVBQUUwVSxTQUFTK2hCLFFBQU8sU0FBU3oyQixHQUFHLElBQUlBLEVBQUVvbEosVUFBVSxPQUFPcGxKLEVBQUV3dUMsT0FBT3RPLEdBQUUsS0FBS0EsRUFBRWtsSCxVQUFVaHJILEVBQUUxN0IsT0FBT3NtSixHQUFHaGxKLEVBQUUwVSxTQUFTLEdBQUcxVSxFQUFFbzRJLE9BQU0sSUFBaDBCLENBQXMwQnA0SSxHQUFHLFNBQVNBLEdBQUcsU0FBU0EsRUFBRWl5QyxNQUFNanlDLEVBQUV3bEosU0FBU3ZNLEdBQUdqNUksRUFBRSxTQUE3QyxDQUF1REEsR0FBRyxTQUFTQSxHQUFHLElBQUlvbEMsR0FBR0EsRUFBRTZ6RyxHQUFHajVJLEVBQUUsU0FBU0EsRUFBRWl3SCxVQUFVN3FGLEdBQUcsTUFBTTh6RyxHQUFHbDVJLEVBQUUscUJBQXFCQSxFQUFFaXRJLGdCQUFlLEdBQW5HLENBQXdHanRJLEdBQUcsSUFBSSxJQUFJUyxFQUFFLEVBQUVBLEVBQUVvakosR0FBRzlvSixPQUFPMEYsSUFBSVQsRUFBRTZqSixHQUFHcGpKLEdBQUdULEVBQUVvbEMsSUFBSXBsQyxFQUFFLE9BQU8sU0FBU0EsR0FBRyxJQUFJb2xDLEVBQUVuTCxFQUFFTSxFQUFFOTVCLEVBQUVtNUMsRUFBRXpmLEVBQUVDLEVBQUVVLEVBQUVzbkcsRUFBRXBpSSxFQUFFeTRJLFVBQVUsSUFBSXJ6RyxFQUFFLEVBQUVuTCxFQUFFbW9HLEVBQUVybkksT0FBT3FxQyxFQUFFbkwsRUFBRW1MLElBQUksR0FBRzdLLEVBQUU5NUIsRUFBRTJoSSxFQUFFaDlGLEdBQUd6aUMsS0FBS2kzQyxFQUFFd29GLEVBQUVoOUYsR0FBRzFtQyxNQUFNMGxKLEdBQUcvbEgsS0FBSzlELEdBQUcsR0FBR3Y2QixFQUFFeWxKLGFBQVksR0FBSXRySCxFQUFFdXJILEdBQUduckgsRUFBRXY5QixRQUFRb25KLEdBQUcsUUFBUTdwSCxFQUFFQSxFQUFFdjlCLFFBQVEybkosR0FBRyxLQUFLRCxHQUFHcm1ILEtBQUs5RCxHQUFHQSxFQUFFQSxFQUFFdjlCLFFBQVEwbkosR0FBRyxJQUFJOXFHLEVBQUVpK0YsR0FBR2orRixJQUFJOWUsRUFBRTBwSCxHQUFHbm1ILEtBQUs5RCxNQUFNQSxFQUFFQSxFQUFFdDVCLE1BQU0sR0FBRyxJQUFJazVCLElBQUlBLEVBQUVqOEIsT0FBTzQ4QixHQUFHLGVBQWVQLEVBQUVLLEVBQUVMLE1BQU1BLEVBQUUsYUFBYUosRUFBRXdySCxRQUFRN3FILElBQUlQLEVBQUVLLEVBQUVMLElBQUlKLEVBQUVtZ0YsT0FBT2xnRixFQUFFaS9HLEdBQUd6L0YsRUFBRSxVQUFVOWUsRUFBRSs5RyxHQUFHNzRJLEVBQUUsY0FBY3U2QixFQUFFLElBQUlILEVBQUUsTUFBSyxFQUFHLEVBQUVnb0csRUFBRWg5RixJQUFHLElBQUt5ekcsR0FBRzc0SSxFQUFFLFVBQVU0NkIsRUFBRUwsR0FBR0gsRUFBRSxNQUFLLEVBQUcsRUFBRWdvRyxFQUFFaDlGLElBQUlpRixFQUFFOVAsS0FBS0ssRUFBRUwsSUFBSXMrRyxHQUFHNzRJLEVBQUUsVUFBVXFxQyxFQUFFOVAsR0FBR0gsRUFBRSxNQUFLLEVBQUcsRUFBRWdvRyxFQUFFaDlGLE9BQU9qTCxHQUFHQSxFQUFFajhCLE9BQU84QixFQUFFaXdILFdBQVdnMEIsR0FBR2prSixFQUFFaXlDLElBQUlqeUMsRUFBRXc0SSxTQUFTditJLEtBQUtzZ0MsR0FBRzA5RyxHQUFHajRJLEVBQUV1NkIsRUFBRXFmLEVBQUV3b0YsRUFBRWg5RixHQUFHdEssR0FBR3U5RyxHQUFHcjRJLEVBQUV1NkIsRUFBRXFmLEVBQUV3b0YsRUFBRWg5RixHQUFHdEssUUFBUSxHQUFHcXBILEdBQUc5bEgsS0FBSzlELEdBQUdBLEVBQUVBLEVBQUV2OUIsUUFBUW1uSixHQUFHLEtBQUtycEgsRUFBRTBwSCxHQUFHbm1ILEtBQUs5RCxNQUFNQSxFQUFFQSxFQUFFdDVCLE1BQU0sR0FBRyxJQUFJNDNJLEdBQUc3NEksRUFBRXU2QixFQUFFcWYsRUFBRXpmLEdBQUUsRUFBRyxFQUFFaW9HLEVBQUVoOUYsR0FBR3RLLE9BQU8sQ0FBQyxJQUFJRyxHQUFHVixFQUFFQSxFQUFFdjlCLFFBQVFvbkosR0FBRyxLQUFLN3NJLE1BQU1rdEksSUFBSXY3RyxFQUFFak8sR0FBR0EsRUFBRSxHQUFHSCxHQUFFLEVBQUdvTyxJQUFJM08sRUFBRUEsRUFBRXQ1QixNQUFNLElBQUlpb0MsRUFBRW51QyxPQUFPLElBQUl5cEosR0FBR25tSCxLQUFLNkssS0FBS0EsRUFBRUEsRUFBRWpvQyxNQUFNLEdBQUcsR0FBRzY1QixHQUFFLElBQUs0OUcsR0FBRzE0SSxFQUFFdTZCLEVBQUU5NUIsRUFBRW01QyxFQUFFMVEsRUFBRXBPLEVBQUVYLEVBQUVpb0csRUFBRWg5RixTQUFTaXpHLEdBQUdyNEksRUFBRXU2QixFQUFFM2lCLEtBQUt5aUMsVUFBVVQsR0FBR3dvRixFQUFFaDlGLEtBQUtwbEMsRUFBRWl3SCxXQUFXLFVBQVUxMUYsR0FBRzBwSCxHQUFHamtKLEVBQUVpeUMsSUFBSWp5QyxFQUFFdzRJLFNBQVN2K0ksS0FBS3NnQyxJQUFJMDlHLEdBQUdqNEksRUFBRXU2QixFQUFFLE9BQU82bkcsRUFBRWg5RixJQUF4NkIsQ0FBNjZCcGxDLEdBQUdBLEVBQUUsU0FBUzRsSixHQUFHNWxKLEdBQUcsSUFBSW9sQyxFQUFFLEdBQUdBLEVBQUU4ekcsR0FBR2w1SSxFQUFFLFNBQVMsQ0FBQyxJQUFJaTZCLEVBQUUsU0FBU2o2QixHQUFHLElBQUlvbEMsRUFBRXBsQyxFQUFFdVgsTUFBTThzSSxJQUFJLEdBQUlqL0csRUFBSixDQUFhLElBQUluTCxFQUFFLEdBQUdBLEVBQUV5aUcsSUFBSXQzRixFQUFFLEdBQUdqd0IsT0FBTyxJQUFJb2xCLEVBQUU2SyxFQUFFLEdBQUdqd0IsT0FBT25ZLFFBQVF1bkosR0FBRyxJQUFJOWpKLEVBQUU4NUIsRUFBRWhqQixNQUFNK3NJLElBQTBHLE9BQXRHN2pKLEdBQUd3NUIsRUFBRTRySCxNQUFNdHJILEVBQUV2OUIsUUFBUXNuSixHQUFHLElBQUludkksT0FBTzhrQixFQUFFNnJILFVBQVVybEosRUFBRSxHQUFHMFUsT0FBTzFVLEVBQUUsS0FBS3c1QixFQUFFOHJILFVBQVV0bEosRUFBRSxHQUFHMFUsU0FBUzhrQixFQUFFNHJILE1BQU10ckgsRUFBU04sR0FBbE8sQ0FBcU9tTCxHQUFHbkwsR0FBRzZWLEVBQUU5dkMsRUFBRWk2QixJQUFJLFNBQVMrckgsR0FBR2htSixFQUFFb2xDLEdBQUdwbEMsRUFBRWltSixlQUFlam1KLEVBQUVpbUosYUFBYSxJQUFJam1KLEVBQUVpbUosYUFBYTNxSixLQUFLOHBDLEdBQUcsU0FBU21nSCxHQUFHdmxKLEdBQUcsSUFBSW9sQyxFQUFFcGxDLEVBQUUyQyxLQUFLM0YsUUFBUTRuSixHQUFHLElBQUksT0FBT3gvRyxHQUFHLE1BQU1wbEMsRUFBRTJDLEtBQUssS0FBS3lpQyxFQUFFLFdBQVdvL0csR0FBR25tSCxLQUFLK0csR0FBRyxDQUFDemlDLEtBQUt5aUMsRUFBRW5rQyxNQUFNLEdBQUcsR0FBR2szSSxTQUFRLEdBQUksQ0FBQ3gxSSxLQUFLLElBQUl5aUMsRUFBRSxJQUFJK3lHLFNBQVEsR0FBSSxTQUFTdU4sR0FBRzFsSixHQUFHLElBQUlvbEMsRUFBRXBsQyxFQUFFdVgsTUFBTW90SSxJQUFJLEdBQUd2L0csRUFBRSxDQUFDLElBQUluTCxFQUFFLEdBQUcsT0FBT21MLEVBQUU3a0MsU0FBUSxTQUFTUCxHQUFHaTZCLEVBQUVqNkIsRUFBRWlCLE1BQU0sS0FBSSxLQUFLZzVCLEdBQUcsU0FBU2dySCxHQUFHamxKLEdBQUcsSUFBSSxJQUFJb2xDLEVBQUUsR0FBR25MLEVBQUUsRUFBRU0sRUFBRXY2QixFQUFFakYsT0FBT2svQixFQUFFTSxFQUFFTixJQUFJbUwsRUFBRXBsQyxFQUFFaTZCLEdBQUd0M0IsTUFBTTNDLEVBQUVpNkIsR0FBR3Y3QixNQUFNLE9BQU8wbUMsRUFBRSxJQUFJOGdILEdBQUcsZUFBZUMsR0FBRyxVQUFVLFNBQVM1dUcsR0FBR3YzQyxHQUFHLE9BQU9nMEYsR0FBR2gwRixFQUFFaXlDLElBQUlqeUMsRUFBRXk0SSxVQUFVeDNJLFFBQVFqQixFQUFFd3VDLFFBQVEsSUFBcW9CNDNHLEdBQUdDLEdBQXBvQkMsR0FBRyxDQUFDdkUsR0FBR0ssR0FBRyxDQUFDbUUsaUJBQWlCLFNBQVN2bUosRUFBRW9sQyxHQUFHLEdBQUcsVUFBVXBsQyxFQUFFaXlDLElBQUksQ0FBQyxJQUFJaFksRUFBRU0sRUFBRXY2QixFQUFFdzRJLFNBQVMsSUFBSWorRyxFQUFFLFdBQVcsT0FBTyxJQUFJQSxFQUFFLFVBQVVBLEVBQUUsa0JBQWtCTixFQUFFZy9HLEdBQUdqNUksRUFBRSxTQUFTdTZCLEVBQUV0Z0MsTUFBTWdnQyxJQUFJTSxFQUFFLFlBQVlOLEVBQUUsSUFBSU0sRUFBRSxVQUFVLFVBQVVOLEVBQUUsQ0FBQyxJQUFJeDVCLEVBQUV5NEksR0FBR2w1SSxFQUFFLFFBQU8sR0FBSTQ1QyxFQUFFbjVDLEVBQUUsTUFBTUEsRUFBRSxJQUFJLEdBQUcwNUIsRUFBRSxNQUFNKytHLEdBQUdsNUksRUFBRSxVQUFTLEdBQUlvNkIsRUFBRTgrRyxHQUFHbDVJLEVBQUUsYUFBWSxHQUFJODZCLEVBQUV5YyxHQUFHdjNDLEdBQUc0bEosR0FBRzlxSCxHQUFHeTlHLEdBQUd6OUcsRUFBRSxPQUFPLFlBQVlxcUgsR0FBR3JxSCxFQUFFc0ssR0FBR3RLLEVBQUUwckgsV0FBVSxFQUFHMXJILEVBQUUyckgsR0FBRyxJQUFJeHNILEVBQUUsaUJBQWlCMmYsRUFBRW9zRyxHQUFHbHJILEVBQUUsQ0FBQ21NLElBQUluTSxFQUFFMnJILEdBQUdsd0IsTUFBTXo3RixJQUFJLElBQUlzbkcsRUFBRTdxRixHQUFHdjNDLEdBQUdrNUksR0FBRzlXLEVBQUUsU0FBUSxHQUFJbVcsR0FBR25XLEVBQUUsT0FBTyxTQUFTK2lCLEdBQUcvaUIsRUFBRWg5RixHQUFHNGdILEdBQUdsckgsRUFBRSxDQUFDbU0sSUFBSSxJQUFJaE4sRUFBRSxjQUFjMmYsRUFBRTI4RSxNQUFNNkwsSUFBSSxJQUFJbm5HLEVBQUVzYyxHQUFHdjNDLEdBQUcsT0FBT2s1SSxHQUFHaitHLEVBQUUsU0FBUSxHQUFJczlHLEdBQUd0OUcsRUFBRSxRQUFRaEIsR0FBR2tySCxHQUFHbHFILEVBQUVtSyxHQUFHNGdILEdBQUdsckgsRUFBRSxDQUFDbU0sSUFBSXhtQyxFQUFFODFILE1BQU10N0YsSUFBSWQsRUFBRVcsRUFBRTRySCxNQUFLLEVBQUd0c0gsSUFBSVUsRUFBRTZySCxPQUFPdnNILEdBQUdVLE9BQWlCOHJILEdBQUcsQ0FBQ0MsWUFBVyxFQUFHMS9ILFFBQVFtL0gsR0FBRzFwQixXQUFXLENBQUN2M0gsTUFBTSxTQUFTckYsRUFBRW9sQyxFQUFFbkwsR0FBRyxJQUFJTSxFQUFFNkssRUFBRTFtQyxNQUFNK0IsRUFBRTJrQyxFQUFFd3BGLFVBQVVoMUUsRUFBRTU1QyxFQUFFaXlDLElBQUk5WCxFQUFFbjZCLEVBQUV3NEksU0FBU3YrSSxLQUFLLEdBQUcrRixFQUFFaXdILFVBQVUsT0FBT21wQixHQUFHcDVJLEVBQUV1NkIsRUFBRTk1QixJQUFHLEVBQUcsR0FBRyxXQUFXbTVDLEdBQUcsU0FBUzU1QyxFQUFFb2xDLEVBQUVuTCxHQUFHLElBQUlNLEVBQUUsOEtBQThLTixHQUFHQSxFQUFFNjRCLE9BQU8sVUFBVSxPQUFPLE1BQWdGK2xGLEdBQUc3NEksRUFBRSxTQUEvRXU2QixFQUFFQSxFQUFFLElBQUk4K0csR0FBR2owRyxFQUFFLDZEQUE2RSxNQUFLLEdBQXRVLENBQTJVcGxDLEVBQUV1NkIsRUFBRTk1QixRQUFRLEdBQUcsVUFBVW01QyxHQUFHLGFBQWF6ZixHQUFHLFNBQVNuNkIsRUFBRW9sQyxFQUFFbkwsR0FBRyxJQUFJTSxFQUFFTixHQUFHQSxFQUFFNjRCLE9BQU9yeUQsRUFBRXc0SSxHQUFHajVJLEVBQUUsVUFBVSxPQUFPNDVDLEVBQUVxL0YsR0FBR2o1SSxFQUFFLGVBQWUsT0FBT202QixFQUFFOCtHLEdBQUdqNUksRUFBRSxnQkFBZ0IsUUFBUWk0SSxHQUFHajRJLEVBQUUsVUFBVSxpQkFBaUJvbEMsRUFBRSxRQUFRQSxFQUFFLElBQUkza0MsRUFBRSxRQUFRLFNBQVNtNUMsRUFBRSxLQUFLeFUsRUFBRSxJQUFJLE9BQU9BLEVBQUUsSUFBSXdVLEVBQUUsTUFBTWkvRixHQUFHNzRJLEVBQUUsU0FBUyxXQUFXb2xDLEVBQUUseUNBQXlDd1UsRUFBRSxNQUFNemYsRUFBRSxxQ0FBcUNJLEVBQUUsTUFBTTk1QixFQUFFLElBQUlBLEdBQUcsNkNBQTZDNDRJLEdBQUdqMEcsRUFBRSxxQkFBcUIsbUJBQW1CaTBHLEdBQUdqMEcsRUFBRSw2Q0FBNkMsV0FBV2kwRyxHQUFHajBHLEVBQUUsT0FBTyxJQUFJLE1BQUssR0FBM2dCLENBQWdoQnBsQyxFQUFFdTZCLEVBQUU5NUIsUUFBUSxHQUFHLFVBQVVtNUMsR0FBRyxVQUFVemYsR0FBRyxTQUFTbjZCLEVBQUVvbEMsRUFBRW5MLEdBQUcsSUFBSU0sRUFBRU4sR0FBR0EsRUFBRTY0QixPQUFPcnlELEVBQUV3NEksR0FBR2o1SSxFQUFFLFVBQVUsT0FBT2k0SSxHQUFHajRJLEVBQUUsVUFBVSxNQUFNb2xDLEVBQUUsS0FBSzNrQyxFQUFFODVCLEVBQUUsTUFBTTk1QixFQUFFLElBQUlBLEdBQUcsS0FBS280SSxHQUFHNzRJLEVBQUUsU0FBU3E1SSxHQUFHajBHLEVBQUUza0MsR0FBRyxNQUFLLEdBQXpJLENBQThJVCxFQUFFdTZCLEVBQUU5NUIsUUFBUSxHQUFHLFVBQVVtNUMsR0FBRyxhQUFhQSxHQUFHLFNBQVM1NUMsRUFBRW9sQyxFQUFFbkwsR0FBRyxJQUFJTSxFQUFFdjZCLEVBQUV3NEksU0FBU3YrSSxLQUFLd0csRUFBRXc1QixHQUFHLEdBQUcyZixFQUFFbjVDLEVBQUU4dkksS0FBS3AyRyxFQUFFMTVCLEVBQUVxeUQsT0FBTzE0QixFQUFFMzVCLEVBQUUwVSxLQUFLMmxCLEdBQUc4ZSxHQUFHLFVBQVVyZixFQUFFNm5HLEVBQUV4b0YsRUFBRSxTQUFTLFVBQVVyZixFQUF0MmdDLE1BQTIyZ0MsUUFBUVUsRUFBRSxzQkFBc0JiLElBQUlhLEVBQUUsOEJBQThCZCxJQUFJYyxFQUFFLE1BQU1BLEVBQUUsS0FBSyxJQUFJaU8sRUFBRW13RyxHQUFHajBHLEVBQUVuSyxHQUFHSCxJQUFJb08sRUFBRSxxQ0FBcUNBLEdBQUcrdUcsR0FBR2o0SSxFQUFFLFFBQVEsSUFBSW9sQyxFQUFFLEtBQUt5ekcsR0FBRzc0SSxFQUFFb2lJLEVBQUVsNUYsRUFBRSxNQUFLLElBQUs5TyxHQUFHRCxJQUFJMCtHLEdBQUc3NEksRUFBRSxPQUFPLGtCQUExVSxDQUE2VkEsRUFBRXU2QixFQUFFOTVCLFFBQVEsSUFBSWtwQyxFQUFFdTVGLGNBQWN0cEYsR0FBRyxPQUFPdy9GLEdBQUdwNUksRUFBRXU2QixFQUFFOTVCLElBQUcsRUFBRyxPQUFNLEdBQUk5QyxLQUFLLFNBQVNxQyxFQUFFb2xDLEdBQUdBLEVBQUUxbUMsT0FBT3U1SSxHQUFHajRJLEVBQUUsY0FBYyxNQUFNb2xDLEVBQUUxbUMsTUFBTSxJQUFJMG1DLElBQUlqaEMsS0FBSyxTQUFTbkUsRUFBRW9sQyxHQUFHQSxFQUFFMW1DLE9BQU91NUksR0FBR2o0SSxFQUFFLFlBQVksTUFBTW9sQyxFQUFFMW1DLE1BQU0sSUFBSTBtQyxLQUFLMGhILFNBQVMsU0FBUzltSixHQUFHLE1BQU0sUUFBUUEsR0FBRyttSixXQUFXekUsR0FBRy9lLFlBQVl3USxHQUFHaVQsaUJBQWlCekUsR0FBR3JmLGNBQWM0UixHQUFHelIsZ0JBQWdCMFIsR0FBR2lOLFdBQVcsU0FBU2hpSixHQUFHLE9BQU9BLEVBQUVtM0UsUUFBTyxTQUFTbjNFLEVBQUVvbEMsR0FBRyxPQUFPcGxDLEVBQUVtQixPQUFPaWtDLEVBQUU0OEcsWUFBWSxNQUFLLElBQUl4bUosS0FBSyxLQUF0RixDQUE0RjhxSixLQUFLVyxHQUFHL25HLEdBQUUsU0FBU2wvQyxHQUFHLE9BQU9rZ0MsRUFBRSxpRkFBaUZsZ0MsRUFBRSxJQUFJQSxFQUFFLFFBQW1oQ2tuSixHQUFHLDBEQUEwREMsR0FBRyxnQkFBZ0JDLEdBQUcsK0ZBQStGQyxHQUFHLENBQUNDLElBQUksR0FBR2w2SSxJQUFJLEVBQUV1aEMsTUFBTSxHQUFHNDRHLE1BQU0sR0FBR2xxRSxHQUFHLEdBQUd0akUsS0FBSyxHQUFHK21FLE1BQU0sR0FBR3hELEtBQUssR0FBR2syRCxPQUFPLENBQUMsRUFBRSxLQUFLZ1UsR0FBRyxDQUFDRixJQUFJLENBQUMsTUFBTSxVQUFVbDZJLElBQUksTUFBTXVoQyxNQUFNLFFBQVE0NEcsTUFBTSxDQUFDLElBQUksWUFBWWxxRSxHQUFHLENBQUMsS0FBSyxXQUFXdGpFLEtBQUssQ0FBQyxPQUFPLGFBQWErbUUsTUFBTSxDQUFDLFFBQVEsY0FBY3hELEtBQUssQ0FBQyxPQUFPLGFBQWFrMkQsT0FBTyxDQUFDLFlBQVksU0FBUyxRQUFRaVUsR0FBRyxTQUFTem5KLEdBQUcsTUFBTSxNQUFNQSxFQUFFLGlCQUFpQjBuSixHQUFHLENBQUM5MkMsS0FBSyw0QkFBNEJsaEIsUUFBUSwyQkFBMkJua0QsS0FBS2s4RyxHQUFHLDBDQUEwQ0UsS0FBS0YsR0FBRyxtQkFBbUIvcEcsTUFBTStwRyxHQUFHLG9CQUFvQkcsSUFBSUgsR0FBRyxrQkFBa0JJLEtBQUtKLEdBQUcsbUJBQW1CMXRJLEtBQUswdEksR0FBRyw2Q0FBNkMzTyxPQUFPMk8sR0FBRyw2Q0FBNkMzbUUsTUFBTTJtRSxHQUFHLDhDQUE4QyxTQUFTSyxHQUFHOW5KLEVBQUVvbEMsR0FBRyxJQUFJbkwsRUFBRW1MLEVBQUUsWUFBWSxNQUFNN0ssRUFBRSxHQUFHOTVCLEVBQUUsR0FBRyxJQUFJLElBQUltNUMsS0FBSzU1QyxFQUFFLENBQUMsSUFBSW02QixFQUFFNHRILEdBQUcvbkosRUFBRTQ1QyxJQUFJNTVDLEVBQUU0NUMsSUFBSTU1QyxFQUFFNDVDLEdBQUd1K0YsUUFBUTEzSSxHQUFHbTVDLEVBQUUsSUFBSXpmLEVBQUUsSUFBSUksR0FBRyxJQUFJcWYsRUFBRSxLQUFLemYsRUFBRSxJQUFJLE9BQU9JLEVBQUUsSUFBSUEsRUFBRXQ1QixNQUFNLEdBQUcsR0FBRyxJQUFJUixFQUFFdzVCLEVBQUUsTUFBTU0sRUFBRSxLQUFLOTVCLEVBQUVRLE1BQU0sR0FBRyxHQUFHLEtBQUtnNUIsRUFBRU0sRUFBRSxTQUFTd3RILEdBQUcvbkosR0FBRyxJQUFJQSxFQUFFLE1BQU0sZUFBZSxHQUFHb0gsTUFBTXBHLFFBQVFoQixHQUFHLE1BQU0sSUFBSUEsRUFBRXl1QixLQUFJLFNBQVN6dUIsR0FBRyxPQUFPK25KLEdBQUcvbkosTUFBS3hFLEtBQUssS0FBSyxJQUFJLElBQUk0cEMsRUFBRWdpSCxHQUFHL29ILEtBQUtyK0IsRUFBRXRCLE9BQU91N0IsRUFBRWl0SCxHQUFHN29ILEtBQUtyK0IsRUFBRXRCLE9BQU82N0IsRUFBRTZzSCxHQUFHL29ILEtBQUtyK0IsRUFBRXRCLE1BQU0xQixRQUFRbXFKLEdBQUcsS0FBSyxHQUFHbm5KLEVBQUU0dUgsVUFBVSxDQUFDLElBQUludUgsRUFBRSxHQUFHbTVDLEVBQUUsR0FBR3pmLEVBQUUsR0FBRyxJQUFJLElBQUlDLEtBQUtwNkIsRUFBRTR1SCxVQUFVLEdBQUc4NEIsR0FBR3R0SCxHQUFHd2YsR0FBRzh0RyxHQUFHdHRILEdBQUdpdEgsR0FBR2p0SCxJQUFJRCxFQUFFNytCLEtBQUs4K0IsUUFBUSxHQUFHLFVBQVVBLEVBQUUsQ0FBQyxJQUFJVSxFQUFFOTZCLEVBQUU0dUgsVUFBVWgxRSxHQUFHNnRHLEdBQUcsQ0FBQyxPQUFPLFFBQVEsTUFBTSxRQUFRaHhILFFBQU8sU0FBU3oyQixHQUFHLE9BQU84NkIsRUFBRTk2QixNQUFLeXVCLEtBQUksU0FBU3p1QixHQUFHLE1BQU0sVUFBVUEsRUFBRSxTQUFReEUsS0FBSyxZQUFZMitCLEVBQUU3K0IsS0FBSzgrQixHQUFHLE9BQU9ELEVBQUVwL0IsU0FBUzBGLEdBQUcsU0FBU1QsR0FBRyxNQUFNLG1DQUFtQ0EsRUFBRXl1QixJQUFJdTVILElBQUl4c0osS0FBSyxNQUFNLGdCQUExRSxDQUEyRjIrQixJQUFJeWYsSUFBSW41QyxHQUFHbTVDLEdBQUcsb0JBQW9CbjVDLEdBQUcya0MsRUFBRSxVQUFVcGxDLEVBQUV0QixNQUFNLFdBQVd1N0IsRUFBRSxXQUFXajZCLEVBQUV0QixNQUFNLFlBQVk2N0IsRUFBRSxVQUFVdjZCLEVBQUV0QixNQUFNc0IsRUFBRXRCLE9BQU8sSUFBSSxPQUFPMG1DLEdBQUduTCxFQUFFajZCLEVBQUV0QixNQUFNLHFCQUFxQjY3QixFQUFFLFVBQVV2NkIsRUFBRXRCLE1BQU1zQixFQUFFdEIsT0FBTyxJQUFJLFNBQVNzcEosR0FBR2hvSixHQUFHLElBQUlvbEMsRUFBRS9WLFNBQVNydkIsRUFBRSxJQUFJLEdBQUdvbEMsRUFBRSxNQUFNLG9CQUFvQkEsRUFBRSxJQUFJbkwsRUFBRW90SCxHQUFHcm5KLEdBQUd1NkIsRUFBRWl0SCxHQUFHeG5KLEdBQUcsTUFBTSxxQkFBcUI0WCxLQUFLeWlDLFVBQVVyNkMsR0FBRyxJQUFJNFgsS0FBS3lpQyxVQUFVcGdCLEdBQUcsZUFBZXJpQixLQUFLeWlDLFVBQVU5ZixHQUFHLElBQUksSUFBSTB0SCxHQUFHLENBQUM1ckosR0FBRyxTQUFTMkQsRUFBRW9sQyxHQUFHcGxDLEVBQUVrb0osY0FBYyxTQUFTbG9KLEdBQUcsTUFBTSxNQUFNQSxFQUFFLElBQUlvbEMsRUFBRTFtQyxNQUFNLE1BQU1xQixLQUFLLFNBQVNDLEVBQUVvbEMsR0FBR3BsQyxFQUFFbW9KLFNBQVMsU0FBU2x1SCxHQUFHLE1BQU0sTUFBTUEsRUFBRSxLQUFLajZCLEVBQUVpeUMsSUFBSSxLQUFLN00sRUFBRTFtQyxNQUFNLEtBQUswbUMsRUFBRXdwRixXQUFXeHBGLEVBQUV3cEYsVUFBVTF3SCxLQUFLLE9BQU8sVUFBVWtuQyxFQUFFd3BGLFdBQVd4cEYsRUFBRXdwRixVQUFVdFUsS0FBSyxRQUFRLElBQUksTUFBTTh0QyxNQUFNcitHLEdBQUdzK0csR0FBRyxTQUFTcm9KLEdBQUdoRixLQUFLdUcsUUFBUXZCLEVBQUVoRixLQUFLa2hELEtBQUtsOEMsRUFBRWs4QyxNQUFNNjdGLEdBQUcvOEksS0FBS2l4RSxXQUFXK3JFLEdBQUdoNEksRUFBRW1uQixRQUFRLGlCQUFpQm5zQixLQUFLc3RKLFdBQVd0USxHQUFHaDRJLEVBQUVtbkIsUUFBUSxXQUFXbnNCLEtBQUs0aEksV0FBVzlzRixFQUFFQSxFQUFFLEdBQUdtNEcsSUFBSWpvSixFQUFFNDhILFlBQVksSUFBSXgzRixFQUFFcGxDLEVBQUVrakksZUFBZXo2RixFQUFFenRDLEtBQUt1dEosZUFBZSxTQUFTdm9KLEdBQUcsUUFBUUEsRUFBRWl3SCxZQUFZN3FGLEVBQUVwbEMsRUFBRWl5QyxNQUFNajNDLEtBQUt3dEosT0FBTyxFQUFFeHRKLEtBQUtna0ksZ0JBQWdCLEdBQUdoa0ksS0FBS2kwSSxLQUFJLEdBQUksU0FBU3daLEdBQUd6b0osRUFBRW9sQyxHQUFHLElBQUluTCxFQUFFLElBQUlvdUgsR0FBR2pqSCxHQUFHLE1BQU0sQ0FBQ3IxQixPQUFPLHNCQUFzQi9QLEVBQUUwb0osR0FBRzFvSixFQUFFaTZCLEdBQUcsYUFBYSxJQUFJK2tHLGdCQUFnQi9rRyxFQUFFK2tHLGlCQUFpQixTQUFTMHBCLEdBQUcxb0osRUFBRW9sQyxHQUFHLEdBQUdwbEMsRUFBRXd1QyxTQUFTeHVDLEVBQUVpdkksSUFBSWp2SSxFQUFFaXZJLEtBQUtqdkksRUFBRXd1QyxPQUFPeWdHLEtBQUtqdkksRUFBRTJvSixhQUFhM29KLEVBQUU0b0osZ0JBQWdCLE9BQU9DLEdBQUc3b0osRUFBRW9sQyxHQUFHLEdBQUdwbEMsRUFBRXU5QyxPQUFPdjlDLEVBQUU4b0osY0FBYyxPQUFPQyxHQUFHL29KLEVBQUVvbEMsR0FBRyxHQUFHcGxDLEVBQUUwOEgsTUFBTTE4SCxFQUFFZ3BKLGFBQWEsT0FBT0MsR0FBR2pwSixFQUFFb2xDLEdBQUcsR0FBR3BsQyxFQUFFeW1KLEtBQUt6bUosRUFBRWtwSixZQUFZLE9BQU9DLEdBQUducEosRUFBRW9sQyxHQUFHLEdBQUcsYUFBYXBsQyxFQUFFaXlDLEtBQUtqeUMsRUFBRXFsSixZQUFZamdILEVBQUU2cEcsSUFBSSxDQUFDLEdBQUcsU0FBU2p2SSxFQUFFaXlDLElBQUksT0FBTyxTQUFTanlDLEVBQUVvbEMsR0FBRyxJQUFJbkwsRUFBRWo2QixFQUFFd2xKLFVBQVUsWUFBWWpySCxFQUFFNnVILEdBQUdwcEosRUFBRW9sQyxHQUFHM2tDLEVBQUUsTUFBTXc1QixHQUFHTSxFQUFFLElBQUlBLEVBQUUsSUFBSXFmLEVBQUU1NUMsRUFBRTRwSCxPQUFPNXBILEVBQUVzNEksYUFBYStRLElBQUlycEosRUFBRTRwSCxPQUFPLElBQUl6b0gsT0FBT25CLEVBQUVzNEksY0FBYyxJQUFJN3BILEtBQUksU0FBU3p1QixHQUFHLE1BQU0sQ0FBQzJDLEtBQUtpNEIsRUFBRTU2QixFQUFFMkMsTUFBTWpFLE1BQU1zQixFQUFFdEIsTUFBTXk1SSxRQUFRbjRJLEVBQUVtNEksYUFBWSxLQUFLaCtHLEVBQUVuNkIsRUFBRXc0SSxTQUFTLFVBQTZFLE9BQWxFNStGLElBQUl6ZixHQUFHSSxJQUFJOTVCLEdBQUcsU0FBU201QyxJQUFJbjVDLEdBQUcsSUFBSW01QyxHQUFHemYsSUFBSTE1QixJQUFJbTVDLEVBQUUsR0FBRyxTQUFTLElBQUl6ZixHQUFVMTVCLEVBQUUsSUFBclUsQ0FBMFVULEVBQUVvbEMsR0FBRyxJQUFJbkwsRUFBRSxHQUFHajZCLEVBQUVpd0gsVUFBVWgyRixFQUFFLFNBQVNqNkIsRUFBRW9sQyxFQUFFbkwsR0FBRyxJQUFJTSxFQUFFNkssRUFBRTZuRyxlQUFlLEtBQUttYyxHQUFHaGtILEVBQUVuTCxHQUFFLEdBQUksTUFBTSxNQUFNajZCLEVBQUUsSUFBSXNwSixHQUFHbGtILEVBQUVuTCxJQUFJTSxFQUFFLElBQUlBLEVBQUUsSUFBSSxJQUE5RixDQUFtR3Y2QixFQUFFaXdILFVBQVVqd0gsRUFBRW9sQyxPQUFPLENBQUMsSUFBSTdLLElBQUl2NkIsRUFBRW80SSxPQUFPcDRJLEVBQUVpdkksS0FBSzdwRyxFQUFFbWpILGVBQWV2b0osTUFBTXU2QixFQUFFK3VILEdBQUd0cEosRUFBRW9sQyxJQUFJLElBQUkza0MsRUFBRVQsRUFBRWl0SSxlQUFlLEtBQUttYyxHQUFHcHBKLEVBQUVvbEMsR0FBRSxHQUFJbkwsRUFBRSxPQUFPajZCLEVBQUVpeUMsSUFBSSxLQUFLMVgsRUFBRSxJQUFJQSxFQUFFLEtBQUs5NUIsRUFBRSxJQUFJQSxFQUFFLElBQUksSUFBSSxJQUFJLElBQUltNUMsRUFBRSxFQUFFQSxFQUFFeFUsRUFBRTZtQyxXQUFXbHhFLE9BQU82K0MsSUFBSTNmLEVBQUVtTCxFQUFFNm1DLFdBQVdyeUIsR0FBRzU1QyxFQUFFaTZCLEdBQUcsT0FBT0EsRUFBRSxPQUFPbXZILEdBQUdwcEosRUFBRW9sQyxJQUFJLFNBQVMsU0FBU3lqSCxHQUFHN29KLEVBQUVvbEMsR0FBR3BsQyxFQUFFNG9KLGlCQUFnQixFQUFHLElBQUkzdUgsRUFBRW1MLEVBQUU2cEcsSUFBSSxPQUFPanZJLEVBQUVpdkksTUFBTTdwRyxFQUFFNnBHLElBQUlqdkksRUFBRWl2SSxLQUFLN3BHLEVBQUU0NUYsZ0JBQWdCMWpJLEtBQUsscUJBQXFCb3RKLEdBQUcxb0osRUFBRW9sQyxHQUFHLEtBQUtBLEVBQUU2cEcsSUFBSWgxRyxFQUFFLE9BQU9tTCxFQUFFNDVGLGdCQUFnQmprSSxPQUFPLElBQUlpRixFQUFFdXBKLFlBQVksUUFBUSxJQUFJLElBQUksU0FBU1IsR0FBRy9vSixFQUFFb2xDLEdBQUcsR0FBR3BsQyxFQUFFOG9KLGVBQWMsRUFBRzlvSixFQUFFeW1KLEtBQUt6bUosRUFBRWtwSixZQUFZLE9BQU9DLEdBQUducEosRUFBRW9sQyxHQUFHLEdBQUdwbEMsRUFBRXVwSixZQUFZLENBQUMsSUFBSSxJQUFJdHZILEVBQUUsR0FBR00sRUFBRXY2QixFQUFFd3VDLE9BQU9qVSxHQUFHLENBQUMsR0FBR0EsRUFBRW1pRyxJQUFJLENBQUN6aUcsRUFBRU0sRUFBRXI1QixJQUFJLE1BQU1xNUIsRUFBRUEsRUFBRWlVLE9BQU8sT0FBT3ZVLEVBQUUsTUFBTXl1SCxHQUFHMW9KLEVBQUVvbEMsR0FBRyxJQUFJQSxFQUFFb2pILFNBQVMsSUFBSXZ1SCxFQUFFLElBQUl5dUgsR0FBRzFvSixFQUFFb2xDLEdBQUcsT0FBT3lqSCxHQUFHN29KLEVBQUVvbEMsR0FBRyxTQUFTK2pILEdBQUducEosRUFBRW9sQyxFQUFFbkwsRUFBRU0sR0FBRyxPQUFPdjZCLEVBQUVrcEosYUFBWSxFQUFHLFNBQVNscEosRUFBRW9sQyxFQUFFbkwsRUFBRU0sRUFBRTk1QixHQUFHLElBQUkya0MsRUFBRXJxQyxPQUFPLE9BQU8wRixHQUFHLE9BQU8sSUFBSW01QyxFQUFFeFUsRUFBRXNZLFFBQVEsT0FBTzlELEVBQUUzUyxJQUFJLElBQUkyUyxFQUFFM1MsSUFBSSxLQUFLOU0sRUFBRXlmLEVBQUUyOEUsT0FBTyxJQUFJdjJILEVBQUVvbEMsRUFBRW5MLEVBQUVNLEVBQUU5NUIsR0FBRyxHQUFHMDVCLEVBQUV5ZixFQUFFMjhFLE9BQU8sU0FBU3A4RixFQUFFbjZCLEdBQUcsT0FBT3U2QixFQUFFQSxFQUFFdjZCLEVBQUVpNkIsR0FBR2o2QixFQUFFdTlDLEtBQUt3ckcsR0FBRy9vSixFQUFFaTZCLEdBQUd5dUgsR0FBRzFvSixFQUFFaTZCLElBQXhMLENBQTZMajZCLEVBQUVpbUosYUFBYWhsSixRQUFRbWtDLEVBQUVuTCxFQUFFTSxHQUFHLFNBQVMwdUgsR0FBR2pwSixFQUFFb2xDLEVBQUVuTCxFQUFFTSxHQUFHLElBQUk5NUIsRUFBRVQsRUFBRTA4SCxJQUFJOWlGLEVBQUU1NUMsRUFBRTZsSixNQUFNMXJILEVBQUVuNkIsRUFBRThsSixVQUFVLElBQUk5bEosRUFBRThsSixVQUFVLEdBQUcxckgsRUFBRXA2QixFQUFFK2xKLFVBQVUsSUFBSS9sSixFQUFFK2xKLFVBQVUsR0FBRyxPQUFPL2xKLEVBQUVncEosY0FBYSxHQUFJenVILEdBQUcsTUFBTSxLQUFLOTVCLEVBQUUsY0FBY201QyxFQUFFemYsRUFBRUMsRUFBRSxhQUFhSCxHQUFHeXVILElBQUkxb0osRUFBRW9sQyxHQUFHLEtBQUssU0FBU2trSCxHQUFHdHBKLEVBQUVvbEMsR0FBRyxJQUFJbkwsRUFBRSxJQUFJTSxFQUFFLFNBQVN2NkIsRUFBRW9sQyxHQUFHLElBQUluTCxFQUFFajZCLEVBQUU0OEgsV0FBVyxHQUFJM2lHLEVBQUosQ0FBYSxJQUFJTSxFQUFFOTVCLEVBQUVtNUMsRUFBRXpmLEVBQUVDLEVBQUUsZUFBZVUsR0FBRSxFQUFHLElBQUlQLEVBQUUsRUFBRTk1QixFQUFFdzVCLEVBQUVsL0IsT0FBT3cvQixFQUFFOTVCLEVBQUU4NUIsSUFBSSxDQUFDcWYsRUFBRTNmLEVBQUVNLEdBQUdKLEdBQUUsRUFBRyxJQUFJaW9HLEVBQUVoOUYsRUFBRXczRixXQUFXaGpGLEVBQUVqM0MsTUFBTXkvSCxJQUFJam9HLElBQUlpb0csRUFBRXBpSSxFQUFFNDVDLEVBQUV4VSxFQUFFOFcsT0FBTy9oQixJQUFJVyxHQUFFLEVBQUdWLEdBQUcsVUFBVXdmLEVBQUVqM0MsS0FBSyxjQUFjaTNDLEVBQUVpakYsUUFBUSxLQUFLampGLEVBQUVsN0MsTUFBTSxXQUFXazdDLEVBQUVsN0MsTUFBTSxnQkFBZ0JrWixLQUFLeWlDLFVBQVVULEVBQUVsN0MsT0FBTyxLQUFLazdDLEVBQUU1aEIsSUFBSSxTQUFTNGhCLEVBQUUrK0YsYUFBYS8rRixFQUFFNWhCLElBQUksSUFBSTRoQixFQUFFNWhCLElBQUksS0FBSyxLQUFLNGhCLEVBQUVnMUUsVUFBVSxjQUFjaDNHLEtBQUt5aUMsVUFBVVQsRUFBRWcxRSxXQUFXLElBQUksTUFBTSxPQUFHOXpGLEVBQVNWLEVBQUVuNUIsTUFBTSxHQUFHLEdBQUcsU0FBMUIsR0FBcGEsQ0FBbWNqQixFQUFFb2xDLEdBQUc3SyxJQUFJTixHQUFHTSxFQUFFLEtBQUt2NkIsRUFBRWtCLE1BQU0rNEIsR0FBRyxPQUFPajZCLEVBQUVrQixJQUFJLEtBQUtsQixFQUFFaTlFLE1BQU1oakQsR0FBRyxPQUFPajZCLEVBQUVpOUUsSUFBSSxLQUFLajlFLEVBQUV5MUksV0FBV3g3RyxHQUFHLGtCQUFrQmo2QixFQUFFaXZJLE1BQU1oMUcsR0FBRyxhQUFhajZCLEVBQUVpd0gsWUFBWWgyRixHQUFHLFFBQVFqNkIsRUFBRWl5QyxJQUFJLE1BQU0sSUFBSSxJQUFJeHhDLEVBQUUsRUFBRUEsRUFBRTJrQyxFQUFFa2pILFdBQVd2dEosT0FBTzBGLElBQUl3NUIsR0FBR21MLEVBQUVrakgsV0FBVzduSixHQUFHVCxHQUFHLEdBQUdBLEVBQUU0cEgsUUFBUTN2RixHQUFHLFNBQVNvdkgsR0FBR3JwSixFQUFFNHBILE9BQU8sS0FBSzVwSCxFQUFFdzRCLFFBQVF5QixHQUFHLFlBQVlvdkgsR0FBR3JwSixFQUFFdzRCLE9BQU8sS0FBS3g0QixFQUFFeTdDLFNBQVN4aEIsR0FBRzZ0SCxHQUFHOW5KLEVBQUV5N0MsUUFBTyxHQUFJLEtBQUt6N0MsRUFBRWc1SSxlQUFlLytHLEdBQUc2dEgsR0FBRzluSixFQUFFZzVJLGNBQWEsR0FBSSxLQUFLaDVJLEVBQUVxbEosYUFBYXJsSixFQUFFb2xKLFlBQVluckgsR0FBRyxRQUFRajZCLEVBQUVxbEosV0FBVyxLQUFLcmxKLEVBQUVvdUgsY0FBY24wRixHQUFHLFNBQVNqNkIsRUFBRW9sQyxFQUFFbkwsR0FBRyxJQUFJTSxFQUFFdjZCLEVBQUUwOEgsS0FBS3I5SCxPQUFPdUIsS0FBS3drQyxHQUFHbXlDLE1BQUssU0FBU3YzRSxHQUFHLElBQUlpNkIsRUFBRW1MLEVBQUVwbEMsR0FBRyxPQUFPaTZCLEVBQUVxckgsbUJBQW1CcnJILEVBQUV3c0gsSUFBSXhzSCxFQUFFeWlHLEtBQUs4c0IsR0FBR3Z2SCxNQUFLeDVCLElBQUlULEVBQUV5bUosR0FBRyxJQUFJbHNILEVBQUUsSUFBSSxJQUFJcWYsRUFBRTU1QyxFQUFFd3VDLE9BQU9vTCxHQUFHLENBQUMsR0FBR0EsRUFBRXdyRyxXQUFXeHJHLEVBQUV3ckcsWUFBWUosSUFBSXByRyxFQUFFOGlGLElBQUksQ0FBQ25pRyxHQUFFLEVBQUcsTUFBTXFmLEVBQUU2c0csS0FBS2htSixHQUFFLEdBQUltNUMsRUFBRUEsRUFBRXBMLE9BQU8sSUFBSXJVLEVBQUU5NkIsT0FBT3VCLEtBQUt3a0MsR0FBRzNXLEtBQUksU0FBU3p1QixHQUFHLE9BQU95cEosR0FBR3JrSCxFQUFFcGxDLEdBQUdpNkIsTUFBS3orQixLQUFLLEtBQUssTUFBTSxtQkFBbUIyK0IsRUFBRSxLQUFLSSxFQUFFLGFBQWEsTUFBTUEsR0FBRzk1QixFQUFFLGVBQWUsU0FBU1QsR0FBeUIsSUFBdEIsSUFBSW9sQyxFQUFFLEtBQUtuTCxFQUFFajZCLEVBQUVqRixPQUFZay9CLEdBQUdtTCxFQUFFLEdBQUdBLEVBQUVwbEMsRUFBRXc2QixhQUFhUCxHQUFHLE9BQU9tTCxJQUFJLEVBQTlFLENBQWlGakwsR0FBRyxJQUFJLElBQS9jLENBQW9kbjZCLEVBQUVBLEVBQUVvdUgsWUFBWWhwRixHQUFHLEtBQUtwbEMsRUFBRXFGLFFBQVE0MEIsR0FBRyxnQkFBZ0JqNkIsRUFBRXFGLE1BQU0zRyxNQUFNLGFBQWFzQixFQUFFcUYsTUFBTWlCLFNBQVMsZUFBZXRHLEVBQUVxRixNQUFNMjNILFdBQVcsTUFBTWg5SCxFQUFFaXRJLGVBQWUsQ0FBQyxJQUFJcnpGLEVBQUUsU0FBUzU1QyxFQUFFb2xDLEdBQUcsSUFBSW5MLEVBQUVqNkIsRUFBRTBVLFNBQVMsR0FBRyxHQUFHdWxCLEdBQUcsSUFBSUEsRUFBRWhnQyxLQUFLLENBQUMsSUFBSXNnQyxFQUFFa3VILEdBQUd4dUgsRUFBRW1MLEVBQUU3akMsU0FBUyxNQUFNLHFDQUFxQ2c1QixFQUFFeHFCLE9BQU8sc0JBQXNCd3FCLEVBQUV5a0csZ0JBQWdCdndHLEtBQUksU0FBU3p1QixHQUFHLE1BQU0sY0FBY0EsRUFBRSxPQUFNeEUsS0FBSyxLQUFLLE1BQTVOLENBQW1Pd0UsRUFBRW9sQyxHQUFHd1UsSUFBSTNmLEdBQUcyZixFQUFFLEtBQUssT0FBTzNmLEVBQUVBLEVBQUVqOUIsUUFBUSxLQUFLLElBQUksSUFBSWdELEVBQUVzNEksZUFBZXIrRyxFQUFFLE1BQU1BLEVBQUUsS0FBS2o2QixFQUFFaXlDLElBQUksS0FBS28zRyxHQUFHcnBKLEVBQUVzNEksY0FBYyxLQUFLdDRJLEVBQUVtb0osV0FBV2x1SCxFQUFFajZCLEVBQUVtb0osU0FBU2x1SCxJQUFJajZCLEVBQUVrb0osZ0JBQWdCanVILEVBQUVqNkIsRUFBRWtvSixjQUFjanVILElBQUlBLEVBQUUsU0FBU3V2SCxHQUFHeHBKLEdBQUcsT0FBTyxJQUFJQSxFQUFFL0YsT0FBTyxTQUFTK0YsRUFBRWl5QyxLQUFLanlDLEVBQUUwVSxTQUFTNmlFLEtBQUtpeUUsS0FBSyxTQUFTQyxHQUFHenBKLEVBQUVvbEMsR0FBRyxJQUFJbkwsRUFBRWo2QixFQUFFdzRJLFNBQVMsY0FBYyxHQUFHeDRJLEVBQUV5bUosS0FBS3ptSixFQUFFa3BKLGNBQWNqdkgsRUFBRSxPQUFPa3ZILEdBQUducEosRUFBRW9sQyxFQUFFcWtILEdBQUcsUUFBUSxHQUFHenBKLEVBQUUwOEgsTUFBTTE4SCxFQUFFZ3BKLGFBQWEsT0FBT0MsR0FBR2pwSixFQUFFb2xDLEVBQUVxa0gsSUFBSSxJQUFJbHZILEVBQUV2NkIsRUFBRW9sSixZQUFZSixHQUFHLEdBQUcxcEgsT0FBT3Q3QixFQUFFb2xKLFdBQVcza0osRUFBRSxZQUFZODVCLEVBQUUsYUFBYSxhQUFhdjZCLEVBQUVpeUMsSUFBSWp5QyxFQUFFeW1KLElBQUl4c0gsRUFBRSxJQUFJajZCLEVBQUV5bUosR0FBRyxNQUFNMkMsR0FBR3BwSixFQUFFb2xDLElBQUksYUFBYSxhQUFhZ2tILEdBQUdwcEosRUFBRW9sQyxJQUFJLFlBQVlzakgsR0FBRzFvSixFQUFFb2xDLElBQUksSUFBSXdVLEVBQUVyZixFQUFFLEdBQUcsY0FBYyxNQUFNLFNBQVN2NkIsRUFBRXFsSixZQUFZLGFBQWEsT0FBTzVrSixFQUFFbTVDLEVBQUUsSUFBSSxTQUFTd3ZHLEdBQUdwcEosRUFBRW9sQyxFQUFFbkwsRUFBRU0sRUFBRTk1QixHQUFHLElBQUltNUMsRUFBRTU1QyxFQUFFMFUsU0FBUyxHQUFHa2xDLEVBQUU3K0MsT0FBTyxDQUFDLElBQUlvL0IsRUFBRXlmLEVBQUUsR0FBRyxHQUFHLElBQUlBLEVBQUU3K0MsUUFBUW8vQixFQUFFdWlHLEtBQUssYUFBYXZpRyxFQUFFOFgsS0FBSyxTQUFTOVgsRUFBRThYLElBQUksQ0FBQyxJQUFJN1gsRUFBRUgsRUFBRW1MLEVBQUVtakgsZUFBZXB1SCxHQUFHLEtBQUssS0FBSyxHQUFHLE1BQU0sSUFBSUksR0FBR211SCxJQUFJdnVILEVBQUVpTCxHQUFHaEwsRUFBRSxJQUFJVSxFQUFFYixFQUFFLFNBQVNqNkIsRUFBRW9sQyxHQUFHLElBQUksSUFBSW5MLEVBQUUsRUFBRU0sRUFBRSxFQUFFQSxFQUFFdjZCLEVBQUVqRixPQUFPdy9CLElBQUksQ0FBQyxJQUFJOTVCLEVBQUVULEVBQUV1NkIsR0FBRyxHQUFHLElBQUk5NUIsRUFBRXhHLEtBQUssQ0FBQyxHQUFHeXZKLEdBQUdqcEosSUFBSUEsRUFBRXdsSixjQUFjeGxKLEVBQUV3bEosYUFBYTF1RSxNQUFLLFNBQVN2M0UsR0FBRyxPQUFPMHBKLEdBQUcxcEosRUFBRXUySCxVQUFTLENBQUN0OEYsRUFBRSxFQUFFLE9BQU9tTCxFQUFFM2tDLElBQUlBLEVBQUV3bEosY0FBY3hsSixFQUFFd2xKLGFBQWExdUUsTUFBSyxTQUFTdjNFLEdBQUcsT0FBT29sQyxFQUFFcGxDLEVBQUV1MkgsYUFBWXQ4RixFQUFFLElBQUksT0FBT0EsRUFBN1AsQ0FBZ1EyZixFQUFFeFUsRUFBRW1qSCxnQkFBZ0IsRUFBRW5tQixFQUFFM2hJLEdBQUdrcEosR0FBRyxNQUFNLElBQUkvdkcsRUFBRW5yQixLQUFJLFNBQVN6dUIsR0FBRyxPQUFPb2lJLEVBQUVwaUksRUFBRW9sQyxNQUFLNXBDLEtBQUssS0FBSyxLQUFLcy9CLEVBQUUsSUFBSUEsRUFBRSxLQUFLLFNBQVM0dUgsR0FBRzFwSixHQUFHLFlBQU8sSUFBU0EsRUFBRTA4SCxLQUFLLGFBQWExOEgsRUFBRWl5QyxLQUFLLFNBQVNqeUMsRUFBRWl5QyxJQUFJLFNBQVMwM0csR0FBRzNwSixFQUFFb2xDLEdBQUcsT0FBTyxJQUFJcGxDLEVBQUUvRixLQUFLeXVKLEdBQUcxb0osRUFBRW9sQyxHQUFHLElBQUlwbEMsRUFBRS9GLE1BQU0rRixFQUFFNGxJLFdBQVdyckcsRUFBRXY2QixFQUFFLE1BQU00WCxLQUFLeWlDLFVBQVU5ZixFQUFFNThCLE1BQU0sS0FBSyxPQUFPLEtBQUtzOEIsRUFBRWo2QixHQUFHL0YsS0FBS2dnQyxFQUFFK2lHLFdBQVc0c0IsR0FBR2h5SSxLQUFLeWlDLFVBQVVwZ0IsRUFBRXQ4QixRQUFRLElBQUksSUFBSXM4QixFQUFFTSxFQUFFLFNBQVM4dUgsR0FBR3JwSixHQUFHLElBQUksSUFBSW9sQyxFQUFFLEdBQUduTCxFQUFFLEdBQUdNLEVBQUUsRUFBRUEsRUFBRXY2QixFQUFFakYsT0FBT3cvQixJQUFJLENBQUMsSUFBSTk1QixFQUFFVCxFQUFFdTZCLEdBQUdxZixFQUFFZ3dHLEdBQUducEosRUFBRS9CLE9BQU8rQixFQUFFMDNJLFFBQVFsK0csR0FBR3g1QixFQUFFa0MsS0FBSyxJQUFJaTNDLEVBQUUsSUFBSXhVLEdBQUcsSUFBSTNrQyxFQUFFa0MsS0FBSyxLQUFLaTNDLEVBQUUsSUFBSSxPQUFPeFUsRUFBRSxJQUFJQSxFQUFFbmtDLE1BQU0sR0FBRyxHQUFHLElBQUlnNUIsRUFBRSxNQUFNbUwsRUFBRSxLQUFLbkwsRUFBRWg1QixNQUFNLEdBQUcsR0FBRyxLQUFLbWtDLEVBQUUsU0FBU3drSCxHQUFHNXBKLEdBQUcsT0FBT0EsRUFBRWhELFFBQVEsVUFBVSxXQUFXQSxRQUFRLFVBQVUsV0FBK1AsU0FBUzZzSixHQUFHN3BKLEVBQUVvbEMsR0FBRyxJQUFJLE9BQU8sSUFBSWtGLFNBQVN0cUMsR0FBRyxNQUFNaTZCLEdBQUcsT0FBT21MLEVBQUU5cEMsS0FBSyxDQUFDNjhCLElBQUk4QixFQUFFNnZILEtBQUs5cEosSUFBSStwQyxHQUFHLFNBQVNnZ0gsR0FBRy9wSixHQUFHLElBQUlvbEMsRUFBRS9sQyxPQUFPb29DLE9BQU8sTUFBTSxPQUFPLFNBQVN4TixFQUFFTSxFQUFFOTVCLElBQUk4NUIsRUFBRXVWLEVBQUUsR0FBR3ZWLElBQUkyaEIsWUFBWTNoQixFQUFFMmhCLEtBQUssSUFBSXRDLEVBQUVyZixFQUFFeXZILFdBQVcxdUgsT0FBT2YsRUFBRXl2SCxZQUFZL3ZILEVBQUVBLEVBQUUsR0FBR21MLEVBQUV3VSxHQUFHLE9BQU94VSxFQUFFd1UsR0FBRyxJQUFJemYsRUFBRW42QixFQUFFaTZCLEVBQUVNLEdBQUdILEVBQUUsR0FBR1UsRUFBRSxHQUFHLE9BQU9WLEVBQUVycUIsT0FBTzg1SSxHQUFHMXZILEVBQUVwcUIsT0FBTytxQixHQUFHVixFQUFFNGtHLGdCQUFnQjdrRyxFQUFFNmtHLGdCQUFnQnZ3RyxLQUFJLFNBQVN6dUIsR0FBRyxPQUFPNnBKLEdBQUc3cEosRUFBRTg2QixNQUFLc0ssRUFBRXdVLEdBQUd4ZixHQUF6bUIsSUFBSXZuQixPQUFPLE1BQU0saU1BQWlNck0sTUFBTSxLQUFLaEwsS0FBSyxXQUFXLE9BQStYLElBQUl5dUosR0FBR0MsR0FBRy9rQixJQUFJOGtCLEdBQUcsU0FBU2pxSixFQUFFb2xDLEdBQUcsSUFBSW5MLEVBQS9zcEIsU0FBWWo2QixFQUFFb2xDLEdBQUd1K0csR0FBR3YrRyxFQUFFOFcsTUFBTTY3RixHQUFHaU0sR0FBRzUrRyxFQUFFMGhILFVBQVVyK0csRUFBRXc3RyxHQUFHNytHLEVBQUVtK0YsYUFBYTk2RixFQUFFeTdHLEdBQUc5K0csRUFBRWkrRixpQkFBaUI1NkYsRUFBRXJELEVBQUU4OUYsY0FBYzJnQixHQUFHN0wsR0FBRzV5RyxFQUFFamUsUUFBUSxpQkFBaUIyOEgsR0FBRzlMLEdBQUc1eUcsRUFBRWplLFFBQVEsb0JBQW9CNDhILEdBQUcvTCxHQUFHNXlHLEVBQUVqZSxRQUFRLHFCQUFxQnk4SCxHQUFHeCtHLEVBQUU0a0gsV0FBVyxJQUFJL3ZILEVBQUVNLEVBQUU5NUIsRUFBRSxHQUFHbTVDLEdBQUUsSUFBS3hVLEVBQUUra0gsbUJBQW1CaHdILEVBQUVpTCxFQUFFbGlDLFdBQVdrM0IsR0FBRSxFQUFHVSxHQUFFLEVBQUcsU0FBU3NuRyxFQUFFcGlJLEdBQUcsR0FBR2k3QixFQUFFajdCLEdBQUdvNkIsR0FBR3A2QixFQUFFd21KLFlBQVl4bUosRUFBRW1sSixHQUFHbmxKLEVBQUVvbEMsSUFBSTNrQyxFQUFFMUYsUUFBUWlGLElBQUlpNkIsR0FBR0EsRUFBRXdzSCxLQUFLem1KLEVBQUUybUosUUFBUTNtSixFQUFFMG1KLE9BQU9WLEdBQUcvckgsRUFBRSxDQUFDZ04sSUFBSWpuQyxFQUFFMm1KLE9BQU9wd0IsTUFBTXYySCxJQUFJdTZCLElBQUl2NkIsRUFBRW9xSixVQUFVLEdBQUdwcUosRUFBRTJtSixRQUFRM21KLEVBQUUwbUosS0FBS3ZzSCxFQUFFbjZCLEdBQUdvaUksRUFBRSxTQUFTcGlJLEdBQWtCLElBQWYsSUFBSW9sQyxFQUFFcGxDLEVBQUVqRixPQUFZcXFDLEtBQUssQ0FBQyxHQUFHLElBQUlwbEMsRUFBRW9sQyxHQUFHbnJDLEtBQUssT0FBTytGLEVBQUVvbEMsR0FBR3BsQyxFQUFFaS9CLE9BQXJFLENBQTZFMUUsRUFBRTdsQixZQUFZMHRILEVBQUVxa0IsSUFBSVQsR0FBRzVqQixFQUFFLENBQUNuN0YsSUFBSTlNLEVBQUV3c0gsT0FBT3B3QixNQUFNcDhGLFFBQVEsQ0FBQyxHQUFHbjZCLEVBQUVvbEosVUFBVSxDQUFDLElBQUl4ckcsRUFBRTU1QyxFQUFFcWxKLFlBQVksYUFBYTlxSCxFQUFFNnpGLGNBQWM3ekYsRUFBRTZ6RixZQUFZLEtBQUt4MEUsR0FBRzU1QyxFQUFFdTZCLEVBQUU3bEIsU0FBU3BaLEtBQUswRSxHQUFHQSxFQUFFd3VDLE9BQU9qVSxFQUFFLElBQUlKLEVBQUVpb0csRUFBRXBpSSxFQUFFMFUsU0FBUzFVLEVBQUUwVSxTQUFTK2hCLFFBQU8sU0FBU3oyQixHQUFHLE9BQU9BLEVBQUVvbEosYUFBWW5xSCxFQUFFajdCLEdBQUdBLEVBQUVpdkksTUFBTTcwRyxHQUFFLEdBQUk0cEgsR0FBR2hrSixFQUFFaXlDLE9BQU9uWCxHQUFFLEdBQUksSUFBSSxJQUFJb08sRUFBRSxFQUFFQSxFQUFFNjZHLEdBQUdocEosT0FBT211QyxJQUFJNjZHLEdBQUc3NkcsR0FBR2xwQyxFQUFFb2xDLEdBQUcsU0FBU25LLEVBQUVqN0IsR0FBRyxJQUFJODZCLEVBQUUsSUFBSSxJQUFJc0ssR0FBR0EsRUFBRXBsQyxFQUFFMFUsU0FBUzFVLEVBQUUwVSxTQUFTM1osT0FBTyxLQUFLLElBQUlxcUMsRUFBRW5yQyxNQUFNLE1BQU1tckMsRUFBRXpuQyxNQUFNcUMsRUFBRTBVLFNBQVN1cUIsTUFBTSxPQUFPLFNBQVNqL0IsRUFBRW9sQyxHQUFHLElBQUksSUFBSW5MLEVBQUVNLEVBQUU5NUIsRUFBRSxHQUFHbTVDLEVBQUV4VSxFQUFFeWhILFdBQVcxc0gsRUFBRWlMLEVBQUUyaEgsWUFBWXQrRyxFQUFFck8sRUFBRWdMLEVBQUU0aEgsa0JBQWtCditHLEVBQUUzTixFQUFFLEVBQUU5NkIsR0FBRyxDQUFDLEdBQUdpNkIsRUFBRWo2QixFQUFFdTZCLEdBQUc0b0gsR0FBRzVvSCxHQUFHLENBQUMsSUFBSTZuRyxFQUFFLEVBQUVubkcsRUFBRVYsRUFBRS9GLGNBQWMwVSxFQUFFazZHLEdBQUdub0gsS0FBS21vSCxHQUFHbm9ILEdBQUcsSUFBSXBvQixPQUFPLGtCQUFrQm9vQixFQUFFLFVBQVUsTUFBTWlGLEVBQUVsZ0MsRUFBRWhELFFBQVFrc0MsR0FBRSxTQUFTbHBDLEVBQUVpNkIsRUFBRU0sR0FBRyxPQUFPNm5HLEVBQUU3bkcsRUFBRXgvQixPQUFPb29KLEdBQUdsb0gsSUFBSSxhQUFhQSxJQUFJaEIsRUFBRUEsRUFBRWo5QixRQUFRLHNCQUFzQixNQUFNQSxRQUFRLDRCQUE0QixPQUFPeW1KLEdBQUd4b0gsRUFBRWhCLEtBQUtBLEVBQUVBLEVBQUVoNUIsTUFBTSxJQUFJbWtDLEVBQUU2L0IsT0FBTzcvQixFQUFFNi9CLE1BQU1ockMsR0FBRyxNQUFLYSxHQUFHOTZCLEVBQUVqRixPQUFPbWxDLEVBQUVubEMsT0FBT2lGLEVBQUVrZ0MsRUFBRTRQLEVBQUU3VSxFQUFFSCxFQUFFc25HLEVBQUV0bkcsT0FBTyxDQUFDLElBQUlxRSxFQUFFbi9CLEVBQUVtM0IsUUFBUSxLQUFLLEdBQUcsSUFBSWdJLEVBQUUsQ0FBQyxHQUFHOGpILEdBQUc1a0gsS0FBS3IrQixHQUFHLENBQUMsSUFBSWcrQixFQUFFaCtCLEVBQUVtM0IsUUFBUSxVQUFVLEdBQUc2RyxHQUFHLEVBQUUsQ0FBQ29ILEVBQUVpbEgsbUJBQW1CamxILEVBQUVrbEgsUUFBUXRxSixFQUFFdStCLFVBQVUsRUFBRVAsR0FBR2xELEVBQUVBLEVBQUVrRCxFQUFFLEdBQUdxTSxFQUFFck0sRUFBRSxHQUFHLFVBQVUsR0FBR2tsSCxHQUFHN2tILEtBQUtyK0IsR0FBRyxDQUFDLElBQUltL0MsRUFBRW4vQyxFQUFFbTNCLFFBQVEsTUFBTSxHQUFHZ29CLEdBQUcsRUFBRSxDQUFDOVUsRUFBRThVLEVBQUUsR0FBRyxVQUFVLElBQUlwZ0IsRUFBRS8rQixFQUFFdVgsTUFBTXlySSxJQUFJLEdBQUdqa0gsRUFBRSxDQUFDc0wsRUFBRXRMLEVBQUUsR0FBR2hrQyxRQUFRLFNBQVMsSUFBSTQvQixFQUFFMzZCLEVBQUV1WCxNQUFNd3JJLElBQUksR0FBR3BvSCxFQUFFLENBQUMsSUFBSXVrQixFQUFFcGtCLEVBQUV1UCxFQUFFMVAsRUFBRSxHQUFHNS9CLFFBQVErMEMsRUFBRW5WLEVBQUUsR0FBR3VrQixFQUFFcGtCLEdBQUcsU0FBUyxJQUFJLzVCLEVBQUUyNUIsSUFBSSxHQUFHMzVCLEVBQUUsQ0FBQ2k2QixFQUFFajZCLEdBQUcwaUosR0FBRzFpSixFQUFFNmhGLFFBQVE1aUYsSUFBSXFxQyxFQUFFLEdBQUcsVUFBVSxJQUFJelAsT0FBRSxFQUFPcmdDLE9BQUUsRUFBT3doRCxPQUFFLEVBQU8sR0FBRzVjLEdBQUcsRUFBRSxDQUFDLElBQUk1a0MsRUFBRXlGLEVBQUVpQixNQUFNaytCLEtBQUs0akgsR0FBRzFrSCxLQUFLOWpDLElBQUlzb0osR0FBR3hrSCxLQUFLOWpDLElBQUkwb0osR0FBRzVrSCxLQUFLOWpDLElBQUkyb0osR0FBRzdrSCxLQUFLOWpDLEtBQUt3aEQsRUFBRXhoRCxFQUFFNDhCLFFBQVEsSUFBSSxJQUFJLElBQUlnSSxHQUFHNGMsRUFBRXhoRCxFQUFFeUYsRUFBRWlCLE1BQU1rK0IsR0FBR3ZFLEVBQUU1NkIsRUFBRXUrQixVQUFVLEVBQUVZLEdBQUdBLEVBQUUsSUFBSXZFLEVBQUU1NkIsR0FBRzQ2QixHQUFHeVAsRUFBRXpQLEVBQUU3L0IsUUFBUXFxQyxFQUFFNi9CLE9BQU9ycUMsR0FBR3dLLEVBQUU2L0IsTUFBTXJxQyxFQUFFRSxFQUFFRixFQUFFNy9CLE9BQU8rL0IsR0FBRyxHQUFHOTZCLElBQUlpNkIsRUFBRSxDQUFDbUwsRUFBRTYvQixPQUFPNy9CLEVBQUU2L0IsTUFBTWpsRSxHQUFHLE9BQU8sU0FBU3FxQyxFQUFFakYsR0FBR3RLLEdBQUdzSyxFQUFFcGxDLEVBQUVBLEVBQUV1K0IsVUFBVTZHLEdBQUcsU0FBUzFLLElBQUksSUFBSTBLLEVBQUVwbEMsRUFBRXVYLE1BQU1zckksSUFBSSxHQUFHejlHLEVBQUUsQ0FBQyxJQUFJbkwsRUFBRU0sRUFBRTk1QixFQUFFLENBQUNtaUYsUUFBUXg5QyxFQUFFLEdBQUd3a0YsTUFBTSxHQUFHbnNELE1BQU0zaUMsR0FBRyxJQUFJdVAsRUFBRWpGLEVBQUUsR0FBR3JxQyxVQUFVay9CLEVBQUVqNkIsRUFBRXVYLE1BQU11ckksT0FBT3ZvSCxFQUFFdjZCLEVBQUV1WCxNQUFNbXJJLEtBQUsxaUosRUFBRXVYLE1BQU1rckksTUFBTWxvSCxFQUFFa2pDLE1BQU0zaUMsRUFBRXVQLEVBQUU5UCxFQUFFLEdBQUd4L0IsUUFBUXcvQixFQUFFNmpDLElBQUl0akMsRUFBRXI2QixFQUFFbXBILE1BQU10dUgsS0FBS2kvQixHQUFHLEdBQUdOLEVBQUUsT0FBT3g1QixFQUFFOHBKLFdBQVd0d0gsRUFBRSxHQUFHb1EsRUFBRXBRLEVBQUUsR0FBR2wvQixRQUFRMEYsRUFBRTI5RCxJQUFJdGpDLEVBQUVyNkIsR0FBRyxTQUFTdTZCLEVBQUVoN0IsR0FBRyxJQUFJaTZCLEVBQUVqNkIsRUFBRTRpRixRQUFROW5ELEVBQUU5NkIsRUFBRXVxSixXQUFXM3dHLElBQUksTUFBTXJmLEdBQUdpb0gsR0FBR3ZvSCxJQUFJNlYsRUFBRXZWLEdBQUdILEVBQUVILElBQUlNLElBQUlOLEdBQUc2VixFQUFFN1YsSUFBSSxJQUFJLElBQUltb0csRUFBRWpvRyxFQUFFRixNQUFNYSxFQUFFRyxFQUFFajdCLEVBQUU0cEgsTUFBTTd1SCxPQUFPbXVDLEVBQUUsSUFBSTloQyxNQUFNNnpCLEdBQUdpRixFQUFFLEVBQUVBLEVBQUVqRixFQUFFaUYsSUFBSSxDQUFDLElBQUlmLEVBQUVuL0IsRUFBRTRwSCxNQUFNMXBGLEdBQUdsQyxFQUFFbUIsRUFBRSxJQUFJQSxFQUFFLElBQUlBLEVBQUUsSUFBSSxHQUFHZ2dCLEVBQUUsTUFBTWxsQixHQUFHLFNBQVNrRixFQUFFLEdBQUdpRyxFQUFFb2xILDRCQUE0QnBsSCxFQUFFcWxILHFCQUFxQnZoSCxFQUFFaEosR0FBRyxDQUFDdjlCLEtBQUt3OEIsRUFBRSxHQUFHemdDLE1BQU1nbEosR0FBRzFsSCxFQUFFbWhCLElBQUlpakYsSUFBSTNoSSxFQUFFbkYsS0FBSyxDQUFDMjJDLElBQUloWSxFQUFFeXdILGNBQWN6d0gsRUFBRXpGLGNBQWNvMUYsTUFBTTFnRixFQUFFdTBCLE1BQU16OUQsRUFBRXk5RCxNQUFNVyxJQUFJcCtELEVBQUVvK0QsTUFBTTdqQyxFQUFFTixHQUFHbUwsRUFBRXE0QixPQUFPcjRCLEVBQUVxNEIsTUFBTXhqQyxFQUFFaVAsRUFBRWs1RixFQUFFcGlJLEVBQUV5OUQsTUFBTXo5RCxFQUFFbytELEtBQUssU0FBU3R1QixFQUFFOXZDLEVBQUVpNkIsRUFBRTJmLEdBQUcsSUFBSXpmLEVBQUVDLEVBQUUsR0FBRyxNQUFNSCxJQUFJQSxFQUFFYSxHQUFHLE1BQU04ZSxJQUFJQSxFQUFFOWUsR0FBRzk2QixFQUFFLElBQUlvNkIsRUFBRXA2QixFQUFFdzBCLGNBQWMyRixFQUFFMTVCLEVBQUUxRixPQUFPLEVBQUVvL0IsR0FBRyxHQUFHMTVCLEVBQUUwNUIsR0FBR3V3SCxnQkFBZ0J0d0gsRUFBRUQsVUFBVUEsRUFBRSxFQUFFLEdBQUdBLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSWlvRyxFQUFFM2hJLEVBQUUxRixPQUFPLEVBQUVxbkksR0FBR2pvRyxFQUFFaW9HLElBQUloOUYsRUFBRWc1QixLQUFLaDVCLEVBQUVnNUIsSUFBSTM5RCxFQUFFMmhJLEdBQUdud0YsSUFBSWhZLEVBQUUyZixHQUFHbjVDLEVBQUUxRixPQUFPby9CLEVBQUVJLEVBQUVKLEdBQUcxNUIsRUFBRTA1QixFQUFFLEdBQUc4WCxRQUFRLE9BQU83WCxFQUFFZ0wsRUFBRXE0QixPQUFPcjRCLEVBQUVxNEIsTUFBTXo5RCxFQUFFLElBQUcsRUFBR2k2QixFQUFFMmYsR0FBRyxNQUFNeGYsSUFBSWdMLEVBQUVxNEIsT0FBT3I0QixFQUFFcTRCLE1BQU16OUQsRUFBRSxJQUFHLEVBQUdpNkIsRUFBRTJmLEdBQUd4VSxFQUFFZzVCLEtBQUtoNUIsRUFBRWc1QixJQUFJcCtELEVBQUVpNkIsRUFBRTJmLElBQUk5SixJQUF6bUUsQ0FBOG1FOXZDLEVBQUUsQ0FBQ2s4QyxLQUFLeW5HLEdBQUdrRCxXQUFXemhILEVBQUV5aEgsV0FBV0UsV0FBVzNoSCxFQUFFMmhILFdBQVdDLGlCQUFpQjVoSCxFQUFFNGhILGlCQUFpQnlELHFCQUFxQnJsSCxFQUFFcWxILHFCQUFxQkQsNEJBQTRCcGxILEVBQUVvbEgsNEJBQTRCSCxrQkFBa0JqbEgsRUFBRXVsSCxTQUFTQyxrQkFBa0J4bEgsRUFBRXdsSCxrQkFBa0JudEYsTUFBTSxTQUFTejlELEVBQUU0NUMsRUFBRXpmLEVBQUVjLEVBQUVpTyxHQUFHLElBQUloSixFQUFFM0YsR0FBR0EsRUFBRTRxRyxJQUFJK2UsR0FBR2xrSixHQUFHNGlDLEdBQUcsUUFBUTFDLElBQUkwWixFQUFFLFNBQVM1NUMsR0FBRyxJQUFJLElBQUlvbEMsRUFBRSxHQUFHbkwsRUFBRSxFQUFFQSxFQUFFajZCLEVBQUVqRixPQUFPay9CLElBQUksQ0FBQyxJQUFJTSxFQUFFdjZCLEVBQUVpNkIsR0FBR2lzSCxHQUFHN25ILEtBQUs5RCxFQUFFNTNCLFFBQVE0M0IsRUFBRTUzQixLQUFLNDNCLEVBQUU1M0IsS0FBSzNGLFFBQVFtcEosR0FBRyxJQUFJL2dILEVBQUU5cEMsS0FBS2kvQixJQUFJLE9BQU82SyxFQUF6SCxDQUE0SHdVLElBQUksSUFBSXphLEVBQUVuQixFQUFFZzJELEdBQUdoMEYsRUFBRTQ1QyxFQUFFcmYsR0FBRzJGLElBQUlsQyxFQUFFbW5HLEdBQUdqbEcsR0FBRyxXQUFXZixFQUFFbkIsR0FBR2lVLE1BQU0sV0FBVzlTLEVBQUU4UyxLQUFLOVMsRUFBRXE1RyxTQUFTditJLE1BQU0sb0JBQW9Ca2xDLEVBQUVxNUcsU0FBU3YrSSxPQUFPZzlILE9BQU9qNUYsRUFBRW9zSCxXQUFVLEdBQUksSUFBSSxJQUFJanJHLEVBQUUsRUFBRUEsRUFBRTJrRyxHQUFHL29KLE9BQU9va0QsSUFBSW5oQixFQUFFOGxILEdBQUcza0csR0FBR25oQixFQUFFb0gsSUFBSXBILEVBQUU1RCxJQUFLLFNBQVNwNkIsR0FBRyxNQUFNazVJLEdBQUdsNUksRUFBRSxXQUFXQSxFQUFFaXZJLEtBQUksR0FBeEMsQ0FBNkNqeEcsR0FBR0EsRUFBRWl4RyxNQUFNNzBHLEdBQUUsSUFBSzRwSCxHQUFHaG1ILEVBQUVpVSxPQUFPblgsR0FBRSxHQUFJVixFQUFFLFNBQVNwNkIsR0FBRyxJQUFJb2xDLEVBQUVwbEMsRUFBRXk0SSxVQUFVeCtHLEVBQUVtTCxFQUFFcnFDLE9BQU8sR0FBR2svQixFQUFFLElBQUksSUFBSU0sRUFBRXY2QixFQUFFNHBILE1BQU0sSUFBSXhpSCxNQUFNNnlCLEdBQUd4NUIsRUFBRSxFQUFFQSxFQUFFdzVCLEVBQUV4NUIsSUFBSTg1QixFQUFFOTVCLEdBQUcsQ0FBQ2tDLEtBQUt5aUMsRUFBRTNrQyxHQUFHa0MsS0FBS2pFLE1BQU1rWixLQUFLeWlDLFVBQVVqVixFQUFFM2tDLEdBQUcvQixRQUFRLE1BQU0wbUMsRUFBRTNrQyxHQUFHZzlELFFBQVFsakMsRUFBRTk1QixHQUFHZzlELE1BQU1yNEIsRUFBRTNrQyxHQUFHZzlELE1BQU1sakMsRUFBRTk1QixHQUFHMjlELElBQUloNUIsRUFBRTNrQyxHQUFHMjlELFVBQVVwK0QsRUFBRWl2SSxNQUFNanZJLEVBQUVvNEksT0FBTSxHQUFqTyxDQUFzT3A2RyxHQUFHQSxFQUFFd29ILFlBQVlaLEdBQUc1bkgsR0FBRyxTQUFTaCtCLEdBQUcsSUFBSW9sQyxFQUFFOHpHLEdBQUdsNUksRUFBRSxRQUFRLEdBQUdvbEMsRUFBRXBsQyxFQUFFeW1KLEdBQUdyaEgsRUFBRTRnSCxHQUFHaG1KLEVBQUUsQ0FBQ2luQyxJQUFJN0IsRUFBRW14RixNQUFNdjJILFFBQVEsQ0FBQyxNQUFNazVJLEdBQUdsNUksRUFBRSxZQUFZQSxFQUFFMG1KLE1BQUssR0FBSSxJQUFJenNILEVBQUVpL0csR0FBR2w1SSxFQUFFLGFBQWFpNkIsSUFBSWo2QixFQUFFMm1KLE9BQU8xc0gsSUFBN0ksQ0FBa0orRCxHQUFHLFNBQVNoK0IsR0FBRyxNQUFNazVJLEdBQUdsNUksRUFBRSxZQUFZQSxFQUFFdTlDLE1BQUssR0FBMUMsQ0FBK0N2ZixJQUFJL0QsSUFBSUEsRUFBRStELEdBQUc3RCxFQUFFaW9HLEVBQUVwa0csSUFBSXpELEVBQUV5RCxFQUFFdjlCLEVBQUVuRixLQUFLMGlDLEtBQUtvZ0MsSUFBSSxTQUFTcCtELEVBQUVvbEMsRUFBRW5MLEdBQUcsSUFBSTJmLEVBQUVuNUMsRUFBRUEsRUFBRTFGLE9BQU8sR0FBRzBGLEVBQUUxRixRQUFRLEVBQUV3L0IsRUFBRTk1QixFQUFFQSxFQUFFMUYsT0FBTyxHQUFHcW5JLEVBQUV4b0YsSUFBSXFyQixNQUFNLFNBQVNqbEUsRUFBRW9sQyxFQUFFbkwsR0FBRyxHQUFHTSxLQUFLcUksR0FBRyxhQUFhckksRUFBRTBYLEtBQUsxWCxFQUFFaStHLFNBQVN0aEgsY0FBY2wzQixHQUFHLENBQUMsSUFBSVMsRUFBRTJoSSxFQUFFbm5HLEVBQUVpTyxFQUFFM08sRUFBRTdsQixVQUFZMVUsRUFBRTg2QixHQUFHOTZCLEVBQUVtVixPQUFPLFlBQVkxVSxFQUFFODVCLEdBQUcwWCxLQUFLLFVBQVV4eEMsRUFBRXd4QyxJQUFJanlDLEVBQUUra0osR0FBRy9rSixHQUFHa3BDLEVBQUVudUMsT0FBT28vQixFQUFFLGFBQWFBLEdBQUcwcUgsR0FBR3htSCxLQUFLcitCLEdBQUcsR0FBRyxJQUFJNDVDLEVBQUUsSUFBSSxHQUFHLE1BQUc5ZSxHQUFHLGFBQWFYLElBQUluNkIsRUFBRUEsRUFBRWhELFFBQVE4bkosR0FBRyxPQUFPMXFILEdBQUcsTUFBTXA2QixJQUFJb2lJLEVBQUUsU0FBU3BpSSxFQUFFb2xDLEdBQUcsSUFBSW5MLEVBQUVtTCxFQUFFMDhHLEdBQUcxOEcsR0FBR3c4RyxHQUFHLEdBQUczbkgsRUFBRW9FLEtBQUtyK0IsR0FBRyxDQUFDLElBQUksSUFBSXU2QixFQUFFOTVCLEVBQUVtNUMsRUFBRXpmLEVBQUUsR0FBR0MsRUFBRSxHQUFHVSxFQUFFYixFQUFFdXhCLFVBQVUsRUFBRWp4QixFQUFFTixFQUFFeVEsS0FBSzFxQyxJQUFJLEVBQUVTLEVBQUU4NUIsRUFBRTlnQixPQUFPcWhCLElBQUlWLEVBQUU5K0IsS0FBS3MrQyxFQUFFNTVDLEVBQUVpQixNQUFNNjVCLEVBQUVyNkIsSUFBSTA1QixFQUFFNytCLEtBQUtzYyxLQUFLeWlDLFVBQVVULEtBQUssSUFBSXdvRixFQUFFeVYsR0FBR3Q5RyxFQUFFLEdBQUdwbEIsUUFBUWdsQixFQUFFNytCLEtBQUssTUFBTThtSSxFQUFFLEtBQUtob0csRUFBRTkrQixLQUFLLENBQUMsV0FBVzhtSSxJQUFJdG5HLEVBQUVyNkIsRUFBRTg1QixFQUFFLEdBQUd4L0IsT0FBTyxPQUFPKy9CLEVBQUU5NkIsRUFBRWpGLFNBQVNxL0IsRUFBRTkrQixLQUFLcytDLEVBQUU1NUMsRUFBRWlCLE1BQU02NUIsSUFBSVgsRUFBRTcrQixLQUFLc2MsS0FBS3lpQyxVQUFVVCxLQUFLLENBQUNvakYsV0FBVzdpRyxFQUFFMytCLEtBQUssS0FBSzJFLE9BQU9pNkIsSUFBelYsQ0FBOFZwNkIsRUFBRTRqSixLQUFLM29ILEVBQUUsQ0FBQ2hoQyxLQUFLLEVBQUUraUksV0FBV29GLEVBQUVwRixXQUFXNzhILE9BQU9paUksRUFBRWppSSxPQUFPeEMsS0FBS3FDLEdBQUcsTUFBTUEsR0FBR2twQyxFQUFFbnVDLFFBQVEsTUFBTW11QyxFQUFFQSxFQUFFbnVDLE9BQU8sR0FBRzRDLE9BQU9zOUIsRUFBRSxDQUFDaGhDLEtBQUssRUFBRTBELEtBQUtxQyxJQUFJaTdCLEdBQUdpTyxFQUFFNXRDLEtBQUsyL0IsTUFBS3F2SCxRQUFRLFNBQVN0cUosRUFBRW9sQyxFQUFFbkwsR0FBRyxHQUFHTSxFQUFFLENBQUMsSUFBSTk1QixFQUFFLENBQUN4RyxLQUFLLEVBQUUwRCxLQUFLcUMsRUFBRTRsSSxXQUFVLEdBQUlyckcsRUFBRTdsQixTQUFTcFosS0FBS21GLE9BQU93NUIsRUFBb2lmNHdILENBQUc3cUosRUFBRW1WLE9BQU9pd0IsSUFBRyxJQUFLQSxFQUFFMGxILFVBQTN5VCxTQUFZOXFKLEVBQUVvbEMsR0FBR3BsQyxJQUFJb21KLEdBQUdhLEdBQUc3aEgsRUFBRTQ4RyxZQUFZLElBQUlxRSxHQUFHamhILEVBQUU4OUYsZUFBZXo2RixFQUFFLFNBQVN6b0MsRUFBRW9sQyxHQUErUSxHQUE1UUEsRUFBRTJsSCxPQUFPLFNBQVMvcUosR0FBRyxPQUFHLElBQUlBLEVBQUUvRixPQUFpQixJQUFJK0YsRUFBRS9GLFNBQXVCK0YsRUFBRWl2SSxNQUFNanZJLEVBQUV5bEosYUFBYXpsSixFQUFFeW1KLElBQUl6bUosRUFBRTA4SCxLQUFLdjlGLEVBQUVuL0IsRUFBRWl5QyxPQUFPbzBHLEdBQUdybUosRUFBRWl5QyxNQUFNLFNBQVNqeUMsR0FBRyxLQUFLQSxFQUFFd3VDLFFBQVEsQ0FBQyxHQUFHLGNBQWN4dUMsRUFBRUEsRUFBRXd1QyxRQUFReUQsSUFBSSxPQUFNLEVBQUcsR0FBR2p5QyxFQUFFMDhILElBQUksT0FBTSxFQUFHLE9BQU0sRUFBOUYsQ0FBa0cxOEgsS0FBS1gsT0FBT3VCLEtBQUtaLEdBQUc0MEUsTUFBTXd4RSxPQUF6UCxDQUFnUWhoSCxHQUFNLElBQUlBLEVBQUVuckMsS0FBSyxDQUFDLElBQUlvc0osR0FBR2poSCxFQUFFNk0sTUFBTSxTQUFTN00sRUFBRTZNLEtBQUssTUFBTTdNLEVBQUVvekcsU0FBUyxtQkFBbUIsT0FBTyxJQUFJLElBQUl2K0csRUFBRSxFQUFFTSxFQUFFNkssRUFBRTF3QixTQUFTM1osT0FBT2svQixFQUFFTSxFQUFFTixJQUFJLENBQUMsSUFBSXg1QixFQUFFMmtDLEVBQUUxd0IsU0FBU3VsQixHQUFHajZCLEVBQUVTLEdBQUdBLEVBQUVzcUosU0FBUzNsSCxFQUFFMmxILFFBQU8sR0FBSSxHQUFHM2xILEVBQUU2Z0gsYUFBYSxJQUFJLElBQUlyc0csRUFBRSxFQUFFemYsRUFBRWlMLEVBQUU2Z0gsYUFBYWxySixPQUFPNitDLEVBQUV6ZixFQUFFeWYsSUFBSSxDQUFDLElBQUl4ZixFQUFFZ0wsRUFBRTZnSCxhQUFhcnNHLEdBQUcyOEUsTUFBTXYySCxFQUFFbzZCLEdBQUdBLEVBQUUyd0gsU0FBUzNsSCxFQUFFMmxILFFBQU8sS0FBbmtCLENBQTBrQi9xSixHQUFHLFNBQVNBLEVBQUVvbEMsRUFBRW5MLEdBQUcsR0FBRyxJQUFJbUwsRUFBRW5yQyxLQUFLLENBQUMsSUFBSW1yQyxFQUFFMmxILFFBQVEzbEgsRUFBRW1ZLFFBQVFuWSxFQUFFbWtILFlBQVl0dkgsR0FBR21MLEVBQUUybEgsUUFBUTNsSCxFQUFFMXdCLFNBQVMzWixTQUFTLElBQUlxcUMsRUFBRTF3QixTQUFTM1osUUFBUSxJQUFJcXFDLEVBQUUxd0IsU0FBUyxHQUFHemEsTUFBTSxZQUFZbXJDLEVBQUV1akgsWUFBVyxHQUFJLEdBQUd2akgsRUFBRXVqSCxZQUFXLEVBQUd2akgsRUFBRTF3QixTQUFTLElBQUksSUFBSTZsQixFQUFFLEVBQUU5NUIsRUFBRTJrQyxFQUFFMXdCLFNBQVMzWixPQUFPdy9CLEVBQUU5NUIsRUFBRTg1QixJQUFJdjZCLEVBQUVvbEMsRUFBRTF3QixTQUFTNmxCLEdBQUdOLEtBQUttTCxFQUFFczNGLEtBQUssR0FBR3QzRixFQUFFNmdILGFBQWEsSUFBSSxJQUFJcnNHLEVBQUUsRUFBRXpmLEVBQUVpTCxFQUFFNmdILGFBQWFsckosT0FBTzYrQyxFQUFFemYsRUFBRXlmLElBQUk1NUMsRUFBRW9sQyxFQUFFNmdILGFBQWFyc0csR0FBRzI4RSxNQUFNdDhGLElBQTVXLENBQWlYajZCLEdBQUUsSUFBa3pSZ3JKLENBQUcvd0gsRUFBRW1MLEdBQUcsSUFBSTdLLEVBQUVrdUgsR0FBR3h1SCxFQUFFbUwsR0FBRyxNQUFNLENBQUM2bEgsSUFBSWh4SCxFQUFFbHFCLE9BQU93cUIsRUFBRXhxQixPQUFPaXZILGdCQUFnQnprRyxFQUFFeWtHLGtCQUFrQixTQUFTaC9ILEdBQUcsU0FBU29sQyxFQUFFQSxFQUFFbkwsR0FBRyxJQUFJTSxFQUFFbDdCLE9BQU9vb0MsT0FBT3puQyxHQUFHUyxFQUFFLEdBQUdtNUMsRUFBRSxHQUFHLEdBQUczZixFQUFFLElBQUksSUFBSUUsS0FBS0YsRUFBRTlTLFVBQVVvVCxFQUFFcFQsU0FBU25uQixFQUFFbW5CLFNBQVMsSUFBSWhtQixPQUFPODRCLEVBQUU5UyxVQUFVOFMsRUFBRTJpRyxhQUFhcmlHLEVBQUVxaUcsV0FBVzlzRixFQUFFendDLE9BQU9vb0MsT0FBT3puQyxFQUFFNDhILFlBQVksTUFBTTNpRyxFQUFFMmlHLGFBQWEzaUcsRUFBRSxZQUFZRSxHQUFHLGVBQWVBLElBQUlJLEVBQUVKLEdBQUdGLEVBQUVFLElBQUlJLEVBQUUyaEIsS0FBSyxTQUFTbDhDLEVBQUVvbEMsRUFBRW5MLElBQUlBLEVBQUUyZixFQUFFbjVDLEdBQUduRixLQUFLMEUsSUFBSSxJQUFJbzZCLEVBQUU2dkgsR0FBRzdrSCxFQUFFandCLE9BQU9vbEIsR0FBRyxPQUFPSCxFQUFFNXdCLE9BQU8vSSxFQUFFMjVCLEVBQUU4d0gsS0FBS3R4RyxFQUFFeGYsRUFBRSxNQUFNLENBQUN5MkYsUUFBUXpyRixFQUFFK2xILG1CQUFtQnBCLEdBQUcza0gsTUFBTXdoSCxJQUFJd0UsSUFBSWptQixHQUFHdFUsUUFBUXNVLEdBQUdnbUIsb0JBQW9CLFNBQVM1dEosR0FBR3lDLEdBQUcsT0FBT2txSixHQUFHQSxJQUFJeGhKLFNBQVN5QyxjQUFjLFFBQVFNLFVBQVV6TCxFQUFFLGlCQUFpQixnQkFBZ0JrcUosR0FBR3orSSxVQUFVMHJCLFFBQVEsU0FBUyxFQUFFLElBQUlrMEgsS0FBS2h4SCxHQUFHOThCLElBQUcsR0FBSSt0SixLQUFLanhILEdBQUc5OEIsSUFBRyxHQUFJZ3VKLEdBQUdyc0csR0FBRSxTQUFTbC9DLEdBQUcsSUFBSW9sQyxFQUFFOHZHLEdBQUdsMUksR0FBRyxPQUFPb2xDLEdBQUdBLEVBQUUzNUIsYUFBWSsvSSxHQUFHM1osR0FBR3Z5SSxVQUFVNnRJLE9BQU8wRSxHQUFHdnlJLFVBQVU2dEksT0FBTyxTQUFTbnRJLEVBQUVvbEMsR0FBRyxJQUFJcGxDLEVBQUVBLEdBQUdrMUksR0FBR2wxSSxNQUFNMEksU0FBU29ELE1BQU05TCxJQUFJMEksU0FBU2dqQyxnQkFBZ0IsT0FBTzF3QyxLQUFLLElBQUlpL0IsRUFBRWovQixLQUFLb3dILFNBQVMsSUFBSW54RixFQUFFbHFCLE9BQU8sQ0FBQyxJQUFJd3FCLEVBQUVOLEVBQUVsK0IsU0FBUyxHQUFHdytCLEVBQUUsR0FBRyxpQkFBaUJBLEVBQUUsTUFBTUEsRUFBRW1CLE9BQU8sS0FBS25CLEVBQUVneEgsR0FBR2h4SCxRQUFRLENBQUMsSUFBSUEsRUFBRWlzQixTQUFTLE9BQU94ckQsS0FBS3UvQixFQUFFQSxFQUFFOXVCLGVBQWV6TCxJQUFJdTZCLEVBQUUsU0FBU3Y2QixHQUFHLEdBQUdBLEVBQUV5ckosVUFBVSxPQUFPenJKLEVBQUV5ckosVUFBVSxJQUFJcm1ILEVBQUUxOEIsU0FBU3lDLGNBQWMsT0FBTyxPQUFPaTZCLEVBQUVsNUIsWUFBWWxNLEVBQUVpK0csV0FBVSxJQUFLNzRFLEVBQUUzNUIsVUFBMUgsQ0FBcUl6TCxJQUFJLEdBQUd1NkIsRUFBRSxDQUFDLElBQUk5NUIsRUFBRTJxSixHQUFHN3dILEVBQUUsQ0FBQ3F3SCxtQkFBa0IsRUFBR0gscUJBQXFCWSxHQUFHYiw0QkFBNEJjLEdBQUd0QixXQUFXL3ZILEVBQUUrdkgsV0FBV1csU0FBUzF3SCxFQUFFMHdILFVBQVUzdkosTUFBTTQrQyxFQUFFbjVDLEVBQUVzUCxPQUFPb3FCLEVBQUUxNUIsRUFBRXUrSCxnQkFBZ0Iva0csRUFBRWxxQixPQUFPNnBDLEVBQUUzZixFQUFFK2tHLGdCQUFnQjdrRyxHQUFHLE9BQU9xeEgsR0FBR2hzSixLQUFLeEUsS0FBS2dGLEVBQUVvbEMsSUFBSXlzRyxHQUFHaGhCLFFBQVF1NkIsR0FBR2gwSCxFQUFPQyxRQUFRdzZHLEksdUJDTHR1MkZ6NkcsRUFBT0MsUUFBVS84QixPQUFlLFNDQzVCb3hKLEVBQTJCLEdBRy9CLFNBQVNDLEVBQW9CeGpJLEdBRTVCLElBQUl5akksRUFBZUYsRUFBeUJ2akksR0FDNUMsUUFBcUI5dEIsSUFBakJ1eEosRUFDSCxPQUFPQSxFQUFhdjBILFFBR3JCLElBQUlELEVBQVNzMEgsRUFBeUJ2akksR0FBWSxDQUNqRHpkLEdBQUl5ZCxFQUNKbWhGLFFBQVEsRUFDUmp5RSxRQUFTLElBVVYsT0FOQXcwSCxFQUFvQjFqSSxHQUFVM29CLEtBQUs0M0IsRUFBT0MsUUFBU0QsRUFBUUEsRUFBT0MsUUFBU3MwSCxHQUczRXYwSCxFQUFPa3lFLFFBQVMsRUFHVGx5RSxFQUFPQyxRQ3ZCZnMwSCxFQUFvQjF4SCxFQUFLN0MsSUFDeEIsSUFBSXk1RyxFQUFTejVHLEdBQVVBLEVBQU9FLFdBQzdCLElBQU9GLEVBQWlCLFFBQ3hCLElBQU0sRUFFUCxPQURBdTBILEVBQW9CeHNILEVBQUUweEcsRUFBUSxDQUFFMTJHLEVBQUcwMkcsSUFDNUJBLEdDTFI4YSxFQUFvQnhzSCxFQUFJLENBQUM5SCxFQUFTeTBILEtBQ2pDLElBQUksSUFBSTVxSixLQUFPNHFKLEVBQ1hILEVBQW9CL3hHLEVBQUVreUcsRUFBWTVxSixLQUFTeXFKLEVBQW9CL3hHLEVBQUV2aUIsRUFBU24yQixJQUM1RTdCLE9BQU91b0MsZUFBZXZRLEVBQVNuMkIsRUFBSyxDQUFFdzNCLFlBQVksRUFBTS95QixJQUFLbW1KLEVBQVc1cUosTUNKM0V5cUosRUFBb0J6c0csRUFBSSxXQUN2QixHQUEwQixpQkFBZjZzRyxXQUF5QixPQUFPQSxXQUMzQyxJQUNDLE9BQU8vd0osTUFBUSxJQUFJc3ZDLFNBQVMsY0FBYixHQUNkLE1BQU90cUMsR0FDUixHQUFzQixpQkFBWDFGLE9BQXFCLE9BQU9BLFFBTGpCLEdDQXhCcXhKLEVBQW9CL3hHLEVBQUksQ0FBQ2o1QyxFQUFLekMsSUFBVW1CLE9BQU9DLFVBQVVDLGVBQWVDLEtBQUttQixFQUFLekMsR0NDbEZ5dEosRUFBb0JweEgsRUFBS2xELElBQ0gsb0JBQVgwWSxRQUEwQkEsT0FBT3NkLGFBQzFDaHVELE9BQU91b0MsZUFBZXZRLEVBQVMwWSxPQUFPc2QsWUFBYSxDQUFFM3VELE1BQU8sV0FFN0RXLE9BQU91b0MsZUFBZXZRLEVBQVMsYUFBYyxDQUFFMzRCLE9BQU8sS0NMdkRpdEosRUFBb0JLLElBQU81MEgsSUFDMUJBLEVBQU93N0IsTUFBUSxHQUNWeDdCLEVBQU8xaUIsV0FBVTBpQixFQUFPMWlCLFNBQVcsSUFDakMwaUIsRyxtQkNzQlIsSSxJQUFBLFUsSUFDQSxVLElBRUEsVSxJQUNBLFUsSUFDQSxVLElBQ0EsVSxJQUNBLFUsSUFDQSxVLElBQ0EsVSxJQUNBLFUsSUFDQSxVLElBQ0EsUyxJQUNBLFUsSUFDQSxVLElBRUEsVSxJQUNBLFUsdURBRU83OEIsRUFBS0QsT0FBTEMsRUFFUEEsR0FBRSxXQUNBRCxPQUFPNFcsV0FBVysrRyxVQUFVZzhCLGVBQWUsQ0FDekMsb0JBQ0EsZ0JBQ0Esb0JBQ0EsZUFDQSwwQkFHRixJQUFNbnZJLEVBQWV2aUIsRUFBRXNYLFVBQVdrTCxhQUM1QnRGLEVBQVk0WCxTQUFTdlMsRUFBYXBoQixLQUFLLGFBQWMsSUFDckQrekIsRUFBYzNTLEVBQWFwaEIsS0FBSyxnQkFHdEMsZUFkTSxJQWdCQzhJLEVBQWdCbEssT0FBTzRXLFdBQVcyTCxTQUFsQ3JZLGFBR0Rtc0IsRUFBbUIsSUFBSXhMLFVBQWlCckksRUFBY3RZLEdBRXhEaVQsR0FBYWdZLElBQWdCNWQsVUFBVzRkLFlBQVlDLGNBR3RELElBQUk5UyxVQUFvQm5GLEdBRzFCLElBQUkvSyxVQUFjbUYsVUFBV3VnQixlQUM3QixJQUFJNUgsVUFHSixJQUFJMkUsVUFBbUI1MEIsRUFBRXNYLFVBQVdzZ0IscUJBQXNCclYsR0FDMUQsSUFBSS9LLFVBQWtCdk4sR0FDdEIsSUFBSXFnQixVQUNKLElBQUlvQyxVQUVKLElBQU1zQixFQUEyQmh1QixFQUFFc1gsVUFBV3FULHlCQUM5QyxJQUFJb0QsVUFDRjlqQixFQUNBc1ksRUFDQXlMLEdBQ0FsaUIsUUFHR29SLEtBS0wsYUFBYTVGLFVBQVd3Z0IseUJBRXhCLElBQUl0UCxVQUFxQnZlLEdBQ3pCLElBQUlzZCxVQUVBMk4sSUFBZ0I1ZCxVQUFXNGQsWUFBWUMsY0FDekMsSUFBSW5FLFVBQXdCMVosVUFBV3dhLFVBQVV1SCxrQkFBa0IsR0FFakVuRSxJQUFnQjVkLFVBQVc0ZCxZQUFZRyxTQUN6QyxJQUFJYyxVQUFzQkMsUSIsImZpbGUiOiJwcm9kdWN0X2VkaXQuYnVuZGxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dHcm93bCA9ICh0eXBlLCBtZXNzYWdlLCBkdXJhdGlvblRpbWUpID0+IHtcbiAgY29uc3QgZHVyYXRpb24gPSB1bmRlZmluZWQgIT09IGR1cmF0aW9uVGltZSA/IGR1cmF0aW9uVGltZSA6IDIwMDA7XG5cbiAgaWYgKHR5cGUgPT09ICdzdWNjZXNzJykge1xuICAgIHdpbmRvdy4kLmdyb3dsKHtcbiAgICAgIHRpdGxlOiAnJyxcbiAgICAgIHNpemU6ICdsYXJnZScsXG4gICAgICBtZXNzYWdlLFxuICAgICAgZHVyYXRpb24sXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgd2luZG93LiQuZ3Jvd2xbdHlwZV0oe1xuICAgICAgdGl0bGU6ICcnLFxuICAgICAgc2l6ZTogJ2xhcmdlJyxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBkdXJhdGlvbixcbiAgICB9KTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgc2hvd0dyb3dsO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuaW1wb3J0IHtFdmVudEVtaXR0ZXJ9IGZyb20gJ0Bjb21wb25lbnRzL2V2ZW50LWVtaXR0ZXInO1xuaW1wb3J0IHNlcnAgZnJvbSAnLi9zZXJwLnZ1ZSc7XG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuLyoqXG4gKiBWdWUgY29tcG9uZW50IGRpc3BsYXlpbmcgYSBzZWFyY2ggcGFnZSByZXN1bHQsIEdvb2dsZSBzdHlsZS5cbiAqIFJlcXVpcmVzIGEgdGFnIHdpdGggdGhlIGlkIFwiI3NlcnAtYXBwXCIgdG8gYmUgcHJlc2VudCBpbiB0aGUgRE9NIHRvIHJ1biBpdC5cbiAqIFRoZSBjb21wb25lbnQgaXMgYXV0b21hdGljYWxseSB1cGRhdGVkIGJ5IHdhdGNoaW5nIHNldmVyYWwgaW5wdXRzLlxuICogU2V0IHRoZSBwcm9wZXIgY2xhc3MgdG8gbGluayBhIGlucHV0IHRvIGEgcGFydCBvZiB0aGUgcGFuZWwuXG4gKi9cbmNsYXNzIFNlcnBBcHAge1xuICBjb25zdHJ1Y3RvcihzZWxlY3RvcnMsIHVybCkge1xuICAgIC8vIElmIHRoZSBzZWxlY3RvciBjYW5ub3QgYmUgZm91bmQsIHdlIGRvIG5vdCBsb2FkIHRoZSBWdWUgYXBwXG4gICAgaWYgKCQoc2VsZWN0b3JzLmNvbnRhaW5lcikubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5vcmlnaW5hbFVybCA9IHVybDtcbiAgICB0aGlzLnVzZU11bHRpTGFuZyA9IHNlbGVjdG9ycy5tdWx0aUxhbmd1YWdlSW5wdXQgIT09IHVuZGVmaW5lZCB8fCBzZWxlY3RvcnMubXVsdGlMYW5ndWFnZUZpZWxkICE9PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy51c2VNdWx0aUxhbmcpIHtcbiAgICAgIGNvbnN0IHBvc3NpYmxlU2VsZWN0b3JzID0gW107XG5cbiAgICAgIGlmIChzZWxlY3RvcnMubXVsdGlMYW5ndWFnZUlucHV0KSB7XG4gICAgICAgIHBvc3NpYmxlU2VsZWN0b3JzLnB1c2goc2VsZWN0b3JzLm11bHRpTGFuZ3VhZ2VJbnB1dCk7XG4gICAgICB9XG4gICAgICBpZiAoc2VsZWN0b3JzLm11bHRpTGFuZ3VhZ2VGaWVsZCkge1xuICAgICAgICBwb3NzaWJsZVNlbGVjdG9ycy5wdXNoKHNlbGVjdG9ycy5tdWx0aUxhbmd1YWdlRmllbGQpO1xuICAgICAgfVxuICAgICAgdGhpcy5tdWx0aUxhbmdTZWxlY3RvciA9IHBvc3NpYmxlU2VsZWN0b3JzLmpvaW4oJywnKTtcbiAgICAgIHRoaXMuYXR0YWNoTXVsdGlMYW5nRXZlbnRzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhID0ge1xuICAgICAgdXJsLFxuICAgICAgdGl0bGU6ICcnLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgIH07XG5cbiAgICB0aGlzLnZtID0gbmV3IFZ1ZSh7XG4gICAgICBlbDogc2VsZWN0b3JzLmNvbnRhaW5lcixcbiAgICAgIHRlbXBsYXRlOiAnPHNlcnAgcmVmPVwic2VycFwiIDp1cmw9XCJ1cmxcIiA6dGl0bGU9XCJ0aXRsZVwiIDpkZXNjcmlwdGlvbj1cImRlc2NyaXB0aW9uXCIgLz4nLFxuICAgICAgY29tcG9uZW50czoge3NlcnB9LFxuICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgIH0pO1xuXG4gICAgdGhpcy5pbml0aWFsaXplU2VsZWN0b3JzKHNlbGVjdG9ycyk7XG4gICAgdGhpcy5hdHRhY2hJbnB1dEV2ZW50cygpO1xuICB9XG5cbiAgYXR0YWNoTXVsdGlMYW5nRXZlbnRzKGl0ZW1TZWxlY3Rvcikge1xuICAgICQoJ2JvZHknKS5vbihcbiAgICAgICdjbGljaycsXG4gICAgICBpdGVtU2VsZWN0b3IsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hlY2tUaXRsZSgpO1xuICAgICAgICB0aGlzLmNoZWNrRGVzYygpO1xuICAgICAgICB0aGlzLmNoZWNrVXJsKCk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICBFdmVudEVtaXR0ZXIub24oJ2xhbmd1YWdlU2VsZWN0ZWQnLCAoKSA9PiB7XG4gICAgICB0aGlzLmNoZWNrVGl0bGUoKTtcbiAgICAgIHRoaXMuY2hlY2tEZXNjKCk7XG4gICAgICB0aGlzLmNoZWNrVXJsKCk7XG4gICAgfSk7XG4gIH1cblxuICBpbml0aWFsaXplU2VsZWN0b3JzKHNlbGVjdG9ycykge1xuICAgIHRoaXMuZGVmYXVsdFRpdGxlID0gJChzZWxlY3RvcnMuZGVmYXVsdFRpdGxlKTtcbiAgICB0aGlzLndhdGNoZWRUaXRsZSA9ICQoc2VsZWN0b3JzLndhdGNoZWRUaXRsZSk7XG4gICAgdGhpcy5kZWZhdWx0RGVzY3JpcHRpb24gPSAkKHNlbGVjdG9ycy5kZWZhdWx0RGVzY3JpcHRpb24pO1xuICAgIHRoaXMud2F0Y2hlZERlc2NyaXB0aW9uID0gJChzZWxlY3RvcnMud2F0Y2hlZERlc2NyaXB0aW9uKTtcbiAgICB0aGlzLndhdGNoZWRNZXRhVXJsID0gJChzZWxlY3RvcnMud2F0Y2hlZE1ldGFVcmwpO1xuICB9XG5cbiAgYXR0YWNoSW5wdXRFdmVudHMoKSB7XG4gICAgJCh0aGlzLmRlZmF1bHRUaXRsZSkub24oJ2tleXVwIGNoYW5nZScsICgpID0+IHRoaXMuY2hlY2tUaXRsZSgpKTtcbiAgICAkKHRoaXMud2F0Y2hlZFRpdGxlKS5vbigna2V5dXAgY2hhbmdlJywgKCkgPT4gdGhpcy5jaGVja1RpdGxlKCkpO1xuICAgICQodGhpcy5kZWZhdWx0RGVzY3JpcHRpb24pLm9uKCdrZXl1cCBjaGFuZ2UnLCAoKSA9PiB0aGlzLmNoZWNrRGVzYygpKTtcbiAgICAkKHRoaXMud2F0Y2hlZERlc2NyaXB0aW9uKS5vbigna2V5dXAgY2hhbmdlJywgKCkgPT4gdGhpcy5jaGVja0Rlc2MoKSk7XG4gICAgdGhpcy53YXRjaGVkTWV0YVVybC5vbigna2V5dXAgY2hhbmdlJywgKCkgPT4gdGhpcy5jaGVja1VybCgpKTtcblxuICAgIHRoaXMuY2hlY2tUaXRsZSgpO1xuICAgIHRoaXMuY2hlY2tEZXNjKCk7XG4gICAgdGhpcy5jaGVja1VybCgpO1xuICB9XG5cbiAgc2V0VGl0bGUodGl0bGUpIHtcbiAgICB0aGlzLmRhdGEudGl0bGUgPSB0aXRsZTtcbiAgfVxuXG4gIHNldERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSB7XG4gICAgdGhpcy5kYXRhLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gIH1cblxuICBzZXRVcmwocmV3cml0ZSkge1xuICAgIC8vIFdlIHJlcGxhY2UgdHdvIHBsYWNlaG9sZGVycyBiZWNhdXNlIHRoZXJlIHdhcyBhIHR5cG8gaW4gdGhlIGluaXRpYWwgb25lICgnZnJpZW5keScgaW5zdGVhZCBvZiAnZnJpZW5kbHknKVxuICAgIHRoaXMuZGF0YS51cmwgPSB0aGlzLm9yaWdpbmFsVXJsLnJlcGxhY2UoXG4gICAgICAne2ZyaWVuZHktdXJsfScsXG4gICAgICByZXdyaXRlLFxuICAgICk7XG4gICAgdGhpcy5kYXRhLnVybCA9IHRoaXMuZGF0YS51cmwucmVwbGFjZShcbiAgICAgICd7ZnJpZW5kbHktdXJsfScsXG4gICAgICByZXdyaXRlLFxuICAgICk7XG4gIH1cblxuICBjaGVja1RpdGxlKCkge1xuICAgIGxldCB7ZGVmYXVsdFRpdGxlfSA9IHRoaXM7XG4gICAgbGV0IHt3YXRjaGVkVGl0bGV9ID0gdGhpcztcblxuICAgIGlmICh0aGlzLnVzZU11bHRpTGFuZykge1xuICAgICAgd2F0Y2hlZFRpdGxlID0gd2F0Y2hlZFRpdGxlLmNsb3Nlc3QodGhpcy5tdWx0aUxhbmdTZWxlY3RvcikuZmluZCgnaW5wdXQnKTtcbiAgICAgIGRlZmF1bHRUaXRsZSA9IGRlZmF1bHRUaXRsZS5jbG9zZXN0KHRoaXMubXVsdGlMYW5nU2VsZWN0b3IpLmZpbmQoJ2lucHV0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdGl0bGUxID0gd2F0Y2hlZFRpdGxlLmxlbmd0aCA/IHdhdGNoZWRUaXRsZS52YWwoKSA6ICcnO1xuICAgIGNvbnN0IHRpdGxlMiA9IGRlZmF1bHRUaXRsZS5sZW5ndGggPyBkZWZhdWx0VGl0bGUudmFsKCkgOiAnJztcblxuICAgIHRoaXMuc2V0VGl0bGUodGl0bGUxID09PSAnJyA/IHRpdGxlMiA6IHRpdGxlMSk7XG4gICAgLy8gQWx3YXlzIGNoZWNrIGZvciB1cmwgaWYgdGl0bGUgY2hhbmdlXG4gICAgdGhpcy5jaGVja1VybCgpO1xuICB9XG5cbiAgY2hlY2tEZXNjKCkge1xuICAgIGxldCB7d2F0Y2hlZERlc2NyaXB0aW9ufSA9IHRoaXM7XG4gICAgbGV0IHtkZWZhdWx0RGVzY3JpcHRpb259ID0gdGhpcztcblxuICAgIGlmICh0aGlzLnVzZU11bHRpTGFuZykge1xuICAgICAgd2F0Y2hlZERlc2NyaXB0aW9uID0gd2F0Y2hlZERlc2NyaXB0aW9uXG4gICAgICAgIC5jbG9zZXN0KHRoaXMubXVsdGlMYW5nU2VsZWN0b3IpXG4gICAgICAgIC5maW5kKHRoaXMud2F0Y2hlZERlc2NyaXB0aW9uLmlzKCdpbnB1dCcpID8gJ2lucHV0JyA6ICd0ZXh0YXJlYScpO1xuICAgICAgZGVmYXVsdERlc2NyaXB0aW9uID0gZGVmYXVsdERlc2NyaXB0aW9uXG4gICAgICAgIC5jbG9zZXN0KHRoaXMubXVsdGlMYW5nU2VsZWN0b3IpXG4gICAgICAgIC5maW5kKHRoaXMuZGVmYXVsdERlc2NyaXB0aW9uLmlzKCdpbnB1dCcpID8gJ2lucHV0JyA6ICd0ZXh0YXJlYScpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlc2MxID0gd2F0Y2hlZERlc2NyaXB0aW9uLmxlbmd0aCA/IHdhdGNoZWREZXNjcmlwdGlvbi52YWwoKS5pbm5lclRleHQgfHwgd2F0Y2hlZERlc2NyaXB0aW9uLnZhbCgpIDogJyc7XG4gICAgY29uc3QgZGVzYzIgPSBkZWZhdWx0RGVzY3JpcHRpb24ubGVuZ3RoID8gJChkZWZhdWx0RGVzY3JpcHRpb24udmFsKCkpLnRleHQoKSB8fCBkZWZhdWx0RGVzY3JpcHRpb24udmFsKCkgOiAnJztcblxuICAgIHRoaXMuc2V0RGVzY3JpcHRpb24oZGVzYzEgPT09ICcnID8gZGVzYzIgOiBkZXNjMSk7XG4gIH1cblxuICBjaGVja1VybCgpIHtcbiAgICBsZXQge3dhdGNoZWRNZXRhVXJsfSA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy51c2VNdWx0aUxhbmcpIHtcbiAgICAgIHdhdGNoZWRNZXRhVXJsID0gd2F0Y2hlZE1ldGFVcmwuY2xvc2VzdCh0aGlzLm11bHRpTGFuZ1NlbGVjdG9yKS5maW5kKCdpbnB1dCcpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0VXJsKHdhdGNoZWRNZXRhVXJsLnZhbCgpKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTZXJwQXBwO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG4vKipcbiAqIFRoaXMgY29tcG9uZW50IGlzIGFuIG92ZXJsYXkgb2YgdHlwZWFoZWFkIGl0IGFsbG93cyB0byBoYXZlIGEgc2luZ2xlIGNvbmZpZyBpbnB1dCAoc2luY2VcbiAqIHR5cGVhaGVhZCB3ZWlyZGx5IHVzZXMgdHdvIGRpZmZlcmVudCBjb25maWdzKS4gSXQgYWxzbyBwcm92aWRlcyBzb21lIGRlZmF1bHQgcmVuZGVyaW5nXG4gKiBmdW5jdGlvbnMgd2hpY2ggYXJlLCBvZiBjb3Vyc2UsIG92ZXJyaWRhYmxlLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBdXRvQ29tcGxldGVTZWFyY2gge1xuICBjb25zdHJ1Y3Rvcigkc2VhcmNoSW5wdXQsIGNvbmZpZykge1xuICAgIHRoaXMuJHNlYXJjaElucHV0ID0gJHNlYXJjaElucHV0O1xuICAgIHRoaXMuc2VhcmNoSW5wdXRJZCA9IHRoaXMuJHNlYXJjaElucHV0LnByb3AoJ2lkJyk7XG5cbiAgICBjb25zdCBpbnB1dENvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAvLyBNZXJnZSBkZWZhdWx0IGFuZCBpbnB1dCBjb25maWdcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIG1pbkxlbmd0aDogMixcbiAgICAgIGhpZ2hsaWdodDogdHJ1ZSxcbiAgICAgIGNhY2hlOiBmYWxzZSxcbiAgICAgIGhpbnQ6IGZhbHNlLFxuICAgICAgLi4uaW5wdXRDb25maWcsXG4gICAgfTtcblxuICAgIC8vIE1lcmdlIGRlZmF1bHQgYW5kIGlucHV0IGRhdGFTZXRDb25maWdcbiAgICB0aGlzLmRhdGFTZXRDb25maWcgPSB7XG4gICAgICBkaXNwbGF5OiAnbmFtZScsIC8vIFdoaWNoIGZpZWxkIG9mIHRoZSBvYmplY3QgZnJvbSB0aGUgbGlzdCBpcyB1c2VkIGZvciBkaXNwbGF5IChjYW4gYmUgYSBzdHJpbmcgb3IgYSBjYWxsYmFjaylcbiAgICAgIHZhbHVlOiAnaWQnLCAvLyBXaGljaCBmaWVsZCBvZiB0aGUgb2JqZWN0IGZyb20gdGhlIGxpc3QgaXMgdXNlZCBmb3IgdmFsdWUgKGNhbiBiZSBhIHN0cmluZyBvciBhIGNhbGxiYWNrKVxuICAgICAgbGltaXQ6IDIwLCAvLyBMaW1pdCB0aGUgbnVtYmVyIG9mIGRpc3BsYXllZCBzdWdnZXN0aW9uXG4gICAgICBkYXRhTGltaXQ6IDAsIC8vIEhvdyBtYW55IGVsZW1lbnRzIGNhbiBiZSBzZWxlY3RlZCBtYXhcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAqL1xuICAgICAgb25TZWxlY3Qoc2VsZWN0ZWRJdGVtLCBldmVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgKi9cbiAgICAgIG9uQ2xvc2UoZXZlbnQpIHtcbiAgICAgIH0sXG4gICAgICAuLi5pbnB1dENvbmZpZyxcbiAgICB9O1xuXG4gICAgLy8gTWVyZ2luZyBvYmplY3Qgd29ya3MgZmluZSBvbiBvbmUgbGV2ZWwsIGJ1dCBvbiB0d28gaXQgZXJhc2VzIHN1YiBlbGVtZW50cyBldmVuIGlmIG5vdCBwcmVzZW50LCBzb1xuICAgIC8vIHdlIGhhbmRsZSB0ZW1wbGF0ZXMgc2VwYXJhdGVseSwgdGhlc2UgYXJlIHRoZSBkZWZhdWx0IHJlbmRlcmluZyBmdW5jdGlvbnMgd2hpY2ggY2FuIGJlIG92ZXJyaWRkZW5cbiAgICBjb25zdCBkZWZhdWx0VGVtcGxhdGVzID0ge1xuICAgICAgLy8gQmUgY2FyZWZ1bCB0aGF0IHlvdXIgcmVuZGVyaW5nIGZ1bmN0aW9uIG11c3QgcmV0dXJuIEhUTUwgbm9kZSBub3QgcHVyZSB0ZXh0IHNvIGFsd2F5cyBpbmNsdWRlIHRoZVxuICAgICAgLy8gY29udGVudCBpbiBhIGRpdiBhdCBsZWFzdFxuICAgICAgc3VnZ2VzdGlvbjogKGl0ZW0pID0+IHtcbiAgICAgICAgbGV0IGRpc3BsYXlTdWdnZXN0aW9uID0gaXRlbTtcblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGF0YVNldENvbmZpZy5kaXNwbGF5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhpcy5kYXRhU2V0Q29uZmlnLmRpc3BsYXkoaXRlbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGl0ZW0sIHRoaXMuZGF0YVNldENvbmZpZy5kaXNwbGF5KSkge1xuICAgICAgICAgIGRpc3BsYXlTdWdnZXN0aW9uID0gaXRlbVt0aGlzLmRhdGFTZXRDb25maWcuZGlzcGxheV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJweC0yXCI+JHtkaXNwbGF5U3VnZ2VzdGlvbn08L2Rpdj5gO1xuICAgICAgfSxcbiAgICAgIHBlbmRpbmcocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwicHgtMlwiPlNlYXJjaGluZyBmb3IgXCIke3F1ZXJ5LnF1ZXJ5fVwiPC9kaXY+YDtcbiAgICAgIH0sXG4gICAgICBub3RGb3VuZChxdWVyeSkge1xuICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJweC0yXCI+Tm8gcmVzdWx0cyBmb3VuZCBmb3IgXCIke3F1ZXJ5LnF1ZXJ5fVwiPC9kaXY+YDtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW5wdXRDb25maWcsICd0ZW1wbGF0ZXMnKSkge1xuICAgICAgdGhpcy5kYXRhU2V0Q29uZmlnLnRlbXBsYXRlcyA9IHsuLi5kZWZhdWx0VGVtcGxhdGVzLCAuLi5pbnB1dENvbmZpZy50ZW1wbGF0ZXN9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGFTZXRDb25maWcudGVtcGxhdGVzID0gZGVmYXVsdFRlbXBsYXRlcztcbiAgICB9XG5cbiAgICB0aGlzLmJ1aWxkVHlwZWFoZWFkKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIHR5cGVhaGVhZCBjb21wb25lbnQgYmFzZWQgb24gcHJvdmlkZWQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIGJ1aWxkVHlwZWFoZWFkKCkge1xuICAgIHRoaXMuJHNlYXJjaElucHV0LnR5cGVhaGVhZCh0aGlzLmNvbmZpZywgdGhpcy5kYXRhU2V0Q29uZmlnKVxuICAgICAgLmJpbmQoJ3R5cGVhaGVhZDpzZWxlY3QnLCAoZSwgc2VsZWN0ZWRJdGVtKSA9PiB0aGlzLmNvbmZpZy5vblNlbGVjdChzZWxlY3RlZEl0ZW0sIGUsIHRoaXMuJHNlYXJjaElucHV0KSlcbiAgICAgIC5iaW5kKCd0eXBlYWhlYWQ6Y2xvc2UnLCAoZSkgPT4ge1xuICAgICAgICB0aGlzLmNvbmZpZy5vbkNsb3NlKGUsIHRoaXMuJHNlYXJjaElucHV0KTtcbiAgICAgIH0pO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQmxvb2Rob3VuZCBmcm9tICd0eXBlYWhlYWQuanMnO1xuXG4vKipcbiAqIFRoaXMgY29tZXMgZnJvbSBCbG9vZGhvdW5kIGl0IGFsbG93cyB0byBjcmVhdGUgdG9rZW5pemVyIGJhc2VkIG9uIG11bHRpcGxlIGZpZWxkcyBmcm9tIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gdG9rZW5pemVyXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oKj0sIC4uLlsqXT0pOiBmdW5jdGlvbigqKTogKltdfVxuICovXG5mdW5jdGlvbiBnZXRPYmpUb2tlbml6ZXIodG9rZW5pemVyKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzZXRLZXkoa2V5cywgLi4uYXJncykge1xuICAgIGNvbnN0IHRva2VuaXplcktleXMgPSBfLmlzQXJyYXkoa2V5cykgPyBrZXlzIDogW10uc2xpY2UuY2FsbChhcmdzLCAwKTtcblxuICAgIHJldHVybiBmdW5jdGlvbiB0b2tlbml6ZSh2YWwpIHtcbiAgICAgIGxldCB0b2tlbnMgPSBbXTtcbiAgICAgIHRva2VuaXplcktleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHRva2VucyA9IHRva2Vucy5jb25jYXQodG9rZW5pemVyKF8udG9TdHJpbmcodmFsW2tleV0pKSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRva2VucztcbiAgICB9O1xuICB9O1xufVxuXG4vKipcbiAqIFNwbGl0IHRoZSB3b3JkIGludG8gbXVsdGlwbGUgdG9rZW5zIG9rIGRpZmZlcmVudCBzaXplcywgdGh1cyBhbGxvd2luZyB0byBzZWFyY2ggaW50byBwYXJ0cyBvZiB0aGUgd29yZHMsXG4gKiB0aGUgbWluIGxlbmd0aCBvZiBhIHRva2VuIGlzIHR3byBsZXR0ZXJzIHRob3VnaCAobWF5YmUgaXQgY291bGQgYmUgY29uZmlndXJhYmxlIGluIHRoZSBmdXR1cmUpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbFxuICpcbiAqIEByZXR1cm4ge2FycmF5fVxuICovXG5leHBvcnQgY29uc3QgbGV0dGVycyA9ICh2YWwpID0+IHtcbiAgY29uc3QgdG9rZW5zID0gQmxvb2Rob3VuZC50b2tlbml6ZXJzLm5vbndvcmQodmFsKTtcbiAgdG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiB7XG4gICAgbGV0IGkgPSAwO1xuICAgIHdoaWxlIChpICsgMSA8IHRva2VuLmxlbmd0aCkge1xuICAgICAgdG9rZW5zLnB1c2godG9rZW4uc3Vic3RyKGksIHRva2VuLmxlbmd0aCkpO1xuICAgICAgaSArPSAxO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRva2Vucztcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbGV0dGVycyxcbiAgb2JqOiB7XG4gICAgbGV0dGVyczogZ2V0T2JqVG9rZW5pemVyKGxldHRlcnMpLFxuICB9LFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IEF1dG9Db21wbGV0ZVNlYXJjaCBmcm9tICdAY29tcG9uZW50cy9hdXRvLWNvbXBsZXRlLXNlYXJjaCc7XG5pbXBvcnQgQmxvb2Rob3VuZCBmcm9tICd0eXBlYWhlYWQuanMnO1xuXG4vKipcbiAqIFRoaXMgY29tcG9uZW50IGlzIHVzZWQgdG8gc2VhcmNoIGFuZCBzZWxlY3QgYW4gZW50aXR5LCBpdCBpcyB1c2VzIHRoZSBBdXRvU2VhcmNoQ29tcGxldGVcbiAqIGNvbXBvbmVudCB3aGljaCBkaXNwbGF5cyBhIGxpc3Qgb2Ygc3VnZ2VzdGlvbiBiYXNlZCBvbiBhbiBBUEkgcmV0dXJuZWQgcmVzcG9uc2UuIFRoZW4gd2hlblxuICogYW4gZWxlbWVudCBpcyBzZWxlY3RlZCBpdCBpcyBhZGRlZCB0byB0aGUgc2VsZWN0aW9uIGNvbnRhaW5lciBhbmQgaGlkZGVuIGlucHV0cyBhcmUgY3JlYXRlZCB0b1xuICogc2VuZCBhbiBhcnJheSBvZiBlbnRpdHkgSURzIGluIHRoZSBmb3JtIHJlcXVlc3QuXG4gKlxuICogVGhpcyBjb21wb25lbnQgaXMgdXNlZCB3aXRoIFR5cGVhaGVhZFR5cGUgZm9ybXMsIGFuZCBpcyB0aWdodGx5IGxpbmtlZCB0byB0aGUgY29udGVudCBvZiB0aGlzXG4gKiB0d2lnIGZpbGUgc3JjL1ByZXN0YVNob3BCdW5kbGUvUmVzb3VyY2VzL3ZpZXdzL0FkbWluL1R3aWdUZW1wbGF0ZUZvcm0vdHlwZWFoZWFkLmh0bWwudHdpZ1xuICpcbiAqIEB0b2RvOiB0aGUgY29tcG9uZW50IHJlbGllcyBvbiB0aGlzIFR5cGVhaGVhZFR5cGUgYmVjYXVzZSBpdCB3YXMgdGhlIGhpc3RvcmljYWwgdHlwZSBidXQgaXQgd291bGQgYmUgd29ydGhcbiAqIGNyZWF0aW5nIGEgbmV3IGNsZWFuIGZvcm0gdHlwZSB3aXRoIGJldHRlciB0ZW1wbGF0aW5nICh0aGUgdHBsY29sbGVjdGlvbiBicmluZ3MgbmVhcmx5IG5vIHZhbHVlIGFzIGlzKVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbnRpdHlTZWFyY2hJbnB1dCB7XG4gIGNvbnN0cnVjdG9yKCRlbnRpdHlTZWFyY2hJbnB1dCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVudGl0eVNlYXJjaElucHV0ID0gJGVudGl0eVNlYXJjaElucHV0O1xuICAgIHRoaXMuZW50aXR5U2VhcmNoSW5wdXRJZCA9IHRoaXMuJGVudGl0eVNlYXJjaElucHV0LnByb3AoJ2lkJyk7XG4gICAgdGhpcy4kYXV0b0NvbXBsZXRlU2VhcmNoQ29udGFpbmVyID0gdGhpcy4kZW50aXR5U2VhcmNoSW5wdXQuY2xvc2VzdCgnLmF1dG9jb21wbGV0ZS1zZWFyY2gnKTtcbiAgICB0aGlzLiRzZWxlY3Rpb25Db250YWluZXIgPSAkKGAjJHt0aGlzLmVudGl0eVNlYXJjaElucHV0SWR9LWRhdGFgKTtcbiAgICB0aGlzLnNlYXJjaElucHV0RnVsbE5hbWUgPSB0aGlzLiRhdXRvQ29tcGxldGVTZWFyY2hDb250YWluZXIuZGF0YSgnZnVsbG5hbWUnKTtcblxuICAgIGNvbnN0IGlucHV0T3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgdmFsdWU6ICdpZCcsXG4gICAgICBkYXRhTGltaXQ6IDEsXG4gICAgICAuLi5pbnB1dE9wdGlvbnMsXG4gICAgfTtcbiAgICB0aGlzLmJ1aWxkUmVtb3RlU291cmNlKCk7XG4gICAgdGhpcy5idWlsZEF1dG9Db21wbGV0ZVNlYXJjaCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSB0aGUgcmVtb3RlIHVybCBvZiB0aGUgZW5kcG9pbnQgdGhhdCByZXR1cm5zIHN1Z2dlc3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gcmVtb3RlVXJsIHtzdHJpbmd9XG4gICAqL1xuICBzZXRSZW1vdGVVcmwocmVtb3RlVXJsKSB7XG4gICAgdGhpcy5lbnRpdHlSZW1vdGVTb3VyY2UucmVtb3RlLnVybCA9IHJlbW90ZVVybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZSBzZWxlY3RlZCB2YWx1ZXMsIHRoZSBpbnB1dCBpcyBhbiBhcnJheSBvZiBvYmplY3QgdGhhdCBtdXN0IG1hdGNoIHRoZSBmb3JtYXQgZnJvbVxuICAgKiB0aGUgQVBJIGlmIHlvdSB3YW50IHRoZSBzZWxlY3RlZCBlbnRpdGllcyB0byBiZSBjb3JyZWN0bHkgZGlzcGxheWVkLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVzIHthcnJheX1cbiAgICovXG4gIHNldFZhbHVlKHZhbHVlcykge1xuICAgIHRoaXMuY2xlYXJTZWxlY3RlZEl0ZW1zKCk7XG4gICAgaWYgKCF2YWx1ZXMgfHwgdmFsdWVzLmxlbmd0aCA8PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFsdWVzLmVhY2goKHZhbHVlKSA9PiB7XG4gICAgICB0aGlzLmFwcGVuZFNlbGVjdGVkSXRlbSh2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIEF1dG9Db21wbGV0ZVNlYXJjaCBjb21wb25lbnRcbiAgICovXG4gIGJ1aWxkQXV0b0NvbXBsZXRlU2VhcmNoKCkge1xuICAgIGNvbnN0IGF1dG9TZWFyY2hDb25maWcgPSB7XG4gICAgICBzb3VyY2U6IHRoaXMuZW50aXR5UmVtb3RlU291cmNlLFxuICAgICAgZGF0YUxpbWl0OiB0aGlzLm9wdGlvbnMuZGF0YUxpbWl0LFxuICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgIHN1Z2dlc3Rpb246IChlbnRpdHkpID0+IHtcbiAgICAgICAgICBsZXQgZW50aXR5SW1hZ2U7XG5cbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVudGl0eSwgJ2ltYWdlJykpIHtcbiAgICAgICAgICAgIGVudGl0eUltYWdlID0gYDxpbWcgc3JjPVwiJHtlbnRpdHkuaW1hZ2V9XCIgLz4gYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJzZWFyY2gtc3VnZ2VzdGlvblwiPiR7ZW50aXR5SW1hZ2V9JHtlbnRpdHkubmFtZX08L2Rpdj5gO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG9uQ2xvc2U6IChldmVudCkgPT4ge1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2xvc2UoZXZlbnQpO1xuICAgICAgfSxcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAqL1xuICAgICAgb25TZWxlY3Q6IChzZWxlY3RlZEl0ZW0sIGV2ZW50KSA9PiB7XG4gICAgICAgIC8vIFdoZW4gbGltaXQgaXMgb25lIHdlIGNhbm5vdCBzZWxlY3QgYWRkaXRpb25hbCBlbGVtZW50cyBzbyB3ZSByZXBsYWNlIHRoZW0gaW5zdGVhZFxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRhdGFMaW1pdCA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJlcGxhY2VTZWxlY3RlZEl0ZW0oc2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmRTZWxlY3RlZEl0ZW0oc2VsZWN0ZWRJdGVtKTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIC8vIENhbiBiZSB1c2VkIHRvIGZvcm1hdCB2YWx1ZSBkZXBlbmRpbmcgb24gc2VsZWN0ZWQgaXRlbVxuICAgIGlmICh0aGlzLm9wdGlvbnMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXV0b1NlYXJjaENvbmZpZy52YWx1ZSA9IHRoaXMub3B0aW9ucy52YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5hdXRvU2VhcmNoID0gbmV3IEF1dG9Db21wbGV0ZVNlYXJjaCh0aGlzLiRlbnRpdHlTZWFyY2hJbnB1dCwgYXV0b1NlYXJjaENvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIEJsb29kaG91bmQgcmVtb3RlIHNvdXJjZSB3aGljaCB3aWxsIGNhbGwgdGhlIEFQSS4gVGhlIHBsYWNlaG9sZGVyIHRvXG4gICAqIGluamVjdCB0aGUgcXVlcnkgc2VhcmNoIHBhcmFtZXRlciBpcyBfX1FVRVJZX18gKEB0b2RvOiBjb3VsZCBiZSBjb25maWd1cmFibGUpXG4gICAqXG4gICAqIEByZXR1cm5zIHtCbG9vZGhvdW5kfVxuICAgKi9cbiAgYnVpbGRSZW1vdGVTb3VyY2UoKSB7XG4gICAgY29uc3Qgc291cmNlQ29uZmlnID0ge1xuICAgICAgbWFwcGluZ1ZhbHVlOiB0aGlzLiRhdXRvQ29tcGxldGVTZWFyY2hDb250YWluZXIuZGF0YSgnbWFwcGluZ3ZhbHVlJyksXG4gICAgICByZW1vdGVVcmw6IHRoaXMuJGF1dG9Db21wbGV0ZVNlYXJjaENvbnRhaW5lci5kYXRhKCdyZW1vdGV1cmwnKSxcbiAgICB9O1xuXG4gICAgdGhpcy5lbnRpdHlSZW1vdGVTb3VyY2UgPSBuZXcgQmxvb2Rob3VuZCh7XG4gICAgICBkYXR1bVRva2VuaXplcjogQmxvb2Rob3VuZC50b2tlbml6ZXJzLndoaXRlc3BhY2UsXG4gICAgICBxdWVyeVRva2VuaXplcjogQmxvb2Rob3VuZC50b2tlbml6ZXJzLndoaXRlc3BhY2UsXG4gICAgICBpZGVudGlmeShvYmopIHtcbiAgICAgICAgcmV0dXJuIG9ialtzb3VyY2VDb25maWcubWFwcGluZ1ZhbHVlXTtcbiAgICAgIH0sXG4gICAgICByZW1vdGU6IHtcbiAgICAgICAgdXJsOiBzb3VyY2VDb25maWcucmVtb3RlVXJsLFxuICAgICAgICBjYWNoZTogZmFsc2UsXG4gICAgICAgIHdpbGRjYXJkOiAnX19RVUVSWV9fJyxcbiAgICAgICAgdHJhbnNmb3JtKHJlc3BvbnNlKSB7XG4gICAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZCB3ZSBlbXB0eSB0aGUgaW5wdXQgc2VhcmNoLCBzaW5jZSB0aGUgc2VsZWN0ZWQgZGF0YSBpcyBzdG9yZWQgaW4gaGlkZGVuIGlucHV0cyBhbnl3YXlcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqL1xuICBvblNlbGVjdGlvbkNsb3NlKGV2ZW50KSB7XG4gICAgJChldmVudC50YXJnZXQpLnZhbCgnJyk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBzZWxlY3RlZCBpdGVtcy5cbiAgICovXG4gIGNsZWFyU2VsZWN0ZWRJdGVtcygpIHtcbiAgICBjb25zdCBmb3JtSWRJdGVtID0gJCgnbGknLCB0aGlzLiRzZWxlY3Rpb25Db250YWluZXIpO1xuICAgIGZvcm1JZEl0ZW0ucmVtb3ZlKCk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiB0aGUgY29tcG9uZW50IGlzIGNvbmZpZ3VyZWQgdG8gaGF2ZSBvbmx5IG9uZSBzZWxlY3RlZCBlbGVtZW50IG9uIGVhY2ggc2VsZWN0aW9uXG4gICAqIHRoZSBwcmV2aW91cyBzZWxlY3Rpb24gaXMgcmVtb3ZlZCBhbmQgdGhlbiByZXBsYWNlZC5cbiAgICpcbiAgICogQHBhcmFtIHNlbGVjdGVkSXRlbSB7T2JqZWN0fVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHJlcGxhY2VTZWxlY3RlZEl0ZW0oc2VsZWN0ZWRJdGVtKSB7XG4gICAgdGhpcy5jbGVhclNlbGVjdGVkSXRlbXMoKTtcbiAgICB0aGlzLmFkZFNlbGVjdGVkQ29udGVudFRvQ29udGFpbmVyKHNlbGVjdGVkSXRlbSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHRoZSBjb21wb25lbnQgaXMgY29uZmlndXJlZCB0byBoYXZlIG1vcmUgdGhhbiBvbmUgc2VsZWN0ZWQgaXRlbSBvbiBlYWNoIHNlbGVjdGlvblxuICAgKiB0aGUgaXRlbSBpcyBhZGRlZCB0byB0aGUgbGlzdC5cbiAgICpcbiAgICogQHBhcmFtIHNlbGVjdGVkSXRlbSB7T2JqZWN0fVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGFwcGVuZFNlbGVjdGVkSXRlbShzZWxlY3RlZEl0ZW0pIHtcbiAgICAvLyBJZiBjb2xsZWN0aW9uIGxlbmd0aCBpcyB1cCB0byBsaW1pdCwgcmV0dXJuXG4gICAgY29uc3QgZm9ybUlkSXRlbSA9ICQoJ2xpJywgdGhpcy4kc2VsZWN0aW9uQ29udGFpbmVyKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGF0YUxpbWl0ICE9PSAwICYmIGZvcm1JZEl0ZW0ubGVuZ3RoID49IHRoaXMub3B0aW9ucy5kYXRhTGltaXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFNlbGVjdGVkQ29udGVudFRvQ29udGFpbmVyKHNlbGVjdGVkSXRlbSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdGhlIHNlbGVjdGVkIGNvbnRlbnQgdG8gdGhlIHNlbGVjdGlvbiBjb250YWluZXIsIHRoZSBIVE1MIGlzIGdlbmVyYXRlZCBiYXNlZCBvbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAqIHRoZW4gYSBoaWRkZW4gaW5wdXQgaXMgYXV0b21hdGljYWxseSBhZGRlZCBpbnNpZGUgaXQsIGFuZCBmaW5hbGx5IHRoZSByZW5kZXJlZCBzZWxlY3Rpb24gaXMgYWRkZWQgdG8gdGhlIGxpc3QuXG4gICAqXG4gICAqIEBwYXJhbSBzZWxlY3RlZEl0ZW0ge09iamVjdH1cbiAgICovXG4gIGFkZFNlbGVjdGVkQ29udGVudFRvQ29udGFpbmVyKHNlbGVjdGVkSXRlbSkge1xuICAgIGxldCB2YWx1ZTtcblxuICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLnZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMub3B0aW9ucy52YWx1ZShzZWxlY3RlZEl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHNlbGVjdGVkSXRlbVt0aGlzLm9wdGlvbnMudmFsdWVdO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkSHRtbCA9IHRoaXMucmVuZGVyU2VsZWN0ZWQoc2VsZWN0ZWRJdGVtKTtcbiAgICAvLyBIaWRkZW4gaW5wdXQgaXMgYWRkZWQgaW50byB0aGUgc2VsZWN0ZWQgbGlcbiAgICBjb25zdCAkc2VsZWN0ZWROb2RlID0gJChzZWxlY3RlZEh0bWwpO1xuICAgIGNvbnN0ICRoaWRkZW5JbnB1dCA9ICQoYDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cIiR7dGhpcy5zZWFyY2hJbnB1dEZ1bGxOYW1lfVtkYXRhXVtdXCIgdmFsdWU9XCIke3ZhbHVlfVwiIC8+YCk7XG4gICAgJHNlbGVjdGVkTm9kZS5hcHBlbmQoJGhpZGRlbklucHV0KTtcblxuICAgIC8vIFRoZW4gdGhlIGxpIGlzIGFkZGVkIHRvIHRoZSBsaXN0XG4gICAgdGhpcy4kc2VsZWN0aW9uQ29udGFpbmVyLmFwcGVuZCgkc2VsZWN0ZWROb2RlKTtcblxuICAgIC8vIFRyaWdnZXIgdGhlIGNoYW5nZSBzbyB0aGF0IGxpc3RlbmVycyBkZXRlY3QgdGhlIGZvcm0gZGF0YSBoYXMgYmVlbiBtb2RpZmllZFxuICAgICRoaWRkZW5JbnB1dC50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIHNlbGVjdGVkIGVsZW1lbnQsIHRoaXMgd2lsbCBiZSBhcHBlbmRlZCBpbiB0aGUgc2VsZWN0aW9uIGxpc3QgKHVsKSxcbiAgICogbm8gbmVlZCB0byBpbmNsdWRlIHRoZSBoaWRkZW4gaW5wdXQgYXMgaXQgaXMgYXV0b21hdGljYWxseSBoYW5kbGVkIGluIGFkZFNlbGVjdGVkQ29udGVudFRvQ29udGFpbmVyXG4gICAqXG4gICAqIEBwYXJhbSBlbnRpdHkge09iamVjdH1cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHJlbmRlclNlbGVjdGVkKGVudGl0eSkge1xuICAgIC8vIEB0b2RvOiB0aGUgdHBsY29sbGVjdGlvbiBpZGVhIGlzIG5vdCBiYWQgYnV0IGl0IG9ubHkgY29udGFpbnMgYSBzcGFuIGZvciBub3csIHRvIGZvIHRvIHRoZSBlbmQgb2YgdGhpcyBpZGVhXG4gICAgLy8gaXQgc2hvdWxkIGNvbnRhaW4gdGhlIHdob2xlIGRpdiAod2l0aCBtZWRpYS1sZWZ0IG1lZGlhLWJvZHkgYW5kIGFsbClcbiAgICBjb25zdCAkdGVtcGxhdGVDb250YWluZXIgPSAkKGAjdHBsY29sbGVjdGlvbi0ke3RoaXMuZW50aXR5U2VhcmNoSW5wdXRJZH1gKTtcbiAgICBjb25zdCBpbm5lclRlbXBsYXRlSHRtbCA9ICR0ZW1wbGF0ZUNvbnRhaW5lclxuICAgICAgLmh0bWwoKVxuICAgICAgLnJlcGxhY2UoJyVzJywgZW50aXR5Lm5hbWUpO1xuXG4gICAgcmV0dXJuIGA8bGkgY2xhc3M9XCJtZWRpYVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtbGVmdFwiPlxuICAgICAgICAgIDxpbWcgY2xhc3M9XCJtZWRpYS1vYmplY3QgaW1hZ2VcIiBzcmM9XCIke2VudGl0eS5pbWFnZX1cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLWJvZHkgbWVkaWEtbWlkZGxlXCI+XG4gICAgICAgICAgJHtpbm5lclRlbXBsYXRlSHRtbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPmA7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IEV2ZW50RW1pdHRlckNsYXNzIGZyb20gJ2V2ZW50cyc7XG5cbi8qKlxuICogV2UgaW5zdGFuY2lhdGUgb25lIEV2ZW50RW1pdHRlciAocmVzdHJpY3RlZCB2aWEgYSBjb25zdCkgc28gdGhhdCBldmVyeSBjb21wb25lbnRzXG4gKiByZWdpc3Rlci9kaXNwYXRjaCBvbiB0aGUgc2FtZSBvbmUgYW5kIGNhbiBjb21tdW5pY2F0ZSB3aXRoIGVhY2ggb3RoZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyQ2xhc3MoKTtcblxuZXhwb3J0IGRlZmF1bHQgRXZlbnRFbWl0dGVyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbi8qKlxuICogVGhpcyBpcyBhYmxlIHRvIHdhdGNoIGFuIEhUTUwgZm9ybSBhbmQgcGFyc2UgaXQgYXMgYSBKYXZhc2NyaXB0IG9iamVjdCBiYXNlZCBvbiBhIGNvbmZpZ3VyYWJsZVxuICogbWFwcGluZy4gRWFjaCBmaWVsZCBmcm9tIHRoZSBtb2RlbCBpcyBtYXBwZWQgdG8gYSBmb3JtIGlucHV0LCBvciBzZXZlcmFsLCBlYWNoIGlucHV0IGlzIHdhdGNoZWRcbiAqIHRvIGtlZXAgdGhlIG1vZGVsIGNvbnNpc3RlbnQuXG4gKlxuICogVGhlIG1vZGVsIG1hcHBpbmcgdXNlZCBmb3IgdGhpcyBjb21wb25lbnQgaXMgYW4gb2JqZWN0IHdoaWNoIHVzZXMgdGhlIG1vZGVsS2V5IGFzIGEga2V5IChpdCByZXByZXNlbnRzXG4gKiB0aGUgcHJvcGVydHkgcGF0aCBpbiB0aGUgb2JqZWN0LCBzZXBhcmF0ZWQgYnkgYSBkb3QpIGFuZCB0aGUgaW5wdXQgbmFtZXMgYXMgdmFsdWUgKHRoZXkgZm9sbG93IFN5bWZvbnlcbiAqIGNvbnZlbnRpb24gbmFtaW5nIHVzaW5nIGJyYWNrZXRzKS4gSGVyZSBpcyBhbiBleGFtcGxlIG9mIG1hcHBpbmc6XG4gKlxuICogY29uc3QgbW9kZWxNYXBwaW5nID0ge1xuICogICdwcm9kdWN0LnN0b2NrLnF1YW50aXR5JzogJ3Byb2R1Y3Rbc3RvY2tdW3F1YW50aXR5XScsXG4gKiAgJ3Byb2R1Y3QucHJpY2UucHJpY2VUYXhFeGNsdWRlZCc6IFtcbiAqICAgICdwcm9kdWN0W3ByaWNlXVtwcmljZV90YXhfZXhjbHVkZWRdJyxcbiAqICAgICdwcm9kdWN0W3Nob3J0Y3V0c11bcHJpY2VdW3ByaWNlX3RheF9leGNsdWRlZF0nLFxuICogIF0sXG4gKiB9O1xuICpcbiAqIEFzIHlvdSBjYW4gc2VlIGZvciBwcmljZVRheEV4Y2x1ZGVkIGl0IGlzIHBvc3NpYmxlIHRvIGFzc2lnbiBtdWx0aXBsZSBpbnB1dHMgdG8gdGhlIHNhbWUgbW9kZWxLZXksIHRodXNcbiAqIGFueSB1cGRhdGUgaW4gb25lIG9mIHRoZSBpbnB1dHMgd2lsbCB1cGRhdGUgdGhlIG1vZGVsLCBhbmQgYWxsIHRoZXNlIGlucHV0cyBhcmUga2VwdCBpbiBzeW5jLlxuICpcbiAqIFdpdGggdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gdGhpcyBjb21wb25lbnQgd291bGQgcmV0dXJuIGFuIG9iamVjdCB0aGF0IGxvb2tzIGxpa2UgdGhpczpcbiAqXG4gKiB7XG4gKiAgIHByb2R1Y3Q6IHtcbiAqICAgICBzdG9jazoge1xuICogICAgICAgLy8gTWFwcGVkIHRvIHByb2R1Y3Rbc3RvY2tdW3F1YW50aXR5XSBpbnB1dFxuICogICAgICAgcXVhbnRpdHk6IDIwMCxcbiAqICAgICB9LFxuICogICAgIHByaWNlOiB7XG4gKiAgICAgICAvLyBNYXBwZWQgdG8gdHdvIGlucHV0cyBwcm9kdWN0W3ByaWNlXVtwcmljZV90YXhfZXhjbHVkZWRdIGFuZCBwcm9kdWN0W3Nob3J0Y3V0c11bcHJpY2VdW3ByaWNlX3RheF9leGNsdWRlZF1cbiAqICAgICAgIHByaWNlVGF4RXhjbHVkZWQ6IDIwLjQ1LFxuICogICAgIH1cbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3JtT2JqZWN0TWFwcGVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkZm9ybSAtIEZvcm0gZWxlbWVudCB0byBhdHRhY2ggdGhlIG1hcHBlciB0b1xuICAgKiBAcGFyYW0ge09iamVjdH0gbW9kZWxNYXBwaW5nIC0gU3RydWN0dXJlIG1hcHBpbmcgYSBtb2RlbCB0byBmb3JtIG5hbWVzXG4gICAqIEBwYXJhbSB7RXZlbnRFbWl0dGVyfSBldmVudEVtaXR0ZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIC0gRXZlbnQgbmFtZXNcbiAgICogQHBhcmFtIHtPYmplY3R9IFtjb25maWcudXBkYXRlTW9kZWxdIC0gTmFtZSBvZiB0aGUgZXZlbnQgdG8gbGlzdGVuIHRvIHRyaWdnZXIgYSByZWZyZXNoIG9mIHRoZSBtb2RlbCB1cGRhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IFtjb25maWcubW9kZWxVcGRhdGVkXSAtIE5hbWUgb2YgdGhlIGV2ZW50IGVtaXR0ZWQgZWFjaCB0aW1lIHRoZSBtb2RlbCBpcyB1cGRhdGVkXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnLm1vZGVsRmllbGRVcGRhdGVkXSAtIE5hbWUgb2YgdGhlIGV2ZW50IGVtaXR0ZWQgZWFjaCB0aW1lIGEgZmllbGQgaXMgdXBkYXRlZFxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqL1xuICBjb25zdHJ1Y3RvcigkZm9ybSwgbW9kZWxNYXBwaW5nLCBldmVudEVtaXR0ZXIsIGNvbmZpZykge1xuICAgIHRoaXMuJGZvcm0gPSAkZm9ybTtcbiAgICB0aGlzLmZ1bGxNb2RlbE1hcHBpbmcgPSBtb2RlbE1hcHBpbmc7XG4gICAgdGhpcy5ldmVudEVtaXR0ZXIgPSBldmVudEVtaXR0ZXI7XG5cbiAgICBjb25zdCBpbnB1dENvbmZpZyA9IGNvbmZpZyB8fCB7fTtcblxuICAgIC8vIFRoaXMgZXZlbnQgaXMgcmVnaXN0ZXJlZCBzbyB3aGVuIGl0IGlzIHRyaWdnZXJlZCBpdCBmb3JjZXMgdGhlIGZvcm0gbWFwcGluZyBhbmQgb2JqZWN0IHVwZGF0ZSxcbiAgICAvLyBpdCBjYW4gYmUgdXNlZnVsIHdoZW4gc29tZSBuZXcgaW5wdXRzIGhhdmUgYmVlbiBhZGRlZCBpbiB0aGUgRE9NIChvciByZW1vdmVkKSBzbyB0aGF0IHRoZSBtb2RlbFxuICAgIC8vIGFja25vd2xlZGdlcyB0aGUgdXBkYXRlXG4gICAgdGhpcy51cGRhdGVNb2RlbEV2ZW50TmFtZSA9IGlucHV0Q29uZmlnLnVwZGF0ZU1vZGVsIHx8ICd1cGRhdGVNb2RlbCc7XG5cbiAgICAvLyBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgZWFjaCB0aW1lIHRoZSBvYmplY3QgaXMgdXBkYXRlZCAoZnJvbSBib3RoIGlucHV0IGNoYW5nZSBhbmQgZXh0ZXJuYWwgZXZlbnQpXG4gICAgdGhpcy5tb2RlbFVwZGF0ZWRFdmVudE5hbWUgPSBpbnB1dENvbmZpZy5tb2RlbFVwZGF0ZWQgfHwgJ21vZGVsVXBkYXRlZCc7XG4gICAgLy8gVGhpcyBldmVudCBpcyBlbWl0dGVkIGVhY2ggdGltZSBhbiBvYmplY3QgZmllbGQgaXMgdXBkYXRlZCAoZnJvbSBib3RoIGlucHV0IGNoYW5nZSBhbmQgZXh0ZXJuYWwgZXZlbnQpXG4gICAgdGhpcy5tb2RlbEZpZWxkVXBkYXRlZEV2ZW50TmFtZSA9IGlucHV0Q29uZmlnLm1vZGVsRmllbGRVcGRhdGVkIHx8ICdtb2RlbEZpZWxkVXBkYXRlZCc7XG5cbiAgICAvLyBDb250YWlucyBjYWxsYmFja3MgaWRlbnRpZmllZCBieSBtb2RlbCBrZXlzXG4gICAgdGhpcy53YXRjaGVkUHJvcGVydGllcyA9IHt9O1xuXG4gICAgdGhpcy5pbml0Rm9ybU1hcHBpbmcoKTtcbiAgICB0aGlzLnVwZGF0ZUZ1bGxPYmplY3QoKTtcbiAgICB0aGlzLndhdGNoVXBkYXRlcygpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8qKlxuICAgICAgICogUmV0dXJucyB0aGUgbW9kZWwgbWFwcGVkIHRvIHRoZSBmb3JtIChjdXJyZW50IGxpdmUgc3RhdGUpXG4gICAgICAgKlxuICAgICAgICogQHJldHVybnMgeyp8e319XG4gICAgICAgKi9cbiAgICAgIGdldE1vZGVsOiAoKSA9PiB0aGlzLm1vZGVsLFxuXG4gICAgICAvKipcbiAgICAgICAqIFJldHVybnMgYWxsIGlucHV0cyBhc3NvY2lhdGVkIHRvIGEgbW9kZWwgZmllbGQuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsS2V5XG4gICAgICAgKlxuICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZHxqUXVlcnl9XG4gICAgICAgKi9cbiAgICAgIGdldElucHV0c0ZvcjogKG1vZGVsS2V5KSA9PiB7XG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuZnVsbE1vZGVsTWFwcGluZywgbW9kZWxLZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlucHV0TmFtZXMgPSB0aGlzLmZ1bGxNb2RlbE1hcHBpbmdbbW9kZWxLZXldO1xuXG4gICAgICAgIC8vIFdlIG11c3QgbG9vcCBtYW51YWxseSB0byBrZWVwIHRoZSBvcmRlciBpbiBjb25maWd1cmF0aW9uLCBpZiB3ZSB1c2UgalF1ZXJ5IG11bHRpcGxlIHNlbGVjdG9ycyB0aGUgY29sbGVjdGlvblxuICAgICAgICAvLyB3aWxsIGJlIGZpbGxlZCByZXNwZWN0aW5nIHRoZSBvcmRlciBpbiB0aGUgRE9NXG4gICAgICAgIGNvbnN0IGlucHV0cyA9IFtdO1xuICAgICAgICBjb25zdCBkb21Gb3JtID0gdGhpcy4kZm9ybS5nZXQoMCk7XG4gICAgICAgIGlucHV0TmFtZXMuZm9yRWFjaCgoaW5wdXROYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW5wdXRzQnlOYW1lID0gZG9tRm9ybS5xdWVyeVNlbGVjdG9yQWxsKGBbbmFtZT1cIiR7aW5wdXROYW1lfVwiXWApO1xuXG4gICAgICAgICAgaWYgKGlucHV0c0J5TmFtZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlucHV0c0J5TmFtZS5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgICAgICAgICBpbnB1dHMucHVzaChpbnB1dCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBpbnB1dHMubGVuZ3RoID8gJChpbnB1dHMpIDogdW5kZWZpbmVkO1xuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBTZXQgYSB2YWx1ZSB0byBhIGZpZWxkIG9mIHRoZSBvYmplY3QgYmFzZWQgb24gdGhlIG1vZGVsIGtleSwgdGhlIG9iamVjdCBpdHNlbGYgaXMgdXBkYXRlZFxuICAgICAgICogb2YgY291cnNlIGJ1dCB0aGUgbWFwcGVkIGlucHV0cyBhcmUgYWxzbyBzeW5jZWQgKGFsbCBvZiB0aGVtIGlmIG11bHRpcGxlKS4gRXZlbnRzIGFyZSBhbHNvXG4gICAgICAgKiB0cmlnZ2VyZWQgdG8gaW5kaWNhdGUgdGhlIG9iamVjdCBoYXMgYmVlbiB1cGRhdGVkICh0aGUgZ2VuZXJhbCBhbmQgdGhlIGluZGl2aWR1YWwgZmllbGQgb25lcykuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsS2V5XG4gICAgICAgKiBAcGFyYW0geyp8e319IHZhbHVlXG4gICAgICAgKi9cbiAgICAgIHNldDogKG1vZGVsS2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLm1vZGVsTWFwcGluZywgbW9kZWxLZXkpIHx8IHZhbHVlID09PSB0aGlzLmdldFZhbHVlKG1vZGVsS2V5KSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcnN0IHVwZGF0ZSB0aGUgaW5wdXRzIHRoZW4gdGhlIG1vZGVsLCBzbyB0aGF0IHRoZSBldmVudCBpcyBzZW50IGF0IGxhc3RcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dFZhbHVlKG1vZGVsS2V5LCB2YWx1ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlT2JqZWN0QnlLZXkobW9kZWxLZXksIHZhbHVlKTtcbiAgICAgICAgdGhpcy5ldmVudEVtaXR0ZXIuZW1pdCh0aGlzLm1vZGVsVXBkYXRlZEV2ZW50TmFtZSwgdGhpcy5tb2RlbCk7XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIEFsdGVybmF0aXZlIHRvIHRoZSBldmVudCBsaXN0ZW5pbmcsIHlvdSBjYW4gd2F0Y2ggYSBzcGVjaWZpYyBmaWVsZCBvZiB0aGUgbW9kZWwgYW5kIGFzc2lnbiBhIGNhbGxiYWNrLlxuICAgICAgICogV2hlbiB0aGUgc3BlY2lmaWVkIG1vZGVsIGZpZWxkIGlzIHVwZGF0ZWQgdGhlIGV2ZW50IGlzIHN0aWxsIHRocm93biBidXQgYWRkaXRpb25hbGx5IGFueSBjYWxsYmFjayBhc3NpZ25lZFxuICAgICAgICogdG8gdGhpcyBzcGVjaWZpYyB2YWx1ZSBpcyBhbHNvIGNhbGxlZCwgdGhlIHBhcmFtZXRlciBpcyB0aGUgc2FtZSBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxLZXlcbiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gICAgICAgKi9cbiAgICAgIHdhdGNoOiAobW9kZWxLZXksIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMud2F0Y2hlZFByb3BlcnRpZXMsIG1vZGVsS2V5KSkge1xuICAgICAgICAgIHRoaXMud2F0Y2hlZFByb3BlcnRpZXNbbW9kZWxLZXldID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53YXRjaGVkUHJvcGVydGllc1ttb2RlbEtleV0ucHVzaChjYWxsYmFjayk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgZmllbGQgZnJvbSB0aGUgb2JqZWN0IGJhc2VkIG9uIHRoZSBtb2RlbCBrZXksIHlvdSBjYW4gZXZlbiBnZXQgYSBzdWIgcGFydCBvZiB0aGUgd2hvbGUgbW9kZWwsXG4gICAqIHRoaXMgaW50ZXJuYWwgbWV0aG9kIGlzIHVzZWQgYnkgYm90aCBnZXQgYW5kIHNldCBwdWJsaWMgbWV0aG9kcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsS2V5XG4gICAqXG4gICAqIEByZXR1cm5zIHsqfHt9fHVuZGVmaW5lZH0gUmV0dXJucyBhbnkgZWxlbWVudCBmcm9tIHRoZSBtb2RlbCwgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0VmFsdWUobW9kZWxLZXkpIHtcbiAgICBjb25zdCBtb2RlbEtleXMgPSBtb2RlbEtleS5zcGxpdCgnLicpO1xuXG4gICAgcmV0dXJuICQuc2VyaWFsaXplSlNPTi5kZWVwR2V0KHRoaXMubW9kZWwsIG1vZGVsS2V5cyk7XG4gIH1cblxuICAvKipcbiAgICogV2F0Y2hlcyBpZiBjaGFuZ2VzIGhhcHBlbnMgZnJvbSB0aGUgZm9ybSBvciB2aWEgYW4gZXZlbnQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB3YXRjaFVwZGF0ZXMoKSB7XG4gICAgdGhpcy4kZm9ybS5vbigna2V5dXAgY2hhbmdlIGRwLmNoYW5nZScsICc6aW5wdXQnLCBfLmRlYm91bmNlKFxuICAgICAgKGV2ZW50KSA9PiB0aGlzLmlucHV0VXBkYXRlZChldmVudCksXG4gICAgICAzNTAsXG4gICAgICB7bWF4V2FpdDogMTUwMH0sXG4gICAgKSk7XG4gICAgdGhpcy5ldmVudEVtaXR0ZXIub24odGhpcy51cGRhdGVNb2RlbEV2ZW50TmFtZSwgKCkgPT4gdGhpcy51cGRhdGVGdWxsT2JqZWN0KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJlZCB3aGVuIGEgZm9ybSBpbnB1dCBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge2pRdWVyeS5FdmVudH0gZXZlbnRcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGlucHV0VXBkYXRlZChldmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG5cbiAgICAvLyBBbGwgaW5wdXRzIGNoYW5nZXMgYXJlIHdhdGNoZWQsIGJ1dCBub3QgYWxsIG9mIHRoZW0gYXJlIHBhcnQgb2YgdGhlIG1hcHBpbmcgc28gd2UgaWdub3JlIHRoZW1cbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmZvcm1NYXBwaW5nLCB0YXJnZXQubmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVkVmFsdWUgPSAkKHRhcmdldCkudmFsKCk7XG4gICAgY29uc3QgdXBkYXRlZE1vZGVsS2V5ID0gdGhpcy5mb3JtTWFwcGluZ1t0YXJnZXQubmFtZV07XG5cbiAgICAvLyBVcGRhdGUgdGhlIG1hcHBlZCBpbnB1dCBmaWVsZHNcbiAgICB0aGlzLnVwZGF0ZUlucHV0VmFsdWUodXBkYXRlZE1vZGVsS2V5LCB1cGRhdGVkVmFsdWUsIHRhcmdldC5uYW1lKTtcblxuICAgIC8vIFRoZW4gdXBkYXRlIG1vZGVsIGFuZCBlbWl0IGV2ZW50XG4gICAgdGhpcy51cGRhdGVPYmplY3RCeUtleSh1cGRhdGVkTW9kZWxLZXksIHVwZGF0ZWRWYWx1ZSk7XG4gICAgdGhpcy5ldmVudEVtaXR0ZXIuZW1pdCh0aGlzLm1vZGVsVXBkYXRlZEV2ZW50TmFtZSwgdGhpcy5tb2RlbCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGFsbCB0aGUgaW5wdXRzIG1hcHBlZCB0byBhIG1vZGVsIGtleVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxLZXlcbiAgICogQHBhcmFtIHsqfHt9fSB2YWx1ZVxuICAgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHNvdXJjZUlucHV0TmFtZSBTb3VyY2Ugb2YgdGhlIGNoYW5nZSAobm8gbmVlZCB0byB1cGRhdGUgaXQpXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1cGRhdGVJbnB1dFZhbHVlKG1vZGVsS2V5LCB2YWx1ZSwgc291cmNlSW5wdXROYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbW9kZWxJbnB1dHMgPSB0aGlzLmZ1bGxNb2RlbE1hcHBpbmdbbW9kZWxLZXldO1xuXG4gICAgLy8gVXBkYXRlIGxpbmtlZCBpbnB1dHMgKHdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBpbnB1dCBhc3NvY2lhdGVkIHRvIHRoZSBtb2RlbCBmaWVsZClcbiAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbElucHV0cykpIHtcbiAgICAgIG1vZGVsSW5wdXRzLmZvckVhY2goKGlucHV0TmFtZSkgPT4ge1xuICAgICAgICBpZiAoc291cmNlSW5wdXROYW1lID09PSBpbnB1dE5hbWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUlucHV0QnlOYW1lKGlucHV0TmFtZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChzb3VyY2VJbnB1dE5hbWUgIT09IG1vZGVsSW5wdXRzKSB7XG4gICAgICB0aGlzLnVwZGF0ZUlucHV0QnlOYW1lKG1vZGVsSW5wdXRzLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBpbmRpdmlkdWFsIGlucHV0IGJhc2VkIG9uIGl0cyBuYW1lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dE5hbWVcbiAgICogQHBhcmFtIHsqfHt9fSB2YWx1ZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdXBkYXRlSW5wdXRCeU5hbWUoaW5wdXROYW1lLCB2YWx1ZSkge1xuICAgIGNvbnN0ICRpbnB1dCA9ICQoYFtuYW1lPVwiJHtpbnB1dE5hbWV9XCJdYCwgdGhpcy4kZm9ybSk7XG5cbiAgICBpZiAoISRpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYElucHV0IHdpdGggbmFtZSAke2lucHV0TmFtZX0gaXMgbm90IHByZXNlbnQgaW4gZm9ybS5gKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRoaXMgY2hlY2sgaXMgaW1wb3J0YW50IHRvIGF2b2lkIGluZmluaXRlIGxvb3BzLCB3ZSBkb24ndCB1c2Ugc3RyaWN0IGVxdWFsaXR5IG9uIHB1cnBvc2UgYmVjYXVzZSBpdCB3b3VsZCByZXN1bHRcbiAgICAvLyBpbnRvIGEgcG90ZW50aWFsIGluZmluaXRlIGxvb3AgaWYgdHlwZSBkb24ndCBtYXRjaCwgd2hpY2ggY2FuIGVhc2lseSBoYXBwZW4gd2l0aCBhIG51bWJlciB2YWx1ZSBhbmQgYSB0ZXh0IGlucHV0LlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICBpZiAoJGlucHV0LnZhbCgpICE9IHZhbHVlKSB7XG4gICAgICAkaW5wdXQudmFsKHZhbHVlKTtcblxuICAgICAgaWYgKCRpbnB1dC5kYXRhKCd0b2dnbGUnKSA9PT0gJ3NlbGVjdDInKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHNlbGVjdDIsIGJlY2F1c2Ugb25seSBjaGFuZ2luZyB0aGUgdmFsIGRvZXNuJ3QgdXBkYXRlIHRoZSB3cmFwcGluZyBjb21wb25lbnRcbiAgICAgICAgJGlucHV0LnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGFuZCB1cGRhdGVzIHRoZSBvYmplY3QgYmFzZWQgb24gZm9ybSBjb250ZW50IGFuZCB0aGUgbWFwcGluZyBjb25maWd1cmF0aW9uLCBmaW5hbGx5XG4gICAqIGVtaXQgYW4gZXZlbnQgZm9yIGV4dGVybmFsIGNvbXBvbmVudHMgdGhhdCBtYXkgbmVlZCB0aGUgdXBkYXRlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGlzIGNvbXBvbmVudCBpbml0aWFsaXplcyBvciB3aGVuIHRyaWdnZXJlZCBieSBhbiBleHRlcm5hbCBldmVudC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHVwZGF0ZUZ1bGxPYmplY3QoKSB7XG4gICAgY29uc3Qgc2VyaWFsaXplZEZvcm0gPSB0aGlzLiRmb3JtLnNlcmlhbGl6ZUpTT04oKTtcbiAgICB0aGlzLm1vZGVsID0ge307XG4gICAgT2JqZWN0LmtleXModGhpcy5tb2RlbE1hcHBpbmcpLmZvckVhY2goKG1vZGVsS2V5KSA9PiB7XG4gICAgICBjb25zdCBmb3JtTWFwcGluZyA9IHRoaXMubW9kZWxNYXBwaW5nW21vZGVsS2V5XTtcbiAgICAgIGNvbnN0IGZvcm1LZXlzID0gJC5zZXJpYWxpemVKU09OLnNwbGl0SW5wdXROYW1lSW50b0tleXNBcnJheShmb3JtTWFwcGluZyk7XG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSAkLnNlcmlhbGl6ZUpTT04uZGVlcEdldChzZXJpYWxpemVkRm9ybSwgZm9ybUtleXMpO1xuXG4gICAgICB0aGlzLnVwZGF0ZU9iamVjdEJ5S2V5KG1vZGVsS2V5LCBmb3JtVmFsdWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5ldmVudEVtaXR0ZXIuZW1pdCh0aGlzLm1vZGVsVXBkYXRlZEV2ZW50TmFtZSwgdGhpcy5tb2RlbCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGEgc3BlY2lmaWMgZmllbGQgb2YgdGhlIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsS2V5XG4gICAqIEBwYXJhbSB7Knx7fX0gdmFsdWVcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHVwZGF0ZU9iamVjdEJ5S2V5KG1vZGVsS2V5LCB2YWx1ZSkge1xuICAgIGNvbnN0IG1vZGVsS2V5cyA9IG1vZGVsS2V5LnNwbGl0KCcuJyk7XG4gICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9ICQuc2VyaWFsaXplSlNPTi5kZWVwR2V0KHRoaXMubW9kZWwsIG1vZGVsS2V5cyk7XG5cbiAgICAvLyBUaGlzIGNoZWNrIGhhcyB0d28gaW50ZXJlc3RzLCB0aGVyZSBpcyBubyBwb2ludCBpbiBtb2RpZnlpbmcgYSB2YWx1ZSBvciBlbWl0IGFuIGV2ZW50IGZvciBhIHZhbHVlIHRoYXQgZGlkIG5vdFxuICAgIC8vIGNoYW5nZSwgYW5kIGl0IGF2b2lkcyBpbmZpbml0ZSBsb29wcyB3aGVuIHRoZSBvYmplY3QgZmllbGQgYXJlIGNvLWRlcGVuZGVudCBhbmQgbmVlZCB0byBiZSB1cGRhdGVkIGR5bmFtaWNhbGx5XG4gICAgLy8gKGV4OiB1cGRhdGUgcHJpY2UgdGF4IGluY2x1ZGVkIHdoZW4gcHJpY2UgdGF4IGV4Y2x1ZGVkIGlzIHVwZGF0ZWQgYW5kIHZpY2UgdmVyc2EsIHdpdGhvdXQgdGhpcyBjaGVjayBhbiBpbmZpbml0ZVxuICAgIC8vIGxvb3Agd291bGQgaGFwcGVuKVxuICAgIGlmIChwcmV2aW91c1ZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgICQuc2VyaWFsaXplSlNPTi5kZWVwU2V0KHRoaXMubW9kZWwsIG1vZGVsS2V5cywgdmFsdWUpO1xuXG4gICAgY29uc3QgdXBkYXRlRXZlbnQgPSB7XG4gICAgICBvYmplY3Q6IHRoaXMubW9kZWwsXG4gICAgICBtb2RlbEtleSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICB9O1xuICAgIHRoaXMuZXZlbnRFbWl0dGVyLmVtaXQodGhpcy5tb2RlbEZpZWxkVXBkYXRlZEV2ZW50TmFtZSwgdXBkYXRlRXZlbnQpO1xuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLndhdGNoZWRQcm9wZXJ0aWVzLCBtb2RlbEtleSkpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5V2F0Y2hlcnMgPSB0aGlzLndhdGNoZWRQcm9wZXJ0aWVzW21vZGVsS2V5XTtcbiAgICAgIHByb3BlcnR5V2F0Y2hlcnMuZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcbiAgICAgICAgY2FsbGJhY2sodXBkYXRlRXZlbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldmVyc2UgdGhlIGluaXRpYWwgbWFwcGluZyBNb2RlbC0+Rm9ybSB0byB0aGUgb3Bwb3NpdGUgRm9ybS0+TW9kZWxcbiAgICogVGhpcyBzaW1wbGlmaWVzIHRoZSBzeW5jIGluIHdoZW4gZGF0YSB1cGRhdGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaW5pdEZvcm1NYXBwaW5nKCkge1xuICAgIC8vIG1vZGVsTWFwcGluZyBpcyBhIGxpZ2h0IHZlcnNpb24gb2YgdGhlIGZ1bGxNb2RlbE1hcHBpbmcsIGl0IG9ubHkgY29udGFpbnMgb25lIGlucHV0IG5hbWUgd2hpY2ggaXMgY29uc2lkZXJlZFxuICAgIC8vIGFzIHRoZSBkZWZhdWx0IG9uZSAod2hlbiBmdWxsIG9iamVjdCBpcyB1cGRhdGVkLCBvbmx5IHRoZSBkZWZhdWx0IGlucHV0IGlzIHVzZWQpXG4gICAgdGhpcy5tb2RlbE1hcHBpbmcgPSB7fTtcblxuICAgIC8vIGZvcm1NYXBwaW5nIGlzIHRoZSBpbnZlcnNlIG9mIG1vZGVsTWFwcGluZyBmb3IgZWFjaCBpbnB1dCBuYW1lIGl0IGFzc29jaWF0ZWQgdGhlIG1vZGVsIGtleSwgaXQgaXMgZ2VuZXJhdGVkIGZvclxuICAgIC8vIHBlcmZvcm1hbmNlIGFuZCBjb252ZW5pZW5jZSwgdGhpcyBhbGxvd3MgdG8gZ2V0IG1hcHBpbmcgZGF0YSBmYXN0ZXIgaW4gb3RoZXIgZnVuY3Rpb25zXG4gICAgdGhpcy5mb3JtTWFwcGluZyA9IHt9O1xuXG4gICAgT2JqZWN0LmtleXModGhpcy5mdWxsTW9kZWxNYXBwaW5nKS5mb3JFYWNoKChtb2RlbEtleSkgPT4ge1xuICAgICAgY29uc3QgZm9ybU1hcHBpbmcgPSB0aGlzLmZ1bGxNb2RlbE1hcHBpbmdbbW9kZWxLZXldO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JtTWFwcGluZykpIHtcbiAgICAgICAgZm9ybU1hcHBpbmcuZm9yRWFjaCgoYWxpYXNGb3JtTWFwcGluZykgPT4ge1xuICAgICAgICAgIHRoaXMuYWRkRm9ybU1hcHBpbmcoYWxpYXNGb3JtTWFwcGluZywgbW9kZWxLZXkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWRkRm9ybU1hcHBpbmcoZm9ybU1hcHBpbmcsIG1vZGVsS2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybU5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTWFwcGluZ1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRkRm9ybU1hcHBpbmcoZm9ybU5hbWUsIG1vZGVsTWFwcGluZykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5mb3JtTWFwcGluZywgZm9ybU5hbWUpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBUaGUgZm9ybSBlbGVtZW50ICR7Zm9ybU5hbWV9IGlzIGFscmVhZHkgbWFwcGVkIHRvICR7dGhpcy5mb3JtTWFwcGluZ1tmb3JtTmFtZV19YCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm1NYXBwaW5nW2Zvcm1OYW1lXSA9IG1vZGVsTWFwcGluZztcbiAgICB0aGlzLm1vZGVsTWFwcGluZ1ttb2RlbE1hcHBpbmddID0gZm9ybU5hbWU7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IHtzaG93R3Jvd2x9IGZyb20gJ0BhcHAvdXRpbHMvZ3Jvd2wnO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbi8qKlxuICogQWN0aXZhdGVzLCBkZWFjdGl2YXRlcywgc2hvd3MsIGhpZGVzIHN1Ym1pdCBidXR0b24gaW5zaWRlIGFuIGlucHV0XG4gKiAoZGVwZW5kaW5nIGlmIGlucHV0IHdhcyBjaGFuZ2VkIGNvbXBhcmluZyB0byBpbml0aWFsIHZhbHVlKVxuICogQWZ0ZXIgYnV0dG9uIGlzIGNsaWNrZWQsIGNvbXBvbmVudCBmaXJlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggd2FzIHByb3ZpZGVkIHRvIGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJtaXR0YWJsZUlucHV0IHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB3cmFwcGVyU2VsZWN0b3JcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICpcbiAgICogQHJldHVybnMge3t9fVxuICAgKi9cbiAgY29uc3RydWN0b3Iod3JhcHBlclNlbGVjdG9yLCBjYWxsYmFjaykge1xuICAgIHRoaXMuaW5wdXRTZWxlY3RvciA9ICcuc3VibWl0dGFibGUtaW5wdXQnO1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB0aGlzLndyYXBwZXJTZWxlY3RvciA9IHdyYXBwZXJTZWxlY3RvcjtcbiAgICB0aGlzLmJ1dHRvblNlbGVjdG9yID0gJy5jaGVjay1idXR0b24nO1xuXG4gICAgdGhpcy5pbml0KCk7XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGluaXQoKSB7XG4gICAgY29uc3QgaW5wdXRzID0gYCR7dGhpcy53cmFwcGVyU2VsZWN0b3J9ICR7dGhpcy5pbnB1dFNlbGVjdG9yfWA7XG4gICAgY29uc3QgdGhhdCA9IHRoaXM7XG5cbiAgICAkKGRvY3VtZW50KS5vbignZm9jdXMnLCBpbnB1dHMsIChlKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2hCdXR0b25TdGF0ZShlLmN1cnJlbnRUYXJnZXQsIHRydWUpO1xuICAgIH0pO1xuICAgICQoZG9jdW1lbnQpLm9uKCdpbnB1dCBibHVyJywgaW5wdXRzLCAoZSkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoQnV0dG9uU3RhdGUoZS5jdXJyZW50VGFyZ2V0KTtcbiAgICB9KTtcbiAgICAkKGRvY3VtZW50KS5vbihcbiAgICAgICdjbGljaycsXG4gICAgICBgJHt0aGlzLndyYXBwZXJTZWxlY3Rvcn0gJHt0aGlzLmJ1dHRvblNlbGVjdG9yfWAsXG4gICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoYXQuc3VibWl0SW5wdXQodGhpcyk7XG4gICAgICB9LFxuICAgICk7XG4gICAgJChkb2N1bWVudCkub24oJ2tleXVwJywgaW5wdXRzLCAoZSkgPT4ge1xuICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBidXR0b24gPSB0aGlzLmZpbmRCdXR0b24oZS50YXJnZXQpO1xuXG4gICAgICAgIHRoaXMuc3VibWl0SW5wdXQoYnV0dG9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3VibWl0SW5wdXQoYnV0dG9uKSB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmZpbmRJbnB1dChidXR0b24pO1xuXG4gICAgdGhpcy50b2dnbGVMb2FkaW5nKGJ1dHRvbiwgdHJ1ZSk7XG5cbiAgICB0aGlzLmNhbGxiYWNrKGlucHV0KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICQoaW5wdXQpLmRhdGEoJ2luaXRpYWwtdmFsdWUnLCBpbnB1dC52YWx1ZSk7XG4gICAgICAgIHRoaXMudG9nZ2xlQnV0dG9uVmlzaWJpbGl0eShidXR0b24sIGZhbHNlKTtcblxuICAgICAgICBpZiAocmVzcG9uc2UubWVzc2FnZSkge1xuICAgICAgICAgIHNob3dHcm93bCgnc3VjY2VzcycsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9nZ2xlTG9hZGluZyhidXR0b24sIGZhbHNlKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMudG9nZ2xlRXJyb3IoYnV0dG9uLCB0cnVlKTtcbiAgICAgICAgdGhpcy50b2dnbGVCdXR0b25WaXNpYmlsaXR5KGJ1dHRvbiwgZmFsc2UpO1xuICAgICAgICB0aGlzLnRvZ2dsZUxvYWRpbmcoYnV0dG9uLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBlcnJvci5yZXNwb25zZUpTT04uZXJyb3JzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gZXJyb3IucmVzcG9uc2VKU09OLmVycm9ycztcbiAgICAgICAgT2JqZWN0LmtleXMobWVzc2FnZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIHNob3dHcm93bCgnZXJyb3InLCBtZXNzYWdlc1trZXldKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBpbnB1dFxuICAgKiBAcGFyYW0ge0Jvb2xlYW58bnVsbH0gdmlzaWJsZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVmcmVzaEJ1dHRvblN0YXRlKGlucHV0LCB2aXNpYmxlID0gbnVsbCkge1xuICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuZmluZEJ1dHRvbihpbnB1dCk7XG4gICAgY29uc3QgdmFsdWVXYXNDaGFuZ2VkID0gdGhpcy5pbnB1dFZhbHVlQ2hhbmdlZChpbnB1dCk7XG4gICAgdGhpcy50b2dnbGVCdXR0b25BY3Rpdml0eShidXR0b24sIHZhbHVlV2FzQ2hhbmdlZCk7XG5cbiAgICBpZiAodmlzaWJsZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy50b2dnbGVCdXR0b25WaXNpYmlsaXR5KGJ1dHRvbiwgdmlzaWJsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9nZ2xlQnV0dG9uVmlzaWJpbGl0eShidXR0b24sIHZhbHVlV2FzQ2hhbmdlZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGJ1dHRvblxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFjdGl2ZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdG9nZ2xlQnV0dG9uQWN0aXZpdHkoYnV0dG9uLCBhY3RpdmUpIHtcbiAgICAkKGJ1dHRvbikudG9nZ2xlQ2xhc3MoJ2FjdGl2ZScsIGFjdGl2ZSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gYnV0dG9uXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gdmlzaWJsZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdG9nZ2xlQnV0dG9uVmlzaWJpbGl0eShidXR0b24sIHZpc2libGUpIHtcbiAgICAkKGJ1dHRvbikudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScsICF2aXNpYmxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBidXR0b25cbiAgICogQHBhcmFtIHtCb29sZWFufSB2aXNpYmxlXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB0b2dnbGVMb2FkaW5nKGJ1dHRvbiwgbG9hZGluZykge1xuICAgIGlmIChsb2FkaW5nKSB7XG4gICAgICAkKGJ1dHRvbikuaHRtbCgnPHNwYW4gY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbVwiPjwvc3Bhbj4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJChidXR0b24pLmh0bWwoJzxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5jaGVjazwvaT4nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gYnV0dG9uXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gdmlzaWJsZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdG9nZ2xlRXJyb3IoYnV0dG9uLCBlcnJvcikge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5maW5kSW5wdXQoYnV0dG9uKTtcblxuICAgICQoaW5wdXQpLnRvZ2dsZUNsYXNzKCdpcy1pbnZhbGlkJywgZXJyb3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGlucHV0XG4gICAqXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH1cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGZpbmRCdXR0b24oaW5wdXQpIHtcbiAgICByZXR1cm4gJChpbnB1dClcbiAgICAgIC5jbG9zZXN0KHRoaXMud3JhcHBlclNlbGVjdG9yKVxuICAgICAgLmZpbmQodGhpcy5idXR0b25TZWxlY3RvcilbMF07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZG9tRWxlbWVudFxuICAgKlxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBmaW5kSW5wdXQoZG9tRWxlbWVudCkge1xuICAgIHJldHVybiAkKGRvbUVsZW1lbnQpXG4gICAgICAuY2xvc2VzdCh0aGlzLndyYXBwZXJTZWxlY3RvcilcbiAgICAgIC5maW5kKHRoaXMuaW5wdXRTZWxlY3RvcilbMF07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gaW5wdXRcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpbnB1dFZhbHVlQ2hhbmdlZChpbnB1dCkge1xuICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9ICQoaW5wdXQpLmRhdGEoJ2luaXRpYWwtdmFsdWUnKTtcbiAgICBsZXQgbmV3VmFsdWUgPSAkKGlucHV0KS52YWwoKTtcblxuICAgIGlmICgkKGlucHV0KS5oYXNDbGFzcygnaXMtaW52YWxpZCcpKSB7XG4gICAgICAkKGlucHV0KS5yZW1vdmVDbGFzcygnaXMtaW52YWxpZCcpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5pdGlhbFZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgbmV3VmFsdWUgPSBOdW1iZXIobmV3VmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBpbml0aWFsVmFsdWUgIT09IG5ld1ZhbHVlO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuLyoqXG4gKiBDb25maXJtTW9kYWwgY29tcG9uZW50XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkXG4gKiBAcGFyYW0ge1N0cmluZ30gY29uZmlybVRpdGxlXG4gKiBAcGFyYW0ge1N0cmluZ30gY29uZmlybU1lc3NhZ2VcbiAqIEBwYXJhbSB7U3RyaW5nfSBjbG9zZUJ1dHRvbkxhYmVsXG4gKiBAcGFyYW0ge1N0cmluZ30gY29uZmlybUJ1dHRvbkxhYmVsXG4gKiBAcGFyYW0ge1N0cmluZ30gY29uZmlybUJ1dHRvbkNsYXNzXG4gKiBAcGFyYW0ge0FycmF5fSBjdXN0b21CdXR0b25zXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGNsb3NhYmxlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25maXJtQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbmNlbENhbGxiYWNrXG4gKlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDb25maXJtTW9kYWwocGFyYW1zLCBjb25maXJtQ2FsbGJhY2ssIGNhbmNlbENhbGxiYWNrKSB7XG4gIC8vIENvbnN0cnVjdCB0aGUgbW9kYWxcbiAgY29uc3Qge2lkLCBjbG9zYWJsZX0gPSBwYXJhbXM7XG4gIHRoaXMubW9kYWwgPSBNb2RhbChwYXJhbXMpO1xuXG4gIC8vIGpRdWVyeSBtb2RhbCBvYmplY3RcbiAgdGhpcy4kbW9kYWwgPSAkKHRoaXMubW9kYWwuY29udGFpbmVyKTtcblxuICB0aGlzLnNob3cgPSAoKSA9PiB7XG4gICAgdGhpcy4kbW9kYWwubW9kYWwoKTtcbiAgfTtcblxuICB0aGlzLm1vZGFsLmNvbmZpcm1CdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjb25maXJtQ2FsbGJhY2spO1xuXG4gIHRoaXMuJG1vZGFsLm1vZGFsKHtcbiAgICBiYWNrZHJvcDogY2xvc2FibGUgPyB0cnVlIDogJ3N0YXRpYycsXG4gICAga2V5Ym9hcmQ6IGNsb3NhYmxlICE9PSB1bmRlZmluZWQgPyBjbG9zYWJsZSA6IHRydWUsXG4gICAgY2xvc2FibGU6IGNsb3NhYmxlICE9PSB1bmRlZmluZWQgPyBjbG9zYWJsZSA6IHRydWUsXG4gICAgc2hvdzogZmFsc2UsXG4gIH0pO1xuXG4gIHRoaXMuJG1vZGFsLm9uKCdoaWRkZW4uYnMubW9kYWwnLCAoKSA9PiB7XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7aWR9YCkucmVtb3ZlKCk7XG4gICAgaWYgKGNhbmNlbENhbGxiYWNrKSB7XG4gICAgICBjYW5jZWxDYWxsYmFjaygpO1xuICAgIH1cbiAgfSk7XG5cbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLm1vZGFsLmNvbnRhaW5lcik7XG59XG5cbi8qKlxuICogTW9kYWwgY29tcG9uZW50IHRvIGltcHJvdmUgbGlzaWJpbGl0eSBieSBjb25zdHJ1Y3RpbmcgdGhlIG1vZGFsIG91dHNpZGUgdGhlIG1haW4gZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKlxuICovXG5mdW5jdGlvbiBNb2RhbCh7XG4gIGlkID0gJ2NvbmZpcm0tbW9kYWwnLFxuICBjb25maXJtVGl0bGUsXG4gIGNvbmZpcm1NZXNzYWdlID0gJycsXG4gIGNsb3NlQnV0dG9uTGFiZWwgPSAnQ2xvc2UnLFxuICBjb25maXJtQnV0dG9uTGFiZWwgPSAnQWNjZXB0JyxcbiAgY29uZmlybUJ1dHRvbkNsYXNzID0gJ2J0bi1wcmltYXJ5JyxcbiAgY3VzdG9tQnV0dG9ucyA9IFtdLFxufSkge1xuICBjb25zdCBtb2RhbCA9IHt9O1xuXG4gIC8vIE1haW4gbW9kYWwgZWxlbWVudFxuICBtb2RhbC5jb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbW9kYWwuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21vZGFsJywgJ2ZhZGUnKTtcbiAgbW9kYWwuY29udGFpbmVyLmlkID0gaWQ7XG5cbiAgLy8gTW9kYWwgZGlhbG9nIGVsZW1lbnRcbiAgbW9kYWwuZGlhbG9nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIG1vZGFsLmRpYWxvZy5jbGFzc0xpc3QuYWRkKCdtb2RhbC1kaWFsb2cnKTtcblxuICAvLyBNb2RhbCBjb250ZW50IGVsZW1lbnRcbiAgbW9kYWwuY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBtb2RhbC5jb250ZW50LmNsYXNzTGlzdC5hZGQoJ21vZGFsLWNvbnRlbnQnKTtcblxuICAvLyBNb2RhbCBoZWFkZXIgZWxlbWVudFxuICBtb2RhbC5oZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbW9kYWwuaGVhZGVyLmNsYXNzTGlzdC5hZGQoJ21vZGFsLWhlYWRlcicpO1xuXG4gIC8vIE1vZGFsIHRpdGxlIGVsZW1lbnRcbiAgaWYgKGNvbmZpcm1UaXRsZSkge1xuICAgIG1vZGFsLnRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaDQnKTtcbiAgICBtb2RhbC50aXRsZS5jbGFzc0xpc3QuYWRkKCdtb2RhbC10aXRsZScpO1xuICAgIG1vZGFsLnRpdGxlLmlubmVySFRNTCA9IGNvbmZpcm1UaXRsZTtcbiAgfVxuXG4gIC8vIE1vZGFsIGNsb3NlIGJ1dHRvbiBpY29uXG4gIG1vZGFsLmNsb3NlSWNvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICBtb2RhbC5jbG9zZUljb24uY2xhc3NMaXN0LmFkZCgnY2xvc2UnKTtcbiAgbW9kYWwuY2xvc2VJY29uLnNldEF0dHJpYnV0ZSgndHlwZScsICdidXR0b24nKTtcbiAgbW9kYWwuY2xvc2VJY29uLmRhdGFzZXQuZGlzbWlzcyA9ICdtb2RhbCc7XG4gIG1vZGFsLmNsb3NlSWNvbi5pbm5lckhUTUwgPSAnw5cnO1xuXG4gIC8vIE1vZGFsIGJvZHkgZWxlbWVudFxuICBtb2RhbC5ib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIG1vZGFsLmJvZHkuY2xhc3NMaXN0LmFkZCgnbW9kYWwtYm9keScsICd0ZXh0LWxlZnQnLCAnZm9udC13ZWlnaHQtbm9ybWFsJyk7XG5cbiAgLy8gTW9kYWwgbWVzc2FnZSBlbGVtZW50XG4gIG1vZGFsLm1lc3NhZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gIG1vZGFsLm1lc3NhZ2UuY2xhc3NMaXN0LmFkZCgnY29uZmlybS1tZXNzYWdlJyk7XG4gIG1vZGFsLm1lc3NhZ2UuaW5uZXJIVE1MID0gY29uZmlybU1lc3NhZ2U7XG5cbiAgLy8gTW9kYWwgZm9vdGVyIGVsZW1lbnRcbiAgbW9kYWwuZm9vdGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIG1vZGFsLmZvb3Rlci5jbGFzc0xpc3QuYWRkKCdtb2RhbC1mb290ZXInKTtcblxuICAvLyBNb2RhbCBjbG9zZSBidXR0b24gZWxlbWVudFxuICBtb2RhbC5jbG9zZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICBtb2RhbC5jbG9zZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnYnV0dG9uJyk7XG4gIG1vZGFsLmNsb3NlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ2J0bicsICdidG4tb3V0bGluZS1zZWNvbmRhcnknLCAnYnRuLWxnJyk7XG4gIG1vZGFsLmNsb3NlQnV0dG9uLmRhdGFzZXQuZGlzbWlzcyA9ICdtb2RhbCc7XG4gIG1vZGFsLmNsb3NlQnV0dG9uLmlubmVySFRNTCA9IGNsb3NlQnV0dG9uTGFiZWw7XG5cbiAgLy8gTW9kYWwgY29uZmlybSBidXR0b24gZWxlbWVudFxuICBtb2RhbC5jb25maXJtQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gIG1vZGFsLmNvbmZpcm1CdXR0b24uc2V0QXR0cmlidXRlKCd0eXBlJywgJ2J1dHRvbicpO1xuICBtb2RhbC5jb25maXJtQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ2J0bicsIGNvbmZpcm1CdXR0b25DbGFzcywgJ2J0bi1sZycsICdidG4tY29uZmlybS1zdWJtaXQnKTtcbiAgbW9kYWwuY29uZmlybUJ1dHRvbi5kYXRhc2V0LmRpc21pc3MgPSAnbW9kYWwnO1xuICBtb2RhbC5jb25maXJtQnV0dG9uLmlubmVySFRNTCA9IGNvbmZpcm1CdXR0b25MYWJlbDtcblxuICAvLyBDb25zdHJ1Y3RpbmcgdGhlIG1vZGFsXG4gIGlmIChjb25maXJtVGl0bGUpIHtcbiAgICBtb2RhbC5oZWFkZXIuYXBwZW5kKG1vZGFsLnRpdGxlLCBtb2RhbC5jbG9zZUljb24pO1xuICB9IGVsc2Uge1xuICAgIG1vZGFsLmhlYWRlci5hcHBlbmRDaGlsZChtb2RhbC5jbG9zZUljb24pO1xuICB9XG5cbiAgbW9kYWwuYm9keS5hcHBlbmRDaGlsZChtb2RhbC5tZXNzYWdlKTtcbiAgbW9kYWwuZm9vdGVyLmFwcGVuZChtb2RhbC5jbG9zZUJ1dHRvbiwgLi4uY3VzdG9tQnV0dG9ucywgbW9kYWwuY29uZmlybUJ1dHRvbik7XG4gIG1vZGFsLmNvbnRlbnQuYXBwZW5kKG1vZGFsLmhlYWRlciwgbW9kYWwuYm9keSwgbW9kYWwuZm9vdGVyKTtcbiAgbW9kYWwuZGlhbG9nLmFwcGVuZENoaWxkKG1vZGFsLmNvbnRlbnQpO1xuICBtb2RhbC5jb250YWluZXIuYXBwZW5kQ2hpbGQobW9kYWwuZGlhbG9nKTtcblxuICByZXR1cm4gbW9kYWw7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgd2F0Y2hlcyBhIG5hdmlnYXRpb24gYmFyIGFuZCBpcyBhYmxlIHRvIGxpbmsgaXQgYWx0ZXJuYXRpdmUgbGlua3MsIGFuZCBhdXRvbWF0aWMgc3dpdGNoXG4gKiBvbiBwYWdlIGxvYWQuXG4gKlxuICogWW91IGNhbiBhZGQgYnV0dG9uIHdpdGggY2xhc3MgdGFiLWxpbmsgd2hlbiB0aGV5IGFyZSBjbGlja2VkIHRoZSB0YWIgdGFyZ2V0IGlzIGZldGNoZWRcbiAqIGZyb20gdGhlIGJ1dHRvbidzIGRhdGEgcHJvcGVydHkgdGFyZ2V0VGFiIChzbyBkYXRhLXRhcmdldC10YWIpLCBpdCB0aGVuIHNlYXJjaCBmb3IgYSB0YWJcbiAqIHdoaWNoIHRhcmdldHMgbWF0Y2hlcyBpbiB0aGUgbmF2YmFyIGFuZCBzaW11bGF0ZXMgYSBjbGljayBvbiBpdC5cbiAqXG4gKiBBbHRlcm5hdGl2ZWx5IGl0IGFsc28gY2hlY2tzIG9uIHBhZ2UgbG9hZCBpZiBhIGhhc2ggbWF0Y2hlcyBhIHRhYiBhbmQgYWN0aXZhdGVzIGl0IGlmIG9uZSBpcyBmb3VuZCxcbiAqIGFuZCBvZiBjb3Vyc2UgdGhlIGhhc2ggaXMga2VwdCBpbiBzeW5jIHdoZW4gdGhlIG5hdmJhciBvciBhbHRlcm5hdGl2ZSBsaW5rcyBhcmUgdXNlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmF2YmFySGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKCRuYXZpZ2F0aW9uQ29udGFpbmVyLCB0YWJQcmVmaXgpIHtcbiAgICAvLyBXZSB1c2UgYSB0YWIgcHJlZml4IGZvciBoYXN0YWcgc28gdGhhdCBvbiByZWxvYWQgdGhlIHBhZ2UgZG9lc24ndCBhdXRvIHNjcm9sbCB0byB0aGUgYW5jaG9yZWQgZWxlbWVudFxuICAgIHRoaXMudGFiUHJlZml4ID0gdGFiUHJlZml4IHx8ICd0YWItJztcbiAgICB0aGlzLiRuYXZpZ2F0aW9uQ29udGFpbmVyID0gJG5hdmlnYXRpb25Db250YWluZXI7XG5cbiAgICB0aGlzLndhdGNoTmF2YmFyKCk7XG4gICAgdGhpcy53YXRjaFRhYkxpbmtzKCk7XG4gICAgdGhpcy5zd2l0Y2hPblBhZ2VMb2FkKCk7XG4gIH1cblxuICBzd2l0Y2hUb1RhcmdldCh0YXJnZXQpIHtcbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoaW5nVGFicyA9ICQoYFtocmVmPVwiJHt0YXJnZXR9XCJdYCwgdGhpcy4kbmF2aWdhdGlvbkNvbnRhaW5lcik7XG5cbiAgICBpZiAobWF0Y2hpbmdUYWJzLmxlbmd0aCA8PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGFiTGluayA9IG1hdGNoaW5nVGFicy5maXJzdCgpO1xuICAgIHRoaXMuc3dpdGNoVG9UYWIodGFiTGluayk7XG4gIH1cblxuICBzd2l0Y2hUb1RhYih0YWIpIHtcbiAgICB0YWIuY2xpY2soKTtcbiAgICB0aGlzLnVwZGF0ZUJyb3dzZXJIYXNoKHRhYi5hdHRyKCdocmVmJykpO1xuICB9XG5cbiAgdXBkYXRlQnJvd3Nlckhhc2godGFyZ2V0KSB7XG4gICAgY29uc3QgaGFzaE5hbWUgPSB0YXJnZXQucmVwbGFjZSgnIycsIGAjJHt0aGlzLnRhYlByZWZpeH1gKTtcblxuICAgIGlmICh3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUpIHtcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShudWxsLCBudWxsLCBoYXNoTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gaGFzaE5hbWU7XG4gICAgfVxuICB9XG5cbiAgd2F0Y2hOYXZiYXIoKSB7XG4gICAgJCh0aGlzLiRuYXZpZ2F0aW9uQ29udGFpbmVyKS5vbignc2hvd24uYnMudGFiJywgKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0Lmhhc2gpIHtcbiAgICAgICAgdGhpcy51cGRhdGVCcm93c2VySGFzaChldmVudC50YXJnZXQuaGFzaCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB3YXRjaFRhYkxpbmtzKCkge1xuICAgICQoJy50YWItbGluaycpLmNsaWNrKChldmVudCkgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQudGFyZ2V0KS5hdHRyKCdocmVmJyk7XG5cbiAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zd2l0Y2hUb1RhcmdldChgJHt0YXJnZXR9YCk7XG4gICAgfSk7XG4gIH1cblxuICBzd2l0Y2hPblBhZ2VMb2FkKCkge1xuICAgIGNvbnN0IGVycm9yVGFicyA9ICQoJy5oYXMtZXJyb3InLCB0aGlzLiRuYXZpZ2F0aW9uQ29udGFpbmVyKTtcblxuICAgIGlmIChlcnJvclRhYnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBlcnJvclRhYiA9ICQoJ2Fbcm9sZT1cInRhYlwiXScsIGVycm9yVGFicy5maXJzdCgpKS5maXJzdCgpO1xuICAgICAgdGhpcy5zd2l0Y2hUb1RhYihlcnJvclRhYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHtoYXNofSA9IGRvY3VtZW50LmxvY2F0aW9uO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gaGFzaC5yZXBsYWNlKGAjJHt0aGlzLnRhYlByZWZpeH1gLCAnIycpO1xuICAgICAgdGhpcy5zd2l0Y2hUb1RhcmdldCh0YXJnZXQpO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbi8qKlxuICogUmVsYXRlZCBodG1sIHRlbXBsYXRlIHNyYy9QcmVzdGFTaG9wQnVuZGxlL1Jlc291cmNlcy92aWV3cy9BZG1pbi9Db21tb24vamF2YXNjcmlwdF9wYWdpbmF0aW9uLmh0bWwudHdpZ1xuICpcbiAqIFVzYWdlXG4gKmBgYFxuICogICRwYWdpbmF0b3IgbmV3IER5bmFtaWNQYWdpbmF0b3IoXG4gKiAgICAnI2Zvby1jb250YWluZXInLFxuICogICAgRm9vRGF0YVNlcnZpY2UsXG4gKiAgICBGb29SZW5kZXJlclxuICogICk7XG4gKiAgdGhpcy5ldmVudEVtaXR0ZXIub24oJ2Zvb0V2ZW50VGhhdFNob3VsZFRyaWdnZXJQYWdpbmF0aW9uJywgKCkgPT4gJHBhZ2luYXRvci5wYWdpbmF0ZSgxKSk7XG4gKmBgYFxuICogWW91IGNhbiBhbHNvIHByb3ZpZGUgdGhlIHN0YXJ0aW5nIHBhZ2UgdG8gaW5pdGlhdGUgaXQgYXV0b21hdGljYWxseSBvbiBwYWdlIGxvYWQ6XG4gKmBgYFxuICogICRwYWdpbmF0b3IgbmV3IER5bmFtaWNQYWdpbmF0b3IoXG4gKiAgICAnI2Zvby1jb250YWluZXInLFxuICogICAgRm9vRGF0YVNlcnZpY2UsXG4gKiAgICBGb29SZW5kZXJlcixcbiAqICAgIDFcbiAqICApO1xuICpgYGBcbiAqICBUaGVyZSBpcyBhbHNvIGEgcG9zc2liaWxpdHkgdG8gcHJvdmlkZSBjdXN0b20gc2VsZWN0b3JzTWFwIGFzIDV0aCBhcmd1bWVudC4gU2VlIHRoaXMuc2V0U2VsZWN0b3JzTWFwKCkuXG4gKlxuICogUGFnaW5hdGlvbiBzZXJ2aWNlIG11c3QgaGF2ZSBhIG1ldGhvZCBmZXRjaChvZmZzZXQsIGxpbWl0KSB3aGljaCByZXR1cm5zIGRhdGEue2FueSByZXNvdXJjZXMgbmFtZX0gJiBkYXRhLnRvdGFsXG4gKiBlLmcuXG4gKiBgYGBcbiAqIGNsYXNzIEZvb0RhdGFTZXJ2aWNlIHtcbiAqICBmZXRjaChvZmZzZXQsIGxpbWl0KSB7XG4gKiAgICByZXR1cm4gJC5nZXQodGhpcy5yb3V0ZXIuZ2VuZXJhdGUoJ2FkbWluX3Byb2R1Y3RzX2NvbWJpbmF0aW9ucycsIHtcbiAqICAgICAgcHJvZHVjdElkOiB0aGlzLnByb2R1Y3RJZCxcbiAqICAgICAgcGFnZSxcbiAqICAgICAgbGltaXQsXG4gKiAgICB9KSk7XG4gKiAgfVxuICogfVxuICpgYGBcbiAqICAqIEluIHRoaXMgY2FzZSB0aGUgYWN0aW9uIG9mIHJvdXRlIGBhZG1pbl9wcm9kdWN0c19jb21iaW5hdGlvbnNgIHJldHVybnMgZm9sbG93aW5nIGpzb246XG4gKiBgYGBcbiAqIHtcbiAqICAgdG90YWw6IDEwMCxcbiAqICAgY29tYmluYXRpb25zOiBbe2NvbWJpbmF0aW9uSWQ6IDEsIG5hbWU6IGZvby4uLn0sIHtjb21iaW5hdGlvbklkOiAyLCBuYW1lOiBiYXIuLi59XVxuICogfVxuICpgYGBcbiAqXG4gKiBUaGUgcmVuZGVyZXIgbXVzdCBoYXZlIGEgbWV0aG9kIHJlbmRlcihkYXRhKSB3aGljaCBhY2NlcHRzIHRoZSBkYXRhIGZyb20gUGFnaW5hdGlvblNlcnZpY2VcbiAqIGFuZCByZW5kZXJzIGl0IGRlcGVuZGluZyBvbiBuZWVkc1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEeW5hbWljUGFnaW5hdG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjb250YWluZXJTZWxlY3RvclxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFnaW5hdGlvblNlcnZpY2VcbiAgICogQHBhcmFtIHtPYmplY3R9IHJlbmRlcmVyXG4gICAqIEBwYXJhbSB7TnVtYmVyfG51bGx9IHN0YXJ0aW5nUGFnZSBJZiBwcm92aWRlZCBpdCB3aWxsIGxvYWQgdGhlIHByb3ZpZGVkIHBhZ2UgZGF0YSBvbiBwYWdlIGxvYWRcbiAgICogQHBhcmFtIHtPYmplY3R8bnVsbH0gc2VsZWN0b3JzTWFwIElmIHByb3ZpZGVkIGl0IHdpbGwgb3ZlcnJpZGUgY3NzIHNlbGVjdG9ycyB1c2VkIGZvciBhbGwgdGhlIGFjdGlvbnMuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb250YWluZXJTZWxlY3RvciwgcGFnaW5hdGlvblNlcnZpY2UsIHJlbmRlcmVyLCBzdGFydGluZ1BhZ2UgPSBudWxsLCBzZWxlY3RvcnNNYXAgPSBudWxsKSB7XG4gICAgdGhpcy4kcGFnaW5hdGlvbkNvbnRhaW5lciA9ICQoY29udGFpbmVyU2VsZWN0b3IpO1xuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UgPSBwYWdpbmF0aW9uU2VydmljZTtcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgdGhpcy5zZXRTZWxlY3RvcnNNYXAoc2VsZWN0b3JzTWFwKTtcbiAgICB0aGlzLmluaXQoKTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICBpZiAoc3RhcnRpbmdQYWdlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnBhZ2luYXRlKHN0YXJ0aW5nUGFnZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2luYXRlOiAocGFnZSkgPT4gdGhpcy5wYWdpbmF0ZShwYWdlKSxcbiAgICAgIGdldEN1cnJlbnRQYWdlOiAoKSA9PiB0aGlzLmN1cnJlbnRQYWdlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhdGVzIHRoZSBwYWdpbmF0aW9uIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaW5pdCgpIHtcbiAgICB0aGlzLiRwYWdpbmF0aW9uQ29udGFpbmVyLm9uKCdjbGljaycsIHRoaXMuc2VsZWN0b3JzTWFwLnBhZ2VMaW5rLCAoZSkgPT4ge1xuICAgICAgdGhpcy5wYWdpbmF0ZShOdW1iZXIoJChlLmN1cnJlbnRUYXJnZXQpLmRhdGEoJ3BhZ2UnKSkpO1xuICAgIH0pO1xuICAgIHRoaXMuJHBhZ2luYXRpb25Db250YWluZXIuZmluZCh0aGlzLnNlbGVjdG9yc01hcC5qdW1wVG9QYWdlSW5wdXQpLmtleXByZXNzKChlKSA9PiB7XG4gICAgICBpZiAoZS53aGljaCA9PT0gMTMpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBwYWdlID0gdGhpcy5nZXRWYWxpZFBhZ2VOdW1iZXIoTnVtYmVyKGUuY3VycmVudFRhcmdldC52YWx1ZSkpO1xuICAgICAgICB0aGlzLnBhZ2luYXRlKHBhZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuJHBhZ2luYXRpb25Db250YWluZXIub24oJ2NoYW5nZScsIHRoaXMuc2VsZWN0b3JzTWFwLmxpbWl0U2VsZWN0LCAoKSA9PiB7XG4gICAgICB0aGlzLnBhZ2luYXRlKDEpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBwYWdlXG4gICAqL1xuICBhc3luYyBwYWdpbmF0ZShwYWdlKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2U7XG4gICAgdGhpcy5yZW5kZXJlci50b2dnbGVMb2FkaW5nKHRydWUpO1xuICAgIGNvbnN0IGxpbWl0ID0gdGhpcy5nZXRMaW1pdCgpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmZldGNoKHRoaXMuY2FsY3VsYXRlT2Zmc2V0KHBhZ2UsIGxpbWl0KSwgbGltaXQpO1xuICAgICQodGhpcy5zZWxlY3RvcnNNYXAuanVtcFRvUGFnZUlucHV0KS52YWwocGFnZSk7XG4gICAgdGhpcy5jb3VudFBhZ2VzKGRhdGEudG90YWwpO1xuICAgIHRoaXMucmVmcmVzaEJ1dHRvbnNEYXRhKHBhZ2UpO1xuICAgIHRoaXMucmVmcmVzaEluZm9MYWJlbChwYWdlLCBkYXRhLnRvdGFsKTtcblxuICAgIHRoaXMudG9nZ2xlVGFyZ2V0QXZhaWxhYmlsaXR5KHRoaXMuc2VsZWN0b3JzTWFwLmZpcnN0UGFnZUl0ZW0sIHBhZ2UgPiAxKTtcbiAgICB0aGlzLnRvZ2dsZVRhcmdldEF2YWlsYWJpbGl0eSh0aGlzLnNlbGVjdG9yc01hcC5wcmV2aW91c1BhZ2VJdGVtLCBwYWdlID4gMSk7XG4gICAgdGhpcy50b2dnbGVUYXJnZXRBdmFpbGFiaWxpdHkodGhpcy5zZWxlY3RvcnNNYXAubmV4dFBhZ2VJdGVtLCBwYWdlIDwgdGhpcy5wYWdlc0NvdW50KTtcbiAgICB0aGlzLnRvZ2dsZVRhcmdldEF2YWlsYWJpbGl0eSh0aGlzLnNlbGVjdG9yc01hcC5sYXN0UGFnZUl0ZW0sIHBhZ2UgPCB0aGlzLnBhZ2VzQ291bnQpO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXIoZGF0YSk7XG4gICAgdGhpcy5yZW5kZXJlci50b2dnbGVMb2FkaW5nKGZhbHNlKTtcblxuICAgIHdpbmRvdy5wcmVzdGFTaG9wVWlLaXQuaW5pdFRvb2xUaXBzKCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHBhZ2VcbiAgICogQHBhcmFtIGxpbWl0XG4gICAqXG4gICAqIEByZXR1cm5zIHtOdW1iZXJ9XG4gICAqL1xuICBjYWxjdWxhdGVPZmZzZXQocGFnZSwgbGltaXQpIHtcbiAgICByZXR1cm4gKHBhZ2UgLSAxKSAqIGxpbWl0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBwYWdlXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWZyZXNoQnV0dG9uc0RhdGEocGFnZSkge1xuICAgIHRoaXMuJHBhZ2luYXRpb25Db250YWluZXIuZmluZCh0aGlzLnNlbGVjdG9yc01hcC5uZXh0UGFnZUJ0bikuZGF0YSgncGFnZScsIHBhZ2UgKyAxKTtcbiAgICB0aGlzLiRwYWdpbmF0aW9uQ29udGFpbmVyLmZpbmQodGhpcy5zZWxlY3RvcnNNYXAucHJldmlvdXNQYWdlQnRuKS5kYXRhKCdwYWdlJywgcGFnZSAtIDEpO1xuICAgIHRoaXMuJHBhZ2luYXRpb25Db250YWluZXIuZmluZCh0aGlzLnNlbGVjdG9yc01hcC5sYXN0UGFnZUJ0bikuZGF0YSgncGFnZScsIHRoaXMucGFnZXNDb3VudCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHBhZ2VcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHRvdGFsXG4gICAqL1xuICByZWZyZXNoSW5mb0xhYmVsKHBhZ2UsIHRvdGFsKSB7XG4gICAgY29uc3QgaW5mb0xhYmVsID0gdGhpcy4kcGFnaW5hdGlvbkNvbnRhaW5lci5maW5kKHRoaXMuc2VsZWN0b3JzTWFwLnBhZ2luYXRpb25JbmZvTGFiZWwpO1xuICAgIGNvbnN0IGxpbWl0ID0gdGhpcy5nZXRMaW1pdCgpO1xuICAgIGNvbnN0IGZyb20gPSBwYWdlID09PSAxID8gMSA6IE1hdGgucm91bmQoKHBhZ2UgLSAxKSAqIGxpbWl0KTtcbiAgICBjb25zdCB0byA9IHBhZ2UgPT09IHRoaXMucGFnZXNDb3VudCA/IHRvdGFsIDogTWF0aC5yb3VuZChwYWdlICogbGltaXQpO1xuICAgIGNvbnN0IG1vZGlmaWVkSW5mb1RleHQgPSBpbmZvTGFiZWxcbiAgICAgIC5kYXRhKCdwYWdpbmF0aW9uLWluZm8nKVxuICAgICAgLnJlcGxhY2UoLyVmcm9tJS9nLCBmcm9tKVxuICAgICAgLnJlcGxhY2UoLyV0byUvZywgdG8pXG4gICAgICAucmVwbGFjZSgvJXRvdGFsJS9nLCB0b3RhbClcbiAgICAgIC5yZXBsYWNlKC8lY3VycmVudF9wYWdlJS9nLCBwYWdlKVxuICAgICAgLnJlcGxhY2UoLyVwYWdlX2NvdW50JS9nLCB0aGlzLnBhZ2VzQ291bnQpO1xuXG4gICAgaW5mb0xhYmVsLnRleHQobW9kaWZpZWRJbmZvVGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtTdHJpbmd9IHRhcmdldFNlbGVjdG9yXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gZW5hYmxlXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB0b2dnbGVUYXJnZXRBdmFpbGFiaWxpdHkodGFyZ2V0U2VsZWN0b3IsIGVuYWJsZSkge1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuJHBhZ2luYXRpb25Db250YWluZXIuZmluZCh0YXJnZXRTZWxlY3Rvcik7XG5cbiAgICBpZiAoZW5hYmxlKSB7XG4gICAgICB0YXJnZXQucmVtb3ZlQ2xhc3MoJ2Rpc2FibGVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldC5hZGRDbGFzcygnZGlzYWJsZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHRvdGFsXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb3VudFBhZ2VzKHRvdGFsKSB7XG4gICAgdGhpcy5wYWdlc0NvdW50ID0gTWF0aC5jZWlsKHRvdGFsIC8gdGhpcy5nZXRMaW1pdCgpKTtcbiAgICBjb25zdCBsYXN0UGFnZUl0ZW0gPSB0aGlzLiRwYWdpbmF0aW9uQ29udGFpbmVyLmZpbmQodGhpcy5zZWxlY3RvcnNNYXAubGFzdFBhZ2VCdG4pO1xuICAgIGxhc3RQYWdlSXRlbS5kYXRhKCdwYWdlJywgdGhpcy5wYWdlc0NvdW50KTtcbiAgICBsYXN0UGFnZUl0ZW0udGV4dCh0aGlzLnBhZ2VzQ291bnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtOdW1iZXJ9XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnZXRMaW1pdCgpIHtcbiAgICByZXR1cm4gdGhpcy4kcGFnaW5hdGlvbkNvbnRhaW5lci5maW5kKHRoaXMuc2VsZWN0b3JzTWFwLmxpbWl0U2VsZWN0KS52YWwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcGFnZVxuICAgKlxuICAgKiBAcmV0dXJucyB7TnVtYmVyfVxuICAgKi9cbiAgZ2V0VmFsaWRQYWdlTnVtYmVyKHBhZ2UpIHtcbiAgICBpZiAocGFnZSA+IHRoaXMucGFnZXNDb3VudCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFnZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAocGFnZSA8IDEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIHJldHVybiBwYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzZWxlY3RvcnNNYXBcbiAgICovXG4gIHNldFNlbGVjdG9yc01hcChzZWxlY3RvcnNNYXApIHtcbiAgICBpZiAoc2VsZWN0b3JzTWFwKSB7XG4gICAgICB0aGlzLnNlbGVjdG9yc01hcCA9IHNlbGVjdG9yc01hcDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0b3JzTWFwID0ge1xuICAgICAganVtcFRvUGFnZUlucHV0OiAnaW5wdXRbbmFtZT1cInBhZ2luYXRvci1qdW1wLXBhZ2VcIl0nLFxuICAgICAgZmlyc3RQYWdlQnRuOiAnYnV0dG9uLnBhZ2UtbGluay5maXJzdCcsXG4gICAgICBmaXJzdFBhZ2VJdGVtOiAnbGkucGFnZS1pdGVtLmZpcnN0JyxcbiAgICAgIG5leHRQYWdlQnRuOiAnYnV0dG9uLnBhZ2UtbGluay5uZXh0JyxcbiAgICAgIG5leHRQYWdlSXRlbTogJ2xpLnBhZ2UtaXRlbS5uZXh0JyxcbiAgICAgIHByZXZpb3VzUGFnZUJ0bjogJ2J1dHRvbi5wYWdlLWxpbmsucHJldmlvdXMnLFxuICAgICAgcHJldmlvdXNQYWdlSXRlbTogJ2xpLnBhZ2UtaXRlbS5wcmV2aW91cycsXG4gICAgICBsYXN0UGFnZUl0ZW06ICdsaS5wYWdlLWl0ZW0ubGFzdCcsXG4gICAgICBsYXN0UGFnZUJ0bjogJ2J1dHRvbi5wYWdlLWxpbmsubGFzdCcsXG4gICAgICBwYWdlTGluazogJ2J1dHRvbi5wYWdlLWxpbmsnLFxuICAgICAgbGltaXRTZWxlY3Q6ICcjcGFnaW5hdG9yLWxpbWl0JyxcbiAgICAgIHBhZ2luYXRpb25JbmZvTGFiZWw6ICcjcGFnaW5hdGlvbi1pbmZvJyxcbiAgICB9O1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmltcG9ydCBSb3V0aW5nIGZyb20gJ2Zvcy1yb3V0aW5nJztcbmltcG9ydCByb3V0ZXMgZnJvbSAnQGpzL2Zvc19qc19yb3V0ZXMuanNvbic7XG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuLyoqXG4gKiBXcmFwcyBGT1NKc1JvdXRpbmdidW5kbGUgd2l0aCBleHBvc2VkIHJvdXRlcy5cbiAqIFRvIGV4cG9zZSByb3V0ZSBhZGQgb3B0aW9uIGBleHBvc2U6IHRydWVgIGluIC55bWwgcm91dGluZyBjb25maWdcbiAqXG4gKiBlLmcuXG4gKlxuICogYG15X3JvdXRlXG4gKiAgICBwYXRoOiAvbXktcGF0aFxuICogICAgb3B0aW9uczpcbiAqICAgICAgZXhwb3NlOiB0cnVlXG4gKiBgXG4gKiBBbmQgcnVuIGBiaW4vY29uc29sZSBmb3M6anMtcm91dGluZzpkdW1wIC0tZm9ybWF0PWpzb24gLS10YXJnZXQ9YWRtaW4tZGV2L3RoZW1lcy9uZXctdGhlbWUvanMvZm9zX2pzX3JvdXRlcy5qc29uYFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb3V0ZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAod2luZG93LnByZXN0YXNob3AgJiYgd2luZG93LnByZXN0YXNob3AuY3VzdG9tUm91dGVzKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHJvdXRlcy5yb3V0ZXMsIHdpbmRvdy5wcmVzdGFzaG9wLmN1c3RvbVJvdXRlcyk7XG4gICAgfVxuXG4gICAgUm91dGluZy5zZXREYXRhKHJvdXRlcyk7XG4gICAgUm91dGluZy5zZXRCYXNlVXJsKFxuICAgICAgJChkb2N1bWVudClcbiAgICAgICAgLmZpbmQoJ2JvZHknKVxuICAgICAgICAuZGF0YSgnYmFzZS11cmwnKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRGVjb3JhdGVkIFwiZ2VuZXJhdGVcIiBtZXRob2QsIHdpdGggcHJlZGVmaW5lZCBzZWN1cml0eSB0b2tlbiBpbiBwYXJhbXNcbiAgICpcbiAgICogQHBhcmFtIHJvdXRlXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICpcbiAgICogQHJldHVybnMge1N0cmluZ31cbiAgICovXG4gIGdlbmVyYXRlKHJvdXRlLCBwYXJhbXMgPSB7fSkge1xuICAgIGNvbnN0IHRva2VuaXplZFBhcmFtcyA9IE9iamVjdC5hc3NpZ24ocGFyYW1zLCB7XG4gICAgICBfdG9rZW46ICQoZG9jdW1lbnQpXG4gICAgICAgIC5maW5kKCdib2R5JylcbiAgICAgICAgLmRhdGEoJ3Rva2VuJyksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gUm91dGluZy5nZW5lcmF0ZShyb3V0ZSwgdG9rZW5pemVkUGFyYW1zKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgQmxvb2Rob3VuZCBmcm9tICd0eXBlYWhlYWQuanMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IEF1dG9Db21wbGV0ZVNlYXJjaCBmcm9tICdAY29tcG9uZW50cy9hdXRvLWNvbXBsZXRlLXNlYXJjaCc7XG5pbXBvcnQgVG9rZW5pemVycyBmcm9tICdAY29tcG9uZW50cy9ibG9vZGhvdW5kL3Rva2VuaXplcnMnO1xuaW1wb3J0IFByb2R1Y3RNYXAgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvcHJvZHVjdC1tYXAnO1xuaW1wb3J0IFByb2R1Y3RFdmVudE1hcCBmcm9tICdAcGFnZXMvcHJvZHVjdC9wcm9kdWN0LWV2ZW50LW1hcCc7XG5pbXBvcnQge2dldENhdGVnb3JpZXN9IGZyb20gJ0BwYWdlcy9wcm9kdWN0L3NlcnZpY2VzL2NhdGVnb3JpZXMnO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbmNvbnN0IFByb2R1Y3RDYXRlZ29yeU1hcCA9IFByb2R1Y3RNYXAuY2F0ZWdvcmllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2F0ZWdvcmllc01hbmFnZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGV2ZW50RW1pdHRlclxuICAgKiBAcmV0dXJucyB7e319XG4gICAqL1xuICBjb25zdHJ1Y3RvcihldmVudEVtaXR0ZXIpIHtcbiAgICB0aGlzLmV2ZW50RW1pdHRlciA9IGV2ZW50RW1pdHRlcjtcbiAgICB0aGlzLmNhdGVnb3JpZXNDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgUHJvZHVjdENhdGVnb3J5TWFwLmNhdGVnb3JpZXNDb250YWluZXIsXG4gICAgKTtcbiAgICB0aGlzLmNhdGVnb3JpZXMgPSBbXTtcbiAgICB0aGlzLnR5cGVhaGVhZERhdGFzID0gW107XG4gICAgdGhpcy5jYXRlZ29yeVRyZWUgPSB0aGlzLmNhdGVnb3JpZXNDb250YWluZXIucXVlcnlTZWxlY3RvcihQcm9kdWN0Q2F0ZWdvcnlNYXAuY2F0ZWdvcnlUcmVlKTtcbiAgICB0aGlzLnByb3RvdHlwZVRlbXBsYXRlID0gdGhpcy5jYXRlZ29yeVRyZWUuZGF0YXNldC5wcm90b3R5cGU7XG4gICAgdGhpcy5wcm90b3R5cGVOYW1lID0gdGhpcy5jYXRlZ29yeVRyZWUuZGF0YXNldC5wcm90b3R5cGVOYW1lO1xuICAgIHRoaXMuZXhwYW5kQWxsQnV0dG9uID0gdGhpcy5jYXRlZ29yaWVzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoUHJvZHVjdENhdGVnb3J5TWFwLmV4cGFuZEFsbEJ1dHRvbik7XG4gICAgdGhpcy5yZWR1Y2VBbGxCdXR0b24gPSB0aGlzLmNhdGVnb3JpZXNDb250YWluZXIucXVlcnlTZWxlY3RvcihQcm9kdWN0Q2F0ZWdvcnlNYXAucmVkdWNlQWxsQnV0dG9uKTtcblxuICAgIHRoaXMuaW5pdENhdGVnb3JpZXMoKTtcblxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGFzeW5jIGluaXRDYXRlZ29yaWVzKCkge1xuICAgIHRoaXMuY2F0ZWdvcmllcyA9IGF3YWl0IGdldENhdGVnb3JpZXMoKTtcblxuICAgIC8vIFRoaXMgcmVnZXhwIGlzIGdvbm5hIGJlIHVzZWQgdG8gZ2V0IGlkIGZyb20gY2hlY2tib3ggbmFtZVxuICAgIGxldCByZWdleHBTdHJpbmcgPSBQcm9kdWN0Q2F0ZWdvcnlNYXAuY2hlY2tib3hOYW1lKCdfX1JFR0VYUF9fJyk7XG4gICAgcmVnZXhwU3RyaW5nID0gXy5lc2NhcGVSZWdFeHAocmVnZXhwU3RyaW5nKS5yZXBsYWNlKCdfX1JFR0VYUF9fJywgJyhbMC05XSspJyk7XG4gICAgdGhpcy5jaGVja2JveElkUmVnZXhwID0gbmV3IFJlZ0V4cChyZWdleHBTdHJpbmcpO1xuXG4gICAgLy8gVGhpcyByZWdleHAgaXMgZ29ubmEgYmUgdXNlZCB0byBnZXQgaWQgZnJvbSByYWRpbyBuYW1lXG4gICAgcmVnZXhwU3RyaW5nID0gUHJvZHVjdENhdGVnb3J5TWFwLnJhZGlvTmFtZSgnX19SRUdFWFBfXycpO1xuICAgIHJlZ2V4cFN0cmluZyA9IF8uZXNjYXBlUmVnRXhwKHJlZ2V4cFN0cmluZykucmVwbGFjZSgnX19SRUdFWFBfXycsICcoWzAtOV0rKScpO1xuICAgIHRoaXMucmFkaW9JZFJlZ2V4cCA9IG5ldyBSZWdFeHAocmVnZXhwU3RyaW5nKTtcblxuICAgIHRoaXMuaW5pdFR5cGVhaGVhZERhdGEodGhpcy5jYXRlZ29yaWVzLCAnJyk7XG4gICAgdGhpcy5pbml0VHlwZWFoZWFkKCk7XG4gICAgdGhpcy5pbml0VHJlZSgpO1xuICAgIHRoaXMudXBkYXRlQ2F0ZWdvcmllc1RhZ3MoKTtcbiAgfVxuXG4gIGluaXRUcmVlKCkge1xuICAgIGNvbnN0IGluaXRpYWxFbGVtZW50cyA9IHt9O1xuXG4gICAgdGhpcy5jYXRlZ29yeVRyZWUucXVlcnlTZWxlY3RvckFsbChQcm9kdWN0Q2F0ZWdvcnlNYXAudHJlZUVsZW1lbnQpLmZvckVhY2goKHRyZWVFbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBjaGVja2JveElucHV0ID0gdHJlZUVsZW1lbnQucXVlcnlTZWxlY3RvcihQcm9kdWN0Q2F0ZWdvcnlNYXAuY2hlY2tib3hJbnB1dCk7XG4gICAgICBjb25zdCBjYXRlZ29yeUlkID0gdGhpcy5nZXRJZEZyb21DaGVja2JveChjaGVja2JveElucHV0KTtcbiAgICAgIGluaXRpYWxFbGVtZW50c1tjYXRlZ29yeUlkXSA9IHRyZWVFbGVtZW50O1xuICAgIH0pO1xuXG4gICAgdGhpcy5jYXRlZ29yaWVzLmZvckVhY2goKGNhdGVnb3J5KSA9PiB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5nZW5lcmF0ZUNhdGVnb3J5VHJlZShjYXRlZ29yeSwgaW5pdGlhbEVsZW1lbnRzKTtcbiAgICAgIHRoaXMuY2F0ZWdvcnlUcmVlLmFwcGVuZChpdGVtKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZXhwYW5kQWxsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgdGhpcy50b2dnbGVBbGwodHJ1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWR1Y2VBbGxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICB0aGlzLnRvZ2dsZUFsbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNhdGVnb3J5VHJlZS5xdWVyeVNlbGVjdG9yQWxsKFByb2R1Y3RDYXRlZ29yeU1hcC5jaGVja2JveElucHV0KS5mb3JFYWNoKChjaGVja2JveCkgPT4ge1xuICAgICAgY2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrYm94SW5wdXQgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgICBjb25zdCBwYXJlbnRJdGVtID0gY2hlY2tib3hJbnB1dC5wYXJlbnROb2RlLmNsb3Nlc3QoUHJvZHVjdENhdGVnb3J5TWFwLnRyZWVFbGVtZW50KTtcbiAgICAgICAgY29uc3QgcmFkaW9JbnB1dCA9IHBhcmVudEl0ZW0ucXVlcnlTZWxlY3RvcihQcm9kdWN0Q2F0ZWdvcnlNYXAucmFkaW9JbnB1dCk7XG5cbiAgICAgICAgLy8gSWYgY2hlY2tib3ggaXMgYXNzb2NpYXRlZCB0byB0aGUgZGVmYXVsdCByYWRpbyBpbnB1dCBpdCBjYW5ub3QgYmUgdW5jaGVja2VkXG4gICAgICAgIGlmIChyYWRpb0lucHV0LmNoZWNrZWQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMudXBkYXRlQ2hlY2tib3goY2hlY2tib3hJbnB1dCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVDYXRlZ29yaWVzVGFncygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2F0ZWdvcnlUcmVlLnF1ZXJ5U2VsZWN0b3JBbGwoUHJvZHVjdENhdGVnb3J5TWFwLnJhZGlvSW5wdXQpLmZvckVhY2goKHJhZGlvSW5wdXQpID0+IHtcbiAgICAgIHJhZGlvSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREZWZhdWx0Q2F0ZWdvcnkocmFkaW9JbnB1dCk7XG4gICAgICB9KTtcbiAgICAgIGlmIChyYWRpb0lucHV0LmNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy51cGRhdGVEZWZhdWx0Q2hlY2tib3gocmFkaW9JbnB1dCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBUcmVlIGlzIGluaXRpYWxpemVkIHdlIGNhbiBzaG93IGl0IGFuZCBoaWRlIGxvYWRlclxuICAgIHRoaXMuY2F0ZWdvcmllc0NvbnRhaW5lclxuICAgICAgLnF1ZXJ5U2VsZWN0b3IoUHJvZHVjdENhdGVnb3J5TWFwLmZpZWxkc2V0KVxuICAgICAgLmNsYXNzTGlzdC5yZW1vdmUoJ2Qtbm9uZScpO1xuICAgIHRoaXMuY2F0ZWdvcmllc0NvbnRhaW5lclxuICAgICAgLnF1ZXJ5U2VsZWN0b3IoUHJvZHVjdENhdGVnb3J5TWFwLmxvYWRlcilcbiAgICAgIC5jbGFzc0xpc3QuYWRkKCdkLW5vbmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHJlY3Vyc2l2ZWx5IGNyZWF0ZSBpdGVtcyBvZiB0aGUgY2F0ZWdvcnkgdHJlZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY2F0ZWdvcnlcbiAgICogQHBhcmFtIHtPYmplY3R9IGluaXRpYWxFbGVtZW50c1xuICAgKi9cbiAgZ2VuZXJhdGVDYXRlZ29yeVRyZWUoY2F0ZWdvcnksIGluaXRpYWxFbGVtZW50cykge1xuICAgIGNvbnN0IGNhdGVnb3J5Tm9kZSA9IHRoaXMuZ2VuZXJhdGVUcmVlRWxlbWVudChjYXRlZ29yeSwgaW5pdGlhbEVsZW1lbnRzKTtcbiAgICBjb25zdCBjaGlsZHJlbkxpc3QgPSBjYXRlZ29yeU5vZGUucXVlcnlTZWxlY3RvcihQcm9kdWN0Q2F0ZWdvcnlNYXAuY2hpbGRyZW5MaXN0KTtcbiAgICBjaGlsZHJlbkxpc3QuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG5cbiAgICBjb25zdCBoYXNDaGlsZHJlbiA9IGNhdGVnb3J5LmNoaWxkcmVuICYmIGNhdGVnb3J5LmNoaWxkcmVuLmxlbmd0aCA+IDA7XG4gICAgY2F0ZWdvcnlOb2RlLmNsYXNzTGlzdC50b2dnbGUoJ21vcmUnLCBoYXNDaGlsZHJlbik7XG4gICAgaWYgKGhhc0NoaWxkcmVuKSB7XG4gICAgICBjb25zdCBpbnB1dHNDb250YWluZXIgPSBjYXRlZ29yeU5vZGUucXVlcnlTZWxlY3RvcihQcm9kdWN0Q2F0ZWdvcnlNYXAudHJlZUVsZW1lbnRJbnB1dHMpO1xuICAgICAgaW5wdXRzQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gbWVzcyB3aXRoIHRoZSBpbnB1dHMgYmVoYXZpb3VyIChubyB0b2dnbGUgd2hlbiBjaGVja2JveCBvciByYWRpbyBpcyBjbGlja2VkKVxuICAgICAgICAvLyBTbyB3ZSBvbmx5IHRvZ2dsZSB3aGVuIHRoZSBkaXYgaXRzZWxmIGlzIGNsaWNrZWQuXG4gICAgICAgIGlmIChldmVudC50YXJnZXQgIT09IGV2ZW50LmN1cnJlbnRUYXJnZXQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0V4cGFuZGVkID0gIWNoaWxkcmVuTGlzdC5jbGFzc0xpc3QuY29udGFpbnMoJ2Qtbm9uZScpO1xuICAgICAgICBjYXRlZ29yeU5vZGUuY2xhc3NMaXN0LnRvZ2dsZSgnbGVzcycsICFpc0V4cGFuZGVkKTtcbiAgICAgICAgY2F0ZWdvcnlOb2RlLmNsYXNzTGlzdC50b2dnbGUoJ21vcmUnLCBpc0V4cGFuZGVkKTtcbiAgICAgICAgY2hpbGRyZW5MaXN0LmNsYXNzTGlzdC50b2dnbGUoJ2Qtbm9uZScsIGlzRXhwYW5kZWQpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IGJ1aWxkIHRoZSBjaGlsZHJlbiB0cmVlc1xuICAgICAgY2F0ZWdvcnkuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGRDYXRlZ29yeSkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZFRyZWUgPSB0aGlzLmdlbmVyYXRlQ2F0ZWdvcnlUcmVlKGNoaWxkQ2F0ZWdvcnksIGluaXRpYWxFbGVtZW50cyk7XG5cbiAgICAgICAgY2hpbGRyZW5MaXN0LmFwcGVuZChjaGlsZFRyZWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhdGVnb3J5Tm9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgY2F0ZWdvcnkgaXMgYW1vbmcgdGhlIGluaXRpYWwgb25lcyAoaW5zZXJ0ZWQgYnkgdGhlIGZvcm0gb24gbG9hZCkgdGhlIGV4aXN0aW5nIGVsZW1lbnQgaXMgdXNlZCxcbiAgICogaWYgbm90IHRoZW4gaXQgaXMgZ2VuZXJhdGVkIGJhc2VkIG9uIHRoZSBwcm90b3R5cGUgdGVtcGxhdGUuIEluIGJvdGggY2FzZSB0aGUgZWxlbWVudCBpcyBpbmplY3RlZCB3aXRoIHRoZVxuICAgKiBjYXRlZ29yeSBuYW1lIGFuZCBjbGljayBvbiByYWRpbyBpcyBoYW5kbGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gY2F0ZWdvcnlcbiAgICogQHBhcmFtIHtPYmplY3R9IGluaXRpYWxFbGVtZW50c1xuICAgKlxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqL1xuICBnZW5lcmF0ZVRyZWVFbGVtZW50KGNhdGVnb3J5LCBpbml0aWFsRWxlbWVudHMpIHtcbiAgICBsZXQgY2F0ZWdvcnlOb2RlO1xuXG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW5pdGlhbEVsZW1lbnRzLCBjYXRlZ29yeS5pZCkpIHtcbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5wcm90b3R5cGVUZW1wbGF0ZS5yZXBsYWNlKG5ldyBSZWdFeHAodGhpcy5wcm90b3R5cGVOYW1lLCAnZycpLCBjYXRlZ29yeS5pZCk7XG4gICAgICAvLyBUcmltIGlzIGltcG9ydGFudCBoZXJlIG9yIHRoZSBmaXJzdCBjaGlsZCBjb3VsZCBiZSBzb21lIHRleHQgKHdoaXRlc3BhY2UsIG9yIFxcbilcbiAgICAgIGNvbnN0IGZyYWcgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0ZW1wbGF0ZS50cmltKCkpO1xuICAgICAgY2F0ZWdvcnlOb2RlID0gZnJhZy5maXJzdENoaWxkO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYXRlZ29yeU5vZGUgPSBpbml0aWFsRWxlbWVudHNbY2F0ZWdvcnkuaWRdO1xuICAgIH1cblxuICAgIC8vIEFkZCBjYXRlZ29yeSBuYW1lIGFzIGEgdGV4dCBiZXR3ZWVuIHRoZSBjaGVja2JveCBhbmQgdGhlIHJhZGlvXG4gICAgY29uc3QgY2hlY2tib3hJbnB1dCA9IGNhdGVnb3J5Tm9kZS5xdWVyeVNlbGVjdG9yKFByb2R1Y3RDYXRlZ29yeU1hcC5jaGVja2JveElucHV0KTtcbiAgICBjaGVja2JveElucHV0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKFxuICAgICAgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2F0ZWdvcnkubmFtZSksXG4gICAgICBjaGVja2JveElucHV0LFxuICAgICk7XG5cbiAgICByZXR1cm4gY2F0ZWdvcnlOb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJhZGlvSW5wdXRcbiAgICovXG4gIHNlbGVjdGVkRGVmYXVsdENhdGVnb3J5KHJhZGlvSW5wdXQpIHtcbiAgICAvLyBVbmNoZWNrIGFsbCBvdGhlciByYWRpbyBpbnB1dHMgd2hlbiBvbmUgaXMgc2VsZWN0ZWRcbiAgICB0aGlzLmNhdGVnb3J5VHJlZS5xdWVyeVNlbGVjdG9yQWxsKFByb2R1Y3RDYXRlZ29yeU1hcC5yYWRpb0lucHV0KS5mb3JFYWNoKChyYWRpb1RyZWVFbGVtZW50KSA9PiB7XG4gICAgICBpZiAocmFkaW9UcmVlRWxlbWVudCAhPT0gcmFkaW9JbnB1dCkge1xuICAgICAgICByYWRpb1RyZWVFbGVtZW50LmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuY2F0ZWdvcnlUcmVlLnF1ZXJ5U2VsZWN0b3JBbGwoUHJvZHVjdENhdGVnb3J5TWFwLmNoZWNrYm94SW5wdXQpLmZvckVhY2goKGNoZWNrYm94VHJlZUVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IG1hdGVyaWFsQ2hlY2tib3ggPSBjaGVja2JveFRyZWVFbGVtZW50LnBhcmVudE5vZGUuY2xvc2VzdChQcm9kdWN0Q2F0ZWdvcnlNYXAubWF0ZXJpYWxDaGVja2JveCk7XG4gICAgICBtYXRlcmlhbENoZWNrYm94LmNsYXNzTGlzdC5yZW1vdmUoJ2Rpc2FibGVkJyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZURlZmF1bHRDaGVja2JveChyYWRpb0lucHV0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByYWRpb0lucHV0XG4gICAqL1xuICB1cGRhdGVEZWZhdWx0Q2hlY2tib3gocmFkaW9JbnB1dCkge1xuICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIHNlbGVjdGVkIGFzIGRlZmF1bHQgaXQgaXMgYWxzbyBhc3NvY2lhdGVkIGJ5IGRlZmluaXRpb25cbiAgICBjb25zdCBwYXJlbnRJdGVtID0gcmFkaW9JbnB1dC5wYXJlbnROb2RlLmNsb3Nlc3QoUHJvZHVjdENhdGVnb3J5TWFwLnRyZWVFbGVtZW50KTtcbiAgICBjb25zdCBjaGVja2JveCA9IHBhcmVudEl0ZW0ucXVlcnlTZWxlY3RvcihQcm9kdWN0Q2F0ZWdvcnlNYXAuY2hlY2tib3hJbnB1dCk7XG5cbiAgICAvLyBBIGRlZmF1bHQgY2F0ZWdvcnkgaXMgbmVjZXNzYXJpbHkgYXNzb2NpYXRlZCwgc28gZGlzcGxheWVkIGFzIGRpc2FibGVkICh3ZSBkbyBub3QgdXNlIHRoZSBkaXNhYmxlZFxuICAgIC8vIGF0dHJpYnV0ZSBiZWNhdXNlIGl0IHJlbW92ZXMgdGhlIGRhdGEgZnJvbSB0aGUgZm9ybSkuXG4gICAgY29uc3QgbWF0ZXJpYWxDaGVja2JveCA9IGNoZWNrYm94LnBhcmVudE5vZGUuY2xvc2VzdChQcm9kdWN0Q2F0ZWdvcnlNYXAubWF0ZXJpYWxDaGVja2JveCk7XG4gICAgbWF0ZXJpYWxDaGVja2JveC5jbGFzc0xpc3QuYWRkKCdkaXNhYmxlZCcpO1xuXG4gICAgdGhpcy51cGRhdGVDaGVja2JveChjaGVja2JveCwgdHJ1ZSk7XG4gICAgdGhpcy51cGRhdGVDYXRlZ29yaWVzVGFncygpO1xuICAgIHRoaXMuZXZlbnRFbWl0dGVyLmVtaXQoUHJvZHVjdEV2ZW50TWFwLnVwZGF0ZVN1Ym1pdEJ1dHRvblN0YXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBhbmQvcmVkdWNlIHRoZSBjYXRlZ29yeSB0cmVlXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwYW5kZWQgRm9yY2UgZXhwYW5kaW5nIGluc3RlYWQgb2YgdG9nZ2xlXG4gICAqL1xuICB0b2dnbGVBbGwoZXhwYW5kZWQpIHtcbiAgICB0aGlzLmV4cGFuZEFsbEJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gZXhwYW5kZWQgPyAnbm9uZScgOiAnYmxvY2snO1xuICAgIHRoaXMucmVkdWNlQWxsQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAhZXhwYW5kZWQgPyAnbm9uZScgOiAnYmxvY2snO1xuXG4gICAgdGhpcy5jYXRlZ29yaWVzQ29udGFpbmVyXG4gICAgICAucXVlcnlTZWxlY3RvckFsbChQcm9kdWN0Q2F0ZWdvcnlNYXAuY2hpbGRyZW5MaXN0KVxuICAgICAgLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgZS5jbGFzc0xpc3QudG9nZ2xlKCdkLW5vbmUnLCAhZXhwYW5kZWQpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmNhdGVnb3JpZXNDb250YWluZXJcbiAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKFByb2R1Y3RDYXRlZ29yeU1hcC5ldmVyeUl0ZW1zKVxuICAgICAgLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgZS5jbGFzc0xpc3QudG9nZ2xlKCdtb3JlJywgIWV4cGFuZGVkKTtcbiAgICAgICAgZS5jbGFzc0xpc3QudG9nZ2xlKCdsZXNzJywgZXhwYW5kZWQpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIHNlbGVjdGVkIGNhdGVnb3J5IChtYXRjaGVkIGJ5IGl0cyBJRCkgYW5kIHRvZ2dsZSB0aGUgdHJlZSBieSBnb2luZyB1cCB0aHJvdWdoIHRoZSBjYXRlZ29yeSdzIGFuY2VzdG9ycy5cbiAgICpcbiAgICogQHBhcmFtIHtpbnR9IGNhdGVnb3J5SWRcbiAgICovXG4gIHNlbGVjdENhdGVnb3J5KGNhdGVnb3J5SWQpIHtcbiAgICBjb25zdCBjaGVja2JveCA9IHRoaXMuY2F0ZWdvcmllc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFxuICAgICAgYFtuYW1lPVwiJHtQcm9kdWN0Q2F0ZWdvcnlNYXAuY2hlY2tib3hOYW1lKGNhdGVnb3J5SWQpfVwiXWAsXG4gICAgKTtcblxuICAgIGlmICghY2hlY2tib3gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVDaGVja2JveChjaGVja2JveCwgdHJ1ZSk7XG4gICAgdGhpcy5vcGVuQ2F0ZWdvcnlQYXJlbnRzKGNoZWNrYm94KTtcbiAgICB0aGlzLnVwZGF0ZUNhdGVnb3JpZXNUYWdzKCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY2hlY2tib3hcbiAgICovXG4gIG9wZW5DYXRlZ29yeVBhcmVudHMoY2hlY2tib3gpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIGNoZWNrYm94XG4gICAgbGV0IHBhcmVudEl0ZW0gPSBjaGVja2JveC5jbG9zZXN0KFByb2R1Y3RDYXRlZ29yeU1hcC50cmVlRWxlbWVudCk7XG5cbiAgICBpZiAocGFyZW50SXRlbSAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgKHBvdGVudGlhbCkgcGFyZW50IGVsZW1lbnRcbiAgICAgIHBhcmVudEl0ZW0gPSBwYXJlbnRJdGVtLnBhcmVudE5vZGUuY2xvc2VzdChQcm9kdWN0Q2F0ZWdvcnlNYXAudHJlZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHdoaWxlIChwYXJlbnRJdGVtICE9PSBudWxsICYmIHRoaXMuY2F0ZWdvcnlUcmVlLmNvbnRhaW5zKHBhcmVudEl0ZW0pKSB7XG4gICAgICBjb25zdCBjaGlsZHJlbkxpc3QgPSBwYXJlbnRJdGVtLnF1ZXJ5U2VsZWN0b3IoUHJvZHVjdENhdGVnb3J5TWFwLmNoaWxkcmVuTGlzdCk7XG5cbiAgICAgIGlmIChjaGlsZHJlbkxpc3QuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgcGFyZW50SXRlbS5jbGFzc0xpc3QuYWRkKCdsZXNzJyk7XG4gICAgICAgIHBhcmVudEl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnbW9yZScpO1xuICAgICAgICBwYXJlbnRJdGVtLnF1ZXJ5U2VsZWN0b3IoUHJvZHVjdENhdGVnb3J5TWFwLmNoaWxkcmVuTGlzdCkuY2xhc3NMaXN0LnJlbW92ZSgnZC1ub25lJyk7XG4gICAgICB9XG5cbiAgICAgIHBhcmVudEl0ZW0gPSBwYXJlbnRJdGVtLnBhcmVudE5vZGUuY2xvc2VzdChQcm9kdWN0Q2F0ZWdvcnlNYXAudHJlZUVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ludH0gY2F0ZWdvcnlJZFxuICAgKi9cbiAgdW5zZWxlY3RDYXRlZ29yeShjYXRlZ29yeUlkKSB7XG4gICAgY29uc3QgY2hlY2tib3ggPSB0aGlzLmNhdGVnb3JpZXNDb250YWluZXIucXVlcnlTZWxlY3RvcihcbiAgICAgIGBbbmFtZT1cIiR7UHJvZHVjdENhdGVnb3J5TWFwLmNoZWNrYm94TmFtZShjYXRlZ29yeUlkKX1cIl1gLFxuICAgICk7XG5cbiAgICBpZiAoIWNoZWNrYm94KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ2hlY2tib3goY2hlY2tib3gsIGZhbHNlKTtcbiAgICB0aGlzLm9wZW5DYXRlZ29yeVBhcmVudHMoY2hlY2tib3gpO1xuICAgIHRoaXMudXBkYXRlQ2F0ZWdvcmllc1RhZ3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUeXBlYWhlYWQgZGF0YSByZXF1aXJlIHRvIGhhdmUgb25seSBvbmUgYXJyYXkgbGV2ZWwsIHdlIGFsc28gYnVpbGQgdGhlIGJyZWFkY3J1bWIgYXMgd2UgZ28gdGhyb3VnaCB0aGVcbiAgICogY2F0ZWdvcmllcy5cbiAgICovXG4gIGluaXRUeXBlYWhlYWREYXRhKGRhdGEsIHBhcmVudEJyZWFkY3J1bWIpIHtcbiAgICBkYXRhLmZvckVhY2goKGNhdGVnb3J5KSA9PiB7XG4gICAgICBjYXRlZ29yeS5icmVhZGNydW1iID0gcGFyZW50QnJlYWRjcnVtYiA/IGAke3BhcmVudEJyZWFkY3J1bWJ9ID4gJHtjYXRlZ29yeS5uYW1lfWAgOiBjYXRlZ29yeS5uYW1lO1xuICAgICAgdGhpcy50eXBlYWhlYWREYXRhcy5wdXNoKGNhdGVnb3J5KTtcblxuICAgICAgaWYgKGNhdGVnb3J5LmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuaW5pdFR5cGVhaGVhZERhdGEoY2F0ZWdvcnkuY2hpbGRyZW4sIGNhdGVnb3J5LmJyZWFkY3J1bWIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaW5pdFR5cGVhaGVhZCgpIHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgQmxvb2Rob3VuZCh7XG4gICAgICBkYXR1bVRva2VuaXplcjogVG9rZW5pemVycy5vYmoubGV0dGVycyhcbiAgICAgICAgJ25hbWUnLFxuICAgICAgICAnYnJlYWRjcnVtYicsXG4gICAgICApLFxuICAgICAgcXVlcnlUb2tlbml6ZXI6IEJsb29kaG91bmQudG9rZW5pemVycy5ub253b3JkLFxuICAgICAgbG9jYWw6IHRoaXMudHlwZWFoZWFkRGF0YXMsXG4gICAgfSk7XG5cbiAgICBjb25zdCBkYXRhU2V0Q29uZmlnID0ge1xuICAgICAgc291cmNlLFxuICAgICAgZGlzcGxheTogJ2JyZWFkY3J1bWInLFxuICAgICAgdmFsdWU6ICdpZCcsXG4gICAgICBvblNlbGVjdDogKHNlbGVjdGVkSXRlbSwgZSwgJHNlYXJjaElucHV0KSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0Q2F0ZWdvcnkoc2VsZWN0ZWRJdGVtLmlkKTtcblxuICAgICAgICAvLyBUaGlzIHJlc2V0cyB0aGUgc2VhcmNoIGlucHV0IG9yIGVsc2UgcHJldmlvdXMgc2VhcmNoIGlzIGNhY2hlZCBhbmQgY2FuIGJlIGFkZGVkIGFnYWluXG4gICAgICAgICRzZWFyY2hJbnB1dC50eXBlYWhlYWQoJ3ZhbCcsICcnKTtcbiAgICAgIH0sXG4gICAgICBvbkNsb3NlOiAoZXZlbnQsICRzZWFyY2hJbnB1dCkgPT4ge1xuICAgICAgICAvLyBUaGlzIHJlc2V0cyB0aGUgc2VhcmNoIGlucHV0IG9yIGVsc2UgcHJldmlvdXMgc2VhcmNoIGlzIGNhY2hlZCBhbmQgY2FuIGJlIGFkZGVkIGFnYWluXG4gICAgICAgICRzZWFyY2hJbnB1dC50eXBlYWhlYWQoJ3ZhbCcsICcnKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICBkYXRhU2V0Q29uZmlnLnRlbXBsYXRlcyA9IHtcbiAgICAgIHN1Z2dlc3Rpb246IChpdGVtKSA9PiBgPGRpdiBjbGFzcz1cInB4LTJcIj4ke2l0ZW0uYnJlYWRjcnVtYn08L2Rpdj5gLFxuICAgIH07XG5cbiAgICBuZXcgQXV0b0NvbXBsZXRlU2VhcmNoKCQoUHJvZHVjdENhdGVnb3J5TWFwLnNlYXJjaElucHV0KSwgZGF0YVNldENvbmZpZyk7XG4gIH1cblxuICB1cGRhdGVDYXRlZ29yaWVzVGFncygpIHtcbiAgICBjb25zdCBjaGVja2VkQ2hlY2tib3hlcyA9IHRoaXMuY2F0ZWdvcnlUcmVlLnF1ZXJ5U2VsZWN0b3JBbGwoUHJvZHVjdENhdGVnb3J5TWFwLmNoZWNrZWRDaGVja2JveElucHV0cyk7XG4gICAgY29uc3QgdGFnc0NvbnRhaW5lciA9IHRoaXMuY2F0ZWdvcmllc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFByb2R1Y3RDYXRlZ29yeU1hcC50YWdzQ29udGFpbmVyKTtcbiAgICB0YWdzQ29udGFpbmVyLmlubmVySFRNTCA9ICcnO1xuICAgIGNvbnN0IGRlZmF1bHRDYXRlZ29yeUlkID0gdGhpcy5nZXREZWZhdWx0Q2F0ZWdvcnlJZCgpO1xuXG4gICAgY2hlY2tlZENoZWNrYm94ZXMuZm9yRWFjaCgoY2hlY2tib3hJbnB1dCkgPT4ge1xuICAgICAgY29uc3QgY2F0ZWdvcnlJZCA9IHRoaXMuZ2V0SWRGcm9tQ2hlY2tib3goY2hlY2tib3hJbnB1dCk7XG4gICAgICBjb25zdCBjYXRlZ29yeSA9IHRoaXMuZ2V0Q2F0ZWdvcnlCeUlkKGNhdGVnb3J5SWQpO1xuXG4gICAgICBpZiAoIWNhdGVnb3J5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVtb3ZlQ3Jvc3NUZW1wbGF0ZSA9IGRlZmF1bHRDYXRlZ29yeUlkICE9PSBjYXRlZ29yeUlkXG4gICAgICAgID8gYDxhIGNsYXNzPVwicHN0YWdnZXJDbG9zaW5nQ3Jvc3NcIiBocmVmPVwiI1wiIGRhdGEtaWQ9XCIke2NhdGVnb3J5LmlkfVwiPng8L2E+YFxuICAgICAgICA6ICcnO1xuICAgICAgY29uc3QgdGVtcGxhdGUgPSBgXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicHN0YWdnZXJUYWdcIj5cbiAgICAgICAgICAgIDxzcGFuIGRhdGEtaWQ9XCIke2NhdGVnb3J5LmlkfVwiIHRpdGxlPVwiJHtjYXRlZ29yeS5icmVhZGNydW1ifVwiPiR7Y2F0ZWdvcnkubmFtZX08L3NwYW4+XG4gICAgICAgICAgICAke3JlbW92ZUNyb3NzVGVtcGxhdGV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIGA7XG5cbiAgICAgIC8vIFRyaW0gaXMgaW1wb3J0YW50IGhlcmUgb3IgdGhlIGZpcnN0IGNoaWxkIGNvdWxkIGJlIHNvbWUgdGV4dCAod2hpdGVzcGFjZSwgb3IgXFxuKVxuICAgICAgY29uc3QgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHRlbXBsYXRlLnRyaW0oKSk7XG4gICAgICB0YWdzQ29udGFpbmVyLmFwcGVuZChmcmFnLmZpcnN0Q2hpbGQpO1xuICAgIH0pO1xuXG4gICAgdGFnc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcucHN0YWdnZXJDbG9zaW5nQ3Jvc3MnKS5mb3JFYWNoKChjbG9zZUxpbmspID0+IHtcbiAgICAgIGNsb3NlTGluay5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBjYXRlZ29yeUlkID0gTnVtYmVyKGV2ZW50LmN1cnJlbnRUYXJnZXQuZGF0YXNldC5pZCk7XG5cbiAgICAgICAgaWYgKGNhdGVnb3J5SWQgIT09IGRlZmF1bHRDYXRlZ29yeUlkKSB7XG4gICAgICAgICAgdGhpcy51bnNlbGVjdENhdGVnb3J5KGNhdGVnb3J5SWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRhZ3NDb250YWluZXIuY2xhc3NMaXN0LnRvZ2dsZSgnZC1ibG9jaycsIGNoZWNrZWRDaGVja2JveGVzLmxlbmd0aCA+IDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW50fSBjYXRlZ29yeUlkXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R8bnVsbH1cbiAgICovXG4gIGdldENhdGVnb3J5QnlJZChjYXRlZ29yeUlkKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoQ2F0ZWdvcnkoY2F0ZWdvcnlJZCwgdGhpcy5jYXRlZ29yaWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ludH0gY2F0ZWdvcnlJZFxuICAgKiBAcGFyYW0ge2FycmF5fSBjYXRlZ29yaWVzXG4gICAqIEByZXR1cm5zIHtPYmplY3R8bnVsbH1cbiAgICovXG4gIHNlYXJjaENhdGVnb3J5KGNhdGVnb3J5SWQsIGNhdGVnb3JpZXMpIHtcbiAgICBsZXQgc2VhcmNoZWRDYXRlZ29yeSA9IG51bGw7XG4gICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeSkgPT4ge1xuICAgICAgaWYgKGNhdGVnb3J5SWQgPT09IGNhdGVnb3J5LmlkKSB7XG4gICAgICAgIHNlYXJjaGVkQ2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlYXJjaGVkQ2F0ZWdvcnkgPT09IG51bGwgJiYgY2F0ZWdvcnkuY2hpbGRyZW4gJiYgY2F0ZWdvcnkuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICBzZWFyY2hlZENhdGVnb3J5ID0gdGhpcy5zZWFyY2hDYXRlZ29yeShjYXRlZ29yeUlkLCBjYXRlZ29yeS5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2VhcmNoZWRDYXRlZ29yeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfHVuZGVmaW5lZH1cbiAgICovXG4gIGdldERlZmF1bHRDYXRlZ29yeUlkKCkge1xuICAgIGNvbnN0IHJhZGlvSW5wdXQgPSB0aGlzLmNhdGVnb3J5VHJlZS5xdWVyeVNlbGVjdG9yKFByb2R1Y3RDYXRlZ29yeU1hcC5kZWZhdWx0UmFkaW9JbnB1dCk7XG5cbiAgICBpZiAoIXJhZGlvSW5wdXQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0SWRGcm9tUmFkaW8ocmFkaW9JbnB1dCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcmFkaW9JbnB1dFxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0SWRGcm9tUmFkaW8ocmFkaW9JbnB1dCkge1xuICAgIGNvbnN0IG1hdGNoZXMgPSByYWRpb0lucHV0Lm5hbWUubWF0Y2godGhpcy5yYWRpb0lkUmVnZXhwKTtcblxuICAgIHJldHVybiBOdW1iZXIobWF0Y2hlc1sxXSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY2hlY2tib3hJbnB1dFxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0SWRGcm9tQ2hlY2tib3goY2hlY2tib3hJbnB1dCkge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBjaGVja2JveElucHV0Lm5hbWUubWF0Y2godGhpcy5jaGVja2JveElkUmVnZXhwKTtcblxuICAgIHJldHVybiBOdW1iZXIobWF0Y2hlc1sxXSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY2hlY2tib3hJbnB1dFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNoZWNrZWRcbiAgICovXG4gIHVwZGF0ZUNoZWNrYm94KGNoZWNrYm94SW5wdXQsIGNoZWNrZWQpIHtcbiAgICBpZiAoY2hlY2tib3hJbnB1dC5jaGVja2VkICE9PSBjaGVja2VkKSB7XG4gICAgICBjaGVja2JveElucHV0LmNoZWNrZWQgPSBjaGVja2VkO1xuICAgICAgdGhpcy5ldmVudEVtaXR0ZXIuZW1pdChQcm9kdWN0RXZlbnRNYXAudXBkYXRlU3VibWl0QnV0dG9uU3RhdGUpO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7XG5pbXBvcnQgVnVlSTE4biBmcm9tICd2dWUtaTE4bic7XG5pbXBvcnQgUmVwbGFjZUZvcm1hdHRlciBmcm9tICdAdnVlL3BsdWdpbnMvdnVlLWkxOG4vcmVwbGFjZS1mb3JtYXR0ZXInO1xuaW1wb3J0IENvbWJpbmF0aW9uTW9kYWwgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9jb21iaW5hdGlvbi1tb2RhbC9Db21iaW5hdGlvbk1vZGFsLnZ1ZSc7XG5cblZ1ZS51c2UoVnVlSTE4bik7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbWJpbmF0aW9uTW9kYWxTZWxlY3RvclxuICogQHBhcmFtIHtpbnR9IHByb2R1Y3RJZFxuICogQHBhcmFtIHtPYmplY3R9IGV2ZW50RW1pdHRlclxuICpcbiAqIEByZXR1cm5zIHtWdWV8Q29tYmluZWRWdWVJbnN0YW5jZTxWdWUsIHtldmVudEVtaXR0ZXIsIHByb2R1Y3RJZH0sIG9iamVjdCwgb2JqZWN0LCBSZWNvcmQ8bmV2ZXIsIGFueT4+fG51bGx9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRDb21iaW5hdGlvbk1vZGFsKFxuICBjb21iaW5hdGlvbk1vZGFsU2VsZWN0b3IsXG4gIHByb2R1Y3RJZCxcbiAgZXZlbnRFbWl0dGVyLFxuKSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoY29tYmluYXRpb25Nb2RhbFNlbGVjdG9yKTtcbiAgY29uc3Qge2VtcHR5SW1hZ2V9ID0gY29udGFpbmVyLmRhdGFzZXQ7XG5cbiAgaWYgKCFjb250YWluZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHRyYW5zbGF0aW9ucyA9IEpTT04ucGFyc2UoY29udGFpbmVyLmRhdGFzZXQudHJhbnNsYXRpb25zKTtcbiAgY29uc3QgaTE4biA9IG5ldyBWdWVJMThuKHtcbiAgICBsb2NhbGU6ICdlbicsXG4gICAgZm9ybWF0dGVyOiBuZXcgUmVwbGFjZUZvcm1hdHRlcigpLFxuICAgIG1lc3NhZ2VzOiB7ZW46IHRyYW5zbGF0aW9uc30sXG4gIH0pO1xuXG4gIHJldHVybiBuZXcgVnVlKHtcbiAgICBlbDogY29tYmluYXRpb25Nb2RhbFNlbGVjdG9yLFxuICAgIHRlbXBsYXRlOlxuICAgICAgJzxjb21iaW5hdGlvbi1tb2RhbCA6cHJvZHVjdElkPXByb2R1Y3RJZCA6ZW1wdHlJbWFnZVVybD1cImVtcHR5SW1hZ2VcIiA6ZXZlbnRFbWl0dGVyPWV2ZW50RW1pdHRlciAvPicsXG4gICAgY29tcG9uZW50czoge0NvbWJpbmF0aW9uTW9kYWx9LFxuICAgIGkxOG4sXG4gICAgZGF0YToge1xuICAgICAgcHJvZHVjdElkLFxuICAgICAgZXZlbnRFbWl0dGVyLFxuICAgICAgZW1wdHlJbWFnZSxcbiAgICB9LFxuICB9KTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cbmltcG9ydCBWdWUgZnJvbSAndnVlJztcbmltcG9ydCBWdWVJMThuIGZyb20gJ3Z1ZS1pMThuJztcbmltcG9ydCBSZXBsYWNlRm9ybWF0dGVyIGZyb20gJ0B2dWUvcGx1Z2lucy92dWUtaTE4bi9yZXBsYWNlLWZvcm1hdHRlcic7XG5pbXBvcnQgRHJvcHpvbmUgZnJvbSAnLi9Ecm9wem9uZS52dWUnO1xuXG5WdWUudXNlKFZ1ZUkxOG4pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0RHJvcHpvbmUoaW1hZ2VzQ29udGFpbmVyU2VsZWN0b3IpIHtcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihpbWFnZXNDb250YWluZXJTZWxlY3Rvcik7XG5cbiAgY29uc3QgdHJhbnNsYXRpb25zID0gSlNPTi5wYXJzZShjb250YWluZXIuZGF0YXNldC50cmFuc2xhdGlvbnMpO1xuICBjb25zdCBpMThuID0gbmV3IFZ1ZUkxOG4oe1xuICAgIGxvY2FsZTogJ2VuJyxcbiAgICBmb3JtYXR0ZXI6IG5ldyBSZXBsYWNlRm9ybWF0dGVyKCksXG4gICAgbWVzc2FnZXM6IHtlbjogdHJhbnNsYXRpb25zfSxcbiAgfSk7XG5cbiAgY29uc3QgcHJvZHVjdElkID0gTnVtYmVyKGNvbnRhaW5lci5kYXRhc2V0LnByb2R1Y3RJZCk7XG4gIGNvbnN0IGxvY2FsZXMgPSBKU09OLnBhcnNlKGNvbnRhaW5lci5kYXRhc2V0LmxvY2FsZXMpO1xuXG4gIHJldHVybiBuZXcgVnVlKHtcbiAgICBlbDogaW1hZ2VzQ29udGFpbmVyU2VsZWN0b3IsXG4gICAgdGVtcGxhdGU6ICc8ZHJvcHpvbmUgOnByb2R1Y3RJZD1wcm9kdWN0SWQgOmxvY2FsZXM9bG9jYWxlcyA6dG9rZW49dG9rZW4gOmZvcm1OYW1lPWZvcm1OYW1lIC8+JyxcbiAgICBjb21wb25lbnRzOiB7RHJvcHpvbmV9LFxuICAgIGkxOG4sXG4gICAgZGF0YToge1xuICAgICAgbG9jYWxlcyxcbiAgICAgIHByb2R1Y3RJZCxcbiAgICAgIHRva2VuOiBjb250YWluZXIuZGF0YXNldC50b2tlbixcbiAgICAgIGZvcm1OYW1lOiBjb250YWluZXIuZGF0YXNldC5mb3JtTmFtZSxcbiAgICB9LFxuICB9KTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuaW1wb3J0IEZpbHRlcnMgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9maWx0ZXJzL0ZpbHRlcnMnO1xuaW1wb3J0IFZ1ZUkxOG4gZnJvbSAndnVlLWkxOG4nO1xuaW1wb3J0IFJlcGxhY2VGb3JtYXR0ZXIgZnJvbSAnQHZ1ZS9wbHVnaW5zL3Z1ZS1pMThuL3JlcGxhY2UtZm9ybWF0dGVyJztcblxuVnVlLnVzZShWdWVJMThuKTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tYmluYXRpb25zRmlsdGVyc1NlbGVjdG9yXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gZXZlbnRFbWl0dGVyXG4gKiBAcGFyYW0ge2FycmF5fSBmaWx0ZXJzXG4gKiBAcmV0dXJucyB7VnVlIHwgQ29tYmluZWRWdWVJbnN0YW5jZTxWdWUsIHtldmVudEVtaXR0ZXIsIGZpbHRlcnN9LCBvYmplY3QsIG9iamVjdCwgUmVjb3JkPG5ldmVyLCBhbnk+Pn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdENvbWJpbmF0aW9uc0ZpbHRlcnMoY29tYmluYXRpb25zRmlsdGVyc1NlbGVjdG9yLCBldmVudEVtaXR0ZXIsIGZpbHRlcnMpIHtcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihjb21iaW5hdGlvbnNGaWx0ZXJzU2VsZWN0b3IpO1xuXG4gIGNvbnN0IHRyYW5zbGF0aW9ucyA9IEpTT04ucGFyc2UoY29udGFpbmVyLmRhdGFzZXQudHJhbnNsYXRpb25zKTtcbiAgY29uc3QgaTE4biA9IG5ldyBWdWVJMThuKHtcbiAgICBsb2NhbGU6ICdlbicsXG4gICAgZm9ybWF0dGVyOiBuZXcgUmVwbGFjZUZvcm1hdHRlcigpLFxuICAgIG1lc3NhZ2VzOiB7ZW46IHRyYW5zbGF0aW9uc30sXG4gIH0pO1xuXG4gIHJldHVybiBuZXcgVnVlKHtcbiAgICBlbDogY29tYmluYXRpb25zRmlsdGVyc1NlbGVjdG9yLFxuICAgIHRlbXBsYXRlOiAnPGZpbHRlcnMgOmZpbHRlcnM9ZmlsdGVycyA6ZXZlbnRFbWl0dGVyPWV2ZW50RW1pdHRlciAvPicsXG4gICAgY29tcG9uZW50czoge0ZpbHRlcnN9LFxuICAgIGkxOG4sXG4gICAgZGF0YToge1xuICAgICAgZmlsdGVycyxcbiAgICAgIGV2ZW50RW1pdHRlcixcbiAgICB9LFxuICB9KTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cbmltcG9ydCBWdWUgZnJvbSAndnVlJztcbmltcG9ydCBWdWVJMThuIGZyb20gJ3Z1ZS1pMThuJztcbmltcG9ydCBSZXBsYWNlRm9ybWF0dGVyIGZyb20gJ0B2dWUvcGx1Z2lucy92dWUtaTE4bi9yZXBsYWNlLWZvcm1hdHRlcic7XG5pbXBvcnQgQ29tYmluYXRpb25HZW5lcmF0b3IgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9nZW5lcmF0b3IvQ29tYmluYXRpb25HZW5lcmF0b3IudnVlJztcblxuVnVlLnVzZShWdWVJMThuKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdENvbWJpbmF0aW9uR2VuZXJhdG9yKGNvbWJpbmF0aW9uR2VuZXJhdG9yU2VsZWN0b3IsIGV2ZW50RW1pdHRlciwgcHJvZHVjdElkKSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoY29tYmluYXRpb25HZW5lcmF0b3JTZWxlY3Rvcik7XG5cbiAgY29uc3QgdHJhbnNsYXRpb25zID0gSlNPTi5wYXJzZShjb250YWluZXIuZGF0YXNldC50cmFuc2xhdGlvbnMpO1xuICBjb25zdCBpMThuID0gbmV3IFZ1ZUkxOG4oe1xuICAgIGxvY2FsZTogJ2VuJyxcbiAgICBmb3JtYXR0ZXI6IG5ldyBSZXBsYWNlRm9ybWF0dGVyKCksXG4gICAgbWVzc2FnZXM6IHtlbjogdHJhbnNsYXRpb25zfSxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBWdWUoe1xuICAgIGVsOiBjb21iaW5hdGlvbkdlbmVyYXRvclNlbGVjdG9yLFxuICAgIHRlbXBsYXRlOiAnPGNvbWJpbmF0aW9uLWdlbmVyYXRvciA6cHJvZHVjdElkPXByb2R1Y3RJZCA6ZXZlbnRFbWl0dGVyPWV2ZW50RW1pdHRlciAvPicsXG4gICAgY29tcG9uZW50czoge0NvbWJpbmF0aW9uR2VuZXJhdG9yfSxcbiAgICBpMThuLFxuICAgIGRhdGE6IHtcbiAgICAgIHByb2R1Y3RJZCxcbiAgICAgIGV2ZW50RW1pdHRlcixcbiAgICB9LFxuICB9KTtcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IFByb2R1Y3RNYXAgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvcHJvZHVjdC1tYXAnO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgJGRlZmF1bHRBcnJvd1dpZHRoID0gMzU7XG4gIGNvbnN0ICRhcnJvdyA9ICQoUHJvZHVjdE1hcC5qc0Fycm93KTtcbiAgY29uc3QgJHRhYnMgPSAkKFByb2R1Y3RNYXAuanNUYWJzKTtcbiAgY29uc3QgJG5hdlRhYnMgPSAkKFByb2R1Y3RNYXAuanNOYXZUYWJzKTtcblxuICBsZXQgJHBvc2l0aW9ucztcbiAgbGV0ICRtb3ZlVG8gPSAwO1xuICBsZXQgJHRhYldpZHRoID0gMDtcbiAgbGV0ICRuYXZXaWR0aCA9ICRkZWZhdWx0QXJyb3dXaWR0aDtcbiAgbGV0ICR3aWR0aFdpdGhUYWJzID0gMDtcblxuICAkbmF2VGFicy5maW5kKCdsaScpLmVhY2goKGluZGV4LCBpdGVtKSA9PiB7XG4gICAgJG5hdldpZHRoICs9ICQoaXRlbSkud2lkdGgoKTtcbiAgfSk7XG5cbiAgJHdpZHRoV2l0aFRhYnMgPSAkbmF2V2lkdGggKyAkZGVmYXVsdEFycm93V2lkdGggKiAyO1xuXG4gICRuYXZUYWJzLndpZHRoKCR3aWR0aFdpdGhUYWJzKTtcblxuICAkbmF2VGFicy5maW5kKFByb2R1Y3RNYXAudG9nZ2xlVGFiKS5vbignY2xpY2snLCAoZSkgPT4ge1xuICAgIGlmICghJChlLnRhcmdldCkuaGFzQ2xhc3MoJ2FjdGl2ZScpKSB7XG4gICAgICAkKFByb2R1Y3RNYXAuZm9ybUNvbnRlbnRUYWIpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICB9XG4gIH0pO1xuXG4gICRhcnJvdy5vbignY2xpY2snLCAoZSkgPT4ge1xuICAgIGlmICgkYXJyb3cuaXMoJzp2aXNpYmxlJykpIHtcbiAgICAgICR0YWJXaWR0aCA9ICR0YWJzLndpZHRoKCk7XG4gICAgICAkcG9zaXRpb25zID0gJG5hdlRhYnMucG9zaXRpb24oKTtcblxuICAgICAgJG1vdmVUbyA9ICctPTAnO1xuICAgICAgaWYgKCQoZS5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygncmlnaHQtYXJyb3cnKSkge1xuICAgICAgICBpZiAoJHRhYldpZHRoIC0gJHBvc2l0aW9ucy5sZWZ0IDwgJG5hdldpZHRoKSB7XG4gICAgICAgICAgJG1vdmVUbyA9IGAtPSR7JHRhYldpZHRofWA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoJHBvc2l0aW9ucy5sZWZ0IDwgJGRlZmF1bHRBcnJvd1dpZHRoKSB7XG4gICAgICAgICRtb3ZlVG8gPSBgKz0keyR0YWJXaWR0aH1gO1xuICAgICAgfVxuXG4gICAgICAkbmF2VGFicy5hbmltYXRlKFxuICAgICAgICB7XG4gICAgICAgICAgbGVmdDogJG1vdmVUbyxcbiAgICAgICAgfSxcbiAgICAgICAgNDAwLFxuICAgICAgICAnZWFzZU91dFF1YWQnLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgJChQcm9kdWN0TWFwLmxlZnRBcnJvdykudG9nZ2xlQ2xhc3MoJ3Zpc2libGUnLCAkKGUuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoJ3JpZ2h0LWFycm93JykpO1xuICAgICAgICAgICQoUHJvZHVjdE1hcC5yaWdodEFycm93KS50b2dnbGVDbGFzcygndmlzaWJsZScsICEkKGUuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoJ3JpZ2h0LWFycm93JykpO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgUHJvZHVjdE1hcCBmcm9tICdAcGFnZXMvcHJvZHVjdC9wcm9kdWN0LW1hcCc7XG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBsaXN0IG9mIGNvbWJpbmF0aW9ucyBpbiBwcm9kdWN0IGVkaXQgcGFnZVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21iaW5hdGlvbnNHcmlkUmVuZGVyZXIge1xuICAvKipcbiAgICogQHJldHVybnMge3tyZW5kZXI6IChmdW5jdGlvbigqPSk6IHZvaWQpfX1cbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuJGNvbWJpbmF0aW9uc1RhYmxlID0gJChQcm9kdWN0TWFwLmNvbWJpbmF0aW9ucy5jb21iaW5hdGlvbnNUYWJsZSk7XG4gICAgdGhpcy4kY29tYmluYXRpb25zVGFibGVCb2R5ID0gJChQcm9kdWN0TWFwLmNvbWJpbmF0aW9ucy5jb21iaW5hdGlvbnNUYWJsZUJvZHkpO1xuICAgIHRoaXMuJGxvYWRpbmdTcGlubmVyID0gJChQcm9kdWN0TWFwLmNvbWJpbmF0aW9ucy5sb2FkaW5nU3Bpbm5lcik7XG4gICAgdGhpcy5wcm90b3R5cGVUZW1wbGF0ZSA9IHRoaXMuJGNvbWJpbmF0aW9uc1RhYmxlLmRhdGEoJ3Byb3RvdHlwZScpO1xuICAgIHRoaXMucHJvdG90eXBlTmFtZSA9IHRoaXMuJGNvbWJpbmF0aW9uc1RhYmxlLmRhdGEoJ3Byb3RvdHlwZU5hbWUnKTtcblxuICAgIHJldHVybiB7XG4gICAgICByZW5kZXI6IChkYXRhKSA9PiB0aGlzLnJlbmRlcihkYXRhKSxcbiAgICAgIHRvZ2dsZUxvYWRpbmc6IChsb2FkaW5nKSA9PiB0aGlzLnRvZ2dsZUxvYWRpbmcobG9hZGluZyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YSBleHBlY3RlZCBzdHJ1Y3R1cmU6IHtjb21iaW5hdGlvbnM6IFt7T2JqZWN0fSwge09iamVjdH0uLi5dLCB0b3RhbDoge051bWJlcn19XG4gICAqL1xuICByZW5kZXIoZGF0YSkge1xuICAgIHRoaXMucmVuZGVyQ29tYmluYXRpb25zKGRhdGEuY29tYmluYXRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGxvYWRpbmdcbiAgICovXG4gIHRvZ2dsZUxvYWRpbmcobG9hZGluZykge1xuICAgIHRoaXMuJGxvYWRpbmdTcGlubmVyLnRvZ2dsZShsb2FkaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0FycmF5fSBjb21iaW5hdGlvbnNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlbmRlckNvbWJpbmF0aW9ucyhjb21iaW5hdGlvbnMpIHtcbiAgICB0aGlzLiRjb21iaW5hdGlvbnNUYWJsZUJvZHkuZW1wdHkoKTtcblxuICAgIGxldCByb3dJbmRleCA9IDA7XG4gICAgY29tYmluYXRpb25zLmZvckVhY2goKGNvbWJpbmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCAkcm93ID0gJCh0aGlzLmdldFByb3RvdHlwZVJvdyhyb3dJbmRleCkpO1xuXG4gICAgICAvLyBmaWxsIGlucHV0c1xuICAgICAgY29uc3QgJGNvbWJpbmF0aW9uQ2hlY2tib3ggPSAkKFByb2R1Y3RNYXAuY29tYmluYXRpb25zLnRhYmxlUm93LmNvbWJpbmF0aW9uQ2hlY2tib3gocm93SW5kZXgpLCAkcm93KTtcbiAgICAgIGNvbnN0ICRjb21iaW5hdGlvbklkSW5wdXQgPSAkKFByb2R1Y3RNYXAuY29tYmluYXRpb25zLnRhYmxlUm93LmNvbWJpbmF0aW9uSWRJbnB1dChyb3dJbmRleCksICRyb3cpO1xuICAgICAgY29uc3QgJGNvbWJpbmF0aW9uTmFtZUlucHV0ID0gJChQcm9kdWN0TWFwLmNvbWJpbmF0aW9ucy50YWJsZVJvdy5jb21iaW5hdGlvbk5hbWVJbnB1dChyb3dJbmRleCksICRyb3cpO1xuICAgICAgY29uc3QgJHF1YW50aXR5SW5wdXQgPSAkKFByb2R1Y3RNYXAuY29tYmluYXRpb25zLnRhYmxlUm93LnF1YW50aXR5SW5wdXQocm93SW5kZXgpLCAkcm93KTtcbiAgICAgIGNvbnN0ICRpbXBhY3RPblByaWNlSW5wdXQgPSAkKFByb2R1Y3RNYXAuY29tYmluYXRpb25zLnRhYmxlUm93LmltcGFjdE9uUHJpY2VJbnB1dChyb3dJbmRleCksICRyb3cpO1xuICAgICAgY29uc3QgJHJlZmVyZW5jZUlucHV0ID0gJChQcm9kdWN0TWFwLmNvbWJpbmF0aW9ucy50YWJsZVJvdy5yZWZlcmVuY2VJbnB1dChyb3dJbmRleCksICRyb3cpO1xuICAgICAgLy8gQHRvZG8gZmluYWwgcHJpY2Ugc2hvdWxkIGJlIGNhbGN1bGF0ZWQgYmFzZWQgb24gcHJpY2UgaW1wYWN0IGFuZCBwcm9kdWN0IHByaWNlLFxuICAgICAgLy8gICAgc28gaXQgZG9lc250IG5lZWQgdG8gYmUgaW4gYXBpIHJlc3BvbnNlXG4gICAgICBjb25zdCAkZmluYWxQcmljZUlucHV0ID0gJChQcm9kdWN0TWFwLmNvbWJpbmF0aW9ucy50YWJsZVJvdy5maW5hbFByaWNlVGVJbnB1dChyb3dJbmRleCksICRyb3cpO1xuICAgICAgJGNvbWJpbmF0aW9uSWRJbnB1dC52YWwoY29tYmluYXRpb24uaWQpO1xuICAgICAgJGNvbWJpbmF0aW9uTmFtZUlucHV0LnZhbChjb21iaW5hdGlvbi5uYW1lKTtcbiAgICAgIC8vIFRoaXMgYWRkcyB0aGUgSUQgaW4gdGhlIGNoZWNrYm94IGxhYmVsXG4gICAgICAkY29tYmluYXRpb25DaGVja2JveC5jbG9zZXN0KCdsYWJlbCcpLmFwcGVuZChjb21iaW5hdGlvbi5pZCk7XG4gICAgICAvLyBUaGlzIGFkZHMgYSB0ZXh0IGFmdGVyIHRoZSBjZWxsIGNoaWxkcmVuIChkbyBub3QgdXNlIHRleHQgd2hpY2ggcmVwbGFjZXMgZXZlcnl0aGluZylcbiAgICAgICRjb21iaW5hdGlvbk5hbWVJbnB1dC5jbG9zZXN0KCd0ZCcpLmFwcGVuZChjb21iaW5hdGlvbi5uYW1lKTtcbiAgICAgICRmaW5hbFByaWNlSW5wdXQuY2xvc2VzdCgndGQnKS5hcHBlbmQoY29tYmluYXRpb24uZmluYWxQcmljZVRlKTtcbiAgICAgICRyZWZlcmVuY2VJbnB1dC52YWwoY29tYmluYXRpb24ucmVmZXJlbmNlKTtcbiAgICAgICRyZWZlcmVuY2VJbnB1dC5kYXRhKCdpbml0aWFsLXZhbHVlJywgY29tYmluYXRpb24ucmVmZXJlbmNlKTtcbiAgICAgICRxdWFudGl0eUlucHV0LnZhbChjb21iaW5hdGlvbi5xdWFudGl0eSk7XG4gICAgICAkcXVhbnRpdHlJbnB1dC5kYXRhKCdpbml0aWFsLXZhbHVlJywgY29tYmluYXRpb24ucXVhbnRpdHkpO1xuICAgICAgJGltcGFjdE9uUHJpY2VJbnB1dC52YWwoY29tYmluYXRpb24uaW1wYWN0T25QcmljZSk7XG4gICAgICAkaW1wYWN0T25QcmljZUlucHV0LmRhdGEoJ2luaXRpYWwtdmFsdWUnLCBjb21iaW5hdGlvbi5pbXBhY3RPblByaWNlKTtcbiAgICAgICQoUHJvZHVjdE1hcC5jb21iaW5hdGlvbnMudGFibGVSb3cuZWRpdEJ1dHRvbihyb3dJbmRleCksICRyb3cpLmRhdGEoJ2lkJywgY29tYmluYXRpb24uaWQpO1xuICAgICAgJChQcm9kdWN0TWFwLmNvbWJpbmF0aW9ucy50YWJsZVJvdy5kZWxldGVCdXR0b24ocm93SW5kZXgpLCAkcm93KS5kYXRhKCdpZCcsIGNvbWJpbmF0aW9uLmlkKTtcbiAgICAgICQoUHJvZHVjdE1hcC5jb21iaW5hdGlvbnMudGFibGVSb3cuY29tYmluYXRpb25JbWcsICRyb3cpXG4gICAgICAgIC5hdHRyKCdzcmMnLCBjb21iaW5hdGlvbi5pbWFnZVVybClcbiAgICAgICAgLmF0dHIoJ2FsdCcsIGNvbWJpbmF0aW9uLm5hbWUpO1xuXG4gICAgICBpZiAoY29tYmluYXRpb24uaXNEZWZhdWx0KSB7XG4gICAgICAgICQoUHJvZHVjdE1hcC5jb21iaW5hdGlvbnMudGFibGVSb3cuaXNEZWZhdWx0SW5wdXQocm93SW5kZXgpLCAkcm93KS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuJGNvbWJpbmF0aW9uc1RhYmxlQm9keS5hcHBlbmQoJHJvdyk7XG4gICAgICByb3dJbmRleCArPSAxO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSByb3dJbmRleFxuICAgKlxuICAgKiBAcmV0dXJucyB7U3RyaW5nfVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0UHJvdG90eXBlUm93KHJvd0luZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdG90eXBlVGVtcGxhdGUucmVwbGFjZShuZXcgUmVnRXhwKHRoaXMucHJvdG90eXBlTmFtZSwgJ2cnKSwgcm93SW5kZXgpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmltcG9ydCBQcm9kdWN0TWFwIGZyb20gJ0BwYWdlcy9wcm9kdWN0L3Byb2R1Y3QtbWFwJztcbmltcG9ydCBDb21iaW5hdGlvbnNHcmlkUmVuZGVyZXIgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvZWRpdC9jb21iaW5hdGlvbnMtZ3JpZC1yZW5kZXJlcic7XG5pbXBvcnQgQ29tYmluYXRpb25zU2VydmljZSBmcm9tICdAcGFnZXMvcHJvZHVjdC9zZXJ2aWNlcy9jb21iaW5hdGlvbnMtc2VydmljZSc7XG5pbXBvcnQgRHluYW1pY1BhZ2luYXRvciBmcm9tICdAY29tcG9uZW50cy9wYWdpbmF0aW9uL2R5bmFtaWMtcGFnaW5hdG9yJztcbmltcG9ydCBTdWJtaXR0YWJsZUlucHV0IGZyb20gJ0Bjb21wb25lbnRzL2Zvcm0vc3VibWl0dGFibGUtaW5wdXQnO1xuaW1wb3J0IFByb2R1Y3RFdmVudE1hcCBmcm9tICdAcGFnZXMvcHJvZHVjdC9wcm9kdWN0LWV2ZW50LW1hcCc7XG5pbXBvcnQgaW5pdENvbWJpbmF0aW9uTW9kYWwgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9jb21iaW5hdGlvbi1tb2RhbCc7XG5pbXBvcnQgaW5pdEZpbHRlcnMgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9maWx0ZXJzJztcbmltcG9ydCBDb25maXJtTW9kYWwgZnJvbSAnQGNvbXBvbmVudHMvbW9kYWwnO1xuaW1wb3J0IGluaXRDb21iaW5hdGlvbkdlbmVyYXRvciBmcm9tICdAcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2dlbmVyYXRvcic7XG5pbXBvcnQge2dldFByb2R1Y3RBdHRyaWJ1dGVHcm91cHN9IGZyb20gJ0BwYWdlcy9wcm9kdWN0L3NlcnZpY2VzL2F0dHJpYnV0ZS1ncm91cHMnO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5jb25zdCBDb21iaW5hdGlvbkV2ZW50cyA9IFByb2R1Y3RFdmVudE1hcC5jb21iaW5hdGlvbnM7XG5jb25zdCBDb21iaW5hdGlvbnNNYXAgPSBQcm9kdWN0TWFwLmNvbWJpbmF0aW9ucztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tYmluYXRpb25zTWFuYWdlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge2ludH0gcHJvZHVjdElkXG4gICAqIEByZXR1cm5zIHt7fX1cbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb2R1Y3RJZCkge1xuICAgIHRoaXMucHJvZHVjdElkID0gcHJvZHVjdElkO1xuICAgIHRoaXMuZXZlbnRFbWl0dGVyID0gd2luZG93LnByZXN0YXNob3AuaW5zdGFuY2UuZXZlbnRFbWl0dGVyO1xuICAgIHRoaXMuJHByb2R1Y3RGb3JtID0gJChQcm9kdWN0TWFwLnByb2R1Y3RGb3JtKTtcbiAgICB0aGlzLiRjb21iaW5hdGlvbnNDb250YWluZXIgPSAkKFxuICAgICAgUHJvZHVjdE1hcC5jb21iaW5hdGlvbnMuY29tYmluYXRpb25zQ29udGFpbmVyLFxuICAgICk7XG4gICAgdGhpcy5jb21iaW5hdGlvbklkSW5wdXRzU2VsZWN0b3IgPSBQcm9kdWN0TWFwLmNvbWJpbmF0aW9ucy5jb21iaW5hdGlvbklkSW5wdXRzU2VsZWN0b3I7XG4gICAgdGhpcy4kZXh0ZXJuYWxDb21iaW5hdGlvblRhYiA9ICQoXG4gICAgICBQcm9kdWN0TWFwLmNvbWJpbmF0aW9ucy5leHRlcm5hbENvbWJpbmF0aW9uVGFiLFxuICAgICk7XG5cbiAgICB0aGlzLiRwcmVsb2FkZXIgPSAkKFByb2R1Y3RNYXAuY29tYmluYXRpb25zLnByZWxvYWRlcik7XG4gICAgdGhpcy4kcGFnaW5hdGVkTGlzdCA9ICQoQ29tYmluYXRpb25zTWFwLmNvbWJpbmF0aW9uc1BhZ2luYXRlZExpc3QpO1xuICAgIHRoaXMuJGVtcHR5U3RhdGUgPSAkKENvbWJpbmF0aW9uc01hcC5lbXB0eVN0YXRlKTtcblxuICAgIHRoaXMucGFnaW5hdG9yID0gbnVsbDtcbiAgICB0aGlzLmNvbWJpbmF0aW9uc1JlbmRlcmVyID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlcnNBcHAgPSBudWxsO1xuICAgIHRoaXMuY29tYmluYXRpb25Nb2RhbEFwcCA9IG51bGw7XG4gICAgdGhpcy5jb21iaW5hdGlvbkdlbmVyYXRvckFwcCA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgdGhpcy5jb21iaW5hdGlvbnNTZXJ2aWNlID0gbmV3IENvbWJpbmF0aW9uc1NlcnZpY2UodGhpcy5wcm9kdWN0SWQpO1xuICAgIHRoaXMucHJvZHVjdEF0dHJpYnV0ZUdyb3VwcyA9IFtdO1xuXG4gICAgdGhpcy5pbml0KCk7XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGluaXQoKSB7XG4gICAgLy8gUGFnaW5hdGUgdG8gZmlyc3QgcGFnZSB3aGVuIHRhYiBpcyBzaG93blxuICAgIHRoaXMuJHByb2R1Y3RGb3JtXG4gICAgICAuZmluZChDb21iaW5hdGlvbnNNYXAubmF2aWdhdGlvblRhYilcbiAgICAgIC5vbignc2hvd24uYnMudGFiJywgKCkgPT4gdGhpcy5zaG93Q29tYmluYXRpb25UYWIoKSk7XG4gICAgdGhpcy4kcHJvZHVjdEZvcm1cbiAgICAgIC5maW5kKENvbWJpbmF0aW9uc01hcC5uYXZpZ2F0aW9uVGFiKVxuICAgICAgLm9uKCdoaWRkZW4uYnMudGFiJywgKCkgPT4gdGhpcy5oaWRlQ29tYmluYXRpb25UYWIoKSk7XG5cbiAgICAvLyBGaW5hbGx5IHdhdGNoIGV2ZW50cyByZWxhdGVkIHRvIGNvbWJpbmF0aW9uIGxpc3RpbmdcbiAgICB0aGlzLndhdGNoRXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNob3dDb21iaW5hdGlvblRhYigpIHtcbiAgICB0aGlzLiRleHRlcm5hbENvbWJpbmF0aW9uVGFiLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcbiAgICB0aGlzLmZpcnN0SW5pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBoaWRlQ29tYmluYXRpb25UYWIoKSB7XG4gICAgdGhpcy4kZXh0ZXJuYWxDb21iaW5hdGlvblRhYi5hZGRDbGFzcygnZC1ub25lJyk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGZpcnN0SW5pdCgpIHtcbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgdGhpcy5jb21iaW5hdGlvbkdlbmVyYXRvckFwcCA9IGluaXRDb21iaW5hdGlvbkdlbmVyYXRvcihcbiAgICAgIENvbWJpbmF0aW9uc01hcC5jb21iaW5hdGlvbnNHZW5lcmF0b3JDb250YWluZXIsXG4gICAgICB0aGlzLmV2ZW50RW1pdHRlcixcbiAgICAgIHRoaXMucHJvZHVjdElkLFxuICAgICk7XG4gICAgdGhpcy5jb21iaW5hdGlvbk1vZGFsQXBwID0gaW5pdENvbWJpbmF0aW9uTW9kYWwoXG4gICAgICBDb21iaW5hdGlvbnNNYXAuZWRpdE1vZGFsLFxuICAgICAgdGhpcy5wcm9kdWN0SWQsXG4gICAgICB0aGlzLmV2ZW50RW1pdHRlcixcbiAgICApO1xuICAgIHRoaXMuZmlsdGVyc0FwcCA9IGluaXRGaWx0ZXJzKFxuICAgICAgQ29tYmluYXRpb25zTWFwLmNvbWJpbmF0aW9uc0ZpbHRlcnNDb250YWluZXIsXG4gICAgICB0aGlzLmV2ZW50RW1pdHRlcixcbiAgICAgIHRoaXMucHJvZHVjdEF0dHJpYnV0ZUdyb3VwcyxcbiAgICApO1xuICAgIHRoaXMuaW5pdFBhZ2luYXRlZExpc3QoKTtcblxuICAgIHRoaXMucmVmcmVzaENvbWJpbmF0aW9uTGlzdCh0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZpcnN0VGltZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFzeW5jIHJlZnJlc2hDb21iaW5hdGlvbkxpc3QoZmlyc3RUaW1lKSB7XG4gICAgLy8gUHJlbG9hZGVyIGlzIG9ubHkgc2hvd24gb24gZmlyc3QgbG9hZFxuICAgIHRoaXMuJHByZWxvYWRlci50b2dnbGVDbGFzcygnZC1ub25lJywgIWZpcnN0VGltZSk7XG4gICAgdGhpcy4kcGFnaW5hdGVkTGlzdC50b2dnbGVDbGFzcygnZC1ub25lJywgZmlyc3RUaW1lKTtcbiAgICB0aGlzLiRlbXB0eVN0YXRlLmFkZENsYXNzKCdkLW5vbmUnKTtcblxuICAgIC8vIFdoZW4gYXR0cmlidXRlcyBhcmUgcmVmcmVzaGVkIHdlIHNob3cgZmlyc3QgcGFnZVxuICAgIHRoaXMucGFnaW5hdG9yLnBhZ2luYXRlKDEpO1xuXG4gICAgLy8gV2FpdCBmb3IgcHJvZHVjdCBhdHRyaWJ1dGVzIHRvIGFkYXB0IHJlbmRlcmluZyBkZXBlbmRpbmcgb24gdGhlaXIgbnVtYmVyXG4gICAgdGhpcy5wcm9kdWN0QXR0cmlidXRlR3JvdXBzID0gYXdhaXQgZ2V0UHJvZHVjdEF0dHJpYnV0ZUdyb3VwcyhcbiAgICAgIHRoaXMucHJvZHVjdElkLFxuICAgICk7XG4gICAgdGhpcy5maWx0ZXJzQXBwLmZpbHRlcnMgPSB0aGlzLnByb2R1Y3RBdHRyaWJ1dGVHcm91cHM7XG4gICAgdGhpcy5ldmVudEVtaXR0ZXIuZW1pdChDb21iaW5hdGlvbkV2ZW50cy5jbGVhckZpbHRlcnMpO1xuICAgIHRoaXMuJHByZWxvYWRlci5hZGRDbGFzcygnZC1ub25lJyk7XG5cbiAgICBjb25zdCBoYXNDb21iaW5hdGlvbnMgPSB0aGlzLnByb2R1Y3RBdHRyaWJ1dGVHcm91cHMgJiYgdGhpcy5wcm9kdWN0QXR0cmlidXRlR3JvdXBzLmxlbmd0aDtcbiAgICB0aGlzLiRwYWdpbmF0ZWRMaXN0LnRvZ2dsZUNsYXNzKCdkLW5vbmUnLCAhaGFzQ29tYmluYXRpb25zKTtcblxuICAgIGlmICghaGFzQ29tYmluYXRpb25zKSB7XG4gICAgICAvLyBFbXB0eSBsaXN0XG4gICAgICB0aGlzLmNvbWJpbmF0aW9uc1JlbmRlcmVyLnJlbmRlcih7Y29tYmluYXRpb25zOiBbXX0pO1xuICAgICAgdGhpcy4kZW1wdHlTdGF0ZS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWZyZXNoUGFnZSgpIHtcbiAgICB0aGlzLnBhZ2luYXRvci5wYWdpbmF0ZSh0aGlzLnBhZ2luYXRvci5nZXRDdXJyZW50UGFnZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaW5pdFBhZ2luYXRlZExpc3QoKSB7XG4gICAgdGhpcy5jb21iaW5hdGlvbnNSZW5kZXJlciA9IG5ldyBDb21iaW5hdGlvbnNHcmlkUmVuZGVyZXIoKTtcbiAgICB0aGlzLnBhZ2luYXRvciA9IG5ldyBEeW5hbWljUGFnaW5hdG9yKFxuICAgICAgQ29tYmluYXRpb25zTWFwLnBhZ2luYXRpb25Db250YWluZXIsXG4gICAgICB0aGlzLmNvbWJpbmF0aW9uc1NlcnZpY2UsXG4gICAgICB0aGlzLmNvbWJpbmF0aW9uc1JlbmRlcmVyLFxuICAgICk7XG5cbiAgICB0aGlzLmluaXRTdWJtaXR0YWJsZUlucHV0cygpO1xuXG4gICAgdGhpcy4kY29tYmluYXRpb25zQ29udGFpbmVyLm9uKFxuICAgICAgJ2NoYW5nZScsXG4gICAgICBDb21iaW5hdGlvbnNNYXAuaXNEZWZhdWx0SW5wdXRzU2VsZWN0b3IsXG4gICAgICBhc3luYyAoZSkgPT4ge1xuICAgICAgICBpZiAoIWUuY3VycmVudFRhcmdldC5jaGVja2VkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRGVmYXVsdENvbWJpbmF0aW9uKGUuY3VycmVudFRhcmdldCk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLiRjb21iaW5hdGlvbnNDb250YWluZXIub24oXG4gICAgICAnY2xpY2snLFxuICAgICAgQ29tYmluYXRpb25zTWFwLnJlbW92ZUNvbWJpbmF0aW9uU2VsZWN0b3IsXG4gICAgICBhc3luYyAoZSkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUNvbWJpbmF0aW9uKGUuY3VycmVudFRhcmdldCk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLmluaXRTb3J0aW5nQ29sdW1ucygpO1xuICAgIHRoaXMucGFnaW5hdG9yLnBhZ2luYXRlKDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB3YXRjaEV2ZW50cygpIHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIHRoaXMuZXZlbnRFbWl0dGVyLm9uKENvbWJpbmF0aW9uRXZlbnRzLnJlZnJlc2hDb21iaW5hdGlvbkxpc3QsICgpID0+XG4gICAgICB0aGlzLnJlZnJlc2hDb21iaW5hdGlvbkxpc3QoZmFsc2UpXG4gICAgKTtcbiAgICB0aGlzLmV2ZW50RW1pdHRlci5vbihDb21iaW5hdGlvbkV2ZW50cy5yZWZyZXNoUGFnZSwgKCkgPT5cbiAgICAgIHRoaXMucmVmcmVzaFBhZ2UoKVxuICAgICk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICB0aGlzLmV2ZW50RW1pdHRlci5vbihcbiAgICAgIENvbWJpbmF0aW9uRXZlbnRzLnVwZGF0ZUF0dHJpYnV0ZUdyb3VwcyxcbiAgICAgIGF0dHJpYnV0ZUdyb3VwcyA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGaWx0ZXJzID0gdGhpcy5jb21iaW5hdGlvbnNTZXJ2aWNlLmdldEZpbHRlcnMoKTtcbiAgICAgICAgY3VycmVudEZpbHRlcnMuYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVHcm91cHMpLmZvckVhY2goYXR0cmlidXRlR3JvdXBJZCA9PiB7XG4gICAgICAgICAgY3VycmVudEZpbHRlcnMuYXR0cmlidXRlc1thdHRyaWJ1dGVHcm91cElkXSA9IFtdO1xuICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVHcm91cHNbYXR0cmlidXRlR3JvdXBJZF07XG4gICAgICAgICAgYXR0cmlidXRlcy5mb3JFYWNoKGF0dHJpYnV0ZSA9PiB7XG4gICAgICAgICAgICBjdXJyZW50RmlsdGVycy5hdHRyaWJ1dGVzW2F0dHJpYnV0ZUdyb3VwSWRdLnB1c2goYXR0cmlidXRlLmlkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jb21iaW5hdGlvbnNTZXJ2aWNlLnNldEZpbHRlcnMoY3VycmVudEZpbHRlcnMpO1xuICAgICAgICB0aGlzLnBhZ2luYXRvci5wYWdpbmF0ZSgxKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5ldmVudEVtaXR0ZXIub24oQ29tYmluYXRpb25FdmVudHMuY29tYmluYXRpb25HZW5lcmF0b3JSZWFkeSwgKCkgPT4ge1xuICAgICAgY29uc3QgJGdlbmVyYXRlQnV0dG9ucyA9ICQoXG4gICAgICAgIFByb2R1Y3RNYXAuY29tYmluYXRpb25zLmdlbmVyYXRlQ29tYmluYXRpb25zQnV0dG9uXG4gICAgICApO1xuICAgICAgJGdlbmVyYXRlQnV0dG9ucy5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcbiAgICAgICQoJ2JvZHknKS5vbihcbiAgICAgICAgJ2NsaWNrJyxcbiAgICAgICAgUHJvZHVjdE1hcC5jb21iaW5hdGlvbnMuZ2VuZXJhdGVDb21iaW5hdGlvbnNCdXR0b24sXG4gICAgICAgIGV2ZW50ID0+IHtcbiAgICAgICAgICAvLyBTdG9wIGV2ZW50IG9yIGl0IHdpbGwgYmUgY2F1Z2h0IGJ5IGNsaWNrLW91dHNpZGUgZGlyZWN0aXZlIGFuZCBhdXRvbWF0aWNhbGx5IGNsb3NlIHRoZSBtb2RhbFxuICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMuZXZlbnRFbWl0dGVyLmVtaXQoQ29tYmluYXRpb25FdmVudHMub3BlbkNvbWJpbmF0aW9uc0dlbmVyYXRvcik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGluaXRTdWJtaXR0YWJsZUlucHV0cygpIHtcbiAgICBjb25zdCBjb21iaW5hdGlvblRva2VuID0gdGhpcy5nZXRDb21iaW5hdGlvblRva2VuKCk7XG4gICAgY29uc3QgeyBxdWFudGl0eUtleSB9ID0gQ29tYmluYXRpb25zTWFwLmNvbWJpbmF0aW9uSXRlbUZvcm07XG4gICAgY29uc3QgeyBpbXBhY3RPblByaWNlS2V5IH0gPSBDb21iaW5hdGlvbnNNYXAuY29tYmluYXRpb25JdGVtRm9ybTtcbiAgICBjb25zdCB7IHJlZmVyZW5jZUtleSB9ID0gQ29tYmluYXRpb25zTWFwLmNvbWJpbmF0aW9uSXRlbUZvcm07XG4gICAgY29uc3QgeyB0b2tlbktleSB9ID0gQ29tYmluYXRpb25zTWFwLmNvbWJpbmF0aW9uSXRlbUZvcm07XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIG5ldyBTdWJtaXR0YWJsZUlucHV0KENvbWJpbmF0aW9uc01hcC5xdWFudGl0eUlucHV0V3JhcHBlciwgaW5wdXQgPT5cbiAgICAgIHRoaXMuY29tYmluYXRpb25zU2VydmljZS51cGRhdGVMaXN0ZWRDb21iaW5hdGlvbihcbiAgICAgICAgdGhpcy5maW5kQ29tYmluYXRpb25JZChpbnB1dCksXG4gICAgICAgIHtcbiAgICAgICAgICBbcXVhbnRpdHlLZXldOiBpbnB1dC52YWx1ZSxcbiAgICAgICAgICBbdG9rZW5LZXldOiBjb21iaW5hdGlvblRva2VuXG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuXG4gICAgbmV3IFN1Ym1pdHRhYmxlSW5wdXQoQ29tYmluYXRpb25zTWFwLmltcGFjdE9uUHJpY2VJbnB1dFdyYXBwZXIsIGlucHV0ID0+XG4gICAgICB0aGlzLmNvbWJpbmF0aW9uc1NlcnZpY2UudXBkYXRlTGlzdGVkQ29tYmluYXRpb24oXG4gICAgICAgIHRoaXMuZmluZENvbWJpbmF0aW9uSWQoaW5wdXQpLFxuICAgICAgICB7XG4gICAgICAgICAgW2ltcGFjdE9uUHJpY2VLZXldOiBpbnB1dC52YWx1ZSxcbiAgICAgICAgICBbdG9rZW5LZXldOiBjb21iaW5hdGlvblRva2VuXG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuXG4gICAgbmV3IFN1Ym1pdHRhYmxlSW5wdXQoQ29tYmluYXRpb25zTWFwLnJlZmVyZW5jZUlucHV0V3JhcHBlciwgaW5wdXQgPT5cbiAgICAgIHRoaXMuY29tYmluYXRpb25zU2VydmljZS51cGRhdGVMaXN0ZWRDb21iaW5hdGlvbihcbiAgICAgICAgdGhpcy5maW5kQ29tYmluYXRpb25JZChpbnB1dCksXG4gICAgICAgIHtcbiAgICAgICAgICBbcmVmZXJlbmNlS2V5XTogaW5wdXQudmFsdWUsXG4gICAgICAgICAgW3Rva2VuS2V5XTogY29tYmluYXRpb25Ub2tlblxuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGluaXRTb3J0aW5nQ29sdW1ucygpIHtcbiAgICB0aGlzLiRjb21iaW5hdGlvbnNDb250YWluZXIub24oXG4gICAgICAnY2xpY2snLFxuICAgICAgQ29tYmluYXRpb25zTWFwLnNvcnRhYmxlQ29sdW1ucyxcbiAgICAgIChldmVudCkgPT4ge1xuICAgICAgICBjb25zdCAkc29ydGFibGVDb2x1bW4gPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgICAgICBjb25zdCBjb2x1bW5OYW1lID0gJHNvcnRhYmxlQ29sdW1uLmRhdGEoJ3NvcnRDb2xOYW1lJyk7XG5cbiAgICAgICAgaWYgKCFjb2x1bW5OYW1lKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRpcmVjdGlvbiA9ICRzb3J0YWJsZUNvbHVtbi5kYXRhKCdzb3J0RGlyZWN0aW9uJyk7XG5cbiAgICAgICAgaWYgKCFkaXJlY3Rpb24gfHwgZGlyZWN0aW9uID09PSAnZGVzYycpIHtcbiAgICAgICAgICBkaXJlY3Rpb24gPSAnYXNjJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaXJlY3Rpb24gPSAnZGVzYyc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXNldCBhbGwgY29sdW1ucywgd2UgbmVlZCB0byBmb3JjZSB0aGUgYXR0cmlidXRlcyBmb3IgQ1NTIG1hdGNoaW5nXG4gICAgICAgICQoXG4gICAgICAgICAgQ29tYmluYXRpb25zTWFwLnNvcnRhYmxlQ29sdW1ucyxcbiAgICAgICAgICB0aGlzLiRjb21iaW5hdGlvbnNDb250YWluZXIsXG4gICAgICAgICkucmVtb3ZlRGF0YSgnc29ydElzQ3VycmVudCcpO1xuICAgICAgICAkKFxuICAgICAgICAgIENvbWJpbmF0aW9uc01hcC5zb3J0YWJsZUNvbHVtbnMsXG4gICAgICAgICAgdGhpcy4kY29tYmluYXRpb25zQ29udGFpbmVyLFxuICAgICAgICApLnJlbW92ZURhdGEoJ3NvcnREaXJlY3Rpb24nKTtcbiAgICAgICAgJChcbiAgICAgICAgICBDb21iaW5hdGlvbnNNYXAuc29ydGFibGVDb2x1bW5zLFxuICAgICAgICAgIHRoaXMuJGNvbWJpbmF0aW9uc0NvbnRhaW5lcixcbiAgICAgICAgKS5yZW1vdmVBdHRyKCdkYXRhLXNvcnQtaXMtY3VycmVudCcpO1xuICAgICAgICAkKFxuICAgICAgICAgIENvbWJpbmF0aW9uc01hcC5zb3J0YWJsZUNvbHVtbnMsXG4gICAgICAgICAgdGhpcy4kY29tYmluYXRpb25zQ29udGFpbmVyLFxuICAgICAgICApLnJlbW92ZUF0dHIoJ2RhdGEtc29ydC1kaXJlY3Rpb24nKTtcblxuICAgICAgICAvLyBTZXQgY29ycmVjdCBkYXRhIGluIGN1cnJlbnQgY29sdW1uLCB3ZSBuZWVkIHRvIGZvcmNlIHRoZSBhdHRyaWJ1dGVzIGZvciBDU1MgbWF0Y2hpbmdcbiAgICAgICAgJHNvcnRhYmxlQ29sdW1uLmRhdGEoJ3NvcnRJc0N1cnJlbnQnLCAndHJ1ZScpO1xuICAgICAgICAkc29ydGFibGVDb2x1bW4uZGF0YSgnc29ydERpcmVjdGlvbicsIGRpcmVjdGlvbik7XG4gICAgICAgICRzb3J0YWJsZUNvbHVtbi5hdHRyKCdkYXRhLXNvcnQtaXMtY3VycmVudCcsICd0cnVlJyk7XG4gICAgICAgICRzb3J0YWJsZUNvbHVtbi5hdHRyKCdkYXRhLXNvcnQtZGlyZWN0aW9uJywgZGlyZWN0aW9uKTtcblxuICAgICAgICAvLyBGaW5hbGx5IHVwZGF0ZSBsaXN0XG4gICAgICAgIHRoaXMuY29tYmluYXRpb25zU2VydmljZS5zZXRPcmRlckJ5KGNvbHVtbk5hbWUsIGRpcmVjdGlvbik7XG4gICAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2luYXRlKDEpO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGJ1dHRvblxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYXN5bmMgcmVtb3ZlQ29tYmluYXRpb24oYnV0dG9uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0ICRkZWxldGVCdXR0b24gPSAkKGJ1dHRvbik7XG4gICAgICBjb25zdCBtb2RhbCA9IG5ldyBDb25maXJtTW9kYWwoXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ21vZGFsLWNvbmZpcm0tZGVsZXRlLWNvbWJpbmF0aW9uJyxcbiAgICAgICAgICBjb25maXJtVGl0bGU6ICRkZWxldGVCdXR0b24uZGF0YSgnbW9kYWwtdGl0bGUnKSxcbiAgICAgICAgICBjb25maXJtTWVzc2FnZTogJGRlbGV0ZUJ1dHRvbi5kYXRhKCdtb2RhbC1tZXNzYWdlJyksXG4gICAgICAgICAgY29uZmlybUJ1dHRvbkxhYmVsOiAkZGVsZXRlQnV0dG9uLmRhdGEoJ21vZGFsLWFwcGx5JyksXG4gICAgICAgICAgY2xvc2VCdXR0b25MYWJlbDogJGRlbGV0ZUJ1dHRvbi5kYXRhKCdtb2RhbC1jYW5jZWwnKSxcbiAgICAgICAgICBjb25maXJtQnV0dG9uQ2xhc3M6ICdidG4tZGFuZ2VyJyxcbiAgICAgICAgICBjbG9zYWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb21iaW5hdGlvbnNTZXJ2aWNlLnJlbW92ZUNvbWJpbmF0aW9uKFxuICAgICAgICAgICAgdGhpcy5maW5kQ29tYmluYXRpb25JZChidXR0b24pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgJC5ncm93bCh7bWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZX0pO1xuICAgICAgICAgIHRoaXMuZXZlbnRFbWl0dGVyLmVtaXQoQ29tYmluYXRpb25FdmVudHMucmVmcmVzaENvbWJpbmF0aW9uTGlzdCk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgbW9kYWwuc2hvdygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvci5yZXNwb25zZUpTT05cbiAgICAgICAgPyBlcnJvci5yZXNwb25zZUpTT04uZXJyb3JcbiAgICAgICAgOiBlcnJvcjtcbiAgICAgICQuZ3Jvd2wuZXJyb3Ioe21lc3NhZ2U6IGVycm9yTWVzc2FnZX0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjaGVja2VkSW5wdXRcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFzeW5jIHVwZGF0ZURlZmF1bHRDb21iaW5hdGlvbihjaGVja2VkSW5wdXQpIHtcbiAgICBjb25zdCBjaGVja2VkSW5wdXRzID0gdGhpcy4kY29tYmluYXRpb25zQ29udGFpbmVyLmZpbmQoXG4gICAgICBgJHtDb21iaW5hdGlvbnNNYXAuaXNEZWZhdWx0SW5wdXRzU2VsZWN0b3J9OmNoZWNrZWRgLFxuICAgICk7XG4gICAgY29uc3QgY2hlY2tlZERlZmF1bHRJZCA9IHRoaXMuZmluZENvbWJpbmF0aW9uSWQoY2hlY2tlZElucHV0KTtcblxuICAgIGF3YWl0IHRoaXMuY29tYmluYXRpb25zU2VydmljZS51cGRhdGVMaXN0ZWRDb21iaW5hdGlvbihjaGVja2VkRGVmYXVsdElkLCB7XG4gICAgICAnY29tYmluYXRpb25faXRlbVtpc19kZWZhdWx0XSc6IGNoZWNrZWRJbnB1dC52YWx1ZSxcbiAgICAgICdjb21iaW5hdGlvbl9pdGVtW190b2tlbl0nOiB0aGlzLmdldENvbWJpbmF0aW9uVG9rZW4oKSxcbiAgICB9KTtcblxuICAgICQuZWFjaChjaGVja2VkSW5wdXRzLCAoaW5kZXgsIGlucHV0KSA9PiB7XG4gICAgICBpZiAodGhpcy5maW5kQ29tYmluYXRpb25JZChpbnB1dCkgIT09IGNoZWNrZWREZWZhdWx0SWQpIHtcbiAgICAgICAgJChpbnB1dCkucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7U3RyaW5nfVxuICAgKi9cbiAgZ2V0Q29tYmluYXRpb25Ub2tlbigpIHtcbiAgICByZXR1cm4gJChDb21iaW5hdGlvbnNNYXAuY29tYmluYXRpb25zQ29udGFpbmVyKS5kYXRhKCdjb21iaW5hdGlvblRva2VuJyk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gaW5wdXQgb2YgdGhlIHNhbWUgdGFibGUgcm93XG4gICAqXG4gICAqIEByZXR1cm5zIHtOdW1iZXJ9XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBmaW5kQ29tYmluYXRpb25JZChpbnB1dCkge1xuICAgIHJldHVybiAkKGlucHV0KVxuICAgICAgLmNsb3Nlc3QoJ3RyJylcbiAgICAgIC5maW5kKHRoaXMuY29tYmluYXRpb25JZElucHV0c1NlbGVjdG9yKVxuICAgICAgLnZhbCgpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmltcG9ydCBQcm9kdWN0TWFwIGZyb20gJ0BwYWdlcy9wcm9kdWN0L3Byb2R1Y3QtbWFwJztcbmltcG9ydCBQcm9kdWN0RXZlbnRNYXAgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvcHJvZHVjdC1ldmVudC1tYXAnO1xuaW1wb3J0IENvbmZpcm1Nb2RhbCBmcm9tICdAY29tcG9uZW50cy9tb2RhbCc7XG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9taXphdGlvbnNNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy4kY3VzdG9taXphdGlvbnNDb250YWluZXIgPSAkKFByb2R1Y3RNYXAuY3VzdG9taXphdGlvbnMuY3VzdG9taXphdGlvbnNDb250YWluZXIpO1xuICAgIHRoaXMuJGN1c3RvbWl6YXRpb25GaWVsZHNMaXN0ID0gJChQcm9kdWN0TWFwLmN1c3RvbWl6YXRpb25zLmN1c3RvbWl6YXRpb25GaWVsZHNMaXN0KTtcbiAgICB0aGlzLmV2ZW50RW1pdHRlciA9IHdpbmRvdy5wcmVzdGFzaG9wLmluc3RhbmNlLmV2ZW50RW1pdHRlcjtcbiAgICB0aGlzLnByb3RvdHlwZVRlbXBsYXRlID0gdGhpcy4kY3VzdG9taXphdGlvbkZpZWxkc0xpc3QuZGF0YSgncHJvdG90eXBlJyk7XG4gICAgdGhpcy5wcm90b3R5cGVOYW1lID0gdGhpcy4kY3VzdG9taXphdGlvbkZpZWxkc0xpc3QuZGF0YSgncHJvdG90eXBlTmFtZScpO1xuXG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBpbml0KCkge1xuICAgIHRoaXMuJGN1c3RvbWl6YXRpb25zQ29udGFpbmVyLm9uKCdjbGljaycsIFByb2R1Y3RNYXAuY3VzdG9taXphdGlvbnMuYWRkQ3VzdG9taXphdGlvbkJ0biwgKCkgPT4ge1xuICAgICAgdGhpcy5hZGRDdXN0b21pemF0aW9uRmllbGQoKTtcbiAgICB9KTtcbiAgICB0aGlzLiRjdXN0b21pemF0aW9uc0NvbnRhaW5lci5vbignY2xpY2snLCBQcm9kdWN0TWFwLmN1c3RvbWl6YXRpb25zLnJlbW92ZUN1c3RvbWl6YXRpb25CdG4sIChlKSA9PiB7XG4gICAgICB0aGlzLnJlbW92ZUN1c3RvbWl6YXRpb25GaWVsZChlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEN1c3RvbWl6YXRpb25GaWVsZCgpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0SW5kZXgoKTtcbiAgICBjb25zdCBuZXdJdGVtID0gdGhpcy5wcm90b3R5cGVUZW1wbGF0ZS5yZXBsYWNlKG5ldyBSZWdFeHAodGhpcy5wcm90b3R5cGVOYW1lLCAnZycpLCB0aGlzLmdldEluZGV4KCkpO1xuXG4gICAgdGhpcy4kY3VzdG9taXphdGlvbkZpZWxkc0xpc3QuYXBwZW5kKG5ld0l0ZW0pO1xuICAgIHdpbmRvdy5wcmVzdGFTaG9wVWlLaXQuaW5pdFRvb2xUaXBzKCk7XG4gICAgY29uc3Qge3RyYW5zbGF0YWJsZUlucHV0fSA9IHdpbmRvdy5wcmVzdGFzaG9wLmluc3RhbmNlO1xuICAgIHRyYW5zbGF0YWJsZUlucHV0LnJlZnJlc2hGb3JtSW5wdXRzKHRoaXMuJGN1c3RvbWl6YXRpb25zQ29udGFpbmVyLmNsb3Nlc3QoJ2Zvcm0nKSk7XG4gICAgdGhpcy5ldmVudEVtaXR0ZXIuZW1pdChQcm9kdWN0RXZlbnRNYXAuY3VzdG9taXphdGlvbnMucm93QWRkZWQsIHtpbmRleH0pO1xuICB9XG5cbiAgcmVtb3ZlQ3VzdG9taXphdGlvbkZpZWxkKGV2ZW50KSB7XG4gICAgY29uc3QgJGRlbGV0ZUJ1dHRvbiA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgY29uc3QgbW9kYWwgPSBuZXcgQ29uZmlybU1vZGFsKFxuICAgICAge1xuICAgICAgICBpZDogJ21vZGFsLWNvbmZpcm0tZGVsZXRlLWN1c3RvbWl6YXRpb24nLFxuICAgICAgICBjb25maXJtVGl0bGU6ICRkZWxldGVCdXR0b24uZGF0YSgnbW9kYWwtdGl0bGUnKSxcbiAgICAgICAgY29uZmlybU1lc3NhZ2U6ICRkZWxldGVCdXR0b24uZGF0YSgnbW9kYWwtbWVzc2FnZScpLFxuICAgICAgICBjb25maXJtQnV0dG9uTGFiZWw6ICRkZWxldGVCdXR0b24uZGF0YSgnbW9kYWwtYXBwbHknKSxcbiAgICAgICAgY2xvc2VCdXR0b25MYWJlbDogJGRlbGV0ZUJ1dHRvbi5kYXRhKCdtb2RhbC1jYW5jZWwnKSxcbiAgICAgICAgY29uZmlybUJ1dHRvbkNsYXNzOiAnYnRuLWRhbmdlcicsXG4gICAgICAgIGNsb3NhYmxlOiB0cnVlLFxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgJGRlbGV0ZUJ1dHRvblxuICAgICAgICAgIC5jbG9zZXN0KFByb2R1Y3RNYXAuY3VzdG9taXphdGlvbnMuY3VzdG9taXphdGlvbkZpZWxkUm93KVxuICAgICAgICAgIC5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5ldmVudEVtaXR0ZXIuZW1pdChQcm9kdWN0RXZlbnRNYXAuY3VzdG9taXphdGlvbnMucm93UmVtb3ZlZCk7XG4gICAgICB9LFxuICAgICk7XG4gICAgbW9kYWwuc2hvdygpO1xuICB9XG5cbiAgZ2V0SW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuJGN1c3RvbWl6YXRpb25GaWVsZHNMaXN0LmZpbmQoUHJvZHVjdE1hcC5jdXN0b21pemF0aW9ucy5jdXN0b21pemF0aW9uRmllbGRSb3cpLmxlbmd0aDtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgUHJvZHVjdE1hcCBmcm9tICdAcGFnZXMvcHJvZHVjdC9wcm9kdWN0LW1hcCc7XG5pbXBvcnQgUm91dGVyIGZyb20gJ0Bjb21wb25lbnRzL3JvdXRlcic7XG5pbXBvcnQgQ29uZmlybU1vZGFsIGZyb20gJ0Bjb21wb25lbnRzL21vZGFsJztcbmltcG9ydCBQcm9kdWN0RXZlbnRNYXAgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvcHJvZHVjdC1ldmVudC1tYXAnO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZlYXR1cmVWYWx1ZXNNYW5hZ2VyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBldmVudEVtaXR0ZXIge0V2ZW50RW1pdHRlcn1cbiAgICovXG4gIGNvbnN0cnVjdG9yKGV2ZW50RW1pdHRlcikge1xuICAgIHRoaXMucm91dGVyID0gbmV3IFJvdXRlcigpO1xuICAgIHRoaXMuZXZlbnRFbWl0dGVyID0gZXZlbnRFbWl0dGVyO1xuICAgIHRoaXMuJGNvbGxlY3Rpb25Db250YWluZXIgPSAkKFByb2R1Y3RNYXAuZmVhdHVyZVZhbHVlcy5jb2xsZWN0aW9uQ29udGFpbmVyKTtcbiAgICB0aGlzLiRjb2xsZWN0aW9uUm93c0NvbnRhaW5lciA9ICQoUHJvZHVjdE1hcC5mZWF0dXJlVmFsdWVzLmNvbGxlY3Rpb25Sb3dzQ29udGFpbmVyKTtcblxuICAgIHRoaXMud2F0Y2hGZWF0dXJlU2VsZWN0b3JzKCk7XG4gICAgdGhpcy53YXRjaEN1c3RvbUlucHV0cygpO1xuICAgIHRoaXMud2F0Y2hEZWxldGVCdXR0b25zKCk7XG4gICAgdGhpcy53YXRjaEFkZEJ1dHRvbigpO1xuICB9XG5cbiAgd2F0Y2hBZGRCdXR0b24oKSB7XG4gICAgJChQcm9kdWN0TWFwLmZlYXR1cmVWYWx1ZXMuYWRkRmVhdHVyZVZhbHVlKS5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLiRjb2xsZWN0aW9uQ29udGFpbmVyLmRhdGEoJ3Byb3RvdHlwZScpO1xuICAgICAgY29uc3QgcHJvdG90eXBlTmFtZSA9IHRoaXMuJGNvbGxlY3Rpb25Db250YWluZXIuZGF0YSgncHJvdG90eXBlTmFtZScpO1xuICAgICAgY29uc3QgbmV3SW5kZXggPSAkKFByb2R1Y3RNYXAuZmVhdHVyZVZhbHVlcy5jb2xsZWN0aW9uUm93LCB0aGlzLiRjb2xsZWN0aW9uQ29udGFpbmVyKS5sZW5ndGg7XG5cbiAgICAgIGNvbnN0ICRuZXdSb3cgPSAkKHByb3RvdHlwZS5yZXBsYWNlKG5ldyBSZWdFeHAocHJvdG90eXBlTmFtZSwgJ2cnKSwgbmV3SW5kZXgpKTtcbiAgICAgIHRoaXMuJGNvbGxlY3Rpb25Sb3dzQ29udGFpbmVyLmFwcGVuZCgkbmV3Um93KTtcbiAgICAgICQoJ3NlbGVjdFtkYXRhLXRvZ2dsZT1cInNlbGVjdDJcIl0nLCAkbmV3Um93KS5zZWxlY3QyKCk7XG4gICAgfSk7XG4gIH1cblxuICB3YXRjaERlbGV0ZUJ1dHRvbnMoKSB7XG4gICAgJCh0aGlzLiRjb2xsZWN0aW9uQ29udGFpbmVyKS5vbignY2xpY2snLCBQcm9kdWN0TWFwLmZlYXR1cmVWYWx1ZXMuZGVsZXRlRmVhdHVyZVZhbHVlLCAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0ICRkZWxldGVCdXR0b24gPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgICAgY29uc3QgJGNvbGxlY3Rpb25Sb3cgPSAkZGVsZXRlQnV0dG9uLmNsb3Nlc3QoUHJvZHVjdE1hcC5mZWF0dXJlVmFsdWVzLmNvbGxlY3Rpb25Sb3cpO1xuICAgICAgY29uc3QgbW9kYWwgPSBuZXcgQ29uZmlybU1vZGFsKFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdtb2RhbC1jb25maXJtLWRlbGV0ZS1mZWF0dXJlLXZhbHVlJyxcbiAgICAgICAgICBjb25maXJtVGl0bGU6ICRkZWxldGVCdXR0b24uZGF0YSgnbW9kYWwtdGl0bGUnKSxcbiAgICAgICAgICBjb25maXJtTWVzc2FnZTogJGRlbGV0ZUJ1dHRvbi5kYXRhKCdtb2RhbC1tZXNzYWdlJyksXG4gICAgICAgICAgY29uZmlybUJ1dHRvbkxhYmVsOiAkZGVsZXRlQnV0dG9uLmRhdGEoJ21vZGFsLWFwcGx5JyksXG4gICAgICAgICAgY2xvc2VCdXR0b25MYWJlbDogJGRlbGV0ZUJ1dHRvbi5kYXRhKCdtb2RhbC1jYW5jZWwnKSxcbiAgICAgICAgICBjb25maXJtQnV0dG9uQ2xhc3M6ICdidG4tZGFuZ2VyJyxcbiAgICAgICAgICBjbG9zYWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICRjb2xsZWN0aW9uUm93LnJlbW92ZSgpO1xuICAgICAgICAgIHRoaXMuZXZlbnRFbWl0dGVyLmVtaXQoUHJvZHVjdEV2ZW50TWFwLnVwZGF0ZVN1Ym1pdEJ1dHRvblN0YXRlKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICBtb2RhbC5zaG93KCk7XG4gICAgfSk7XG4gIH1cblxuICB3YXRjaEN1c3RvbUlucHV0cygpIHtcbiAgICAkKHRoaXMuJGNvbGxlY3Rpb25Db250YWluZXIpLm9uKCdrZXl1cCBjaGFuZ2UnLCBQcm9kdWN0TWFwLmZlYXR1cmVWYWx1ZXMuY3VzdG9tVmFsdWVJbnB1dCwgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCAkY2hhbmdlZElucHV0ID0gJChldmVudC50YXJnZXQpO1xuICAgICAgY29uc3QgJGNvbGxlY3Rpb25Sb3cgPSAkY2hhbmdlZElucHV0LmNsb3Nlc3QoUHJvZHVjdE1hcC5mZWF0dXJlVmFsdWVzLmNvbGxlY3Rpb25Sb3cpO1xuXG4gICAgICAvLyBDaGVjayBpZiBhbnkgY3VzdG9tIGlucHV0cyBoYXMgYSB2YWx1ZVxuICAgICAgbGV0IGhhc0N1c3RvbVZhbHVlID0gZmFsc2U7XG4gICAgICAkKFByb2R1Y3RNYXAuZmVhdHVyZVZhbHVlcy5jdXN0b21WYWx1ZUlucHV0LCAkY29sbGVjdGlvblJvdykuZWFjaCgoaW5kZXgsIGlucHV0KSA9PiB7XG4gICAgICAgIGNvbnN0ICRpbnB1dCA9ICQoaW5wdXQpO1xuXG4gICAgICAgIGlmICgkaW5wdXQudmFsKCkgIT09ICcnKSB7XG4gICAgICAgICAgaGFzQ3VzdG9tVmFsdWUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgJGZlYXR1cmVWYWx1ZVNlbGVjdG9yID0gJChQcm9kdWN0TWFwLmZlYXR1cmVWYWx1ZXMuZmVhdHVyZVZhbHVlU2VsZWN0LCAkY29sbGVjdGlvblJvdykuZmlyc3QoKTtcbiAgICAgICRmZWF0dXJlVmFsdWVTZWxlY3Rvci5wcm9wKCdkaXNhYmxlZCcsIGhhc0N1c3RvbVZhbHVlKTtcbiAgICAgIGlmIChoYXNDdXN0b21WYWx1ZSkge1xuICAgICAgICAkZmVhdHVyZVZhbHVlU2VsZWN0b3IudmFsKCcnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHdhdGNoRmVhdHVyZVNlbGVjdG9ycygpIHtcbiAgICAkKHRoaXMuJGNvbGxlY3Rpb25Db250YWluZXIpLm9uKCdjaGFuZ2UnLCBQcm9kdWN0TWFwLmZlYXR1cmVWYWx1ZXMuZmVhdHVyZVNlbGVjdCwgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCAkc2VsZWN0b3IgPSAkKGV2ZW50LnRhcmdldCk7XG4gICAgICBjb25zdCBpZEZlYXR1cmUgPSAkc2VsZWN0b3IudmFsKCk7XG4gICAgICBjb25zdCAkY29sbGVjdGlvblJvdyA9ICRzZWxlY3Rvci5jbG9zZXN0KFByb2R1Y3RNYXAuZmVhdHVyZVZhbHVlcy5jb2xsZWN0aW9uUm93KTtcbiAgICAgIGNvbnN0ICRmZWF0dXJlVmFsdWVTZWxlY3RvciA9ICQoUHJvZHVjdE1hcC5mZWF0dXJlVmFsdWVzLmZlYXR1cmVWYWx1ZVNlbGVjdCwgJGNvbGxlY3Rpb25Sb3cpLmZpcnN0KCk7XG4gICAgICBjb25zdCAkY3VzdG9tVmFsdWVJbnB1dHMgPSAkKFByb2R1Y3RNYXAuZmVhdHVyZVZhbHVlcy5jdXN0b21WYWx1ZUlucHV0LCAkY29sbGVjdGlvblJvdyk7XG4gICAgICBjb25zdCAkY3VzdG9tRmVhdHVyZUlkSW5wdXQgPSAkKFByb2R1Y3RNYXAuZmVhdHVyZVZhbHVlcy5jdXN0b21GZWF0dXJlSWRJbnB1dCwgJGNvbGxlY3Rpb25Sb3cpO1xuXG4gICAgICAvLyBSZXNldCB2YWx1ZXNcbiAgICAgICRjdXN0b21WYWx1ZUlucHV0cy52YWwoJycpO1xuICAgICAgJGZlYXR1cmVWYWx1ZVNlbGVjdG9yLnZhbCgnJyk7XG4gICAgICAkY3VzdG9tRmVhdHVyZUlkSW5wdXQudmFsKCcnKTtcblxuICAgICAgJC5nZXQodGhpcy5yb3V0ZXIuZ2VuZXJhdGUoJ2FkbWluX2ZlYXR1cmVfZ2V0X2ZlYXR1cmVfdmFsdWVzJywge2lkRmVhdHVyZX0pKVxuICAgICAgICAudGhlbigoZmVhdHVyZVZhbHVlc0RhdGEpID0+IHtcbiAgICAgICAgICAkZmVhdHVyZVZhbHVlU2VsZWN0b3IucHJvcCgnZGlzYWJsZWQnLCBmZWF0dXJlVmFsdWVzRGF0YS5sZW5ndGggPT09IDApO1xuICAgICAgICAgICRmZWF0dXJlVmFsdWVTZWxlY3Rvci5lbXB0eSgpO1xuICAgICAgICAgICQuZWFjaChmZWF0dXJlVmFsdWVzRGF0YSwgKGluZGV4LCBmZWF0dXJlVmFsdWUpID0+IHtcbiAgICAgICAgICAgIC8vIFRoZSBwbGFjZWhvbGRlciBzaG91bGRuJ3QgYmUgcG9zdGVkLlxuICAgICAgICAgICAgaWYgKGZlYXR1cmVWYWx1ZS5pZCA9PT0gJzAnKSB7XG4gICAgICAgICAgICAgIGZlYXR1cmVWYWx1ZS5pZCA9ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAkZmVhdHVyZVZhbHVlU2VsZWN0b3JcbiAgICAgICAgICAgICAgLmFwcGVuZCgkKCc8b3B0aW9uPjwvb3B0aW9uPicpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ3ZhbHVlJywgZmVhdHVyZVZhbHVlLmlkKVxuICAgICAgICAgICAgICAgIC50ZXh0KGZlYXR1cmVWYWx1ZS52YWx1ZSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgQ29uZmlybU1vZGFsIGZyb20gJ0Bjb21wb25lbnRzL21vZGFsJztcbmltcG9ydCBQcm9kdWN0TWFwIGZyb20gJ0BwYWdlcy9wcm9kdWN0L3Byb2R1Y3QtbWFwJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvZHVjdEZvb3Rlck1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLiRkZWxldGVQcm9kdWN0QnV0dG9uID0gJChQcm9kdWN0TWFwLmZvb3Rlci5kZWxldGVQcm9kdWN0QnV0dG9uKTtcbiAgICB0aGlzLiRkZWxldGVQcm9kdWN0QnV0dG9uLmNsaWNrKCgpID0+IHRoaXMuZGVsZXRlUHJvZHVjdCgpKTtcbiAgfVxuXG4gIGRlbGV0ZVByb2R1Y3QoKSB7XG4gICAgY29uc3QgbW9kYWwgPSBuZXcgQ29uZmlybU1vZGFsKFxuICAgICAge1xuICAgICAgICBpZDogJ21vZGFsLWNvbmZpcm0tZGVsZXRlLXByb2R1Y3QnLFxuICAgICAgICBjb25maXJtVGl0bGU6IHRoaXMuJGRlbGV0ZVByb2R1Y3RCdXR0b24uZGF0YSgnbW9kYWwtdGl0bGUnKSxcbiAgICAgICAgY29uZmlybU1lc3NhZ2U6IHRoaXMuJGRlbGV0ZVByb2R1Y3RCdXR0b24uZGF0YSgnbW9kYWwtbWVzc2FnZScpLFxuICAgICAgICBjb25maXJtQnV0dG9uTGFiZWw6IHRoaXMuJGRlbGV0ZVByb2R1Y3RCdXR0b24uZGF0YSgnbW9kYWwtYXBwbHknKSxcbiAgICAgICAgY2xvc2VCdXR0b25MYWJlbDogdGhpcy4kZGVsZXRlUHJvZHVjdEJ1dHRvbi5kYXRhKCdtb2RhbC1jYW5jZWwnKSxcbiAgICAgICAgY29uZmlybUJ1dHRvbkNsYXNzOiAnYnRuLWRhbmdlcicsXG4gICAgICAgIGNsb3NhYmxlOiB0cnVlLFxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVtb3ZlVXJsID0gdGhpcy4kZGVsZXRlUHJvZHVjdEJ1dHRvbi5kYXRhKCdyZW1vdmVVcmwnKTtcbiAgICAgICAgJChQcm9kdWN0TWFwLnByb2R1Y3RGb3JtU3VibWl0QnV0dG9uKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24gPSByZW1vdmVVcmw7XG4gICAgICB9LFxuICAgICk7XG4gICAgbW9kYWwuc2hvdygpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgJ3Byb2R1Y3Quc3RvY2sucXVhbnRpdHknOiBbXG4gICAgJ3Byb2R1Y3Rbc3RvY2tdW3F1YW50aXRpZXNdW3F1YW50aXR5XScsXG4gICAgJ3Byb2R1Y3Rbc2hvcnRjdXRzXVtzdG9ja11bcXVhbnRpdHldJyxcbiAgXSxcbiAgJ3Byb2R1Y3QucHJpY2UucHJpY2VUYXhFeGNsdWRlZCc6IFtcbiAgICAncHJvZHVjdFtwcmljaW5nXVtyZXRhaWxfcHJpY2VdW3ByaWNlX3RheF9leGNsdWRlZF0nLFxuICAgICdwcm9kdWN0W3Nob3J0Y3V0c11bcmV0YWlsX3ByaWNlXVtwcmljZV90YXhfZXhjbHVkZWRdJyxcbiAgXSxcbiAgJ3Byb2R1Y3QucHJpY2UucHJpY2VUYXhJbmNsdWRlZCc6IFtcbiAgICAncHJvZHVjdFtwcmljaW5nXVtyZXRhaWxfcHJpY2VdW3ByaWNlX3RheF9pbmNsdWRlZF0nLFxuICAgICdwcm9kdWN0W3Nob3J0Y3V0c11bcmV0YWlsX3ByaWNlXVtwcmljZV90YXhfaW5jbHVkZWRdJyxcbiAgXSxcbiAgJ3Byb2R1Y3QucHJpY2UudGF4UnVsZXNHcm91cElkJzogW1xuICAgICdwcm9kdWN0W3ByaWNpbmddW3RheF9ydWxlc19ncm91cF9pZF0nLFxuICAgICdwcm9kdWN0W3Nob3J0Y3V0c11bcmV0YWlsX3ByaWNlXVt0YXhfcnVsZXNfZ3JvdXBfaWRdJyxcbiAgXSxcbiAgJ3Byb2R1Y3Quc3RvY2suaGFzVmlydHVhbFByb2R1Y3RGaWxlJzogJ3Byb2R1Y3Rbc3RvY2tdW3ZpcnR1YWxfcHJvZHVjdF9maWxlXVtoYXNfZmlsZV0nLFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IE9iamVjdEZvcm1NYXBwZXIgZnJvbSAnQGNvbXBvbmVudHMvZm9ybS9mb3JtLW9iamVjdC1tYXBwZXInO1xuaW1wb3J0IFByb2R1Y3RGb3JtTWFwcGluZyBmcm9tICdAcGFnZXMvcHJvZHVjdC9lZGl0L3Byb2R1Y3QtZm9ybS1tYXBwaW5nJztcbmltcG9ydCBQcm9kdWN0RXZlbnRNYXAgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvcHJvZHVjdC1ldmVudC1tYXAnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9kdWN0Rm9ybU1vZGVsIHtcbiAgY29uc3RydWN0b3IoJGZvcm0sIGV2ZW50RW1pdHRlcikge1xuICAgIHRoaXMuZXZlbnRFbWl0dGVyID0gZXZlbnRFbWl0dGVyO1xuXG4gICAgLy8gSW5pdCBmb3JtIG1hcHBlclxuICAgIHRoaXMubWFwcGVyID0gbmV3IE9iamVjdEZvcm1NYXBwZXIoXG4gICAgICAkZm9ybSxcbiAgICAgIFByb2R1Y3RGb3JtTWFwcGluZyxcbiAgICAgIGV2ZW50RW1pdHRlcixcbiAgICAgIHtcbiAgICAgICAgbW9kZWxVcGRhdGVkOiBQcm9kdWN0RXZlbnRNYXAucHJvZHVjdE1vZGVsVXBkYXRlZCxcbiAgICAgICAgdXBkYXRlTW9kZWw6IFByb2R1Y3RFdmVudE1hcC51cGRhdGVkUHJvZHVjdE1vZGVsLFxuICAgICAgICBtb2RlbEZpZWxkVXBkYXRlZDogUHJvZHVjdEV2ZW50TWFwLnVwZGF0ZWRQcm9kdWN0RmllbGQsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBGb3Igbm93IHdlIGdldCBwcmVjaXNpb24gb25seSBpbiB0aGUgY29tcG9uZW50LCBidXQgbWF5YmUgaXQgd291bGQgZGVzZXJ2ZSBhIG1vcmUgZ2xvYmFsIGNvbmZpZ3VyYXRpb25cbiAgICAvLyBCaWdOdW1iZXIuc2V0KHtERUNJTUFMX1BMQUNFUzogc29tZUNvbmZpZ30pIEJ1dCB3aGVyZSBjYW4gd2UgZGVmaW5lL2luamVjdCB0aGlzIGdsb2JhbCBjb25maWc/XG4gICAgY29uc3QgJHByaWNlVGF4RXhjbHVkZWRJbnB1dCA9IHRoaXMubWFwcGVyLmdldElucHV0c0ZvcigncHJvZHVjdC5wcmljZS5wcmljZVRheEV4Y2x1ZGVkJyk7XG4gICAgdGhpcy5wcmVjaXNpb24gPSAkcHJpY2VUYXhFeGNsdWRlZElucHV0LmRhdGEoJ2Rpc3BsYXlQcmljZVByZWNpc2lvbicpO1xuXG4gICAgLy8gTGlzdGVucyB0byBldmVudCBmb3IgcHJvZHVjdCBtb2RpZmljYXRpb24gKHJlZ2lzdGVyZWQgYWZ0ZXIgdGhlIG1vZGVsIGlzIGNvbnN0cnVjdGVkLCBiZWNhdXNlIGV2ZW50cyBhcmVcbiAgICAvLyB0cmlnZ2VyZWQgZHVyaW5nIHRoZSBpbml0aWFsIHBhcnNpbmcgYnV0IGRvbid0IG5lZWQgdGhlbSBhdCBmaXJzdCkuXG4gICAgdGhpcy5ldmVudEVtaXR0ZXIub24oUHJvZHVjdEV2ZW50TWFwLnVwZGF0ZWRQcm9kdWN0RmllbGQsIChldmVudCkgPT4gdGhpcy5wcm9kdWN0RmllbGRVcGRhdGVkKGV2ZW50KSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2V0UHJvZHVjdDogKCkgPT4gdGhpcy5nZXRQcm9kdWN0KCksXG4gICAgICB3YXRjaDogKHByb2R1Y3RNb2RlbEtleSwgY2FsbGJhY2spID0+IHRoaXMud2F0Y2hQcm9kdWN0TW9kZWwocHJvZHVjdE1vZGVsS2V5LCBjYWxsYmFjayksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cbiAgZ2V0UHJvZHVjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5tYXBwZXIuZ2V0TW9kZWwoKS5wcm9kdWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9kdWN0TW9kZWxLZXlcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIHdhdGNoUHJvZHVjdE1vZGVsKHByb2R1Y3RNb2RlbEtleSwgY2FsbGJhY2spIHtcbiAgICB0aGlzLm1hcHBlci53YXRjaChgcHJvZHVjdC4ke3Byb2R1Y3RNb2RlbEtleX1gLCBjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBtb2RpZmljYXRpb25zIHRoYXQgaGF2ZSBoYXBwZW5lZCBpbiB0aGUgcHJvZHVjdFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByb2R1Y3RGaWVsZFVwZGF0ZWQoZXZlbnQpIHtcbiAgICB0aGlzLnVwZGF0ZVByb2R1Y3RQcmljZXMoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGhhbmRsZXIgZm9yIG1vZGlmaWNhdGlvbnMgcmVsYXRlZCB0byB0aGUgcHJvZHVjdCBwcmljZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHVwZGF0ZVByb2R1Y3RQcmljZXMoZXZlbnQpIHtcbiAgICBjb25zdCBwcmljZXNGaWVsZHMgPSBbXG4gICAgICAncHJvZHVjdC5wcmljZS5wcmljZVRheEluY2x1ZGVkJyxcbiAgICAgICdwcm9kdWN0LnByaWNlLnByaWNlVGF4RXhjbHVkZWQnLFxuICAgICAgJ3Byb2R1Y3QucHJpY2UudGF4UnVsZXNHcm91cElkJyxcbiAgICBdO1xuXG4gICAgaWYgKCFwcmljZXNGaWVsZHMuaW5jbHVkZXMoZXZlbnQubW9kZWxLZXkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgJHRheFJ1bGVzR3JvdXBJZElucHV0ID0gdGhpcy5tYXBwZXIuZ2V0SW5wdXRzRm9yKCdwcm9kdWN0LnByaWNlLnRheFJ1bGVzR3JvdXBJZCcpO1xuICAgIGNvbnN0ICRzZWxlY3RlZFRheE9wdGlvbiA9ICQoJzpzZWxlY3RlZCcsICR0YXhSdWxlc0dyb3VwSWRJbnB1dCk7XG5cbiAgICBsZXQgdGF4UmF0ZTtcbiAgICB0cnkge1xuICAgICAgdGF4UmF0ZSA9IG5ldyBCaWdOdW1iZXIoJHNlbGVjdGVkVGF4T3B0aW9uLmRhdGEoJ3RheFJhdGUnKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRheFJhdGUgPSBCaWdOdW1iZXIuTmFOO1xuICAgIH1cbiAgICBpZiAodGF4UmF0ZS5pc05hTigpKSB7XG4gICAgICB0YXhSYXRlID0gbmV3IEJpZ051bWJlcigwKTtcbiAgICB9XG5cbiAgICBjb25zdCB0YXhSYXRpbyA9IHRheFJhdGUuZGl2aWRlZEJ5KDEwMCkucGx1cygxKTtcblxuICAgIHN3aXRjaCAoZXZlbnQubW9kZWxLZXkpIHtcbiAgICAgIGNhc2UgJ3Byb2R1Y3QucHJpY2UucHJpY2VUYXhJbmNsdWRlZCc6IHtcbiAgICAgICAgY29uc3QgcHJpY2VUYXhJbmNsdWRlZCA9IG5ldyBCaWdOdW1iZXIodGhpcy5nZXRQcm9kdWN0KCkucHJpY2UucHJpY2VUYXhJbmNsdWRlZCk7XG4gICAgICAgIHRoaXMubWFwcGVyLnNldChcbiAgICAgICAgICAncHJvZHVjdC5wcmljZS5wcmljZVRheEV4Y2x1ZGVkJyxcbiAgICAgICAgICBwcmljZVRheEluY2x1ZGVkLmRpdmlkZWRCeSh0YXhSYXRpbykudG9GaXhlZCh0aGlzLnByZWNpc2lvbiksXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBwcmljZVRheEV4Y2x1ZGVkID0gbmV3IEJpZ051bWJlcih0aGlzLmdldFByb2R1Y3QoKS5wcmljZS5wcmljZVRheEV4Y2x1ZGVkKTtcbiAgICAgICAgdGhpcy5tYXBwZXIuc2V0KCdwcm9kdWN0LnByaWNlLnByaWNlVGF4SW5jbHVkZWQnLCBwcmljZVRheEV4Y2x1ZGVkLnRpbWVzKHRheFJhdGlvKS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgUHJvZHVjdE1hcCBmcm9tICdAcGFnZXMvcHJvZHVjdC9wcm9kdWN0LW1hcCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb2R1Y3RNb2R1bGVzTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuJHByZXZpZXdDb250YWluZXIgPSAkKFByb2R1Y3RNYXAubW9kdWxlcy5wcmV2aWV3Q29udGFpbmVyKTtcbiAgICB0aGlzLiRzZWxlY3RvckNvbnRhaW5lciA9ICQoUHJvZHVjdE1hcC5tb2R1bGVzLnNlbGVjdG9yQ29udGFpbmVyKTtcbiAgICB0aGlzLiRjb250ZW50Q29udGFpbmVyID0gJChQcm9kdWN0TWFwLm1vZHVsZXMuY29udGVudENvbnRhaW5lcik7XG4gICAgdGhpcy4kbW9kdWxlU2VsZWN0b3IgPSAkKFByb2R1Y3RNYXAubW9kdWxlcy5tb2R1bGVTZWxlY3Rvcik7XG4gICAgdGhpcy4kc2VsZWN0b3JQcmV2aWV3cyA9ICQoUHJvZHVjdE1hcC5tb2R1bGVzLnNlbGVjdG9yUHJldmlld3MpO1xuICAgIHRoaXMuJG1vZHVsZUNvbnRlbnRzID0gJChQcm9kdWN0TWFwLm1vZHVsZXMubW9kdWxlQ29udGVudHMpO1xuXG4gICAgdGhpcy5pbml0KCk7XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGluaXQoKSB7XG4gICAgdGhpcy4kcHJldmlld0NvbnRhaW5lci5yZW1vdmVDbGFzcygnZC1ub25lJyk7XG4gICAgdGhpcy4kc2VsZWN0b3JDb250YWluZXIuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuICAgIHRoaXMuJGNvbnRlbnRDb250YWluZXIuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuICAgIHRoaXMuJHNlbGVjdG9yUHJldmlld3MuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuICAgIHRoaXMuJG1vZHVsZUNvbnRlbnRzLmFkZENsYXNzKCdkLW5vbmUnKTtcblxuICAgIHRoaXMuJHByZXZpZXdDb250YWluZXIub24oJ2NsaWNrJywgUHJvZHVjdE1hcC5tb2R1bGVzLnByZXZpZXdCdXR0b24sIChldmVudCkgPT4ge1xuICAgICAgY29uc3QgJGJ1dHRvbiA9ICQoZXZlbnQudGFyZ2V0KTtcbiAgICAgIHRoaXMuc2VsZWN0TW9kdWxlKCRidXR0b24uZGF0YSgndGFyZ2V0JykpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kbW9kdWxlU2VsZWN0b3Iub24oJ2NoYW5nZScsICgpID0+IHRoaXMuc2hvd1NlbGVjdGVkTW9kdWxlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVJZFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2VsZWN0TW9kdWxlKG1vZHVsZUlkKSB7XG4gICAgdGhpcy4kcHJldmlld0NvbnRhaW5lci5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgdGhpcy4kc2VsZWN0b3JDb250YWluZXIucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgIHRoaXMuJGNvbnRlbnRDb250YWluZXIucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuXG4gICAgdGhpcy4kbW9kdWxlU2VsZWN0b3IudmFsKG1vZHVsZUlkKTtcbiAgICAvLyB0cmlnZ2VyIGNoYW5nZSBiZWNhdXNlIHRoaXMgaXMgYSBzZWxlY3QyIGNvbXBvbmVudCwgYW5kIG1vZHVsZSBpcyBzd2l0Y2hlZCB3aGVuIGNoYW5nZSBldmVuIHRyaWdnZXJzXG4gICAgdGhpcy4kbW9kdWxlU2VsZWN0b3IudHJpZ2dlcignY2hhbmdlJyk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNob3dTZWxlY3RlZE1vZHVsZSgpIHtcbiAgICB0aGlzLiRzZWxlY3RvclByZXZpZXdzLmFkZENsYXNzKCdkLW5vbmUnKTtcbiAgICB0aGlzLiRtb2R1bGVDb250ZW50cy5hZGRDbGFzcygnZC1ub25lJyk7XG5cbiAgICBjb25zdCBtb2R1bGVJZCA9IHRoaXMuJG1vZHVsZVNlbGVjdG9yLnZhbCgpO1xuICAgICQoUHJvZHVjdE1hcC5tb2R1bGVzLnNlbGVjdG9yUHJldmlldyhtb2R1bGVJZCkpLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcbiAgICAkKFByb2R1Y3RNYXAubW9kdWxlcy5tb2R1bGVDb250ZW50KG1vZHVsZUlkKSkucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUHJvZHVjdEV2ZW50TWFwIGZyb20gJ0BwYWdlcy9wcm9kdWN0L3Byb2R1Y3QtZXZlbnQtbWFwJztcblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG4vKipcbiAqIFdoZW4gcHJvZHVjdCBpcyBlZGl0ZWQgd2Ugd2FudCB0byBzZW5kIG9ubHkgcGFydGlhbCB1cGRhdGVzXG4gKiBzbyB0aGlzIGNsYXNzIGNvbXBhcmVzIHRoZSBpbml0aWFsIGRhdGEgZnJvbSB0aGUgZm9ybSBjb21wdXRlc1xuICogdGhlIGRpZmYgd2hlbiBmb3JtIGlzIHN1Ym1pdHRlZCBBbmQgZHluYW1pY2FsbHkgYnVpbGQgYW5vdGhlclxuICogZm9ybSB0byBzdWJtaXQgb25seSB1cGRhdGVkIGRhdGEgKGFsb25nIHdpdGggcmVxdWlyZWQgZmllbGRzXG4gKiB0b2tlbiBhbmQgc3VjaCkuXG4gKlxuICogSXQgYWxzbyBkaXNhYmxlZCB0aGUgc3VibWl0IGJ1dHRvbiBhcyBsb25nIGFzIG5vIGRhdGEgaGFzIGJlZW5cbiAqIG1vZGlmaWVkIGJ5IHRoZSB1c2VyLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9kdWN0UGFydGlhbFVwZGF0ZXIge1xuICAvKipcbiAgICogQHBhcmFtIGV2ZW50RW1pdHRlciB7RXZlbnRFbWl0dGVyfVxuICAgKiBAcGFyYW0gJHByb2R1Y3RGb3JtIHtqUXVlcnl9XG4gICAqIEBwYXJhbSAkcHJvZHVjdEZvcm1TdWJtaXRCdXR0b24ge2pRdWVyeX1cbiAgICovXG4gIGNvbnN0cnVjdG9yKGV2ZW50RW1pdHRlciwgJHByb2R1Y3RGb3JtLCAkcHJvZHVjdEZvcm1TdWJtaXRCdXR0b24pIHtcbiAgICB0aGlzLmV2ZW50RW1pdHRlciA9IGV2ZW50RW1pdHRlcjtcbiAgICB0aGlzLiRwcm9kdWN0Rm9ybSA9ICRwcm9kdWN0Rm9ybTtcbiAgICB0aGlzLiRwcm9kdWN0Rm9ybVN1Ym1pdEJ1dHRvbiA9ICRwcm9kdWN0Rm9ybVN1Ym1pdEJ1dHRvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHRoZSBwdWJsaWMgbWV0aG9kIHlvdSBuZWVkIHRvIHVzZSB0byBzdGFydCB0aGlzIGNvbXBvbmVudFxuICAgKiBleDogbmV3IFByb2R1Y3RQYXJ0aWFsVXBkYXRlcigkcHJvZHVjdEZvcm0sICRwcm9kdWN0Rm9ybVN1Ym1pdEJ1dHRvbikud2F0Y2goKTtcbiAgICovXG4gIHdhdGNoKCkge1xuICAgIC8vIEF2b2lkIHN1Ym1pdHRpbmcgZm9ybSB3aGVuIHByZXNzaW5nIEVudGVyXG4gICAgdGhpcy4kcHJvZHVjdEZvcm0ua2V5cHJlc3MoKGUpID0+IGUud2hpY2ggIT09IDEzKTtcbiAgICB0aGlzLiRwcm9kdWN0Rm9ybVN1Ym1pdEJ1dHRvbi5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgIHRoaXMuaW5pdGlhbERhdGEgPSB0aGlzLmdldEZvcm1EYXRhQXNPYmplY3QoKTtcbiAgICB0aGlzLiRwcm9kdWN0Rm9ybS5zdWJtaXQoKCkgPT4gdGhpcy51cGRhdGVQYXJ0aWFsRm9ybSgpKTtcbiAgICAvLyAnZHAuY2hhbmdlJyBldmVudCBhbGxvd3MgdHJhY2tpbmcgZGF0ZXBpY2tlciBpbnB1dCBjaGFuZ2VzXG4gICAgdGhpcy4kcHJvZHVjdEZvcm0ub24oJ2tleXVwIGNoYW5nZSBkcC5jaGFuZ2UnLCAnOmlucHV0JywgKCkgPT4gdGhpcy51cGRhdGVTdWJtaXRCdXR0b25TdGF0ZSgpKTtcbiAgICB0aGlzLmV2ZW50RW1pdHRlci5vbihQcm9kdWN0RXZlbnRNYXAudXBkYXRlU3VibWl0QnV0dG9uU3RhdGUsICgpID0+IHRoaXMudXBkYXRlU3VibWl0QnV0dG9uU3RhdGUoKSk7XG5cbiAgICB0aGlzLndhdGNoQ3VzdG9taXphdGlvbnMoKTtcbiAgICB0aGlzLmluaXRGb3JtYXR0ZWRUZXh0YXJlYSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhdGNoIGV2ZW50cyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBjdXN0b21pemF0aW9ucyBzdWJmb3JtXG4gICAqL1xuICB3YXRjaEN1c3RvbWl6YXRpb25zKCkge1xuICAgIHRoaXMuZXZlbnRFbWl0dGVyLm9uKFByb2R1Y3RFdmVudE1hcC5jdXN0b21pemF0aW9ucy5yb3dBZGRlZCwgKCkgPT4gdGhpcy51cGRhdGVTdWJtaXRCdXR0b25TdGF0ZSgpKTtcbiAgICB0aGlzLmV2ZW50RW1pdHRlci5vbihQcm9kdWN0RXZlbnRNYXAuY3VzdG9taXphdGlvbnMucm93UmVtb3ZlZCwgKCkgPT4gdGhpcy51cGRhdGVTdWJtaXRCdXR0b25TdGF0ZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSaWNoIGVkaXRvcnMgYXBwbHkgYSBsYXllciBvdmVyIGluaXRpYWwgdGV4dGFyZWEgZmllbGRzIHRoZXJlZm9yZSB0aGV5IG5lZWQgdG8gYmUgd2F0Y2hlZCBkaWZmZXJlbnRseS5cbiAgICovXG4gIGluaXRGb3JtYXR0ZWRUZXh0YXJlYSgpIHtcbiAgICB0aGlzLmV2ZW50RW1pdHRlci5vbigndGlueW1jZUVkaXRvclNldHVwJywgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5lZGl0b3Iub24oJ2NoYW5nZScsICgpID0+IHRoaXMudXBkYXRlU3VibWl0QnV0dG9uU3RhdGUoKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2RzIGhhbmRsZXMgdGhlIGZvcm0gc3VibWl0XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdXBkYXRlUGFydGlhbEZvcm0oKSB7XG4gICAgY29uc3QgdXBkYXRlZERhdGEgPSB0aGlzLmdldFVwZGF0ZWRGb3JtRGF0YSgpO1xuXG4gICAgaWYgKHVwZGF0ZWREYXRhICE9PSBudWxsKSB7XG4gICAgICBsZXQgZm9ybU1ldGhvZCA9IHRoaXMuJHByb2R1Y3RGb3JtLnByb3AoJ21ldGhvZCcpO1xuXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHVwZGF0ZWREYXRhLCAnX21ldGhvZCcpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkb3Qtbm90YXRpb25cbiAgICAgICAgZm9ybU1ldGhvZCA9IHVwZGF0ZWREYXRhWydfbWV0aG9kJ107XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtTWV0aG9kICE9PSAnUEFUQ0gnKSB7XG4gICAgICAgIC8vIFJldHVybmluZyB0cnVlIHdpbGwgY29udGludWUgc3VibWl0dGluZyBmb3JtIGFzIHVzdWFsXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgLy8gT24gcGF0Y2ggbWV0aG9kIHdlIGV4dHJhY3QgY2hhbmdlZCB2YWx1ZXMgYW5kIHN1Ym1pdCBvbmx5IHRoZW1cbiAgICAgIHRoaXMuc3VibWl0VXBkYXRlZERhdGEodXBkYXRlZERhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBAdG9kbzogVGhpcyBpcyB0ZW1wb3Jhcnkgd2Ugc2hvdWxkIHByb2JhYmx5IHVzZSBhIG5pY2UgbW9kYWwgaW5zdGVhZCwgdGhhdCBzYWlkIHNpbmNlIHRoZSBzdWJtaXQgYnV0dG9uIGlzXG4gICAgICAvLyAgICAgICAgZGlzYWJsZWQgd2hlbiBubyBkYXRhIGhhcyBiZWVuIG1vZGlmaWVkIGl0IHNob3VsZCBuZXZlciBoYXBwZW5cbiAgICAgIGFsZXJ0KCdubyBmaWVsZHMgdXBkYXRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEeW5hbWljYWxseSBidWlsZCBhIGZvcm0gd2l0aCBwcm92aWRlZCB1cGRhdGVkIGRhdGEgYW5kIHN1Ym1pdCB0aGlzIFwic2hhZG93XCIgZm9ybVxuICAgKlxuICAgKiBAcGFyYW0gdXBkYXRlZERhdGEge09iamVjdH0gQ29udGFpbnMgYW4gb2JqZWN0IHdpdGggYWxsIGZvcm0gZmllbGRzIHRvIHVwZGF0ZSBpbmRleGVkIGJ5IHF1ZXJ5IHBhcmFtZXRlcnMgbmFtZVxuICAgKi9cbiAgc3VibWl0VXBkYXRlZERhdGEodXBkYXRlZERhdGEpIHtcbiAgICB0aGlzLiRwcm9kdWN0Rm9ybVN1Ym1pdEJ1dHRvbi5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgIGNvbnN0ICR1cGRhdGVkRm9ybSA9IHRoaXMuY3JlYXRlU2hhZG93Rm9ybSh1cGRhdGVkRGF0YSk7XG5cbiAgICAkdXBkYXRlZEZvcm0uYXBwZW5kVG8oJ2JvZHknKTtcbiAgICAkdXBkYXRlZEZvcm0uc3VibWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHVwZGF0ZWREYXRhXG4gICAqXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IEZvcm0gY2xvbmUgKEpxdWVyeSBvYmplY3QpXG4gICAqL1xuICBjcmVhdGVTaGFkb3dGb3JtKHVwZGF0ZWREYXRhKSB7XG4gICAgY29uc3QgJHVwZGF0ZWRGb3JtID0gdGhpcy4kcHJvZHVjdEZvcm0uY2xvbmUoKTtcbiAgICAkdXBkYXRlZEZvcm0uZW1wdHkoKTtcbiAgICAkdXBkYXRlZEZvcm0ucHJvcCgnY2xhc3MnLCAnJyk7XG4gICAgT2JqZWN0LmtleXModXBkYXRlZERhdGEpLmZvckVhY2goKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXBkYXRlZERhdGFbZmllbGROYW1lXSkpIHtcbiAgICAgICAgdXBkYXRlZERhdGFbZmllbGROYW1lXS5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHRoaXMuYXBwZW5kSW5wdXRUb0Zvcm0oJHVwZGF0ZWRGb3JtLCBmaWVsZE5hbWUsIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFwcGVuZElucHV0VG9Gb3JtKCR1cGRhdGVkRm9ybSwgZmllbGROYW1lLCB1cGRhdGVkRGF0YVtmaWVsZE5hbWVdKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiAkdXBkYXRlZEZvcm07XG4gIH1cblxuICAvKipcbiAgICogQWRhcHQgdGhlIHN1Ym1pdCBidXR0b24gc3RhdGUsIGFzIGxvbmcgYXMgbm8gZGF0YSBoYXMgYmVlbiB1cGRhdGVkIHRoZSBidXR0b24gaXMgZGlzYWJsZWRcbiAgICovXG4gIHVwZGF0ZVN1Ym1pdEJ1dHRvblN0YXRlKCkge1xuICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gdGhpcy5nZXRVcGRhdGVkRm9ybURhdGEoKTtcbiAgICB0aGlzLiRwcm9kdWN0Rm9ybVN1Ym1pdEJ1dHRvbi5wcm9wKCdkaXNhYmxlZCcsIHVwZGF0ZWREYXRhID09PSBudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB1cGRhdGVkIGRhdGEsIG9ubHkgZmllbGRzIHdoaWNoIGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgaW5pdGlhbCBwYWdlIGxvYWRcbiAgICogYXJlIHJldHVybmVkICh0b2tlbiBhbmQgbWV0aG9kIGFyZSBhZGRlZCBzaW5jZSB0aGV5IGFyZSByZXF1aXJlZCBmb3IgYSB2YWxpZCByZXF1ZXN0KS5cbiAgICpcbiAgICogSWYgbm8gZmllbGRzIGhhdmUgYmVlbiBtb2RpZmllZCB0aGlzIG1ldGhvZCByZXR1cm5zIG51bGwuXG4gICAqXG4gICAqIEByZXR1cm5zIHt7fXxudWxsfVxuICAgKi9cbiAgZ2V0VXBkYXRlZEZvcm1EYXRhKCkge1xuICAgIGNvbnN0IGN1cnJlbnREYXRhID0gdGhpcy5nZXRGb3JtRGF0YUFzT2JqZWN0KCk7XG4gICAgLy8gTG9vcCB0aHJvdWdoIGN1cnJlbnQgZm9ybSBkYXRhIGFuZCByZW1vdmUgdGhlIG9uZSB0aGF0IGRpZCBub3QgY2hhbmdlXG4gICAgLy8gVGhpcyB3YXkgb25seSB1cGRhdGVkIEFORCBuZXcgdmFsdWVzIHJlbWFpblxuICAgIE9iamVjdC5rZXlzKHRoaXMuaW5pdGlhbERhdGEpLmZvckVhY2goKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHRoaXMuaW5pdGlhbERhdGFbZmllbGROYW1lXTtcblxuICAgICAgLy8gRmllbGQgaXMgYWJzZW50IGluIHRoZSBuZXcgZGF0YSAoaXQgd2FzIG5vdCBpbiB0aGUgaW5pdGlhbCkgd2UgZm9yY2UgaXQgdG8gZW1wdHkgc3RyaW5nIChub3QgbnVsbFxuICAgICAgLy8gb3IgaXQgd2lsbCBiZSBpZ25vcmVkKVxuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY3VycmVudERhdGEsIGZpZWxkTmFtZSkpIHtcbiAgICAgICAgY3VycmVudERhdGFbZmllbGROYW1lXSA9ICcnO1xuICAgICAgfSBlbHNlIGlmIChfLmlzRXF1YWwoY3VycmVudERhdGFbZmllbGROYW1lXSwgZmllbGRWYWx1ZSkpIHtcbiAgICAgICAgZGVsZXRlIGN1cnJlbnREYXRhW2ZpZWxkTmFtZV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gTm8gbmVlZCB0byBsb29wIHRocm91Z2ggdGhlIGZpZWxkIGNvbnRhaW5lZCBpbiBjdXJyZW50RGF0YSBhbmQgbm90IGluIHRoZSBpbml0aWFsXG4gICAgLy8gdGhleSBhcmUgbmV3IHZhbHVlcyBzbyBhcmUsIGJ5IGZhY3QsIHVwZGF0ZWQgdmFsdWVzXG5cbiAgICBpZiAoT2JqZWN0LmtleXMoY3VycmVudERhdGEpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gU29tZSBwYXJhbWV0ZXJzIGFyZSBhbHdheXMgbmVlZGVkXG4gICAgY29uc3QgcGVybWFuZW50UGFyYW1ldGVycyA9IFtcbiAgICAgIC8vIFdlIG5lZWQgdGhlIGZvcm0gQ1NSRiB0b2tlblxuICAgICAgJ3Byb2R1Y3RbX3Rva2VuXScsXG4gICAgICAvLyBJZiBtZXRob2QgaXMgbm90IFBPU1Qgb3IgR0VUIGEgaGlkZGVuIHR5cGUgaW5wdXQgaXMgdXNlZCB0byBzaW11bGF0ZSBpdCAobGlrZSBQQVRDSClcbiAgICAgICdfbWV0aG9kJyxcbiAgICBdO1xuICAgIHBlcm1hbmVudFBhcmFtZXRlcnMuZm9yRWFjaCgocGVybWFuZW50UGFyYW1ldGVyKSA9PiB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuaW5pdGlhbERhdGEsIHBlcm1hbmVudFBhcmFtZXRlcikpIHtcbiAgICAgICAgY3VycmVudERhdGFbcGVybWFuZW50UGFyYW1ldGVyXSA9IHRoaXMuaW5pdGlhbERhdGFbcGVybWFuZW50UGFyYW1ldGVyXTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjdXJyZW50RGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzZXJpYWxpemVkIGZvcm0gZGF0YSBhcyBhbiBPYmplY3QgaW5kZXhlZCBieSBmaWVsZCBuYW1lXG4gICAqXG4gICAqIEByZXR1cm5zIHt7fX1cbiAgICovXG4gIGdldEZvcm1EYXRhQXNPYmplY3QoKSB7XG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy4kcHJvZHVjdEZvcm0uc2VyaWFsaXplQXJyYXkoKTtcbiAgICBjb25zdCBzZXJpYWxpemVkRm9ybSA9IHt9O1xuXG4gICAgZm9ybUFycmF5LmZvckVhY2goKGZvcm1GaWVsZCkgPT4ge1xuICAgICAgbGV0IHt2YWx1ZX0gPSBmb3JtRmllbGQ7XG5cbiAgICAgIC8vIElucHV0IG5hbWVzIGNhbiBiZSBpZGVudGljYWwgd2hlbiBleHByZXNzaW5nIGFycmF5IG9mIHZhbHVlcyBmb3Igc2FtZSBmaWVsZCAobGlrZSBtdWx0aXNlbGVjdCBjaGVja2JveGVzKVxuICAgICAgLy8gc28gd2UgbmVlZCB0byBwdXQgdGhlc2UgaW5wdXQgdmFsdWVzIGludG8gc2luZ2xlIGFycmF5IGluZGV4ZWQgYnkgdGhhdCBmaWVsZCBuYW1lXG4gICAgICBpZiAoZm9ybUZpZWxkLm5hbWUuZW5kc1dpdGgoJ1tdJykpIHtcbiAgICAgICAgbGV0IG11bHRpRmllbGQgPSBbXTtcblxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlcmlhbGl6ZWRGb3JtLCBmb3JtRmllbGQubmFtZSkpIHtcbiAgICAgICAgICBtdWx0aUZpZWxkID0gc2VyaWFsaXplZEZvcm1bZm9ybUZpZWxkLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgbXVsdGlGaWVsZC5wdXNoKGZvcm1GaWVsZC52YWx1ZSk7XG4gICAgICAgIHZhbHVlID0gbXVsdGlGaWVsZDtcbiAgICAgIH1cblxuICAgICAgc2VyaWFsaXplZEZvcm1bZm9ybUZpZWxkLm5hbWVdID0gdmFsdWU7XG4gICAgfSk7XG5cbiAgICAvLyBGaWxlIGlucHV0cyBtdXN0IGJlIGhhbmRsZWQgbWFudWFsbHlcbiAgICAkKCdpbnB1dFt0eXBlPVwiZmlsZVwiXScsIHRoaXMuJHByb2R1Y3RGb3JtKS5lYWNoKChpbnB1dEluZGV4LCBmaWxlSW5wdXQpID0+IHtcbiAgICAgICQuZWFjaCgkKGZpbGVJbnB1dClbMF0uZmlsZXMsIChmaWxlSW5kZXgsIGZpbGUpID0+IHtcbiAgICAgICAgc2VyaWFsaXplZEZvcm1bZmlsZUlucHV0Lm5hbWVdID0gZmlsZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNlcmlhbGl6ZWRGb3JtO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSAkZm9ybVxuICAgKiBAcGFyYW0gbmFtZVxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFwcGVuZElucHV0VG9Gb3JtKCRmb3JtLCBuYW1lLCB2YWx1ZSkge1xuICAgICQoJzxpbnB1dD4nKS5hdHRyKHtcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlOiAnaGlkZGVuJyxcbiAgICAgIHZhbHVlLFxuICAgIH0pLmFwcGVuZFRvKCRmb3JtKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuaW1wb3J0IFNlcnAgZnJvbSAnQGFwcC91dGlscy9zZXJwJztcbmltcG9ydCBSZWRpcmVjdE9wdGlvbk1hbmFnZXIgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvZWRpdC9yZWRpcmVjdC1vcHRpb24tbWFuYWdlcic7XG5pbXBvcnQgUHJvZHVjdE1hcCBmcm9tICdAcGFnZXMvcHJvZHVjdC9wcm9kdWN0LW1hcCc7XG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvZHVjdFNFT01hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLiRwcmV2aWV3QnV0dG9uID0gJChQcm9kdWN0TWFwLmZvb3Rlci5wcmV2aWV3VXJsQnV0dG9uKTtcblxuICAgIHRoaXMuaW5pdCgpO1xuXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpbml0KCkge1xuICAgIC8vIEluaXQgdGhlIHByb2R1Y3QvY2F0ZWdvcnkgc2VhcmNoIGZpZWxkIGZvciByZWRpcmVjdGlvbiB0YXJnZXRcbiAgICBjb25zdCAkcmVkaXJlY3RUeXBlSW5wdXQgPSAkKFByb2R1Y3RNYXAuc2VvLnJlZGlyZWN0T3B0aW9uLnR5cGVJbnB1dCk7XG4gICAgY29uc3QgJHJlZGlyZWN0VGFyZ2V0SW5wdXQgPSAkKFByb2R1Y3RNYXAuc2VvLnJlZGlyZWN0T3B0aW9uLnRhcmdldElucHV0KTtcbiAgICBuZXcgUmVkaXJlY3RPcHRpb25NYW5hZ2VyKCRyZWRpcmVjdFR5cGVJbnB1dCwgJHJlZGlyZWN0VGFyZ2V0SW5wdXQpO1xuXG4gICAgLy8gSW5pdCBTZXJwIGNvbXBvbmVudCB0byBwcmV2aWV3IFNlYXJjaCBlbmdpbmUgZGlzcGxheVxuICAgIGNvbnN0IHt0cmFuc2xhdGFibGVJbnB1dCwgdHJhbnNsYXRhYmxlRmllbGR9ID0gd2luZG93LnByZXN0YXNob3AuaW5zdGFuY2U7XG4gICAgbGV0IHByZXZpZXdVcmwgPSB0aGlzLiRwcmV2aWV3QnV0dG9uLmRhdGEoJ3Nlb1VybCcpO1xuXG4gICAgaWYgKCFwcmV2aWV3VXJsKSB7XG4gICAgICBwcmV2aWV3VXJsID0gJyc7XG4gICAgfVxuXG4gICAgbmV3IFNlcnAoXG4gICAgICB7XG4gICAgICAgIGNvbnRhaW5lcjogUHJvZHVjdE1hcC5zZW8uY29udGFpbmVyLFxuICAgICAgICBkZWZhdWx0VGl0bGU6IFByb2R1Y3RNYXAuc2VvLmRlZmF1bHRUaXRsZSxcbiAgICAgICAgd2F0Y2hlZFRpdGxlOiBQcm9kdWN0TWFwLnNlby53YXRjaGVkVGl0bGUsXG4gICAgICAgIGRlZmF1bHREZXNjcmlwdGlvbjogUHJvZHVjdE1hcC5zZW8uZGVmYXVsdERlc2NyaXB0aW9uLFxuICAgICAgICB3YXRjaGVkRGVzY3JpcHRpb246IFByb2R1Y3RNYXAuc2VvLndhdGNoZWREZXNjcmlwdGlvbixcbiAgICAgICAgd2F0Y2hlZE1ldGFVcmw6IFByb2R1Y3RNYXAuc2VvLndhdGNoZWRNZXRhVXJsLFxuICAgICAgICBtdWx0aUxhbmd1YWdlSW5wdXQ6IGAke3RyYW5zbGF0YWJsZUlucHV0LmxvY2FsZUlucHV0U2VsZWN0b3J9Om5vdCguZC1ub25lKWAsXG4gICAgICAgIG11bHRpTGFuZ3VhZ2VGaWVsZDogYCR7dHJhbnNsYXRhYmxlRmllbGQudHJhbnNsYXRpb25GaWVsZFNlbGVjdG9yfS5hY3RpdmVgLFxuICAgICAgfSxcbiAgICAgIHByZXZpZXdVcmwsXG4gICAgKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgU3VwcGxpZXJzTWFwIGZyb20gJ0BwYWdlcy9wcm9kdWN0L3N1cHBsaWVycy1tYXAnO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb2R1Y3RTdXBwbGllcnNNYW5hZ2VyIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdXBwbGllcnNGb3JtSWRcbiAgICogQHBhcmFtIHtib29sZWFufSBmb3JjZVVwZGF0ZURlZmF1bHRcbiAgICpcbiAgICogQHJldHVybnMge3t9fVxuICAgKi9cbiAgY29uc3RydWN0b3Ioc3VwcGxpZXJzRm9ybUlkLCBmb3JjZVVwZGF0ZURlZmF1bHQpIHtcbiAgICB0aGlzLmZvcmNlVXBkYXRlRGVmYXVsdCA9IGZvcmNlVXBkYXRlRGVmYXVsdDtcbiAgICB0aGlzLnN1cHBsaWVyc01hcCA9IFN1cHBsaWVyc01hcChzdXBwbGllcnNGb3JtSWQpO1xuICAgIHRoaXMuJHByb2R1Y3RTdXBwbGllcnNDb2xsZWN0aW9uID0gJCh0aGlzLnN1cHBsaWVyc01hcC5wcm9kdWN0U3VwcGxpZXJzQ29sbGVjdGlvbik7XG4gICAgdGhpcy4kc3VwcGxpZXJJZHNHcm91cCA9ICQodGhpcy5zdXBwbGllcnNNYXAuc3VwcGxpZXJJZHNJbnB1dCkuY2xvc2VzdCgnLmZvcm0tZ3JvdXAnKTtcbiAgICB0aGlzLiRkZWZhdWx0U3VwcGxpZXJHcm91cCA9ICQodGhpcy5zdXBwbGllcnNNYXAuZGVmYXVsdFN1cHBsaWVySW5wdXQpLmNsb3Nlc3QoJy5mb3JtLWdyb3VwJyk7XG4gICAgdGhpcy4kcHJvZHVjdHNUYWJsZSA9ICQodGhpcy5zdXBwbGllcnNNYXAucHJvZHVjdFN1cHBsaWVyc1RhYmxlKTtcbiAgICB0aGlzLiRwcm9kdWN0c1RhYmxlQm9keSA9ICQodGhpcy5zdXBwbGllcnNNYXAucHJvZHVjdHNTdXBwbGllcnNUYWJsZUJvZHkpO1xuXG4gICAgdGhpcy5zdXBwbGllcnMgPSBbXTtcbiAgICB0aGlzLnByb3RvdHlwZVRlbXBsYXRlID0gdGhpcy4kcHJvZHVjdFN1cHBsaWVyc0NvbGxlY3Rpb24uZGF0YSgncHJvdG90eXBlJyk7XG4gICAgdGhpcy5wcm90b3R5cGVOYW1lID0gdGhpcy4kcHJvZHVjdFN1cHBsaWVyc0NvbGxlY3Rpb24uZGF0YSgncHJvdG90eXBlTmFtZScpO1xuICAgIHRoaXMuZGVmYXVsdERhdGFGb3JTdXBwbGllciA9IHRoaXMuZ2V0RGVmYXVsdERhdGFGb3JTdXBwbGllcigpO1xuXG4gICAgdGhpcy5pbml0KCk7XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBpbml0KCkge1xuICAgIHRoaXMubWVtb3JpemVDdXJyZW50U3VwcGxpZXJzKCk7XG4gICAgdGhpcy50b2dnbGVUYWJsZVZpc2liaWxpdHkoKTtcbiAgICB0aGlzLnJlZnJlc2hEZWZhdWx0U3VwcGxpZXJCbG9jaygpO1xuXG4gICAgdGhpcy4kaW5pdGlhbERlZmF1bHQgPSB0aGlzLiRkZWZhdWx0U3VwcGxpZXJHcm91cC5maW5kKCdpbnB1dDpjaGVja2VkJykuZmlyc3QoKTtcbiAgICBpZiAodGhpcy4kaW5pdGlhbERlZmF1bHQubGVuZ3RoKSB7XG4gICAgICB0aGlzLiRpbml0aWFsRGVmYXVsdFxuICAgICAgICAuY2xvc2VzdCh0aGlzLnN1cHBsaWVyc01hcC5jaGVja2JveENvbnRhaW5lcilcbiAgICAgICAgLmFkZENsYXNzKHRoaXMuc3VwcGxpZXJzTWFwLmRlZmF1bHRTdXBwbGllckNsYXNzKTtcbiAgICB9XG5cbiAgICB0aGlzLiRwcm9kdWN0c1RhYmxlLm9uKCdjaGFuZ2UnLCAnaW5wdXQnLCAoKSA9PiB7XG4gICAgICB0aGlzLm1lbW9yaXplQ3VycmVudFN1cHBsaWVycygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kc3VwcGxpZXJJZHNHcm91cC5vbignY2hhbmdlJywgJ2lucHV0JywgKGUpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gZS5jdXJyZW50VGFyZ2V0O1xuXG4gICAgICBpZiAoaW5wdXQuY2hlY2tlZCkge1xuICAgICAgICB0aGlzLmFkZFN1cHBsaWVyKHtcbiAgICAgICAgICBzdXBwbGllcklkOiBpbnB1dC52YWx1ZSxcbiAgICAgICAgICBzdXBwbGllck5hbWU6IGlucHV0LmRhdGFzZXQubGFiZWwsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmVTdXBwbGllcihpbnB1dC52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVuZGVyU3VwcGxpZXJzKCk7XG4gICAgICB0aGlzLnRvZ2dsZVRhYmxlVmlzaWJpbGl0eSgpO1xuICAgICAgdGhpcy5yZWZyZXNoRGVmYXVsdFN1cHBsaWVyQmxvY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZVRhYmxlVmlzaWJpbGl0eSgpIHtcbiAgICBpZiAodGhpcy5nZXRTZWxlY3RlZFN1cHBsaWVycygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5oaWRlVGFibGUoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd1RhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtPYmplY3R9IHN1cHBsaWVyXG4gICAqL1xuICBhZGRTdXBwbGllcihzdXBwbGllcikge1xuICAgIGlmICh0eXBlb2YgdGhpcy5zdXBwbGllcnNbc3VwcGxpZXIuc3VwcGxpZXJJZF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zdCBuZXdTdXBwbGllciA9IE9iamVjdC5jcmVhdGUodGhpcy5kZWZhdWx0RGF0YUZvclN1cHBsaWVyKTtcbiAgICAgIG5ld1N1cHBsaWVyLnN1cHBsaWVySWQgPSBzdXBwbGllci5zdXBwbGllcklkO1xuICAgICAgbmV3U3VwcGxpZXIuc3VwcGxpZXJOYW1lID0gc3VwcGxpZXIuc3VwcGxpZXJOYW1lO1xuXG4gICAgICB0aGlzLnN1cHBsaWVyc1tzdXBwbGllci5zdXBwbGllcklkXSA9IG5ld1N1cHBsaWVyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1cHBsaWVyc1tzdXBwbGllci5zdXBwbGllcklkXS5yZW1vdmVkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW50fSBzdXBwbGllcklkXG4gICAqL1xuICByZW1vdmVTdXBwbGllcihzdXBwbGllcklkKSB7XG4gICAgdGhpcy5zdXBwbGllcnNbc3VwcGxpZXJJZF0ucmVtb3ZlZCA9IHRydWU7XG4gIH1cblxuICByZW5kZXJTdXBwbGllcnMoKSB7XG4gICAgdGhpcy4kcHJvZHVjdHNUYWJsZUJvZHkuZW1wdHkoKTtcblxuICAgIC8vIExvb3AgdGhyb3VnaCBzZWxlY3Qgc3VwcGxpZXJzIHNvIHRoYXQgd2UgdXNlIHRoZSBzYW1lIG9yZGVyIGFzIGluIHRoZSBzZWxlY3QgbGlzdFxuICAgIHRoaXMuZ2V0U2VsZWN0ZWRTdXBwbGllcnMoKS5mb3JFYWNoKChzZWxlY3RlZFN1cHBsaWVyKSA9PiB7XG4gICAgICBjb25zdCBzdXBwbGllciA9IHRoaXMuc3VwcGxpZXJzW3NlbGVjdGVkU3VwcGxpZXIuc3VwcGxpZXJJZF07XG5cbiAgICAgIGlmIChzdXBwbGllci5yZW1vdmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvZHVjdFN1cHBsaWVyUm93ID0gdGhpcy5wcm90b3R5cGVUZW1wbGF0ZS5yZXBsYWNlKFxuICAgICAgICBuZXcgUmVnRXhwKHRoaXMucHJvdG90eXBlTmFtZSwgJ2cnKSxcbiAgICAgICAgc3VwcGxpZXIuc3VwcGxpZXJJZCxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuJHByb2R1Y3RzVGFibGVCb2R5LmFwcGVuZChwcm9kdWN0U3VwcGxpZXJSb3cpO1xuICAgICAgLy8gRmlsbCBpbnB1dHNcbiAgICAgIGNvbnN0IHJvd01hcCA9IHRoaXMuc3VwcGxpZXJzTWFwLnByb2R1Y3RTdXBwbGllclJvdztcbiAgICAgICQocm93TWFwLnN1cHBsaWVySWRJbnB1dChzdXBwbGllci5zdXBwbGllcklkKSkudmFsKHN1cHBsaWVyLnN1cHBsaWVySWQpO1xuICAgICAgJChyb3dNYXAuc3VwcGxpZXJOYW1lUHJldmlldyhzdXBwbGllci5zdXBwbGllcklkKSkuaHRtbChzdXBwbGllci5zdXBwbGllck5hbWUpO1xuICAgICAgJChyb3dNYXAuc3VwcGxpZXJOYW1lSW5wdXQoc3VwcGxpZXIuc3VwcGxpZXJJZCkpLnZhbChzdXBwbGllci5zdXBwbGllck5hbWUpO1xuICAgICAgJChyb3dNYXAucHJvZHVjdFN1cHBsaWVySWRJbnB1dChzdXBwbGllci5zdXBwbGllcklkKSkudmFsKHN1cHBsaWVyLnByb2R1Y3RTdXBwbGllcklkKTtcbiAgICAgICQocm93TWFwLnJlZmVyZW5jZUlucHV0KHN1cHBsaWVyLnN1cHBsaWVySWQpKS52YWwoc3VwcGxpZXIucmVmZXJlbmNlKTtcbiAgICAgICQocm93TWFwLnByaWNlSW5wdXQoc3VwcGxpZXIuc3VwcGxpZXJJZCkpLnZhbChzdXBwbGllci5wcmljZSk7XG4gICAgICAkKHJvd01hcC5jdXJyZW5jeUlkSW5wdXQoc3VwcGxpZXIuc3VwcGxpZXJJZCkpLnZhbChzdXBwbGllci5jdXJyZW5jeUlkKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFNlbGVjdGVkU3VwcGxpZXJzKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkU3VwcGxpZXJzID0gW107XG4gICAgdGhpcy4kc3VwcGxpZXJJZHNHcm91cC5maW5kKCdpbnB1dDpjaGVja2VkJykuZWFjaCgoaW5kZXgsIGlucHV0KSA9PiB7XG4gICAgICBzZWxlY3RlZFN1cHBsaWVycy5wdXNoKHtcbiAgICAgICAgc3VwcGxpZXJOYW1lOiBpbnB1dC5kYXRhc2V0LmxhYmVsLFxuICAgICAgICBzdXBwbGllcklkOiBpbnB1dC52YWx1ZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNlbGVjdGVkU3VwcGxpZXJzO1xuICB9XG5cbiAgcmVmcmVzaERlZmF1bHRTdXBwbGllckJsb2NrKCkge1xuICAgIGNvbnN0IHN1cHBsaWVycyA9IHRoaXMuZ2V0U2VsZWN0ZWRTdXBwbGllcnMoKTtcblxuICAgIGlmIChzdXBwbGllcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAodGhpcy5mb3JjZVVwZGF0ZURlZmF1bHQpIHtcbiAgICAgICAgdGhpcy4kZGVmYXVsdFN1cHBsaWVyR3JvdXAuZmluZCgnaW5wdXQnKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgfVxuICAgICAgdGhpcy5oaWRlRGVmYXVsdFN1cHBsaWVycygpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaG93RGVmYXVsdFN1cHBsaWVycygpO1xuICAgIGNvbnN0IHNlbGVjdGVkU3VwcGxpZXJJZHMgPSBzdXBwbGllcnMubWFwKChzdXBwbGllcikgPT4gc3VwcGxpZXIuc3VwcGxpZXJJZCk7XG5cbiAgICB0aGlzLiRkZWZhdWx0U3VwcGxpZXJHcm91cC5maW5kKCdpbnB1dCcpLmVhY2goKGtleSwgaW5wdXQpID0+IHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSBzZWxlY3RlZFN1cHBsaWVySWRzLmluY2x1ZGVzKGlucHV0LnZhbHVlKTtcblxuICAgICAgaWYgKHRoaXMuZm9yY2VVcGRhdGVEZWZhdWx0ICYmICFpc1ZhbGlkKSB7XG4gICAgICAgIGlucHV0LmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlucHV0LmRpc2FibGVkID0gIWlzVmFsaWQ7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy4kZGVmYXVsdFN1cHBsaWVyR3JvdXAuZmluZCgnaW5wdXQ6Y2hlY2tlZCcpLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmZvcmNlVXBkYXRlRGVmYXVsdCkge1xuICAgICAgdGhpcy5jaGVja0ZpcnN0QXZhaWxhYmxlRGVmYXVsdFN1cHBsaWVyKHNlbGVjdGVkU3VwcGxpZXJJZHMpO1xuICAgIH1cbiAgfVxuXG4gIGhpZGVEZWZhdWx0U3VwcGxpZXJzKCkge1xuICAgIHRoaXMuJGRlZmF1bHRTdXBwbGllckdyb3VwLmFkZENsYXNzKCdkLW5vbmUnKTtcbiAgfVxuXG4gIHNob3dEZWZhdWx0U3VwcGxpZXJzKCkge1xuICAgIHRoaXMuJGRlZmF1bHRTdXBwbGllckdyb3VwLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ludFtdfSBzZWxlY3RlZFN1cHBsaWVySWRzXG4gICAqL1xuICBjaGVja0ZpcnN0QXZhaWxhYmxlRGVmYXVsdFN1cHBsaWVyKHNlbGVjdGVkU3VwcGxpZXJJZHMpIHtcbiAgICBjb25zdCBmaXJzdFN1cHBsaWVySWQgPSBzZWxlY3RlZFN1cHBsaWVySWRzWzBdO1xuICAgIHRoaXMuJGRlZmF1bHRTdXBwbGllckdyb3VwLmZpbmQoYGlucHV0W3ZhbHVlPVwiJHtmaXJzdFN1cHBsaWVySWR9XCJdYCkucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICB9XG5cbiAgc2hvd1RhYmxlKCkge1xuICAgIHRoaXMuJHByb2R1Y3RzVGFibGUucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuICB9XG5cbiAgaGlkZVRhYmxlKCkge1xuICAgIHRoaXMuJHByb2R1Y3RzVGFibGUuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lbW9yaXplIHN1cHBsaWVycyB0byBiZSBhYmxlIHRvIHJlLXJlbmRlciB0aGVtIGxhdGVyLlxuICAgKiBGbGFnIGByZW1vdmVkYCBhbGxvd3MgaWRlbnRpZnlpbmcgd2hldGhlciBzdXBwbGllciB3YXMgcmVtb3ZlZCBmcm9tIGxpc3Qgb3Igc2hvdWxkIGJlIHJlbmRlcmVkXG4gICAqL1xuICBtZW1vcml6ZUN1cnJlbnRTdXBwbGllcnMoKSB7XG4gICAgdGhpcy5nZXRTZWxlY3RlZFN1cHBsaWVycygpLmZvckVhY2goKHN1cHBsaWVyKSA9PiB7XG4gICAgICB0aGlzLnN1cHBsaWVyc1tzdXBwbGllci5zdXBwbGllcklkXSA9IHtcbiAgICAgICAgc3VwcGxpZXJJZDogc3VwcGxpZXIuc3VwcGxpZXJJZCxcbiAgICAgICAgcHJvZHVjdFN1cHBsaWVySWQ6ICQodGhpcy5zdXBwbGllcnNNYXAucHJvZHVjdFN1cHBsaWVyUm93LnByb2R1Y3RTdXBwbGllcklkSW5wdXQoc3VwcGxpZXIuc3VwcGxpZXJJZCkpLnZhbCgpLFxuICAgICAgICBzdXBwbGllck5hbWU6ICQodGhpcy5zdXBwbGllcnNNYXAucHJvZHVjdFN1cHBsaWVyUm93LnN1cHBsaWVyTmFtZUlucHV0KHN1cHBsaWVyLnN1cHBsaWVySWQpKS52YWwoKSxcbiAgICAgICAgcmVmZXJlbmNlOiAkKHRoaXMuc3VwcGxpZXJzTWFwLnByb2R1Y3RTdXBwbGllclJvdy5yZWZlcmVuY2VJbnB1dChzdXBwbGllci5zdXBwbGllcklkKSkudmFsKCksXG4gICAgICAgIHByaWNlOiAkKHRoaXMuc3VwcGxpZXJzTWFwLnByb2R1Y3RTdXBwbGllclJvdy5wcmljZUlucHV0KHN1cHBsaWVyLnN1cHBsaWVySWQpKS52YWwoKSxcbiAgICAgICAgY3VycmVuY3lJZDogJCh0aGlzLnN1cHBsaWVyc01hcC5wcm9kdWN0U3VwcGxpZXJSb3cuY3VycmVuY3lJZElucHV0KHN1cHBsaWVyLnN1cHBsaWVySWQpKS52YWwoKSxcbiAgICAgICAgcmVtb3ZlZDogZmFsc2UsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIFwic2hhZG93XCIgcHJvdG90eXBlIGp1c3QgdG8gcGFyc2UgZGVmYXVsdCB2YWx1ZXMgc2V0IGluc2lkZSB0aGUgaW5wdXQgZmllbGRzLFxuICAgKiB0aGlzIGFsbG93IHRvIGJ1aWxkIGFuIG9iamVjdCB3aXRoIGRlZmF1bHQgdmFsdWVzIHNldCBpbiB0aGUgRm9ybVR5cGVcbiAgICpcbiAgICogQHJldHVybnMge3tyZWZlcmVuY2UsIHJlbW92ZWQ6IGJvb2xlYW4sIHByaWNlLCBjdXJyZW5jeUlkLCBwcm9kdWN0U3VwcGxpZXJJZH19XG4gICAqL1xuICBnZXREZWZhdWx0RGF0YUZvclN1cHBsaWVyKCkge1xuICAgIGNvbnN0IHJvd1Byb3RvdHlwZSA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoXG4gICAgICB0aGlzLnByb3RvdHlwZVRlbXBsYXRlLFxuICAgICAgJ3RleHQvaHRtbCcsXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICByZW1vdmVkOiBmYWxzZSxcbiAgICAgIHByb2R1Y3RTdXBwbGllcklkOiB0aGlzLmdldERhdGFGcm9tUm93KHRoaXMuc3VwcGxpZXJzTWFwLnByb2R1Y3RTdXBwbGllclJvdy5wcm9kdWN0U3VwcGxpZXJJZElucHV0LCByb3dQcm90b3R5cGUpLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldERhdGFGcm9tUm93KHRoaXMuc3VwcGxpZXJzTWFwLnByb2R1Y3RTdXBwbGllclJvdy5yZWZlcmVuY2VJbnB1dCwgcm93UHJvdG90eXBlKSxcbiAgICAgIHByaWNlOiB0aGlzLmdldERhdGFGcm9tUm93KHRoaXMuc3VwcGxpZXJzTWFwLnByb2R1Y3RTdXBwbGllclJvdy5wcmljZUlucHV0LCByb3dQcm90b3R5cGUpLFxuICAgICAgY3VycmVuY3lJZDogdGhpcy5nZXREYXRhRnJvbVJvdyh0aGlzLnN1cHBsaWVyc01hcC5wcm9kdWN0U3VwcGxpZXJSb3cuY3VycmVuY3lJZElucHV0LCByb3dQcm90b3R5cGUpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHNlbGVjdG9yR2VuZXJhdG9yIHtmdW5jdGlvbn1cbiAgICogQHBhcmFtIHJvd1Byb3RvdHlwZSB7RG9jdW1lbnR9XG4gICAqXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgZ2V0RGF0YUZyb21Sb3coc2VsZWN0b3JHZW5lcmF0b3IsIHJvd1Byb3RvdHlwZSkge1xuICAgIHJldHVybiByb3dQcm90b3R5cGUucXVlcnlTZWxlY3RvcihzZWxlY3RvckdlbmVyYXRvcih0aGlzLnByb3RvdHlwZU5hbWUpKS52YWx1ZTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgQ29uZmlybU1vZGFsIGZyb20gJ0Bjb21wb25lbnRzL21vZGFsJztcbmltcG9ydCBQcm9kdWN0TWFwIGZyb20gJ0BwYWdlcy9wcm9kdWN0L3Byb2R1Y3QtbWFwJztcblxuLyoqXG4gKiBUaGlzIGNvbXBvbmVudCB3YXRjaGVzIGZvciBtb2RpZmljYXRpb24gb2YgdGhlIHByb2R1Y3QgdHlwZSwgd2hlbiBpdCBoYXBwZW5zIGl0IGRpc3BsYXlzIGEgbW9kYWwgd2FybmluZ1xuICogZm9yIHRoZSB1c2VyIHdpdGggYSB3YXJuaW5nIGFib3V0IHdoYXQgaXMgZ29pbmcgdG8gYmUgZGVsZXRlZCBpZiBoZSB2YWxpZGF0ZXMgdGhpcyBjaGFuZ2UuIElmIG1vZGlmaWNhdGlvblxuICogaXMgY29uZmlybWVkIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZCByaWdodCBhd2F5IHRvIHZhbGlkYXRlIHRoZSBjaGFuZ2UgYW5kIHVwZGF0ZSB0aGUgcGFnZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvZHVjdFR5cGVNYW5hZ2VyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkdHlwZVNlbGVjdG9yIFNlbGVjdCBlbGVtZW50IHRvIGNob29zZSB0aGUgcHJvZHVjdCB0eXBlXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkcHJvZHVjdEZvcm0gUHJvZHVjdCBmb3JtIHRoYXQgbmVlZHMgdG8gYmUgc3VibWl0dGVkXG4gICAqL1xuICBjb25zdHJ1Y3RvcigkdHlwZVNlbGVjdG9yLCAkcHJvZHVjdEZvcm0pIHtcbiAgICB0aGlzLiR0eXBlU2VsZWN0b3IgPSAkdHlwZVNlbGVjdG9yO1xuICAgIHRoaXMuJHByb2R1Y3RGb3JtID0gJHByb2R1Y3RGb3JtO1xuICAgIHRoaXMucHJvZHVjdElkID0gcGFyc2VJbnQoJHByb2R1Y3RGb3JtLmRhdGEoJ3Byb2R1Y3RJZCcpLCAxMCk7XG4gICAgdGhpcy5pbml0aWFsVHlwZSA9ICR0eXBlU2VsZWN0b3IudmFsKCk7XG5cbiAgICB0aGlzLiR0eXBlU2VsZWN0b3Iub24oJ2NoYW5nZScsIChldmVudCkgPT4gdGhpcy5jb25maXJtVHlwZVN1Ym1pdChldmVudCkpO1xuXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25maXJtVHlwZVN1Ym1pdCgpIHtcbiAgICBsZXQgY29uZmlybU1lc3NhZ2UgPSB0aGlzLiR0eXBlU2VsZWN0b3IuZGF0YSgnY29uZmlybS1tZXNzYWdlJyk7XG4gICAgbGV0IGNvbmZpcm1XYXJuaW5nID0gJyc7XG5cbiAgICAvLyBJZiBubyBwcm9kdWN0SWQgd2UgYXJlIGluIGNyZWF0aW9uIHBhZ2Ugc28gbm8gbmVlZCBmb3IgZXh0cmEgd2FybmluZ1xuICAgIGlmICh0aGlzLnByb2R1Y3RJZCkge1xuICAgICAgc3dpdGNoICh0aGlzLmluaXRpYWxUeXBlKSB7XG4gICAgICAgIGNhc2UgUHJvZHVjdE1hcC5wcm9kdWN0VHlwZS5DT01CSU5BVElPTlM6XG4gICAgICAgICAgY29uZmlybVdhcm5pbmcgPSB0aGlzLiR0eXBlU2VsZWN0b3IuZGF0YSgnY29tYmluYXRpb25zLXdhcm5pbmcnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBQcm9kdWN0TWFwLnByb2R1Y3RUeXBlLlBBQ0s6XG4gICAgICAgICAgY29uZmlybVdhcm5pbmcgPSB0aGlzLiR0eXBlU2VsZWN0b3IuZGF0YSgncGFjay13YXJuaW5nJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUHJvZHVjdE1hcC5wcm9kdWN0VHlwZS5WSVJUVUFMOlxuICAgICAgICAgIGNvbmZpcm1XYXJuaW5nID0gdGhpcy4kdHlwZVNlbGVjdG9yLmRhdGEoJ3ZpcnR1YWwtd2FybmluZycpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFByb2R1Y3RNYXAucHJvZHVjdFR5cGUuU1RBTkRBUkQ6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uZmlybVdhcm5pbmcgPSAnJztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uZmlybVdhcm5pbmcpIHtcbiAgICAgIGNvbmZpcm1XYXJuaW5nID0gYDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nXCI+JHtjb25maXJtV2FybmluZ308L2Rpdj5gO1xuICAgIH1cbiAgICBjb25maXJtTWVzc2FnZSA9IGA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPiR7Y29uZmlybU1lc3NhZ2V9PC9kaXY+YDtcblxuICAgIGNvbnN0IG1vZGFsID0gbmV3IENvbmZpcm1Nb2RhbChcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdtb2RhbC1jb25maXJtLXByb2R1Y3QtdHlwZScsXG4gICAgICAgIGNvbmZpcm1UaXRsZTogdGhpcy4kdHlwZVNlbGVjdG9yLmRhdGEoJ21vZGFsLXRpdGxlJyksXG4gICAgICAgIGNvbmZpcm1NZXNzYWdlOiBgJHtjb25maXJtTWVzc2FnZX0gJHtjb25maXJtV2FybmluZ31gLFxuICAgICAgICBjb25maXJtQnV0dG9uTGFiZWw6IHRoaXMuJHR5cGVTZWxlY3Rvci5kYXRhKCdtb2RhbC1hcHBseScpLFxuICAgICAgICBjbG9zZUJ1dHRvbkxhYmVsOiB0aGlzLiR0eXBlU2VsZWN0b3IuZGF0YSgnbW9kYWwtY2FuY2VsJyksXG4gICAgICAgIGNsb3NhYmxlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgICQoUHJvZHVjdE1hcC5wcm9kdWN0Rm9ybVN1Ym1pdEJ1dHRvbikucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgdGhpcy4kcHJvZHVjdEZvcm0uc3VibWl0KCk7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLiR0eXBlU2VsZWN0b3IudmFsKHRoaXMuaW5pdGlhbFR5cGUpO1xuICAgICAgfSxcbiAgICApO1xuICAgIG1vZGFsLnNob3coKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgRW50aXR5U2VhcmNoSW5wdXQgZnJvbSAnQGNvbXBvbmVudHMvZW50aXR5LXNlYXJjaC1pbnB1dCc7XG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuLyoqXG4gKiBUaGlzIGNvbXBvbmVudCBpcyB1c2VkIGluIHByb2R1Y3QgcGFnZSB0byBzZWxlY3RlZCB3aGVyZSB0aGUgcmVkaXJlY3Rpb24gcG9pbnRzIHRvIHdoZW4gdGhlXG4gKiBwcm9kdWN0IGlzIG91dCBvZiBzdG9jay4gSXQgaXMgY29tcG9zZWQgb24gdHdvIGlucHV0czpcbiAqIC0gYSBzZWxlY3Rpb24gb2YgdGhlIHJlZGlyZWN0aW9uIHR5cGVcbiAqIC0gYSByaWNoIGNvbXBvbmVudCB0byBzZWxlY3QgYSBwcm9kdWN0IG9yIGEgY2F0ZWdvcnlcbiAqXG4gKiBXaGVuIHRoZSB0eXBlIGlzIGNoYW5nZWQgdGhlIGNvbXBvbmVudCBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgdGhlIGxhYmVscywgcmVtb3RlIHNlYXJjaCB1cmxzXG4gKiBhbmQgdmFsdWVzIG9mIHRoZSB0YXJnZXQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZGlyZWN0T3B0aW9uTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCRyZWRpcmVjdFR5cGVJbnB1dCwgJHJlZGlyZWN0VGFyZ2V0SW5wdXQpIHtcbiAgICB0aGlzLiRyZWRpcmVjdFR5cGVJbnB1dCA9ICRyZWRpcmVjdFR5cGVJbnB1dDtcbiAgICB0aGlzLiRyZWRpcmVjdFRhcmdldElucHV0ID0gJHJlZGlyZWN0VGFyZ2V0SW5wdXQ7XG4gICAgdGhpcy4kcmVkaXJlY3RUYXJnZXRSb3cgPSB0aGlzLiRyZWRpcmVjdFRhcmdldElucHV0LmNsb3Nlc3QoJy5mb3JtLWdyb3VwJyk7XG4gICAgdGhpcy4kcmVkaXJlY3RUYXJnZXRMYWJlbCA9ICQoJy5mb3JtLWNvbnRyb2wtbGFiZWwnLCB0aGlzLiRyZWRpcmVjdFRhcmdldFJvdykuZmlyc3QoKTtcbiAgICB0aGlzLiRyZWRpcmVjdFRhcmdldEhpbnQgPSAkKCcudHlwZWFoZWFkLWhpbnQnLCB0aGlzLiRyZWRpcmVjdFRhcmdldFJvdyk7XG4gICAgdGhpcy5idWlsZEF1dG9Db21wbGV0ZVNlYXJjaElucHV0KCk7XG4gICAgdGhpcy53YXRjaFJlZGlyZWN0VHlwZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhdGNoIHRoZSBzZWxlY3RlZCByZWRpcmVjdGlvbiB0eXBlIGFuZCBhZGFwdCB0aGUgaW5wdXRzIGFjY29yZGluZ2x5LlxuICAgKi9cbiAgd2F0Y2hSZWRpcmVjdFR5cGUoKSB7XG4gICAgdGhpcy5sYXN0U2VsZWN0ZWRUeXBlID0gdGhpcy4kcmVkaXJlY3RUeXBlSW5wdXQudmFsKCk7XG5cbiAgICB0aGlzLiRyZWRpcmVjdFR5cGVJbnB1dC5jaGFuZ2UoKCkgPT4ge1xuICAgICAgY29uc3QgcmVkaXJlY3RUeXBlID0gdGhpcy4kcmVkaXJlY3RUeXBlSW5wdXQudmFsKCk7XG5cbiAgICAgIHN3aXRjaCAocmVkaXJlY3RUeXBlKSB7XG4gICAgICAgIGNhc2UgJzMwMS1jYXRlZ29yeSc6XG4gICAgICAgIGNhc2UgJzMwMi1jYXRlZ29yeSc6XG4gICAgICAgICAgdGhpcy5lbnRpdHlTZWFyY2hJbnB1dC5zZXRSZW1vdGVVcmwodGhpcy4kcmVkaXJlY3RUYXJnZXRJbnB1dC5kYXRhKCdjYXRlZ29yeVNlYXJjaFVybCcpKTtcbiAgICAgICAgICB0aGlzLiRyZWRpcmVjdFRhcmdldElucHV0LnByb3AoJ3BsYWNlaG9sZGVyJywgdGhpcy4kcmVkaXJlY3RUYXJnZXRJbnB1dC5kYXRhKCdjYXRlZ29yeVBsYWNlaG9sZGVyJykpO1xuICAgICAgICAgIHRoaXMuJHJlZGlyZWN0VGFyZ2V0TGFiZWwuaHRtbCh0aGlzLiRyZWRpcmVjdFRhcmdldElucHV0LmRhdGEoJ2NhdGVnb3J5TGFiZWwnKSk7XG4gICAgICAgICAgLy8gSWYgcHJldmlvdXMgdHlwZSB3YXMgbm90IGEgY2F0ZWdvcnkgd2UgcmVzZXQgdGhlIHNlbGVjdGVkIHZhbHVlXG4gICAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkVHlwZSAhPT0gJzMwMS1jYXRlZ29yeScgJiYgdGhpcy5sYXN0U2VsZWN0ZWRUeXBlICE9PSAnMzAyLWNhdGVnb3J5Jykge1xuICAgICAgICAgICAgdGhpcy5lbnRpdHlTZWFyY2hJbnB1dC5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy4kcmVkaXJlY3RUYXJnZXRIaW50Lmh0bWwodGhpcy4kcmVkaXJlY3RUYXJnZXRJbnB1dC5kYXRhKCdjYXRlZ29yeUhlbHAnKSk7XG4gICAgICAgICAgdGhpcy5zaG93VGFyZ2V0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJzMwMS1wcm9kdWN0JzpcbiAgICAgICAgY2FzZSAnMzAyLXByb2R1Y3QnOlxuICAgICAgICAgIHRoaXMuZW50aXR5U2VhcmNoSW5wdXQuc2V0UmVtb3RlVXJsKHRoaXMuJHJlZGlyZWN0VGFyZ2V0SW5wdXQuZGF0YSgncHJvZHVjdFNlYXJjaFVybCcpKTtcbiAgICAgICAgICB0aGlzLiRyZWRpcmVjdFRhcmdldElucHV0LnByb3AoJ3BsYWNlaG9sZGVyJywgdGhpcy4kcmVkaXJlY3RUYXJnZXRJbnB1dC5kYXRhKCdwcm9kdWN0UGxhY2Vob2xkZXInKSk7XG4gICAgICAgICAgdGhpcy4kcmVkaXJlY3RUYXJnZXRMYWJlbC5odG1sKHRoaXMuJHJlZGlyZWN0VGFyZ2V0SW5wdXQuZGF0YSgncHJvZHVjdExhYmVsJykpO1xuICAgICAgICAgIC8vIElmIHByZXZpb3VzIHR5cGUgd2FzIG5vdCBhIGNhdGVnb3J5IHdlIHJlc2V0IHRoZSBzZWxlY3RlZCB2YWx1ZVxuICAgICAgICAgIGlmICh0aGlzLmxhc3RTZWxlY3RlZFR5cGUgIT09ICczMDEtcHJvZHVjdCcgJiYgdGhpcy5sYXN0U2VsZWN0ZWRUeXBlICE9PSAnMzAyLXByb2R1Y3QnKSB7XG4gICAgICAgICAgICB0aGlzLmVudGl0eVNlYXJjaElucHV0LnNldFZhbHVlKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLiRyZWRpcmVjdFRhcmdldEhpbnQuaHRtbCh0aGlzLiRyZWRpcmVjdFRhcmdldElucHV0LmRhdGEoJ3Byb2R1Y3RIZWxwJykpO1xuICAgICAgICAgIHRoaXMuc2hvd1RhcmdldCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICc0MDQnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRoaXMuZW50aXR5U2VhcmNoSW5wdXQuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgdGhpcy5oaWRlVGFyZ2V0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0aGlzLmxhc3RTZWxlY3RlZFR5cGUgPSB0aGlzLiRyZWRpcmVjdFR5cGVJbnB1dC52YWwoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGJ1aWxkQXV0b0NvbXBsZXRlU2VhcmNoSW5wdXQoKSB7XG4gICAgdGhpcy5lbnRpdHlTZWFyY2hJbnB1dCA9IG5ldyBFbnRpdHlTZWFyY2hJbnB1dCh0aGlzLiRyZWRpcmVjdFRhcmdldElucHV0KTtcbiAgfVxuXG4gIHNob3dUYXJnZXQoKSB7XG4gICAgdGhpcy4kcmVkaXJlY3RUYXJnZXRSb3cucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuICB9XG5cbiAgaGlkZVRhcmdldCgpIHtcbiAgICB0aGlzLiRyZWRpcmVjdFRhcmdldFJvdy5hZGRDbGFzcygnZC1ub25lJyk7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IFByb2R1Y3RNYXAgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvcHJvZHVjdC1tYXAnO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpcnR1YWxQcm9kdWN0TWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKHByb2R1Y3RGb3JtTW9kZWwpIHtcbiAgICB0aGlzLnByb2R1Y3RGb3JtTW9kZWwgPSBwcm9kdWN0Rm9ybU1vZGVsO1xuICAgIHRoaXMuJHZpcnR1YWxQcm9kdWN0Q29udGFpbmVyID0gJChQcm9kdWN0TWFwLnZpcnR1YWxQcm9kdWN0LmNvbnRhaW5lcik7XG4gICAgdGhpcy4kZmlsZUNvbnRlbnRDb250YWluZXIgPSAkKFByb2R1Y3RNYXAudmlydHVhbFByb2R1Y3QuZmlsZUNvbnRlbnRDb250YWluZXIpO1xuXG4gICAgdGhpcy5pbml0KCk7XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGluaXQoKSB7XG4gICAgdGhpcy5wcm9kdWN0Rm9ybU1vZGVsLndhdGNoKCdzdG9jay5oYXNWaXJ0dWFsUHJvZHVjdEZpbGUnLCAoKSA9PiB0aGlzLnRvZ2dsZUNvbnRlbnRWaXNpYmlsaXR5KCkpO1xuICAgIHRoaXMudG9nZ2xlQ29udGVudFZpc2liaWxpdHkoKTtcbiAgfVxuXG4gIHRvZ2dsZUNvbnRlbnRWaXNpYmlsaXR5KCkge1xuICAgIGNvbnN0IGhhc1ZpcnR1YWxGaWxlID0gTnVtYmVyKHRoaXMucHJvZHVjdEZvcm1Nb2RlbC5nZXRQcm9kdWN0KCkuc3RvY2suaGFzVmlydHVhbFByb2R1Y3RGaWxlKSA9PT0gMTtcbiAgICBjb25zdCBoYXNFcnJvcnMgPSB0aGlzLiR2aXJ0dWFsUHJvZHVjdENvbnRhaW5lclxuICAgICAgLmZpbmQoUHJvZHVjdE1hcC5pbnZhbGlkRmllbGQpXG4gICAgICAubGVuZ3RoICE9PSAwO1xuXG4gICAgaWYgKGhhc1ZpcnR1YWxGaWxlIHx8IGhhc0Vycm9ycykge1xuICAgICAgdGhpcy5zaG93Q29udGVudCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhpZGVDb250ZW50KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBoaWRlQ29udGVudCgpIHtcbiAgICB0aGlzLiRmaWxlQ29udGVudENvbnRhaW5lci5hZGRDbGFzcygnZC1ub25lJyk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNob3dDb250ZW50KCkge1xuICAgIHRoaXMuJGZpbGVDb250ZW50Q29udGFpbmVyLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG1ldGhvZHM6IHtcbiAgICAvKipcbiAgICAgKiBUaGUgc2VsZWN0ZWQgYXR0cmlidXRlIGlzIHByb3ZpZGVkIGFzIGEgcGFyYW1ldGVyIGluc3RlYWQgb2QgdXNpbmcgdGhpcyByZWZlcmVuY2UgYmVjYXVzZSBpdCBoZWxwcyB0aGVcbiAgICAgKiBvYnNlcnZlciB3b3JrIGJldHRlciB3aGUgdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZUdyb3VwcyBpcyBleHBsaWNpdGx5IHVzZWQgYXMgYW4gYXJndW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gYXR0cmlidXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZUdyb3VwXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZUdyb3Vwc1xuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNTZWxlY3RlZChhdHRyaWJ1dGUsIGF0dHJpYnV0ZUdyb3VwLCBhdHRyaWJ1dGVHcm91cHMpIHtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGF0dHJpYnV0ZUdyb3VwcywgYXR0cmlidXRlR3JvdXAuaWQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF0dHJpYnV0ZUdyb3Vwc1thdHRyaWJ1dGVHcm91cC5pZF0uYXR0cmlidXRlcy5pbmNsdWRlcyhhdHRyaWJ1dGUpO1xuICAgIH0sXG4gIH0sXG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb2R1Y3RNb2RlbFVwZGF0ZWQ6ICdwcm9kdWN0TW9kZWxVcGRhdGVkJyxcbiAgdXBkYXRlZFByb2R1Y3RNb2RlbDogJ3VwZGF0ZWRQcm9kdWN0TW9kZWwnLFxuICB1cGRhdGVkUHJvZHVjdEZpZWxkOiAndXBkYXRlZFByb2R1Y3RGaWVsZCcsXG4gIHVwZGF0ZVN1Ym1pdEJ1dHRvblN0YXRlOiAndXBkYXRlU3VibWl0QnV0dG9uU3RhdGUnLFxuICBjdXN0b21pemF0aW9uczoge1xuICAgIHJvd1JlbW92ZWQ6ICdjdXN0b21pemF0aW9uUm93UmVtb3ZlZCcsXG4gICAgcm93QWRkZWQ6ICdjdXN0b21pemF0aW9uUm93QWRkZWQnLFxuICB9LFxuICBkcm9wem9uZToge1xuICAgIGFkZGVkRmlsZTogJ2FkZGVkZmlsZScsXG4gICAgZXJyb3I6ICdlcnJvcicsXG4gICAgc3VjY2VzczogJ3N1Y2Nlc3MnLFxuICAgIGxhbmd1YWdlU2VsZWN0ZWQ6ICdsYW5ndWFnZVNlbGVjdGVkJyxcbiAgICBwaG90b3N3aXBlOiB7XG4gICAgICBkZXN0cm95OiAnZGVzdHJveScsXG4gICAgICBjbG9zZUdhbGxlcnk6ICdjbG9zZUdhbGxlcnknLFxuICAgIH0sXG4gIH0sXG4gIGNvbWJpbmF0aW9uczoge1xuICAgIHJlZnJlc2hQYWdlOiAncmVmcmVzaFBhZ2UnLFxuICAgIHJlZnJlc2hDb21iaW5hdGlvbkxpc3Q6ICdyZWZyZXNoQ29tYmluYXRpb25MaXN0JyxcbiAgICB1cGRhdGVBdHRyaWJ1dGVHcm91cHM6ICd1cGRhdGVBdHRyaWJ1dGVHcm91cHMnLFxuICAgIGNvbWJpbmF0aW9uR2VuZXJhdG9yUmVhZHk6ICdjb21iaW5hdGlvbkdlbmVyYXRvclJlYWR5JyxcbiAgICBvcGVuQ29tYmluYXRpb25zR2VuZXJhdG9yOiAnb3BlbkNvbWJpbmF0aW9uc0dlbmVyYXRvcicsXG4gICAgY2xlYXJGaWx0ZXJzOiAnY2xlYXJGaWx0ZXJzJyxcbiAgICBzZWxlY3RDb21iaW5hdGlvbjogJ3NlbGVjdENvbWJpbmF0aW9uJyxcbiAgfSxcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmNvbnN0IGNvbWJpbmF0aW9uTGlzdElkID0gJyNjb21iaW5hdGlvbl9saXN0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9kdWN0Rm9ybTogJ2Zvcm1bbmFtZT1wcm9kdWN0XScsXG4gIHByb2R1Y3RUeXBlU2VsZWN0b3I6ICcjcHJvZHVjdF9oZWFkZXJfdHlwZScsXG4gIHByb2R1Y3RUeXBlOiB7XG4gICAgU1RBTkRBUkQ6ICdzdGFuZGFyZCcsXG4gICAgUEFDSzogJ3BhY2snLFxuICAgIFZJUlRVQUw6ICd2aXJ0dWFsJyxcbiAgICBDT01CSU5BVElPTlM6ICdjb21iaW5hdGlvbnMnLFxuICB9LFxuICBpbnZhbGlkRmllbGQ6ICcuaXMtaW52YWxpZCcsXG4gIHByb2R1Y3RGb3JtU3VibWl0QnV0dG9uOiAnLnByb2R1Y3QtZm9ybS1zYXZlLWJ1dHRvbicsXG4gIG5hdmlnYXRpb25CYXI6ICcjZm9ybS1uYXYnLFxuICBkcm9wem9uZUltYWdlc0NvbnRhaW5lcjogJy5wcm9kdWN0LWltYWdlLWRyb3B6b25lJyxcbiAgZmVhdHVyZVZhbHVlczoge1xuICAgIGNvbGxlY3Rpb25Db250YWluZXI6ICcuZmVhdHVyZS12YWx1ZXMtY29sbGVjdGlvbicsXG4gICAgY29sbGVjdGlvblJvd3NDb250YWluZXI6ICcuZmVhdHVyZS12YWx1ZXMtY29sbGVjdGlvbiA+IC5jb2wtc20nLFxuICAgIGNvbGxlY3Rpb25Sb3c6ICdkaXYucm93LnByb2R1Y3QtZmVhdHVyZScsXG4gICAgZmVhdHVyZVNlbGVjdDogJ3NlbGVjdC5mZWF0dXJlLXNlbGVjdG9yJyxcbiAgICBmZWF0dXJlVmFsdWVTZWxlY3Q6ICdzZWxlY3QuZmVhdHVyZS12YWx1ZS1zZWxlY3RvcicsXG4gICAgY3VzdG9tVmFsdWVJbnB1dDogJy5jdXN0b20tdmFsdWVzIGlucHV0JyxcbiAgICBjdXN0b21GZWF0dXJlSWRJbnB1dDogJ2lucHV0LmN1c3RvbS12YWx1ZS1pZCcsXG4gICAgZGVsZXRlRmVhdHVyZVZhbHVlOiAnYnV0dG9uLmRlbGV0ZS1mZWF0dXJlLXZhbHVlJyxcbiAgICBhZGRGZWF0dXJlVmFsdWU6ICcuZmVhdHVyZS12YWx1ZS1hZGQtYnV0dG9uJyxcbiAgfSxcbiAgY3VzdG9taXphdGlvbnM6IHtcbiAgICBjdXN0b21pemF0aW9uc0NvbnRhaW5lcjogJy5wcm9kdWN0LWN1c3RvbWl6YXRpb25zLWNvbGxlY3Rpb24nLFxuICAgIGN1c3RvbWl6YXRpb25GaWVsZHNMaXN0OiAnLnByb2R1Y3QtY3VzdG9taXphdGlvbnMtY29sbGVjdGlvbiB1bCcsXG4gICAgYWRkQ3VzdG9taXphdGlvbkJ0bjogJy5hZGQtY3VzdG9taXphdGlvbi1idG4nLFxuICAgIHJlbW92ZUN1c3RvbWl6YXRpb25CdG46ICcucmVtb3ZlLWN1c3RvbWl6YXRpb24tYnRuJyxcbiAgICBjdXN0b21pemF0aW9uRmllbGRSb3c6ICcuY3VzdG9taXphdGlvbi1maWVsZC1yb3cnLFxuICB9LFxuICBjb21iaW5hdGlvbnM6IHtcbiAgICBuYXZpZ2F0aW9uVGFiOiAnI2NvbWJpbmF0aW9ucy10YWItbmF2JyxcbiAgICBleHRlcm5hbENvbWJpbmF0aW9uVGFiOiAnI2V4dGVybmFsLWNvbWJpbmF0aW9uLXRhYicsXG4gICAgcHJlbG9hZGVyOiAnI2NvbWJpbmF0aW9ucy1wcmVsb2FkZXInLFxuICAgIGVtcHR5U3RhdGU6ICcjY29tYmluYXRpb25zLWVtcHR5LXN0YXRlJyxcbiAgICBjb21iaW5hdGlvbnNQYWdpbmF0ZWRMaXN0OiAnI2NvbWJpbmF0aW9ucy1wYWdpbmF0ZWQtbGlzdCcsXG4gICAgY29tYmluYXRpb25zQ29udGFpbmVyOiBgJHtjb21iaW5hdGlvbkxpc3RJZH1gLFxuICAgIGNvbWJpbmF0aW9uc0ZpbHRlcnNDb250YWluZXI6ICcjY29tYmluYXRpb25zX2ZpbHRlcnMnLFxuICAgIGNvbWJpbmF0aW9uc0dlbmVyYXRvckNvbnRhaW5lcjogJyNwcm9kdWN0X2NvbWJpbmF0aW9uc19nZW5lcmF0b3InLFxuICAgIGNvbWJpbmF0aW9uc1RhYmxlOiBgJHtjb21iaW5hdGlvbkxpc3RJZH0gdGFibGVgLFxuICAgIGNvbWJpbmF0aW9uc1RhYmxlQm9keTogYCR7Y29tYmluYXRpb25MaXN0SWR9IHRhYmxlIHRib2R5YCxcbiAgICBjb21iaW5hdGlvbklkSW5wdXRzU2VsZWN0b3I6ICcuY29tYmluYXRpb24taWQtaW5wdXQnLFxuICAgIGlzRGVmYXVsdElucHV0c1NlbGVjdG9yOiAnLmNvbWJpbmF0aW9uLWlzLWRlZmF1bHQtaW5wdXQnLFxuICAgIHJlbW92ZUNvbWJpbmF0aW9uU2VsZWN0b3I6ICcucmVtb3ZlLWNvbWJpbmF0aW9uLWl0ZW0nLFxuICAgIGNvbWJpbmF0aW9uTmFtZTogJ2Zvcm0gLmNhcmQtaGVhZGVyIHNwYW4nLFxuICAgIHBhZ2luYXRpb25Db250YWluZXI6ICcjY29tYmluYXRpb25zLXBhZ2luYXRpb24nLFxuICAgIGxvYWRpbmdTcGlubmVyOiAnI3Byb2R1Y3RDb21iaW5hdGlvbnNMb2FkaW5nJyxcbiAgICBxdWFudGl0eUlucHV0V3JhcHBlcjogJy5jb21iaW5hdGlvbi1xdWFudGl0eScsXG4gICAgaW1wYWN0T25QcmljZUlucHV0V3JhcHBlcjogJy5jb21iaW5hdGlvbi1pbXBhY3Qtb24tcHJpY2UnLFxuICAgIHJlZmVyZW5jZUlucHV0V3JhcHBlcjogJy5jb21iaW5hdGlvbi1yZWZlcmVuY2UnLFxuICAgIHNvcnRhYmxlQ29sdW1uczogJy5wcy1zb3J0YWJsZS1jb2x1bW4nLFxuICAgIGNvbWJpbmF0aW9uSXRlbUZvcm06IHtcbiAgICAgIHF1YW50aXR5S2V5OiAnY29tYmluYXRpb25faXRlbVtxdWFudGl0eV1bdmFsdWVdJyxcbiAgICAgIGltcGFjdE9uUHJpY2VLZXk6ICdjb21iaW5hdGlvbl9pdGVtW2ltcGFjdF9vbl9wcmljZV1bdmFsdWVdJyxcbiAgICAgIHJlZmVyZW5jZUtleTogJ2NvbWJpbmF0aW9uX2l0ZW1bcmVmZXJlbmNlXVt2YWx1ZV0nLFxuICAgICAgdG9rZW5LZXk6ICdjb21iaW5hdGlvbl9pdGVtW190b2tlbl0nLFxuICAgIH0sXG4gICAgZWRpdGlvbkZvcm06ICdmb3JtW25hbWU9XCJjb21iaW5hdGlvbl9mb3JtXCJdJyxcbiAgICBlZGl0aW9uRm9ybUlucHV0czpcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgJ2Zvcm1bbmFtZT1cImNvbWJpbmF0aW9uX2Zvcm1cIl0gaW5wdXQsIGZvcm1bbmFtZT1cImNvbWJpbmF0aW9uX2Zvcm1cIl0gdGV4dGFyZWEsIGZvcm1bbmFtZT1cImNvbWJpbmF0aW9uX2Zvcm1cIl0gc2VsZWN0JyxcbiAgICBlZGl0Q29tYmluYXRpb25CdXR0b25zOiAnLmVkaXQtY29tYmluYXRpb24taXRlbScsXG4gICAgdGFibGVSb3c6IHtcbiAgICAgIGNvbWJpbmF0aW9uSW1nOiAnLmNvbWJpbmF0aW9uLWltYWdlJyxcbiAgICAgIGNvbWJpbmF0aW9uQ2hlY2tib3g6IChyb3dJbmRleCkgPT4gYCR7Y29tYmluYXRpb25MaXN0SWR9X2NvbWJpbmF0aW9uc18ke3Jvd0luZGV4fV9pc19zZWxlY3RlZGAsXG4gICAgICBjb21iaW5hdGlvbklkSW5wdXQ6IChyb3dJbmRleCkgPT4gYCR7Y29tYmluYXRpb25MaXN0SWR9X2NvbWJpbmF0aW9uc18ke3Jvd0luZGV4fV9jb21iaW5hdGlvbl9pZGAsXG4gICAgICBjb21iaW5hdGlvbk5hbWVJbnB1dDogKHJvd0luZGV4KSA9PiBgJHtjb21iaW5hdGlvbkxpc3RJZH1fY29tYmluYXRpb25zXyR7cm93SW5kZXh9X25hbWVgLFxuICAgICAgcmVmZXJlbmNlSW5wdXQ6IChyb3dJbmRleCkgPT4gYCR7Y29tYmluYXRpb25MaXN0SWR9X2NvbWJpbmF0aW9uc18ke3Jvd0luZGV4fV9yZWZlcmVuY2VfdmFsdWVgLFxuICAgICAgaW1wYWN0T25QcmljZUlucHV0OiAocm93SW5kZXgpID0+IGAke2NvbWJpbmF0aW9uTGlzdElkfV9jb21iaW5hdGlvbnNfJHtyb3dJbmRleH1faW1wYWN0X29uX3ByaWNlX3ZhbHVlYCxcbiAgICAgIGZpbmFsUHJpY2VUZUlucHV0OiAocm93SW5kZXgpID0+IGAke2NvbWJpbmF0aW9uTGlzdElkfV9jb21iaW5hdGlvbnNfJHtyb3dJbmRleH1fZmluYWxfcHJpY2VfdGVgLFxuICAgICAgcXVhbnRpdHlJbnB1dDogKHJvd0luZGV4KSA9PiBgJHtjb21iaW5hdGlvbkxpc3RJZH1fY29tYmluYXRpb25zXyR7cm93SW5kZXh9X3F1YW50aXR5X3ZhbHVlYCxcbiAgICAgIGlzRGVmYXVsdElucHV0OiAocm93SW5kZXgpID0+IGAke2NvbWJpbmF0aW9uTGlzdElkfV9jb21iaW5hdGlvbnNfJHtyb3dJbmRleH1faXNfZGVmYXVsdGAsXG4gICAgICBlZGl0QnV0dG9uOiAocm93SW5kZXgpID0+IGAke2NvbWJpbmF0aW9uTGlzdElkfV9jb21iaW5hdGlvbnNfJHtyb3dJbmRleH1fZWRpdGAsXG4gICAgICBkZWxldGVCdXR0b246IChyb3dJbmRleCkgPT4gYCR7Y29tYmluYXRpb25MaXN0SWR9X2NvbWJpbmF0aW9uc18ke3Jvd0luZGV4fV9kZWxldGVgLFxuICAgIH0sXG4gICAgZWRpdE1vZGFsOiAnI2NvbWJpbmF0aW9uLWVkaXQtbW9kYWwnLFxuICAgIGltYWdlczoge1xuICAgICAgc2VsZWN0b3JDb250YWluZXI6ICcuY29tYmluYXRpb24taW1hZ2VzLXNlbGVjdG9yJyxcbiAgICAgIGltYWdlQ2hvaWNlOiAnLmNvbWJpbmF0aW9uLWltYWdlLWNob2ljZScsXG4gICAgICBjaGVja2JveENvbnRhaW5lcjogJy5mb3JtLWNoZWNrJyxcbiAgICAgIGNoZWNrYm94OiAnaW5wdXRbdHlwZT1jaGVja2JveF0nLFxuICAgIH0sXG4gICAgc2Nyb2xsQmFyOiAnLmF0dHJpYnV0ZXMtbGlzdC1vdmVyZmxvdycsXG4gICAgc2VhcmNoSW5wdXQ6ICcjcHJvZHVjdC1jb21iaW5hdGlvbnMtZ2VuZXJhdGUgLmF0dHJpYnV0ZXMtc2VhcmNoJyxcbiAgICBnZW5lcmF0ZUNvbWJpbmF0aW9uc0J1dHRvbjogJy5nZW5lcmF0ZS1jb21iaW5hdGlvbnMtYnV0dG9uJyxcbiAgfSxcbiAgdmlydHVhbFByb2R1Y3Q6IHtcbiAgICBjb250YWluZXI6ICcudmlydHVhbC1wcm9kdWN0LWZpbGUtY29udGFpbmVyJyxcbiAgICBmaWxlQ29udGVudENvbnRhaW5lcjogJy52aXJ0dWFsLXByb2R1Y3QtZmlsZS1jb250ZW50JyxcbiAgfSxcbiAgZHJvcHpvbmU6IHtcbiAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICBmaWxlTWFuYWdlcjogJy5vcGVuZmlsZW1hbmFnZXInLFxuICAgIH0sXG4gICAgcGhvdG9zd2lwZToge1xuICAgICAgZWxlbWVudDogJy5wc3dwJyxcbiAgICB9LFxuICAgIGR6VGVtcGxhdGU6ICcuZHotdGVtcGxhdGUnLFxuICAgIGR6UHJldmlldzogJy5kei1wcmV2aWV3JyxcbiAgICBzb3J0YWJsZUNvbnRhaW5lcjogJyNwcm9kdWN0LWltYWdlcy1kcm9wem9uZScsXG4gICAgc29ydGFibGVJdGVtczogJ2Rpdi5kei1wcmV2aWV3Om5vdCguZGlzYWJsZWQpJyxcbiAgICBkcm9wem9uZUNvbnRhaW5lcjogJy5kcm9wem9uZS1jb250YWluZXInLFxuICAgIGNoZWNrYm94OiAnLm1kLWNoZWNrYm94IGlucHV0JyxcbiAgICBzaG93blRvb2x0aXBzOiAnLnRvb2x0aXAuc2hvdycsXG4gICAgc2F2ZWRJbWFnZUNvbnRhaW5lcjogKGltYWdlSWQpID0+IGAuZHotcHJldmlld1tkYXRhLWlkPVwiJHtpbWFnZUlkfVwiXWAsXG4gICAgc2F2ZWRJbWFnZTogKGltYWdlSWQpID0+IGAuZHotcHJldmlld1tkYXRhLWlkPVwiJHtpbWFnZUlkfVwiXSBpbWdgLFxuICAgIGNvdmVyZWRQcmV2aWV3OiAnLmR6LXByZXZpZXcuaXMtY292ZXInLFxuICAgIHdpbmRvd0ZpbGVNYW5hZ2VyOiAnLmRyb3B6b25lLXdpbmRvdy1maWxlbWFuYWdlcicsXG4gIH0sXG4gIHN1cHBsaWVyczoge1xuICAgIHByb2R1Y3RTdXBwbGllcnM6ICcjcHJvZHVjdF9vcHRpb25zX3N1cHBsaWVycycsXG4gICAgY29tYmluYXRpb25TdXBwbGllcnM6ICcjY29tYmluYXRpb25fZm9ybV9zdXBwbGllcnMnLFxuICB9LFxuICBzZW86IHtcbiAgICBjb250YWluZXI6ICcjcHJvZHVjdF9zZW9fc2VycCcsXG4gICAgZGVmYXVsdFRpdGxlOiAnLnNlcnAtZGVmYXVsdC10aXRsZTppbnB1dCcsXG4gICAgd2F0Y2hlZFRpdGxlOiAnLnNlcnAtd2F0Y2hlZC10aXRsZTppbnB1dCcsXG4gICAgZGVmYXVsdERlc2NyaXB0aW9uOiAnLnNlcnAtZGVmYXVsdC1kZXNjcmlwdGlvbicsXG4gICAgd2F0Y2hlZERlc2NyaXB0aW9uOiAnLnNlcnAtd2F0Y2hlZC1kZXNjcmlwdGlvbicsXG4gICAgd2F0Y2hlZE1ldGFVcmw6ICcuc2VycC13YXRjaGVkLXVybDppbnB1dCcsXG4gICAgcmVkaXJlY3RPcHRpb246IHtcbiAgICAgIHR5cGVJbnB1dDogJyNwcm9kdWN0X3Nlb19yZWRpcmVjdF9vcHRpb25fdHlwZScsXG4gICAgICB0YXJnZXRJbnB1dDogJyNwcm9kdWN0X3Nlb19yZWRpcmVjdF9vcHRpb25fdGFyZ2V0JyxcbiAgICB9LFxuICB9LFxuICBqc1RhYnM6ICcuanMtdGFicycsXG4gIGpzQXJyb3c6ICcuanMtYXJyb3cnLFxuICBqc05hdlRhYnM6ICcuanMtbmF2LXRhYnMnLFxuICB0b2dnbGVUYWI6ICdbZGF0YS10b2dnbGU9XCJ0YWJcIl0nLFxuICBmb3JtQ29udGVudFRhYjogJyNmb3JtX2NvbnRlbnQgPiAuZm9ybS1jb250ZW50dGFiJyxcbiAgbGVmdEFycm93OiAnLmxlZnQtYXJyb3cnLFxuICByaWdodEFycm93OiAnLnJpZ2h0LWFycm93JyxcbiAgZm9vdGVyOiB7XG4gICAgcHJldmlld1VybEJ1dHRvbjogJy5wcmV2aWV3LXVybC1idXR0b24nLFxuICAgIGRlbGV0ZVByb2R1Y3RCdXR0b246ICcuZGVsZXRlLXByb2R1Y3QtYnV0dG9uJyxcbiAgfSxcbiAgY2F0ZWdvcmllczoge1xuICAgIGNhdGVnb3JpZXNDb250YWluZXI6ICcuanMtY2F0ZWdvcmllcy1jb250YWluZXInLFxuICAgIGNhdGVnb3J5VHJlZTogJy5qcy1jYXRlZ29yaWVzLXRyZWUnLFxuICAgIHRyZWVFbGVtZW50OiAnLmNhdGVnb3J5LXRyZWUtZWxlbWVudCcsXG4gICAgdHJlZUVsZW1lbnRJbnB1dHM6ICcuY2F0ZWdvcnktdHJlZS1pbnB1dHMnLFxuICAgIGNoZWNrYm94SW5wdXQ6ICdbdHlwZT1jaGVja2JveF0nLFxuICAgIGNoZWNrZWRDaGVja2JveElucHV0czogJ1t0eXBlPWNoZWNrYm94XTpjaGVja2VkJyxcbiAgICBjaGVja2JveE5hbWU6IChjYXRlZ29yeUlkKSA9PiBgcHJvZHVjdFtjYXRlZ29yaWVzXVtwcm9kdWN0X2NhdGVnb3JpZXNdWyR7Y2F0ZWdvcnlJZH1dW2lzX2Fzc29jaWF0ZWRdYCxcbiAgICBtYXRlcmlhbENoZWNrYm94OiAnLm1kLWNoZWNrYm94JyxcbiAgICByYWRpb0lucHV0OiAnW3R5cGU9cmFkaW9dJyxcbiAgICBkZWZhdWx0UmFkaW9JbnB1dDogJ1t0eXBlPXJhZGlvXTpjaGVja2VkJyxcbiAgICByYWRpb05hbWU6IChjYXRlZ29yeUlkKSA9PiBgcHJvZHVjdFtjYXRlZ29yaWVzXVtwcm9kdWN0X2NhdGVnb3JpZXNdWyR7Y2F0ZWdvcnlJZH1dW2lzX2RlZmF1bHRdYCxcbiAgICB0YWdzQ29udGFpbmVyOiAnI2NhdGVnb3JpZXMtdGFncy1jb250YWluZXInLFxuICAgIHNlYXJjaElucHV0OiAnI3BzLXNlbGVjdC1wcm9kdWN0LWNhdGVnb3J5JyxcbiAgICBmaWVsZHNldDogJy50cmVlLWZpZWxkc2V0JyxcbiAgICBsb2FkZXI6ICcuY2F0ZWdvcmllcy10cmVlLWxvYWRlcicsXG4gICAgY2hpbGRyZW5MaXN0OiAnLmNoaWxkcmVuLWxpc3QnLFxuICAgIGV2ZXJ5SXRlbXM6ICcubGVzcywgLm1vcmUnLFxuICAgIGV4cGFuZEFsbEJ1dHRvbjogJyNjYXRlZ29yaWVzLXRyZWUtZXhwYW5kJyxcbiAgICByZWR1Y2VBbGxCdXR0b246ICcjY2F0ZWdvcmllcy10cmVlLXJlZHVjZScsXG4gIH0sXG4gIG1vZHVsZXM6IHtcbiAgICBwcmV2aWV3Q29udGFpbmVyOiAnLm1vZHVsZS1yZW5kZXItY29udGFpbmVyLmFsbC1tb2R1bGVzJyxcbiAgICBwcmV2aWV3QnV0dG9uOiAnLm1vZHVsZXMtbGlzdC1idXR0b24nLFxuICAgIHNlbGVjdG9yQ29udGFpbmVyOiAnLm1vZHVsZS1zZWxlY3Rpb24nLFxuICAgIG1vZHVsZVNlbGVjdG9yOiAnLm1vZHVsZXMtbGlzdC1zZWxlY3QnLFxuICAgIHNlbGVjdG9yUHJldmlld3M6ICcubW9kdWxlLXNlbGVjdGlvbiAubW9kdWxlLXJlbmRlci1jb250YWluZXInLFxuICAgIHNlbGVjdG9yUHJldmlldzogKG1vZHVsZUlkKSA9PiBgLm1vZHVsZS1zZWxlY3Rpb24gLm1vZHVsZS1yZW5kZXItY29udGFpbmVyLiR7bW9kdWxlSWR9YCxcbiAgICBjb250ZW50Q29udGFpbmVyOiAnLm1vZHVsZS1jb250ZW50cycsXG4gICAgbW9kdWxlQ29udGVudHM6ICcubW9kdWxlLWNvbnRlbnRzIC5tb2R1bGUtcmVuZGVyLWNvbnRhaW5lcicsXG4gICAgbW9kdWxlQ29udGVudDogKG1vZHVsZUlkKSA9PiBgLm1vZHVsZS1jb250ZW50cyAubW9kdWxlLXJlbmRlci1jb250YWluZXIuJHttb2R1bGVJZH1gLFxuICB9LFxufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IFJvdXRlciBmcm9tICdAY29tcG9uZW50cy9yb3V0ZXInO1xuXG5jb25zdCByb3V0ZXIgPSBuZXcgUm91dGVyKCk7XG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBjb25zdCBnZXRQcm9kdWN0QXR0cmlidXRlR3JvdXBzID0gYXN5bmMgKHByb2R1Y3RJZCkgPT4gJC5nZXQocm91dGVyLmdlbmVyYXRlKCdhZG1pbl9wcm9kdWN0c19hdHRyaWJ1dGVfZ3JvdXBzJywge1xuICBwcm9kdWN0SWQsXG59KSk7XG5cbmV4cG9ydCBjb25zdCBnZXRBbGxBdHRyaWJ1dGVHcm91cHMgPSBhc3luYyAoKSA9PiAkLmdldChyb3V0ZXIuZ2VuZXJhdGUoJ2FkbWluX2FsbF9hdHRyaWJ1dGVfZ3JvdXBzJykpO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldFByb2R1Y3RBdHRyaWJ1dGVHcm91cHMsXG4gIGdldEFsbEF0dHJpYnV0ZUdyb3Vwcyxcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmltcG9ydCBSb3V0ZXIgZnJvbSAnQGNvbXBvbmVudHMvcm91dGVyJztcblxuY29uc3Qgcm91dGVyID0gbmV3IFJvdXRlcigpO1xuY29uc3QgeyR9ID0gd2luZG93O1xuXG5leHBvcnQgY29uc3QgZ2V0Q2F0ZWdvcmllcyA9IGFzeW5jICgpID0+ICQuZ2V0KHJvdXRlci5nZW5lcmF0ZSgnYWRtaW5fY2F0ZWdvcmllc19nZXRfY2F0ZWdvcmllc190cmVlJykpO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldENhdGVnb3JpZXMsXG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgUm91dGVyIGZyb20gJ0Bjb21wb25lbnRzL3JvdXRlcic7XG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tYmluYXRpb25zU2VydmljZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge051bWJlcn0gcHJvZHVjdElkXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9kdWN0SWQpIHtcbiAgICB0aGlzLnByb2R1Y3RJZCA9IHByb2R1Y3RJZDtcbiAgICB0aGlzLnJvdXRlciA9IG5ldyBSb3V0ZXIoKTtcbiAgICB0aGlzLmZpbHRlcnMgPSB7fTtcbiAgICB0aGlzLm9yZGVyQnkgPSBudWxsO1xuICAgIHRoaXMub3JkZXJXYXkgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXRcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGxpbWl0XG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgZmV0Y2gob2Zmc2V0LCBsaW1pdCkge1xuICAgIGNvbnN0IGZpbHRlcklkID0gYHByb2R1Y3RfY29tYmluYXRpb25zXyR7dGhpcy5wcm9kdWN0SWR9YDtcbiAgICBjb25zdCByZXF1ZXN0UGFyYW1zID0ge307XG4gICAgLy8gUmVxdWlyZWQgZm9yIHJvdXRlIGdlbmVyYXRpb25cbiAgICByZXF1ZXN0UGFyYW1zLnByb2R1Y3RJZCA9IHRoaXMucHJvZHVjdElkO1xuXG4gICAgLy8gVGhlc2UgYXJlIHRoZSBxdWVyeSBwYXJhbWV0ZXJzXG4gICAgcmVxdWVzdFBhcmFtc1tmaWx0ZXJJZF0gPSB7fTtcbiAgICByZXF1ZXN0UGFyYW1zW2ZpbHRlcklkXS5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgcmVxdWVzdFBhcmFtc1tmaWx0ZXJJZF0ubGltaXQgPSBsaW1pdDtcbiAgICByZXF1ZXN0UGFyYW1zW2ZpbHRlcklkXS5maWx0ZXJzID0gdGhpcy5maWx0ZXJzO1xuICAgIGlmICh0aGlzLm9yZGVyQnkgIT09IG51bGwpIHtcbiAgICAgIHJlcXVlc3RQYXJhbXNbZmlsdGVySWRdLm9yZGVyQnkgPSB0aGlzLm9yZGVyQnk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9yZGVyV2F5ICE9PSBudWxsKSB7XG4gICAgICByZXF1ZXN0UGFyYW1zW2ZpbHRlcklkXS5zb3J0T3JkZXIgPSB0aGlzLm9yZGVyV2F5O1xuICAgIH1cblxuICAgIHJldHVybiAkLmdldCh0aGlzLnJvdXRlci5nZW5lcmF0ZSgnYWRtaW5fcHJvZHVjdHNfY29tYmluYXRpb25zJywgcmVxdWVzdFBhcmFtcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW50fSBjb21iaW5hdGlvbklkXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgcmVtb3ZlQ29tYmluYXRpb24oY29tYmluYXRpb25JZCkge1xuICAgIHJldHVybiAkLmFqYXgoe1xuICAgICAgdXJsOiB0aGlzLnJvdXRlci5nZW5lcmF0ZSgnYWRtaW5fcHJvZHVjdHNfY29tYmluYXRpb25zX3JlbW92ZV9jb21iaW5hdGlvbicsIHtcbiAgICAgICAgY29tYmluYXRpb25JZCxcbiAgICAgIH0pLFxuICAgICAgdHlwZTogJ0RFTEVURScsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGNvbWJpbmF0aW9uSWRcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICB1cGRhdGVMaXN0ZWRDb21iaW5hdGlvbihjb21iaW5hdGlvbklkLCBkYXRhKSB7XG4gICAgcmV0dXJuICQuYWpheCh7XG4gICAgICB1cmw6IHRoaXMucm91dGVyLmdlbmVyYXRlKCdhZG1pbl9wcm9kdWN0c19jb21iaW5hdGlvbnNfdXBkYXRlX2NvbWJpbmF0aW9uX2Zyb21fbGlzdGluZycsIHtcbiAgICAgICAgY29tYmluYXRpb25JZCxcbiAgICAgIH0pLFxuICAgICAgZGF0YSxcbiAgICAgIHR5cGU6ICdQQVRDSCcsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtPYmplY3R9IGRhdGEgQXR0cmlidXRlcyBpbmRleGVkIGJ5IGF0dHJpYnV0ZUdyb3VwSWQgeyAxOiBbMjMsIDM0XSwgMzogWzQ1LCA1Ml19XG4gICAqL1xuICBnZW5lcmF0ZUNvbWJpbmF0aW9ucyhkYXRhKSB7XG4gICAgcmV0dXJuICQuYWpheCh7XG4gICAgICB1cmw6IHRoaXMucm91dGVyLmdlbmVyYXRlKCdhZG1pbl9wcm9kdWN0c19jb21iaW5hdGlvbnNfZ2VuZXJhdGUnLCB7XG4gICAgICAgIHByb2R1Y3RJZDogdGhpcy5wcm9kdWN0SWQsXG4gICAgICB9KSxcbiAgICAgIGRhdGEsXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIGdldENvbWJpbmF0aW9uSWRzKCkge1xuICAgIHJldHVybiAkLmdldChcbiAgICAgIHRoaXMucm91dGVyLmdlbmVyYXRlKCdhZG1pbl9wcm9kdWN0c19jb21iaW5hdGlvbnNfaWRzJywge1xuICAgICAgICBwcm9kdWN0SWQ6IHRoaXMucHJvZHVjdElkLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3JkZXJCeVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3JkZXJXYXlcbiAgICovXG4gIHNldE9yZGVyQnkob3JkZXJCeSwgb3JkZXJXYXkpIHtcbiAgICB0aGlzLm9yZGVyQnkgPSBvcmRlckJ5O1xuICAgIHRoaXMub3JkZXJXYXkgPSBvcmRlcldheS50b0xvd2VyQ2FzZSgpID09PSAnZGVzYycgPyAnREVTQycgOiAnQVNDJztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cbiAgZ2V0RmlsdGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBmaWx0ZXJzXG4gICAqL1xuICBzZXRGaWx0ZXJzKGZpbHRlcnMpIHtcbiAgICB0aGlzLmZpbHRlcnMgPSBmaWx0ZXJzO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmltcG9ydCBSb3V0ZXIgZnJvbSAnQGNvbXBvbmVudHMvcm91dGVyJztcblxuY29uc3Qgcm91dGVyID0gbmV3IFJvdXRlcigpO1xuY29uc3QgeyR9ID0gd2luZG93O1xuXG5leHBvcnQgY29uc3QgZ2V0UHJvZHVjdEltYWdlcyA9IGFzeW5jIChwcm9kdWN0SWQpID0+IHtcbiAgY29uc3QgaW1hZ2VzVXJsID0gcm91dGVyLmdlbmVyYXRlKCdhZG1pbl9wcm9kdWN0c192Ml9nZXRfaW1hZ2VzJywge1xuICAgIHByb2R1Y3RJZCxcbiAgfSk7XG5cbiAgcmV0dXJuICQuZ2V0KGltYWdlc1VybCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2F2ZUltYWdlSW5mb3JtYXRpb25zID0gYXN5bmMgKHNlbGVjdGVkRmlsZSwgdG9rZW4sIGZvcm1OYW1lKSA9PiB7XG4gIGNvbnN0IHNhdmVVcmwgPSByb3V0ZXIuZ2VuZXJhdGUoJ2FkbWluX3Byb2R1Y3RzX3YyX3VwZGF0ZV9pbWFnZScsIHtcbiAgICBwcm9kdWN0SW1hZ2VJZDogc2VsZWN0ZWRGaWxlLmltYWdlX2lkLFxuICB9KTtcblxuICBjb25zdCBkYXRhID0ge307XG4gIGRhdGFbYCR7Zm9ybU5hbWV9W2lzX2NvdmVyXWBdID0gc2VsZWN0ZWRGaWxlLmlzX2NvdmVyID8gMSA6IDA7XG4gIE9iamVjdC5rZXlzKHNlbGVjdGVkRmlsZS5sZWdlbmRzKS5mb3JFYWNoKChsYW5nSWQpID0+IHtcbiAgICBkYXRhW2Ake2Zvcm1OYW1lfVtsZWdlbmRdWyR7bGFuZ0lkfV1gXSA9IHNlbGVjdGVkRmlsZS5sZWdlbmRzW2xhbmdJZF07XG4gIH0pO1xuICBkYXRhW2Ake2Zvcm1OYW1lfVtfdG9rZW5dYF0gPSB0b2tlbjtcblxuICByZXR1cm4gJC5hamF4KHNhdmVVcmwsIHtcbiAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgZGF0YSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVwbGFjZUltYWdlID0gYXN5bmMgKHNlbGVjdGVkRmlsZSwgbmV3RmlsZSwgZm9ybU5hbWUsIHRva2VuKSA9PiB7XG4gIGNvbnN0IHJlcGxhY2VVcmwgPSByb3V0ZXIuZ2VuZXJhdGUoJ2FkbWluX3Byb2R1Y3RzX3YyX3VwZGF0ZV9pbWFnZScsIHtcbiAgICBwcm9kdWN0SW1hZ2VJZDogc2VsZWN0ZWRGaWxlLmltYWdlX2lkLFxuICB9KTtcblxuICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICBmb3JtRGF0YS5hcHBlbmQoYCR7Zm9ybU5hbWV9W2ZpbGVdYCwgbmV3RmlsZSk7XG4gIGZvcm1EYXRhLmFwcGVuZChgJHtmb3JtTmFtZX1bX3Rva2VuXWAsIHRva2VuKTtcbiAgZm9ybURhdGEuYXBwZW5kKCdfbWV0aG9kJywgJ1BBVENIJyk7XG5cbiAgcmV0dXJuICQuYWpheChyZXBsYWNlVXJsLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgZGF0YTogZm9ybURhdGEsXG4gICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgIGNvbnRlbnRUeXBlOiBmYWxzZSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2F2ZUltYWdlUG9zaXRpb24gPSBhc3luYyAocHJvZHVjdEltYWdlSWQsIG5ld1Bvc2l0aW9uLCBmb3JtTmFtZSwgdG9rZW4pID0+IHtcbiAgY29uc3Qgc29ydFVybCA9IHJvdXRlci5nZW5lcmF0ZSgnYWRtaW5fcHJvZHVjdHNfdjJfdXBkYXRlX2ltYWdlJywge1xuICAgIHByb2R1Y3RJbWFnZUlkLFxuICB9KTtcblxuICBjb25zdCBkYXRhID0ge307XG4gIGRhdGFbYCR7Zm9ybU5hbWV9W3Bvc2l0aW9uXWBdID0gbmV3UG9zaXRpb247XG4gIGRhdGFbYCR7Zm9ybU5hbWV9W190b2tlbl1gXSA9IHRva2VuO1xuXG4gIHJldHVybiAkLmFqYXgoc29ydFVybCwge1xuICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICBkYXRhLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVQcm9kdWN0SW1hZ2UgPSBhc3luYyAocHJvZHVjdEltYWdlSWQpID0+IHtcbiAgY29uc3QgZGVsZXRlVXJsID0gcm91dGVyLmdlbmVyYXRlKCdhZG1pbl9wcm9kdWN0c192Ml9kZWxldGVfaW1hZ2UnLCB7XG4gICAgcHJvZHVjdEltYWdlSWQsXG4gIH0pO1xuXG4gIHJldHVybiAkLnBvc3QoZGVsZXRlVXJsKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2V0UHJvZHVjdEltYWdlcyxcbiAgc2F2ZUltYWdlSW5mb3JtYXRpb25zLFxuICByZXBsYWNlSW1hZ2UsXG4gIHNhdmVJbWFnZVBvc2l0aW9uLFxuICByZW1vdmVQcm9kdWN0SW1hZ2UsXG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCAoc3VwcGxpZXJzRm9ybUlkKSA9PiB7XG4gIGNvbnN0IHByb2R1Y3RTdXBwbGllcnNJZCA9IGAke3N1cHBsaWVyc0Zvcm1JZH1fcHJvZHVjdF9zdXBwbGllcnNgO1xuICBjb25zdCBwcm9kdWN0U3VwcGxpZXJJbnB1dElkID0gKHN1cHBsaWVySW5kZXgsIGlucHV0TmFtZSkgPT4gYCR7cHJvZHVjdFN1cHBsaWVyc0lkfV8ke3N1cHBsaWVySW5kZXh9XyR7aW5wdXROYW1lfWA7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9kdWN0U3VwcGxpZXJzQ29sbGVjdGlvbjogYCR7cHJvZHVjdFN1cHBsaWVyc0lkfWAsXG4gICAgc3VwcGxpZXJJZHNJbnB1dDogYCR7c3VwcGxpZXJzRm9ybUlkfV9zdXBwbGllcl9pZHNgLFxuICAgIGRlZmF1bHRTdXBwbGllcklucHV0OiBgJHtzdXBwbGllcnNGb3JtSWR9X2RlZmF1bHRfc3VwcGxpZXJfaWRgLFxuICAgIHByb2R1Y3RTdXBwbGllcnNUYWJsZTogYCR7cHJvZHVjdFN1cHBsaWVyc0lkfSB0YWJsZWAsXG4gICAgcHJvZHVjdHNTdXBwbGllcnNUYWJsZUJvZHk6IGAke3Byb2R1Y3RTdXBwbGllcnNJZH0gdGFibGUgdGJvZHlgLFxuICAgIGRlZmF1bHRTdXBwbGllckNsYXNzOiAnZGVmYXVsdC1zdXBwbGllcicsXG4gICAgcHJvZHVjdFN1cHBsaWVyUm93OiB7XG4gICAgICBzdXBwbGllcklkSW5wdXQ6IChzdXBwbGllckluZGV4KSA9PiBwcm9kdWN0U3VwcGxpZXJJbnB1dElkKHN1cHBsaWVySW5kZXgsICdzdXBwbGllcl9pZCcpLFxuICAgICAgc3VwcGxpZXJOYW1lSW5wdXQ6IChzdXBwbGllckluZGV4KSA9PiBwcm9kdWN0U3VwcGxpZXJJbnB1dElkKHN1cHBsaWVySW5kZXgsICdzdXBwbGllcl9uYW1lJyksXG4gICAgICBwcm9kdWN0U3VwcGxpZXJJZElucHV0OiAoc3VwcGxpZXJJbmRleCkgPT4gcHJvZHVjdFN1cHBsaWVySW5wdXRJZChzdXBwbGllckluZGV4LCAncHJvZHVjdF9zdXBwbGllcl9pZCcpLFxuICAgICAgcmVmZXJlbmNlSW5wdXQ6IChzdXBwbGllckluZGV4KSA9PiBwcm9kdWN0U3VwcGxpZXJJbnB1dElkKHN1cHBsaWVySW5kZXgsICdyZWZlcmVuY2UnKSxcbiAgICAgIHByaWNlSW5wdXQ6IChzdXBwbGllckluZGV4KSA9PiBwcm9kdWN0U3VwcGxpZXJJbnB1dElkKHN1cHBsaWVySW5kZXgsICdwcmljZV90YXhfZXhjbHVkZWQnKSxcbiAgICAgIGN1cnJlbmN5SWRJbnB1dDogKHN1cHBsaWVySW5kZXgpID0+IHByb2R1Y3RTdXBwbGllcklucHV0SWQoc3VwcGxpZXJJbmRleCwgJ2N1cnJlbmN5X2lkJyksXG4gICAgICBzdXBwbGllck5hbWVQcmV2aWV3OiAoc3VwcGxpZXJJbmRleCkgPT4gYCNwcm9kdWN0X3N1cHBsaWVyX3Jvd18ke3N1cHBsaWVySW5kZXh9IC5zdXBwbGllcl9uYW1lIC5wcmV2aWV3YCxcbiAgICB9LFxuICAgIGNoZWNrYm94Q29udGFpbmVyOiAnLmZvcm0tY2hlY2snLFxuICB9O1xufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cbmltcG9ydCBWdWUgZnJvbSAndnVlJztcblxubGV0IGJpbmRlZCA9IFtdO1xuXG5mdW5jdGlvbiBoYW5kbGVyKGUpIHtcbiAgYmluZGVkLmZvckVhY2goKGVsKSA9PiB7XG4gICAgLy8gR29pbmcgdGhyb3VnaCB0aGUgcGF0aCBpcyBtb3JlIGFjY3VyYXRlIGJlY2F1c2UgdGhlIGluaXRpYWwgdGFyZ2V0IG1pZ2h0IGhhdmUgYmVlbiByZW1vdmVkXG4gICAgLy8gZnJvbSB0aGUgRE9NIGJ5IHRoZSB0aW1lIHRoaXMgaGFuZGxlciBpcyByZWFjaGVkIChleDogY2xpY2sgb24gdHlwZWFoZWFkIHJlc2VhcmNoIHN1Z2dlc3Rpb24pXG4gICAgaWYgKGUucGF0aCAmJiBlLnBhdGgubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGUucGF0aC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBjb25zdCBhbmNlc3RvciA9IGUucGF0aFtpXTtcblxuICAgICAgICBpZiAoYW5jZXN0b3IgPT09IGVsLm5vZGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTm8gYW5jZXN0b3JzIG1hdGNoZWQgZWwsIHNvIHRoZSBjbGljayB3YXMgb3V0c2lkZVxuICAgICAgZWwuY2FsbGJhY2soZSk7XG4gICAgfSBlbHNlIGlmICghZWwubm9kZS5jb250YWlucyhlLnRhcmdldCkpIHtcbiAgICAgIGVsLmNhbGxiYWNrKGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZExpc3RlbmVyKG5vZGUsIGNhbGxiYWNrKSB7XG4gIGlmICghYmluZGVkLmxlbmd0aCkge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlciwgZmFsc2UpO1xuICB9XG5cbiAgYmluZGVkLnB1c2goe25vZGUsIGNhbGxiYWNrfSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKG5vZGUsIGNhbGxiYWNrKSB7XG4gIGJpbmRlZCA9IGJpbmRlZC5maWx0ZXIoKGVsKSA9PiB7XG4gICAgaWYgKGVsLm5vZGUgIT09IG5vZGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWwuY2FsbGJhY2sgIT09IGNhbGxiYWNrO1xuICB9KTtcbiAgaWYgKCFiaW5kZWQubGVuZ3RoKSB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVyLCBmYWxzZSk7XG4gIH1cbn1cblxuVnVlLmRpcmVjdGl2ZSgnY2xpY2stb3V0c2lkZScsIHtcbiAgYmluZChlbCwgYmluZGluZykge1xuICAgIHJlbW92ZUxpc3RlbmVyKGVsLCBiaW5kaW5nLnZhbHVlKTtcbiAgICBpZiAodHlwZW9mIGJpbmRpbmcudmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFkZExpc3RlbmVyKGVsLCBiaW5kaW5nLnZhbHVlKTtcbiAgICB9XG4gIH0sXG4gIHVwZGF0ZShlbCwgYmluZGluZykge1xuICAgIGlmIChiaW5kaW5nLnZhbHVlICE9PSBiaW5kaW5nLm9sZFZhbHVlKSB7XG4gICAgICByZW1vdmVMaXN0ZW5lcihlbCwgYmluZGluZy5vbGRWYWx1ZSk7XG4gICAgICBhZGRMaXN0ZW5lcihlbCwgYmluZGluZy52YWx1ZSk7XG4gICAgfVxuICB9LFxuICB1bmJpbmQoZWwsIGJpbmRpbmcpIHtcbiAgICByZW1vdmVMaXN0ZW5lcihlbCwgYmluZGluZy52YWx1ZSk7XG4gIH0sXG59KTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuLyoqXG4gKiBUaGlzIGZvcm1hdHRlciBpcyB1c2VkIGJ5IFZ1ZUkxOG4sIHRoZSBiYXNpYyBmb3JtYXQgZm9yIHZhcmlhYmxlcyBsb29rc1xuICogbGlrZSAnSGkge25hbWV9JyBvciAnSGkgezB9JyBTYWRseSBpdCBkb2Vzbid0IG1hdGNoIHRoZSBQcmVzdGFTaG9wIHVzdWFsXG4gKiBwbGFjZWhvbGRlcnMgZm9ybWF0LlxuICogU28gdGhpcyBjdXN0b20gZm9ybWF0dGVyIGFsbG93cyB1cyB0byBzaW1wbGUgcmVwbGFjZSBpbiBvcmRlciB0byB1c2UgZm9ybWF0c1xuICogbGlrZSAnSGkgJW5hbWUlJyB0aGUgcGFyYW1ldGVycyB0aGVuIHNob3VsZCBiZSBhbiBvYmplY3QgbGlrZSB7JyVuYW1lJSc6ICdKb2huJ31cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVwbGFjZUZvcm1hdHRlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0gbWVzc2FnZSB7c3RyaW5nfVxuICAgKiBAcGFyYW0gdmFsdWVzIHtvYmplY3R9XG4gICAqXG4gICAqIEByZXR1cm5zIHthcnJheX1cbiAgICovXG4gIGludGVycG9sYXRlKG1lc3NhZ2UsIHZhbHVlcykge1xuICAgIGlmICghdmFsdWVzKSB7XG4gICAgICByZXR1cm4gW21lc3NhZ2VdO1xuICAgIH1cblxuICAgIGxldCBtc2cgPSBtZXNzYWdlO1xuICAgIE9iamVjdC5rZXlzKHZhbHVlcykuZm9yRWFjaCgocGFyYW0pID0+IHtcbiAgICAgIGxldCBwbGFjZWhvbGRlciA9IHBhcmFtO1xuXG4gICAgICAvLyBJZiB0aGUgcGFyYW0gZG9lc24ndCB1c2UgUHJlc3RhU2hvcCBmb3JtYXR0aW5nICh3aXRoICUpIG5vciBTeW1mb255IHVzdWFsIG9uZSAod2l0aCB7fSlcbiAgICAgIC8vIHRoZW4gd2UgZmFsbGJhY2sgdG8gVnVlSTE4biB1c3VhbCBvbmUgd2hpY2ggdXNlcyBge3BhcmFtfWBcbiAgICAgIGlmIChwbGFjZWhvbGRlci5pbmRleE9mKCclJykgPT09IC0xICYmIHBsYWNlaG9sZGVyLmluZGV4T2YoJ3snKSA9PT0gLTEpIHtcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBgeyR7cGxhY2Vob2xkZXJ9fWA7XG4gICAgICB9XG4gICAgICBtc2cgPSBtc2cucmVwbGFjZShwbGFjZWhvbGRlciwgdmFsdWVzW3BhcmFtXSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gW21zZ107XG4gIH1cbn1cbiIsIjwhLS0qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi0tPlxuPHRlbXBsYXRlPlxuICA8ZGl2IGlkPVwic2VycFwiPlxuICAgIDxkaXYgY2xhc3M9XCJzZXJwLXByZXZpZXdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZXJwLXRpdGxlXCI+XG4gICAgICAgIHt7IGRpc3BsYXllZFRpdGxlIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZXJwLXVybFwiPlxuICAgICAgICB7eyB1cmwgfX08c3BhbiBjbGFzcz1cInNlcnAtYXJyb3dcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VycC1kZXNjcmlwdGlvblwiPlxuICAgICAgICB7eyBkaXNwbGF5ZWREZXNjcmlwdGlvbiB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICdTZXJwJyxcbiAgICBwcm9wczoge1xuICAgICAgdXJsOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgZGVmYXVsdDogJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tLycsXG4gICAgICB9LFxuICAgICAgZGVzY3JpcHRpb246IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgIH0sXG4gICAgICB0aXRsZToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBkaXNwbGF5ZWRUaXRsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudGl0bGUubGVuZ3RoID4gNzApIHtcbiAgICAgICAgICByZXR1cm4gYCR7dGhpcy50aXRsZS5zdWJzdHJpbmcoMCwgNzApfS4uLmA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy50aXRsZTtcbiAgICAgIH0sXG4gICAgICBkaXNwbGF5ZWREZXNjcmlwdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRpb24ubGVuZ3RoID4gMTUwKSB7XG4gICAgICAgICAgcmV0dXJuIGAke3RoaXMuZGVzY3JpcHRpb24uc3Vic3RyaW5nKDAsIDE1MCl9Li4uYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmRlc2NyaXB0aW9uO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHR5cGU9XCJ0ZXh0L3Njc3NcIiBzY29wZWQ+XG4gICAgLnNlcnAtcHJldmlldyB7XG4gICAgICAgIG1hcmdpbi10b3A6IDE1cHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwIDVweCAwIHJnYmEoMCwgMCwgMCwgMC4xMik7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gICAgICAgIGJvcmRlcjogc29saWQgMXB4ICNlN2U3ZTc7XG4gICAgICAgIHBhZGRpbmc6IDMwcHg7XG4gICAgICAgIG1heC13aWR0aDogNzAwcHg7XG5cbiAgICAgICAgLnNlcnAtYXJyb3cge1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiKDAsIDEwMiwgMzMpO1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwcHg7XG4gICAgICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0LXN0eWxlOiBzb2xpZDtcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0LXdpZHRoOiA0cHg7XG4gICAgICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICBib3JkZXItcmlnaHQtc3R5bGU6IHNvbGlkO1xuICAgICAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiA0cHg7XG4gICAgICAgICAgICBib3JkZXItdG9wLWNvbG9yOiByZ2IoMCwgMTAyLCAzMyk7XG4gICAgICAgICAgICBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDtcbiAgICAgICAgICAgIGJvcmRlci10b3Atd2lkdGg6IDVweDtcbiAgICAgICAgICAgIGNvbG9yOiByZ2IoMTI4LCAxMjgsIDEyOCk7XG4gICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgICAgICBmb250LWZhbWlseTogYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgICAgICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICAgIGhlaWdodDogMHB4O1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI3cHg7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogM3B4O1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogNnB4O1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgIHdpZHRoOiAwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAuc2VycC10aXRsZSB7XG4gICAgICAgICAgICBjb2xvcjogIzFBMERBQjtcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgcmVndWxhcjtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIH1cblxuICAgICAgICAuc2VycC11cmwge1xuICAgICAgICAgICAgY29sb3I6ICMwMDY2MjE7XG4gICAgICAgICAgICBmb250LWZhbWlseTogYXJpYWwsIHJlZ3VsYXI7XG4gICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zZXJwLWRlc2NyaXB0aW9uIHtcbiAgICAgICAgICAgIGNvbG9yOiAjNTQ1NDU0O1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6IGFyaWFsLCByZWd1bGFyO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgICAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICAgICAgICB9XG4gICAgfVxuPC9zdHlsZT5cbiIsIjwhLS0qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi0tPlxuPHRlbXBsYXRlPlxuICA8ZGl2IGlkPVwiY29tYmluYXRpb24tZWRpdC1tb2RhbFwiPlxuICAgIDxtb2RhbFxuICAgICAgY2xhc3M9XCJjb21iaW5hdGlvbi1tb2RhbFwiXG4gICAgICB2LWlmPVwic2VsZWN0ZWRDb21iaW5hdGlvbklkICE9PSBudWxsXCJcbiAgICAgIEBjbG9zZT1cImNsb3NlTW9kYWxcIlxuICAgID5cbiAgICAgIDx0ZW1wbGF0ZSAjYm9keT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY29tYmluYXRpb24tbG9hZGluZ1wiXG4gICAgICAgICAgdi1pZj1cImxvYWRpbmdDb21iaW5hdGlvbkZvcm1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGlmcmFtZVxuICAgICAgICAgIHJlZj1cImlmcmFtZVwiXG4gICAgICAgICAgY2xhc3M9XCJjb21iaW5hdGlvbi1pZnJhbWVcIlxuICAgICAgICAgIDpzcmM9XCJlZGl0Q29tYmluYXRpb25VcmxcIlxuICAgICAgICAgIEBsb2Fkc3RhcnQ9XCJmcmFtZUxvYWRpbmdcIlxuICAgICAgICAgIEBsb2FkPVwib25GcmFtZUxvYWRlZFwiXG4gICAgICAgICAgdnNwYWNlPVwiMFwiXG4gICAgICAgICAgaHNwYWNlPVwiMFwiXG4gICAgICAgICAgc2Nyb2xsaW5nPVwiYXV0b1wiXG4gICAgICAgIC8+XG4gICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICA8dGVtcGxhdGUgI2Zvb3Rlcj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLWNsb3NlXCJcbiAgICAgICAgICBAY2xpY2sucHJldmVudC5zdG9wPVwidHJ5Q2xvc2VcIlxuICAgICAgICAgIDphcmlhLWxhYmVsPVwiJHQoJ21vZGFsLmNsb3NlJylcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cInN1Ym1pdHRpbmdDb21iaW5hdGlvbkZvcm1cIlxuICAgICAgICA+XG4gICAgICAgICAge3sgJHQoJ21vZGFsLmNhbmNlbCcpIH19XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIlxuICAgICAgICAgIEBjbGljay5wcmV2ZW50LnN0b3A9XCJzaG93UHJldmlvdXNcIlxuICAgICAgICAgIDphcmlhLWxhYmVsPVwiJHQoJ21vZGFsLnByZXZpb3VzJylcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cIlxuICAgICAgICAgICAgcHJldmlvdXNDb21iaW5hdGlvbklkID09PSBudWxsIHx8IHN1Ym1pdHRpbmdDb21iaW5hdGlvbkZvcm1cbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmtleWJvYXJkX2Fycm93X2xlZnQ8L2k+XG4gICAgICAgICAge3sgJHQoJ21vZGFsLnByZXZpb3VzJykgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIlxuICAgICAgICAgIEBjbGljay5wcmV2ZW50LnN0b3A9XCJzaG93TmV4dFwiXG4gICAgICAgICAgOmFyaWEtbGFiZWw9XCIkdCgnbW9kYWwubmV4dCcpXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJuZXh0Q29tYmluYXRpb25JZCA9PT0gbnVsbCB8fCBzdWJtaXR0aW5nQ29tYmluYXRpb25Gb3JtXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7ICR0KCdtb2RhbC5uZXh0JykgfX1cbiAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+a2V5Ym9hcmRfYXJyb3dfcmlnaHQ8L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgIEBjbGljay5wcmV2ZW50LnN0b3A9XCJzdWJtaXRGb3JtXCJcbiAgICAgICAgICA6YXJpYS1sYWJlbD1cIiR0KCdtb2RhbC5zYXZlJylcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cInN1Ym1pdHRpbmdDb21iaW5hdGlvbkZvcm0gfHwgIWlzRm9ybVVwZGF0ZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gdi1pZj1cIiFzdWJtaXR0aW5nQ29tYmluYXRpb25Gb3JtXCI+XG4gICAgICAgICAgICB7eyAkdCgnbW9kYWwuc2F2ZScpIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtXCJcbiAgICAgICAgICAgIHYtaWY9XCJzdWJtaXR0aW5nQ29tYmluYXRpb25Gb3JtXCJcbiAgICAgICAgICAgIHJvbGU9XCJzdGF0dXNcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgIDx0ZW1wbGF0ZSAjb3V0c2lkZT5cbiAgICAgICAgPGhpc3RvcnlcbiAgICAgICAgICA6Y29tYmluYXRpb25zLWxpc3Q9XCJjb21iaW5hdGlvbnNIaXN0b3J5XCJcbiAgICAgICAgICBAc2VsZWN0Q29tYmluYXRpb249XCJzZWxlY3RDb21iaW5hdGlvblwiXG4gICAgICAgICAgOnNlbGVjdGVkLWNvbWJpbmF0aW9uPVwic2VsZWN0ZWRDb21iaW5hdGlvbklkXCJcbiAgICAgICAgICA6ZW1wdHktaW1hZ2UtdXJsPVwiZW1wdHlJbWFnZVVybFwiXG4gICAgICAgIC8+XG4gICAgICA8L3RlbXBsYXRlPlxuICAgIDwvbW9kYWw+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJtb2RhbC1wcmV2ZW50LWNsb3NlXCJcbiAgICAgIEBjbGljay5wcmV2ZW50LnN0b3A9XCJwcmV2ZW50Q2xvc2VcIlxuICAgID5cbiAgICAgIDxtb2RhbFxuICAgICAgICA6bW9kYWwtdGl0bGU9XCIkdCgnbW9kYWwuaGlzdG9yeS5jb25maXJtVGl0bGUnKVwiXG4gICAgICAgIDpjYW5jZWwtbGFiZWw9XCIkdCgnbW9kYWwuY2FuY2VsJylcIlxuICAgICAgICA6Y29uZmlybS1sYWJlbD1cIiR0KCdtb2RhbC5jb25maXJtJylcIlxuICAgICAgICA6Y2xvc2UtbGFiZWw9XCIkdCgnbW9kYWwuY2xvc2UnKVwiXG4gICAgICAgIDpjb25maXJtYXRpb249XCJ0cnVlXCJcbiAgICAgICAgdi1pZj1cInNob3dDb25maXJtXCJcbiAgICAgICAgQGNsb3NlPVwiaGlkZUNvbmZpcm1Nb2RhbFwiXG4gICAgICAgIEBjb25maXJtPVwiY29uZmlybVNlbGVjdGlvblwiXG4gICAgICA+XG4gICAgICAgIDx0ZW1wbGF0ZSAjYm9keT5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgdi1odG1sPVwiXG4gICAgICAgICAgICAgICR0KCdtb2RhbC5oaXN0b3J5LmNvbmZpcm1Cb2R5Jywge1xuICAgICAgICAgICAgICAgICclY29tYmluYXRpb25OYW1lJSc6IHNlbGVjdGVkQ29tYmluYXRpb25OYW1lLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgPC9tb2RhbD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgQ29tYmluYXRpb25zU2VydmljZSBmcm9tICdAcGFnZXMvcHJvZHVjdC9zZXJ2aWNlcy9jb21iaW5hdGlvbnMtc2VydmljZSc7XG4gIGltcG9ydCBQcm9kdWN0TWFwIGZyb20gJ0BwYWdlcy9wcm9kdWN0L3Byb2R1Y3QtbWFwJztcbiAgaW1wb3J0IFByb2R1Y3RFdmVudE1hcCBmcm9tICdAcGFnZXMvcHJvZHVjdC9wcm9kdWN0LWV2ZW50LW1hcCc7XG4gIGltcG9ydCBNb2RhbCBmcm9tICdAdnVlL2NvbXBvbmVudHMvTW9kYWwnO1xuICBpbXBvcnQgUm91dGVyIGZyb20gJ0Bjb21wb25lbnRzL3JvdXRlcic7XG4gIGltcG9ydCBIaXN0b3J5IGZyb20gJy4vSGlzdG9yeSc7XG5cbiAgY29uc3QgeyR9ID0gd2luZG93O1xuICBjb25zdCBDb21iaW5hdGlvbkV2ZW50cyA9IFByb2R1Y3RFdmVudE1hcC5jb21iaW5hdGlvbnM7XG5cbiAgY29uc3Qgcm91dGVyID0gbmV3IFJvdXRlcigpO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnQ29tYmluYXRpb25Nb2RhbCcsXG4gICAgY29tcG9uZW50czoge01vZGFsLCBIaXN0b3J5fSxcbiAgICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tYmluYXRpb25zU2VydmljZTogbnVsbCxcbiAgICAgICAgY29tYmluYXRpb25JZHM6IFtdLFxuICAgICAgICBzZWxlY3RlZENvbWJpbmF0aW9uSWQ6IG51bGwsXG4gICAgICAgIHNlbGVjdGVkQ29tYmluYXRpb25OYW1lOiBudWxsLFxuICAgICAgICBwcmV2aW91c0NvbWJpbmF0aW9uSWQ6IG51bGwsXG4gICAgICAgIG5leHRDb21iaW5hdGlvbklkOiBudWxsLFxuICAgICAgICBlZGl0Q29tYmluYXRpb25Vcmw6ICcnLFxuICAgICAgICBsb2FkaW5nQ29tYmluYXRpb25Gb3JtOiBmYWxzZSxcbiAgICAgICAgc3VibWl0dGluZ0NvbWJpbmF0aW9uRm9ybTogZmFsc2UsXG4gICAgICAgIGNvbWJpbmF0aW9uTGlzdDogbnVsbCxcbiAgICAgICAgaGFzU3VibWl0dGVkQ29tYmluYXRpb25zOiBmYWxzZSxcbiAgICAgICAgY29tYmluYXRpb25zSGlzdG9yeTogW10sXG4gICAgICAgIHNob3dDb25maXJtOiBmYWxzZSxcbiAgICAgICAgdGVtcG9yYXJ5U2VsZWN0aW9uOiBudWxsLFxuICAgICAgICBpc0Zvcm1VcGRhdGVkOiBmYWxzZSxcbiAgICAgICAgaXNDbG9zaW5nOiBmYWxzZSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgcHJvZHVjdElkOiB7XG4gICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgZXZlbnRFbWl0dGVyOiB7XG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgZW1wdHlJbWFnZVVybDoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIG1vdW50ZWQoKSB7XG4gICAgICB0aGlzLmNvbWJpbmF0aW9uTGlzdCA9ICQoUHJvZHVjdE1hcC5jb21iaW5hdGlvbnMuY29tYmluYXRpb25zQ29udGFpbmVyKTtcbiAgICAgIHRoaXMuY29tYmluYXRpb25zU2VydmljZSA9IG5ldyBDb21iaW5hdGlvbnNTZXJ2aWNlKHRoaXMucHJvZHVjdElkKTtcbiAgICAgIHRoaXMuaW5pdENvbWJpbmF0aW9uSWRzKCk7XG4gICAgICB0aGlzLndhdGNoRWRpdEJ1dHRvbnMoKTtcbiAgICAgIHRoaXMuZXZlbnRFbWl0dGVyLm9uKENvbWJpbmF0aW9uRXZlbnRzLnJlZnJlc2hDb21iaW5hdGlvbkxpc3QsICgpID0+IHRoaXMuaW5pdENvbWJpbmF0aW9uSWRzKCksXG4gICAgICApO1xuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgd2F0Y2hFZGl0QnV0dG9ucygpIHtcbiAgICAgICAgdGhpcy5jb21iaW5hdGlvbkxpc3Qub24oXG4gICAgICAgICAgJ2NsaWNrJyxcbiAgICAgICAgICBQcm9kdWN0TWFwLmNvbWJpbmF0aW9ucy5lZGl0Q29tYmluYXRpb25CdXR0b25zLFxuICAgICAgICAgIChldmVudCkgPT4ge1xuICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBjb25zdCAkcm93ID0gJChldmVudC50YXJnZXQpLmNsb3Nlc3QoJ3RyJyk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29tYmluYXRpb25JZCA9IE51bWJlcihcbiAgICAgICAgICAgICAgJHJvdy5maW5kKFByb2R1Y3RNYXAuY29tYmluYXRpb25zLmNvbWJpbmF0aW9uSWRJbnB1dHNTZWxlY3RvcikudmFsKCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5oYXNTdWJtaXR0ZWRDb21iaW5hdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGFzeW5jIGluaXRDb21iaW5hdGlvbklkcygpIHtcbiAgICAgICAgdGhpcy5jb21iaW5hdGlvbklkcyA9IGF3YWl0IHRoaXMuY29tYmluYXRpb25zU2VydmljZS5nZXRDb21iaW5hdGlvbklkcygpO1xuICAgICAgfSxcbiAgICAgIGZyYW1lTG9hZGluZygpIHtcbiAgICAgICAgdGhpcy5hcHBseUlmcmFtZVN0eWxpbmcoKTtcbiAgICAgIH0sXG4gICAgICBvbkZyYW1lTG9hZGVkKCkge1xuICAgICAgICB0aGlzLmxvYWRpbmdDb21iaW5hdGlvbkZvcm0gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdWJtaXR0aW5nQ29tYmluYXRpb25Gb3JtID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGlmcmFtZUJvZHkgPSB0aGlzLiRyZWZzLmlmcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keTtcbiAgICAgICAgdGhpcy5hcHBseUlmcmFtZVN0eWxpbmcoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbWJpbmF0aW9uTmFtZSA9IGlmcmFtZUJvZHkucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICBQcm9kdWN0TWFwLmNvbWJpbmF0aW9ucy5jb21iaW5hdGlvbk5hbWUsXG4gICAgICAgICkuaW5uZXJIVE1MO1xuXG4gICAgICAgIGNvbnN0IGlmcmFtZUlucHV0cyA9IGlmcmFtZUJvZHkucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICBQcm9kdWN0TWFwLmNvbWJpbmF0aW9ucy5lZGl0aW9uRm9ybUlucHV0cyxcbiAgICAgICAgKTtcblxuICAgICAgICBpZnJhbWVJbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHtcbiAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNGb3JtVXBkYXRlZCA9IHRydWU7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzRm9ybVVwZGF0ZWQgPSB0cnVlO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy4kcmVmcy5pZnJhbWUuY29udGVudERvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RhdGVwaWNrZXJDaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzRm9ybVVwZGF0ZWQgPSB0cnVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBhcHBseUlmcmFtZVN0eWxpbmcoKSB7XG4gICAgICAgIHRoaXMuJHJlZnMuaWZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93WCA9ICdoaWRkZW4nO1xuICAgICAgfSxcbiAgICAgIHRyeUNsb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0Zvcm1VcGRhdGVkKSB7XG4gICAgICAgICAgdGhpcy5pc0Nsb3NpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgdGhpcy5zaG93Q29uZmlybU1vZGFsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jbG9zZU1vZGFsKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjbG9zZU1vZGFsKCkge1xuICAgICAgICBpZiAodGhpcy5zdWJtaXR0aW5nQ29tYmluYXRpb25Gb3JtKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgbW9kaWZpY2F0aW9ucyBoYXZlIGJlZW4gbWFkZSByZWZyZXNoIHRoZSBjb21iaW5hdGlvbiBsaXN0XG4gICAgICAgIGlmICh0aGlzLmhhc1N1Ym1pdHRlZENvbWJpbmF0aW9ucykge1xuICAgICAgICAgIHRoaXMuZXZlbnRFbWl0dGVyLmVtaXQoQ29tYmluYXRpb25FdmVudHMucmVmcmVzaFBhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFzU3VibWl0dGVkQ29tYmluYXRpb25zID0gZmFsc2U7XG5cbiAgICAgICAgLy8gVGhpcyBjbG9zZXMgdGhlIG1vZGFsIHdoaWNoIGlzIGNvbmRpdGlvbmVkIHRvIHRoZSBwcmVzZW5jZSBvZiB0aGlzIHZhbHVlXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb21iaW5hdGlvbklkID0gbnVsbDtcblxuICAgICAgICAvLyBSZXNldCBoaXN0b3J5IG9uIGNsb3NlXG4gICAgICAgIHRoaXMuY29tYmluYXRpb25zSGlzdG9yeSA9IFtdO1xuICAgICAgfSxcbiAgICAgIG5hdmlnYXRlVG9Db21iaW5hdGlvbihjb21iaW5hdGlvbklkKSB7XG4gICAgICAgIGlmIChjb21iaW5hdGlvbklkICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNGb3JtVXBkYXRlZCkge1xuICAgICAgICAgICAgdGhpcy50ZW1wb3JhcnlTZWxlY3Rpb24gPSBjb21iaW5hdGlvbklkO1xuICAgICAgICAgICAgdGhpcy5zaG93Q29uZmlybU1vZGFsKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb21iaW5hdGlvbklkID0gY29tYmluYXRpb25JZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzaG93UHJldmlvdXMoKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUb0NvbWJpbmF0aW9uKHRoaXMucHJldmlvdXNDb21iaW5hdGlvbklkKTtcbiAgICAgIH0sXG4gICAgICBzaG93TmV4dCgpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvQ29tYmluYXRpb24odGhpcy5uZXh0Q29tYmluYXRpb25JZCk7XG4gICAgICB9LFxuICAgICAgc2VsZWN0Q29tYmluYXRpb24oY29tYmluYXRpb24pIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvQ29tYmluYXRpb24oY29tYmluYXRpb24uaWQpO1xuICAgICAgfSxcbiAgICAgIGNvbmZpcm1TZWxlY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQ2xvc2luZykge1xuICAgICAgICAgIHRoaXMuY2xvc2VNb2RhbCgpO1xuICAgICAgICAgIHRoaXMuaXNDbG9zaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5oaWRlQ29uZmlybU1vZGFsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENvbWJpbmF0aW9uSWQgPSB0aGlzLnRlbXBvcmFyeVNlbGVjdGlvbjtcbiAgICAgICAgICB0aGlzLmhpZGVDb25maXJtTW9kYWwoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHN1Ym1pdEZvcm0oKSB7XG4gICAgICAgIHRoaXMuc3VibWl0dGluZ0NvbWJpbmF0aW9uRm9ybSA9IHRydWU7XG4gICAgICAgIGNvbnN0IGlmcmFtZUJvZHkgPSB0aGlzLiRyZWZzLmlmcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keTtcbiAgICAgICAgY29uc3QgZWRpdGlvbkZvcm0gPSBpZnJhbWVCb2R5LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgUHJvZHVjdE1hcC5jb21iaW5hdGlvbnMuZWRpdGlvbkZvcm0sXG4gICAgICAgICk7XG4gICAgICAgIGVkaXRpb25Gb3JtLnN1Ym1pdCgpO1xuICAgICAgICB0aGlzLmhhc1N1Ym1pdHRlZENvbWJpbmF0aW9ucyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ29tYmluYXRpb24gPSB7XG4gICAgICAgICAgaWQ6IHRoaXMuc2VsZWN0ZWRDb21iaW5hdGlvbklkLFxuICAgICAgICAgIHRpdGxlOiBpZnJhbWVCb2R5LnF1ZXJ5U2VsZWN0b3IoUHJvZHVjdE1hcC5jb21iaW5hdGlvbnMuY29tYmluYXRpb25OYW1lKVxuICAgICAgICAgICAgLmlubmVySFRNTCxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgKHRoaXMuY29tYmluYXRpb25zSGlzdG9yeVswXVxuICAgICAgICAgICAgJiYgdGhpcy5jb21iaW5hdGlvbnNIaXN0b3J5WzBdLmlkICE9PSBzZWxlY3RlZENvbWJpbmF0aW9uLmlkKVxuICAgICAgICAgIHx8ICF0aGlzLmNvbWJpbmF0aW9uc0hpc3RvcnkubGVuZ3RoXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuY29tYmluYXRpb25zSGlzdG9yeSA9IHRoaXMuY29tYmluYXRpb25zSGlzdG9yeS5maWx0ZXIoXG4gICAgICAgICAgICAoY29tYmluYXRpb24pID0+IGNvbWJpbmF0aW9uLmlkICE9PSBzZWxlY3RlZENvbWJpbmF0aW9uLmlkLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLmNvbWJpbmF0aW9uc0hpc3RvcnkudW5zaGlmdChzZWxlY3RlZENvbWJpbmF0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNGb3JtVXBkYXRlZCA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIHNob3dDb25maXJtTW9kYWwoKSB7XG4gICAgICAgIHRoaXMuc2hvd0NvbmZpcm0gPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIGhpZGVDb25maXJtTW9kYWwoKSB7XG4gICAgICAgIHRoaXMuaXNDbG9zaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0NvbmZpcm0gPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBwcmV2ZW50Q2xvc2UoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgd2F0Y2g6IHtcbiAgICAgIHNlbGVjdGVkQ29tYmluYXRpb25JZChjb21iaW5hdGlvbklkKSB7XG4gICAgICAgIHRoaXMuaXNGb3JtVXBkYXRlZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChjb21iaW5hdGlvbklkID09PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5wcmV2aW91c0NvbWJpbmF0aW9uSWQgPSBudWxsO1xuICAgICAgICAgIHRoaXMubmV4dENvbWJpbmF0aW9uSWQgPSBudWxsO1xuICAgICAgICAgIHRoaXMuZWRpdENvbWJpbmF0aW9uVXJsID0gbnVsbDtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9hZGluZ0NvbWJpbmF0aW9uRm9ybSA9IHRydWU7XG4gICAgICAgIHRoaXMuZWRpdENvbWJpbmF0aW9uVXJsID0gcm91dGVyLmdlbmVyYXRlKFxuICAgICAgICAgICdhZG1pbl9wcm9kdWN0c19jb21iaW5hdGlvbnNfZWRpdF9jb21iaW5hdGlvbicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29tYmluYXRpb25JZCxcbiAgICAgICAgICAgIGxpdGVEaXNwbGF5aW5nOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMuY29tYmluYXRpb25JZHMuaW5kZXhPZihjb21iaW5hdGlvbklkKTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICB0aGlzLnByZXZpb3VzQ29tYmluYXRpb25JZCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5uZXh0Q29tYmluYXRpb25JZCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wcmV2aW91c0NvbWJpbmF0aW9uSWQgPSBzZWxlY3RlZEluZGV4ID09PSAwID8gbnVsbCA6IHRoaXMuY29tYmluYXRpb25JZHNbc2VsZWN0ZWRJbmRleCAtIDFdO1xuICAgICAgICAgIHRoaXMubmV4dENvbWJpbmF0aW9uSWQgPSBzZWxlY3RlZEluZGV4ID09PSB0aGlzLmNvbWJpbmF0aW9uSWRzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiB0aGlzLmNvbWJpbmF0aW9uSWRzW3NlbGVjdGVkSW5kZXggKyAxXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHR5cGU9XCJ0ZXh0L3Njc3NcIj5cbkBpbXBvcnQgJ35Ac2Nzcy9jb25maWcvX3NldHRpbmdzLnNjc3MnO1xuXG4jY29tYmluYXRpb24tZWRpdC1tb2RhbCAuY29tYmluYXRpb24tbW9kYWwge1xuICAubW9kYWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIH1cblxuICAubW9kYWwtZGlhbG9nIHtcbiAgICBtYXgtd2lkdGg6IDk5MHB4O1xuICAgIHdpZHRoOiA5MCU7XG4gICAgaGVpZ2h0OiA5NSU7XG4gICAgbWFyZ2luOiAwO1xuXG4gICAgLm1vZGFsLWhlYWRlciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC5tb2RhbC1jb250ZW50IHtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW46IDAgMXJlbTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAgIC5tb2RhbC1ib2R5IHtcbiAgICAgICAgcGFkZGluZzogMC41cmVtO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGJhY2tncm91bmQ6ICNlYWViZWM7XG5cbiAgICAgICAgLmNvbWJpbmF0aW9uLWxvYWRpbmcge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNvbWJpbmF0aW9uLWlmcmFtZSB7XG4gICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICAgICAgICAuY2FyZCB7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAubW9kYWwtZm9vdGVyIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBwYWRkaW5nOiAwLjZyZW0gMXJlbTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcblxuICAgICAgICAuYnRuLWNsb3NlIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuaGlzdG9yeSB7XG4gICAgbWF4LXdpZHRoOiA0MDBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMCUgLSAzLjVyZW0pO1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICBoZWlnaHQ6IDk1JTtcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8IS0tKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICotLT5cbjx0ZW1wbGF0ZT5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY2FyZCBoaXN0b3J5XCJcbiAgICBAY2xpY2s9XCJwcmV2ZW50Q2xvc2VcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgICB7e1xuICAgICAgICAkdChcIm1vZGFsLmhpc3RvcnkuZWRpdGVkQ29tYmluYXRpb25cIiwge1xuICAgICAgICAgIFwiJWVkaXRlZE5iJVwiOiBjb21iaW5hdGlvbnNMaXN0Lmxlbmd0aCxcbiAgICAgICAgfSlcbiAgICAgIH19XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9ja1wiPlxuICAgICAgPHVsXG4gICAgICAgIGNsYXNzPVwiaGlzdG9yeS1saXN0XCJcbiAgICAgICAgdi1pZj1cImFyZUNvbWJpbmF0aW9uc05vdEVtcHR5XCJcbiAgICAgID5cbiAgICAgICAgPGxpXG4gICAgICAgICAgOmNsYXNzPVwiWydoaXN0b3J5LWl0ZW0nLCBpc1NlbGVjdGVkKGNvbWJpbmF0aW9uLmlkKV1cIlxuICAgICAgICAgIHYtZm9yPVwiKGNvbWJpbmF0aW9uLCBrZXkpIG9mIHBhZ2luYXRlZERhdGFzW2N1cnJlbnRQYWdlIC0gMV1cIlxuICAgICAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgICAgIEBjbGljaz1cInNlbGVjdENvbWJpbmF0aW9uKGNvbWJpbmF0aW9uKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBjb21iaW5hdGlvbi50aXRsZSB9fVxuICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5lZGl0PC9pPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJoaXN0b3J5LWVtcHR5XCJcbiAgICAgICAgdi1lbHNlXG4gICAgICA+XG4gICAgICAgIDxpbWcgOnNyYz1cImVtcHR5SW1hZ2VVcmxcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJoaXN0b3J5LWVtcHR5LXRpcFwiPlxuICAgICAgICAgIHt7ICR0KFwibW9kYWwuaGlzdG9yeS5lbXB0eVwiKSB9fVxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNhcmQtZm9vdGVyXCJcbiAgICAgIHYtaWY9XCJhcmVDb21iaW5hdGlvbnNOb3RFbXB0eVwiXG4gICAgPlxuICAgICAgPHBhZ2luYXRpb25cbiAgICAgICAgOnBhZ2luYXRpb24tbGVuZ3RoPVwiMTRcIlxuICAgICAgICA6ZGF0YXM9XCJjb21iaW5hdGlvbnNMaXN0XCJcbiAgICAgICAgQHBhZ2luYXRlZD1cImNvbnN0cnVjdERhdGFzXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0IFByb2R1Y3RFdmVudE1hcCBmcm9tICdAcGFnZXMvcHJvZHVjdC9wcm9kdWN0LWV2ZW50LW1hcCc7XG4gIGltcG9ydCBQYWdpbmF0aW9uIGZyb20gJ0B2dWUvY29tcG9uZW50cy9QYWdpbmF0aW9uJztcblxuICBjb25zdCBDb21iaW5hdGlvbnNFdmVudE1hcCA9IFByb2R1Y3RFdmVudE1hcC5jb21iaW5hdGlvbnM7XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICdDb21iaW5hdGlvbkhpc3RvcnknLFxuICAgIGRhdGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYWdpbmF0ZWREYXRhczogW10sXG4gICAgICAgIGN1cnJlbnRQYWdlOiAxLFxuICAgICAgfTtcbiAgICB9LFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIFBhZ2luYXRpb24sXG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgY29tYmluYXRpb25zTGlzdDoge1xuICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gW10sXG4gICAgICB9LFxuICAgICAgc2VsZWN0ZWRDb21iaW5hdGlvbjoge1xuICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGVtcHR5SW1hZ2VVcmw6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgYXJlQ29tYmluYXRpb25zTm90RW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbWJpbmF0aW9uc0xpc3QubGVuZ3RoID4gMDtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgdGhpcy4kcGFyZW50LiRvbihDb21iaW5hdGlvbnNFdmVudE1hcC5zZWxlY3RDb21iaW5hdGlvbiwgKGlkKSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb21iaW5hdGlvbiA9IHtpZH07XG4gICAgICB9KTtcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIC8qKlxuICAgICAgICogVXNlZCB0byBzZWxlY3QgY29tYmluYXRpb24gaW4gQ29tYmluYXRpb25Nb2RhbCBwYXJlbnQgY29tcG9uZW50XG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtvYmplY3R9IGNvbWJpbmF0aW9uXG4gICAgICAgKi9cbiAgICAgIHNlbGVjdENvbWJpbmF0aW9uKGNvbWJpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoQ29tYmluYXRpb25zRXZlbnRNYXAuc2VsZWN0Q29tYmluYXRpb24sIGNvbWJpbmF0aW9uKTtcbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIFRoaXMgZXZlbnRzIGNvbWVzIGZyb20gdGhlIHBhZ2luYXRpb24gY29tcG9uZW50IGFzXG4gICAgICAgKi9cbiAgICAgIHByZXZlbnRDbG9zZShldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIFRoaXMgZXZlbnRzIGNvbWVzIGZyb20gdGhlIHBhZ2luYXRpb24gY29tcG9uZW50IGFzXG4gICAgICAgKiBoZSdzIHRoZSBvbmUgbWFuYWdpbmcgY3V0dGluZyBkYXRhcyBpbnRvIGNodW5rc1xuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7YXJyYXl9IGRhdGFzXG4gICAgICAgKi9cbiAgICAgIGNvbnN0cnVjdERhdGFzKGRhdGFzKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGVkRGF0YXMgPSBkYXRhcy5wYWdpbmF0ZWREYXRhcztcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IGRhdGFzLmN1cnJlbnRQYWdlO1xuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogVXNlZCB0byBhdm9pZCBoYXZpbmcgdG9vIG11Y2ggbG9naWMgaW4gdGhlIG1hcmt1cFxuICAgICAgICovXG4gICAgICBpc1NlbGVjdGVkKGlkQ29tYmluYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDb21iaW5hdGlvbiA9PT0gaWRDb21iaW5hdGlvblxuICAgICAgICAgIHx8IHRoaXMuY29tYmluYXRpb25zTGlzdC5sZW5ndGggPT09IDFcbiAgICAgICAgICA/ICdzZWxlY3RlZCdcbiAgICAgICAgICA6IG51bGw7XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgdHlwZT1cInRleHQvc2Nzc1wiPlxuQGltcG9ydCBcIn5Ac2Nzcy9jb25maWcvX3NldHRpbmdzLnNjc3NcIjtcblxuLmhpc3Rvcnkge1xuICAmLWxpc3Qge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgLmNhcmQtYmxvY2sge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA3cmVtKTtcbiAgfVxuXG4gICYtZW1wdHkge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGhlaWdodDogY2FsYygxMDAlIC0gNHJlbSk7XG5cbiAgICAmLXRpcCB7XG4gICAgICBjb2xvcjogIzhhOGE4YTtcbiAgICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIG1heC13aWR0aDogMjgwcHg7XG4gICAgICBtYXJnaW4tdG9wOiAxLjc1cmVtO1xuICAgIH1cbiAgfVxuXG4gICYtaXRlbSB7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgIHBhZGRpbmc6IDAuNzVyZW0gMXJlbTtcbiAgICB0cmFuc2l0aW9uOiAwLjI1cyBlYXNlLW91dDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgaSB7XG4gICAgICBjb2xvcjogJHByaW1hcnk7XG4gICAgICBvcGFjaXR5OiAwO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICByaWdodDogMXJlbTtcbiAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgICAgIHRyYW5zaXRpb246IDAuMjVzIGVhc2Utb3V0O1xuICAgIH1cblxuICAgICYuc2VsZWN0ZWQge1xuICAgICAgYmFja2dyb3VuZDogI2Y3ZjdmNztcbiAgICB9XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmMGZjZmQ7XG4gICAgICBjb2xvcjogJHByaW1hcnk7XG5cbiAgICAgIGkge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjwhLS0qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi0tPlxuPHRlbXBsYXRlPlxuICA8ZGl2IGlkPVwicHJvZHVjdC1pbWFnZXMtY29udGFpbmVyXCI+XG4gICAgPGRpdlxuICAgICAgaWQ9XCJwcm9kdWN0LWltYWdlcy1kcm9wem9uZVwiXG4gICAgICA6Y2xhc3M9XCJbJ2Ryb3B6b25lJywgJ2Ryb3B6b25lLWNvbnRhaW5lcicsIHsgZnVsbDogZmlsZXMubGVuZ3RoIDw9IDAgfV1cIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAgICdkei1wcmV2aWV3JyxcbiAgICAgICAgICAnb3BlbmZpbGVtYW5hZ2VyJyxcbiAgICAgICAgICB7ICdkLW5vbmUnOiBsb2FkaW5nIHx8IGZpbGVzLmxlbmd0aCA8PSAwIH0sXG4gICAgICAgIF1cIlxuICAgICAgPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5hZGRfYV9waG90bzwvaT48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICAnZHotZGVmYXVsdCcsXG4gICAgICAgICAgJ2R6LW1lc3NhZ2UnLFxuICAgICAgICAgICdvcGVuZmlsZW1hbmFnZXInLFxuICAgICAgICAgICdkei1jbGlja2FibGUnLFxuICAgICAgICAgIHsgJ2Qtbm9uZSc6IGxvYWRpbmcgfHwgZmlsZXMubGVuZ3RoID4gMCB9LFxuICAgICAgICBdXCJcbiAgICAgID5cbiAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmFkZF9hX3Bob3RvPC9pPjxicj5cbiAgICAgICAge3sgJHQoJ3dpbmRvdy5kcm9wSW1hZ2VzJykgfX08YnI+XG4gICAgICAgIDxhPnt7ICR0KCd3aW5kb3cuc2VsZWN0RmlsZXMnKSB9fTwvYT48YnI+XG4gICAgICAgIDxzbWFsbD5cbiAgICAgICAgICB7eyAkdCgnd2luZG93LnJlY29tbWVuZGVkU2l6ZScpIH19PGJyPlxuICAgICAgICAgIHt7ICR0KCd3aW5kb3cucmVjb21tZW5kZWRGb3JtYXRzJykgfX1cbiAgICAgICAgPC9zbWFsbD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZHJvcHpvbmUtbG9hZGluZ1wiXG4gICAgICAgIHYtaWY9XCJsb2FkaW5nXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZHJvcHpvbmUtd2luZG93XG4gICAgICBjbGFzcz1cImRyb3B6b25lLXdpbmRvd1wiXG4gICAgICB2LWlmPVwic2VsZWN0ZWRGaWxlcy5sZW5ndGggPiAwXCJcbiAgICAgIDpzZWxlY3RlZC1maWxlcz1cInNlbGVjdGVkRmlsZXNcIlxuICAgICAgOmRyb3B6b25lPVwiZHJvcHpvbmVcIlxuICAgICAgQHVuc2VsZWN0QWxsPVwidW5zZWxlY3RBbGxcIlxuICAgICAgQHJlbW92ZVNlbGVjdGlvbj1cInNob3dNb2RhbFwiXG4gICAgICBAc2VsZWN0QWxsPVwic2VsZWN0QWxsXCJcbiAgICAgIEBzYXZlU2VsZWN0ZWRGaWxlPVwic2F2ZVNlbGVjdGVkRmlsZVwiXG4gICAgICBAcmVwbGFjZWRGaWxlPVwibWFuYWdlUmVwbGFjZWRGaWxlXCJcbiAgICAgIEBvcGVuR2FsbGVyeT1cInRvZ2dsZUdhbGxlcnlcIlxuICAgICAgOmZpbGVzPVwiZmlsZXNcIlxuICAgICAgOmxvY2FsZXM9XCJsb2NhbGVzXCJcbiAgICAgIDpzZWxlY3RlZC1sb2NhbGU9XCJzZWxlY3RlZExvY2FsZVwiXG4gICAgICA6bG9hZGluZz1cImJ1dHRvbkxvYWRpbmdcIlxuICAgIC8+XG5cbiAgICA8bW9kYWxcbiAgICAgIHYtaWY9XCJpc01vZGFsU2hvd25cIlxuICAgICAgOmNvbmZpcm1hdGlvbj1cInRydWVcIlxuICAgICAgOm1vZGFsLXRpdGxlPVwiXG4gICAgICAgICR0YygnbW9kYWwudGl0bGUnLCB0aGlzLnNlbGVjdGVkRmlsZXMubGVuZ3RoLCB7XG4gICAgICAgICAgJyVmaWxlc05iJSc6IHRoaXMuc2VsZWN0ZWRGaWxlcy5sZW5ndGgsXG4gICAgICAgIH0pXG4gICAgICBcIlxuICAgICAgOmNvbmZpcm0tbGFiZWw9XCIkdCgnbW9kYWwuYWNjZXB0JylcIlxuICAgICAgOmNhbmNlbC1sYWJlbD1cIiR0KCdtb2RhbC5jbG9zZScpXCJcbiAgICAgIEBjb25maXJtPVwicmVtb3ZlU2VsZWN0aW9uXCJcbiAgICAgIEBjbG9zZT1cImhpZGVNb2RhbFwiXG4gICAgLz5cblxuICAgIDxkaXYgY2xhc3M9XCJkei10ZW1wbGF0ZSBkLW5vbmVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkei1wcmV2aWV3IGR6LWZpbGUtcHJldmlld1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHotaW1hZ2VcIj5cbiAgICAgICAgICA8aW1nIGRhdGEtZHotdGh1bWJuYWlsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImR6LXByb2dyZXNzXCI+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwiZHotdXBsb2FkXCJcbiAgICAgICAgICAgIGRhdGEtZHotdXBsb2FkcHJvZ3Jlc3NcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImR6LXN1Y2Nlc3MtbWFya1wiPlxuICAgICAgICAgIDxzcGFuPuKclDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkei1lcnJvci1tYXJrXCI+XG4gICAgICAgICAgPHNwYW4+4pyYPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImR6LWVycm9yLW1lc3NhZ2VcIj5cbiAgICAgICAgICA8c3BhbiBkYXRhLWR6LWVycm9ybWVzc2FnZSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImR6LWhvdmVyXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBkcmFnLWluZGljYXRvclwiPmRyYWdfaW5kaWNhdG9yPC9pPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZC1jaGVja2JveFwiPlxuICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWQtY2hlY2tib3gtY29udHJvbFwiIC8+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlzY292ZXJcIj5cbiAgICAgICAgICB7eyAkdCgnd2luZG93LmNvdmVyJykgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkcm9wem9uZS1waG90by1zd2lwZVxuICAgICAgOmZpbGVzPVwic2VsZWN0ZWRGaWxlc1wiXG4gICAgICBAY2xvc2VHYWxsZXJ5PVwidG9nZ2xlR2FsbGVyeVwiXG4gICAgICB2LWlmPVwic2VsZWN0ZWRGaWxlcy5sZW5ndGggPiAwICYmIGdhbGxlcnlPcGVuZWRcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0IFJvdXRlciBmcm9tICdAY29tcG9uZW50cy9yb3V0ZXInO1xuICBpbXBvcnQge1xuICAgIGdldFByb2R1Y3RJbWFnZXMsXG4gICAgc2F2ZUltYWdlSW5mb3JtYXRpb25zLFxuICAgIHNhdmVJbWFnZVBvc2l0aW9uLFxuICAgIHJlcGxhY2VJbWFnZSxcbiAgICByZW1vdmVQcm9kdWN0SW1hZ2UsXG4gIH0gZnJvbSAnQHBhZ2VzL3Byb2R1Y3Qvc2VydmljZXMvaW1hZ2VzJztcbiAgaW1wb3J0IFByb2R1Y3RNYXAgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvcHJvZHVjdC1tYXAnO1xuICBpbXBvcnQgUHJvZHVjdEV2ZW50TWFwIGZyb20gJ0BwYWdlcy9wcm9kdWN0L3Byb2R1Y3QtZXZlbnQtbWFwJztcbiAgaW1wb3J0IE1vZGFsIGZyb20gJ0B2dWUvY29tcG9uZW50cy9Nb2RhbCc7XG4gIGltcG9ydCBEcm9wem9uZVdpbmRvdyBmcm9tICcuL0Ryb3B6b25lV2luZG93JztcbiAgaW1wb3J0IERyb3B6b25lUGhvdG9Td2lwZSBmcm9tICcuL0Ryb3B6b25lUGhvdG9Td2lwZSc7XG5cbiAgY29uc3QgeyR9ID0gd2luZG93O1xuXG4gIGNvbnN0IHJvdXRlciA9IG5ldyBSb3V0ZXIoKTtcbiAgY29uc3QgRHJvcHpvbmVNYXAgPSBQcm9kdWN0TWFwLmRyb3B6b25lO1xuICBjb25zdCBEcm9wem9uZUV2ZW50cyA9IFByb2R1Y3RFdmVudE1hcC5kcm9wem9uZTtcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ0Ryb3B6b25lJyxcbiAgICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZHJvcHpvbmU6IG51bGwsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICB1cmw6IHJvdXRlci5nZW5lcmF0ZSgnYWRtaW5fcHJvZHVjdHNfdjJfYWRkX2ltYWdlJyksXG4gICAgICAgICAgY2xpY2thYmxlOiBEcm9wem9uZU1hcC5jb25maWd1cmF0aW9uLmZpbGVNYW5hZ2VyLFxuICAgICAgICAgIHByZXZpZXdUZW1wbGF0ZTogbnVsbCxcbiAgICAgICAgICB0aHVtYm5haWxXaWR0aDogMTMwLFxuICAgICAgICAgIHRodW1ibmFpbEhlaWdodDogMTMwLFxuICAgICAgICAgIHRodW1ibmFpbE1ldGhvZDogJ2Nyb3AnLFxuICAgICAgICB9LFxuICAgICAgICBmaWxlczogW10sXG4gICAgICAgIHNlbGVjdGVkRmlsZXM6IFtdLFxuICAgICAgICB0cmFuc2xhdGlvbnM6IFtdLFxuICAgICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgICBzZWxlY3RlZExvY2FsZTogbnVsbCxcbiAgICAgICAgYnV0dG9uTG9hZGluZzogZmFsc2UsXG4gICAgICAgIGlzTW9kYWxTaG93bjogZmFsc2UsXG4gICAgICAgIGdhbGxlcnlPcGVuZWQ6IGZhbHNlLFxuICAgICAgfTtcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICBwcm9kdWN0SWQ6IHtcbiAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBsb2NhbGVzOiB7XG4gICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBmb3JtTmFtZToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHRva2VuOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY29tcG9uZW50czoge1xuICAgICAgRHJvcHpvbmVXaW5kb3csXG4gICAgICBNb2RhbCxcbiAgICAgIERyb3B6b25lUGhvdG9Td2lwZSxcbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7fSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgdGhpcy53YXRjaExvY2FsZUNoYW5nZXMoKTtcbiAgICAgIHRoaXMuaW5pdFByb2R1Y3RJbWFnZXMoKTtcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIC8qKlxuICAgICAgICogV2F0Y2ggbG9jYWxlIGNoYW5nZXMgdG8gdXBkYXRlIHRoZSBzZWxlY3RlZCBvbmVcbiAgICAgICAqL1xuICAgICAgd2F0Y2hMb2NhbGVDaGFuZ2VzKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTG9jYWxlID0gdGhpcy5sb2NhbGVzWzBdO1xuXG4gICAgICAgIHdpbmRvdy5wcmVzdGFzaG9wLmluc3RhbmNlLmV2ZW50RW1pdHRlci5vbihcbiAgICAgICAgICBEcm9wem9uZUV2ZW50cy5sYW5ndWFnZVNlbGVjdGVkLFxuICAgICAgICAgIChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qge3NlbGVjdGVkTG9jYWxlfSA9IGV2ZW50O1xuXG4gICAgICAgICAgICB0aGlzLmxvY2FsZXMuZm9yRWFjaCgobG9jYWxlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChsb2NhbGUuaXNvX2NvZGUgPT09IHNlbGVjdGVkTG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExvY2FsZSA9IGxvY2FsZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIFRoaXMgbWV0aG9kcyBpcyB1c2VkIHRvIGluaXRpYWxpemUgcHJvZHVjdCBpbWFnZXMgd2UgYWxyZWFkeSBoYXZlIHVwbG9hZGVkXG4gICAgICAgKi9cbiAgICAgIGFzeW5jIGluaXRQcm9kdWN0SW1hZ2VzKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGltYWdlcyA9IGF3YWl0IGdldFByb2R1Y3RJbWFnZXModGhpcy5wcm9kdWN0SWQpO1xuXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5pbml0RHJvcFpvbmUoKTtcblxuICAgICAgICAgIGltYWdlcy5mb3JFYWNoKChpbWFnZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kcm9wem9uZS5kaXNwbGF5RXhpc3RpbmdGaWxlKGltYWdlLCBpbWFnZS5pbWFnZV91cmwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHdpbmRvdy4kLmdyb3dsLmVycm9yKHttZXNzYWdlOiBlcnJvcn0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBNZXRob2QgdG8gaW5pdGlhbGl6ZSB0aGUgZHJvcHpvbmUsIHVzaW5nIHRoZSBjb25maWd1cmF0aW9uJ3Mgc3RhdGUgYW5kIGFkZGluZyBmaWxlc1xuICAgICAgICogd2UgYWxyZWFkeSBoYXZlIGluIGRhdGFiYXNlLlxuICAgICAgICovXG4gICAgICBpbml0RHJvcFpvbmUoKSB7XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5wcmV2aWV3VGVtcGxhdGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgIERyb3B6b25lTWFwLmR6VGVtcGxhdGUsXG4gICAgICAgICkuaW5uZXJIVE1MO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24ucGFyYW1OYW1lID0gYCR7dGhpcy5mb3JtTmFtZX1bZmlsZV1gO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24ubWV0aG9kID0gJ1BPU1QnO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24ucGFyYW1zID0ge307XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5wYXJhbXNbXG4gICAgICAgICAgYCR7dGhpcy5mb3JtTmFtZX1bcHJvZHVjdF9pZF1gXG4gICAgICAgIF0gPSB0aGlzLnByb2R1Y3RJZDtcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnBhcmFtc1tgJHt0aGlzLmZvcm1OYW1lfVtfdG9rZW5dYF0gPSB0aGlzLnRva2VuO1xuXG4gICAgICAgIHRoaXMuc29ydGFibGVDb250YWluZXIgPSAkKCcjcHJvZHVjdC1pbWFnZXMtZHJvcHpvbmUnKTtcblxuICAgICAgICB0aGlzLmRyb3B6b25lID0gbmV3IHdpbmRvdy5Ecm9wem9uZShcbiAgICAgICAgICBEcm9wem9uZU1hcC5kcm9wem9uZUNvbnRhaW5lcixcbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zb3J0YWJsZUNvbnRhaW5lci5zb3J0YWJsZSh7XG4gICAgICAgICAgaXRlbXM6IERyb3B6b25lTWFwLnNvcnRhYmxlSXRlbXMsXG4gICAgICAgICAgb3BhY2l0eTogMC45LFxuICAgICAgICAgIGNvbnRhaW5tZW50OiAncGFyZW50JyxcbiAgICAgICAgICBkaXN0YW5jZTogMzIsXG4gICAgICAgICAgdG9sZXJhbmNlOiAncG9pbnRlcicsXG4gICAgICAgICAgY3Vyc29yQXQ6IHtcbiAgICAgICAgICAgIGxlZnQ6IDY0LFxuICAgICAgICAgICAgdG9wOiA2NCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNhbmNlbDogJy5kaXNhYmxlZCcsXG4gICAgICAgICAgc3RvcDogKGV2ZW50LCB1aSkgPT4ge1xuICAgICAgICAgICAgLy8gR2V0IG5ldyBwb3NpdGlvbiAoLTEgYmVjYXVzZSB0aGUgb3BlbiBmaWxlIG1hbmFnZXIgaXMgYWx3YXlzIGZpcnN0KVxuICAgICAgICAgICAgY29uc3QgbW92ZWRQb3NpdGlvbiA9IHVpLml0ZW0uaW5kZXgoKSAtIDE7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUltYWdlUG9zaXRpb24odWkuaXRlbS5kYXRhKCdpZCcpLCBtb3ZlZFBvc2l0aW9uKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXJ0OiAoZXZlbnQsIHVpKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNvcnRhYmxlQ29udGFpbmVyLmZpbmQoRHJvcHpvbmVNYXAuZHpQcmV2aWV3KS5jc3MoJ3pJbmRleCcsIDEpO1xuICAgICAgICAgICAgdWkuaXRlbS5jc3MoJ3pJbmRleCcsIDEwKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRyb3B6b25lLm9uKERyb3B6b25lRXZlbnRzLmFkZGVkRmlsZSwgKGZpbGUpID0+IHtcbiAgICAgICAgICBmaWxlLnByZXZpZXdFbGVtZW50LmRhdGFzZXQuaWQgPSBmaWxlLmltYWdlX2lkO1xuXG4gICAgICAgICAgaWYgKGZpbGUuaXNfY292ZXIpIHtcbiAgICAgICAgICAgIGZpbGUucHJldmlld0VsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaXMtY292ZXInKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmaWxlLnByZXZpZXdFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBmaWxlLnByZXZpZXdFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoRHJvcHpvbmVNYXAuY2hlY2tib3gpO1xuICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9ICFpbnB1dC5jaGVja2VkO1xuXG4gICAgICAgICAgICBpZiAoaW5wdXQuY2hlY2tlZCkge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGaWxlcy5pbmNsdWRlcyhmaWxlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgICAgICAgIGZpbGUucHJldmlld0VsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgnc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVzID0gdGhpcy5zZWxlY3RlZEZpbGVzLmZpbHRlcigoZSkgPT4gZSAhPT0gZmlsZSk7XG4gICAgICAgICAgICAgIGZpbGUucHJldmlld0VsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgnc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZHJvcHpvbmUub24oRHJvcHpvbmVFdmVudHMuZXJyb3IsIChmaWxlV2l0aEVycm9yLCBtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgJC5ncm93bC5lcnJvcih7bWVzc2FnZTogbWVzc2FnZS5lcnJvcn0pO1xuICAgICAgICAgIHRoaXMuZHJvcHpvbmUucmVtb3ZlRmlsZShmaWxlV2l0aEVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kcm9wem9uZS5vbihEcm9wem9uZUV2ZW50cy5zdWNjZXNzLCAoZmlsZSwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAvLyBBcHBlbmQgdGhlIGRhdGEgcmVxdWlyZWQgZm9yIGEgcHJvZHVjdCBpbWFnZVxuICAgICAgICAgIGZpbGUuaW1hZ2VfaWQgPSByZXNwb25zZS5pbWFnZV9pZDtcbiAgICAgICAgICBmaWxlLmlzX2NvdmVyID0gcmVzcG9uc2UuaXNfY292ZXI7XG4gICAgICAgICAgZmlsZS5sZWdlbmRzID0gcmVzcG9uc2UubGVnZW5kcztcbiAgICAgICAgICAvLyBVcGRhdGUgZGF0YXNldCBzbyB0aGF0IGl0IGNhbiBiZSBzZWxlY3RlZCBsYXRlclxuICAgICAgICAgIGZpbGUucHJldmlld0VsZW1lbnQuZGF0YXNldC5pZCA9IGZpbGUuaW1hZ2VfaWQ7XG5cbiAgICAgICAgICBpZiAoZmlsZS5pc19jb3Zlcikge1xuICAgICAgICAgICAgZmlsZS5wcmV2aWV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpcy1jb3ZlcicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBNZXRob2QgdG8gc2VsZWN0IGV2ZXJ5IGZpbGVzIGJ5IGNoZWNraW5nIGNoZWNrYm94ZXMgYW5kIGFkZCBmaWxlcyB0byB0aGUgZmlsZXMgc3RhdGVcbiAgICAgICAqL1xuICAgICAgc2VsZWN0QWxsKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZXMgPSB0aGlzLmZpbGVzO1xuXG4gICAgICAgIHRoaXMuZWRpdENoZWNrYm94ZXModHJ1ZSk7XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBNZXRob2QgdG8gdW5zZWxlY3QgZXZlcnkgZmlsZXMgYnkgdW5jaGVja2luZyBjaGVja2JveGVzIGFuZCBlbXB0eSBmaWxlcyBzdGF0ZVxuICAgICAgICovXG4gICAgICB1bnNlbGVjdEFsbCgpIHtcbiAgICAgICAgdGhpcy5lZGl0Q2hlY2tib3hlcyhmYWxzZSk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVzID0gW107XG5cbiAgICAgICAgdGhpcy5yZW1vdmVUb29sdGlwcygpO1xuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogTWV0aG9kIHRvIHJlbW92ZSBldmVyeSBzZWxlY3RlZCBmaWxlcyBmcm9tIHRoZSBkcm9wem9uZVxuICAgICAgICovXG4gICAgICBhc3luYyByZW1vdmVTZWxlY3Rpb24oKSB7XG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBmYWxzZTtcbiAgICAgICAgbGV0IGlzQ292ZXJJbWFnZVJlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgbmJGaWxlcyA9IHRoaXMuc2VsZWN0ZWRGaWxlcy5sZW5ndGg7XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVzLm1hcChhc3luYyAoZmlsZSkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYXdhaXQgcmVtb3ZlUHJvZHVjdEltYWdlKGZpbGUuaW1hZ2VfaWQpO1xuICAgICAgICAgICAgICB0aGlzLmRyb3B6b25lLnJlbW92ZUZpbGUoZmlsZSk7XG5cbiAgICAgICAgICAgICAgdGhpcy5maWxlcyA9IHRoaXMuZmlsZXMuZmlsdGVyKChlKSA9PiBmaWxlICE9PSBlKTtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVzID0gdGhpcy5zZWxlY3RlZEZpbGVzLmZpbHRlcigoZSkgPT4gZmlsZSAhPT0gZSk7XG5cbiAgICAgICAgICAgICAgaWYgKGZpbGUuaXNfY292ZXIpIHtcbiAgICAgICAgICAgICAgICBpc0NvdmVySW1hZ2VSZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IucmVzcG9uc2VKU09OXG4gICAgICAgICAgICAgICAgPyBlcnJvci5yZXNwb25zZUpTT04uZXJyb3JcbiAgICAgICAgICAgICAgICA6IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMucmVtb3ZlVG9vbHRpcHMoKTtcblxuICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgJC5ncm93bC5lcnJvcih7bWVzc2FnZTogZXJyb3JNZXNzYWdlfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJC5ncm93bCh7XG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLiR0KCdkZWxldGUuc3VjY2VzcycsIHtcbiAgICAgICAgICAgICAgJyVmaWxlc05iJSc6IG5iRmlsZXMsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0NvdmVySW1hZ2VSZW1vdmVkKSB7XG4gICAgICAgICAgdGhpcy5yZXNldERyb3B6b25lKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhpZGVNb2RhbCgpO1xuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogTWV0aG9kIHRvIG1hbmFnZSBjaGVja2JveGVzIG9mIGZpbGVzIG1haW5seSB1c2VkIG9uIHNlbGVjdEFsbCBhbmQgdW5zZWxlY3RBbGxcbiAgICAgICAqL1xuICAgICAgZWRpdENoZWNrYm94ZXMoY2hlY2tlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlucHV0ID0gZmlsZS5wcmV2aWV3RWxlbWVudC5xdWVyeVNlbGVjdG9yKERyb3B6b25lTWFwLmNoZWNrYm94KTtcbiAgICAgICAgICBpbnB1dC5jaGVja2VkID0gdHlwZW9mIGNoZWNrZWQgIT09ICd1bmRlZmluZWQnID8gY2hlY2tlZCA6ICFpbnB1dC5jaGVja2VkO1xuXG4gICAgICAgICAgZmlsZS5wcmV2aWV3RWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCdzZWxlY3RlZCcsIGNoZWNrZWQpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIFdlIHNvbWV0aW1lIG5lZWQgdG8gcmVtb3ZlIHRvb2x0aXAgYmVjYXVzZSBWdWUga2ljayB0aGUgbWFya3VwIG9mIHRoZSBjb21wb25lbnRcbiAgICAgICAqL1xuICAgICAgcmVtb3ZlVG9vbHRpcHMoKSB7XG4gICAgICAgICQoRHJvcHpvbmVNYXAuc2hvd25Ub29sdGlwcykuZWFjaCgoaSwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICQoZWxlbWVudCkucmVtb3ZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogU2F2ZSBzZWxlY3RlZCBmaWxlXG4gICAgICAgKi9cbiAgICAgIGFzeW5jIHNhdmVTZWxlY3RlZEZpbGUoY2FwdGlvblZhbHVlLCBpc0NvdmVyKSB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRGaWxlID0gdGhpcy5zZWxlY3RlZEZpbGVzWzBdO1xuXG4gICAgICAgIHNlbGVjdGVkRmlsZS5pc19jb3ZlciA9IGlzQ292ZXI7XG5cbiAgICAgICAgc2VsZWN0ZWRGaWxlLmxlZ2VuZHMgPSBjYXB0aW9uVmFsdWU7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzYXZlZEltYWdlID0gYXdhaXQgc2F2ZUltYWdlSW5mb3JtYXRpb25zKFxuICAgICAgICAgICAgc2VsZWN0ZWRGaWxlLFxuICAgICAgICAgICAgdGhpcy50b2tlbixcbiAgICAgICAgICAgIHRoaXMuZm9ybU5hbWUsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IHNhdmVkSW1hZ2VFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgIERyb3B6b25lTWFwLnNhdmVkSW1hZ2VDb250YWluZXIoc2F2ZWRJbWFnZS5pbWFnZV9pZCksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIElmIHRoZSBpbWFnZSB3YXMgc2F2ZWQgYXMgY292ZXIsIHdlIG5lZWQgdG8gcmVwbGFjZSB0aGUgRE9NIGluIG9yZGVyIHRvIGRpc3BsYXlcbiAgICAgICAgICAgKiB0aGUgY29ycmVjdCBvbmUuXG4gICAgICAgICAgICovXG4gICAgICAgICAgaWYgKHNhdmVkSW1hZ2UuaXNfY292ZXIpIHtcbiAgICAgICAgICAgIGlmICghc2F2ZWRJbWFnZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdpcy1jb3ZlcicpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvdmVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgRHJvcHpvbmVNYXAuY292ZXJlZFByZXZpZXcsXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgaWYgKGNvdmVyRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvdmVyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1jb3ZlcicpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc2F2ZWRJbWFnZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaXMtY292ZXInKTtcblxuICAgICAgICAgICAgICB0aGlzLmZpbGVzID0gdGhpcy5maWxlcy5tYXAoKGZpbGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZS5pbWFnZV9pZCAhPT0gc2F2ZWRJbWFnZS5pbWFnZV9pZCAmJiBmaWxlLmlzX2NvdmVyKSB7XG4gICAgICAgICAgICAgICAgICBmaWxlLmlzX2NvdmVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAkLmdyb3dsKHttZXNzYWdlOiB0aGlzLiR0KCd3aW5kb3cuc2V0dGluZ3NVcGRhdGVkJyl9KTtcbiAgICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAkLmdyb3dsLmVycm9yKHttZXNzYWdlOiBlcnJvci5lcnJvcn0pO1xuICAgICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIHNhdmUgYW5kIG1hbmFnZSBzb21lIGRhdGFzIGZyb20gYSByZXBsYWNlZCBmaWxlXG4gICAgICAgKi9cbiAgICAgIGFzeW5jIG1hbmFnZVJlcGxhY2VkRmlsZShldmVudCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEZpbGUgPSB0aGlzLnNlbGVjdGVkRmlsZXNbMF07XG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBuZXdJbWFnZSA9IGF3YWl0IHJlcGxhY2VJbWFnZShcbiAgICAgICAgICAgIHNlbGVjdGVkRmlsZSxcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC5maWxlc1swXSxcbiAgICAgICAgICAgIHRoaXMuZm9ybU5hbWUsXG4gICAgICAgICAgICB0aGlzLnRva2VuLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgaW1hZ2VFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgIERyb3B6b25lTWFwLnNhdmVkSW1hZ2UobmV3SW1hZ2UuaW1hZ2VfaWQpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaW1hZ2VFbGVtZW50LnNyYyA9IG5ld0ltYWdlLmltYWdlX3VybDtcblxuICAgICAgICAgICQuZ3Jvd2woe21lc3NhZ2U6IHRoaXMuJHQoJ3dpbmRvdy5pbWFnZVJlcGxhY2VkJyl9KTtcbiAgICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAkLmdyb3dsLmVycm9yKHttZXNzYWdlOiBlcnJvci5yZXNwb25zZUpTT04uZXJyb3J9KTtcbiAgICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHVwZGF0ZUltYWdlUG9zaXRpb24ocHJvZHVjdEltYWdlSWQsIG5ld1Bvc2l0aW9uKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgc2F2ZUltYWdlUG9zaXRpb24oXG4gICAgICAgICAgICBwcm9kdWN0SW1hZ2VJZCxcbiAgICAgICAgICAgIG5ld1Bvc2l0aW9uLFxuICAgICAgICAgICAgdGhpcy5mb3JtTmFtZSxcbiAgICAgICAgICAgIHRoaXMudG9rZW4sXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLnNvcnRhYmxlQ29udGFpbmVyLnNvcnRhYmxlKCdjYW5jZWwnKTtcbiAgICAgICAgICAkLmdyb3dsLmVycm9yKHttZXNzYWdlOiBlcnJvci5yZXNwb25zZUpTT04uZXJyb3J9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogTWFpbmx5IHVzZWQgd2hlbiB3ZSB3YW50cyB0byByZXNldCB0aGUgd2hvbGUgbGlzdFxuICAgICAgICogdG8gcmVzZXQgY292ZXIgaW1hZ2UgZm9yIGV4YW1wbGUgb24gcmVtb3ZlXG4gICAgICAgKi9cbiAgICAgIHJlc2V0RHJvcHpvbmUoKSB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgICAgIHRoaXMuZHJvcHpvbmUucmVtb3ZlRmlsZShmaWxlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZHJvcHpvbmUuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmRyb3B6b25lID0gbnVsbDtcbiAgICAgICAgdGhpcy5pbml0UHJvZHVjdEltYWdlcygpO1xuICAgICAgfSxcbiAgICAgIHNob3dNb2RhbCgpIHtcbiAgICAgICAgdGhpcy5pc01vZGFsU2hvd24gPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIGhpZGVNb2RhbCgpIHtcbiAgICAgICAgdGhpcy5pc01vZGFsU2hvd24gPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIE1ldGhvZCB1c2VkIHRvIG9wZW4gdGhlIHBob3Rvc3dpcGUgZ2FsbGVyeVxuICAgICAgICovXG4gICAgICB0b2dnbGVHYWxsZXJ5KCkge1xuICAgICAgICB0aGlzLmdhbGxlcnlPcGVuZWQgPSAhdGhpcy5nYWxsZXJ5T3BlbmVkO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHR5cGU9XCJ0ZXh0L3Njc3NcIj5cbkBpbXBvcnQgJ35Ac2Nzcy9jb25maWcvX3NldHRpbmdzLnNjc3MnO1xuQGltcG9ydCAnfkBzY3NzL2NvbmZpZy9fYm9vdHN0cmFwLnNjc3MnO1xuXG4ucHJvZHVjdC1wYWdlICNwcm9kdWN0LWltYWdlcy1kcm9wem9uZSB7XG4gICYuZnVsbCB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLmRyb3B6b25lLWxvYWRpbmcge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBtaW4taGVpZ2h0OiAxMHJlbTtcbiAgfVxuXG4gICYuZHJvcHpvbmUtY29udGFpbmVyIHtcbiAgICAuZHotcHJldmlldyB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAgIC5pc2NvdmVyIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgbGVmdDogLTJweDtcbiAgICAgICAgYm90dG9tOiAtM3B4O1xuICAgICAgICB3aWR0aDogY2FsYygxMDAlICsgNHB4KTtcbiAgICAgICAgcGFkZGluZzogOXB4O1xuICAgICAgfVxuICAgICAgJi5pcy1jb3ZlciB7XG4gICAgICAgIC5pc2NvdmVyIHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmOm5vdCgub3BlbmZpbGVtYW5hZ2VyKSB7XG4gICAgICAgIGJvcmRlcjogM3B4IHNvbGlkIHRyYW5zcGFyZW50O1xuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIGJvcmRlcjogM3B4IHNvbGlkICRwcmltYXJ5O1xuICAgICAgICB9XG5cbiAgICAgICAgLmR6LWltYWdlIHtcbiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkZ3JheS0zMDA7XG4gICAgICAgICAgd2lkdGg6IDEzMHB4O1xuICAgICAgICAgIGhlaWdodDogMTMwcHg7XG4gICAgICAgICAgbWFyZ2luOiAtM3B4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYub3BlbmZpbGVtYW5hZ2VyIHtcbiAgICAgICAgYm9yZGVyLXN0eWxlOiBkYXNoZWQ7XG4gICAgICAgIG1pbi13aWR0aDogMTMwcHg7XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICAgICAgfVxuXG4gICAgICAgID4gZGl2IHtcbiAgICAgICAgICBib3JkZXI6IG5vbmU7XG5cbiAgICAgICAgICBpIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMi41cmVtO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpbWcge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICAuZHotaG92ZXIge1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43KTtcblxuICAgICAgICAgIC5kcmFnLWluZGljYXRvcixcbiAgICAgICAgICAubWQtY2hlY2tib3gge1xuICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi5zZWxlY3RlZCB7XG4gICAgICAgIC5tZC1jaGVja2JveCB7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5kei1ob3ZlciB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IC0zcHg7XG4gICAgICBsZWZ0OiAtM3B4O1xuICAgICAgd2lkdGg6IGNhbGMoMTAwJSArIDZweCk7XG4gICAgICBoZWlnaHQ6IGNhbGMoMTAwJSArIDZweCk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApO1xuICAgICAgdHJhbnNpdGlvbjogMC4yNXMgZWFzZS1vdXQ7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIHotaW5kZXg6IDExO1xuXG4gICAgICAuZHJhZy1pbmRpY2F0b3Ige1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMC41cmVtO1xuICAgICAgICBsZWZ0OiAwLjVyZW07XG4gICAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0cmFuc2l0aW9uOiAwLjI1cyBlYXNlLW91dDtcbiAgICAgIH1cblxuICAgICAgLm1kLWNoZWNrYm94IHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBib3R0b206IDAuNXJlbTtcbiAgICAgICAgbGVmdDogMC41cmVtO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0cmFuc2l0aW9uOiAwLjI1cyBlYXNlLW91dDtcblxuICAgICAgICAubWQtY2hlY2tib3gtY29udHJvbDo6YmVmb3JlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0OmNoZWNrZWQgKyAubWQtY2hlY2tib3gtY29udHJvbDo6YmVmb3JlIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkcHJpbWFyeTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4ucHJvZHVjdC1wYWdlICNwcm9kdWN0LWltYWdlcy1jb250YWluZXIge1xuICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LWRvd24oeHMpIHtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIH1cblxuICAjcHJvZHVjdC1pbWFnZXMtZHJvcHpvbmUuZHJvcHpvbmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG5cbiAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LWRvd24oeHMpIHtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xuICAgICAgd2lkdGg6IDEwMCU7XG5cbiAgICAgIC5kei1wcmV2aWV3IHtcbiAgICAgICAgd2lkdGg6IDEwMHB4O1xuICAgICAgICBoZWlnaHQ6IDEwMHB4O1xuICAgICAgICBtaW4taGVpZ2h0OiAxMDBweDtcbiAgICAgICAgbWFyZ2luOiAwLjVyZW07XG5cbiAgICAgICAgJi5vcGVuZmlsZW1hbmFnZXIge1xuICAgICAgICAgIG1pbi13aWR0aDogMTAwcHg7XG4gICAgICAgIH1cblxuICAgICAgICBpbWcge1xuICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgLmR6LWltYWdlIHtcbiAgICAgICAgICB3aWR0aDogMTAwcHg7XG4gICAgICAgICAgaGVpZ2h0OiAxMDBweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjwhLS0qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi0tPlxuPHRlbXBsYXRlPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJwc3dwXCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICByb2xlPVwiZGlhbG9nXCJcbiAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInBzd3BfX2JnXCIgLz5cblxuICAgIDxkaXYgY2xhc3M9XCJwc3dwX19zY3JvbGwtd3JhcFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBzd3BfX2NvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHN3cF9faXRlbVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwc3dwX19pdGVtXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBzd3BfX2l0ZW1cIiAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJwc3dwX191aSBwc3dwX191aS0taGlkZGVuXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwc3dwX190b3AtYmFyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBzd3BfX2NvdW50ZXJcIiAvPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInBzd3BfX2J1dHRvbiBwc3dwX19idXR0b24tLWNsb3NlXCJcbiAgICAgICAgICAgIDp0aXRsZT1cIiR0KCd3aW5kb3cuY2xvc2VQaG90b1N3aXBlJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5jbG9zZTwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJwc3dwX19idXR0b24gcHN3cF9fYnV0dG9uLS1zaGFyZVwiXG4gICAgICAgICAgICA6dGl0bGU9XCIkdCgnd2luZG93LmRvd25sb2FkJylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5maWxlX2Rvd25sb2FkPC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInBzd3BfX2J1dHRvbiBwc3dwX19idXR0b24tLWZzXCJcbiAgICAgICAgICAgIDp0aXRsZT1cIiR0KCd3aW5kb3cudG9nZ2xlRnVsbHNjcmVlbicpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+ZnVsbHNjcmVlbjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJwc3dwX19idXR0b24gcHN3cF9fYnV0dG9uLS16b29tXCJcbiAgICAgICAgICAgIDp0aXRsZT1cIiR0KCd3aW5kb3cuem9vbVBob3RvU3dpcGUnKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPnpvb21faW48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicHN3cF9fcHJlbG9hZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHN3cF9fcHJlbG9hZGVyX19pY25cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBzd3BfX3ByZWxvYWRlcl9fY3V0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBzd3BfX3ByZWxvYWRlcl9fZG9udXRcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJwc3dwX19zaGFyZS1tb2RhbCBwc3dwX19zaGFyZS1tb2RhbC0taGlkZGVuIHBzd3BfX3NpbmdsZS10YXBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBzd3BfX3NoYXJlLXRvb2x0aXBcIiAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJwc3dwX19idXR0b24gcHN3cF9fYnV0dG9uLS1hcnJvdy0tbGVmdFwiXG4gICAgICAgICAgOnRpdGxlPVwiJHQoJ3dpbmRvdy5wcmV2aW91c1Bob3RvU3dpcGUnKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+YXJyb3dfYmFjazwvaT5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwicHN3cF9fYnV0dG9uIHBzd3BfX2J1dHRvbi0tYXJyb3ctLXJpZ2h0XCJcbiAgICAgICAgICA6dGl0bGU9XCIkdCgnd2luZG93Lm5leHRQaG90b1N3aXBlJylcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmFycm93X2ZvcndhcmQ8L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwc3dwX19jYXB0aW9uXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBzd3BfX2NhcHRpb25fX2NlbnRlclwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0IFBob3RvU3dpcGUgZnJvbSAncGhvdG9zd2lwZSc7XG4gIGltcG9ydCBQaG90b1N3aXBlVUlEZWZhdWx0IGZyb20gJ3Bob3Rvc3dpcGUvZGlzdC9waG90b3N3aXBlLXVpLWRlZmF1bHQnO1xuICBpbXBvcnQgUHJvZHVjdE1hcCBmcm9tICdAcGFnZXMvcHJvZHVjdC9wcm9kdWN0LW1hcCc7XG4gIGltcG9ydCBQcm9kdWN0RXZlbnRNYXAgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvcHJvZHVjdC1ldmVudC1tYXAnO1xuXG4gIGNvbnN0IFBob3RvU3dpcGVNYXAgPSBQcm9kdWN0TWFwLmRyb3B6b25lLnBob3Rvc3dpcGU7XG4gIGNvbnN0IFBob3RvU3dpcGVFdmVudE1hcCA9IFByb2R1Y3RFdmVudE1hcC5kcm9wem9uZS5waG90b3N3aXBlO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnRHJvcHpvbmVQaG90b1N3aXBlJyxcbiAgICBwcm9wczoge1xuICAgICAgZmlsZXM6IHtcbiAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdLFxuICAgICAgfSxcbiAgICB9LFxuICAgIG1vdW50ZWQoKSB7XG4gICAgICBjb25zdCBwc3dwRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoUGhvdG9Td2lwZU1hcC5lbGVtZW50KTtcblxuICAgICAgaWYgKHBzd3BFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgc2hhcmVCdXR0b25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnZG93bmxvYWQnLFxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy4kdCgnd2luZG93LmRvd25sb2FkSW1hZ2UnKSxcbiAgICAgICAgICAgICAgdXJsOiAne3tyYXdfaW1hZ2VfdXJsfX0nLFxuICAgICAgICAgICAgICBkb3dubG9hZDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIG91ciBmaWxlcyBjb21wYXRpYmxlIGZvciBwaG90b3N3aXBlXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5maWxlcy5tYXAoKGZpbGUpID0+IHtcbiAgICAgICAgICBmaWxlLnNyYyA9IGZpbGUuZGF0YVVSTDtcbiAgICAgICAgICBmaWxlLmggPSBmaWxlLmhlaWdodDtcbiAgICAgICAgICBmaWxlLncgPSBmaWxlLndpZHRoO1xuXG4gICAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGdhbGxlcnkgPSBuZXcgUGhvdG9Td2lwZShcbiAgICAgICAgICBwc3dwRWxlbWVudCxcbiAgICAgICAgICBQaG90b1N3aXBlVUlEZWZhdWx0LFxuICAgICAgICAgIGl0ZW1zLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICk7XG5cbiAgICAgICAgZ2FsbGVyeS5pbml0KCk7XG5cbiAgICAgICAgLy8gV2UgbXVzdCB0ZWxsIHRvIHRoZSByaWNoIGNvbXBvbmVudCB0aGF0IHRoZSBnYWxsZXJ5IGhhdmUgYmVlbiBjbG9zZWRcbiAgICAgICAgZ2FsbGVyeS5saXN0ZW4oUGhvdG9Td2lwZUV2ZW50TWFwLmRlc3Ryb3ksICgpID0+IHtcbiAgICAgICAgICB0aGlzLiRlbWl0KFBob3RvU3dpcGVFdmVudE1hcC5jbG9zZUdhbGxlcnkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHt9LFxuICB9O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHR5cGU9XCJ0ZXh0L3Njc3NcIj5cbkBpbXBvcnQgXCJ+QHNjc3MvY29uZmlnL19zZXR0aW5ncy5zY3NzXCI7XG5cbi5wcm9kdWN0LXBhZ2UgI3Byb2R1Y3QtaW1hZ2VzLWNvbnRhaW5lciB7XG4gIC5wc3dwX19idXR0b24ge1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgY29sb3I6IHdoaXRlO1xuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IG5vbmU7XG4gICAgfVxuXG4gICAgaSB7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8IS0tKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICotLT5cbjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImRyb3B6b25lLXdpbmRvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJkcm9wem9uZS13aW5kb3ctaGVhZGVyIHJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImRyb3B6b25lLXdpbmRvdy1oZWFkZXItbGVmdFwiPlxuICAgICAgICA8cFxuICAgICAgICAgIGNsYXNzPVwiZHJvcHpvbmUtd2luZG93LW51bWJlclwiXG4gICAgICAgICAgdi1odG1sPVwiXG4gICAgICAgICAgICAkdCgnd2luZG93LnNlbGVjdGVkRmlsZXMnLCB7ICclZmlsZXNOYiUnOiBzZWxlY3RlZEZpbGVzLmxlbmd0aCB9KVxuICAgICAgICAgIFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkcm9wem9uZS13aW5kb3ctaGVhZGVyLXJpZ2h0XCI+XG4gICAgICAgIDxpXG4gICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiXG4gICAgICAgICAgZGF0YS10b2dnbGU9XCJwc3Rvb2x0aXBcIlxuICAgICAgICAgIDpkYXRhLW9yaWdpbmFsLXRpdGxlPVwiJHQoJ3dpbmRvdy56b29tJylcIlxuICAgICAgICAgIEBjbGljaz1cIiRlbWl0KCdvcGVuR2FsbGVyeScpXCJcbiAgICAgICAgPnNlYXJjaDwvaT5cbiAgICAgICAgPGlcbiAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCJcbiAgICAgICAgICBkYXRhLXRvZ2dsZT1cInBzdG9vbHRpcFwiXG4gICAgICAgICAgOmRhdGEtb3JpZ2luYWwtdGl0bGU9XCIkdCgnd2luZG93LnJlcGxhY2VTZWxlY3Rpb24nKVwiXG4gICAgICAgICAgQGNsaWNrPVwib3BlbkZpbGVNYW5hZ2VyXCJcbiAgICAgICAgICB2LWlmPVwic2VsZWN0ZWRGaWxlXCJcbiAgICAgICAgPmZpbmRfcmVwbGFjZTwvaT5cbiAgICAgICAgPGlcbiAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCJcbiAgICAgICAgICBkYXRhLXRvZ2dsZT1cInBzdG9vbHRpcFwiXG4gICAgICAgICAgOmRhdGEtb3JpZ2luYWwtdGl0bGU9XCIkdCgnd2luZG93LmRlbGV0ZScpXCJcbiAgICAgICAgICBAY2xpY2suc3RvcD1cIiRlbWl0KCdyZW1vdmVTZWxlY3Rpb24nKVwiXG4gICAgICAgID5kZWxldGU8L2k+XG4gICAgICAgIDxpXG4gICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiXG4gICAgICAgICAgZGF0YS10b2dnbGU9XCJwc3Rvb2x0aXBcIlxuICAgICAgICAgIDpkYXRhLW9yaWdpbmFsLXRpdGxlPVwiJHQoJ3dpbmRvdy5jbG9zZScpXCJcbiAgICAgICAgICBAY2xpY2s9XCIkZW1pdCgndW5zZWxlY3RBbGwnKVwiXG4gICAgICAgID5jbG9zZTwvaT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPHBcbiAgICAgIGNsYXNzPVwiZHJvcHpvbmUtd2luZG93LXNlbGVjdFwiXG4gICAgICBAY2xpY2s9XCIkZW1pdCgnc2VsZWN0QWxsJylcIlxuICAgICAgdi1pZj1cImZpbGVzLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRGaWxlcy5sZW5ndGggIT09IGZpbGVzLmxlbmd0aFwiXG4gICAgPlxuICAgICAge3sgJHQoJ3dpbmRvdy5zZWxlY3RBbGwnKSB9fVxuICAgIDwvcD5cbiAgICA8cFxuICAgICAgY2xhc3M9XCJkcm9wem9uZS13aW5kb3ctdW5zZWxlY3RcIlxuICAgICAgdi1pZj1cInNlbGVjdGVkRmlsZXMubGVuZ3RoID09PSBmaWxlcy5sZW5ndGhcIlxuICAgICAgQGNsaWNrPVwiJGVtaXQoJ3Vuc2VsZWN0QWxsJylcIlxuICAgID5cbiAgICAgIHt7ICR0KCd3aW5kb3cudW5zZWxlY3RBbGwnKSB9fVxuICAgIDwvcD5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibWQtY2hlY2tib3ggZHJvcHpvbmUtd2luZG93LWNoZWNrYm94XCJcbiAgICAgIHYtaWY9XCJzZWxlY3RlZEZpbGUgIT09IG51bGxcIlxuICAgICAgOmRhdGEtdG9nZ2xlPVwic2hvd0NvdmVyVG9vbHRpcFwiXG4gICAgICA6ZGF0YS1vcmlnaW5hbC10aXRsZT1cIiR0KCd3aW5kb3cuY2FudERpc2FibGVDb3ZlcicpXCJcbiAgICA+XG4gICAgICA8bGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiaXNDb3ZlclwiXG4gICAgICAgICAgOmNoZWNrZWQ9XCJpc0NvdmVyXCJcbiAgICAgICAgICBAY2hhbmdlLnByZXZlbnQuc3RvcD1cImNvdmVyQ2hhbmdlZFwiXG4gICAgICAgID5cbiAgICAgICAgPGkgY2xhc3M9XCJtZC1jaGVja2JveC1jb250cm9sXCIgLz5cbiAgICAgICAge3sgJHQoJ3dpbmRvdy51c2VBc0NvdmVyJykgfX1cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8aW5wdXRcbiAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgIGNsYXNzPVwiZHJvcHpvbmUtd2luZG93LWZpbGVtYW5hZ2VyXCJcbiAgICAgIEBjaGFuZ2UucHJldmVudC5zdG9wPVwid2F0Y2hGaWxlc1wiXG4gICAgPlxuXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkcm9wem9uZS13aW5kb3ctbGFiZWxcIlxuICAgICAgdi1pZj1cInNlbGVjdGVkRmlsZSAhPT0gbnVsbFwiXG4gICAgPlxuICAgICAgPGxhYmVsXG4gICAgICAgIGZvcj1cImNhcHRpb24tdGV4dGFyZWFcIlxuICAgICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgPnt7XG4gICAgICAgICR0KCd3aW5kb3cuY2FwdGlvbicpXG4gICAgICB9fTwvbGFiZWw+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZHJvcGRvd25cIlxuICAgICAgICB2LWlmPVwibG9jYWxlcy5sZW5ndGggPiAxXCJcbiAgICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4tc20gZHJvcGRvd24tdG9nZ2xlIGpzLWxvY2FsZS1idG5cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIlxuICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgIGlkPVwicHJvZHVjdF9kcm9wem9uZV9sYW5nXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHNlbGVjdGVkTG9jYWxlLmlzb19jb2RlIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1tZW51IGxvY2FsZS1kcm9wZG93bi1tZW51XCJcbiAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJmb3JtX2ludm9pY2VfcHJlZml4XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICB2LWZvcj1cImxvY2FsZSBpbiBsb2NhbGVzXCJcbiAgICAgICAgICAgIDprZXk9XCJsb2NhbGUubmFtZVwiXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0ganMtbG9jYWxlLWl0ZW1cIlxuICAgICAgICAgICAgOmRhdGEtbG9jYWxlPVwibG9jYWxlLmlzb19jb2RlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBsb2NhbGUubmFtZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDx0ZXh0YXJlYVxuICAgICAgaWQ9XCJjYXB0aW9uLXRleHRhcmVhXCJcbiAgICAgIG5hbWU9XCJjYXB0aW9uLXRleHRhcmVhXCJcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgIHYtaWY9XCJzZWxlY3RlZEZpbGUgIT09IG51bGxcIlxuICAgICAgdi1tb2RlbD1cImNhcHRpb25WYWx1ZVtzZWxlY3RlZExvY2FsZS5pZF9sYW5nXVwiXG4gICAgICBAY2hhbmdlLnByZXZlbnQuc3RvcD1cInByZXZlbnRcIlxuICAgICAgQGtleXVwLnByZXZlbnQuc3RvcD1cInByZXZlbnRcIlxuICAgIC8+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImRyb3B6b25lLXdpbmRvdy1idXR0b24tY29udGFpbmVyXCJcbiAgICAgIHYtaWY9XCJzZWxlY3RlZEZpbGVcIlxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHNhdmUtaW1hZ2Utc2V0dGluZ3NcIlxuICAgICAgICBAY2xpY2s9XCIkZW1pdCgnc2F2ZVNlbGVjdGVkRmlsZScsIGNhcHRpb25WYWx1ZSwgY292ZXJEYXRhKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIHYtaWY9XCIhbG9hZGluZ1wiPlxuICAgICAgICAgIHt7ICR0KCd3aW5kb3cuc2F2ZUltYWdlJykgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc21cIlxuICAgICAgICAgIHYtaWY9XCJsb2FkaW5nXCJcbiAgICAgICAgICByb2xlPVwic3RhdHVzXCJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAvPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0IFByb2R1Y3RNYXAgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvcHJvZHVjdC1tYXAnO1xuXG4gIGNvbnN0IERyb3B6b25lTWFwID0gUHJvZHVjdE1hcC5kcm9wem9uZTtcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ0Ryb3B6b25lV2luZG93JyxcbiAgICBwcm9wczoge1xuICAgICAgc2VsZWN0ZWRGaWxlczoge1xuICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gW10sXG4gICAgICB9LFxuICAgICAgZmlsZXM6IHtcbiAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdLFxuICAgICAgfSxcbiAgICAgIGxvY2FsZXM6IHtcbiAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHNlbGVjdGVkTG9jYWxlOiB7XG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4ge30sXG4gICAgICB9LFxuICAgICAgbG9hZGluZzoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2FwdGlvblZhbHVlOiB7fSxcbiAgICAgICAgY292ZXJEYXRhOiBmYWxzZSxcbiAgICAgIH07XG4gICAgfSxcbiAgICB3YXRjaDoge1xuICAgICAgLyoqXG4gICAgICAgKiBXZSBuZWVkIHRvIHdhdGNoIHNlbGVjdGVkIGZpbGVzIHRvIG1hbmFnZSBtdWx0aWxhbmdcbiAgICAgICAqIG9mIG9ubHkgb25lIGZpbGUgb3IgbXVsdGlwbGUgZmlsZXMgdGhlbiB0aGUgdmFsdWUgaXMgc2VudFxuICAgICAgICogb24gc2F2ZS5cbiAgICAgICAqL1xuICAgICAgc2VsZWN0ZWRGaWxlcyh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRoaXMuY2FwdGlvblZhbHVlID0ge307XG4gICAgICAgICAgdGhpcy5sb2NhbGVzLmZvckVhY2goKGxvY2FsZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jYXB0aW9uVmFsdWVbbG9jYWxlXSA9ICcnO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2FwdGlvblZhbHVlID0gdGhpcy5zZWxlY3RlZEZpbGUubGVnZW5kcztcbiAgICAgICAgICB0aGlzLmNvdmVyRGF0YSA9IHRoaXMuc2VsZWN0ZWRGaWxlLmlzX2NvdmVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHNlbGVjdGVkRmlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGaWxlcy5sZW5ndGggPT09IDEgPyB0aGlzLnNlbGVjdGVkRmlsZXNbMF0gOiBudWxsO1xuICAgICAgfSxcbiAgICAgIGlzQ292ZXIoKSB7XG4gICAgICAgIHJldHVybiAhISh0aGlzLnNlbGVjdGVkRmlsZSAmJiB0aGlzLnNlbGVjdGVkRmlsZS5pc19jb3Zlcik7XG4gICAgICB9LFxuICAgICAgc2hvd0NvdmVyVG9vbHRpcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDb3Zlcikge1xuICAgICAgICAgIHJldHVybiAncHN0b29sdGlwJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgd2luZG93LnByZXN0YVNob3BVaUtpdC5pbml0VG9vbFRpcHMoKTtcbiAgICAgIC8vIFdlIHNldCB0aGUgaW50aWFsIHZhbHVlIG9mIHRoZSBmaXJzdCBpdGVtIGluIG9yZGVyIHRvIHVzZSB0aGUgY29tcHV0ZWRcbiAgICAgIHRoaXMuY2FwdGlvblZhbHVlID0gdGhpcy5zZWxlY3RlZEZpbGUubGVnZW5kcztcbiAgICAgIHRoaXMuY292ZXJEYXRhID0gdGhpcy5zZWxlY3RlZEZpbGUuaXNfY292ZXI7XG4gICAgfSxcbiAgICB1cGRhdGVkKCkge1xuICAgICAgd2luZG93LnByZXN0YVNob3BVaUtpdC5pbml0VG9vbFRpcHMoKTtcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIC8qKlxuICAgICAgICogV2F0Y2ggZmlsZSBjaGFuZ2UgYW5kIHNlbmQgYW4gZXZlbnQgdG8gdGhlIHNtYXJ0IGNvbXBvbmVudFxuICAgICAgICovXG4gICAgICB3YXRjaEZpbGVzKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3JlcGxhY2VkRmlsZScsIGV2ZW50KTtcbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIFVzZWQgdG8gb3BlbiB0aGUgbmF0aXZlIGZpbGUgbWFuYWdlclxuICAgICAgICovXG4gICAgICBvcGVuRmlsZU1hbmFnZXIoKSB7XG4gICAgICAgIGNvbnN0IGZpbGVJbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoRHJvcHpvbmVNYXAud2luZG93RmlsZU1hbmFnZXIpO1xuICAgICAgICBmaWxlSW5wdXQuY2xpY2soKTtcbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIENhY2hlIGNvdmVyIGRhdGFcbiAgICAgICAqL1xuICAgICAgY292ZXJDaGFuZ2VkKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuY292ZXJEYXRhID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgfSxcbiAgICAgIHByZXZlbnQoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgdHlwZT1cInRleHQvc2Nzc1wiPlxuQGltcG9ydCAnfkBzY3NzL2NvbmZpZy9fc2V0dGluZ3Muc2Nzcyc7XG5AaW1wb3J0ICd+QHNjc3MvY29uZmlnL19ib290c3RyYXAuc2Nzcyc7XG5cbi5wcm9kdWN0LXBhZ2Uge1xuICAuZHJvcHpvbmUtd2luZG93IHtcbiAgICB3aWR0aDogNDUlO1xuICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigjZmZmZmZmLCAyJSk7XG4gICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgICBwYWRkaW5nOiAxcmVtO1xuICAgIG1pbi13aWR0aDogMjByZW07XG5cbiAgICAmLWZpbGVtYW5hZ2VyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgJi1sYWJlbCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcblxuICAgICAgbGFiZWwge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgfVxuXG4gICAgICAuZHJvcGRvd24ge1xuICAgICAgICA+IGJ1dHRvbiB7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogMC4yNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgICYtaXRlbSB7XG4gICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGV4dGFyZWEge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgICB9XG5cbiAgICAmLWJ1dHRvbiB7XG4gICAgICAmLWNvbnRhaW5lciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi1jaGVja2JveCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuXG4gICAgICBsYWJlbCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi1zZWxlY3QsXG4gICAgJi11bnNlbGVjdCB7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgZm9udC1zaXplOiAwLjkyNXJlbTtcbiAgICAgIGNvbG9yOiAkcHJpbWFyeTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIG1hcmdpbi10b3A6IDAuNXJlbTtcbiAgICB9XG5cbiAgICAmLW51bWJlciB7XG4gICAgICBmb250LXNpemU6IDFyZW07XG5cbiAgICAgIHNwYW4ge1xuICAgICAgICBjb2xvcjogJHByaW1hcnk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi1oZWFkZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBwYWRkaW5nOiAwIDFyZW07XG5cbiAgICAgIHAge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgfVxuXG4gICAgICAubWF0ZXJpYWwtaWNvbnMge1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIGNvbG9yOiAkZ3JheS01MDA7XG4gICAgICAgIHRyYW5zaXRpb246IDAuMjVzIGVhc2Utb3V0O1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICAgICAgbWFyZ2luOiAwIDAuMjVyZW07XG5cbiAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIGNvbG9yOiBwcmltYXJ5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC1kb3duKHhzKSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1pbi13aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8IS0tKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICotLT5cblxuPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiY29tYmluYXRpb25zLWZpbHRlcnMtZHJvcGRvd25cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgOmNsYXNzPVwiW1xuICAgICAgICAgICdidG4nLFxuICAgICAgICAgICdkcm9wZG93bi10b2dnbGUnLFxuICAgICAgICAgIHNlbGVjdGVkRmlsdGVycy5sZW5ndGggPiAwID8gJ2J0bi1wcmltYXJ5JyA6ICdidG4tb3V0bGluZS1zZWNvbmRhcnknLFxuICAgICAgICAgICdidG4nLFxuICAgICAgICBdXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIlxuICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgIGlkPVwiZm9ybV9pbnZvaWNlX3ByZWZpeFwiXG4gICAgICA+XG4gICAgICAgIHt7IGxhYmVsIH19IHt7IG5iRmlsZXMgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIlxuICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJmb3JtX2ludm9pY2VfcHJlZml4XCJcbiAgICAgICAgQGNsaWNrPVwicHJldmVudENsb3NlKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJtZC1jaGVja2JveFwiXG4gICAgICAgICAgdi1mb3I9XCJmaWx0ZXIgaW4gY2hpbGRyZW5cIlxuICAgICAgICAgIDprZXk9XCJmaWx0ZXIuaWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kLWNoZWNrYm94LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIDpjaGVja2VkPVwiaXNDaGVja2VkKGZpbHRlcilcIlxuICAgICAgICAgICAgICAgIEBjaGFuZ2U9XCJ0b2dnbGVGaWx0ZXIoZmlsdGVyKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZC1jaGVja2JveC1jb250cm9sXCIgLz5cbiAgICAgICAgICAgICAge3sgZmlsdGVyLm5hbWUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICdGaWx0ZXJEcm9wZG93bicsXG4gICAgZGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNlbGVjdGVkRmlsdGVyczogW10sXG4gICAgICB9O1xuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgIHBhcmVudElkOiB7XG4gICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgY2hpbGRyZW46IHtcbiAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGxhYmVsOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB9LFxuICAgIH0sXG4gICAgbW91bnRlZCgpIHtcbiAgICAgIHRoaXMuJHBhcmVudC4kb24oJ2NsZWFyQWxsJywgdGhpcy5jbGVhcik7XG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgbmJGaWxlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IGAoJHt0aGlzLnNlbGVjdGVkRmlsdGVycy5sZW5ndGh9KWBcbiAgICAgICAgICA6IG51bGw7XG4gICAgICB9LFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgaXNDaGVja2VkKGZpbHRlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZpbHRlcnMuaW5jbHVkZXMoZmlsdGVyKTtcbiAgICAgIH0sXG4gICAgICB0b2dnbGVGaWx0ZXIoZmlsdGVyKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsdGVycy5pbmNsdWRlcyhmaWx0ZXIpKSB7XG4gICAgICAgICAgdGhpcy4kZW1pdCgncmVtb3ZlRmlsdGVyJywgZmlsdGVyLCB0aGlzLnBhcmVudElkKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycyA9IHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmZpbHRlcihcbiAgICAgICAgICAgIChpdGVtKSA9PiBpdGVtLmlkICE9PSBmaWx0ZXIuaWQsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KCdhZGRGaWx0ZXInLCBmaWx0ZXIsIHRoaXMucGFyZW50SWQpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHByZXZlbnRDbG9zZShldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH0sXG4gICAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMgPSBbXTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIiB0eXBlPVwidGV4dC9zY3NzXCI+XG5AaW1wb3J0IFwifkBzY3NzL2NvbmZpZy9fc2V0dGluZ3Muc2Nzc1wiO1xuQGltcG9ydCBcIn5Ac2Nzcy9jb25maWcvX2Jvb3RzdHJhcC5zY3NzXCI7XG5cbi5jb21iaW5hdGlvbnMtZmlsdGVycy1kcm9wZG93biB7XG4gIG1hcmdpbjogMCAwLjM1cmVtO1xuXG4gIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtZG93bih4cykge1xuICAgIG1hcmdpbi1ib3R0b206IC41cmVtO1xuICB9XG5cbiAgLmRyb3Bkb3duLWl0ZW0ge1xuICAgIHBhZGRpbmc6IDAuNDM4cmVtIDAuOTM4cmVtO1xuICAgIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuXG4gICAgLm1kLWNoZWNrYm94LWNvbnRhaW5lciB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDI4cHg7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG48dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJjb21iaW5hdGlvbnMtZmlsdGVyc1wiPlxuICAgIDxsYWJlbFxuICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsXCJcbiAgICAgIHYtaWY9XCJmaWx0ZXJzLmxlbmd0aFwiXG4gICAgPnt7ICR0KCdmaWx0ZXJzLmxhYmVsJykgfX08L2xhYmVsPlxuXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjb21iaW5hdGlvbnMtZmlsdGVycy1saW5lXCJcbiAgICAgIHYtaWY9XCJmaWx0ZXJzLmxlbmd0aFwiXG4gICAgPlxuICAgICAgPGZpbHRlci1kcm9wZG93blxuICAgICAgICA6a2V5PVwiZmlsdGVyLmlkXCJcbiAgICAgICAgdi1mb3I9XCJmaWx0ZXIgaW4gZmlsdGVyc1wiXG4gICAgICAgIDpjaGlsZHJlbj1cImZpbHRlci5hdHRyaWJ1dGVzXCJcbiAgICAgICAgOnBhcmVudC1pZD1cImZpbHRlci5pZFwiXG4gICAgICAgIDpsYWJlbD1cImZpbHRlci5uYW1lXCJcbiAgICAgICAgQGFkZEZpbHRlcj1cImFkZEZpbHRlclwiXG4gICAgICAgIEByZW1vdmVGaWx0ZXI9XCJyZW1vdmVGaWx0ZXJcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHYtaWY9XCJzZWxlY3RlZEZpbHRlcnNOdW1iZXIgPiAwXCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGNvbWJpbmF0aW9ucy1maWx0ZXJzLWNsZWFyXCJcbiAgICAgICAgQGNsaWNrPVwiY2xlYXJBbGxcIlxuICAgICAgPlxuICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+Y2xvc2U8L2k+XG4gICAgICAgIHt7ICR0YygnZmlsdGVycy5jbGVhcicsIHNlbGVjdGVkRmlsdGVyc051bWJlciwgeyAnJWZpbHRlcnNOYiUnOiBzZWxlY3RlZEZpbHRlcnNOdW1iZXIgfSkgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbiAgaW1wb3J0IEZpbHRlckRyb3Bkb3duIGZyb20gJ0BwYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvZmlsdGVycy9GaWx0ZXJEcm9wZG93bic7XG4gIGltcG9ydCBQcm9kdWN0RXZlbnRNYXAgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvcHJvZHVjdC1ldmVudC1tYXAnO1xuXG4gIGNvbnN0IENvbWJpbmF0aW9uRXZlbnRzID0gUHJvZHVjdEV2ZW50TWFwLmNvbWJpbmF0aW9ucztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ0ZpbHRlcnMnLFxuICAgIGRhdGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZWxlY3RlZEZpbHRlcnM6IHt9LFxuICAgICAgfTtcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICBmaWx0ZXJzOiB7XG4gICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBldmVudEVtaXR0ZXI6IHtcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICBGaWx0ZXJEcm9wZG93bixcbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBzZWxlY3RlZEZpbHRlcnNOdW1iZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZpbHRlcnMpIHtcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKS5yZWR1Y2UoKHRvdGFsLCBhdHRyaWJ1dGVzKSA9PiB0b3RhbCArIGF0dHJpYnV0ZXMubGVuZ3RoLCAwKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgdGhpcy5ldmVudEVtaXR0ZXIub24oQ29tYmluYXRpb25FdmVudHMuY2xlYXJGaWx0ZXJzLCAoKSA9PiB0aGlzLmNsZWFyQWxsKCkpO1xuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGlzIG1ldGhvZHMgaXMgdXNlZCB0byBpbml0aWFsaXplIHByb2R1Y3QgZmlsdGVyc1xuICAgICAgICovXG4gICAgICBhZGRGaWx0ZXIoZmlsdGVyLCBwYXJlbnRJZCkge1xuICAgICAgICAvLyBJZiBhYnNlbnQgc2V0IG5ldyBmaWVsZCB3aXRoIHNldCBtZXRob2Qgc28gdGhhdCBpdCdzIHJlYWN0aXZlXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZpbHRlcnNbcGFyZW50SWRdKSB7XG4gICAgICAgICAgdGhpcy4kc2V0KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLCBwYXJlbnRJZCwgW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnNbcGFyZW50SWRdLnB1c2goZmlsdGVyKTtcbiAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJzKCk7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlRmlsdGVyKGZpbHRlciwgcGFyZW50SWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRmlsdGVyc1twYXJlbnRJZF0pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyc1twYXJlbnRJZF0gPSB0aGlzLnNlbGVjdGVkRmlsdGVyc1twYXJlbnRJZF0uZmlsdGVyKFxuICAgICAgICAgIChlKSA9PiBmaWx0ZXIuaWQgIT09IGUuaWQsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsdGVycygpO1xuICAgICAgfSxcbiAgICAgIGNsZWFyQWxsKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycyA9IFtdO1xuICAgICAgICB0aGlzLiRlbWl0KCdjbGVhckFsbCcpO1xuICAgICAgICB0aGlzLmV2ZW50RW1pdHRlci5lbWl0KENvbWJpbmF0aW9uRXZlbnRzLnVwZGF0ZUF0dHJpYnV0ZUdyb3VwcywgdGhpcy5zZWxlY3RlZEZpbHRlcnMpO1xuICAgICAgfSxcbiAgICAgIHVwZGF0ZUZpbHRlcnMoKSB7XG4gICAgICAgIHRoaXMuZXZlbnRFbWl0dGVyLmVtaXQoQ29tYmluYXRpb25FdmVudHMudXBkYXRlQXR0cmlidXRlR3JvdXBzLCB0aGlzLnNlbGVjdGVkRmlsdGVycyk7XG4gICAgICB9LFxuICAgIH0sXG4gIH07XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCIgdHlwZT1cInRleHQvc2Nzc1wiPlxuQGltcG9ydCBcIn5Ac2Nzcy9jb25maWcvX3NldHRpbmdzLnNjc3NcIjtcblxuLmNvbWJpbmF0aW9ucy1maWx0ZXJzIHtcbiAgLmNvbnRyb2wtbGFiZWwge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgY29sb3I6ICMwMDA7XG4gICAgbWFyZ2luLWJvdHRvbjogMXJlbTtcbiAgfVxuXG4gICYtbGluZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgbWFyZ2luOiAwIC0wLjM1cmVtO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPCEtLSoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqLS0+XG48dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJnZW5lcmF0ZS1tb2RhbC1jb250ZW50XCI+XG4gICAgPGRpdiBjbGFzcz1cInRhZ3MtaW5wdXQgZC1mbGV4IGZsZXgtd3JhcFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRhZ3Mtd3JhcHBlclwiPlxuICAgICAgICA8dGVtcGxhdGUgdi1mb3I9XCJzZWxlY3RlZEdyb3VwIGluIHNlbGVjdGVkQXR0cmlidXRlR3JvdXBzXCI+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwidGFnXCJcbiAgICAgICAgICAgIDprZXk9XCJzZWxlY3RlZEF0dHJpYnV0ZS5pZFwiXG4gICAgICAgICAgICB2LWZvcj1cInNlbGVjdGVkQXR0cmlidXRlIGluIHNlbGVjdGVkR3JvdXAuYXR0cmlidXRlc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgc2VsZWN0ZWRHcm91cC5uYW1lIH19OiB7eyBzZWxlY3RlZEF0dHJpYnV0ZS5uYW1lIH19XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCJcbiAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQuc3RvcD1cIlxuICAgICAgICAgICAgICAgIHNlbmRSZW1vdmVFdmVudChzZWxlY3RlZEF0dHJpYnV0ZSwgc2VsZWN0ZWRHcm91cClcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5jbG9zZTwvaT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIDpwbGFjZWhvbGRlcj1cIiR0KCdzZWFyY2gucGxhY2Vob2xkZXInKVwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0IGF0dHJpYnV0ZXMtc2VhcmNoXCJcbiAgICAgID5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJwcm9kdWN0LWNvbWJpbmF0aW9ucy1tb2RhbC1jb250ZW50XCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGlkPVwiYXR0cmlidXRlcy1saXN0LXNlbGVjdG9yXCJcbiAgICAgICAgY2xhc3M9XCJhdHRyaWJ1dGVzLWxpc3Qtb3ZlcmZsb3dcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0cmlidXRlcy1jb250ZW50XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJhdHRyaWJ1dGUtZ3JvdXBcIlxuICAgICAgICAgICAgdi1mb3I9XCJhdHRyaWJ1dGVHcm91cCBvZiBhdHRyaWJ1dGVHcm91cHNcIlxuICAgICAgICAgICAgOmtleT1cImF0dHJpYnV0ZUdyb3VwLmlkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0cmlidXRlLWdyb3VwLWhlYWRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWQtY2hlY2tib3ggYXR0cmlidXRlLWdyb3VwLWNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXR0cmlidXRlLWdyb3VwLWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgOm5hbWU9XCJgY2hlY2tib3hfJHthdHRyaWJ1dGVHcm91cC5pZH1gXCJcbiAgICAgICAgICAgICAgICAgICAgQGNoYW5nZS5wcmV2ZW50LnN0b3A9XCJ0b2dnbGVBbGwoYXR0cmlidXRlR3JvdXApXCJcbiAgICAgICAgICAgICAgICAgICAgOmNoZWNrZWQ9XCJjaGVja2JveExpc3QuaW5jbHVkZXMoYXR0cmlidXRlR3JvdXApXCJcbiAgICAgICAgICAgICAgICAgID5cblxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZC1jaGVja2JveC1jb250cm9sXCIgLz5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXR0cmlidXRlLWdyb3VwLW5hbWUgY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJcbiAgICAgICAgICAgICAgICA6aHJlZj1cImAjYXR0cmlidXRlLWdyb3VwLSR7YXR0cmlidXRlR3JvdXAuaWR9YFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGVHcm91cC5uYW1lIH19XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImF0dHJpYnV0ZS1ncm91cC1jb250ZW50IGF0dHJpYnV0ZXMgY29sbGFwc2VcIlxuICAgICAgICAgICAgICA6aWQ9XCJgYXR0cmlidXRlLWdyb3VwLSR7YXR0cmlidXRlR3JvdXAuaWR9YFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgIHYtZm9yPVwiYXR0cmlidXRlIG9mIGF0dHJpYnV0ZUdyb3VwLmF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgIDpjbGFzcz1cIltcbiAgICAgICAgICAgICAgICAgICdhdHRyaWJ1dGUtaXRlbScsXG4gICAgICAgICAgICAgICAgICBnZXRTZWxlY3RlZENsYXNzKGF0dHJpYnV0ZSwgYXR0cmlidXRlR3JvdXApLFxuICAgICAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgICAgIDpmb3I9XCJgYXR0cmlidXRlXyR7YXR0cmlidXRlLmlkfWBcIlxuICAgICAgICAgICAgICAgIDprZXk9XCJhdHRyaWJ1dGUuaWRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgOm5hbWU9XCJgYXR0cmlidXRlXyR7YXR0cmlidXRlLmlkfWBcIlxuICAgICAgICAgICAgICAgICAgOmlkPVwiYGF0dHJpYnV0ZV8ke2F0dHJpYnV0ZS5pZH1gXCJcbiAgICAgICAgICAgICAgICAgIEBjaGFuZ2U9XCJzZW5kQ2hhbmdlRXZlbnQoYXR0cmlidXRlLCBhdHRyaWJ1dGVHcm91cClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0cmlidXRlLWl0ZW0tY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhdHRyaWJ1dGUtaXRlbS1jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIHYtaWY9XCJhdHRyaWJ1dGUuY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICA6c3R5bGU9XCJgYmFja2dyb3VuZC1jb2xvcjogJHthdHRyaWJ1dGUuY29sb3J9YFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdHRyaWJ1dGUtaXRlbS1uYW1lXCI+e3sgYXR0cmlidXRlLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICBpbXBvcnQgaXNTZWxlY3RlZCBmcm9tICdAcGFnZXMvcHJvZHVjdC9taXhpbnMvaXMtYXR0cmlidXRlLXNlbGVjdGVkJztcbiAgaW1wb3J0IFByb2R1Y3RNYXAgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvcHJvZHVjdC1tYXAnO1xuICBpbXBvcnQgUGVyZmVjdFNjcm9sbGJhciBmcm9tICdwZXJmZWN0LXNjcm9sbGJhcic7XG4gIGltcG9ydCBCbG9vZGhvdW5kIGZyb20gJ3R5cGVhaGVhZC5qcyc7XG4gIGltcG9ydCBBdXRvQ29tcGxldGVTZWFyY2ggZnJvbSAnQGNvbXBvbmVudHMvYXV0by1jb21wbGV0ZS1zZWFyY2gnO1xuXG4gIGNvbnN0IHskfSA9IHdpbmRvdztcblxuICBjb25zdCBDb21iaW5hdGlvbnNNYXAgPSBQcm9kdWN0TWFwLmNvbWJpbmF0aW9ucztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ0F0dHJpYnV0ZXNTZWxlY3RvcicsXG4gICAgcHJvcHM6IHtcbiAgICAgIGF0dHJpYnV0ZUdyb3Vwczoge1xuICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gW10sXG4gICAgICB9LFxuICAgICAgc2VsZWN0ZWRBdHRyaWJ1dGVHcm91cHM6IHtcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiB7fSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtaXhpbnM6IFtpc1NlbGVjdGVkXSxcbiAgICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YVNldENvbmZpZzoge30sXG4gICAgICAgIHNlYXJjaFNvdXJjZToge30sXG4gICAgICAgIHNjcm9sbGJhcjogbnVsbCxcbiAgICAgICAgaGFzR2VuZXJhdGVkQ29tYmluYXRpb25zOiBmYWxzZSxcbiAgICAgICAgY2hlY2tib3hMaXN0OiBbXSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgdGhpcy5pbml0RGF0YVNldENvbmZpZygpO1xuICAgICAgdGhpcy5zY3JvbGxiYXIgPSBuZXcgUGVyZmVjdFNjcm9sbGJhcihDb21iaW5hdGlvbnNNYXAuc2Nyb2xsQmFyKTtcbiAgICAgIGNvbnN0ICRzZWFyY2hJbnB1dCA9ICQoQ29tYmluYXRpb25zTWFwLnNlYXJjaElucHV0KTtcbiAgICAgIG5ldyBBdXRvQ29tcGxldGVTZWFyY2goJHNlYXJjaElucHV0LCB0aGlzLmRhdGFTZXRDb25maWcpO1xuICAgIH0sXG4gICAgd2F0Y2g6IHtcbiAgICAgIHNlbGVjdGVkQXR0cmlidXRlR3JvdXBzKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICB0aGlzLmNoZWNrYm94TGlzdCA9IFtdO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgaW5pdERhdGFTZXRDb25maWcoKSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaEl0ZW1zID0gdGhpcy5nZXRTZWFyY2hhYmxlQXR0cmlidXRlcygpO1xuICAgICAgICB0aGlzLnNlYXJjaFNvdXJjZSA9IG5ldyBCbG9vZGhvdW5kKHtcbiAgICAgICAgICBkYXR1bVRva2VuaXplcjogQmxvb2Rob3VuZC50b2tlbml6ZXJzLm9iai53aGl0ZXNwYWNlKFxuICAgICAgICAgICAgJ25hbWUnLFxuICAgICAgICAgICAgJ3ZhbHVlJyxcbiAgICAgICAgICAgICdjb2xvcicsXG4gICAgICAgICAgICAnZ3JvdXBfbmFtZScsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBxdWVyeVRva2VuaXplcjogQmxvb2Rob3VuZC50b2tlbml6ZXJzLndoaXRlc3BhY2UsXG4gICAgICAgICAgbG9jYWw6IHNlYXJjaEl0ZW1zLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBkYXRhU2V0Q29uZmlnID0ge1xuICAgICAgICAgIHNvdXJjZTogdGhpcy5zZWFyY2hTb3VyY2UsXG4gICAgICAgICAgZGlzcGxheTogJ25hbWUnLFxuICAgICAgICAgIHZhbHVlOiAnbmFtZScsXG4gICAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICAgIG9uU2VsZWN0OiAoYXR0cmlidXRlLCBlLCAkc2VhcmNoSW5wdXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZUdyb3VwID0ge1xuICAgICAgICAgICAgICBpZDogYXR0cmlidXRlLmdyb3VwX2lkLFxuICAgICAgICAgICAgICBuYW1lOiBhdHRyaWJ1dGUuZ3JvdXBfbmFtZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnNlbmRBZGRFdmVudChhdHRyaWJ1dGUsIGF0dHJpYnV0ZUdyb3VwKTtcblxuICAgICAgICAgICAgLy8gVGhpcyByZXNldHMgdGhlIHNlYXJjaCBpbnB1dCBvciBlbHNlIHByZXZpb3VzIHNlYXJjaCBpcyBjYWNoZWQgYW5kIGNhbiBiZSBhZGRlZCBhZ2FpblxuICAgICAgICAgICAgJHNlYXJjaElucHV0LnR5cGVhaGVhZCgndmFsJywgJycpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25DbG9zZShldmVudCwgJHNlYXJjaElucHV0KSB7XG4gICAgICAgICAgICAkc2VhcmNoSW5wdXQudHlwZWFoZWFkKCd2YWwnLCAnJyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGRhdGFTZXRDb25maWcudGVtcGxhdGVzID0ge1xuICAgICAgICAgIHN1Z2dlc3Rpb246IChpdGVtKSA9PiBgPGRpdiBjbGFzcz1cInB4LTJcIj4ke2l0ZW0uZ3JvdXBfbmFtZX06ICR7aXRlbS5uYW1lfTwvZGl2PmAsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5kYXRhU2V0Q29uZmlnID0gZGF0YVNldENvbmZpZztcbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICAgICAqL1xuICAgICAgZ2V0U2VhcmNoYWJsZUF0dHJpYnV0ZXMoKSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaGFibGVBdHRyaWJ1dGVzID0gW107XG4gICAgICAgIHRoaXMuYXR0cmlidXRlR3JvdXBzLmZvckVhY2goKGF0dHJpYnV0ZUdyb3VwKSA9PiB7XG4gICAgICAgICAgYXR0cmlidXRlR3JvdXAuYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdGVkKFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVHcm91cCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQXR0cmlidXRlR3JvdXBzLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhdHRyaWJ1dGUuZ3JvdXBfbmFtZSA9IGF0dHJpYnV0ZUdyb3VwLm5hbWU7XG4gICAgICAgICAgICBhdHRyaWJ1dGUuZ3JvdXBfaWQgPSBhdHRyaWJ1dGVHcm91cC5pZDtcbiAgICAgICAgICAgIHNlYXJjaGFibGVBdHRyaWJ1dGVzLnB1c2goYXR0cmlidXRlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHNlYXJjaGFibGVBdHRyaWJ1dGVzO1xuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZVxuICAgICAgICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZUdyb3VwXG4gICAgICAgKlxuICAgICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgICAqL1xuICAgICAgZ2V0U2VsZWN0ZWRDbGFzcyhhdHRyaWJ1dGUsIGF0dHJpYnV0ZUdyb3VwKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2VsZWN0ZWQoXG4gICAgICAgICAgYXR0cmlidXRlLFxuICAgICAgICAgIGF0dHJpYnV0ZUdyb3VwLFxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGVHcm91cHMsXG4gICAgICAgIClcbiAgICAgICAgICA/ICdzZWxlY3RlZCdcbiAgICAgICAgICA6ICd1bnNlbGVjdGVkJztcbiAgICAgIH0sXG4gICAgICBzZW5kUmVtb3ZlRXZlbnQoc2VsZWN0ZWRBdHRyaWJ1dGUsIHNlbGVjdGVkQXR0cmlidXRlR3JvdXApIHtcbiAgICAgICAgdGhpcy4kZW1pdCgncmVtb3ZlU2VsZWN0ZWQnLCB7XG4gICAgICAgICAgc2VsZWN0ZWRBdHRyaWJ1dGUsXG4gICAgICAgICAgc2VsZWN0ZWRBdHRyaWJ1dGVHcm91cCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlU2VhcmNoYWJsZUF0dHJpYnV0ZXMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVDaGVja2JveGVzKHNlbGVjdGVkQXR0cmlidXRlR3JvdXApO1xuICAgICAgfSxcbiAgICAgIHNlbmRDaGFuZ2VFdmVudChzZWxlY3RlZEF0dHJpYnV0ZSwgYXR0cmlidXRlR3JvdXApIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlU2VsZWN0ZWQnLCB7c2VsZWN0ZWRBdHRyaWJ1dGUsIGF0dHJpYnV0ZUdyb3VwfSk7XG4gICAgICAgIHRoaXMudXBkYXRlU2VhcmNoYWJsZUF0dHJpYnV0ZXMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVDaGVja2JveGVzKGF0dHJpYnV0ZUdyb3VwKTtcbiAgICAgIH0sXG4gICAgICBzZW5kQWRkRXZlbnQoc2VsZWN0ZWRBdHRyaWJ1dGUsIGF0dHJpYnV0ZUdyb3VwKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2FkZFNlbGVjdGVkJywge3NlbGVjdGVkQXR0cmlidXRlLCBhdHRyaWJ1dGVHcm91cH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZVNlYXJjaGFibGVBdHRyaWJ1dGVzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2hlY2tib3hlcyhhdHRyaWJ1dGVHcm91cCk7XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBVcGRhdGUgQmxvb2Rob3VuZCBlbmdpbmUgc28gdGhhdCBpdCBkb2VzIG5vdCBpbmNsdWRlIGFscmVhZHkgc2VsZWN0ZWQgYXR0cmlidXRlc1xuICAgICAgICovXG4gICAgICB1cGRhdGVTZWFyY2hhYmxlQXR0cmlidXRlcygpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoYWJsZUF0dHJpYnV0ZXMgPSB0aGlzLmdldFNlYXJjaGFibGVBdHRyaWJ1dGVzKCk7XG4gICAgICAgIHRoaXMuc2VhcmNoU291cmNlLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc2VhcmNoU291cmNlLmFkZChzZWFyY2hhYmxlQXR0cmlidXRlcyk7XG4gICAgICB9LFxuICAgICAgdG9nZ2xlQWxsKGF0dHJpYnV0ZUdyb3VwKSB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrYm94TGlzdC5pbmNsdWRlcyhhdHRyaWJ1dGVHcm91cCkpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrYm94TGlzdCA9IHRoaXMuY2hlY2tib3hMaXN0LmZpbHRlcihcbiAgICAgICAgICAgIChlKSA9PiBlLmlkICE9PSBhdHRyaWJ1dGVHcm91cC5pZCxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hlY2tib3hMaXN0LnB1c2goYXR0cmlidXRlR3JvdXApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kZW1pdCgndG9nZ2xlQWxsJywge1xuICAgICAgICAgIGF0dHJpYnV0ZUdyb3VwLFxuICAgICAgICAgIHNlbGVjdDogdGhpcy5jaGVja2JveExpc3QuaW5jbHVkZXMoYXR0cmlidXRlR3JvdXApLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGVDaGVja2JveGVzKGF0dHJpYnV0ZUdyb3VwKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQXR0cmlidXRlR3JvdXBzW2F0dHJpYnV0ZUdyb3VwLmlkXVxuICAgICAgICAgICYmICF0aGlzLmNoZWNrYm94TGlzdC5pbmNsdWRlcyhhdHRyaWJ1dGVHcm91cClcbiAgICAgICAgICAmJiB0aGlzLnNlbGVjdGVkQXR0cmlidXRlR3JvdXBzW2F0dHJpYnV0ZUdyb3VwLmlkXS5hdHRyaWJ1dGVzLmxlbmd0aFxuICAgICAgICAgICAgPT09IGF0dHJpYnV0ZUdyb3VwLmF0dHJpYnV0ZXMubGVuZ3RoXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuY2hlY2tib3hMaXN0LnB1c2goYXR0cmlidXRlR3JvdXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hlY2tib3hMaXN0ID0gdGhpcy5jaGVja2JveExpc3QuZmlsdGVyKFxuICAgICAgICAgICAgKGdyb3VwKSA9PiBncm91cC5pZCAhPT0gYXR0cmlidXRlR3JvdXAuaWQsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHR5cGU9XCJ0ZXh0L3Njc3NcIj5cbkBpbXBvcnQgJ35Ac2Nzcy9jb25maWcvX3NldHRpbmdzLnNjc3MnO1xuXG4jcHJvZHVjdC1jb21iaW5hdGlvbnMtZ2VuZXJhdGUge1xuICAubW9kYWwge1xuICAgIC50YWdzLWlucHV0IHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG5cbiAgICAgIC50YWcge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjI1cmVtO1xuICAgICAgfVxuICAgIH1cblxuICAgICNhdHRyaWJ1dGVzLWxpc3Qtc2VsZWN0b3Ige1xuICAgICAgbWF4LWhlaWdodDogNTB2aDtcblxuICAgICAgLmF0dHJpYnV0ZS1ncm91cCB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC43NXJlbTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJGdyYXktMzAwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG5cbiAgICAgICAgJi1oZWFkZXIge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGdyYXktMjUwO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1jb250ZW50IHtcbiAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJGdyYXktMzAwO1xuICAgICAgICB9XG5cbiAgICAgICAgJi1jaGVja2JveCB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogMC41cmVtO1xuICAgICAgICAgIGxlZnQ6IDAuNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgICYtbmFtZSB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgcGFkZGluZzogMC40Mzc1cmVtIDAuNDM3NXJlbSAwLjQzNzVyZW0gMi41cmVtO1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgICAgY29sb3I6ICMzNjNhNDE7XG5cbiAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuYXR0cmlidXRlLWl0ZW0ge1xuICAgICAgICAgIG1hcmdpbjogMC4yNXJlbTtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuXG4gICAgICAgICAgJi1jb250ZW50IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgcGFkZGluZzogMC41cmVtO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICYuc2VsZWN0ZWQge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGdyYXktZGlzYWJsZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5wdXQge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmLWNvbG9yIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgd2lkdGg6IDE1cHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDE1cHg7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDAuNXJlbTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmF0dHJpYnV0ZXMge1xuICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgIHBhZGRpbmc6IDAuNDM3NXJlbTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAucHJvZHVjdC1jb21iaW5hdGlvbnMtbW9kYWwtY29udGVudCB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMC41cmVtO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjwhLS0qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi0tPlxuPHRlbXBsYXRlPlxuICA8ZGl2IGlkPVwicHJvZHVjdC1jb21iaW5hdGlvbnMtZ2VuZXJhdGVcIj5cbiAgICA8bW9kYWxcbiAgICAgIHYtaWY9XCJpc01vZGFsU2hvd25cIlxuICAgICAgOm1vZGFsLXRpdGxlPVwiJHQoJ21vZGFsLnRpdGxlJylcIlxuICAgICAgOmNvbmZpcm1hdGlvbj1cInRydWVcIlxuICAgICAgQGNsb3NlPVwiY2xvc2VNb2RhbFwiXG4gICAgPlxuICAgICAgPHRlbXBsYXRlICNib2R5PlxuICAgICAgICA8YXR0cmlidXRlcy1zZWxlY3RvclxuICAgICAgICAgIDphdHRyaWJ1dGUtZ3JvdXBzPVwiYXR0cmlidXRlR3JvdXBzXCJcbiAgICAgICAgICA6c2VsZWN0ZWQtYXR0cmlidXRlLWdyb3Vwcz1cInNlbGVjdGVkQXR0cmlidXRlR3JvdXBzXCJcbiAgICAgICAgICBAY2hhbmdlU2VsZWN0ZWQ9XCJjaGFuZ2VTZWxlY3RlZFwiXG4gICAgICAgICAgQHJlbW92ZVNlbGVjdGVkPVwicmVtb3ZlU2VsZWN0ZWRcIlxuICAgICAgICAgIEBhZGRTZWxlY3RlZD1cImFkZFNlbGVjdGVkXCJcbiAgICAgICAgICBAdG9nZ2xlQWxsPVwidG9nZ2xlQWxsXCJcbiAgICAgICAgICB2LWlmPVwiYXR0cmlidXRlR3JvdXBzXCJcbiAgICAgICAgLz5cbiAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgIDx0ZW1wbGF0ZSAjZm9vdGVyLWNvbmZpcm1hdGlvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiXG4gICAgICAgICAgQGNsaWNrLnByZXZlbnQuc3RvcD1cImNsb3NlTW9kYWxcIlxuICAgICAgICAgIDphcmlhLWxhYmVsPVwiJHQoJ21vZGFsLmNsb3NlJylcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgJHQoJ21vZGFsLmNsb3NlJykgfX1cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICBAY2xpY2sucHJldmVudC5zdG9wPVwiZ2VuZXJhdGVDb21iaW5hdGlvbnNcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cIiFnZW5lcmF0ZWRDb21iaW5hdGlvbnNOYiB8fCBsb2FkaW5nXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIHYtaWY9XCIhbG9hZGluZ1wiPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgJHRjKCdnZW5lcmF0b3IuYWN0aW9uJywgZ2VuZXJhdGVkQ29tYmluYXRpb25zTmIsIHtcbiAgICAgICAgICAgICAgICAnJWNvbWJpbmF0aW9uc05iJSc6IGdlbmVyYXRlZENvbWJpbmF0aW9uc05iLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc21cIlxuICAgICAgICAgICAgdi1pZj1cImxvYWRpbmdcIlxuICAgICAgICAgICAgcm9sZT1cInN0YXR1c1wiXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC90ZW1wbGF0ZT5cbiAgICA8L21vZGFsPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCBDb21iaW5hdGlvbnNTZXJ2aWNlIGZyb20gJ0BwYWdlcy9wcm9kdWN0L3NlcnZpY2VzL2NvbWJpbmF0aW9ucy1zZXJ2aWNlJztcbiAgaW1wb3J0IEF0dHJpYnV0ZXNTZWxlY3RvciBmcm9tICdAcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2dlbmVyYXRvci9BdHRyaWJ1dGVzU2VsZWN0b3InO1xuICBpbXBvcnQgaXNTZWxlY3RlZCBmcm9tICdAcGFnZXMvcHJvZHVjdC9taXhpbnMvaXMtYXR0cmlidXRlLXNlbGVjdGVkJztcbiAgaW1wb3J0IHtnZXRBbGxBdHRyaWJ1dGVHcm91cHN9IGZyb20gJ0BwYWdlcy9wcm9kdWN0L3NlcnZpY2VzL2F0dHJpYnV0ZS1ncm91cHMnO1xuICBpbXBvcnQgTW9kYWwgZnJvbSAnQHZ1ZS9jb21wb25lbnRzL01vZGFsJztcbiAgaW1wb3J0IFByb2R1Y3RFdmVudE1hcCBmcm9tICdAcGFnZXMvcHJvZHVjdC9wcm9kdWN0LWV2ZW50LW1hcCc7XG5cbiAgY29uc3QgeyR9ID0gd2luZG93O1xuXG4gIGNvbnN0IENvbWJpbmF0aW9uRXZlbnRzID0gUHJvZHVjdEV2ZW50TWFwLmNvbWJpbmF0aW9ucztcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ0NvbWJpbmF0aW9uR2VuZXJhdG9yJyxcbiAgICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXR0cmlidXRlR3JvdXBzOiBbXSxcbiAgICAgICAgc2VsZWN0ZWRBdHRyaWJ1dGVHcm91cHM6IHt9LFxuICAgICAgICBjb21iaW5hdGlvbnNTZXJ2aWNlOiBuZXcgQ29tYmluYXRpb25zU2VydmljZSh0aGlzLnByb2R1Y3RJZCksXG4gICAgICAgIGlzTW9kYWxTaG93bjogZmFsc2UsXG4gICAgICAgIHByZUxvYWRpbmc6IHRydWUsXG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBzY3JvbGxiYXI6IG51bGwsXG4gICAgICAgIGhhc0dlbmVyYXRlZENvbWJpbmF0aW9uczogZmFsc2UsXG4gICAgICB9O1xuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgIHByb2R1Y3RJZDoge1xuICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIGV2ZW50RW1pdHRlcjoge1xuICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIG1peGluczogW2lzU2VsZWN0ZWRdLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIE1vZGFsLFxuICAgICAgQXR0cmlidXRlc1NlbGVjdG9yLFxuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGdlbmVyYXRlZENvbWJpbmF0aW9uc05iKCkge1xuICAgICAgICBjb25zdCBncm91cElkcyA9IE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGVHcm91cHMpO1xuICAgICAgICBsZXQgY29tYmluYXRpb25zTnVtYmVyID0gMDtcblxuICAgICAgICBncm91cElkcy5mb3JFYWNoKChhdHRyaWJ1dGVHcm91cElkKSA9PiB7XG4gICAgICAgICAgY29uc3Qge2F0dHJpYnV0ZXN9ID0gdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZUdyb3Vwc1thdHRyaWJ1dGVHcm91cElkXTtcblxuICAgICAgICAgIGlmICghYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBPbmx5IHN0YXJ0IGNvdW50aW5nIHdoZW4gYXQgbGVhc3Qgb25lIGF0dHJpYnV0ZSBpcyBzZWxlY3RlZFxuICAgICAgICAgIGlmIChjb21iaW5hdGlvbnNOdW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgIGNvbWJpbmF0aW9uc051bWJlciA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbWJpbmF0aW9uc051bWJlciAqPSB0aGlzLnNlbGVjdGVkQXR0cmlidXRlR3JvdXBzW2F0dHJpYnV0ZUdyb3VwSWRdXG4gICAgICAgICAgICAuYXR0cmlidXRlcy5sZW5ndGg7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjb21iaW5hdGlvbnNOdW1iZXI7XG4gICAgICB9LFxuICAgIH0sXG4gICAgbW91bnRlZCgpIHtcbiAgICAgIHRoaXMuaW5pdEF0dHJpYnV0ZUdyb3VwcygpO1xuICAgICAgdGhpcy5ldmVudEVtaXR0ZXIub24oQ29tYmluYXRpb25FdmVudHMub3BlbkNvbWJpbmF0aW9uc0dlbmVyYXRvciwgKCkgPT4gdGhpcy5zaG93TW9kYWwoKSk7XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAvKipcbiAgICAgICAqIFRoaXMgbWV0aG9kcyBpcyB1c2VkIHRvIGluaXRpYWxpemUgY29tYmluYXRpb25zIGRlZmluaXRpb25zXG4gICAgICAgKi9cbiAgICAgIGFzeW5jIGluaXRBdHRyaWJ1dGVHcm91cHMoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5hdHRyaWJ1dGVHcm91cHMgPSBhd2FpdCBnZXRBbGxBdHRyaWJ1dGVHcm91cHMoKTtcbiAgICAgICAgICB3aW5kb3cucHJlc3RhU2hvcFVpS2l0LmluaXQoKTtcbiAgICAgICAgICB0aGlzLnByZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmV2ZW50RW1pdHRlci5lbWl0KENvbWJpbmF0aW9uRXZlbnRzLmNvbWJpbmF0aW9uR2VuZXJhdG9yUmVhZHkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHdpbmRvdy4kLmdyb3dsLmVycm9yKHttZXNzYWdlOiBlcnJvcn0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBTaG93IHRoZSBtb2RhbCwgYW5kIGV4ZWN1dGUgUGVyZmVjdFNjcm9sbEJhciBhbmQgVHlwZWhlYWRcbiAgICAgICAqL1xuICAgICAgc2hvd01vZGFsKCkge1xuICAgICAgICBpZiAodGhpcy5wcmVMb2FkaW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKS5jbGFzc0xpc3QuYWRkKCdvdmVyZmxvdy1oaWRkZW4nKTtcbiAgICAgICAgdGhpcy5oYXNHZW5lcmF0ZWRDb21iaW5hdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZUdyb3VwcyA9IHt9O1xuICAgICAgICB0aGlzLmlzTW9kYWxTaG93biA9IHRydWU7XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBIYW5kbGUgbW9kYWwgY2xvc2luZ1xuICAgICAgICovXG4gICAgICBjbG9zZU1vZGFsKCkge1xuICAgICAgICB0aGlzLmlzTW9kYWxTaG93biA9IGZhbHNlO1xuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5JykuY2xhc3NMaXN0LnJlbW92ZSgnb3ZlcmZsb3ctaGlkZGVuJyk7XG4gICAgICAgIGlmICh0aGlzLmhhc0dlbmVyYXRlZENvbWJpbmF0aW9ucykge1xuICAgICAgICAgIHRoaXMuZXZlbnRFbWl0dGVyLmVtaXQoQ29tYmluYXRpb25FdmVudHMucmVmcmVzaENvbWJpbmF0aW9uTGlzdCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIFVzZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gdGhlIEdlbmVyYXRlIGJ1dHRvbiBvZiB0aGUgbW9kYWxcbiAgICAgICAqL1xuICAgICAgYXN5bmMgZ2VuZXJhdGVDb21iaW5hdGlvbnMoKSB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgYXR0cmlidXRlczoge30sXG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGVHcm91cHMpLmZvckVhY2goKGF0dHJpYnV0ZUdyb3VwSWQpID0+IHtcbiAgICAgICAgICBkYXRhLmF0dHJpYnV0ZXNbYXR0cmlidXRlR3JvdXBJZF0gPSBbXTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQXR0cmlidXRlR3JvdXBzW2F0dHJpYnV0ZUdyb3VwSWRdLmF0dHJpYnV0ZXMuZm9yRWFjaChcbiAgICAgICAgICAgIChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgICAgZGF0YS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZUdyb3VwSWRdLnB1c2goYXR0cmlidXRlLmlkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY29tYmluYXRpb25zU2VydmljZS5nZW5lcmF0ZUNvbWJpbmF0aW9ucyhcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgKTtcbiAgICAgICAgICAkLmdyb3dsKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuJHQoJ2dlbmVyYXRvci5zdWNjZXNzJywge1xuICAgICAgICAgICAgICAnJWNvbWJpbmF0aW9uc05iJSc6IHJlc3BvbnNlLmNvbWJpbmF0aW9uX2lkcy5sZW5ndGgsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQXR0cmlidXRlR3JvdXBzID0ge307XG4gICAgICAgICAgdGhpcy5oYXNHZW5lcmF0ZWRDb21iaW5hdGlvbnMgPSB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvci5yZXNwb25zZUpTT04gJiYgZXJyb3IucmVzcG9uc2VKU09OLmVycm9yKSB7XG4gICAgICAgICAgICAkLmdyb3dsLmVycm9yKHttZXNzYWdlOiBlcnJvci5yZXNwb25zZUpTT04uZXJyb3J9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJC5ncm93bC5lcnJvcih7bWVzc2FnZTogZXJyb3J9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIFJlbW92ZSB0aGUgYXR0cmlidXRlIGlmIGl0J3Mgc2VsZWN0ZWQgb3IgYWRkIGl0XG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtPYmplY3R9IHNlbGVjdGVkQXR0cmlidXRlXG4gICAgICAgKiBAcGFyYW0ge3tpZDogaW50LCBuYW1lOiBzdHJpbmd9fSBhdHRyaWJ1dGVHcm91cFxuICAgICAgICovXG4gICAgICBjaGFuZ2VTZWxlY3RlZCh7c2VsZWN0ZWRBdHRyaWJ1dGUsIGF0dHJpYnV0ZUdyb3VwfSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMuaXNTZWxlY3RlZChcbiAgICAgICAgICAgIHNlbGVjdGVkQXR0cmlidXRlLFxuICAgICAgICAgICAgYXR0cmlidXRlR3JvdXAsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQXR0cmlidXRlR3JvdXBzLFxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5hZGRTZWxlY3RlZCh7c2VsZWN0ZWRBdHRyaWJ1dGUsIGF0dHJpYnV0ZUdyb3VwfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZCh7XG4gICAgICAgICAgICBzZWxlY3RlZEF0dHJpYnV0ZSxcbiAgICAgICAgICAgIHNlbGVjdGVkQXR0cmlidXRlR3JvdXA6IGF0dHJpYnV0ZUdyb3VwLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gc2VsZWN0ZWRBdHRyaWJ1dGVcbiAgICAgICAqIEBwYXJhbSB7e2lkOiBpbnQsIG5hbWU6IHN0cmluZ319IGF0dHJpYnV0ZUdyb3VwXG4gICAgICAgKi9cbiAgICAgIGFkZFNlbGVjdGVkKHtzZWxlY3RlZEF0dHJpYnV0ZSwgYXR0cmlidXRlR3JvdXB9KSB7XG4gICAgICAgIC8vIEV4dHJhIGNoZWNrIHRvIGF2b2lkIGFkZGluZyBzYW1lIGF0dHJpYnV0ZSB0d2ljZSB3aGljaCB3b3VsZCBjYXVzZSBhIGR1cGxpY2F0ZSBrZXkgZXJyb3JcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuaXNTZWxlY3RlZChcbiAgICAgICAgICAgIHNlbGVjdGVkQXR0cmlidXRlLFxuICAgICAgICAgICAgYXR0cmlidXRlR3JvdXAsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQXR0cmlidXRlR3JvdXBzLFxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIGNvcHkgb2YgYXR0cmlidXRlIGdyb3VwIGluIHNlbGVjdGVkIGdyb3Vwc1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGVHcm91cHNbYXR0cmlidXRlR3JvdXAuaWRdKSB7XG4gICAgICAgICAgY29uc3QgbmV3QXR0cmlidXRlR3JvdXAgPSB7XG4gICAgICAgICAgICBbYXR0cmlidXRlR3JvdXAuaWRdOiB7XG4gICAgICAgICAgICAgIGlkOiBhdHRyaWJ1dGVHcm91cC5pZCxcbiAgICAgICAgICAgICAgbmFtZTogYXR0cmlidXRlR3JvdXAubmFtZSxcbiAgICAgICAgICAgICAgYXR0cmlidXRlczogW10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBjb3JyZWN0bHkgaGFuZGxlIG9ic2VydmF0aW9uXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZUdyb3VwcyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGVHcm91cHMsXG4gICAgICAgICAgICAuLi5uZXdBdHRyaWJ1dGVHcm91cCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZUdyb3Vwc1thdHRyaWJ1dGVHcm91cC5pZF0uYXR0cmlidXRlcy5wdXNoKFxuICAgICAgICAgIHNlbGVjdGVkQXR0cmlidXRlLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHtPYmplY3R9IHNlbGVjdGVkQXR0cmlidXRlXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gc2VsZWN0ZWRBdHRyaWJ1dGVHcm91cFxuICAgICAgICovXG4gICAgICByZW1vdmVTZWxlY3RlZCh7c2VsZWN0ZWRBdHRyaWJ1dGUsIHNlbGVjdGVkQXR0cmlidXRlR3JvdXB9KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZUdyb3VwcyxcbiAgICAgICAgICAgIHNlbGVjdGVkQXR0cmlidXRlR3JvdXAuaWQsXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGVHcm91cHNbc2VsZWN0ZWRBdHRyaWJ1dGVHcm91cC5pZF07XG4gICAgICAgIGdyb3VwLmF0dHJpYnV0ZXMgPSBncm91cC5hdHRyaWJ1dGVzLmZpbHRlcihcbiAgICAgICAgICAoYXR0cmlidXRlKSA9PiBhdHRyaWJ1dGUuaWQgIT09IHNlbGVjdGVkQXR0cmlidXRlLmlkLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogUmVtb3ZlIHRoZSBhdHRyaWJ1dGUgaWYgaXQncyBzZWxlY3RlZCBvciBhZGQgaXRcbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gc2VsZWN0ZWRBdHRyaWJ1dGVcbiAgICAgICAqIEBwYXJhbSB7e2lkOiBpbnQsIG5hbWU6IHN0cmluZ319IGF0dHJpYnV0ZUdyb3VwXG4gICAgICAgKi9cbiAgICAgIHRvZ2dsZUFsbCh7YXR0cmlidXRlR3JvdXAsIHNlbGVjdH0pIHtcbiAgICAgICAgaWYgKHNlbGVjdCkge1xuICAgICAgICAgIGF0dHJpYnV0ZUdyb3VwLmF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZFNlbGVjdGVkKHtzZWxlY3RlZEF0dHJpYnV0ZTogYXR0cmlidXRlLCBhdHRyaWJ1dGVHcm91cH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF0dHJpYnV0ZUdyb3VwLmF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkKHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRBdHRyaWJ1dGU6IGF0dHJpYnV0ZSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRBdHRyaWJ1dGVHcm91cDogYXR0cmlidXRlR3JvdXAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuPC9zY3JpcHQ+XG4iLCI8IS0tKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICotLT5cbjx0ZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICA8dHJhbnNpdGlvbiBuYW1lPVwiZmFkZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsIHNob3dcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWRpYWxvZy1jZW50ZXJlZFwiXG4gICAgICAgICAgcm9sZT1cImRvY3VtZW50XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibW9kYWwtY29udGVudFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJtb2RhbFRpdGxlXCJcbiAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJtb2RhbERlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgIHYtY2xpY2stb3V0c2lkZT1cImNsb3NlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aGVhZGVyXG4gICAgICAgICAgICAgIGNsYXNzPVwibW9kYWwtaGVhZGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cImhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICB7eyBtb2RhbFRpdGxlIH19XG4gICAgICAgICAgICAgICAgPC9oNT5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2xvc2VcIlxuICAgICAgICAgICAgICAgICAgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50LnN0b3A9XCJjbG9zZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+w5c8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvc2xvdD5cbiAgICAgICAgICAgIDwvaGVhZGVyPlxuICAgICAgICAgICAgPHNlY3Rpb25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtb2RhbC1ib2R5XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cImJvZHlcIiAvPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPGZvb3RlciBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICA8c2xvdFxuICAgICAgICAgICAgICAgIG5hbWU9XCJmb290ZXJcIlxuICAgICAgICAgICAgICAgIHYtaWY9XCIhY29uZmlybWF0aW9uXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50LnN0b3A9XCJjbG9zZVwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2UgbW9kYWxcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGNsb3NlTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9zbG90PlxuXG4gICAgICAgICAgICAgIDxzbG90XG4gICAgICAgICAgICAgICAgbmFtZT1cImZvb3Rlci1jb25maXJtYXRpb25cIlxuICAgICAgICAgICAgICAgIHYtaWY9XCJjb25maXJtYXRpb25cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQuc3RvcD1cImNsb3NlXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZSBtb2RhbFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgY2FuY2VsTGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQuc3RvcD1cImNvbmZpcm1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGNvbmZpcm1MYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L3Nsb3Q+XG4gICAgICAgICAgICA8L2Zvb3Rlcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzbG90IG5hbWU9XCJvdXRzaWRlXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvdHJhbnNpdGlvbj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm1vZGFsLWJhY2tkcm9wIHNob3dcIlxuICAgICAgQGNsaWNrLnByZXZlbnQuc3RvcD1cImNsb3NlXCJcbiAgICAvPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gIGltcG9ydCAnQHZ1ZS9kaXJlY3RpdmVzL2NsaWNrLW91dHNpZGUnO1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiAnTW9kYWwnLFxuICAgIHByb3BzOiB7XG4gICAgICBjb25maXJtYXRpb246IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBjYW5jZWxMYWJlbDoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy4kdCgnbW9kYWwuY2FuY2VsJyk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgY29uZmlybUxhYmVsOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLiR0KCdtb2RhbC5hcHBseScpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGNsb3NlTGFiZWw6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuJHQoJ21vZGFsLmNsb3NlJyk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgbW9kYWxUaXRsZToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2Nsb3NlJyk7XG4gICAgICB9LFxuICAgICAgY29uZmlybSgpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnY29uZmlybScpO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHNjb3BlZD5cbiAgLm1vZGFsLnNob3cge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG4gIC5tb2RhbC1mYWRlLWVudGVyLWFjdGl2ZSwgLm1vZGFsLWZhZGUtbGVhdmUtYWN0aXZlIHtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IC41cztcbiAgfVxuICAubW9kYWwtZmFkZS1lbnRlciwgLm1vZGFsLWZhZGUtbGVhdmUtdG8gLyogLmZhZGUtbGVhdmUtYWN0aXZlIGJlbG93IHZlcnNpb24gMi4xLjggKi8ge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cbjwvc3R5bGU+XG4iLCI8IS0tKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICotLT5cbjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInBhZ2luYXRpb25cIj5cbiAgICA8dWwgY2xhc3M9XCJwYWdpbmF0aW9uLWxpc3RcIj5cbiAgICAgIDxsaSBjbGFzcz1cInBhZ2luYXRpb24taXRlbSBwYWdpbmF0aW9uLXByZXZpb3VzXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBAY2xpY2s9XCJnb1RvUGFnZShjdXJyZW50UGFnZSAtIDEpXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJjdXJyZW50UGFnZSA9PT0gMVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+Y2hldnJvbl9sZWZ0PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGlcbiAgICAgICAgOmNsYXNzPVwiWydwYWdpbmF0aW9uLWl0ZW0nLCBpc0FjdGl2ZShrZXkpXVwiXG4gICAgICAgIHYtZm9yPVwiKHBhZ2UsIGtleSkgb2YgcGFnaW5hdGVkRGF0YXNcIlxuICAgICAgICA6a2V5PVwia2V5XCJcbiAgICAgID5cbiAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJnb1RvUGFnZShrZXkgKyAxKVwiPlxuICAgICAgICAgIHt7IGtleSArIDEgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2xpPlxuICAgICAgPGxpIGNsYXNzPVwicGFnaW5hdGlvbi1pdGVtIHBhZ2luYXRpb24tbmV4dFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgQGNsaWNrPVwiZ29Ub1BhZ2UoY3VycmVudFBhZ2UgKyAxKVwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiY3VycmVudFBhZ2UgPT09IHBhZ2luYXRlZERhdGFzLmxlbmd0aFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+Y2hldnJvbl9yaWdodDwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6ICdQYWdpbmF0aW9uJyxcbiAgICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFnaW5hdGVkRGF0YXM6IFtdLFxuICAgICAgICBjdXJyZW50UGFnZTogMSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgZGF0YXM6IHtcbiAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdLFxuICAgICAgfSxcbiAgICAgIHBhZ2luYXRpb25MZW5ndGg6IHtcbiAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICBkZWZhdWx0OiAxNCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAvKipcbiAgICAgICAqIFVzZWQgdG8gc3dpdGNoIHBhZ2Ugc3RhdGUgb2YgdGhlIHBhZ2luYXRpb25cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge2ludH0gcGFnZU51bWJlclxuICAgICAgICovXG4gICAgICBnb1RvUGFnZShwYWdlTnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnBhZ2luYXRlZERhdGFzW3BhZ2VOdW1iZXIgLSAxXSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlTnVtYmVyO1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ3BhZ2luYXRlZCcsIHtcbiAgICAgICAgICAgIHBhZ2luYXRlZERhdGFzOiB0aGlzLnBhZ2luYXRlZERhdGFzLFxuICAgICAgICAgICAgY3VycmVudFBhZ2U6IHRoaXMuY3VycmVudFBhZ2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvKipcbiAgICAgICAqIFNwbGl0IGl0ZW1zIGludG8gY2h1bmtzIGJhc2VkIG9uIHBhZ2luYXRpb25MZW5ndGhcbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge2FycmF5fSBuZXdEYXRhc1xuICAgICAgICovXG4gICAgICBjb25zdHJ1Y3REYXRhcyhuZXdEYXRhcykge1xuICAgICAgICB0aGlzLnBhZ2luYXRlZERhdGFzID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdEYXRhcy5sZW5ndGg7IGkgKz0gdGhpcy5wYWdpbmF0aW9uTGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5wYWdpbmF0ZWREYXRhcy5wdXNoKG5ld0RhdGFzLnNsaWNlKGksIGkgKyB0aGlzLnBhZ2luYXRpb25MZW5ndGgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJGVtaXQoJ3BhZ2luYXRlZCcsIHtcbiAgICAgICAgICBwYWdpbmF0ZWREYXRhczogdGhpcy5wYWdpbmF0ZWREYXRhcyxcbiAgICAgICAgICBjdXJyZW50UGFnZTogdGhpcy5jdXJyZW50UGFnZSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiBBdm9pZCB0b28gbXVjaCBsb2dpY3MgaW4gdGhlIHRlbXBsYXRlXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtpbnR9IGtleVxuICAgICAgICovXG4gICAgICBpc0FjdGl2ZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2UgPT09IGtleSArIDEgPyAnYWN0aXZlJyA6IG51bGw7XG4gICAgICB9LFxuICAgIH0sXG4gICAgLyoqXG4gICAgICogT24gbW91bnQsIHNwbGl0IGRhdGFzIGludG8gY2h1bmtzXG4gICAgICovXG4gICAgbW91bnRlZCgpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0RGF0YXModGhpcy5kYXRhcyk7XG4gICAgfSxcbiAgICB3YXRjaDoge1xuICAgICAgLyoqXG4gICAgICAgKiBPbiBkYXRhcyBjaGFuZ2UsIHNwbGl0IGludG8gY2h1bmtzIGFnYWluLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7YXJyYXl9IG5ld0RhdGFzXG4gICAgICAgKi9cbiAgICAgIGRhdGFzKG5ld0RhdGFzKSB7XG4gICAgICAgIHRoaXMuY29uc3RydWN0RGF0YXMobmV3RGF0YXMpO1xuICAgICAgfSxcbiAgICB9LFxuICB9O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiIHR5cGU9XCJ0ZXh0L3Njc3NcIj5cbkBpbXBvcnQgXCJ+QHNjc3MvY29uZmlnL19zZXR0aW5ncy5zY3NzXCI7XG5cbi5wYWdpbmF0aW9uIHtcbiAgJi1saXN0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgcGFkZGluZzogMDtcbiAgICBtYXJnaW46IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAmLWl0ZW0ge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcblxuICAgIGJ1dHRvbiB7XG4gICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICBwYWRkaW5nOiAwLjVyZW07XG4gICAgICB0cmFuc2l0aW9uOiAwLjI1cyBlYXNlLW91dDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGNvbG9yOiAjNmM4NjhlO1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcblxuICAgICAgJjpkaXNhYmxlZCB7XG4gICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgIH1cblxuICAgICAgJjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICAgIGNvbG9yOiAkcHJpbWFyeTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmFjdGl2ZSB7XG4gICAgICBidXR0b24ge1xuICAgICAgICBjb2xvcjogJHByaW1hcnk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJi1wcmV2aW91cyxcbiAgJi1uZXh0IHtcbiAgICBmb250LXNpemU6IDEuMjVyZW07XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vYXJyYXkvZnJvbVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvYXNzaWduXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9jcmVhdGVcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3Qva2V5c1wiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvdmFsdWVzXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2VcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9wcm9taXNlID0gcmVxdWlyZShcIi4uL2NvcmUtanMvcHJvbWlzZVwiKTtcblxudmFyIF9wcm9taXNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb21pc2UpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZ2VuID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gbmV3IF9wcm9taXNlMi5kZWZhdWx0KGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIHN0ZXAoa2V5LCBhcmcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgICAgICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gX3Byb21pc2UyLmRlZmF1bHQucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHN0ZXAoXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBzdGVwKFwidGhyb3dcIiwgZXJyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RlcChcIm5leHRcIik7XG4gICAgfSk7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7XG5cbnZhciBfZGVmaW5lUHJvcGVydHkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVmaW5lUHJvcGVydHkpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7XG5cbnZhciBfZGVmaW5lUHJvcGVydHkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVmaW5lUHJvcGVydHkpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKFwiLi4vY29yZS1qcy9vYmplY3QvYXNzaWduXCIpO1xuXG52YXIgX2Fzc2lnbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3NpZ24pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBfYXNzaWduMi5kZWZhdWx0IHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9mcm9tID0gcmVxdWlyZShcIi4uL2NvcmUtanMvYXJyYXkvZnJvbVwiKTtcblxudmFyIF9mcm9tMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Zyb20pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcnIyW2ldID0gYXJyW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBhcnIyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAoMCwgX2Zyb20yLmRlZmF1bHQpKGFycik7XG4gIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVnZW5lcmF0b3ItcnVudGltZVwiKTtcbiIsIjsoZnVuY3Rpb24gKGdsb2JhbE9iamVjdCkge1xyXG4gICd1c2Ugc3RyaWN0JztcclxuXHJcbi8qXHJcbiAqICAgICAgYmlnbnVtYmVyLmpzIHY5LjAuMVxyXG4gKiAgICAgIEEgSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBhcmJpdHJhcnktcHJlY2lzaW9uIGFyaXRobWV0aWMuXHJcbiAqICAgICAgaHR0cHM6Ly9naXRodWIuY29tL01pa2VNY2wvYmlnbnVtYmVyLmpzXHJcbiAqICAgICAgQ29weXJpZ2h0IChjKSAyMDIwIE1pY2hhZWwgTWNsYXVnaGxpbiA8TThjaDg4bEBnbWFpbC5jb20+XHJcbiAqICAgICAgTUlUIExpY2Vuc2VkLlxyXG4gKlxyXG4gKiAgICAgIEJpZ051bWJlci5wcm90b3R5cGUgbWV0aG9kcyAgICAgfCAgQmlnTnVtYmVyIG1ldGhvZHNcclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBhYnNvbHV0ZVZhbHVlICAgICAgICAgICAgYWJzICAgIHwgIGNsb25lXHJcbiAqICAgICAgY29tcGFyZWRUbyAgICAgICAgICAgICAgICAgICAgICB8ICBjb25maWcgICAgICAgICAgICAgICBzZXRcclxuICogICAgICBkZWNpbWFsUGxhY2VzICAgICAgICAgICAgZHAgICAgIHwgICAgICBERUNJTUFMX1BMQUNFU1xyXG4gKiAgICAgIGRpdmlkZWRCeSAgICAgICAgICAgICAgICBkaXYgICAgfCAgICAgIFJPVU5ESU5HX01PREVcclxuICogICAgICBkaXZpZGVkVG9JbnRlZ2VyQnkgICAgICAgaWRpdiAgIHwgICAgICBFWFBPTkVOVElBTF9BVFxyXG4gKiAgICAgIGV4cG9uZW50aWF0ZWRCeSAgICAgICAgICBwb3cgICAgfCAgICAgIFJBTkdFXHJcbiAqICAgICAgaW50ZWdlclZhbHVlICAgICAgICAgICAgICAgICAgICB8ICAgICAgQ1JZUFRPXHJcbiAqICAgICAgaXNFcXVhbFRvICAgICAgICAgICAgICAgIGVxICAgICB8ICAgICAgTU9EVUxPX01PREVcclxuICogICAgICBpc0Zpbml0ZSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICBQT1dfUFJFQ0lTSU9OXHJcbiAqICAgICAgaXNHcmVhdGVyVGhhbiAgICAgICAgICAgIGd0ICAgICB8ICAgICAgRk9STUFUXHJcbiAqICAgICAgaXNHcmVhdGVyVGhhbk9yRXF1YWxUbyAgIGd0ZSAgICB8ICAgICAgQUxQSEFCRVRcclxuICogICAgICBpc0ludGVnZXIgICAgICAgICAgICAgICAgICAgICAgIHwgIGlzQmlnTnVtYmVyXHJcbiAqICAgICAgaXNMZXNzVGhhbiAgICAgICAgICAgICAgIGx0ICAgICB8ICBtYXhpbXVtICAgICAgICAgICAgICBtYXhcclxuICogICAgICBpc0xlc3NUaGFuT3JFcXVhbFRvICAgICAgbHRlICAgIHwgIG1pbmltdW0gICAgICAgICAgICAgIG1pblxyXG4gKiAgICAgIGlzTmFOICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgcmFuZG9tXHJcbiAqICAgICAgaXNOZWdhdGl2ZSAgICAgICAgICAgICAgICAgICAgICB8ICBzdW1cclxuICogICAgICBpc1Bvc2l0aXZlICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBpc1plcm8gICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBtaW51cyAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBtb2R1bG8gICAgICAgICAgICAgICAgICAgbW9kICAgIHxcclxuICogICAgICBtdWx0aXBsaWVkQnkgICAgICAgICAgICAgdGltZXMgIHxcclxuICogICAgICBuZWdhdGVkICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBwbHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBwcmVjaXNpb24gICAgICAgICAgICAgICAgc2QgICAgIHxcclxuICogICAgICBzaGlmdGVkQnkgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICBzcXVhcmVSb290ICAgICAgICAgICAgICAgc3FydCAgIHxcclxuICogICAgICB0b0V4cG9uZW50aWFsICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b0ZpeGVkICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b0Zvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b0ZyYWN0aW9uICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b0pTT04gICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b051bWJlciAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b1ByZWNpc2lvbiAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB0b1N0cmluZyAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICogICAgICB2YWx1ZU9mICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICpcclxuICovXHJcblxyXG5cclxuICB2YXIgQmlnTnVtYmVyLFxyXG4gICAgaXNOdW1lcmljID0gL14tPyg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoPzplWystXT9cXGQrKT8kL2ksXHJcbiAgICBtYXRoY2VpbCA9IE1hdGguY2VpbCxcclxuICAgIG1hdGhmbG9vciA9IE1hdGguZmxvb3IsXHJcblxyXG4gICAgYmlnbnVtYmVyRXJyb3IgPSAnW0JpZ051bWJlciBFcnJvcl0gJyxcclxuICAgIHRvb01hbnlEaWdpdHMgPSBiaWdudW1iZXJFcnJvciArICdOdW1iZXIgcHJpbWl0aXZlIGhhcyBtb3JlIHRoYW4gMTUgc2lnbmlmaWNhbnQgZGlnaXRzOiAnLFxyXG5cclxuICAgIEJBU0UgPSAxZTE0LFxyXG4gICAgTE9HX0JBU0UgPSAxNCxcclxuICAgIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFmZmZmZmZmZmZmZmZmLCAgICAgICAgIC8vIDJeNTMgLSAxXHJcbiAgICAvLyBNQVhfSU5UMzIgPSAweDdmZmZmZmZmLCAgICAgICAgICAgICAgICAgICAvLyAyXjMxIC0gMVxyXG4gICAgUE9XU19URU4gPSBbMSwgMTAsIDEwMCwgMWUzLCAxZTQsIDFlNSwgMWU2LCAxZTcsIDFlOCwgMWU5LCAxZTEwLCAxZTExLCAxZTEyLCAxZTEzXSxcclxuICAgIFNRUlRfQkFTRSA9IDFlNyxcclxuXHJcbiAgICAvLyBFRElUQUJMRVxyXG4gICAgLy8gVGhlIGxpbWl0IG9uIHRoZSB2YWx1ZSBvZiBERUNJTUFMX1BMQUNFUywgVE9fRVhQX05FRywgVE9fRVhQX1BPUywgTUlOX0VYUCwgTUFYX0VYUCwgYW5kXHJcbiAgICAvLyB0aGUgYXJndW1lbnRzIHRvIHRvRXhwb25lbnRpYWwsIHRvRml4ZWQsIHRvRm9ybWF0LCBhbmQgdG9QcmVjaXNpb24uXHJcbiAgICBNQVggPSAxRTk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIE1BWF9JTlQzMlxyXG5cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGUgYW5kIHJldHVybiBhIEJpZ051bWJlciBjb25zdHJ1Y3Rvci5cclxuICAgKi9cclxuICBmdW5jdGlvbiBjbG9uZShjb25maWdPYmplY3QpIHtcclxuICAgIHZhciBkaXYsIGNvbnZlcnRCYXNlLCBwYXJzZU51bWVyaWMsXHJcbiAgICAgIFAgPSBCaWdOdW1iZXIucHJvdG90eXBlID0geyBjb25zdHJ1Y3RvcjogQmlnTnVtYmVyLCB0b1N0cmluZzogbnVsbCwgdmFsdWVPZjogbnVsbCB9LFxyXG4gICAgICBPTkUgPSBuZXcgQmlnTnVtYmVyKDEpLFxyXG5cclxuXHJcbiAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRURJVEFCTEUgQ09ORklHIERFRkFVTFRTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gICAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZXMgYmVsb3cgbXVzdCBiZSBpbnRlZ2VycyB3aXRoaW4gdGhlIGluY2x1c2l2ZSByYW5nZXMgc3RhdGVkLlxyXG4gICAgICAvLyBUaGUgdmFsdWVzIGNhbiBhbHNvIGJlIGNoYW5nZWQgYXQgcnVuLXRpbWUgdXNpbmcgQmlnTnVtYmVyLnNldC5cclxuXHJcbiAgICAgIC8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyBmb3Igb3BlcmF0aW9ucyBpbnZvbHZpbmcgZGl2aXNpb24uXHJcbiAgICAgIERFQ0lNQUxfUExBQ0VTID0gMjAsICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byBNQVhcclxuXHJcbiAgICAgIC8vIFRoZSByb3VuZGluZyBtb2RlIHVzZWQgd2hlbiByb3VuZGluZyB0byB0aGUgYWJvdmUgZGVjaW1hbCBwbGFjZXMsIGFuZCB3aGVuIHVzaW5nXHJcbiAgICAgIC8vIHRvRXhwb25lbnRpYWwsIHRvRml4ZWQsIHRvRm9ybWF0IGFuZCB0b1ByZWNpc2lvbiwgYW5kIHJvdW5kIChkZWZhdWx0IHZhbHVlKS5cclxuICAgICAgLy8gVVAgICAgICAgICAwIEF3YXkgZnJvbSB6ZXJvLlxyXG4gICAgICAvLyBET1dOICAgICAgIDEgVG93YXJkcyB6ZXJvLlxyXG4gICAgICAvLyBDRUlMICAgICAgIDIgVG93YXJkcyArSW5maW5pdHkuXHJcbiAgICAgIC8vIEZMT09SICAgICAgMyBUb3dhcmRzIC1JbmZpbml0eS5cclxuICAgICAgLy8gSEFMRl9VUCAgICA0IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB1cC5cclxuICAgICAgLy8gSEFMRl9ET1dOICA1IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCBkb3duLlxyXG4gICAgICAvLyBIQUxGX0VWRU4gIDYgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHRvd2FyZHMgZXZlbiBuZWlnaGJvdXIuXHJcbiAgICAgIC8vIEhBTEZfQ0VJTCAgNyBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyArSW5maW5pdHkuXHJcbiAgICAgIC8vIEhBTEZfRkxPT1IgOCBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyAtSW5maW5pdHkuXHJcbiAgICAgIFJPVU5ESU5HX01PREUgPSA0LCAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byA4XHJcblxyXG4gICAgICAvLyBFWFBPTkVOVElBTF9BVCA6IFtUT19FWFBfTkVHICwgVE9fRVhQX1BPU11cclxuXHJcbiAgICAgIC8vIFRoZSBleHBvbmVudCB2YWx1ZSBhdCBhbmQgYmVuZWF0aCB3aGljaCB0b1N0cmluZyByZXR1cm5zIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICAvLyBOdW1iZXIgdHlwZTogLTdcclxuICAgICAgVE9fRVhQX05FRyA9IC03LCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIC1NQVhcclxuXHJcbiAgICAgIC8vIFRoZSBleHBvbmVudCB2YWx1ZSBhdCBhbmQgYWJvdmUgd2hpY2ggdG9TdHJpbmcgcmV0dXJucyBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAgLy8gTnVtYmVyIHR5cGU6IDIxXHJcbiAgICAgIFRPX0VYUF9QT1MgPSAyMSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byBNQVhcclxuXHJcbiAgICAgIC8vIFJBTkdFIDogW01JTl9FWFAsIE1BWF9FWFBdXHJcblxyXG4gICAgICAvLyBUaGUgbWluaW11bSBleHBvbmVudCB2YWx1ZSwgYmVuZWF0aCB3aGljaCB1bmRlcmZsb3cgdG8gemVybyBvY2N1cnMuXHJcbiAgICAgIC8vIE51bWJlciB0eXBlOiAtMzI0ICAoNWUtMzI0KVxyXG4gICAgICBNSU5fRVhQID0gLTFlNywgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0xIHRvIC1NQVhcclxuXHJcbiAgICAgIC8vIFRoZSBtYXhpbXVtIGV4cG9uZW50IHZhbHVlLCBhYm92ZSB3aGljaCBvdmVyZmxvdyB0byBJbmZpbml0eSBvY2N1cnMuXHJcbiAgICAgIC8vIE51bWJlciB0eXBlOiAgMzA4ICAoMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgpXHJcbiAgICAgIC8vIEZvciBNQVhfRVhQID4gMWU3LCBlLmcuIG5ldyBCaWdOdW1iZXIoJzFlMTAwMDAwMDAwJykucGx1cygxKSBtYXkgYmUgc2xvdy5cclxuICAgICAgTUFYX0VYUCA9IDFlNywgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxIHRvIE1BWFxyXG5cclxuICAgICAgLy8gV2hldGhlciB0byB1c2UgY3J5cHRvZ3JhcGhpY2FsbHktc2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiwgaWYgYXZhaWxhYmxlLlxyXG4gICAgICBDUllQVE8gPSBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRydWUgb3IgZmFsc2VcclxuXHJcbiAgICAgIC8vIFRoZSBtb2R1bG8gbW9kZSB1c2VkIHdoZW4gY2FsY3VsYXRpbmcgdGhlIG1vZHVsdXM6IGEgbW9kIG4uXHJcbiAgICAgIC8vIFRoZSBxdW90aWVudCAocSA9IGEgLyBuKSBpcyBjYWxjdWxhdGVkIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyByb3VuZGluZyBtb2RlLlxyXG4gICAgICAvLyBUaGUgcmVtYWluZGVyIChyKSBpcyBjYWxjdWxhdGVkIGFzOiByID0gYSAtIG4gKiBxLlxyXG4gICAgICAvL1xyXG4gICAgICAvLyBVUCAgICAgICAgMCBUaGUgcmVtYWluZGVyIGlzIHBvc2l0aXZlIGlmIHRoZSBkaXZpZGVuZCBpcyBuZWdhdGl2ZSwgZWxzZSBpcyBuZWdhdGl2ZS5cclxuICAgICAgLy8gRE9XTiAgICAgIDEgVGhlIHJlbWFpbmRlciBoYXMgdGhlIHNhbWUgc2lnbiBhcyB0aGUgZGl2aWRlbmQuXHJcbiAgICAgIC8vICAgICAgICAgICAgIFRoaXMgbW9kdWxvIG1vZGUgaXMgY29tbW9ubHkga25vd24gYXMgJ3RydW5jYXRlZCBkaXZpc2lvbicgYW5kIGlzXHJcbiAgICAgIC8vICAgICAgICAgICAgIGVxdWl2YWxlbnQgdG8gKGEgJSBuKSBpbiBKYXZhU2NyaXB0LlxyXG4gICAgICAvLyBGTE9PUiAgICAgMyBUaGUgcmVtYWluZGVyIGhhcyB0aGUgc2FtZSBzaWduIGFzIHRoZSBkaXZpc29yIChQeXRob24gJSkuXHJcbiAgICAgIC8vIEhBTEZfRVZFTiA2IFRoaXMgbW9kdWxvIG1vZGUgaW1wbGVtZW50cyB0aGUgSUVFRSA3NTQgcmVtYWluZGVyIGZ1bmN0aW9uLlxyXG4gICAgICAvLyBFVUNMSUQgICAgOSBFdWNsaWRpYW4gZGl2aXNpb24uIHEgPSBzaWduKG4pICogZmxvb3IoYSAvIGFicyhuKSkuXHJcbiAgICAgIC8vICAgICAgICAgICAgIFRoZSByZW1haW5kZXIgaXMgYWx3YXlzIHBvc2l0aXZlLlxyXG4gICAgICAvL1xyXG4gICAgICAvLyBUaGUgdHJ1bmNhdGVkIGRpdmlzaW9uLCBmbG9vcmVkIGRpdmlzaW9uLCBFdWNsaWRpYW4gZGl2aXNpb24gYW5kIElFRUUgNzU0IHJlbWFpbmRlclxyXG4gICAgICAvLyBtb2RlcyBhcmUgY29tbW9ubHkgdXNlZCBmb3IgdGhlIG1vZHVsdXMgb3BlcmF0aW9uLlxyXG4gICAgICAvLyBBbHRob3VnaCB0aGUgb3RoZXIgcm91bmRpbmcgbW9kZXMgY2FuIGFsc28gYmUgdXNlZCwgdGhleSBtYXkgbm90IGdpdmUgdXNlZnVsIHJlc3VsdHMuXHJcbiAgICAgIE1PRFVMT19NT0RFID0gMSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byA5XHJcblxyXG4gICAgICAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHRoZSByZXN1bHQgb2YgdGhlIGV4cG9uZW50aWF0ZWRCeSBvcGVyYXRpb24uXHJcbiAgICAgIC8vIElmIFBPV19QUkVDSVNJT04gaXMgMCwgdGhlcmUgd2lsbCBiZSB1bmxpbWl0ZWQgc2lnbmlmaWNhbnQgZGlnaXRzLlxyXG4gICAgICBQT1dfUFJFQ0lTSU9OID0gMCwgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gTUFYXHJcblxyXG4gICAgICAvLyBUaGUgZm9ybWF0IHNwZWNpZmljYXRpb24gdXNlZCBieSB0aGUgQmlnTnVtYmVyLnByb3RvdHlwZS50b0Zvcm1hdCBtZXRob2QuXHJcbiAgICAgIEZPUk1BVCA9IHtcclxuICAgICAgICBwcmVmaXg6ICcnLFxyXG4gICAgICAgIGdyb3VwU2l6ZTogMyxcclxuICAgICAgICBzZWNvbmRhcnlHcm91cFNpemU6IDAsXHJcbiAgICAgICAgZ3JvdXBTZXBhcmF0b3I6ICcsJyxcclxuICAgICAgICBkZWNpbWFsU2VwYXJhdG9yOiAnLicsXHJcbiAgICAgICAgZnJhY3Rpb25Hcm91cFNpemU6IDAsXHJcbiAgICAgICAgZnJhY3Rpb25Hcm91cFNlcGFyYXRvcjogJ1xceEEwJywgICAgICAvLyBub24tYnJlYWtpbmcgc3BhY2VcclxuICAgICAgICBzdWZmaXg6ICcnXHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAvLyBUaGUgYWxwaGFiZXQgdXNlZCBmb3IgYmFzZSBjb252ZXJzaW9uLiBJdCBtdXN0IGJlIGF0IGxlYXN0IDIgY2hhcmFjdGVycyBsb25nLCB3aXRoIG5vICcrJyxcclxuICAgICAgLy8gJy0nLCAnLicsIHdoaXRlc3BhY2UsIG9yIHJlcGVhdGVkIGNoYXJhY3Rlci5cclxuICAgICAgLy8gJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJF8nXHJcbiAgICAgIEFMUEhBQkVUID0gJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic7XHJcblxyXG5cclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5cclxuICAgIC8vIENPTlNUUlVDVE9SXHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBUaGUgQmlnTnVtYmVyIGNvbnN0cnVjdG9yIGFuZCBleHBvcnRlZCBmdW5jdGlvbi5cclxuICAgICAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIGEgQmlnTnVtYmVyIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiB2IHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn0gQSBudW1lcmljIHZhbHVlLlxyXG4gICAgICogW2JdIHtudW1iZXJ9IFRoZSBiYXNlIG9mIHYuIEludGVnZXIsIDIgdG8gQUxQSEFCRVQubGVuZ3RoIGluY2x1c2l2ZS5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gQmlnTnVtYmVyKHYsIGIpIHtcclxuICAgICAgdmFyIGFscGhhYmV0LCBjLCBjYXNlQ2hhbmdlZCwgZSwgaSwgaXNOdW0sIGxlbiwgc3RyLFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgLy8gRW5hYmxlIGNvbnN0cnVjdG9yIGNhbGwgd2l0aG91dCBgbmV3YC5cclxuICAgICAgaWYgKCEoeCBpbnN0YW5jZW9mIEJpZ051bWJlcikpIHJldHVybiBuZXcgQmlnTnVtYmVyKHYsIGIpO1xyXG5cclxuICAgICAgaWYgKGIgPT0gbnVsbCkge1xyXG5cclxuICAgICAgICBpZiAodiAmJiB2Ll9pc0JpZ051bWJlciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgeC5zID0gdi5zO1xyXG5cclxuICAgICAgICAgIGlmICghdi5jIHx8IHYuZSA+IE1BWF9FWFApIHtcclxuICAgICAgICAgICAgeC5jID0geC5lID0gbnVsbDtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodi5lIDwgTUlOX0VYUCkge1xyXG4gICAgICAgICAgICB4LmMgPSBbeC5lID0gMF07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB4LmUgPSB2LmU7XHJcbiAgICAgICAgICAgIHguYyA9IHYuYy5zbGljZSgpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgoaXNOdW0gPSB0eXBlb2YgdiA9PSAnbnVtYmVyJykgJiYgdiAqIDAgPT0gMCkge1xyXG5cclxuICAgICAgICAgIC8vIFVzZSBgMSAvIG5gIHRvIGhhbmRsZSBtaW51cyB6ZXJvIGFsc28uXHJcbiAgICAgICAgICB4LnMgPSAxIC8gdiA8IDAgPyAodiA9IC12LCAtMSkgOiAxO1xyXG5cclxuICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgaW50ZWdlcnMsIHdoZXJlIG4gPCAyMTQ3NDgzNjQ4ICgyKiozMSkuXHJcbiAgICAgICAgICBpZiAodiA9PT0gfn52KSB7XHJcbiAgICAgICAgICAgIGZvciAoZSA9IDAsIGkgPSB2OyBpID49IDEwOyBpIC89IDEwLCBlKyspO1xyXG5cclxuICAgICAgICAgICAgaWYgKGUgPiBNQVhfRVhQKSB7XHJcbiAgICAgICAgICAgICAgeC5jID0geC5lID0gbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB4LmUgPSBlO1xyXG4gICAgICAgICAgICAgIHguYyA9IFt2XTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHN0ciA9IFN0cmluZyh2KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIGlmICghaXNOdW1lcmljLnRlc3Qoc3RyID0gU3RyaW5nKHYpKSkgcmV0dXJuIHBhcnNlTnVtZXJpYyh4LCBzdHIsIGlzTnVtKTtcclxuXHJcbiAgICAgICAgICB4LnMgPSBzdHIuY2hhckNvZGVBdCgwKSA9PSA0NSA/IChzdHIgPSBzdHIuc2xpY2UoMSksIC0xKSA6IDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBEZWNpbWFsIHBvaW50P1xyXG4gICAgICAgIGlmICgoZSA9IHN0ci5pbmRleE9mKCcuJykpID4gLTEpIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG5cclxuICAgICAgICAvLyBFeHBvbmVudGlhbCBmb3JtP1xyXG4gICAgICAgIGlmICgoaSA9IHN0ci5zZWFyY2goL2UvaSkpID4gMCkge1xyXG5cclxuICAgICAgICAgIC8vIERldGVybWluZSBleHBvbmVudC5cclxuICAgICAgICAgIGlmIChlIDwgMCkgZSA9IGk7XHJcbiAgICAgICAgICBlICs9ICtzdHIuc2xpY2UoaSArIDEpO1xyXG4gICAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGUgPCAwKSB7XHJcblxyXG4gICAgICAgICAgLy8gSW50ZWdlci5cclxuICAgICAgICAgIGUgPSBzdHIubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBCYXNlIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtifSdcclxuICAgICAgICBpbnRDaGVjayhiLCAyLCBBTFBIQUJFVC5sZW5ndGgsICdCYXNlJyk7XHJcblxyXG4gICAgICAgIC8vIEFsbG93IGV4cG9uZW50aWFsIG5vdGF0aW9uIHRvIGJlIHVzZWQgd2l0aCBiYXNlIDEwIGFyZ3VtZW50LCB3aGlsZVxyXG4gICAgICAgIC8vIGFsc28gcm91bmRpbmcgdG8gREVDSU1BTF9QTEFDRVMgYXMgd2l0aCBvdGhlciBiYXNlcy5cclxuICAgICAgICBpZiAoYiA9PSAxMCkge1xyXG4gICAgICAgICAgeCA9IG5ldyBCaWdOdW1iZXIodik7XHJcbiAgICAgICAgICByZXR1cm4gcm91bmQoeCwgREVDSU1BTF9QTEFDRVMgKyB4LmUgKyAxLCBST1VORElOR19NT0RFKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0ciA9IFN0cmluZyh2KTtcclxuXHJcbiAgICAgICAgaWYgKGlzTnVtID0gdHlwZW9mIHYgPT0gJ251bWJlcicpIHtcclxuXHJcbiAgICAgICAgICAvLyBBdm9pZCBwb3RlbnRpYWwgaW50ZXJwcmV0YXRpb24gb2YgSW5maW5pdHkgYW5kIE5hTiBhcyBiYXNlIDQ0KyB2YWx1ZXMuXHJcbiAgICAgICAgICBpZiAodiAqIDAgIT0gMCkgcmV0dXJuIHBhcnNlTnVtZXJpYyh4LCBzdHIsIGlzTnVtLCBiKTtcclxuXHJcbiAgICAgICAgICB4LnMgPSAxIC8gdiA8IDAgPyAoc3RyID0gc3RyLnNsaWNlKDEpLCAtMSkgOiAxO1xyXG5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBOdW1iZXIgcHJpbWl0aXZlIGhhcyBtb3JlIHRoYW4gMTUgc2lnbmlmaWNhbnQgZGlnaXRzOiB7bn0nXHJcbiAgICAgICAgICBpZiAoQmlnTnVtYmVyLkRFQlVHICYmIHN0ci5yZXBsYWNlKC9eMFxcLjAqfFxcLi8sICcnKS5sZW5ndGggPiAxNSkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgKHRvb01hbnlEaWdpdHMgKyB2KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeC5zID0gc3RyLmNoYXJDb2RlQXQoMCkgPT09IDQ1ID8gKHN0ciA9IHN0ci5zbGljZSgxKSwgLTEpIDogMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFscGhhYmV0ID0gQUxQSEFCRVQuc2xpY2UoMCwgYik7XHJcbiAgICAgICAgZSA9IGkgPSAwO1xyXG5cclxuICAgICAgICAvLyBDaGVjayB0aGF0IHN0ciBpcyBhIHZhbGlkIGJhc2UgYiBudW1iZXIuXHJcbiAgICAgICAgLy8gRG9uJ3QgdXNlIFJlZ0V4cCwgc28gYWxwaGFiZXQgY2FuIGNvbnRhaW4gc3BlY2lhbCBjaGFyYWN0ZXJzLlxyXG4gICAgICAgIGZvciAobGVuID0gc3RyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoYWxwaGFiZXQuaW5kZXhPZihjID0gc3RyLmNoYXJBdChpKSkgPCAwKSB7XHJcbiAgICAgICAgICAgIGlmIChjID09ICcuJykge1xyXG5cclxuICAgICAgICAgICAgICAvLyBJZiAnLicgaXMgbm90IHRoZSBmaXJzdCBjaGFyYWN0ZXIgYW5kIGl0IGhhcyBub3QgYmUgZm91bmQgYmVmb3JlLlxyXG4gICAgICAgICAgICAgIGlmIChpID4gZSkge1xyXG4gICAgICAgICAgICAgICAgZSA9IGxlbjtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICghY2FzZUNoYW5nZWQpIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gQWxsb3cgZS5nLiBoZXhhZGVjaW1hbCAnRkYnIGFzIHdlbGwgYXMgJ2ZmJy5cclxuICAgICAgICAgICAgICBpZiAoc3RyID09IHN0ci50b1VwcGVyQ2FzZSgpICYmIChzdHIgPSBzdHIudG9Mb3dlckNhc2UoKSkgfHxcclxuICAgICAgICAgICAgICAgICAgc3RyID09IHN0ci50b0xvd2VyQ2FzZSgpICYmIChzdHIgPSBzdHIudG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICAgIGNhc2VDaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGkgPSAtMTtcclxuICAgICAgICAgICAgICAgIGUgPSAwO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljKHgsIFN0cmluZyh2KSwgaXNOdW0sIGIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUHJldmVudCBsYXRlciBjaGVjayBmb3IgbGVuZ3RoIG9uIGNvbnZlcnRlZCBudW1iZXIuXHJcbiAgICAgICAgaXNOdW0gPSBmYWxzZTtcclxuICAgICAgICBzdHIgPSBjb252ZXJ0QmFzZShzdHIsIGIsIDEwLCB4LnMpO1xyXG5cclxuICAgICAgICAvLyBEZWNpbWFsIHBvaW50P1xyXG4gICAgICAgIGlmICgoZSA9IHN0ci5pbmRleE9mKCcuJykpID4gLTEpIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgICAgIGVsc2UgZSA9IHN0ci5sZW5ndGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIERldGVybWluZSBsZWFkaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKGkgPSAwOyBzdHIuY2hhckNvZGVBdChpKSA9PT0gNDg7IGkrKyk7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgIGZvciAobGVuID0gc3RyLmxlbmd0aDsgc3RyLmNoYXJDb2RlQXQoLS1sZW4pID09PSA0ODspO1xyXG5cclxuICAgICAgaWYgKHN0ciA9IHN0ci5zbGljZShpLCArK2xlbikpIHtcclxuICAgICAgICBsZW4gLT0gaTtcclxuXHJcbiAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE51bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6IHtufSdcclxuICAgICAgICBpZiAoaXNOdW0gJiYgQmlnTnVtYmVyLkRFQlVHICYmXHJcbiAgICAgICAgICBsZW4gPiAxNSAmJiAodiA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgdiAhPT0gbWF0aGZsb29yKHYpKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgKHRvb01hbnlEaWdpdHMgKyAoeC5zICogdikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgIC8vIE92ZXJmbG93P1xyXG4gICAgICAgIGlmICgoZSA9IGUgLSBpIC0gMSkgPiBNQVhfRVhQKSB7XHJcblxyXG4gICAgICAgICAgLy8gSW5maW5pdHkuXHJcbiAgICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBVbmRlcmZsb3c/XHJcbiAgICAgICAgfSBlbHNlIGlmIChlIDwgTUlOX0VYUCkge1xyXG5cclxuICAgICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgICB4LmMgPSBbeC5lID0gMF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICB4LmMgPSBbXTtcclxuXHJcbiAgICAgICAgICAvLyBUcmFuc2Zvcm0gYmFzZVxyXG5cclxuICAgICAgICAgIC8vIGUgaXMgdGhlIGJhc2UgMTAgZXhwb25lbnQuXHJcbiAgICAgICAgICAvLyBpIGlzIHdoZXJlIHRvIHNsaWNlIHN0ciB0byBnZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGNvZWZmaWNpZW50IGFycmF5LlxyXG4gICAgICAgICAgaSA9IChlICsgMSkgJSBMT0dfQkFTRTtcclxuICAgICAgICAgIGlmIChlIDwgMCkgaSArPSBMT0dfQkFTRTsgIC8vIGkgPCAxXHJcblxyXG4gICAgICAgICAgaWYgKGkgPCBsZW4pIHtcclxuICAgICAgICAgICAgaWYgKGkpIHguYy5wdXNoKCtzdHIuc2xpY2UoMCwgaSkpO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZW4gLT0gTE9HX0JBU0U7IGkgPCBsZW47KSB7XHJcbiAgICAgICAgICAgICAgeC5jLnB1c2goK3N0ci5zbGljZShpLCBpICs9IExPR19CQVNFKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGkgPSBMT0dfQkFTRSAtIChzdHIgPSBzdHIuc2xpY2UoaSkpLmxlbmd0aDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGkgLT0gbGVuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGZvciAoOyBpLS07IHN0ciArPSAnMCcpO1xyXG4gICAgICAgICAgeC5jLnB1c2goK3N0cik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgIHguYyA9IFt4LmUgPSAwXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBDT05TVFJVQ1RPUiBQUk9QRVJUSUVTXHJcblxyXG5cclxuICAgIEJpZ051bWJlci5jbG9uZSA9IGNsb25lO1xyXG5cclxuICAgIEJpZ051bWJlci5ST1VORF9VUCA9IDA7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfRE9XTiA9IDE7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfQ0VJTCA9IDI7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfRkxPT1IgPSAzO1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfVVAgPSA0O1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfRE9XTiA9IDU7XHJcbiAgICBCaWdOdW1iZXIuUk9VTkRfSEFMRl9FVkVOID0gNjtcclxuICAgIEJpZ051bWJlci5ST1VORF9IQUxGX0NFSUwgPSA3O1xyXG4gICAgQmlnTnVtYmVyLlJPVU5EX0hBTEZfRkxPT1IgPSA4O1xyXG4gICAgQmlnTnVtYmVyLkVVQ0xJRCA9IDk7XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBDb25maWd1cmUgaW5mcmVxdWVudGx5LWNoYW5naW5nIGxpYnJhcnktd2lkZSBzZXR0aW5ncy5cclxuICAgICAqXHJcbiAgICAgKiBBY2NlcHQgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb25hbCBwcm9wZXJ0aWVzIChpZiB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBpc1xyXG4gICAgICogYSBudW1iZXIsIGl0IG11c3QgYmUgYW4gaW50ZWdlciB3aXRoaW4gdGhlIGluY2x1c2l2ZSByYW5nZSBzdGF0ZWQpOlxyXG4gICAgICpcclxuICAgICAqICAgREVDSU1BTF9QTEFDRVMgICB7bnVtYmVyfSAgICAgICAgICAgMCB0byBNQVhcclxuICAgICAqICAgUk9VTkRJTkdfTU9ERSAgICB7bnVtYmVyfSAgICAgICAgICAgMCB0byA4XHJcbiAgICAgKiAgIEVYUE9ORU5USUFMX0FUICAge251bWJlcnxudW1iZXJbXX0gIC1NQVggdG8gTUFYICBvciAgWy1NQVggdG8gMCwgMCB0byBNQVhdXHJcbiAgICAgKiAgIFJBTkdFICAgICAgICAgICAge251bWJlcnxudW1iZXJbXX0gIC1NQVggdG8gTUFYIChub3QgemVybykgIG9yICBbLU1BWCB0byAtMSwgMSB0byBNQVhdXHJcbiAgICAgKiAgIENSWVBUTyAgICAgICAgICAge2Jvb2xlYW59ICAgICAgICAgIHRydWUgb3IgZmFsc2VcclxuICAgICAqICAgTU9EVUxPX01PREUgICAgICB7bnVtYmVyfSAgICAgICAgICAgMCB0byA5XHJcbiAgICAgKiAgIFBPV19QUkVDSVNJT04gICAgICAge251bWJlcn0gICAgICAgICAgIDAgdG8gTUFYXHJcbiAgICAgKiAgIEFMUEhBQkVUICAgICAgICAge3N0cmluZ30gICAgICAgICAgIEEgc3RyaW5nIG9mIHR3byBvciBtb3JlIHVuaXF1ZSBjaGFyYWN0ZXJzIHdoaWNoIGRvZXNcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGNvbnRhaW4gJy4nLlxyXG4gICAgICogICBGT1JNQVQgICAgICAgICAgIHtvYmplY3R9ICAgICAgICAgICBBbiBvYmplY3Qgd2l0aCBzb21lIG9mIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcclxuICAgICAqICAgICBwcmVmaXggICAgICAgICAgICAgICAgIHtzdHJpbmd9XHJcbiAgICAgKiAgICAgZ3JvdXBTaXplICAgICAgICAgICAgICB7bnVtYmVyfVxyXG4gICAgICogICAgIHNlY29uZGFyeUdyb3VwU2l6ZSAgICAge251bWJlcn1cclxuICAgICAqICAgICBncm91cFNlcGFyYXRvciAgICAgICAgIHtzdHJpbmd9XHJcbiAgICAgKiAgICAgZGVjaW1hbFNlcGFyYXRvciAgICAgICB7c3RyaW5nfVxyXG4gICAgICogICAgIGZyYWN0aW9uR3JvdXBTaXplICAgICAge251bWJlcn1cclxuICAgICAqICAgICBmcmFjdGlvbkdyb3VwU2VwYXJhdG9yIHtzdHJpbmd9XHJcbiAgICAgKiAgICAgc3VmZml4ICAgICAgICAgICAgICAgICB7c3RyaW5nfVxyXG4gICAgICpcclxuICAgICAqIChUaGUgdmFsdWVzIGFzc2lnbmVkIHRvIHRoZSBhYm92ZSBGT1JNQVQgb2JqZWN0IHByb3BlcnRpZXMgYXJlIG5vdCBjaGVja2VkIGZvciB2YWxpZGl0eS4pXHJcbiAgICAgKlxyXG4gICAgICogRS5nLlxyXG4gICAgICogQmlnTnVtYmVyLmNvbmZpZyh7IERFQ0lNQUxfUExBQ0VTIDogMjAsIFJPVU5ESU5HX01PREUgOiA0IH0pXHJcbiAgICAgKlxyXG4gICAgICogSWdub3JlIHByb3BlcnRpZXMvcGFyYW1ldGVycyBzZXQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGV4Y2VwdCBmb3IgQUxQSEFCRVQuXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGFuIG9iamVjdCB3aXRoIHRoZSBwcm9wZXJ0aWVzIGN1cnJlbnQgdmFsdWVzLlxyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIuY29uZmlnID0gQmlnTnVtYmVyLnNldCA9IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgdmFyIHAsIHY7XHJcblxyXG4gICAgICBpZiAob2JqICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvYmogPT0gJ29iamVjdCcpIHtcclxuXHJcbiAgICAgICAgICAvLyBERUNJTUFMX1BMQUNFUyB7bnVtYmVyfSBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gREVDSU1BTF9QTEFDRVMge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ0RFQ0lNQUxfUExBQ0VTJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaW50Q2hlY2sodiwgMCwgTUFYLCBwKTtcclxuICAgICAgICAgICAgREVDSU1BTF9QTEFDRVMgPSB2O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJPVU5ESU5HX01PREUge251bWJlcn0gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBST1VORElOR19NT0RFIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdST1VORElOR19NT0RFJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaW50Q2hlY2sodiwgMCwgOCwgcCk7XHJcbiAgICAgICAgICAgIFJPVU5ESU5HX01PREUgPSB2O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIEVYUE9ORU5USUFMX0FUIHtudW1iZXJ8bnVtYmVyW119XHJcbiAgICAgICAgICAvLyBJbnRlZ2VyLCAtTUFYIHRvIE1BWCBpbmNsdXNpdmUgb3JcclxuICAgICAgICAgIC8vIFtpbnRlZ2VyIC1NQVggdG8gMCBpbmNsdXNpdmUsIDAgdG8gTUFYIGluY2x1c2l2ZV0uXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gRVhQT05FTlRJQUxfQVQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3Z9J1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ0VYUE9ORU5USUFMX0FUJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaWYgKHYgJiYgdi5wb3ApIHtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2WzBdLCAtTUFYLCAwLCBwKTtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2WzFdLCAwLCBNQVgsIHApO1xyXG4gICAgICAgICAgICAgIFRPX0VYUF9ORUcgPSB2WzBdO1xyXG4gICAgICAgICAgICAgIFRPX0VYUF9QT1MgPSB2WzFdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHYsIC1NQVgsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgICAgVE9fRVhQX05FRyA9IC0oVE9fRVhQX1BPUyA9IHYgPCAwID8gLXYgOiB2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJBTkdFIHtudW1iZXJ8bnVtYmVyW119IE5vbi16ZXJvIGludGVnZXIsIC1NQVggdG8gTUFYIGluY2x1c2l2ZSBvclxyXG4gICAgICAgICAgLy8gW2ludGVnZXIgLU1BWCB0byAtMSBpbmNsdXNpdmUsIGludGVnZXIgMSB0byBNQVggaW5jbHVzaXZlXS5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBSQU5HRSB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V8Y2Fubm90IGJlIHplcm99OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnUkFOR0UnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG4gICAgICAgICAgICBpZiAodiAmJiB2LnBvcCkge1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHZbMF0sIC1NQVgsIC0xLCBwKTtcclxuICAgICAgICAgICAgICBpbnRDaGVjayh2WzFdLCAxLCBNQVgsIHApO1xyXG4gICAgICAgICAgICAgIE1JTl9FWFAgPSB2WzBdO1xyXG4gICAgICAgICAgICAgIE1BWF9FWFAgPSB2WzFdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGludENoZWNrKHYsIC1NQVgsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgICAgICAgIE1JTl9FWFAgPSAtKE1BWF9FWFAgPSB2IDwgMCA/IC12IDogdik7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgcCArICcgY2Fubm90IGJlIHplcm86ICcgKyB2KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBDUllQVE8ge2Jvb2xlYW59IHRydWUgb3IgZmFsc2UuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gQ1JZUFRPIG5vdCB0cnVlIG9yIGZhbHNlOiB7dn0nXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gY3J5cHRvIHVuYXZhaWxhYmxlJ1xyXG4gICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwID0gJ0NSWVBUTycpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGlmICh2ID09PSAhIXYpIHtcclxuICAgICAgICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjcnlwdG8gIT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvICYmXHJcbiAgICAgICAgICAgICAgICAgKGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgfHwgY3J5cHRvLnJhbmRvbUJ5dGVzKSkge1xyXG4gICAgICAgICAgICAgICAgICBDUllQVE8gPSB2O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgQ1JZUFRPID0gIXY7XHJcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnY3J5cHRvIHVuYXZhaWxhYmxlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIENSWVBUTyA9IHY7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArIHAgKyAnIG5vdCB0cnVlIG9yIGZhbHNlOiAnICsgdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBNT0RVTE9fTU9ERSB7bnVtYmVyfSBJbnRlZ2VyLCAwIHRvIDkgaW5jbHVzaXZlLlxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIE1PRFVMT19NT0RFIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHt2fSdcclxuICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocCA9ICdNT0RVTE9fTU9ERScpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGludENoZWNrKHYsIDAsIDksIHApO1xyXG4gICAgICAgICAgICBNT0RVTE9fTU9ERSA9IHY7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gUE9XX1BSRUNJU0lPTiB7bnVtYmVyfSBJbnRlZ2VyLCAwIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgICAgICAvLyAnW0JpZ051bWJlciBFcnJvcl0gUE9XX1BSRUNJU0lPTiB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnUE9XX1BSRUNJU0lPTicpKSB7XHJcbiAgICAgICAgICAgIHYgPSBvYmpbcF07XHJcbiAgICAgICAgICAgIGludENoZWNrKHYsIDAsIE1BWCwgcCk7XHJcbiAgICAgICAgICAgIFBPV19QUkVDSVNJT04gPSB2O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIEZPUk1BVCB7b2JqZWN0fVxyXG4gICAgICAgICAgLy8gJ1tCaWdOdW1iZXIgRXJyb3JdIEZPUk1BVCBub3QgYW4gb2JqZWN0OiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnRk9STUFUJykpIHtcclxuICAgICAgICAgICAgdiA9IG9ialtwXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09ICdvYmplY3QnKSBGT1JNQVQgPSB2O1xyXG4gICAgICAgICAgICBlbHNlIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyBwICsgJyBub3QgYW4gb2JqZWN0OiAnICsgdik7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gQUxQSEFCRVQge3N0cmluZ31cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBBTFBIQUJFVCBpbnZhbGlkOiB7dn0nXHJcbiAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHAgPSAnQUxQSEFCRVQnKSkge1xyXG4gICAgICAgICAgICB2ID0gb2JqW3BdO1xyXG5cclxuICAgICAgICAgICAgLy8gRGlzYWxsb3cgaWYgbGVzcyB0aGFuIHR3byBjaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICAvLyBvciBpZiBpdCBjb250YWlucyAnKycsICctJywgJy4nLCB3aGl0ZXNwYWNlLCBvciBhIHJlcGVhdGVkIGNoYXJhY3Rlci5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09ICdzdHJpbmcnICYmICEvXi4/JHxbK1xcLS5cXHNdfCguKS4qXFwxLy50ZXN0KHYpKSB7XHJcbiAgICAgICAgICAgICAgQUxQSEFCRVQgPSB2O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgICAgIChiaWdudW1iZXJFcnJvciArIHAgKyAnIGludmFsaWQ6ICcgKyB2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBPYmplY3QgZXhwZWN0ZWQ6IHt2fSdcclxuICAgICAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ09iamVjdCBleHBlY3RlZDogJyArIG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIERFQ0lNQUxfUExBQ0VTOiBERUNJTUFMX1BMQUNFUyxcclxuICAgICAgICBST1VORElOR19NT0RFOiBST1VORElOR19NT0RFLFxyXG4gICAgICAgIEVYUE9ORU5USUFMX0FUOiBbVE9fRVhQX05FRywgVE9fRVhQX1BPU10sXHJcbiAgICAgICAgUkFOR0U6IFtNSU5fRVhQLCBNQVhfRVhQXSxcclxuICAgICAgICBDUllQVE86IENSWVBUTyxcclxuICAgICAgICBNT0RVTE9fTU9ERTogTU9EVUxPX01PREUsXHJcbiAgICAgICAgUE9XX1BSRUNJU0lPTjogUE9XX1BSRUNJU0lPTixcclxuICAgICAgICBGT1JNQVQ6IEZPUk1BVCxcclxuICAgICAgICBBTFBIQUJFVDogQUxQSEFCRVRcclxuICAgICAgfTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB2IGlzIGEgQmlnTnVtYmVyIGluc3RhbmNlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICpcclxuICAgICAqIElmIEJpZ051bWJlci5ERUJVRyBpcyB0cnVlLCB0aHJvdyBpZiBhIEJpZ051bWJlciBpbnN0YW5jZSBpcyBub3Qgd2VsbC1mb3JtZWQuXHJcbiAgICAgKlxyXG4gICAgICogdiB7YW55fVxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBJbnZhbGlkIEJpZ051bWJlcjoge3Z9J1xyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIuaXNCaWdOdW1iZXIgPSBmdW5jdGlvbiAodikge1xyXG4gICAgICBpZiAoIXYgfHwgdi5faXNCaWdOdW1iZXIgIT09IHRydWUpIHJldHVybiBmYWxzZTtcclxuICAgICAgaWYgKCFCaWdOdW1iZXIuREVCVUcpIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgdmFyIGksIG4sXHJcbiAgICAgICAgYyA9IHYuYyxcclxuICAgICAgICBlID0gdi5lLFxyXG4gICAgICAgIHMgPSB2LnM7XHJcblxyXG4gICAgICBvdXQ6IGlmICh7fS50b1N0cmluZy5jYWxsKGMpID09ICdbb2JqZWN0IEFycmF5XScpIHtcclxuXHJcbiAgICAgICAgaWYgKChzID09PSAxIHx8IHMgPT09IC0xKSAmJiBlID49IC1NQVggJiYgZSA8PSBNQVggJiYgZSA9PT0gbWF0aGZsb29yKGUpKSB7XHJcblxyXG4gICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGVsZW1lbnQgaXMgemVybywgdGhlIEJpZ051bWJlciB2YWx1ZSBtdXN0IGJlIHplcm8uXHJcbiAgICAgICAgICBpZiAoY1swXSA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoZSA9PT0gMCAmJiBjLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrIG91dDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBDYWxjdWxhdGUgbnVtYmVyIG9mIGRpZ2l0cyB0aGF0IGNbMF0gc2hvdWxkIGhhdmUsIGJhc2VkIG9uIHRoZSBleHBvbmVudC5cclxuICAgICAgICAgIGkgPSAoZSArIDEpICUgTE9HX0JBU0U7XHJcbiAgICAgICAgICBpZiAoaSA8IDEpIGkgKz0gTE9HX0JBU0U7XHJcblxyXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIG51bWJlciBvZiBkaWdpdHMgb2YgY1swXS5cclxuICAgICAgICAgIC8vaWYgKE1hdGguY2VpbChNYXRoLmxvZyhjWzBdICsgMSkgLyBNYXRoLkxOMTApID09IGkpIHtcclxuICAgICAgICAgIGlmIChTdHJpbmcoY1swXSkubGVuZ3RoID09IGkpIHtcclxuXHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgbiA9IGNbaV07XHJcbiAgICAgICAgICAgICAgaWYgKG4gPCAwIHx8IG4gPj0gQkFTRSB8fCBuICE9PSBtYXRoZmxvb3IobikpIGJyZWFrIG91dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gTGFzdCBlbGVtZW50IGNhbm5vdCBiZSB6ZXJvLCB1bmxlc3MgaXQgaXMgdGhlIG9ubHkgZWxlbWVudC5cclxuICAgICAgICAgICAgaWYgKG4gIT09IDApIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIC8vIEluZmluaXR5L05hTlxyXG4gICAgICB9IGVsc2UgaWYgKGMgPT09IG51bGwgJiYgZSA9PT0gbnVsbCAmJiAocyA9PT0gbnVsbCB8fCBzID09PSAxIHx8IHMgPT09IC0xKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgIChiaWdudW1iZXJFcnJvciArICdJbnZhbGlkIEJpZ051bWJlcjogJyArIHYpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIG1heGltdW0gb2YgdGhlIGFyZ3VtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIubWF4aW11bSA9IEJpZ051bWJlci5tYXggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiBtYXhPck1pbihhcmd1bWVudHMsIFAubHQpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIG1pbmltdW0gb2YgdGhlIGFyZ3VtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBCaWdOdW1iZXIubWluaW11bSA9IEJpZ051bWJlci5taW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiBtYXhPck1pbihhcmd1bWVudHMsIFAuZ3QpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2l0aCBhIHJhbmRvbSB2YWx1ZSBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gMCBhbmQgbGVzcyB0aGFuIDEsXHJcbiAgICAgKiBhbmQgd2l0aCBkcCwgb3IgREVDSU1BTF9QTEFDRVMgaWYgZHAgaXMgb21pdHRlZCwgZGVjaW1hbCBwbGFjZXMgKG9yIGxlc3MgaWYgdHJhaWxpbmdcclxuICAgICAqIHplcm9zIGFyZSBwcm9kdWNlZCkuXHJcbiAgICAgKlxyXG4gICAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB9J1xyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIGNyeXB0byB1bmF2YWlsYWJsZSdcclxuICAgICAqL1xyXG4gICAgQmlnTnVtYmVyLnJhbmRvbSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBwb3cyXzUzID0gMHgyMDAwMDAwMDAwMDAwMDtcclxuXHJcbiAgICAgIC8vIFJldHVybiBhIDUzIGJpdCBpbnRlZ2VyIG4sIHdoZXJlIDAgPD0gbiA8IDkwMDcxOTkyNTQ3NDA5OTIuXHJcbiAgICAgIC8vIENoZWNrIGlmIE1hdGgucmFuZG9tKCkgcHJvZHVjZXMgbW9yZSB0aGFuIDMyIGJpdHMgb2YgcmFuZG9tbmVzcy5cclxuICAgICAgLy8gSWYgaXQgZG9lcywgYXNzdW1lIGF0IGxlYXN0IDUzIGJpdHMgYXJlIHByb2R1Y2VkLCBvdGhlcndpc2UgYXNzdW1lIGF0IGxlYXN0IDMwIGJpdHMuXHJcbiAgICAgIC8vIDB4NDAwMDAwMDAgaXMgMl4zMCwgMHg4MDAwMDAgaXMgMl4yMywgMHgxZmZmZmYgaXMgMl4yMSAtIDEuXHJcbiAgICAgIHZhciByYW5kb201M2JpdEludCA9IChNYXRoLnJhbmRvbSgpICogcG93Ml81MykgJiAweDFmZmZmZlxyXG4gICAgICAgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBtYXRoZmxvb3IoTWF0aC5yYW5kb20oKSAqIHBvdzJfNTMpOyB9XHJcbiAgICAgICA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICgoTWF0aC5yYW5kb20oKSAqIDB4NDAwMDAwMDAgfCAwKSAqIDB4ODAwMDAwKSArXHJcbiAgICAgICAgIChNYXRoLnJhbmRvbSgpICogMHg4MDAwMDAgfCAwKTsgfTtcclxuXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZHApIHtcclxuICAgICAgICB2YXIgYSwgYiwgZSwgaywgdixcclxuICAgICAgICAgIGkgPSAwLFxyXG4gICAgICAgICAgYyA9IFtdLFxyXG4gICAgICAgICAgcmFuZCA9IG5ldyBCaWdOdW1iZXIoT05FKTtcclxuXHJcbiAgICAgICAgaWYgKGRwID09IG51bGwpIGRwID0gREVDSU1BTF9QTEFDRVM7XHJcbiAgICAgICAgZWxzZSBpbnRDaGVjayhkcCwgMCwgTUFYKTtcclxuXHJcbiAgICAgICAgayA9IG1hdGhjZWlsKGRwIC8gTE9HX0JBU0UpO1xyXG5cclxuICAgICAgICBpZiAoQ1JZUFRPKSB7XHJcblxyXG4gICAgICAgICAgLy8gQnJvd3NlcnMgc3VwcG9ydGluZyBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLlxyXG4gICAgICAgICAgaWYgKGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcclxuXHJcbiAgICAgICAgICAgIGEgPSBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheShrICo9IDIpKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoOyBpIDwgazspIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gNTMgYml0czpcclxuICAgICAgICAgICAgICAvLyAoKE1hdGgucG93KDIsIDMyKSAtIDEpICogTWF0aC5wb3coMiwgMjEpKS50b1N0cmluZygyKVxyXG4gICAgICAgICAgICAgIC8vIDExMTExIDExMTExMTExIDExMTExMTExIDExMTExMTExIDExMTAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwXHJcbiAgICAgICAgICAgICAgLy8gKChNYXRoLnBvdygyLCAzMikgLSAxKSA+Pj4gMTEpLnRvU3RyaW5nKDIpXHJcbiAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTExMTEgMTExMTExMTEgMTExMTExMTFcclxuICAgICAgICAgICAgICAvLyAweDIwMDAwIGlzIDJeMjEuXHJcbiAgICAgICAgICAgICAgdiA9IGFbaV0gKiAweDIwMDAwICsgKGFbaSArIDFdID4+PiAxMSk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIFJlamVjdGlvbiBzYW1wbGluZzpcclxuICAgICAgICAgICAgICAvLyAwIDw9IHYgPCA5MDA3MTk5MjU0NzQwOTkyXHJcbiAgICAgICAgICAgICAgLy8gUHJvYmFiaWxpdHkgdGhhdCB2ID49IDllMTUsIGlzXHJcbiAgICAgICAgICAgICAgLy8gNzE5OTI1NDc0MDk5MiAvIDkwMDcxOTkyNTQ3NDA5OTIgfj0gMC4wMDA4LCBpLmUuIDEgaW4gMTI1MVxyXG4gICAgICAgICAgICAgIGlmICh2ID49IDllMTUpIHtcclxuICAgICAgICAgICAgICAgIGIgPSBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheSgyKSk7XHJcbiAgICAgICAgICAgICAgICBhW2ldID0gYlswXTtcclxuICAgICAgICAgICAgICAgIGFbaSArIDFdID0gYlsxXTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIDAgPD0gdiA8PSA4OTk5OTk5OTk5OTk5OTk5XHJcbiAgICAgICAgICAgICAgICAvLyAwIDw9ICh2ICUgMWUxNCkgPD0gOTk5OTk5OTk5OTk5OTlcclxuICAgICAgICAgICAgICAgIGMucHVzaCh2ICUgMWUxNCk7XHJcbiAgICAgICAgICAgICAgICBpICs9IDI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkgPSBrIC8gMjtcclxuXHJcbiAgICAgICAgICAvLyBOb2RlLmpzIHN1cHBvcnRpbmcgY3J5cHRvLnJhbmRvbUJ5dGVzLlxyXG4gICAgICAgICAgfSBlbHNlIGlmIChjcnlwdG8ucmFuZG9tQnl0ZXMpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGJ1ZmZlclxyXG4gICAgICAgICAgICBhID0gY3J5cHRvLnJhbmRvbUJ5dGVzKGsgKj0gNyk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKDsgaSA8IGs7KSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIDB4MTAwMDAwMDAwMDAwMCBpcyAyXjQ4LCAweDEwMDAwMDAwMDAwIGlzIDJeNDBcclxuICAgICAgICAgICAgICAvLyAweDEwMDAwMDAwMCBpcyAyXjMyLCAweDEwMDAwMDAgaXMgMl4yNFxyXG4gICAgICAgICAgICAgIC8vIDExMTExIDExMTExMTExIDExMTExMTExIDExMTExMTExIDExMTExMTExIDExMTExMTExIDExMTExMTExXHJcbiAgICAgICAgICAgICAgLy8gMCA8PSB2IDwgOTAwNzE5OTI1NDc0MDk5MlxyXG4gICAgICAgICAgICAgIHYgPSAoKGFbaV0gJiAzMSkgKiAweDEwMDAwMDAwMDAwMDApICsgKGFbaSArIDFdICogMHgxMDAwMDAwMDAwMCkgK1xyXG4gICAgICAgICAgICAgICAgIChhW2kgKyAyXSAqIDB4MTAwMDAwMDAwKSArIChhW2kgKyAzXSAqIDB4MTAwMDAwMCkgK1xyXG4gICAgICAgICAgICAgICAgIChhW2kgKyA0XSA8PCAxNikgKyAoYVtpICsgNV0gPDwgOCkgKyBhW2kgKyA2XTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHYgPj0gOWUxNSkge1xyXG4gICAgICAgICAgICAgICAgY3J5cHRvLnJhbmRvbUJ5dGVzKDcpLmNvcHkoYSwgaSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyAwIDw9ICh2ICUgMWUxNCkgPD0gOTk5OTk5OTk5OTk5OTlcclxuICAgICAgICAgICAgICAgIGMucHVzaCh2ICUgMWUxNCk7XHJcbiAgICAgICAgICAgICAgICBpICs9IDc7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkgPSBrIC8gNztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIENSWVBUTyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ2NyeXB0byB1bmF2YWlsYWJsZScpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVXNlIE1hdGgucmFuZG9tLlxyXG4gICAgICAgIGlmICghQ1JZUFRPKSB7XHJcblxyXG4gICAgICAgICAgZm9yICg7IGkgPCBrOykge1xyXG4gICAgICAgICAgICB2ID0gcmFuZG9tNTNiaXRJbnQoKTtcclxuICAgICAgICAgICAgaWYgKHYgPCA5ZTE1KSBjW2krK10gPSB2ICUgMWUxNDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGsgPSBjWy0taV07XHJcbiAgICAgICAgZHAgJT0gTE9HX0JBU0U7XHJcblxyXG4gICAgICAgIC8vIENvbnZlcnQgdHJhaWxpbmcgZGlnaXRzIHRvIHplcm9zIGFjY29yZGluZyB0byBkcC5cclxuICAgICAgICBpZiAoayAmJiBkcCkge1xyXG4gICAgICAgICAgdiA9IFBPV1NfVEVOW0xPR19CQVNFIC0gZHBdO1xyXG4gICAgICAgICAgY1tpXSA9IG1hdGhmbG9vcihrIC8gdikgKiB2O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIGVsZW1lbnRzIHdoaWNoIGFyZSB6ZXJvLlxyXG4gICAgICAgIGZvciAoOyBjW2ldID09PSAwOyBjLnBvcCgpLCBpLS0pO1xyXG5cclxuICAgICAgICAvLyBaZXJvP1xyXG4gICAgICAgIGlmIChpIDwgMCkge1xyXG4gICAgICAgICAgYyA9IFtlID0gMF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAvLyBSZW1vdmUgbGVhZGluZyBlbGVtZW50cyB3aGljaCBhcmUgemVybyBhbmQgYWRqdXN0IGV4cG9uZW50IGFjY29yZGluZ2x5LlxyXG4gICAgICAgICAgZm9yIChlID0gLTEgOyBjWzBdID09PSAwOyBjLnNwbGljZSgwLCAxKSwgZSAtPSBMT0dfQkFTRSk7XHJcblxyXG4gICAgICAgICAgLy8gQ291bnQgdGhlIGRpZ2l0cyBvZiB0aGUgZmlyc3QgZWxlbWVudCBvZiBjIHRvIGRldGVybWluZSBsZWFkaW5nIHplcm9zLCBhbmQuLi5cclxuICAgICAgICAgIGZvciAoaSA9IDEsIHYgPSBjWzBdOyB2ID49IDEwOyB2IC89IDEwLCBpKyspO1xyXG5cclxuICAgICAgICAgIC8vIGFkanVzdCB0aGUgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICAgICAgICBpZiAoaSA8IExPR19CQVNFKSBlIC09IExPR19CQVNFIC0gaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJhbmQuZSA9IGU7XHJcbiAgICAgICAgcmFuZC5jID0gYztcclxuICAgICAgICByZXR1cm4gcmFuZDtcclxuICAgICAgfTtcclxuICAgIH0pKCk7XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHN1bSBvZiB0aGUgYXJndW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xCaWdOdW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIEJpZ051bWJlci5zdW0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBpID0gMSxcclxuICAgICAgICBhcmdzID0gYXJndW1lbnRzLFxyXG4gICAgICAgIHN1bSA9IG5ldyBCaWdOdW1iZXIoYXJnc1swXSk7XHJcbiAgICAgIGZvciAoOyBpIDwgYXJncy5sZW5ndGg7KSBzdW0gPSBzdW0ucGx1cyhhcmdzW2krK10pO1xyXG4gICAgICByZXR1cm4gc3VtO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLy8gUFJJVkFURSBGVU5DVElPTlNcclxuXHJcblxyXG4gICAgLy8gQ2FsbGVkIGJ5IEJpZ051bWJlciBhbmQgQmlnTnVtYmVyLnByb3RvdHlwZS50b1N0cmluZy5cclxuICAgIGNvbnZlcnRCYXNlID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyIGRlY2ltYWwgPSAnMDEyMzQ1Njc4OSc7XHJcblxyXG4gICAgICAvKlxyXG4gICAgICAgKiBDb252ZXJ0IHN0cmluZyBvZiBiYXNlSW4gdG8gYW4gYXJyYXkgb2YgbnVtYmVycyBvZiBiYXNlT3V0LlxyXG4gICAgICAgKiBFZy4gdG9CYXNlT3V0KCcyNTUnLCAxMCwgMTYpIHJldHVybnMgWzE1LCAxNV0uXHJcbiAgICAgICAqIEVnLiB0b0Jhc2VPdXQoJ2ZmJywgMTYsIDEwKSByZXR1cm5zIFsyLCA1LCA1XS5cclxuICAgICAgICovXHJcbiAgICAgIGZ1bmN0aW9uIHRvQmFzZU91dChzdHIsIGJhc2VJbiwgYmFzZU91dCwgYWxwaGFiZXQpIHtcclxuICAgICAgICB2YXIgaixcclxuICAgICAgICAgIGFyciA9IFswXSxcclxuICAgICAgICAgIGFyckwsXHJcbiAgICAgICAgICBpID0gMCxcclxuICAgICAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAoOyBpIDwgbGVuOykge1xyXG4gICAgICAgICAgZm9yIChhcnJMID0gYXJyLmxlbmd0aDsgYXJyTC0tOyBhcnJbYXJyTF0gKj0gYmFzZUluKTtcclxuXHJcbiAgICAgICAgICBhcnJbMF0gKz0gYWxwaGFiZXQuaW5kZXhPZihzdHIuY2hhckF0KGkrKykpO1xyXG5cclxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBhcnIubGVuZ3RoOyBqKyspIHtcclxuXHJcbiAgICAgICAgICAgIGlmIChhcnJbal0gPiBiYXNlT3V0IC0gMSkge1xyXG4gICAgICAgICAgICAgIGlmIChhcnJbaiArIDFdID09IG51bGwpIGFycltqICsgMV0gPSAwO1xyXG4gICAgICAgICAgICAgIGFycltqICsgMV0gKz0gYXJyW2pdIC8gYmFzZU91dCB8IDA7XHJcbiAgICAgICAgICAgICAgYXJyW2pdICU9IGJhc2VPdXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhcnIucmV2ZXJzZSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDb252ZXJ0IGEgbnVtZXJpYyBzdHJpbmcgb2YgYmFzZUluIHRvIGEgbnVtZXJpYyBzdHJpbmcgb2YgYmFzZU91dC5cclxuICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyB0b1N0cmluZywgd2UgYXJlIGNvbnZlcnRpbmcgZnJvbSBiYXNlIDEwIHRvIGJhc2VPdXQuXHJcbiAgICAgIC8vIElmIHRoZSBjYWxsZXIgaXMgQmlnTnVtYmVyLCB3ZSBhcmUgY29udmVydGluZyBmcm9tIGJhc2VJbiB0byBiYXNlIDEwLlxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHN0ciwgYmFzZUluLCBiYXNlT3V0LCBzaWduLCBjYWxsZXJJc1RvU3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIGFscGhhYmV0LCBkLCBlLCBrLCByLCB4LCB4YywgeSxcclxuICAgICAgICAgIGkgPSBzdHIuaW5kZXhPZignLicpLFxyXG4gICAgICAgICAgZHAgPSBERUNJTUFMX1BMQUNFUyxcclxuICAgICAgICAgIHJtID0gUk9VTkRJTkdfTU9ERTtcclxuXHJcbiAgICAgICAgLy8gTm9uLWludGVnZXIuXHJcbiAgICAgICAgaWYgKGkgPj0gMCkge1xyXG4gICAgICAgICAgayA9IFBPV19QUkVDSVNJT047XHJcblxyXG4gICAgICAgICAgLy8gVW5saW1pdGVkIHByZWNpc2lvbi5cclxuICAgICAgICAgIFBPV19QUkVDSVNJT04gPSAwO1xyXG4gICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoJy4nLCAnJyk7XHJcbiAgICAgICAgICB5ID0gbmV3IEJpZ051bWJlcihiYXNlSW4pO1xyXG4gICAgICAgICAgeCA9IHkucG93KHN0ci5sZW5ndGggLSBpKTtcclxuICAgICAgICAgIFBPV19QUkVDSVNJT04gPSBrO1xyXG5cclxuICAgICAgICAgIC8vIENvbnZlcnQgc3RyIGFzIGlmIGFuIGludGVnZXIsIHRoZW4gcmVzdG9yZSB0aGUgZnJhY3Rpb24gcGFydCBieSBkaXZpZGluZyB0aGVcclxuICAgICAgICAgIC8vIHJlc3VsdCBieSBpdHMgYmFzZSByYWlzZWQgdG8gYSBwb3dlci5cclxuXHJcbiAgICAgICAgICB5LmMgPSB0b0Jhc2VPdXQodG9GaXhlZFBvaW50KGNvZWZmVG9TdHJpbmcoeC5jKSwgeC5lLCAnMCcpLFxyXG4gICAgICAgICAgIDEwLCBiYXNlT3V0LCBkZWNpbWFsKTtcclxuICAgICAgICAgIHkuZSA9IHkuYy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDb252ZXJ0IHRoZSBudW1iZXIgYXMgaW50ZWdlci5cclxuXHJcbiAgICAgICAgeGMgPSB0b0Jhc2VPdXQoc3RyLCBiYXNlSW4sIGJhc2VPdXQsIGNhbGxlcklzVG9TdHJpbmdcclxuICAgICAgICAgPyAoYWxwaGFiZXQgPSBBTFBIQUJFVCwgZGVjaW1hbClcclxuICAgICAgICAgOiAoYWxwaGFiZXQgPSBkZWNpbWFsLCBBTFBIQUJFVCkpO1xyXG5cclxuICAgICAgICAvLyB4YyBub3cgcmVwcmVzZW50cyBzdHIgYXMgYW4gaW50ZWdlciBhbmQgY29udmVydGVkIHRvIGJhc2VPdXQuIGUgaXMgdGhlIGV4cG9uZW50LlxyXG4gICAgICAgIGUgPSBrID0geGMubGVuZ3RoO1xyXG5cclxuICAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgZm9yICg7IHhjWy0ta10gPT0gMDsgeGMucG9wKCkpO1xyXG5cclxuICAgICAgICAvLyBaZXJvP1xyXG4gICAgICAgIGlmICgheGNbMF0pIHJldHVybiBhbHBoYWJldC5jaGFyQXQoMCk7XHJcblxyXG4gICAgICAgIC8vIERvZXMgc3RyIHJlcHJlc2VudCBhbiBpbnRlZ2VyPyBJZiBzbywgbm8gbmVlZCBmb3IgdGhlIGRpdmlzaW9uLlxyXG4gICAgICAgIGlmIChpIDwgMCkge1xyXG4gICAgICAgICAgLS1lO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4LmMgPSB4YztcclxuICAgICAgICAgIHguZSA9IGU7XHJcblxyXG4gICAgICAgICAgLy8gVGhlIHNpZ24gaXMgbmVlZGVkIGZvciBjb3JyZWN0IHJvdW5kaW5nLlxyXG4gICAgICAgICAgeC5zID0gc2lnbjtcclxuICAgICAgICAgIHggPSBkaXYoeCwgeSwgZHAsIHJtLCBiYXNlT3V0KTtcclxuICAgICAgICAgIHhjID0geC5jO1xyXG4gICAgICAgICAgciA9IHgucjtcclxuICAgICAgICAgIGUgPSB4LmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB4YyBub3cgcmVwcmVzZW50cyBzdHIgY29udmVydGVkIHRvIGJhc2VPdXQuXHJcblxyXG4gICAgICAgIC8vIFRIZSBpbmRleCBvZiB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgZCA9IGUgKyBkcCArIDE7XHJcblxyXG4gICAgICAgIC8vIFRoZSByb3VuZGluZyBkaWdpdDogdGhlIGRpZ2l0IHRvIHRoZSByaWdodCBvZiB0aGUgZGlnaXQgdGhhdCBtYXkgYmUgcm91bmRlZCB1cC5cclxuICAgICAgICBpID0geGNbZF07XHJcblxyXG4gICAgICAgIC8vIExvb2sgYXQgdGhlIHJvdW5kaW5nIGRpZ2l0cyBhbmQgbW9kZSB0byBkZXRlcm1pbmUgd2hldGhlciB0byByb3VuZCB1cC5cclxuXHJcbiAgICAgICAgayA9IGJhc2VPdXQgLyAyO1xyXG4gICAgICAgIHIgPSByIHx8IGQgPCAwIHx8IHhjW2QgKyAxXSAhPSBudWxsO1xyXG5cclxuICAgICAgICByID0gcm0gPCA0ID8gKGkgIT0gbnVsbCB8fCByKSAmJiAocm0gPT0gMCB8fCBybSA9PSAoeC5zIDwgMCA/IDMgOiAyKSlcclxuICAgICAgICAgICAgICA6IGkgPiBrIHx8IGkgPT0gayAmJihybSA9PSA0IHx8IHIgfHwgcm0gPT0gNiAmJiB4Y1tkIC0gMV0gJiAxIHx8XHJcbiAgICAgICAgICAgICAgIHJtID09ICh4LnMgPCAwID8gOCA6IDcpKTtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIGluZGV4IG9mIHRoZSByb3VuZGluZyBkaWdpdCBpcyBub3QgZ3JlYXRlciB0aGFuIHplcm8sIG9yIHhjIHJlcHJlc2VudHNcclxuICAgICAgICAvLyB6ZXJvLCB0aGVuIHRoZSByZXN1bHQgb2YgdGhlIGJhc2UgY29udmVyc2lvbiBpcyB6ZXJvIG9yLCBpZiByb3VuZGluZyB1cCwgYSB2YWx1ZVxyXG4gICAgICAgIC8vIHN1Y2ggYXMgMC4wMDAwMS5cclxuICAgICAgICBpZiAoZCA8IDEgfHwgIXhjWzBdKSB7XHJcblxyXG4gICAgICAgICAgLy8gMV4tZHAgb3IgMFxyXG4gICAgICAgICAgc3RyID0gciA/IHRvRml4ZWRQb2ludChhbHBoYWJldC5jaGFyQXQoMSksIC1kcCwgYWxwaGFiZXQuY2hhckF0KDApKSA6IGFscGhhYmV0LmNoYXJBdCgwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIFRydW5jYXRlIHhjIHRvIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMuXHJcbiAgICAgICAgICB4Yy5sZW5ndGggPSBkO1xyXG5cclxuICAgICAgICAgIC8vIFJvdW5kIHVwP1xyXG4gICAgICAgICAgaWYgKHIpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIFJvdW5kaW5nIHVwIG1heSBtZWFuIHRoZSBwcmV2aW91cyBkaWdpdCBoYXMgdG8gYmUgcm91bmRlZCB1cCBhbmQgc28gb24uXHJcbiAgICAgICAgICAgIGZvciAoLS1iYXNlT3V0OyArK3hjWy0tZF0gPiBiYXNlT3V0Oykge1xyXG4gICAgICAgICAgICAgIHhjW2RdID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKCFkKSB7XHJcbiAgICAgICAgICAgICAgICArK2U7XHJcbiAgICAgICAgICAgICAgICB4YyA9IFsxXS5jb25jYXQoeGMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIERldGVybWluZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgICAgIGZvciAoayA9IHhjLmxlbmd0aDsgIXhjWy0ta107KTtcclxuXHJcbiAgICAgICAgICAvLyBFLmcuIFs0LCAxMSwgMTVdIGJlY29tZXMgNGJmLlxyXG4gICAgICAgICAgZm9yIChpID0gMCwgc3RyID0gJyc7IGkgPD0gazsgc3RyICs9IGFscGhhYmV0LmNoYXJBdCh4Y1tpKytdKSk7XHJcblxyXG4gICAgICAgICAgLy8gQWRkIGxlYWRpbmcgemVyb3MsIGRlY2ltYWwgcG9pbnQgYW5kIHRyYWlsaW5nIHplcm9zIGFzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgc3RyID0gdG9GaXhlZFBvaW50KHN0ciwgZSwgYWxwaGFiZXQuY2hhckF0KDApKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRoZSBjYWxsZXIgd2lsbCBhZGQgdGhlIHNpZ24uXHJcbiAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgICAgfTtcclxuICAgIH0pKCk7XHJcblxyXG5cclxuICAgIC8vIFBlcmZvcm0gZGl2aXNpb24gaW4gdGhlIHNwZWNpZmllZCBiYXNlLiBDYWxsZWQgYnkgZGl2IGFuZCBjb252ZXJ0QmFzZS5cclxuICAgIGRpdiA9IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAvLyBBc3N1bWUgbm9uLXplcm8geCBhbmQgay5cclxuICAgICAgZnVuY3Rpb24gbXVsdGlwbHkoeCwgaywgYmFzZSkge1xyXG4gICAgICAgIHZhciBtLCB0ZW1wLCB4bG8sIHhoaSxcclxuICAgICAgICAgIGNhcnJ5ID0gMCxcclxuICAgICAgICAgIGkgPSB4Lmxlbmd0aCxcclxuICAgICAgICAgIGtsbyA9IGsgJSBTUVJUX0JBU0UsXHJcbiAgICAgICAgICBraGkgPSBrIC8gU1FSVF9CQVNFIHwgMDtcclxuXHJcbiAgICAgICAgZm9yICh4ID0geC5zbGljZSgpOyBpLS07KSB7XHJcbiAgICAgICAgICB4bG8gPSB4W2ldICUgU1FSVF9CQVNFO1xyXG4gICAgICAgICAgeGhpID0geFtpXSAvIFNRUlRfQkFTRSB8IDA7XHJcbiAgICAgICAgICBtID0ga2hpICogeGxvICsgeGhpICoga2xvO1xyXG4gICAgICAgICAgdGVtcCA9IGtsbyAqIHhsbyArICgobSAlIFNRUlRfQkFTRSkgKiBTUVJUX0JBU0UpICsgY2Fycnk7XHJcbiAgICAgICAgICBjYXJyeSA9ICh0ZW1wIC8gYmFzZSB8IDApICsgKG0gLyBTUVJUX0JBU0UgfCAwKSArIGtoaSAqIHhoaTtcclxuICAgICAgICAgIHhbaV0gPSB0ZW1wICUgYmFzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjYXJyeSkgeCA9IFtjYXJyeV0uY29uY2F0KHgpO1xyXG5cclxuICAgICAgICByZXR1cm4geDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZnVuY3Rpb24gY29tcGFyZShhLCBiLCBhTCwgYkwpIHtcclxuICAgICAgICB2YXIgaSwgY21wO1xyXG5cclxuICAgICAgICBpZiAoYUwgIT0gYkwpIHtcclxuICAgICAgICAgIGNtcCA9IGFMID4gYkwgPyAxIDogLTE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICBmb3IgKGkgPSBjbXAgPSAwOyBpIDwgYUw7IGkrKykge1xyXG5cclxuICAgICAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkge1xyXG4gICAgICAgICAgICAgIGNtcCA9IGFbaV0gPiBiW2ldID8gMSA6IC0xO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY21wO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmdW5jdGlvbiBzdWJ0cmFjdChhLCBiLCBhTCwgYmFzZSkge1xyXG4gICAgICAgIHZhciBpID0gMDtcclxuXHJcbiAgICAgICAgLy8gU3VidHJhY3QgYiBmcm9tIGEuXHJcbiAgICAgICAgZm9yICg7IGFMLS07KSB7XHJcbiAgICAgICAgICBhW2FMXSAtPSBpO1xyXG4gICAgICAgICAgaSA9IGFbYUxdIDwgYlthTF0gPyAxIDogMDtcclxuICAgICAgICAgIGFbYUxdID0gaSAqIGJhc2UgKyBhW2FMXSAtIGJbYUxdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgICAgZm9yICg7ICFhWzBdICYmIGEubGVuZ3RoID4gMTsgYS5zcGxpY2UoMCwgMSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB4OiBkaXZpZGVuZCwgeTogZGl2aXNvci5cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh4LCB5LCBkcCwgcm0sIGJhc2UpIHtcclxuICAgICAgICB2YXIgY21wLCBlLCBpLCBtb3JlLCBuLCBwcm9kLCBwcm9kTCwgcSwgcWMsIHJlbSwgcmVtTCwgcmVtMCwgeGksIHhMLCB5YzAsXHJcbiAgICAgICAgICB5TCwgeXosXHJcbiAgICAgICAgICBzID0geC5zID09IHkucyA/IDEgOiAtMSxcclxuICAgICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgICAgeWMgPSB5LmM7XHJcblxyXG4gICAgICAgIC8vIEVpdGhlciBOYU4sIEluZmluaXR5IG9yIDA/XHJcbiAgICAgICAgaWYgKCF4YyB8fCAheGNbMF0gfHwgIXljIHx8ICF5Y1swXSkge1xyXG5cclxuICAgICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKFxyXG5cclxuICAgICAgICAgICAvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBOYU4sIG9yIGJvdGggSW5maW5pdHkgb3IgMC5cclxuICAgICAgICAgICAheC5zIHx8ICF5LnMgfHwgKHhjID8geWMgJiYgeGNbMF0gPT0geWNbMF0gOiAheWMpID8gTmFOIDpcclxuXHJcbiAgICAgICAgICAgIC8vIFJldHVybiDCsTAgaWYgeCBpcyDCsTAgb3IgeSBpcyDCsUluZmluaXR5LCBvciByZXR1cm4gwrFJbmZpbml0eSBhcyB5IGlzIMKxMC5cclxuICAgICAgICAgICAgeGMgJiYgeGNbMF0gPT0gMCB8fCAheWMgPyBzICogMCA6IHMgLyAwXHJcbiAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBxID0gbmV3IEJpZ051bWJlcihzKTtcclxuICAgICAgICBxYyA9IHEuYyA9IFtdO1xyXG4gICAgICAgIGUgPSB4LmUgLSB5LmU7XHJcbiAgICAgICAgcyA9IGRwICsgZSArIDE7XHJcblxyXG4gICAgICAgIGlmICghYmFzZSkge1xyXG4gICAgICAgICAgYmFzZSA9IEJBU0U7XHJcbiAgICAgICAgICBlID0gYml0Rmxvb3IoeC5lIC8gTE9HX0JBU0UpIC0gYml0Rmxvb3IoeS5lIC8gTE9HX0JBU0UpO1xyXG4gICAgICAgICAgcyA9IHMgLyBMT0dfQkFTRSB8IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZXN1bHQgZXhwb25lbnQgbWF5IGJlIG9uZSBsZXNzIHRoZW4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgZS5cclxuICAgICAgICAvLyBUaGUgY29lZmZpY2llbnRzIG9mIHRoZSBCaWdOdW1iZXJzIGZyb20gY29udmVydEJhc2UgbWF5IGhhdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgZm9yIChpID0gMDsgeWNbaV0gPT0gKHhjW2ldIHx8IDApOyBpKyspO1xyXG5cclxuICAgICAgICBpZiAoeWNbaV0gPiAoeGNbaV0gfHwgMCkpIGUtLTtcclxuXHJcbiAgICAgICAgaWYgKHMgPCAwKSB7XHJcbiAgICAgICAgICBxYy5wdXNoKDEpO1xyXG4gICAgICAgICAgbW9yZSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHhMID0geGMubGVuZ3RoO1xyXG4gICAgICAgICAgeUwgPSB5Yy5sZW5ndGg7XHJcbiAgICAgICAgICBpID0gMDtcclxuICAgICAgICAgIHMgKz0gMjtcclxuXHJcbiAgICAgICAgICAvLyBOb3JtYWxpc2UgeGMgYW5kIHljIHNvIGhpZ2hlc3Qgb3JkZXIgZGlnaXQgb2YgeWMgaXMgPj0gYmFzZSAvIDIuXHJcblxyXG4gICAgICAgICAgbiA9IG1hdGhmbG9vcihiYXNlIC8gKHljWzBdICsgMSkpO1xyXG5cclxuICAgICAgICAgIC8vIE5vdCBuZWNlc3NhcnksIGJ1dCB0byBoYW5kbGUgb2RkIGJhc2VzIHdoZXJlIHljWzBdID09IChiYXNlIC8gMikgLSAxLlxyXG4gICAgICAgICAgLy8gaWYgKG4gPiAxIHx8IG4rKyA9PSAxICYmIHljWzBdIDwgYmFzZSAvIDIpIHtcclxuICAgICAgICAgIGlmIChuID4gMSkge1xyXG4gICAgICAgICAgICB5YyA9IG11bHRpcGx5KHljLCBuLCBiYXNlKTtcclxuICAgICAgICAgICAgeGMgPSBtdWx0aXBseSh4YywgbiwgYmFzZSk7XHJcbiAgICAgICAgICAgIHlMID0geWMubGVuZ3RoO1xyXG4gICAgICAgICAgICB4TCA9IHhjLmxlbmd0aDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB4aSA9IHlMO1xyXG4gICAgICAgICAgcmVtID0geGMuc2xpY2UoMCwgeUwpO1xyXG4gICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgLy8gQWRkIHplcm9zIHRvIG1ha2UgcmVtYWluZGVyIGFzIGxvbmcgYXMgZGl2aXNvci5cclxuICAgICAgICAgIGZvciAoOyByZW1MIDwgeUw7IHJlbVtyZW1MKytdID0gMCk7XHJcbiAgICAgICAgICB5eiA9IHljLnNsaWNlKCk7XHJcbiAgICAgICAgICB5eiA9IFswXS5jb25jYXQoeXopO1xyXG4gICAgICAgICAgeWMwID0geWNbMF07XHJcbiAgICAgICAgICBpZiAoeWNbMV0gPj0gYmFzZSAvIDIpIHljMCsrO1xyXG4gICAgICAgICAgLy8gTm90IG5lY2Vzc2FyeSwgYnV0IHRvIHByZXZlbnQgdHJpYWwgZGlnaXQgbiA+IGJhc2UsIHdoZW4gdXNpbmcgYmFzZSAzLlxyXG4gICAgICAgICAgLy8gZWxzZSBpZiAoYmFzZSA9PSAzICYmIHljMCA9PSAxKSB5YzAgPSAxICsgMWUtMTU7XHJcblxyXG4gICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICBuID0gMDtcclxuXHJcbiAgICAgICAgICAgIC8vIENvbXBhcmUgZGl2aXNvciBhbmQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICBjbXAgPSBjb21wYXJlKHljLCByZW0sIHlMLCByZW1MKTtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIGRpdmlzb3IgPCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgIGlmIChjbXAgPCAwKSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0cmlhbCBkaWdpdCwgbi5cclxuXHJcbiAgICAgICAgICAgICAgcmVtMCA9IHJlbVswXTtcclxuICAgICAgICAgICAgICBpZiAoeUwgIT0gcmVtTCkgcmVtMCA9IHJlbTAgKiBiYXNlICsgKHJlbVsxXSB8fCAwKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gbiBpcyBob3cgbWFueSB0aW1lcyB0aGUgZGl2aXNvciBnb2VzIGludG8gdGhlIGN1cnJlbnQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIG4gPSBtYXRoZmxvb3IocmVtMCAvIHljMCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vICBBbGdvcml0aG06XHJcbiAgICAgICAgICAgICAgLy8gIHByb2R1Y3QgPSBkaXZpc29yIG11bHRpcGxpZWQgYnkgdHJpYWwgZGlnaXQgKG4pLlxyXG4gICAgICAgICAgICAgIC8vICBDb21wYXJlIHByb2R1Y3QgYW5kIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAvLyAgSWYgcHJvZHVjdCBpcyBncmVhdGVyIHRoYW4gcmVtYWluZGVyOlxyXG4gICAgICAgICAgICAgIC8vICAgIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSBwcm9kdWN0LCBkZWNyZW1lbnQgdHJpYWwgZGlnaXQuXHJcbiAgICAgICAgICAgICAgLy8gIFN1YnRyYWN0IHByb2R1Y3QgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgLy8gIElmIHByb2R1Y3Qgd2FzIGxlc3MgdGhhbiByZW1haW5kZXIgYXQgdGhlIGxhc3QgY29tcGFyZTpcclxuICAgICAgICAgICAgICAvLyAgICBDb21wYXJlIG5ldyByZW1haW5kZXIgYW5kIGRpdmlzb3IuXHJcbiAgICAgICAgICAgICAgLy8gICAgSWYgcmVtYWluZGVyIGlzIGdyZWF0ZXIgdGhhbiBkaXZpc29yOlxyXG4gICAgICAgICAgICAgIC8vICAgICAgU3VidHJhY3QgZGl2aXNvciBmcm9tIHJlbWFpbmRlciwgaW5jcmVtZW50IHRyaWFsIGRpZ2l0LlxyXG5cclxuICAgICAgICAgICAgICBpZiAobiA+IDEpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBuIG1heSBiZSA+IGJhc2Ugb25seSB3aGVuIGJhc2UgaXMgMy5cclxuICAgICAgICAgICAgICAgIGlmIChuID49IGJhc2UpIG4gPSBiYXNlIC0gMTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBwcm9kdWN0ID0gZGl2aXNvciAqIHRyaWFsIGRpZ2l0LlxyXG4gICAgICAgICAgICAgICAgcHJvZCA9IG11bHRpcGx5KHljLCBuLCBiYXNlKTtcclxuICAgICAgICAgICAgICAgIHByb2RMID0gcHJvZC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICByZW1MID0gcmVtLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBDb21wYXJlIHByb2R1Y3QgYW5kIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgIC8vIElmIHByb2R1Y3QgPiByZW1haW5kZXIgdGhlbiB0cmlhbCBkaWdpdCBuIHRvbyBoaWdoLlxyXG4gICAgICAgICAgICAgICAgLy8gbiBpcyAxIHRvbyBoaWdoIGFib3V0IDUlIG9mIHRoZSB0aW1lLCBhbmQgaXMgbm90IGtub3duIHRvIGhhdmVcclxuICAgICAgICAgICAgICAgIC8vIGV2ZXIgYmVlbiBtb3JlIHRoYW4gMSB0b28gaGlnaC5cclxuICAgICAgICAgICAgICAgIHdoaWxlIChjb21wYXJlKHByb2QsIHJlbSwgcHJvZEwsIHJlbUwpID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgbi0tO1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gU3VidHJhY3QgZGl2aXNvciBmcm9tIHByb2R1Y3QuXHJcbiAgICAgICAgICAgICAgICAgIHN1YnRyYWN0KHByb2QsIHlMIDwgcHJvZEwgPyB5eiA6IHljLCBwcm9kTCwgYmFzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHByb2RMID0gcHJvZC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIGNtcCA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBuIGlzIDAgb3IgMSwgY21wIGlzIC0xLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgbiBpcyAwLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNvbXBhcmUgeWMgYW5kIHJlbSBhZ2FpbiBiZWxvdyxcclxuICAgICAgICAgICAgICAgIC8vIHNvIGNoYW5nZSBjbXAgdG8gMSB0byBhdm9pZCBpdC5cclxuICAgICAgICAgICAgICAgIC8vIElmIG4gaXMgMSwgbGVhdmUgY21wIGFzIC0xLCBzbyB5YyBhbmQgcmVtIGFyZSBjb21wYXJlZCBhZ2Fpbi5cclxuICAgICAgICAgICAgICAgIGlmIChuID09IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIGRpdmlzb3IgPCByZW1haW5kZXIsIHNvIG4gbXVzdCBiZSBhdCBsZWFzdCAxLlxyXG4gICAgICAgICAgICAgICAgICBjbXAgPSBuID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBwcm9kdWN0ID0gZGl2aXNvclxyXG4gICAgICAgICAgICAgICAgcHJvZCA9IHljLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICBwcm9kTCA9IHByb2QubGVuZ3RoO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKHByb2RMIDwgcmVtTCkgcHJvZCA9IFswXS5jb25jYXQocHJvZCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIFN1YnRyYWN0IHByb2R1Y3QgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgc3VidHJhY3QocmVtLCBwcm9kLCByZW1MLCBiYXNlKTtcclxuICAgICAgICAgICAgICByZW1MID0gcmVtLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgIC8vIElmIHByb2R1Y3Qgd2FzIDwgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBDb21wYXJlIGRpdmlzb3IgYW5kIG5ldyByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBkaXZpc29yIDwgbmV3IHJlbWFpbmRlciwgc3VidHJhY3QgZGl2aXNvciBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgIC8vIFRyaWFsIGRpZ2l0IG4gdG9vIGxvdy5cclxuICAgICAgICAgICAgICAgIC8vIG4gaXMgMSB0b28gbG93IGFib3V0IDUlIG9mIHRoZSB0aW1lLCBhbmQgdmVyeSByYXJlbHkgMiB0b28gbG93LlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvbXBhcmUoeWMsIHJlbSwgeUwsIHJlbUwpIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICBuKys7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgICBzdWJ0cmFjdChyZW0sIHlMIDwgcmVtTCA/IHl6IDogeWMsIHJlbUwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgICByZW1MID0gcmVtLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgbisrO1xyXG4gICAgICAgICAgICAgIHJlbSA9IFswXTtcclxuICAgICAgICAgICAgfSAvLyBlbHNlIGNtcCA9PT0gMSBhbmQgbiB3aWxsIGJlIDBcclxuXHJcbiAgICAgICAgICAgIC8vIEFkZCB0aGUgbmV4dCBkaWdpdCwgbiwgdG8gdGhlIHJlc3VsdCBhcnJheS5cclxuICAgICAgICAgICAgcWNbaSsrXSA9IG47XHJcblxyXG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgaWYgKHJlbVswXSkge1xyXG4gICAgICAgICAgICAgIHJlbVtyZW1MKytdID0geGNbeGldIHx8IDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmVtID0gW3hjW3hpXV07XHJcbiAgICAgICAgICAgICAgcmVtTCA9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gd2hpbGUgKCh4aSsrIDwgeEwgfHwgcmVtWzBdICE9IG51bGwpICYmIHMtLSk7XHJcblxyXG4gICAgICAgICAgbW9yZSA9IHJlbVswXSAhPSBudWxsO1xyXG5cclxuICAgICAgICAgIC8vIExlYWRpbmcgemVybz9cclxuICAgICAgICAgIGlmICghcWNbMF0pIHFjLnNwbGljZSgwLCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChiYXNlID09IEJBU0UpIHtcclxuXHJcbiAgICAgICAgICAvLyBUbyBjYWxjdWxhdGUgcS5lLCBmaXJzdCBnZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgcWNbMF0uXHJcbiAgICAgICAgICBmb3IgKGkgPSAxLCBzID0gcWNbMF07IHMgPj0gMTA7IHMgLz0gMTAsIGkrKyk7XHJcblxyXG4gICAgICAgICAgcm91bmQocSwgZHAgKyAocS5lID0gaSArIGUgKiBMT0dfQkFTRSAtIDEpICsgMSwgcm0sIG1vcmUpO1xyXG5cclxuICAgICAgICAvLyBDYWxsZXIgaXMgY29udmVydEJhc2UuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHEuZSA9IGU7XHJcbiAgICAgICAgICBxLnIgPSArbW9yZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBxO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIEJpZ051bWJlciBuIGluIGZpeGVkLXBvaW50IG9yIGV4cG9uZW50aWFsXHJcbiAgICAgKiBub3RhdGlvbiByb3VuZGVkIHRvIHRoZSBzcGVjaWZpZWQgZGVjaW1hbCBwbGFjZXMgb3Igc2lnbmlmaWNhbnQgZGlnaXRzLlxyXG4gICAgICpcclxuICAgICAqIG46IGEgQmlnTnVtYmVyLlxyXG4gICAgICogaTogdGhlIGluZGV4IG9mIHRoZSBsYXN0IGRpZ2l0IHJlcXVpcmVkIChpLmUuIHRoZSBkaWdpdCB0aGF0IG1heSBiZSByb3VuZGVkIHVwKS5cclxuICAgICAqIHJtOiB0aGUgcm91bmRpbmcgbW9kZS5cclxuICAgICAqIGlkOiAxICh0b0V4cG9uZW50aWFsKSBvciAyICh0b1ByZWNpc2lvbikuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGZvcm1hdChuLCBpLCBybSwgaWQpIHtcclxuICAgICAgdmFyIGMwLCBlLCBuZSwgbGVuLCBzdHI7XHJcblxyXG4gICAgICBpZiAocm0gPT0gbnVsbCkgcm0gPSBST1VORElOR19NT0RFO1xyXG4gICAgICBlbHNlIGludENoZWNrKHJtLCAwLCA4KTtcclxuXHJcbiAgICAgIGlmICghbi5jKSByZXR1cm4gbi50b1N0cmluZygpO1xyXG5cclxuICAgICAgYzAgPSBuLmNbMF07XHJcbiAgICAgIG5lID0gbi5lO1xyXG5cclxuICAgICAgaWYgKGkgPT0gbnVsbCkge1xyXG4gICAgICAgIHN0ciA9IGNvZWZmVG9TdHJpbmcobi5jKTtcclxuICAgICAgICBzdHIgPSBpZCA9PSAxIHx8IGlkID09IDIgJiYgKG5lIDw9IFRPX0VYUF9ORUcgfHwgbmUgPj0gVE9fRVhQX1BPUylcclxuICAgICAgICAgPyB0b0V4cG9uZW50aWFsKHN0ciwgbmUpXHJcbiAgICAgICAgIDogdG9GaXhlZFBvaW50KHN0ciwgbmUsICcwJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbiA9IHJvdW5kKG5ldyBCaWdOdW1iZXIobiksIGksIHJtKTtcclxuXHJcbiAgICAgICAgLy8gbi5lIG1heSBoYXZlIGNoYW5nZWQgaWYgdGhlIHZhbHVlIHdhcyByb3VuZGVkIHVwLlxyXG4gICAgICAgIGUgPSBuLmU7XHJcblxyXG4gICAgICAgIHN0ciA9IGNvZWZmVG9TdHJpbmcobi5jKTtcclxuICAgICAgICBsZW4gPSBzdHIubGVuZ3RoO1xyXG5cclxuICAgICAgICAvLyB0b1ByZWNpc2lvbiByZXR1cm5zIGV4cG9uZW50aWFsIG5vdGF0aW9uIGlmIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzXHJcbiAgICAgICAgLy8gc3BlY2lmaWVkIGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBpbnRlZ2VyXHJcbiAgICAgICAgLy8gcGFydCBvZiB0aGUgdmFsdWUgaW4gZml4ZWQtcG9pbnQgbm90YXRpb24uXHJcblxyXG4gICAgICAgIC8vIEV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICAgIGlmIChpZCA9PSAxIHx8IGlkID09IDIgJiYgKGkgPD0gZSB8fCBlIDw9IFRPX0VYUF9ORUcpKSB7XHJcblxyXG4gICAgICAgICAgLy8gQXBwZW5kIHplcm9zP1xyXG4gICAgICAgICAgZm9yICg7IGxlbiA8IGk7IHN0ciArPSAnMCcsIGxlbisrKTtcclxuICAgICAgICAgIHN0ciA9IHRvRXhwb25lbnRpYWwoc3RyLCBlKTtcclxuXHJcbiAgICAgICAgLy8gRml4ZWQtcG9pbnQgbm90YXRpb24uXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGkgLT0gbmU7XHJcbiAgICAgICAgICBzdHIgPSB0b0ZpeGVkUG9pbnQoc3RyLCBlLCAnMCcpO1xyXG5cclxuICAgICAgICAgIC8vIEFwcGVuZCB6ZXJvcz9cclxuICAgICAgICAgIGlmIChlICsgMSA+IGxlbikge1xyXG4gICAgICAgICAgICBpZiAoLS1pID4gMCkgZm9yIChzdHIgKz0gJy4nOyBpLS07IHN0ciArPSAnMCcpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaSArPSBlIC0gbGVuO1xyXG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICAgICAgICBpZiAoZSArIDEgPT0gbGVuKSBzdHIgKz0gJy4nO1xyXG4gICAgICAgICAgICAgIGZvciAoOyBpLS07IHN0ciArPSAnMCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbi5zIDwgMCAmJiBjMCA/ICctJyArIHN0ciA6IHN0cjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gSGFuZGxlIEJpZ051bWJlci5tYXggYW5kIEJpZ051bWJlci5taW4uXHJcbiAgICBmdW5jdGlvbiBtYXhPck1pbihhcmdzLCBtZXRob2QpIHtcclxuICAgICAgdmFyIG4sXHJcbiAgICAgICAgaSA9IDEsXHJcbiAgICAgICAgbSA9IG5ldyBCaWdOdW1iZXIoYXJnc1swXSk7XHJcblxyXG4gICAgICBmb3IgKDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBuID0gbmV3IEJpZ051bWJlcihhcmdzW2ldKTtcclxuXHJcbiAgICAgICAgLy8gSWYgYW55IG51bWJlciBpcyBOYU4sIHJldHVybiBOYU4uXHJcbiAgICAgICAgaWYgKCFuLnMpIHtcclxuICAgICAgICAgIG0gPSBuO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtZXRob2QuY2FsbChtLCBuKSkge1xyXG4gICAgICAgICAgbSA9IG47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFN0cmlwIHRyYWlsaW5nIHplcm9zLCBjYWxjdWxhdGUgYmFzZSAxMCBleHBvbmVudCBhbmQgY2hlY2sgYWdhaW5zdCBNSU5fRVhQIGFuZCBNQVhfRVhQLlxyXG4gICAgICogQ2FsbGVkIGJ5IG1pbnVzLCBwbHVzIGFuZCB0aW1lcy5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gbm9ybWFsaXNlKG4sIGMsIGUpIHtcclxuICAgICAgdmFyIGkgPSAxLFxyXG4gICAgICAgIGogPSBjLmxlbmd0aDtcclxuXHJcbiAgICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgIGZvciAoOyAhY1stLWpdOyBjLnBvcCgpKTtcclxuXHJcbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgYmFzZSAxMCBleHBvbmVudC4gRmlyc3QgZ2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIGNbMF0uXHJcbiAgICAgIGZvciAoaiA9IGNbMF07IGogPj0gMTA7IGogLz0gMTAsIGkrKyk7XHJcblxyXG4gICAgICAvLyBPdmVyZmxvdz9cclxuICAgICAgaWYgKChlID0gaSArIGUgKiBMT0dfQkFTRSAtIDEpID4gTUFYX0VYUCkge1xyXG5cclxuICAgICAgICAvLyBJbmZpbml0eS5cclxuICAgICAgICBuLmMgPSBuLmUgPSBudWxsO1xyXG5cclxuICAgICAgLy8gVW5kZXJmbG93P1xyXG4gICAgICB9IGVsc2UgaWYgKGUgPCBNSU5fRVhQKSB7XHJcblxyXG4gICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgbi5jID0gW24uZSA9IDBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG4uZSA9IGU7XHJcbiAgICAgICAgbi5jID0gYztcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG47XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIEhhbmRsZSB2YWx1ZXMgdGhhdCBmYWlsIHRoZSB2YWxpZGl0eSB0ZXN0IGluIEJpZ051bWJlci5cclxuICAgIHBhcnNlTnVtZXJpYyA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciBiYXNlUHJlZml4ID0gL14oLT8pMChbeGJvXSkoPz1cXHdbXFx3Ll0qJCkvaSxcclxuICAgICAgICBkb3RBZnRlciA9IC9eKFteLl0rKVxcLiQvLFxyXG4gICAgICAgIGRvdEJlZm9yZSA9IC9eXFwuKFteLl0rKSQvLFxyXG4gICAgICAgIGlzSW5maW5pdHlPck5hTiA9IC9eLT8oSW5maW5pdHl8TmFOKSQvLFxyXG4gICAgICAgIHdoaXRlc3BhY2VPclBsdXMgPSAvXlxccypcXCsoPz1bXFx3Ll0pfF5cXHMrfFxccyskL2c7XHJcblxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHgsIHN0ciwgaXNOdW0sIGIpIHtcclxuICAgICAgICB2YXIgYmFzZSxcclxuICAgICAgICAgIHMgPSBpc051bSA/IHN0ciA6IHN0ci5yZXBsYWNlKHdoaXRlc3BhY2VPclBsdXMsICcnKTtcclxuXHJcbiAgICAgICAgLy8gTm8gZXhjZXB0aW9uIG9uIMKxSW5maW5pdHkgb3IgTmFOLlxyXG4gICAgICAgIGlmIChpc0luZmluaXR5T3JOYU4udGVzdChzKSkge1xyXG4gICAgICAgICAgeC5zID0gaXNOYU4ocykgPyBudWxsIDogcyA8IDAgPyAtMSA6IDE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICghaXNOdW0pIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGJhc2VQcmVmaXggPSAvXigtPykwKFt4Ym9dKSg/PVxcd1tcXHcuXSokKS9pXHJcbiAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoYmFzZVByZWZpeCwgZnVuY3Rpb24gKG0sIHAxLCBwMikge1xyXG4gICAgICAgICAgICAgIGJhc2UgPSAocDIgPSBwMi50b0xvd2VyQ2FzZSgpKSA9PSAneCcgPyAxNiA6IHAyID09ICdiJyA/IDIgOiA4O1xyXG4gICAgICAgICAgICAgIHJldHVybiAhYiB8fCBiID09IGJhc2UgPyBwMSA6IG07XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGIpIHtcclxuICAgICAgICAgICAgICBiYXNlID0gYjtcclxuXHJcbiAgICAgICAgICAgICAgLy8gRS5nLiAnMS4nIHRvICcxJywgJy4xJyB0byAnMC4xJ1xyXG4gICAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoZG90QWZ0ZXIsICckMScpLnJlcGxhY2UoZG90QmVmb3JlLCAnMC4kMScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RyICE9IHMpIHJldHVybiBuZXcgQmlnTnVtYmVyKHMsIGJhc2UpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBOb3QgYSBudW1iZXI6IHtufSdcclxuICAgICAgICAgIC8vICdbQmlnTnVtYmVyIEVycm9yXSBOb3QgYSBiYXNlIHtifSBudW1iZXI6IHtufSdcclxuICAgICAgICAgIGlmIChCaWdOdW1iZXIuREVCVUcpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAnTm90IGEnICsgKGIgPyAnIGJhc2UgJyArIGIgOiAnJykgKyAnIG51bWJlcjogJyArIHN0cik7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gTmFOXHJcbiAgICAgICAgICB4LnMgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgeC5jID0geC5lID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSkoKTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJvdW5kIHggdG8gc2Qgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0uIENoZWNrIGZvciBvdmVyL3VuZGVyLWZsb3cuXHJcbiAgICAgKiBJZiByIGlzIHRydXRoeSwgaXQgaXMga25vd24gdGhhdCB0aGVyZSBhcmUgbW9yZSBkaWdpdHMgYWZ0ZXIgdGhlIHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiByb3VuZCh4LCBzZCwgcm0sIHIpIHtcclxuICAgICAgdmFyIGQsIGksIGosIGssIG4sIG5pLCByZCxcclxuICAgICAgICB4YyA9IHguYyxcclxuICAgICAgICBwb3dzMTAgPSBQT1dTX1RFTjtcclxuXHJcbiAgICAgIC8vIGlmIHggaXMgbm90IEluZmluaXR5IG9yIE5hTi4uLlxyXG4gICAgICBpZiAoeGMpIHtcclxuXHJcbiAgICAgICAgLy8gcmQgaXMgdGhlIHJvdW5kaW5nIGRpZ2l0LCBpLmUuIHRoZSBkaWdpdCBhZnRlciB0aGUgZGlnaXQgdGhhdCBtYXkgYmUgcm91bmRlZCB1cC5cclxuICAgICAgICAvLyBuIGlzIGEgYmFzZSAxZTE0IG51bWJlciwgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50IG9mIGFycmF5IHguYyBjb250YWluaW5nIHJkLlxyXG4gICAgICAgIC8vIG5pIGlzIHRoZSBpbmRleCBvZiBuIHdpdGhpbiB4LmMuXHJcbiAgICAgICAgLy8gZCBpcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBuLlxyXG4gICAgICAgIC8vIGkgaXMgdGhlIGluZGV4IG9mIHJkIHdpdGhpbiBuIGluY2x1ZGluZyBsZWFkaW5nIHplcm9zLlxyXG4gICAgICAgIC8vIGogaXMgdGhlIGFjdHVhbCBpbmRleCBvZiByZCB3aXRoaW4gbiAoaWYgPCAwLCByZCBpcyBhIGxlYWRpbmcgemVybykuXHJcbiAgICAgICAgb3V0OiB7XHJcblxyXG4gICAgICAgICAgLy8gR2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHRoZSBmaXJzdCBlbGVtZW50IG9mIHhjLlxyXG4gICAgICAgICAgZm9yIChkID0gMSwgayA9IHhjWzBdOyBrID49IDEwOyBrIC89IDEwLCBkKyspO1xyXG4gICAgICAgICAgaSA9IHNkIC0gZDtcclxuXHJcbiAgICAgICAgICAvLyBJZiB0aGUgcm91bmRpbmcgZGlnaXQgaXMgaW4gdGhlIGZpcnN0IGVsZW1lbnQgb2YgeGMuLi5cclxuICAgICAgICAgIGlmIChpIDwgMCkge1xyXG4gICAgICAgICAgICBpICs9IExPR19CQVNFO1xyXG4gICAgICAgICAgICBqID0gc2Q7XHJcbiAgICAgICAgICAgIG4gPSB4Y1tuaSA9IDBdO1xyXG5cclxuICAgICAgICAgICAgLy8gR2V0IHRoZSByb3VuZGluZyBkaWdpdCBhdCBpbmRleCBqIG9mIG4uXHJcbiAgICAgICAgICAgIHJkID0gbiAvIHBvd3MxMFtkIC0gaiAtIDFdICUgMTAgfCAwO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbmkgPSBtYXRoY2VpbCgoaSArIDEpIC8gTE9HX0JBU0UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG5pID49IHhjLmxlbmd0aCkge1xyXG5cclxuICAgICAgICAgICAgICBpZiAocikge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIE5lZWRlZCBieSBzcXJ0LlxyXG4gICAgICAgICAgICAgICAgZm9yICg7IHhjLmxlbmd0aCA8PSBuaTsgeGMucHVzaCgwKSk7XHJcbiAgICAgICAgICAgICAgICBuID0gcmQgPSAwO1xyXG4gICAgICAgICAgICAgICAgZCA9IDE7XHJcbiAgICAgICAgICAgICAgICBpICU9IExPR19CQVNFO1xyXG4gICAgICAgICAgICAgICAgaiA9IGkgLSBMT0dfQkFTRSArIDE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrIG91dDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbiA9IGsgPSB4Y1tuaV07XHJcblxyXG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBuLlxyXG4gICAgICAgICAgICAgIGZvciAoZCA9IDE7IGsgPj0gMTA7IGsgLz0gMTAsIGQrKyk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgcmQgd2l0aGluIG4uXHJcbiAgICAgICAgICAgICAgaSAlPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gR2V0IHRoZSBpbmRleCBvZiByZCB3aXRoaW4gbiwgYWRqdXN0ZWQgZm9yIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgICAgICAgICAgLy8gVGhlIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIG4gaXMgZ2l2ZW4gYnkgTE9HX0JBU0UgLSBkLlxyXG4gICAgICAgICAgICAgIGogPSBpIC0gTE9HX0JBU0UgKyBkO1xyXG5cclxuICAgICAgICAgICAgICAvLyBHZXQgdGhlIHJvdW5kaW5nIGRpZ2l0IGF0IGluZGV4IGogb2Ygbi5cclxuICAgICAgICAgICAgICByZCA9IGogPCAwID8gMCA6IG4gLyBwb3dzMTBbZCAtIGogLSAxXSAlIDEwIHwgMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHIgPSByIHx8IHNkIDwgMCB8fFxyXG5cclxuICAgICAgICAgIC8vIEFyZSB0aGVyZSBhbnkgbm9uLXplcm8gZGlnaXRzIGFmdGVyIHRoZSByb3VuZGluZyBkaWdpdD9cclxuICAgICAgICAgIC8vIFRoZSBleHByZXNzaW9uICBuICUgcG93czEwW2QgLSBqIC0gMV0gIHJldHVybnMgYWxsIGRpZ2l0cyBvZiBuIHRvIHRoZSByaWdodFxyXG4gICAgICAgICAgLy8gb2YgdGhlIGRpZ2l0IGF0IGosIGUuZy4gaWYgbiBpcyA5MDg3MTQgYW5kIGogaXMgMiwgdGhlIGV4cHJlc3Npb24gZ2l2ZXMgNzE0LlxyXG4gICAgICAgICAgIHhjW25pICsgMV0gIT0gbnVsbCB8fCAoaiA8IDAgPyBuIDogbiAlIHBvd3MxMFtkIC0gaiAtIDFdKTtcclxuXHJcbiAgICAgICAgICByID0gcm0gPCA0XHJcbiAgICAgICAgICAgPyAocmQgfHwgcikgJiYgKHJtID09IDAgfHwgcm0gPT0gKHgucyA8IDAgPyAzIDogMikpXHJcbiAgICAgICAgICAgOiByZCA+IDUgfHwgcmQgPT0gNSAmJiAocm0gPT0gNCB8fCByIHx8IHJtID09IDYgJiZcclxuXHJcbiAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGRpZ2l0IHRvIHRoZSBsZWZ0IG9mIHRoZSByb3VuZGluZyBkaWdpdCBpcyBvZGQuXHJcbiAgICAgICAgICAgICgoaSA+IDAgPyBqID4gMCA/IG4gLyBwb3dzMTBbZCAtIGpdIDogMCA6IHhjW25pIC0gMV0pICUgMTApICYgMSB8fFxyXG4gICAgICAgICAgICAgcm0gPT0gKHgucyA8IDAgPyA4IDogNykpO1xyXG5cclxuICAgICAgICAgIGlmIChzZCA8IDEgfHwgIXhjWzBdKSB7XHJcbiAgICAgICAgICAgIHhjLmxlbmd0aCA9IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAocikge1xyXG5cclxuICAgICAgICAgICAgICAvLyBDb252ZXJ0IHNkIHRvIGRlY2ltYWwgcGxhY2VzLlxyXG4gICAgICAgICAgICAgIHNkIC09IHguZSArIDE7XHJcblxyXG4gICAgICAgICAgICAgIC8vIDEsIDAuMSwgMC4wMSwgMC4wMDEsIDAuMDAwMSBldGMuXHJcbiAgICAgICAgICAgICAgeGNbMF0gPSBwb3dzMTBbKExPR19CQVNFIC0gc2QgJSBMT0dfQkFTRSkgJSBMT0dfQkFTRV07XHJcbiAgICAgICAgICAgICAgeC5lID0gLXNkIHx8IDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgICAgICAgeGNbMF0gPSB4LmUgPSAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4geDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBSZW1vdmUgZXhjZXNzIGRpZ2l0cy5cclxuICAgICAgICAgIGlmIChpID09IDApIHtcclxuICAgICAgICAgICAgeGMubGVuZ3RoID0gbmk7XHJcbiAgICAgICAgICAgIGsgPSAxO1xyXG4gICAgICAgICAgICBuaS0tO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgeGMubGVuZ3RoID0gbmkgKyAxO1xyXG4gICAgICAgICAgICBrID0gcG93czEwW0xPR19CQVNFIC0gaV07XHJcblxyXG4gICAgICAgICAgICAvLyBFLmcuIDU2NzAwIGJlY29tZXMgNTYwMDAgaWYgNyBpcyB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgICAgIC8vIGogPiAwIG1lYW5zIGkgPiBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBvZiBuLlxyXG4gICAgICAgICAgICB4Y1tuaV0gPSBqID4gMCA/IG1hdGhmbG9vcihuIC8gcG93czEwW2QgLSBqXSAlIHBvd3MxMFtqXSkgKiBrIDogMDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBSb3VuZCB1cD9cclxuICAgICAgICAgIGlmIChyKSB7XHJcblxyXG4gICAgICAgICAgICBmb3IgKDsgOykge1xyXG5cclxuICAgICAgICAgICAgICAvLyBJZiB0aGUgZGlnaXQgdG8gYmUgcm91bmRlZCB1cCBpcyBpbiB0aGUgZmlyc3QgZWxlbWVudCBvZiB4Yy4uLlxyXG4gICAgICAgICAgICAgIGlmIChuaSA9PSAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaSB3aWxsIGJlIHRoZSBsZW5ndGggb2YgeGNbMF0gYmVmb3JlIGsgaXMgYWRkZWQuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAxLCBqID0geGNbMF07IGogPj0gMTA7IGogLz0gMTAsIGkrKyk7XHJcbiAgICAgICAgICAgICAgICBqID0geGNbMF0gKz0gaztcclxuICAgICAgICAgICAgICAgIGZvciAoayA9IDE7IGogPj0gMTA7IGogLz0gMTAsIGsrKyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaWYgaSAhPSBrIHRoZSBsZW5ndGggaGFzIGluY3JlYXNlZC5cclxuICAgICAgICAgICAgICAgIGlmIChpICE9IGspIHtcclxuICAgICAgICAgICAgICAgICAgeC5lKys7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh4Y1swXSA9PSBCQVNFKSB4Y1swXSA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHhjW25pXSArPSBrO1xyXG4gICAgICAgICAgICAgICAgaWYgKHhjW25pXSAhPSBCQVNFKSBicmVhaztcclxuICAgICAgICAgICAgICAgIHhjW25pLS1dID0gMDtcclxuICAgICAgICAgICAgICAgIGsgPSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgICAgIGZvciAoaSA9IHhjLmxlbmd0aDsgeGNbLS1pXSA9PT0gMDsgeGMucG9wKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gT3ZlcmZsb3c/IEluZmluaXR5LlxyXG4gICAgICAgIGlmICh4LmUgPiBNQVhfRVhQKSB7XHJcbiAgICAgICAgICB4LmMgPSB4LmUgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBVbmRlcmZsb3c/IFplcm8uXHJcbiAgICAgICAgfSBlbHNlIGlmICh4LmUgPCBNSU5fRVhQKSB7XHJcbiAgICAgICAgICB4LmMgPSBbeC5lID0gMF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4geDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZnVuY3Rpb24gdmFsdWVPZihuKSB7XHJcbiAgICAgIHZhciBzdHIsXHJcbiAgICAgICAgZSA9IG4uZTtcclxuXHJcbiAgICAgIGlmIChlID09PSBudWxsKSByZXR1cm4gbi50b1N0cmluZygpO1xyXG5cclxuICAgICAgc3RyID0gY29lZmZUb1N0cmluZyhuLmMpO1xyXG5cclxuICAgICAgc3RyID0gZSA8PSBUT19FWFBfTkVHIHx8IGUgPj0gVE9fRVhQX1BPU1xyXG4gICAgICAgID8gdG9FeHBvbmVudGlhbChzdHIsIGUpXHJcbiAgICAgICAgOiB0b0ZpeGVkUG9pbnQoc3RyLCBlLCAnMCcpO1xyXG5cclxuICAgICAgcmV0dXJuIG4ucyA8IDAgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIFBST1RPVFlQRS9JTlNUQU5DRSBNRVRIT0RTXHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlci5cclxuICAgICAqL1xyXG4gICAgUC5hYnNvbHV0ZVZhbHVlID0gUC5hYnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHZhciB4ID0gbmV3IEJpZ051bWJlcih0aGlzKTtcclxuICAgICAgaWYgKHgucyA8IDApIHgucyA9IDE7XHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVyblxyXG4gICAgICogICAxIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqICAgLTEgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGxlc3MgdGhhbiB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogICAwIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSB2YWx1ZSxcclxuICAgICAqICAgb3IgbnVsbCBpZiB0aGUgdmFsdWUgb2YgZWl0aGVyIGlzIE5hTi5cclxuICAgICAqL1xyXG4gICAgUC5jb21wYXJlZFRvID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogSWYgZHAgaXMgdW5kZWZpbmVkIG9yIG51bGwgb3IgdHJ1ZSBvciBmYWxzZSwgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgb2YgdGhlXHJcbiAgICAgKiB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciwgb3IgbnVsbCBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgwrFJbmZpbml0eSBvciBOYU4uXHJcbiAgICAgKlxyXG4gICAgICogT3RoZXJ3aXNlLCBpZiBkcCBpcyBhIG51bWJlciwgcmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpc1xyXG4gICAgICogQmlnTnVtYmVyIHJvdW5kZWQgdG8gYSBtYXhpbXVtIG9mIGRwIGRlY2ltYWwgcGxhY2VzIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0sIG9yXHJcbiAgICAgKiBST1VORElOR19NT0RFIGlmIHJtIGlzIG9taXR0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlczogaW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB8cm19J1xyXG4gICAgICovXHJcbiAgICBQLmRlY2ltYWxQbGFjZXMgPSBQLmRwID0gZnVuY3Rpb24gKGRwLCBybSkge1xyXG4gICAgICB2YXIgYywgbiwgdixcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChkcCAhPSBudWxsKSB7XHJcbiAgICAgICAgaW50Q2hlY2soZHAsIDAsIE1BWCk7XHJcbiAgICAgICAgaWYgKHJtID09IG51bGwpIHJtID0gUk9VTkRJTkdfTU9ERTtcclxuICAgICAgICBlbHNlIGludENoZWNrKHJtLCAwLCA4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJvdW5kKG5ldyBCaWdOdW1iZXIoeCksIGRwICsgeC5lICsgMSwgcm0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIShjID0geC5jKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgIG4gPSAoKHYgPSBjLmxlbmd0aCAtIDEpIC0gYml0Rmxvb3IodGhpcy5lIC8gTE9HX0JBU0UpKSAqIExPR19CQVNFO1xyXG5cclxuICAgICAgLy8gU3VidHJhY3QgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvcyBvZiB0aGUgbGFzdCBudW1iZXIuXHJcbiAgICAgIGlmICh2ID0gY1t2XSkgZm9yICg7IHYgJSAxMCA9PSAwOyB2IC89IDEwLCBuLS0pO1xyXG4gICAgICBpZiAobiA8IDApIG4gPSAwO1xyXG5cclxuICAgICAgcmV0dXJuIG47XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIG4gLyAwID0gSVxyXG4gICAgICogIG4gLyBOID0gTlxyXG4gICAgICogIG4gLyBJID0gMFxyXG4gICAgICogIDAgLyBuID0gMFxyXG4gICAgICogIDAgLyAwID0gTlxyXG4gICAgICogIDAgLyBOID0gTlxyXG4gICAgICogIDAgLyBJID0gMFxyXG4gICAgICogIE4gLyBuID0gTlxyXG4gICAgICogIE4gLyAwID0gTlxyXG4gICAgICogIE4gLyBOID0gTlxyXG4gICAgICogIE4gLyBJID0gTlxyXG4gICAgICogIEkgLyBuID0gSVxyXG4gICAgICogIEkgLyAwID0gSVxyXG4gICAgICogIEkgLyBOID0gTlxyXG4gICAgICogIEkgLyBJID0gTlxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGRpdmlkZWQgYnkgdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYiksIHJvdW5kZWQgYWNjb3JkaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFuZCBST1VORElOR19NT0RFLlxyXG4gICAgICovXHJcbiAgICBQLmRpdmlkZWRCeSA9IFAuZGl2ID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGRpdih0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpLCBERUNJTUFMX1BMQUNFUywgUk9VTkRJTkdfTU9ERSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgaW50ZWdlciBwYXJ0IG9mIGRpdmlkaW5nIHRoZSB2YWx1ZSBvZiB0aGlzXHJcbiAgICAgKiBCaWdOdW1iZXIgYnkgdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKS5cclxuICAgICAqL1xyXG4gICAgUC5kaXZpZGVkVG9JbnRlZ2VyQnkgPSBQLmlkaXYgPSBmdW5jdGlvbiAoeSwgYikge1xyXG4gICAgICByZXR1cm4gZGl2KHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYiksIDAsIDEpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgZXhwb25lbnRpYXRlZCBieSBuLlxyXG4gICAgICpcclxuICAgICAqIElmIG0gaXMgcHJlc2VudCwgcmV0dXJuIHRoZSByZXN1bHQgbW9kdWxvIG0uXHJcbiAgICAgKiBJZiBuIGlzIG5lZ2F0aXZlIHJvdW5kIGFjY29yZGluZyB0byBERUNJTUFMX1BMQUNFUyBhbmQgUk9VTkRJTkdfTU9ERS5cclxuICAgICAqIElmIFBPV19QUkVDSVNJT04gaXMgbm9uLXplcm8gYW5kIG0gaXMgbm90IHByZXNlbnQsIHJvdW5kIHRvIFBPV19QUkVDSVNJT04gdXNpbmcgUk9VTkRJTkdfTU9ERS5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgbW9kdWxhciBwb3dlciBvcGVyYXRpb24gd29ya3MgZWZmaWNpZW50bHkgd2hlbiB4LCBuLCBhbmQgbSBhcmUgaW50ZWdlcnMsIG90aGVyd2lzZSBpdFxyXG4gICAgICogaXMgZXF1aXZhbGVudCB0byBjYWxjdWxhdGluZyB4LmV4cG9uZW50aWF0ZWRCeShuKS5tb2R1bG8obSkgd2l0aCBhIFBPV19QUkVDSVNJT04gb2YgMC5cclxuICAgICAqXHJcbiAgICAgKiBuIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn0gVGhlIGV4cG9uZW50LiBBbiBpbnRlZ2VyLlxyXG4gICAgICogW21dIHtudW1iZXJ8c3RyaW5nfEJpZ051bWJlcn0gVGhlIG1vZHVsdXMuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEV4cG9uZW50IG5vdCBhbiBpbnRlZ2VyOiB7bn0nXHJcbiAgICAgKi9cclxuICAgIFAuZXhwb25lbnRpYXRlZEJ5ID0gUC5wb3cgPSBmdW5jdGlvbiAobiwgbSkge1xyXG4gICAgICB2YXIgaGFsZiwgaXNNb2RFeHAsIGksIGssIG1vcmUsIG5Jc0JpZywgbklzTmVnLCBuSXNPZGQsIHksXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICBuID0gbmV3IEJpZ051bWJlcihuKTtcclxuXHJcbiAgICAgIC8vIEFsbG93IE5hTiBhbmQgwrFJbmZpbml0eSwgYnV0IG5vdCBvdGhlciBub24taW50ZWdlcnMuXHJcbiAgICAgIGlmIChuLmMgJiYgIW4uaXNJbnRlZ2VyKCkpIHtcclxuICAgICAgICB0aHJvdyBFcnJvclxyXG4gICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ0V4cG9uZW50IG5vdCBhbiBpbnRlZ2VyOiAnICsgdmFsdWVPZihuKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChtICE9IG51bGwpIG0gPSBuZXcgQmlnTnVtYmVyKG0pO1xyXG5cclxuICAgICAgLy8gRXhwb25lbnQgb2YgTUFYX1NBRkVfSU5URUdFUiBpcyAxNS5cclxuICAgICAgbklzQmlnID0gbi5lID4gMTQ7XHJcblxyXG4gICAgICAvLyBJZiB4IGlzIE5hTiwgwrFJbmZpbml0eSwgwrEwIG9yIMKxMSwgb3IgbiBpcyDCsUluZmluaXR5LCBOYU4gb3IgwrEwLlxyXG4gICAgICBpZiAoIXguYyB8fCAheC5jWzBdIHx8IHguY1swXSA9PSAxICYmICF4LmUgJiYgeC5jLmxlbmd0aCA9PSAxIHx8ICFuLmMgfHwgIW4uY1swXSkge1xyXG5cclxuICAgICAgICAvLyBUaGUgc2lnbiBvZiB0aGUgcmVzdWx0IG9mIHBvdyB3aGVuIHggaXMgbmVnYXRpdmUgZGVwZW5kcyBvbiB0aGUgZXZlbm5lc3Mgb2Ygbi5cclxuICAgICAgICAvLyBJZiArbiBvdmVyZmxvd3MgdG8gwrFJbmZpbml0eSwgdGhlIGV2ZW5uZXNzIG9mIG4gd291bGQgYmUgbm90IGJlIGtub3duLlxyXG4gICAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKE1hdGgucG93KCt2YWx1ZU9mKHgpLCBuSXNCaWcgPyAyIC0gaXNPZGQobikgOiArdmFsdWVPZihuKSkpO1xyXG4gICAgICAgIHJldHVybiBtID8geS5tb2QobSkgOiB5O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuSXNOZWcgPSBuLnMgPCAwO1xyXG5cclxuICAgICAgaWYgKG0pIHtcclxuXHJcbiAgICAgICAgLy8geCAlIG0gcmV0dXJucyBOYU4gaWYgYWJzKG0pIGlzIHplcm8sIG9yIG0gaXMgTmFOLlxyXG4gICAgICAgIGlmIChtLmMgPyAhbS5jWzBdIDogIW0ucykgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcclxuXHJcbiAgICAgICAgaXNNb2RFeHAgPSAhbklzTmVnICYmIHguaXNJbnRlZ2VyKCkgJiYgbS5pc0ludGVnZXIoKTtcclxuXHJcbiAgICAgICAgaWYgKGlzTW9kRXhwKSB4ID0geC5tb2QobSk7XHJcblxyXG4gICAgICAvLyBPdmVyZmxvdyB0byDCsUluZmluaXR5OiA+PTIqKjFlMTAgb3IgPj0xLjAwMDAwMjQqKjFlMTUuXHJcbiAgICAgIC8vIFVuZGVyZmxvdyB0byDCsTA6IDw9MC43OSoqMWUxMCBvciA8PTAuOTk5OTk3NSoqMWUxNS5cclxuICAgICAgfSBlbHNlIGlmIChuLmUgPiA5ICYmICh4LmUgPiAwIHx8IHguZSA8IC0xIHx8ICh4LmUgPT0gMFxyXG4gICAgICAgIC8vIFsxLCAyNDAwMDAwMDBdXHJcbiAgICAgICAgPyB4LmNbMF0gPiAxIHx8IG5Jc0JpZyAmJiB4LmNbMV0gPj0gMjRlN1xyXG4gICAgICAgIC8vIFs4MDAwMDAwMDAwMDAwMF0gIFs5OTk5OTc1MDAwMDAwMF1cclxuICAgICAgICA6IHguY1swXSA8IDhlMTMgfHwgbklzQmlnICYmIHguY1swXSA8PSA5OTk5OTc1ZTcpKSkge1xyXG5cclxuICAgICAgICAvLyBJZiB4IGlzIG5lZ2F0aXZlIGFuZCBuIGlzIG9kZCwgayA9IC0wLCBlbHNlIGsgPSAwLlxyXG4gICAgICAgIGsgPSB4LnMgPCAwICYmIGlzT2RkKG4pID8gLTAgOiAwO1xyXG5cclxuICAgICAgICAvLyBJZiB4ID49IDEsIGsgPSDCsUluZmluaXR5LlxyXG4gICAgICAgIGlmICh4LmUgPiAtMSkgayA9IDEgLyBrO1xyXG5cclxuICAgICAgICAvLyBJZiBuIGlzIG5lZ2F0aXZlIHJldHVybiDCsTAsIGVsc2UgcmV0dXJuIMKxSW5maW5pdHkuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIobklzTmVnID8gMSAvIGsgOiBrKTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAoUE9XX1BSRUNJU0lPTikge1xyXG5cclxuICAgICAgICAvLyBUcnVuY2F0aW5nIGVhY2ggY29lZmZpY2llbnQgYXJyYXkgdG8gYSBsZW5ndGggb2YgayBhZnRlciBlYWNoIG11bHRpcGxpY2F0aW9uXHJcbiAgICAgICAgLy8gZXF1YXRlcyB0byB0cnVuY2F0aW5nIHNpZ25pZmljYW50IGRpZ2l0cyB0byBQT1dfUFJFQ0lTSU9OICsgWzI4LCA0MV0sXHJcbiAgICAgICAgLy8gaS5lLiB0aGVyZSB3aWxsIGJlIGEgbWluaW11bSBvZiAyOCBndWFyZCBkaWdpdHMgcmV0YWluZWQuXHJcbiAgICAgICAgayA9IG1hdGhjZWlsKFBPV19QUkVDSVNJT04gLyBMT0dfQkFTRSArIDIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobklzQmlnKSB7XHJcbiAgICAgICAgaGFsZiA9IG5ldyBCaWdOdW1iZXIoMC41KTtcclxuICAgICAgICBpZiAobklzTmVnKSBuLnMgPSAxO1xyXG4gICAgICAgIG5Jc09kZCA9IGlzT2RkKG4pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGkgPSBNYXRoLmFicygrdmFsdWVPZihuKSk7XHJcbiAgICAgICAgbklzT2RkID0gaSAlIDI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKE9ORSk7XHJcblxyXG4gICAgICAvLyBQZXJmb3JtcyA1NCBsb29wIGl0ZXJhdGlvbnMgZm9yIG4gb2YgOTAwNzE5OTI1NDc0MDk5MS5cclxuICAgICAgZm9yICg7IDspIHtcclxuXHJcbiAgICAgICAgaWYgKG5Jc09kZCkge1xyXG4gICAgICAgICAgeSA9IHkudGltZXMoeCk7XHJcbiAgICAgICAgICBpZiAoIXkuYykgYnJlYWs7XHJcblxyXG4gICAgICAgICAgaWYgKGspIHtcclxuICAgICAgICAgICAgaWYgKHkuYy5sZW5ndGggPiBrKSB5LmMubGVuZ3RoID0gaztcclxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb2RFeHApIHtcclxuICAgICAgICAgICAgeSA9IHkubW9kKG0pOyAgICAvL3kgPSB5Lm1pbnVzKGRpdih5LCBtLCAwLCBNT0RVTE9fTU9ERSkudGltZXMobSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGkpIHtcclxuICAgICAgICAgIGkgPSBtYXRoZmxvb3IoaSAvIDIpO1xyXG4gICAgICAgICAgaWYgKGkgPT09IDApIGJyZWFrO1xyXG4gICAgICAgICAgbklzT2RkID0gaSAlIDI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG4gPSBuLnRpbWVzKGhhbGYpO1xyXG4gICAgICAgICAgcm91bmQobiwgbi5lICsgMSwgMSk7XHJcblxyXG4gICAgICAgICAgaWYgKG4uZSA+IDE0KSB7XHJcbiAgICAgICAgICAgIG5Jc09kZCA9IGlzT2RkKG4pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaSA9ICt2YWx1ZU9mKG4pO1xyXG4gICAgICAgICAgICBpZiAoaSA9PT0gMCkgYnJlYWs7XHJcbiAgICAgICAgICAgIG5Jc09kZCA9IGkgJSAyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgeCA9IHgudGltZXMoeCk7XHJcblxyXG4gICAgICAgIGlmIChrKSB7XHJcbiAgICAgICAgICBpZiAoeC5jICYmIHguYy5sZW5ndGggPiBrKSB4LmMubGVuZ3RoID0gaztcclxuICAgICAgICB9IGVsc2UgaWYgKGlzTW9kRXhwKSB7XHJcbiAgICAgICAgICB4ID0geC5tb2QobSk7ICAgIC8veCA9IHgubWludXMoZGl2KHgsIG0sIDAsIE1PRFVMT19NT0RFKS50aW1lcyhtKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNNb2RFeHApIHJldHVybiB5O1xyXG4gICAgICBpZiAobklzTmVnKSB5ID0gT05FLmRpdih5KTtcclxuXHJcbiAgICAgIHJldHVybiBtID8geS5tb2QobSkgOiBrID8gcm91bmQoeSwgUE9XX1BSRUNJU0lPTiwgUk9VTkRJTkdfTU9ERSwgbW9yZSkgOiB5O1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIHJvdW5kZWQgdG8gYW4gaW50ZWdlclxyXG4gICAgICogdXNpbmcgcm91bmRpbmcgbW9kZSBybSwgb3IgUk9VTkRJTkdfTU9ERSBpZiBybSBpcyBvbWl0dGVkLlxyXG4gICAgICpcclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3JtfSdcclxuICAgICAqL1xyXG4gICAgUC5pbnRlZ2VyVmFsdWUgPSBmdW5jdGlvbiAocm0pIHtcclxuICAgICAgdmFyIG4gPSBuZXcgQmlnTnVtYmVyKHRoaXMpO1xyXG4gICAgICBpZiAocm0gPT0gbnVsbCkgcm0gPSBST1VORElOR19NT0RFO1xyXG4gICAgICBlbHNlIGludENoZWNrKHJtLCAwLCA4KTtcclxuICAgICAgcmV0dXJuIHJvdW5kKG4sIG4uZSArIDEsIHJtKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIEJpZ051bWJlcih5LCBiKSxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNFcXVhbFRvID0gUC5lcSA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpID09PSAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBhIGZpbml0ZSBudW1iZXIsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNGaW5pdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiAhIXRoaXMuYztcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBvZiBCaWdOdW1iZXIoeSwgYiksXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzR3JlYXRlclRoYW4gPSBQLmd0ID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkgPiAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYiksIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNHcmVhdGVyVGhhbk9yRXF1YWxUbyA9IFAuZ3RlID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgcmV0dXJuIChiID0gY29tcGFyZSh0aGlzLCBuZXcgQmlnTnVtYmVyKHksIGIpKSkgPT09IDEgfHwgYiA9PT0gMDtcclxuXHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGFuIGludGVnZXIsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNJbnRlZ2VyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gISF0aGlzLmMgJiYgYml0Rmxvb3IodGhpcy5lIC8gTE9HX0JBU0UpID4gdGhpcy5jLmxlbmd0aCAtIDI7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIGxlc3MgdGhhbiB0aGUgdmFsdWUgb2YgQmlnTnVtYmVyKHksIGIpLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc0xlc3NUaGFuID0gUC5sdCA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiBjb21wYXJlKHRoaXMsIG5ldyBCaWdOdW1iZXIoeSwgYikpIDwgMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBQLmlzTGVzc1RoYW5PckVxdWFsVG8gPSBQLmx0ZSA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHJldHVybiAoYiA9IGNvbXBhcmUodGhpcywgbmV3IEJpZ051bWJlcih5LCBiKSkpID09PSAtMSB8fCBiID09PSAwO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBOYU4sIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNOYU4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy5zO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpcyBuZWdhdGl2ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgICAqL1xyXG4gICAgUC5pc05lZ2F0aXZlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zIDwgMDtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgcG9zaXRpdmUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNQb3NpdGl2ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucyA+IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGlzIDAgb3IgLTAsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIFAuaXNaZXJvID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gISF0aGlzLmMgJiYgdGhpcy5jWzBdID09IDA7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIG4gLSAwID0gblxyXG4gICAgICogIG4gLSBOID0gTlxyXG4gICAgICogIG4gLSBJID0gLUlcclxuICAgICAqICAwIC0gbiA9IC1uXHJcbiAgICAgKiAgMCAtIDAgPSAwXHJcbiAgICAgKiAgMCAtIE4gPSBOXHJcbiAgICAgKiAgMCAtIEkgPSAtSVxyXG4gICAgICogIE4gLSBuID0gTlxyXG4gICAgICogIE4gLSAwID0gTlxyXG4gICAgICogIE4gLSBOID0gTlxyXG4gICAgICogIE4gLSBJID0gTlxyXG4gICAgICogIEkgLSBuID0gSVxyXG4gICAgICogIEkgLSAwID0gSVxyXG4gICAgICogIEkgLSBOID0gTlxyXG4gICAgICogIEkgLSBJID0gTlxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIG1pbnVzIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLlxyXG4gICAgICovXHJcbiAgICBQLm1pbnVzID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgdmFyIGksIGosIHQsIHhMVHksXHJcbiAgICAgICAgeCA9IHRoaXMsXHJcbiAgICAgICAgYSA9IHgucztcclxuXHJcbiAgICAgIHkgPSBuZXcgQmlnTnVtYmVyKHksIGIpO1xyXG4gICAgICBiID0geS5zO1xyXG5cclxuICAgICAgLy8gRWl0aGVyIE5hTj9cclxuICAgICAgaWYgKCFhIHx8ICFiKSByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xyXG5cclxuICAgICAgLy8gU2lnbnMgZGlmZmVyP1xyXG4gICAgICBpZiAoYSAhPSBiKSB7XHJcbiAgICAgICAgeS5zID0gLWI7XHJcbiAgICAgICAgcmV0dXJuIHgucGx1cyh5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHhlID0geC5lIC8gTE9HX0JBU0UsXHJcbiAgICAgICAgeWUgPSB5LmUgLyBMT0dfQkFTRSxcclxuICAgICAgICB4YyA9IHguYyxcclxuICAgICAgICB5YyA9IHkuYztcclxuXHJcbiAgICAgIGlmICgheGUgfHwgIXllKSB7XHJcblxyXG4gICAgICAgIC8vIEVpdGhlciBJbmZpbml0eT9cclxuICAgICAgICBpZiAoIXhjIHx8ICF5YykgcmV0dXJuIHhjID8gKHkucyA9IC1iLCB5KSA6IG5ldyBCaWdOdW1iZXIoeWMgPyB4IDogTmFOKTtcclxuXHJcbiAgICAgICAgLy8gRWl0aGVyIHplcm8/XHJcbiAgICAgICAgaWYgKCF4Y1swXSB8fCAheWNbMF0pIHtcclxuXHJcbiAgICAgICAgICAvLyBSZXR1cm4geSBpZiB5IGlzIG5vbi16ZXJvLCB4IGlmIHggaXMgbm9uLXplcm8sIG9yIHplcm8gaWYgYm90aCBhcmUgemVyby5cclxuICAgICAgICAgIHJldHVybiB5Y1swXSA/ICh5LnMgPSAtYiwgeSkgOiBuZXcgQmlnTnVtYmVyKHhjWzBdID8geCA6XHJcblxyXG4gICAgICAgICAgIC8vIElFRUUgNzU0ICgyMDA4KSA2LjM6IG4gLSBuID0gLTAgd2hlbiByb3VuZGluZyB0byAtSW5maW5pdHlcclxuICAgICAgICAgICBST1VORElOR19NT0RFID09IDMgPyAtMCA6IDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgeGUgPSBiaXRGbG9vcih4ZSk7XHJcbiAgICAgIHllID0gYml0Rmxvb3IoeWUpO1xyXG4gICAgICB4YyA9IHhjLnNsaWNlKCk7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggaXMgdGhlIGJpZ2dlciBudW1iZXIuXHJcbiAgICAgIGlmIChhID0geGUgLSB5ZSkge1xyXG5cclxuICAgICAgICBpZiAoeExUeSA9IGEgPCAwKSB7XHJcbiAgICAgICAgICBhID0gLWE7XHJcbiAgICAgICAgICB0ID0geGM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHllID0geGU7XHJcbiAgICAgICAgICB0ID0geWM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0LnJldmVyc2UoKTtcclxuXHJcbiAgICAgICAgLy8gUHJlcGVuZCB6ZXJvcyB0byBlcXVhbGlzZSBleHBvbmVudHMuXHJcbiAgICAgICAgZm9yIChiID0gYTsgYi0tOyB0LnB1c2goMCkpO1xyXG4gICAgICAgIHQucmV2ZXJzZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAvLyBFeHBvbmVudHMgZXF1YWwuIENoZWNrIGRpZ2l0IGJ5IGRpZ2l0LlxyXG4gICAgICAgIGogPSAoeExUeSA9IChhID0geGMubGVuZ3RoKSA8IChiID0geWMubGVuZ3RoKSkgPyBhIDogYjtcclxuXHJcbiAgICAgICAgZm9yIChhID0gYiA9IDA7IGIgPCBqOyBiKyspIHtcclxuXHJcbiAgICAgICAgICBpZiAoeGNbYl0gIT0geWNbYl0pIHtcclxuICAgICAgICAgICAgeExUeSA9IHhjW2JdIDwgeWNbYl07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8geCA8IHk/IFBvaW50IHhjIHRvIHRoZSBhcnJheSBvZiB0aGUgYmlnZ2VyIG51bWJlci5cclxuICAgICAgaWYgKHhMVHkpIHQgPSB4YywgeGMgPSB5YywgeWMgPSB0LCB5LnMgPSAteS5zO1xyXG5cclxuICAgICAgYiA9IChqID0geWMubGVuZ3RoKSAtIChpID0geGMubGVuZ3RoKTtcclxuXHJcbiAgICAgIC8vIEFwcGVuZCB6ZXJvcyB0byB4YyBpZiBzaG9ydGVyLlxyXG4gICAgICAvLyBObyBuZWVkIHRvIGFkZCB6ZXJvcyB0byB5YyBpZiBzaG9ydGVyIGFzIHN1YnRyYWN0IG9ubHkgbmVlZHMgdG8gc3RhcnQgYXQgeWMubGVuZ3RoLlxyXG4gICAgICBpZiAoYiA+IDApIGZvciAoOyBiLS07IHhjW2krK10gPSAwKTtcclxuICAgICAgYiA9IEJBU0UgLSAxO1xyXG5cclxuICAgICAgLy8gU3VidHJhY3QgeWMgZnJvbSB4Yy5cclxuICAgICAgZm9yICg7IGogPiBhOykge1xyXG5cclxuICAgICAgICBpZiAoeGNbLS1qXSA8IHljW2pdKSB7XHJcbiAgICAgICAgICBmb3IgKGkgPSBqOyBpICYmICF4Y1stLWldOyB4Y1tpXSA9IGIpO1xyXG4gICAgICAgICAgLS14Y1tpXTtcclxuICAgICAgICAgIHhjW2pdICs9IEJBU0U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB4Y1tqXSAtPSB5Y1tqXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgemVyb3MgYW5kIGFkanVzdCBleHBvbmVudCBhY2NvcmRpbmdseS5cclxuICAgICAgZm9yICg7IHhjWzBdID09IDA7IHhjLnNwbGljZSgwLCAxKSwgLS15ZSk7XHJcblxyXG4gICAgICAvLyBaZXJvP1xyXG4gICAgICBpZiAoIXhjWzBdKSB7XHJcblxyXG4gICAgICAgIC8vIEZvbGxvd2luZyBJRUVFIDc1NCAoMjAwOCkgNi4zLFxyXG4gICAgICAgIC8vIG4gLSBuID0gKzAgIGJ1dCAgbiAtIG4gPSAtMCAgd2hlbiByb3VuZGluZyB0b3dhcmRzIC1JbmZpbml0eS5cclxuICAgICAgICB5LnMgPSBST1VORElOR19NT0RFID09IDMgPyAtMSA6IDE7XHJcbiAgICAgICAgeS5jID0gW3kuZSA9IDBdO1xyXG4gICAgICAgIHJldHVybiB5O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGZvciBJbmZpbml0eSBhcyAreCAtICt5ICE9IEluZmluaXR5ICYmIC14IC0gLXkgIT0gSW5maW5pdHlcclxuICAgICAgLy8gZm9yIGZpbml0ZSB4IGFuZCB5LlxyXG4gICAgICByZXR1cm4gbm9ybWFsaXNlKHksIHhjLCB5ZSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogICBuICUgMCA9ICBOXHJcbiAgICAgKiAgIG4gJSBOID0gIE5cclxuICAgICAqICAgbiAlIEkgPSAgblxyXG4gICAgICogICAwICUgbiA9ICAwXHJcbiAgICAgKiAgLTAgJSBuID0gLTBcclxuICAgICAqICAgMCAlIDAgPSAgTlxyXG4gICAgICogICAwICUgTiA9ICBOXHJcbiAgICAgKiAgIDAgJSBJID0gIDBcclxuICAgICAqICAgTiAlIG4gPSAgTlxyXG4gICAgICogICBOICUgMCA9ICBOXHJcbiAgICAgKiAgIE4gJSBOID0gIE5cclxuICAgICAqICAgTiAlIEkgPSAgTlxyXG4gICAgICogICBJICUgbiA9ICBOXHJcbiAgICAgKiAgIEkgJSAwID0gIE5cclxuICAgICAqICAgSSAlIE4gPSAgTlxyXG4gICAgICogICBJICUgSSA9ICBOXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgbW9kdWxvIHRoZSB2YWx1ZSBvZlxyXG4gICAgICogQmlnTnVtYmVyKHksIGIpLiBUaGUgcmVzdWx0IGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIE1PRFVMT19NT0RFLlxyXG4gICAgICovXHJcbiAgICBQLm1vZHVsbyA9IFAubW9kID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgdmFyIHEsIHMsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICB5ID0gbmV3IEJpZ051bWJlcih5LCBiKTtcclxuXHJcbiAgICAgIC8vIFJldHVybiBOYU4gaWYgeCBpcyBJbmZpbml0eSBvciBOYU4sIG9yIHkgaXMgTmFOIG9yIHplcm8uXHJcbiAgICAgIGlmICgheC5jIHx8ICF5LnMgfHwgeS5jICYmICF5LmNbMF0pIHtcclxuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIHggaWYgeSBpcyBJbmZpbml0eSBvciB4IGlzIHplcm8uXHJcbiAgICAgIH0gZWxzZSBpZiAoIXkuYyB8fCB4LmMgJiYgIXguY1swXSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoTU9EVUxPX01PREUgPT0gOSkge1xyXG5cclxuICAgICAgICAvLyBFdWNsaWRpYW4gZGl2aXNpb246IHEgPSBzaWduKHkpICogZmxvb3IoeCAvIGFicyh5KSlcclxuICAgICAgICAvLyByID0geCAtIHF5ICAgIHdoZXJlICAwIDw9IHIgPCBhYnMoeSlcclxuICAgICAgICBzID0geS5zO1xyXG4gICAgICAgIHkucyA9IDE7XHJcbiAgICAgICAgcSA9IGRpdih4LCB5LCAwLCAzKTtcclxuICAgICAgICB5LnMgPSBzO1xyXG4gICAgICAgIHEucyAqPSBzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHEgPSBkaXYoeCwgeSwgMCwgTU9EVUxPX01PREUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB5ID0geC5taW51cyhxLnRpbWVzKHkpKTtcclxuXHJcbiAgICAgIC8vIFRvIG1hdGNoIEphdmFTY3JpcHQgJSwgZW5zdXJlIHNpZ24gb2YgemVybyBpcyBzaWduIG9mIGRpdmlkZW5kLlxyXG4gICAgICBpZiAoIXkuY1swXSAmJiBNT0RVTE9fTU9ERSA9PSAxKSB5LnMgPSB4LnM7XHJcblxyXG4gICAgICByZXR1cm4geTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiAgbiAqIDAgPSAwXHJcbiAgICAgKiAgbiAqIE4gPSBOXHJcbiAgICAgKiAgbiAqIEkgPSBJXHJcbiAgICAgKiAgMCAqIG4gPSAwXHJcbiAgICAgKiAgMCAqIDAgPSAwXHJcbiAgICAgKiAgMCAqIE4gPSBOXHJcbiAgICAgKiAgMCAqIEkgPSBOXHJcbiAgICAgKiAgTiAqIG4gPSBOXHJcbiAgICAgKiAgTiAqIDAgPSBOXHJcbiAgICAgKiAgTiAqIE4gPSBOXHJcbiAgICAgKiAgTiAqIEkgPSBOXHJcbiAgICAgKiAgSSAqIG4gPSBJXHJcbiAgICAgKiAgSSAqIDAgPSBOXHJcbiAgICAgKiAgSSAqIE4gPSBOXHJcbiAgICAgKiAgSSAqIEkgPSBJXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgbXVsdGlwbGllZCBieSB0aGUgdmFsdWVcclxuICAgICAqIG9mIEJpZ051bWJlcih5LCBiKS5cclxuICAgICAqL1xyXG4gICAgUC5tdWx0aXBsaWVkQnkgPSBQLnRpbWVzID0gZnVuY3Rpb24gKHksIGIpIHtcclxuICAgICAgdmFyIGMsIGUsIGksIGosIGssIG0sIHhjTCwgeGxvLCB4aGksIHljTCwgeWxvLCB5aGksIHpjLFxyXG4gICAgICAgIGJhc2UsIHNxcnRCYXNlLFxyXG4gICAgICAgIHggPSB0aGlzLFxyXG4gICAgICAgIHhjID0geC5jLFxyXG4gICAgICAgIHljID0gKHkgPSBuZXcgQmlnTnVtYmVyKHksIGIpKS5jO1xyXG5cclxuICAgICAgLy8gRWl0aGVyIE5hTiwgwrFJbmZpbml0eSBvciDCsTA/XHJcbiAgICAgIGlmICgheGMgfHwgIXljIHx8ICF4Y1swXSB8fCAheWNbMF0pIHtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIE5hTiBpZiBlaXRoZXIgaXMgTmFOLCBvciBvbmUgaXMgMCBhbmQgdGhlIG90aGVyIGlzIEluZmluaXR5LlxyXG4gICAgICAgIGlmICgheC5zIHx8ICF5LnMgfHwgeGMgJiYgIXhjWzBdICYmICF5YyB8fCB5YyAmJiAheWNbMF0gJiYgIXhjKSB7XHJcbiAgICAgICAgICB5LmMgPSB5LmUgPSB5LnMgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB5LnMgKj0geC5zO1xyXG5cclxuICAgICAgICAgIC8vIFJldHVybiDCsUluZmluaXR5IGlmIGVpdGhlciBpcyDCsUluZmluaXR5LlxyXG4gICAgICAgICAgaWYgKCF4YyB8fCAheWMpIHtcclxuICAgICAgICAgICAgeS5jID0geS5lID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAvLyBSZXR1cm4gwrEwIGlmIGVpdGhlciBpcyDCsTAuXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB5LmMgPSBbMF07XHJcbiAgICAgICAgICAgIHkuZSA9IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4geTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZSA9IGJpdEZsb29yKHguZSAvIExPR19CQVNFKSArIGJpdEZsb29yKHkuZSAvIExPR19CQVNFKTtcclxuICAgICAgeS5zICo9IHgucztcclxuICAgICAgeGNMID0geGMubGVuZ3RoO1xyXG4gICAgICB5Y0wgPSB5Yy5sZW5ndGg7XHJcblxyXG4gICAgICAvLyBFbnN1cmUgeGMgcG9pbnRzIHRvIGxvbmdlciBhcnJheSBhbmQgeGNMIHRvIGl0cyBsZW5ndGguXHJcbiAgICAgIGlmICh4Y0wgPCB5Y0wpIHpjID0geGMsIHhjID0geWMsIHljID0gemMsIGkgPSB4Y0wsIHhjTCA9IHljTCwgeWNMID0gaTtcclxuXHJcbiAgICAgIC8vIEluaXRpYWxpc2UgdGhlIHJlc3VsdCBhcnJheSB3aXRoIHplcm9zLlxyXG4gICAgICBmb3IgKGkgPSB4Y0wgKyB5Y0wsIHpjID0gW107IGktLTsgemMucHVzaCgwKSk7XHJcblxyXG4gICAgICBiYXNlID0gQkFTRTtcclxuICAgICAgc3FydEJhc2UgPSBTUVJUX0JBU0U7XHJcblxyXG4gICAgICBmb3IgKGkgPSB5Y0w7IC0taSA+PSAwOykge1xyXG4gICAgICAgIGMgPSAwO1xyXG4gICAgICAgIHlsbyA9IHljW2ldICUgc3FydEJhc2U7XHJcbiAgICAgICAgeWhpID0geWNbaV0gLyBzcXJ0QmFzZSB8IDA7XHJcblxyXG4gICAgICAgIGZvciAoayA9IHhjTCwgaiA9IGkgKyBrOyBqID4gaTspIHtcclxuICAgICAgICAgIHhsbyA9IHhjWy0ta10gJSBzcXJ0QmFzZTtcclxuICAgICAgICAgIHhoaSA9IHhjW2tdIC8gc3FydEJhc2UgfCAwO1xyXG4gICAgICAgICAgbSA9IHloaSAqIHhsbyArIHhoaSAqIHlsbztcclxuICAgICAgICAgIHhsbyA9IHlsbyAqIHhsbyArICgobSAlIHNxcnRCYXNlKSAqIHNxcnRCYXNlKSArIHpjW2pdICsgYztcclxuICAgICAgICAgIGMgPSAoeGxvIC8gYmFzZSB8IDApICsgKG0gLyBzcXJ0QmFzZSB8IDApICsgeWhpICogeGhpO1xyXG4gICAgICAgICAgemNbai0tXSA9IHhsbyAlIGJhc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB6Y1tqXSA9IGM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjKSB7XHJcbiAgICAgICAgKytlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHpjLnNwbGljZSgwLCAxKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG5vcm1hbGlzZSh5LCB6YywgZSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgbmV3IEJpZ051bWJlciB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgbmVnYXRlZCxcclxuICAgICAqIGkuZS4gbXVsdGlwbGllZCBieSAtMS5cclxuICAgICAqL1xyXG4gICAgUC5uZWdhdGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgeCA9IG5ldyBCaWdOdW1iZXIodGhpcyk7XHJcbiAgICAgIHgucyA9IC14LnMgfHwgbnVsbDtcclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogIG4gKyAwID0gblxyXG4gICAgICogIG4gKyBOID0gTlxyXG4gICAgICogIG4gKyBJID0gSVxyXG4gICAgICogIDAgKyBuID0gblxyXG4gICAgICogIDAgKyAwID0gMFxyXG4gICAgICogIDAgKyBOID0gTlxyXG4gICAgICogIDAgKyBJID0gSVxyXG4gICAgICogIE4gKyBuID0gTlxyXG4gICAgICogIE4gKyAwID0gTlxyXG4gICAgICogIE4gKyBOID0gTlxyXG4gICAgICogIE4gKyBJID0gTlxyXG4gICAgICogIEkgKyBuID0gSVxyXG4gICAgICogIEkgKyAwID0gSVxyXG4gICAgICogIEkgKyBOID0gTlxyXG4gICAgICogIEkgKyBJID0gSVxyXG4gICAgICpcclxuICAgICAqIFJldHVybiBhIG5ldyBCaWdOdW1iZXIgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIHBsdXMgdGhlIHZhbHVlIG9mXHJcbiAgICAgKiBCaWdOdW1iZXIoeSwgYikuXHJcbiAgICAgKi9cclxuICAgIFAucGx1cyA9IGZ1bmN0aW9uICh5LCBiKSB7XHJcbiAgICAgIHZhciB0LFxyXG4gICAgICAgIHggPSB0aGlzLFxyXG4gICAgICAgIGEgPSB4LnM7XHJcblxyXG4gICAgICB5ID0gbmV3IEJpZ051bWJlcih5LCBiKTtcclxuICAgICAgYiA9IHkucztcclxuXHJcbiAgICAgIC8vIEVpdGhlciBOYU4/XHJcbiAgICAgIGlmICghYSB8fCAhYikgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcclxuXHJcbiAgICAgIC8vIFNpZ25zIGRpZmZlcj9cclxuICAgICAgIGlmIChhICE9IGIpIHtcclxuICAgICAgICB5LnMgPSAtYjtcclxuICAgICAgICByZXR1cm4geC5taW51cyh5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHhlID0geC5lIC8gTE9HX0JBU0UsXHJcbiAgICAgICAgeWUgPSB5LmUgLyBMT0dfQkFTRSxcclxuICAgICAgICB4YyA9IHguYyxcclxuICAgICAgICB5YyA9IHkuYztcclxuXHJcbiAgICAgIGlmICgheGUgfHwgIXllKSB7XHJcblxyXG4gICAgICAgIC8vIFJldHVybiDCsUluZmluaXR5IGlmIGVpdGhlciDCsUluZmluaXR5LlxyXG4gICAgICAgIGlmICgheGMgfHwgIXljKSByZXR1cm4gbmV3IEJpZ051bWJlcihhIC8gMCk7XHJcblxyXG4gICAgICAgIC8vIEVpdGhlciB6ZXJvP1xyXG4gICAgICAgIC8vIFJldHVybiB5IGlmIHkgaXMgbm9uLXplcm8sIHggaWYgeCBpcyBub24temVybywgb3IgemVybyBpZiBib3RoIGFyZSB6ZXJvLlxyXG4gICAgICAgIGlmICgheGNbMF0gfHwgIXljWzBdKSByZXR1cm4geWNbMF0gPyB5IDogbmV3IEJpZ051bWJlcih4Y1swXSA/IHggOiBhICogMCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHhlID0gYml0Rmxvb3IoeGUpO1xyXG4gICAgICB5ZSA9IGJpdEZsb29yKHllKTtcclxuICAgICAgeGMgPSB4Yy5zbGljZSgpO1xyXG5cclxuICAgICAgLy8gUHJlcGVuZCB6ZXJvcyB0byBlcXVhbGlzZSBleHBvbmVudHMuIEZhc3RlciB0byB1c2UgcmV2ZXJzZSB0aGVuIGRvIHVuc2hpZnRzLlxyXG4gICAgICBpZiAoYSA9IHhlIC0geWUpIHtcclxuICAgICAgICBpZiAoYSA+IDApIHtcclxuICAgICAgICAgIHllID0geGU7XHJcbiAgICAgICAgICB0ID0geWM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGEgPSAtYTtcclxuICAgICAgICAgIHQgPSB4YztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHQucmV2ZXJzZSgpO1xyXG4gICAgICAgIGZvciAoOyBhLS07IHQucHVzaCgwKSk7XHJcbiAgICAgICAgdC5yZXZlcnNlKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGEgPSB4Yy5sZW5ndGg7XHJcbiAgICAgIGIgPSB5Yy5sZW5ndGg7XHJcblxyXG4gICAgICAvLyBQb2ludCB4YyB0byB0aGUgbG9uZ2VyIGFycmF5LCBhbmQgYiB0byB0aGUgc2hvcnRlciBsZW5ndGguXHJcbiAgICAgIGlmIChhIC0gYiA8IDApIHQgPSB5YywgeWMgPSB4YywgeGMgPSB0LCBiID0gYTtcclxuXHJcbiAgICAgIC8vIE9ubHkgc3RhcnQgYWRkaW5nIGF0IHljLmxlbmd0aCAtIDEgYXMgdGhlIGZ1cnRoZXIgZGlnaXRzIG9mIHhjIGNhbiBiZSBpZ25vcmVkLlxyXG4gICAgICBmb3IgKGEgPSAwOyBiOykge1xyXG4gICAgICAgIGEgPSAoeGNbLS1iXSA9IHhjW2JdICsgeWNbYl0gKyBhKSAvIEJBU0UgfCAwO1xyXG4gICAgICAgIHhjW2JdID0gQkFTRSA9PT0geGNbYl0gPyAwIDogeGNbYl0gJSBCQVNFO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYSkge1xyXG4gICAgICAgIHhjID0gW2FdLmNvbmNhdCh4Yyk7XHJcbiAgICAgICAgKyt5ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTm8gbmVlZCB0byBjaGVjayBmb3IgemVybywgYXMgK3ggKyAreSAhPSAwICYmIC14ICsgLXkgIT0gMFxyXG4gICAgICAvLyB5ZSA9IE1BWF9FWFAgKyAxIHBvc3NpYmxlXHJcbiAgICAgIHJldHVybiBub3JtYWxpc2UoeSwgeGMsIHllKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBJZiBzZCBpcyB1bmRlZmluZWQgb3IgbnVsbCBvciB0cnVlIG9yIGZhbHNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgb2ZcclxuICAgICAqIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciwgb3IgbnVsbCBpZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaXMgwrFJbmZpbml0eSBvciBOYU4uXHJcbiAgICAgKiBJZiBzZCBpcyB0cnVlIGluY2x1ZGUgaW50ZWdlci1wYXJ0IHRyYWlsaW5nIHplcm9zIGluIHRoZSBjb3VudC5cclxuICAgICAqXHJcbiAgICAgKiBPdGhlcndpc2UsIGlmIHNkIGlzIGEgbnVtYmVyLCByZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzXHJcbiAgICAgKiBCaWdOdW1iZXIgcm91bmRlZCB0byBhIG1heGltdW0gb2Ygc2Qgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0sIG9yXHJcbiAgICAgKiBST1VORElOR19NT0RFIGlmIHJtIGlzIG9taXR0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogc2Qge251bWJlcnxib29sZWFufSBudW1iZXI6IHNpZ25pZmljYW50IGRpZ2l0czogaW50ZWdlciwgMSB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICBib29sZWFuOiB3aGV0aGVyIHRvIGNvdW50IGludGVnZXItcGFydCB0cmFpbGluZyB6ZXJvczogdHJ1ZSBvciBmYWxzZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge3NkfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC5wcmVjaXNpb24gPSBQLnNkID0gZnVuY3Rpb24gKHNkLCBybSkge1xyXG4gICAgICB2YXIgYywgbiwgdixcclxuICAgICAgICB4ID0gdGhpcztcclxuXHJcbiAgICAgIGlmIChzZCAhPSBudWxsICYmIHNkICE9PSAhIXNkKSB7XHJcbiAgICAgICAgaW50Q2hlY2soc2QsIDEsIE1BWCk7XHJcbiAgICAgICAgaWYgKHJtID09IG51bGwpIHJtID0gUk9VTkRJTkdfTU9ERTtcclxuICAgICAgICBlbHNlIGludENoZWNrKHJtLCAwLCA4KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJvdW5kKG5ldyBCaWdOdW1iZXIoeCksIHNkLCBybSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghKGMgPSB4LmMpKSByZXR1cm4gbnVsbDtcclxuICAgICAgdiA9IGMubGVuZ3RoIC0gMTtcclxuICAgICAgbiA9IHYgKiBMT0dfQkFTRSArIDE7XHJcblxyXG4gICAgICBpZiAodiA9IGNbdl0pIHtcclxuXHJcbiAgICAgICAgLy8gU3VidHJhY3QgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvcyBvZiB0aGUgbGFzdCBlbGVtZW50LlxyXG4gICAgICAgIGZvciAoOyB2ICUgMTAgPT0gMDsgdiAvPSAxMCwgbi0tKTtcclxuXHJcbiAgICAgICAgLy8gQWRkIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHRoZSBmaXJzdCBlbGVtZW50LlxyXG4gICAgICAgIGZvciAodiA9IGNbMF07IHYgPj0gMTA7IHYgLz0gMTAsIG4rKyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzZCAmJiB4LmUgKyAxID4gbikgbiA9IHguZSArIDE7XHJcblxyXG4gICAgICByZXR1cm4gbjtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBzaGlmdGVkIGJ5IGsgcGxhY2VzXHJcbiAgICAgKiAocG93ZXJzIG9mIDEwKS4gU2hpZnQgdG8gdGhlIHJpZ2h0IGlmIG4gPiAwLCBhbmQgdG8gdGhlIGxlZnQgaWYgbiA8IDAuXHJcbiAgICAgKlxyXG4gICAgICogayB7bnVtYmVyfSBJbnRlZ2VyLCAtTUFYX1NBRkVfSU5URUdFUiB0byBNQVhfU0FGRV9JTlRFR0VSIGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2t9J1xyXG4gICAgICovXHJcbiAgICBQLnNoaWZ0ZWRCeSA9IGZ1bmN0aW9uIChrKSB7XHJcbiAgICAgIGludENoZWNrKGssIC1NQVhfU0FGRV9JTlRFR0VSLCBNQVhfU0FGRV9JTlRFR0VSKTtcclxuICAgICAgcmV0dXJuIHRoaXMudGltZXMoJzFlJyArIGspO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqICBzcXJ0KC1uKSA9ICBOXHJcbiAgICAgKiAgc3FydChOKSA9ICBOXHJcbiAgICAgKiAgc3FydCgtSSkgPSAgTlxyXG4gICAgICogIHNxcnQoSSkgPSAgSVxyXG4gICAgICogIHNxcnQoMCkgPSAgMFxyXG4gICAgICogIHNxcnQoLTApID0gLTBcclxuICAgICAqXHJcbiAgICAgKiBSZXR1cm4gYSBuZXcgQmlnTnVtYmVyIHdob3NlIHZhbHVlIGlzIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIsXHJcbiAgICAgKiByb3VuZGVkIGFjY29yZGluZyB0byBERUNJTUFMX1BMQUNFUyBhbmQgUk9VTkRJTkdfTU9ERS5cclxuICAgICAqL1xyXG4gICAgUC5zcXVhcmVSb290ID0gUC5zcXJ0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgbSwgbiwgciwgcmVwLCB0LFxyXG4gICAgICAgIHggPSB0aGlzLFxyXG4gICAgICAgIGMgPSB4LmMsXHJcbiAgICAgICAgcyA9IHgucyxcclxuICAgICAgICBlID0geC5lLFxyXG4gICAgICAgIGRwID0gREVDSU1BTF9QTEFDRVMgKyA0LFxyXG4gICAgICAgIGhhbGYgPSBuZXcgQmlnTnVtYmVyKCcwLjUnKTtcclxuXHJcbiAgICAgIC8vIE5lZ2F0aXZlL05hTi9JbmZpbml0eS96ZXJvP1xyXG4gICAgICBpZiAocyAhPT0gMSB8fCAhYyB8fCAhY1swXSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKCFzIHx8IHMgPCAwICYmICghYyB8fCBjWzBdKSA/IE5hTiA6IGMgPyB4IDogMSAvIDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJbml0aWFsIGVzdGltYXRlLlxyXG4gICAgICBzID0gTWF0aC5zcXJ0KCt2YWx1ZU9mKHgpKTtcclxuXHJcbiAgICAgIC8vIE1hdGguc3FydCB1bmRlcmZsb3cvb3ZlcmZsb3c/XHJcbiAgICAgIC8vIFBhc3MgeCB0byBNYXRoLnNxcnQgYXMgaW50ZWdlciwgdGhlbiBhZGp1c3QgdGhlIGV4cG9uZW50IG9mIHRoZSByZXN1bHQuXHJcbiAgICAgIGlmIChzID09IDAgfHwgcyA9PSAxIC8gMCkge1xyXG4gICAgICAgIG4gPSBjb2VmZlRvU3RyaW5nKGMpO1xyXG4gICAgICAgIGlmICgobi5sZW5ndGggKyBlKSAlIDIgPT0gMCkgbiArPSAnMCc7XHJcbiAgICAgICAgcyA9IE1hdGguc3FydCgrbik7XHJcbiAgICAgICAgZSA9IGJpdEZsb29yKChlICsgMSkgLyAyKSAtIChlIDwgMCB8fCBlICUgMik7XHJcblxyXG4gICAgICAgIGlmIChzID09IDEgLyAwKSB7XHJcbiAgICAgICAgICBuID0gJzVlJyArIGU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG4gPSBzLnRvRXhwb25lbnRpYWwoKTtcclxuICAgICAgICAgIG4gPSBuLnNsaWNlKDAsIG4uaW5kZXhPZignZScpICsgMSkgKyBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgciA9IG5ldyBCaWdOdW1iZXIobik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgciA9IG5ldyBCaWdOdW1iZXIocyArICcnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ2hlY2sgZm9yIHplcm8uXHJcbiAgICAgIC8vIHIgY291bGQgYmUgemVybyBpZiBNSU5fRVhQIGlzIGNoYW5nZWQgYWZ0ZXIgdGhlIHRoaXMgdmFsdWUgd2FzIGNyZWF0ZWQuXHJcbiAgICAgIC8vIFRoaXMgd291bGQgY2F1c2UgYSBkaXZpc2lvbiBieSB6ZXJvICh4L3QpIGFuZCBoZW5jZSBJbmZpbml0eSBiZWxvdywgd2hpY2ggd291bGQgY2F1c2VcclxuICAgICAgLy8gY29lZmZUb1N0cmluZyB0byB0aHJvdy5cclxuICAgICAgaWYgKHIuY1swXSkge1xyXG4gICAgICAgIGUgPSByLmU7XHJcbiAgICAgICAgcyA9IGUgKyBkcDtcclxuICAgICAgICBpZiAocyA8IDMpIHMgPSAwO1xyXG5cclxuICAgICAgICAvLyBOZXd0b24tUmFwaHNvbiBpdGVyYXRpb24uXHJcbiAgICAgICAgZm9yICg7IDspIHtcclxuICAgICAgICAgIHQgPSByO1xyXG4gICAgICAgICAgciA9IGhhbGYudGltZXModC5wbHVzKGRpdih4LCB0LCBkcCwgMSkpKTtcclxuXHJcbiAgICAgICAgICBpZiAoY29lZmZUb1N0cmluZyh0LmMpLnNsaWNlKDAsIHMpID09PSAobiA9IGNvZWZmVG9TdHJpbmcoci5jKSkuc2xpY2UoMCwgcykpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIFRoZSBleHBvbmVudCBvZiByIG1heSBoZXJlIGJlIG9uZSBsZXNzIHRoYW4gdGhlIGZpbmFsIHJlc3VsdCBleHBvbmVudCxcclxuICAgICAgICAgICAgLy8gZS5nIDAuMDAwOTk5OSAoZS00KSAtLT4gMC4wMDEgKGUtMyksIHNvIGFkanVzdCBzIHNvIHRoZSByb3VuZGluZyBkaWdpdHNcclxuICAgICAgICAgICAgLy8gYXJlIGluZGV4ZWQgY29ycmVjdGx5LlxyXG4gICAgICAgICAgICBpZiAoci5lIDwgZSkgLS1zO1xyXG4gICAgICAgICAgICBuID0gbi5zbGljZShzIC0gMywgcyArIDEpO1xyXG5cclxuICAgICAgICAgICAgLy8gVGhlIDR0aCByb3VuZGluZyBkaWdpdCBtYXkgYmUgaW4gZXJyb3IgYnkgLTEgc28gaWYgdGhlIDQgcm91bmRpbmcgZGlnaXRzXHJcbiAgICAgICAgICAgIC8vIGFyZSA5OTk5IG9yIDQ5OTkgKGkuZS4gYXBwcm9hY2hpbmcgYSByb3VuZGluZyBib3VuZGFyeSkgY29udGludWUgdGhlXHJcbiAgICAgICAgICAgIC8vIGl0ZXJhdGlvbi5cclxuICAgICAgICAgICAgaWYgKG4gPT0gJzk5OTknIHx8ICFyZXAgJiYgbiA9PSAnNDk5OScpIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gT24gdGhlIGZpcnN0IGl0ZXJhdGlvbiBvbmx5LCBjaGVjayB0byBzZWUgaWYgcm91bmRpbmcgdXAgZ2l2ZXMgdGhlXHJcbiAgICAgICAgICAgICAgLy8gZXhhY3QgcmVzdWx0IGFzIHRoZSBuaW5lcyBtYXkgaW5maW5pdGVseSByZXBlYXQuXHJcbiAgICAgICAgICAgICAgaWYgKCFyZXApIHtcclxuICAgICAgICAgICAgICAgIHJvdW5kKHQsIHQuZSArIERFQ0lNQUxfUExBQ0VTICsgMiwgMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHQudGltZXModCkuZXEoeCkpIHtcclxuICAgICAgICAgICAgICAgICAgciA9IHQ7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgZHAgKz0gNDtcclxuICAgICAgICAgICAgICBzICs9IDQ7XHJcbiAgICAgICAgICAgICAgcmVwID0gMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gSWYgcm91bmRpbmcgZGlnaXRzIGFyZSBudWxsLCAwezAsNH0gb3IgNTB7MCwzfSwgY2hlY2sgZm9yIGV4YWN0XHJcbiAgICAgICAgICAgICAgLy8gcmVzdWx0LiBJZiBub3QsIHRoZW4gdGhlcmUgYXJlIGZ1cnRoZXIgZGlnaXRzIGFuZCBtIHdpbGwgYmUgdHJ1dGh5LlxyXG4gICAgICAgICAgICAgIGlmICghK24gfHwgIStuLnNsaWNlKDEpICYmIG4uY2hhckF0KDApID09ICc1Jykge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFRydW5jYXRlIHRvIHRoZSBmaXJzdCByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICAgICAgICAgIHJvdW5kKHIsIHIuZSArIERFQ0lNQUxfUExBQ0VTICsgMiwgMSk7XHJcbiAgICAgICAgICAgICAgICBtID0gIXIudGltZXMocikuZXEoeCk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHJvdW5kKHIsIHIuZSArIERFQ0lNQUxfUExBQ0VTICsgMSwgUk9VTkRJTkdfTU9ERSwgbSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaW4gZXhwb25lbnRpYWwgbm90YXRpb24gYW5kXHJcbiAgICAgKiByb3VuZGVkIHVzaW5nIFJPVU5ESU5HX01PREUgdG8gZHAgZml4ZWQgZGVjaW1hbCBwbGFjZXMuXHJcbiAgICAgKlxyXG4gICAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCB7bm90IGEgcHJpbWl0aXZlIG51bWJlcnxub3QgYW4gaW50ZWdlcnxvdXQgb2YgcmFuZ2V9OiB7ZHB8cm19J1xyXG4gICAgICovXHJcbiAgICBQLnRvRXhwb25lbnRpYWwgPSBmdW5jdGlvbiAoZHAsIHJtKSB7XHJcbiAgICAgIGlmIChkcCAhPSBudWxsKSB7XHJcbiAgICAgICAgaW50Q2hlY2soZHAsIDAsIE1BWCk7XHJcbiAgICAgICAgZHArKztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMsIGRwLCBybSwgMSk7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgaW4gZml4ZWQtcG9pbnQgbm90YXRpb24gcm91bmRpbmdcclxuICAgICAqIHRvIGRwIGZpeGVkIGRlY2ltYWwgcGxhY2VzIHVzaW5nIHJvdW5kaW5nIG1vZGUgcm0sIG9yIFJPVU5ESU5HX01PREUgaWYgcm0gaXMgb21pdHRlZC5cclxuICAgICAqXHJcbiAgICAgKiBOb3RlOiBhcyB3aXRoIEphdmFTY3JpcHQncyBudW1iZXIgdHlwZSwgKC0wKS50b0ZpeGVkKDApIGlzICcwJyxcclxuICAgICAqIGJ1dCBlLmcuICgtMC4wMDAwMSkudG9GaXhlZCgwKSBpcyAnLTAnLlxyXG4gICAgICpcclxuICAgICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYIGluY2x1c2l2ZS5cclxuICAgICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfHJtfSdcclxuICAgICAqL1xyXG4gICAgUC50b0ZpeGVkID0gZnVuY3Rpb24gKGRwLCBybSkge1xyXG4gICAgICBpZiAoZHAgIT0gbnVsbCkge1xyXG4gICAgICAgIGludENoZWNrKGRwLCAwLCBNQVgpO1xyXG4gICAgICAgIGRwID0gZHAgKyB0aGlzLmUgKyAxO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmb3JtYXQodGhpcywgZHAsIHJtKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIEJpZ051bWJlciBpbiBmaXhlZC1wb2ludCBub3RhdGlvbiByb3VuZGVkXHJcbiAgICAgKiB1c2luZyBybSBvciBST1VORElOR19NT0RFIHRvIGRwIGRlY2ltYWwgcGxhY2VzLCBhbmQgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgcHJvcGVydGllc1xyXG4gICAgICogb2YgdGhlIGZvcm1hdCBvciBGT1JNQVQgb2JqZWN0IChzZWUgQmlnTnVtYmVyLnNldCkuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIGZvcm1hdHRpbmcgb2JqZWN0IG1heSBjb250YWluIHNvbWUgb3IgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIHNob3duIGJlbG93LlxyXG4gICAgICpcclxuICAgICAqIEZPUk1BVCA9IHtcclxuICAgICAqICAgcHJlZml4OiAnJyxcclxuICAgICAqICAgZ3JvdXBTaXplOiAzLFxyXG4gICAgICogICBzZWNvbmRhcnlHcm91cFNpemU6IDAsXHJcbiAgICAgKiAgIGdyb3VwU2VwYXJhdG9yOiAnLCcsXHJcbiAgICAgKiAgIGRlY2ltYWxTZXBhcmF0b3I6ICcuJyxcclxuICAgICAqICAgZnJhY3Rpb25Hcm91cFNpemU6IDAsXHJcbiAgICAgKiAgIGZyYWN0aW9uR3JvdXBTZXBhcmF0b3I6ICdcXHhBMCcsICAgICAgLy8gbm9uLWJyZWFraW5nIHNwYWNlXHJcbiAgICAgKiAgIHN1ZmZpeDogJydcclxuICAgICAqIH07XHJcbiAgICAgKlxyXG4gICAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVggaW5jbHVzaXZlLlxyXG4gICAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAgICogW2Zvcm1hdF0ge29iamVjdH0gRm9ybWF0dGluZyBvcHRpb25zLiBTZWUgRk9STUFUIHBiamVjdCBhYm92ZS5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhIHByaW1pdGl2ZSBudW1iZXJ8bm90IGFuIGludGVnZXJ8b3V0IG9mIHJhbmdlfToge2RwfHJtfSdcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBBcmd1bWVudCBub3QgYW4gb2JqZWN0OiB7Zm9ybWF0fSdcclxuICAgICAqL1xyXG4gICAgUC50b0Zvcm1hdCA9IGZ1bmN0aW9uIChkcCwgcm0sIGZvcm1hdCkge1xyXG4gICAgICB2YXIgc3RyLFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgaWYgKGZvcm1hdCA9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKGRwICE9IG51bGwgJiYgcm0gJiYgdHlwZW9mIHJtID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBybTtcclxuICAgICAgICAgIHJtID0gbnVsbDtcclxuICAgICAgICB9IGVsc2UgaWYgKGRwICYmIHR5cGVvZiBkcCA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgZm9ybWF0ID0gZHA7XHJcbiAgICAgICAgICBkcCA9IHJtID0gbnVsbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZm9ybWF0ID0gRk9STUFUO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZm9ybWF0ICE9ICdvYmplY3QnKSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgIChiaWdudW1iZXJFcnJvciArICdBcmd1bWVudCBub3QgYW4gb2JqZWN0OiAnICsgZm9ybWF0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3RyID0geC50b0ZpeGVkKGRwLCBybSk7XHJcblxyXG4gICAgICBpZiAoeC5jKSB7XHJcbiAgICAgICAgdmFyIGksXHJcbiAgICAgICAgICBhcnIgPSBzdHIuc3BsaXQoJy4nKSxcclxuICAgICAgICAgIGcxID0gK2Zvcm1hdC5ncm91cFNpemUsXHJcbiAgICAgICAgICBnMiA9ICtmb3JtYXQuc2Vjb25kYXJ5R3JvdXBTaXplLFxyXG4gICAgICAgICAgZ3JvdXBTZXBhcmF0b3IgPSBmb3JtYXQuZ3JvdXBTZXBhcmF0b3IgfHwgJycsXHJcbiAgICAgICAgICBpbnRQYXJ0ID0gYXJyWzBdLFxyXG4gICAgICAgICAgZnJhY3Rpb25QYXJ0ID0gYXJyWzFdLFxyXG4gICAgICAgICAgaXNOZWcgPSB4LnMgPCAwLFxyXG4gICAgICAgICAgaW50RGlnaXRzID0gaXNOZWcgPyBpbnRQYXJ0LnNsaWNlKDEpIDogaW50UGFydCxcclxuICAgICAgICAgIGxlbiA9IGludERpZ2l0cy5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmIChnMikgaSA9IGcxLCBnMSA9IGcyLCBnMiA9IGksIGxlbiAtPSBpO1xyXG5cclxuICAgICAgICBpZiAoZzEgPiAwICYmIGxlbiA+IDApIHtcclxuICAgICAgICAgIGkgPSBsZW4gJSBnMSB8fCBnMTtcclxuICAgICAgICAgIGludFBhcnQgPSBpbnREaWdpdHMuc3Vic3RyKDAsIGkpO1xyXG4gICAgICAgICAgZm9yICg7IGkgPCBsZW47IGkgKz0gZzEpIGludFBhcnQgKz0gZ3JvdXBTZXBhcmF0b3IgKyBpbnREaWdpdHMuc3Vic3RyKGksIGcxKTtcclxuICAgICAgICAgIGlmIChnMiA+IDApIGludFBhcnQgKz0gZ3JvdXBTZXBhcmF0b3IgKyBpbnREaWdpdHMuc2xpY2UoaSk7XHJcbiAgICAgICAgICBpZiAoaXNOZWcpIGludFBhcnQgPSAnLScgKyBpbnRQYXJ0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RyID0gZnJhY3Rpb25QYXJ0XHJcbiAgICAgICAgID8gaW50UGFydCArIChmb3JtYXQuZGVjaW1hbFNlcGFyYXRvciB8fCAnJykgKyAoKGcyID0gK2Zvcm1hdC5mcmFjdGlvbkdyb3VwU2l6ZSlcclxuICAgICAgICAgID8gZnJhY3Rpb25QYXJ0LnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxcXGR7JyArIGcyICsgJ31cXFxcQicsICdnJyksXHJcbiAgICAgICAgICAgJyQmJyArIChmb3JtYXQuZnJhY3Rpb25Hcm91cFNlcGFyYXRvciB8fCAnJykpXHJcbiAgICAgICAgICA6IGZyYWN0aW9uUGFydClcclxuICAgICAgICAgOiBpbnRQYXJ0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gKGZvcm1hdC5wcmVmaXggfHwgJycpICsgc3RyICsgKGZvcm1hdC5zdWZmaXggfHwgJycpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhbiBhcnJheSBvZiB0d28gQmlnTnVtYmVycyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGFzIGEgc2ltcGxlXHJcbiAgICAgKiBmcmFjdGlvbiB3aXRoIGFuIGludGVnZXIgbnVtZXJhdG9yIGFuZCBhbiBpbnRlZ2VyIGRlbm9taW5hdG9yLlxyXG4gICAgICogVGhlIGRlbm9taW5hdG9yIHdpbGwgYmUgYSBwb3NpdGl2ZSBub24temVybyB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNwZWNpZmllZFxyXG4gICAgICogbWF4aW11bSBkZW5vbWluYXRvci4gSWYgYSBtYXhpbXVtIGRlbm9taW5hdG9yIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZW5vbWluYXRvciB3aWxsIGJlXHJcbiAgICAgKiB0aGUgbG93ZXN0IHZhbHVlIG5lY2Vzc2FyeSB0byByZXByZXNlbnQgdGhlIG51bWJlciBleGFjdGx5LlxyXG4gICAgICpcclxuICAgICAqIFttZF0ge251bWJlcnxzdHJpbmd8QmlnTnVtYmVyfSBJbnRlZ2VyID49IDEsIG9yIEluZmluaXR5LiBUaGUgbWF4aW11bSBkZW5vbWluYXRvci5cclxuICAgICAqXHJcbiAgICAgKiAnW0JpZ051bWJlciBFcnJvcl0gQXJndW1lbnQge25vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX0gOiB7bWR9J1xyXG4gICAgICovXHJcbiAgICBQLnRvRnJhY3Rpb24gPSBmdW5jdGlvbiAobWQpIHtcclxuICAgICAgdmFyIGQsIGQwLCBkMSwgZDIsIGUsIGV4cCwgbiwgbjAsIG4xLCBxLCByLCBzLFxyXG4gICAgICAgIHggPSB0aGlzLFxyXG4gICAgICAgIHhjID0geC5jO1xyXG5cclxuICAgICAgaWYgKG1kICE9IG51bGwpIHtcclxuICAgICAgICBuID0gbmV3IEJpZ051bWJlcihtZCk7XHJcblxyXG4gICAgICAgIC8vIFRocm93IGlmIG1kIGlzIGxlc3MgdGhhbiBvbmUgb3IgaXMgbm90IGFuIGludGVnZXIsIHVubGVzcyBpdCBpcyBJbmZpbml0eS5cclxuICAgICAgICBpZiAoIW4uaXNJbnRlZ2VyKCkgJiYgKG4uYyB8fCBuLnMgIT09IDEpIHx8IG4ubHQoT05FKSkge1xyXG4gICAgICAgICAgdGhyb3cgRXJyb3JcclxuICAgICAgICAgICAgKGJpZ251bWJlckVycm9yICsgJ0FyZ3VtZW50ICcgK1xyXG4gICAgICAgICAgICAgIChuLmlzSW50ZWdlcigpID8gJ291dCBvZiByYW5nZTogJyA6ICdub3QgYW4gaW50ZWdlcjogJykgKyB2YWx1ZU9mKG4pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICgheGMpIHJldHVybiBuZXcgQmlnTnVtYmVyKHgpO1xyXG5cclxuICAgICAgZCA9IG5ldyBCaWdOdW1iZXIoT05FKTtcclxuICAgICAgbjEgPSBkMCA9IG5ldyBCaWdOdW1iZXIoT05FKTtcclxuICAgICAgZDEgPSBuMCA9IG5ldyBCaWdOdW1iZXIoT05FKTtcclxuICAgICAgcyA9IGNvZWZmVG9TdHJpbmcoeGMpO1xyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIGluaXRpYWwgZGVub21pbmF0b3IuXHJcbiAgICAgIC8vIGQgaXMgYSBwb3dlciBvZiAxMCBhbmQgdGhlIG1pbmltdW0gbWF4IGRlbm9taW5hdG9yIHRoYXQgc3BlY2lmaWVzIHRoZSB2YWx1ZSBleGFjdGx5LlxyXG4gICAgICBlID0gZC5lID0gcy5sZW5ndGggLSB4LmUgLSAxO1xyXG4gICAgICBkLmNbMF0gPSBQT1dTX1RFTlsoZXhwID0gZSAlIExPR19CQVNFKSA8IDAgPyBMT0dfQkFTRSArIGV4cCA6IGV4cF07XHJcbiAgICAgIG1kID0gIW1kIHx8IG4uY29tcGFyZWRUbyhkKSA+IDAgPyAoZSA+IDAgPyBkIDogbjEpIDogbjtcclxuXHJcbiAgICAgIGV4cCA9IE1BWF9FWFA7XHJcbiAgICAgIE1BWF9FWFAgPSAxIC8gMDtcclxuICAgICAgbiA9IG5ldyBCaWdOdW1iZXIocyk7XHJcblxyXG4gICAgICAvLyBuMCA9IGQxID0gMFxyXG4gICAgICBuMC5jWzBdID0gMDtcclxuXHJcbiAgICAgIGZvciAoOyA7KSAge1xyXG4gICAgICAgIHEgPSBkaXYobiwgZCwgMCwgMSk7XHJcbiAgICAgICAgZDIgPSBkMC5wbHVzKHEudGltZXMoZDEpKTtcclxuICAgICAgICBpZiAoZDIuY29tcGFyZWRUbyhtZCkgPT0gMSkgYnJlYWs7XHJcbiAgICAgICAgZDAgPSBkMTtcclxuICAgICAgICBkMSA9IGQyO1xyXG4gICAgICAgIG4xID0gbjAucGx1cyhxLnRpbWVzKGQyID0gbjEpKTtcclxuICAgICAgICBuMCA9IGQyO1xyXG4gICAgICAgIGQgPSBuLm1pbnVzKHEudGltZXMoZDIgPSBkKSk7XHJcbiAgICAgICAgbiA9IGQyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBkMiA9IGRpdihtZC5taW51cyhkMCksIGQxLCAwLCAxKTtcclxuICAgICAgbjAgPSBuMC5wbHVzKGQyLnRpbWVzKG4xKSk7XHJcbiAgICAgIGQwID0gZDAucGx1cyhkMi50aW1lcyhkMSkpO1xyXG4gICAgICBuMC5zID0gbjEucyA9IHgucztcclxuICAgICAgZSA9IGUgKiAyO1xyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGZyYWN0aW9uIGlzIGNsb3NlciB0byB4LCBuMC9kMCBvciBuMS9kMVxyXG4gICAgICByID0gZGl2KG4xLCBkMSwgZSwgUk9VTkRJTkdfTU9ERSkubWludXMoeCkuYWJzKCkuY29tcGFyZWRUbyhcclxuICAgICAgICAgIGRpdihuMCwgZDAsIGUsIFJPVU5ESU5HX01PREUpLm1pbnVzKHgpLmFicygpKSA8IDEgPyBbbjEsIGQxXSA6IFtuMCwgZDBdO1xyXG5cclxuICAgICAgTUFYX0VYUCA9IGV4cDtcclxuXHJcbiAgICAgIHJldHVybiByO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhpcyBCaWdOdW1iZXIgY29udmVydGVkIHRvIGEgbnVtYmVyIHByaW1pdGl2ZS5cclxuICAgICAqL1xyXG4gICAgUC50b051bWJlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuICt2YWx1ZU9mKHRoaXMpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIHJvdW5kZWQgdG8gc2Qgc2lnbmlmaWNhbnQgZGlnaXRzXHJcbiAgICAgKiB1c2luZyByb3VuZGluZyBtb2RlIHJtIG9yIFJPVU5ESU5HX01PREUuIElmIHNkIGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGRpZ2l0c1xyXG4gICAgICogbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCB0aGUgaW50ZWdlciBwYXJ0IG9mIHRoZSB2YWx1ZSBpbiBmaXhlZC1wb2ludCBub3RhdGlvbiwgdGhlbiB1c2VcclxuICAgICAqIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAxIHRvIE1BWCBpbmNsdXNpdmUuXHJcbiAgICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICAgKlxyXG4gICAgICogJ1tCaWdOdW1iZXIgRXJyb3JdIEFyZ3VtZW50IHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtzZHxybX0nXHJcbiAgICAgKi9cclxuICAgIFAudG9QcmVjaXNpb24gPSBmdW5jdGlvbiAoc2QsIHJtKSB7XHJcbiAgICAgIGlmIChzZCAhPSBudWxsKSBpbnRDaGVjayhzZCwgMSwgTUFYKTtcclxuICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLCBzZCwgcm0sIDIpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgLypcclxuICAgICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgQmlnTnVtYmVyIGluIGJhc2UgYiwgb3IgYmFzZSAxMCBpZiBiIGlzXHJcbiAgICAgKiBvbWl0dGVkLiBJZiBhIGJhc2UgaXMgc3BlY2lmaWVkLCBpbmNsdWRpbmcgYmFzZSAxMCwgcm91bmQgYWNjb3JkaW5nIHRvIERFQ0lNQUxfUExBQ0VTIGFuZFxyXG4gICAgICogUk9VTkRJTkdfTU9ERS4gSWYgYSBiYXNlIGlzIG5vdCBzcGVjaWZpZWQsIGFuZCB0aGlzIEJpZ051bWJlciBoYXMgYSBwb3NpdGl2ZSBleHBvbmVudFxyXG4gICAgICogdGhhdCBpcyBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gVE9fRVhQX1BPUywgb3IgYSBuZWdhdGl2ZSBleHBvbmVudCBlcXVhbCB0byBvciBsZXNzIHRoYW5cclxuICAgICAqIFRPX0VYUF9ORUcsIHJldHVybiBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBbYl0ge251bWJlcn0gSW50ZWdlciwgMiB0byBBTFBIQUJFVC5sZW5ndGggaW5jbHVzaXZlLlxyXG4gICAgICpcclxuICAgICAqICdbQmlnTnVtYmVyIEVycm9yXSBCYXNlIHtub3QgYSBwcmltaXRpdmUgbnVtYmVyfG5vdCBhbiBpbnRlZ2VyfG91dCBvZiByYW5nZX06IHtifSdcclxuICAgICAqL1xyXG4gICAgUC50b1N0cmluZyA9IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgIHZhciBzdHIsXHJcbiAgICAgICAgbiA9IHRoaXMsXHJcbiAgICAgICAgcyA9IG4ucyxcclxuICAgICAgICBlID0gbi5lO1xyXG5cclxuICAgICAgLy8gSW5maW5pdHkgb3IgTmFOP1xyXG4gICAgICBpZiAoZSA9PT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChzKSB7XHJcbiAgICAgICAgICBzdHIgPSAnSW5maW5pdHknO1xyXG4gICAgICAgICAgaWYgKHMgPCAwKSBzdHIgPSAnLScgKyBzdHI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHN0ciA9ICdOYU4nO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoYiA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdHIgPSBlIDw9IFRPX0VYUF9ORUcgfHwgZSA+PSBUT19FWFBfUE9TXHJcbiAgICAgICAgICAgPyB0b0V4cG9uZW50aWFsKGNvZWZmVG9TdHJpbmcobi5jKSwgZSlcclxuICAgICAgICAgICA6IHRvRml4ZWRQb2ludChjb2VmZlRvU3RyaW5nKG4uYyksIGUsICcwJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChiID09PSAxMCkge1xyXG4gICAgICAgICAgbiA9IHJvdW5kKG5ldyBCaWdOdW1iZXIobiksIERFQ0lNQUxfUExBQ0VTICsgZSArIDEsIFJPVU5ESU5HX01PREUpO1xyXG4gICAgICAgICAgc3RyID0gdG9GaXhlZFBvaW50KGNvZWZmVG9TdHJpbmcobi5jKSwgbi5lLCAnMCcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpbnRDaGVjayhiLCAyLCBBTFBIQUJFVC5sZW5ndGgsICdCYXNlJyk7XHJcbiAgICAgICAgICBzdHIgPSBjb252ZXJ0QmFzZSh0b0ZpeGVkUG9pbnQoY29lZmZUb1N0cmluZyhuLmMpLCBlLCAnMCcpLCAxMCwgYiwgcywgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocyA8IDAgJiYgbi5jWzBdKSBzdHIgPSAnLScgKyBzdHI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBzdHI7XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJuIGFzIHRvU3RyaW5nLCBidXQgZG8gbm90IGFjY2VwdCBhIGJhc2UgYXJndW1lbnQsIGFuZCBpbmNsdWRlIHRoZSBtaW51cyBzaWduIGZvclxyXG4gICAgICogbmVnYXRpdmUgemVyby5cclxuICAgICAqL1xyXG4gICAgUC52YWx1ZU9mID0gUC50b0pTT04gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZU9mKHRoaXMpO1xyXG4gICAgfTtcclxuXHJcblxyXG4gICAgUC5faXNCaWdOdW1iZXIgPSB0cnVlO1xyXG5cclxuICAgIGlmIChjb25maWdPYmplY3QgIT0gbnVsbCkgQmlnTnVtYmVyLnNldChjb25maWdPYmplY3QpO1xyXG5cclxuICAgIHJldHVybiBCaWdOdW1iZXI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gUFJJVkFURSBIRUxQRVIgRlVOQ1RJT05TXHJcblxyXG4gIC8vIFRoZXNlIGZ1bmN0aW9ucyBkb24ndCBuZWVkIGFjY2VzcyB0byB2YXJpYWJsZXMsXHJcbiAgLy8gZS5nLiBERUNJTUFMX1BMQUNFUywgaW4gdGhlIHNjb3BlIG9mIHRoZSBgY2xvbmVgIGZ1bmN0aW9uIGFib3ZlLlxyXG5cclxuXHJcbiAgZnVuY3Rpb24gYml0Rmxvb3Iobikge1xyXG4gICAgdmFyIGkgPSBuIHwgMDtcclxuICAgIHJldHVybiBuID4gMCB8fCBuID09PSBpID8gaSA6IGkgLSAxO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIFJldHVybiBhIGNvZWZmaWNpZW50IGFycmF5IGFzIGEgc3RyaW5nIG9mIGJhc2UgMTAgZGlnaXRzLlxyXG4gIGZ1bmN0aW9uIGNvZWZmVG9TdHJpbmcoYSkge1xyXG4gICAgdmFyIHMsIHosXHJcbiAgICAgIGkgPSAxLFxyXG4gICAgICBqID0gYS5sZW5ndGgsXHJcbiAgICAgIHIgPSBhWzBdICsgJyc7XHJcblxyXG4gICAgZm9yICg7IGkgPCBqOykge1xyXG4gICAgICBzID0gYVtpKytdICsgJyc7XHJcbiAgICAgIHogPSBMT0dfQkFTRSAtIHMubGVuZ3RoO1xyXG4gICAgICBmb3IgKDsgei0tOyBzID0gJzAnICsgcyk7XHJcbiAgICAgIHIgKz0gcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICBmb3IgKGogPSByLmxlbmd0aDsgci5jaGFyQ29kZUF0KC0taikgPT09IDQ4Oyk7XHJcblxyXG4gICAgcmV0dXJuIHIuc2xpY2UoMCwgaiArIDEgfHwgMSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQ29tcGFyZSB0aGUgdmFsdWUgb2YgQmlnTnVtYmVycyB4IGFuZCB5LlxyXG4gIGZ1bmN0aW9uIGNvbXBhcmUoeCwgeSkge1xyXG4gICAgdmFyIGEsIGIsXHJcbiAgICAgIHhjID0geC5jLFxyXG4gICAgICB5YyA9IHkuYyxcclxuICAgICAgaSA9IHgucyxcclxuICAgICAgaiA9IHkucyxcclxuICAgICAgayA9IHguZSxcclxuICAgICAgbCA9IHkuZTtcclxuXHJcbiAgICAvLyBFaXRoZXIgTmFOP1xyXG4gICAgaWYgKCFpIHx8ICFqKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBhID0geGMgJiYgIXhjWzBdO1xyXG4gICAgYiA9IHljICYmICF5Y1swXTtcclxuXHJcbiAgICAvLyBFaXRoZXIgemVybz9cclxuICAgIGlmIChhIHx8IGIpIHJldHVybiBhID8gYiA/IDAgOiAtaiA6IGk7XHJcblxyXG4gICAgLy8gU2lnbnMgZGlmZmVyP1xyXG4gICAgaWYgKGkgIT0gaikgcmV0dXJuIGk7XHJcblxyXG4gICAgYSA9IGkgPCAwO1xyXG4gICAgYiA9IGsgPT0gbDtcclxuXHJcbiAgICAvLyBFaXRoZXIgSW5maW5pdHk/XHJcbiAgICBpZiAoIXhjIHx8ICF5YykgcmV0dXJuIGIgPyAwIDogIXhjIF4gYSA/IDEgOiAtMTtcclxuXHJcbiAgICAvLyBDb21wYXJlIGV4cG9uZW50cy5cclxuICAgIGlmICghYikgcmV0dXJuIGsgPiBsIF4gYSA/IDEgOiAtMTtcclxuXHJcbiAgICBqID0gKGsgPSB4Yy5sZW5ndGgpIDwgKGwgPSB5Yy5sZW5ndGgpID8gayA6IGw7XHJcblxyXG4gICAgLy8gQ29tcGFyZSBkaWdpdCBieSBkaWdpdC5cclxuICAgIGZvciAoaSA9IDA7IGkgPCBqOyBpKyspIGlmICh4Y1tpXSAhPSB5Y1tpXSkgcmV0dXJuIHhjW2ldID4geWNbaV0gXiBhID8gMSA6IC0xO1xyXG5cclxuICAgIC8vIENvbXBhcmUgbGVuZ3Rocy5cclxuICAgIHJldHVybiBrID09IGwgPyAwIDogayA+IGwgXiBhID8gMSA6IC0xO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogQ2hlY2sgdGhhdCBuIGlzIGEgcHJpbWl0aXZlIG51bWJlciwgYW4gaW50ZWdlciwgYW5kIGluIHJhbmdlLCBvdGhlcndpc2UgdGhyb3cuXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaW50Q2hlY2sobiwgbWluLCBtYXgsIG5hbWUpIHtcclxuICAgIGlmIChuIDwgbWluIHx8IG4gPiBtYXggfHwgbiAhPT0gbWF0aGZsb29yKG4pKSB7XHJcbiAgICAgIHRocm93IEVycm9yXHJcbiAgICAgICAoYmlnbnVtYmVyRXJyb3IgKyAobmFtZSB8fCAnQXJndW1lbnQnKSArICh0eXBlb2YgbiA9PSAnbnVtYmVyJ1xyXG4gICAgICAgICA/IG4gPCBtaW4gfHwgbiA+IG1heCA/ICcgb3V0IG9mIHJhbmdlOiAnIDogJyBub3QgYW4gaW50ZWdlcjogJ1xyXG4gICAgICAgICA6ICcgbm90IGEgcHJpbWl0aXZlIG51bWJlcjogJykgKyBTdHJpbmcobikpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vIEFzc3VtZXMgZmluaXRlIG4uXHJcbiAgZnVuY3Rpb24gaXNPZGQobikge1xyXG4gICAgdmFyIGsgPSBuLmMubGVuZ3RoIC0gMTtcclxuICAgIHJldHVybiBiaXRGbG9vcihuLmUgLyBMT0dfQkFTRSkgPT0gayAmJiBuLmNba10gJSAyICE9IDA7XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gdG9FeHBvbmVudGlhbChzdHIsIGUpIHtcclxuICAgIHJldHVybiAoc3RyLmxlbmd0aCA+IDEgPyBzdHIuY2hhckF0KDApICsgJy4nICsgc3RyLnNsaWNlKDEpIDogc3RyKSArXHJcbiAgICAgKGUgPCAwID8gJ2UnIDogJ2UrJykgKyBlO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIHRvRml4ZWRQb2ludChzdHIsIGUsIHopIHtcclxuICAgIHZhciBsZW4sIHpzO1xyXG5cclxuICAgIC8vIE5lZ2F0aXZlIGV4cG9uZW50P1xyXG4gICAgaWYgKGUgPCAwKSB7XHJcblxyXG4gICAgICAvLyBQcmVwZW5kIHplcm9zLlxyXG4gICAgICBmb3IgKHpzID0geiArICcuJzsgKytlOyB6cyArPSB6KTtcclxuICAgICAgc3RyID0genMgKyBzdHI7XHJcblxyXG4gICAgLy8gUG9zaXRpdmUgZXhwb25lbnRcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgICAvLyBBcHBlbmQgemVyb3MuXHJcbiAgICAgIGlmICgrK2UgPiBsZW4pIHtcclxuICAgICAgICBmb3IgKHpzID0geiwgZSAtPSBsZW47IC0tZTsgenMgKz0geik7XHJcbiAgICAgICAgc3RyICs9IHpzO1xyXG4gICAgICB9IGVsc2UgaWYgKGUgPCBsZW4pIHtcclxuICAgICAgICBzdHIgPSBzdHIuc2xpY2UoMCwgZSkgKyAnLicgKyBzdHIuc2xpY2UoZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RyO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIEVYUE9SVFxyXG5cclxuXHJcbiAgQmlnTnVtYmVyID0gY2xvbmUoKTtcclxuICBCaWdOdW1iZXJbJ2RlZmF1bHQnXSA9IEJpZ051bWJlci5CaWdOdW1iZXIgPSBCaWdOdW1iZXI7XHJcblxyXG4gIC8vIEFNRC5cclxuICBpZiAodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcclxuICAgIGRlZmluZShmdW5jdGlvbiAoKSB7IHJldHVybiBCaWdOdW1iZXI7IH0pO1xyXG5cclxuICAvLyBOb2RlLmpzIGFuZCBvdGhlciBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IG1vZHVsZS5leHBvcnRzLlxyXG4gIH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xyXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBCaWdOdW1iZXI7XHJcblxyXG4gIC8vIEJyb3dzZXIuXHJcbiAgfSBlbHNlIHtcclxuICAgIGlmICghZ2xvYmFsT2JqZWN0KSB7XHJcbiAgICAgIGdsb2JhbE9iamVjdCA9IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYgPyBzZWxmIDogd2luZG93O1xyXG4gICAgfVxyXG5cclxuICAgIGdsb2JhbE9iamVjdC5CaWdOdW1iZXIgPSBCaWdOdW1iZXI7XHJcbiAgfVxyXG59KSh0aGlzKTtcclxuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5BcnJheS5mcm9tO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LmFzc2lnbjtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUnKTtcbnZhciAkT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlKFAsIEQpIHtcbiAgcmV0dXJuICRPYmplY3QuY3JlYXRlKFAsIEQpO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnZhciAkT2JqZWN0ID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYykge1xuICByZXR1cm4gJE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LmtleXM7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3QudmFsdWVzO1xuIiwicmVxdWlyZSgnLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnByb21pc2UnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9fY29yZScpLlByb21pc2U7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG4iLCIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjExJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgSVNfV1JBUCA9IHR5cGUgJiAkZXhwb3J0Llc7XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXTtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBrZXksIG93biwgb3V0O1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChvd24gJiYgaGFzKGV4cG9ydHMsIGtleSkpIGNvbnRpbnVlO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gb3duID8gdGFyZ2V0W2tleV0gOiBzb3VyY2Vba2V5XTtcbiAgICAvLyBwcmV2ZW50IGdsb2JhbCBwb2xsdXRpb24gZm9yIG5hbWVzcGFjZXNcbiAgICBleHBvcnRzW2tleV0gPSBJU19HTE9CQUwgJiYgdHlwZW9mIHRhcmdldFtrZXldICE9ICdmdW5jdGlvbicgPyBzb3VyY2Vba2V5XVxuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgOiBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbClcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlIHRoZW0gaW4gbGlicmFyeVxuICAgIDogSVNfV1JBUCAmJiB0YXJnZXRba2V5XSA9PSBvdXQgPyAoZnVuY3Rpb24gKEMpIHtcbiAgICAgIHZhciBGID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBDKSB7XG4gICAgICAgICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgQygpO1xuICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IEMoYSk7XG4gICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgQyhhLCBiKTtcbiAgICAgICAgICB9IHJldHVybiBuZXcgQyhhLCBiLCBjKTtcbiAgICAgICAgfSByZXR1cm4gQy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICAgIEZbUFJPVE9UWVBFXSA9IENbUFJPVE9UWVBFXTtcbiAgICAgIHJldHVybiBGO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIH0pKG91dCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUubWV0aG9kcy4lTkFNRSVcbiAgICBpZiAoSVNfUFJPVE8pIHtcbiAgICAgIChleHBvcnRzLnZpcnR1YWwgfHwgKGV4cG9ydHMudmlydHVhbCA9IHt9KSlba2V5XSA9IG91dDtcbiAgICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5wcm90b3R5cGUuJU5BTUUlXG4gICAgICBpZiAodHlwZSAmICRleHBvcnQuUiAmJiBleHBQcm90byAmJiAhZXhwUHJvdG9ba2V5XSkgaGlkZShleHBQcm90bywga2V5LCBvdXQpO1xuICAgIH1cbiAgfVxufTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgQlJFQUsgPSB7fTtcbnZhciBSRVRVUk4gPSB7fTtcbnZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUikge1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyYWJsZTsgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSk7XG4gIHZhciBmID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgLy8gZmFzdCBjYXNlIGZvciBhcnJheXMgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yXG4gIGlmIChpc0FycmF5SXRlcihpdGVyRm4pKSBmb3IgKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgcmVzdWx0ID0gZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2UgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOykge1xuICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuZXhwb3J0cy5CUkVBSyA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiIsIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIiwiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwidmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciByaXRlciA9IFs3XVtJVEVSQVRPUl0oKTtcbiAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24gKCkgeyBTQUZFX0NMT1NJTkcgPSB0cnVlOyB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIHNraXBDbG9zaW5nKSB7XG4gIGlmICghc2tpcENsb3NpbmcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB2YXIgc2FmZSA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBbN107XG4gICAgdmFyIGl0ZXIgPSBhcnJbSVRFUkFUT1JdKCk7XG4gICAgaXRlci5uZXh0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4geyBkb25lOiBzYWZlID0gdHJ1ZSB9OyB9O1xuICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyOyB9O1xuICAgIGV4ZWMoYXJyKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBzYWZlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRvbmUsIHZhbHVlKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogISFkb25lIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIm1vZHVsZS5leHBvcnRzID0gdHJ1ZTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIE9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7XG4gICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZiAoaXNOb2RlKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIFNhZmFyaSAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgfSBlbHNlIGlmIChPYnNlcnZlciAmJiAhKGdsb2JhbC5uYXZpZ2F0b3IgJiYgZ2xvYmFsLm5hdmlnYXRvci5zdGFuZGFsb25lKSkge1xuICAgIHZhciB0b2dnbGUgPSB0cnVlO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBPYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIHRhc2sgPSB7IGZuOiBmbiwgbmV4dDogdW5kZWZpbmVkIH07XG4gICAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gICAgaWYgKCFoZWFkKSB7XG4gICAgICBoZWFkID0gdGFzaztcbiAgICAgIG5vdGlmeSgpO1xuICAgIH0gbGFzdCA9IHRhc2s7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjUuNC4xLjUgTmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5cbmZ1bmN0aW9uIFByb21pc2VDYXBhYmlsaXR5KEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCIvLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGRQcyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBFbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2lmcmFtZScpO1xuICB2YXIgaSA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgdmFyIGx0ID0gJzwnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlcXVpcmUoJy4vX2h0bWwnKS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zY3JpcHQtdXJsXG4gIC8vIGNyZWF0ZURpY3QgPSBpZnJhbWUuY29udGVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGh0bWwucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIGNyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuICB3aGlsZSAoaS0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHkoKTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBQO1xuICB3aGlsZSAobGVuZ3RoID4gaSkgZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGlzRW51bSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXNFbnRyaWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChpdCk7XG4gICAgdmFyIGtleXMgPSBnZXRLZXlzKE8pO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGtleSA9IGtleXNbaSsrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoTywga2V5KSkge1xuICAgICAgICByZXN1bHQucHVzaChpc0VudHJpZXMgPyBba2V5LCBPW2tleV1dIDogT1trZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZTogZmFsc2UsIHY6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgZTogdHJ1ZSwgdjogZSB9O1xuICB9XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBzYWZlKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICBpZiAoc2FmZSAmJiB0YXJnZXRba2V5XSkgdGFyZ2V0W2tleV0gPSBzcmNba2V5XTtcbiAgICBlbHNlIGhpZGUodGFyZ2V0LCBrZXksIHNyY1trZXldKTtcbiAgfSByZXR1cm4gdGFyZ2V0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faGlkZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgQyA9IHR5cGVvZiBjb3JlW0tFWV0gPT0gJ2Z1bmN0aW9uJyA/IGNvcmVbS0VZXSA6IGdsb2JhbFtLRVldO1xuICBpZiAoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkgZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07XG4iLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCIvLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIEQpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIiwidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY2VsID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBzZXRUYXNrID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhclRhc2sgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciBkZWZlciwgY2hhbm5lbCwgcG9ydDtcbnZhciBydW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpZCA9ICt0aGlzO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIGlmIChxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bi5jYWxsKGV2ZW50LmRhdGEpO1xufTtcbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0VGFzayB8fCAhY2xlYXJUYXNrKSB7XG4gIHNldFRhc2sgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZm4pIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIHZhciBpID0gMTtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgaW52b2tlKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbiksIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyVGFzayA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChyZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2VzcycpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3coY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcbiAgICBkZWZlciA9IGN0eChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShpZCArICcnLCAnKicpO1xuICAgIH07XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNlbCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjZWwoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4uY2FsbChpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQoY3R4KHJ1biwgaWQsIDEpLCAwKTtcbiAgICB9O1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXRUYXNrLFxuICBjbGVhcjogY2xlYXJUYXNrXG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07XG4iLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcbiIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwidmFyIGlkID0gMDtcbnZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsLm5hdmlnYXRvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJztcbiIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikgeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDKCk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGtpbmQgPSB0aGlzLl9rO1xuICB2YXIgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmICghTyB8fCBpbmRleCA+PSBPLmxlbmd0aCkge1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZiB9KTtcbiIsIi8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2tleXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjggfHwgJyc7XG52YXIgJFByb21pc2UgPSBnbG9iYWxbUFJPTUlTRV07XG52YXIgaXNOb2RlID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgZW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgSW50ZXJuYWwsIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGNvcnJlY3Qgc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gJFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtyZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpXSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGVtcHR5LCBlbXB0eSk7XG4gICAgfTtcbiAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gICAgcmV0dXJuIChpc05vZGUgfHwgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nKVxuICAgICAgJiYgcHJvbWlzZS50aGVuKGVtcHR5KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlXG4gICAgICAvLyB2OCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAgIC8vIHdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gICAgICAmJiB2OC5pbmRleE9mKCc2LjYnKSAhPT0gMFxuICAgICAgJiYgdXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZS82NicpID09PSAtMTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59KCk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBpc1JlamVjdCkge1xuICBpZiAocHJvbWlzZS5fbikgcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciBvayA9IHByb21pc2UuX3MgPT0gMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uIChyZWFjdGlvbikge1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAocHJvbWlzZS5faCA9PSAyKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBtYXkgdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGkpIHJ1bihjaGFpbltpKytdKTsgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICBwcm9taXNlLl9jID0gW107XG4gICAgcHJvbWlzZS5fbiA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhcHJvbWlzZS5faCkgb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciB1bmhhbmRsZWQgPSBpc1VuaGFuZGxlZChwcm9taXNlKTtcbiAgICB2YXIgcmVzdWx0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmICh1bmhhbmRsZWQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbikge1xuICAgICAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHZhbHVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDogMTtcbiAgICB9IHByb21pc2UuX2EgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHVuaGFuZGxlZCAmJiByZXN1bHQuZSkgdGhyb3cgcmVzdWx0LnY7XG4gIH0pO1xufTtcbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHJldHVybiBwcm9taXNlLl9oICE9PSAxICYmIChwcm9taXNlLl9hIHx8IHByb21pc2UuX2MpLmxlbmd0aCA9PT0gMDtcbn07XG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhbmRsZXI7XG4gICAgaWYgKGlzTm9kZSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9ucmVqZWN0aW9uaGFuZGxlZCkge1xuICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcHJvbWlzZS5fdiB9KTtcbiAgICB9XG4gIH0pO1xufTtcbnZhciAkcmVqZWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICBwcm9taXNlLl92ID0gdmFsdWU7XG4gIHByb21pc2UuX3MgPSAyO1xuICBpZiAoIXByb21pc2UuX2EpIHByb21pc2UuX2EgPSBwcm9taXNlLl9jLnNsaWNlKCk7XG4gIG5vdGlmeShwcm9taXNlLCB0cnVlKTtcbn07XG52YXIgJHJlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICB2YXIgdGhlbjtcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICB0cnkge1xuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfTsgLy8gd3JhcFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3MgPSAxO1xuICAgICAgbm90aWZ5KHByb21pc2UsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAkcmVqZWN0LmNhbGwoeyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgJFByb21pc2UgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywgMSkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgJHJlamVjdC5jYWxsKHRoaXMsIGVycik7XG4gICAgfVxuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgdGhpcy5fYyA9IFtdOyAgICAgICAgICAgICAvLyA8LSBhd2FpdGluZyByZWFjdGlvbnNcbiAgICB0aGlzLl9hID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIGNoZWNrZWQgaW4gaXNVbmhhbmRsZWQgcmVhY3Rpb25zXG4gICAgdGhpcy5fcyA9IDA7ICAgICAgICAgICAgICAvLyA8LSBzdGF0ZVxuICAgIHRoaXMuX2QgPSBmYWxzZTsgICAgICAgICAgLy8gPC0gZG9uZVxuICAgIHRoaXMuX3YgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gdmFsdWVcbiAgICB0aGlzLl9oID0gMDsgICAgICAgICAgICAgIC8vIDwtIHJlamVjdGlvbiBzdGF0ZSwgMCAtIGRlZmF1bHQsIDEgLSBoYW5kbGVkLCAyIC0gdW5oYW5kbGVkXG4gICAgdGhpcy5fbiA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBub3RpZnlcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJykoJFByb21pc2UucHJvdG90eXBlLCB7XG4gICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgIHJlYWN0aW9uLm9rID0gdHlwZW9mIG9uRnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX2EpIHRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fcykgbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBjdHgoJHJlc29sdmUsIHByb21pc2UsIDEpO1xuICAgIHRoaXMucmVqZWN0ID0gY3R4KCRyZWplY3QsIHByb21pc2UsIDEpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSAkUHJvbWlzZSB8fCBDID09PSBXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgUHJvbWlzZTogJFByb21pc2UgfSk7XG5yZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpKCRQcm9taXNlLCBQUk9NSVNFKTtcbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoUFJPTUlTRSk7XG5XcmFwcGVyID0gcmVxdWlyZSgnLi9fY29yZScpW1BST01JU0VdO1xuXG4vLyBzdGF0aWNzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC41IFByb21pc2UucmVqZWN0KHIpXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIHZhciAkJHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgICQkcmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTElCUkFSWSB8fCAhVVNFX05BVElWRSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjYgUHJvbWlzZS5yZXNvbHZlKHgpXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShMSUJSQVJZICYmIHRoaXMgPT09IFdyYXBwZXIgPyAkUHJvbWlzZSA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIShVU0VfTkFUSVZFICYmIHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbn0pKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtdmFsdWVzLWVudHJpZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHZhbHVlcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKGZhbHNlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKGl0KSB7XG4gICAgcmV0dXJuICR2YWx1ZXMoaXQpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtdHJ5XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUHJvbWlzZScsIHsgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYodGhpcyk7XG4gIHZhciByZXN1bHQgPSBwZXJmb3JtKGNhbGxiYWNrZm4pO1xuICAocmVzdWx0LmUgPyBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3QgOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlKShyZXN1bHQudik7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufSB9KTtcbiIsInJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBUT19TVFJJTkdfVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbnZhciBET01JdGVyYWJsZXMgPSAoJ0NTU1J1bGVMaXN0LENTU1N0eWxlRGVjbGFyYXRpb24sQ1NTVmFsdWVMaXN0LENsaWVudFJlY3RMaXN0LERPTVJlY3RMaXN0LERPTVN0cmluZ0xpc3QsJyArXG4gICdET01Ub2tlbkxpc3QsRGF0YVRyYW5zZmVySXRlbUxpc3QsRmlsZUxpc3QsSFRNTEFsbENvbGxlY3Rpb24sSFRNTENvbGxlY3Rpb24sSFRNTEZvcm1FbGVtZW50LEhUTUxTZWxlY3RFbGVtZW50LCcgK1xuICAnTWVkaWFMaXN0LE1pbWVUeXBlQXJyYXksTmFtZWROb2RlTWFwLE5vZGVMaXN0LFBhaW50UmVxdWVzdExpc3QsUGx1Z2luLFBsdWdpbkFycmF5LFNWR0xlbmd0aExpc3QsU1ZHTnVtYmVyTGlzdCwnICtcbiAgJ1NWR1BhdGhTZWdMaXN0LFNWR1BvaW50TGlzdCxTVkdTdHJpbmdMaXN0LFNWR1RyYW5zZm9ybUxpc3QsU291cmNlQnVmZmVyTGlzdCxTdHlsZVNoZWV0TGlzdCxUZXh0VHJhY2tDdWVMaXN0LCcgK1xuICAnVGV4dFRyYWNrTGlzdCxUb3VjaExpc3QnKS5zcGxpdCgnLCcpO1xuXG5mb3IgKHZhciBpID0gMDsgaSA8IERPTUl0ZXJhYmxlcy5sZW5ndGg7IGkrKykge1xuICB2YXIgTkFNRSA9IERPTUl0ZXJhYmxlc1tpXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIGlmIChwcm90byAmJiAhcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICBJdGVyYXRvcnNbTkFNRV0gPSBJdGVyYXRvcnMuQXJyYXk7XG59XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5zZXJwLXByZXZpZXdbZGF0YS12LTY2YzRjNWFiXXttYXJnaW4tdG9wOjE1cHg7bWFyZ2luLWJvdHRvbToxNXB4O2JvcmRlci1yYWRpdXM6MnB4O2JveC1zaGFkb3c6MCAwIDVweCAwIHJnYmEoMCwwLDAsMC4xMik7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmO2JvcmRlcjpzb2xpZCAxcHggI2U3ZTdlNztwYWRkaW5nOjMwcHg7bWF4LXdpZHRoOjcwMHB4fS5zZXJwLXByZXZpZXcgLnNlcnAtYXJyb3dbZGF0YS12LTY2YzRjNWFiXXtib3JkZXItYm90dG9tLWNvbG9yOiMwMDY2MjE7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLXdpZHRoOjBweDtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLDApO2JvcmRlci1sZWZ0LXN0eWxlOnNvbGlkO2JvcmRlci1sZWZ0LXdpZHRoOjRweDtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtib3JkZXItcmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LXdpZHRoOjRweDtib3JkZXItdG9wLWNvbG9yOiMwMDY2MjE7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOjVweDtjb2xvcjpncmF5O2N1cnNvcjpkZWZhdWx0O2ZvbnQtZmFtaWx5OmFyaWFsLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OmJvbGQ7aGVpZ2h0OjBweDtwb3NpdGlvbjphYnNvbHV0ZTtsaW5lLWhlaWdodDoyN3B4O21hcmdpbi1sZWZ0OjNweDttYXJnaW4tdG9wOjZweDt0ZXh0LWFsaWduOmNlbnRlcjt1c2VyLXNlbGVjdDpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTt3aGl0ZS1zcGFjZTpub3dyYXA7d2lkdGg6MHB4fS5zZXJwLXByZXZpZXcgLnNlcnAtdGl0bGVbZGF0YS12LTY2YzRjNWFiXXtjb2xvcjojMUEwREFCO2N1cnNvcjpwb2ludGVyO2ZvbnQtZmFtaWx5OmFyaWFsLCByZWd1bGFyO2ZvbnQtc2l6ZToxOHB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmlzaWJpbGl0eTp2aXNpYmxlO3doaXRlLXNwYWNlOm5vd3JhcH0uc2VycC1wcmV2aWV3IC5zZXJwLXVybFtkYXRhLXYtNjZjNGM1YWJde2NvbG9yOiMwMDY2MjE7Zm9udC1mYW1pbHk6YXJpYWwsIHJlZ3VsYXI7Zm9udC1zaXplOjE0cHg7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjI0cHg7dGV4dC1hbGlnbjpsZWZ0O3Zpc2liaWxpdHk6dmlzaWJsZX0uc2VycC1wcmV2aWV3IC5zZXJwLWRlc2NyaXB0aW9uW2RhdGEtdi02NmM0YzVhYl17Y29sb3I6IzU0NTQ1NDtmb250LWZhbWlseTphcmlhbCwgcmVndWxhcjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDpub3JtYWw7dGV4dC1hbGlnbjpsZWZ0O3Zpc2liaWxpdHk6dmlzaWJsZTt3b3JkLXdyYXA6YnJlYWstd29yZH1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9qcy9hcHAvdXRpbHMvc2VycC9zZXJwLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUE2RUEsK0JBQ0ksZUFBZ0IsQ0FDaEIsa0JBQW1CLENBQ25CLGlCQUFrQixDQUNsQixxQ0FBeUMsQ0FDekMsd0JBQXlCLENBQ3pCLHdCQUF5QixDQUN6QixZQUFhLENBQ2IsZUFBZ0IsQ0FScEIsMkNBV1EsMkJBQW9DLENBQ3BDLHlCQUEwQixDQUMxQix1QkFBd0IsQ0FDeEIsK0JBQW1DLENBQ25DLHVCQUF3QixDQUN4QixxQkFBc0IsQ0FDdEIsZ0NBQW9DLENBQ3BDLHdCQUF5QixDQUN6QixzQkFBdUIsQ0FDdkIsd0JBQWlDLENBQ2pDLHNCQUF1QixDQUN2QixvQkFBcUIsQ0FDckIsVUFBeUIsQ0FDekIsY0FBZSxDQUNmLDZCQUE4QixDQUM5QixjQUFlLENBQ2YsZ0JBQWlCLENBQ2pCLFVBQVcsQ0FDWCxpQkFBa0IsQ0FDbEIsZ0JBQWlCLENBQ2pCLGVBQWdCLENBQ2hCLGNBQWUsQ0FDZixpQkFBa0IsQ0FDbEIsZ0JBQWlCLENBQ2pCLGtCQUFtQixDQUNuQixrQkFBbUIsQ0FDbkIsU0FBVSxDQXJDbEIsMkNBeUNRLGFBQWMsQ0FDZCxjQUFlLENBQ2YsMEJBQTJCLENBQzNCLGNBQWUsQ0FDZixrQkFBbUIsQ0FDbkIsZUFBZ0IsQ0FDaEIsb0JBQXFCLENBQ3JCLGtCQUFtQixDQUNuQixrQkFBbUIsQ0FqRDNCLHlDQXFEUSxhQUFjLENBQ2QsMEJBQTJCLENBQzNCLGNBQWUsQ0FDZixpQkFBa0IsQ0FDbEIsa0JBQW1CLENBQ25CLGdCQUFpQixDQUNqQixlQUFnQixDQUNoQixrQkFBbUIsQ0E1RDNCLGlEQWdFUSxhQUFjLENBQ2QsMEJBQTJCLENBQzNCLGNBQWUsQ0FDZixrQkFBbUIsQ0FDbkIsZUFBZ0IsQ0FDaEIsa0JBQW1CLENBQ25CLG9CQUFxQlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4uc2VycC1wcmV2aWV3IHtcXG4gICAgbWFyZ2luLXRvcDogMTVweDtcXG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDtcXG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgICBib3gtc2hhZG93OiAwIDAgNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcXG4gICAgYm9yZGVyOiBzb2xpZCAxcHggI2U3ZTdlNztcXG4gICAgcGFkZGluZzogMzBweDtcXG4gICAgbWF4LXdpZHRoOiA3MDBweDtcXG5cXG4gICAgLnNlcnAtYXJyb3cge1xcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiKDAsIDEwMiwgMzMpO1xcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7XFxuICAgICAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwcHg7XFxuICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcXG4gICAgICAgIGJvcmRlci1sZWZ0LXN0eWxlOiBzb2xpZDtcXG4gICAgICAgIGJvcmRlci1sZWZ0LXdpZHRoOiA0cHg7XFxuICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XFxuICAgICAgICBib3JkZXItcmlnaHQtc3R5bGU6IHNvbGlkO1xcbiAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiA0cHg7XFxuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiByZ2IoMCwgMTAyLCAzMyk7XFxuICAgICAgICBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDtcXG4gICAgICAgIGJvcmRlci10b3Atd2lkdGg6IDVweDtcXG4gICAgICAgIGNvbG9yOiByZ2IoMTI4LCAxMjgsIDEyOCk7XFxuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XFxuICAgICAgICBmb250LWZhbWlseTogYXJpYWwsIHNhbnMtc2VyaWY7XFxuICAgICAgICBmb250LXNpemU6IDExcHg7XFxuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcXG4gICAgICAgIGhlaWdodDogMHB4O1xcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgbGluZS1oZWlnaHQ6IDI3cHg7XFxuICAgICAgICBtYXJnaW4tbGVmdDogM3B4O1xcbiAgICAgICAgbWFyZ2luLXRvcDogNnB4O1xcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gICAgICAgIHdpZHRoOiAwcHg7XFxuICAgIH1cXG5cXG4gICAgLnNlcnAtdGl0bGUge1xcbiAgICAgICAgY29sb3I6ICMxQTBEQUI7XFxuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgICBmb250LWZhbWlseTogYXJpYWwsIHJlZ3VsYXI7XFxuICAgICAgICBmb250LXNpemU6IDE4cHg7XFxuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XFxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgICB9XFxuXFxuICAgIC5zZXJwLXVybCB7XFxuICAgICAgICBjb2xvcjogIzAwNjYyMTtcXG4gICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgcmVndWxhcjtcXG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcXG4gICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxuICAgICAgICBsaW5lLWhlaWdodDogMjRweDtcXG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XFxuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xcbiAgICB9XFxuXFxuICAgIC5zZXJwLWRlc2NyaXB0aW9uIHtcXG4gICAgICAgIGNvbG9yOiAjNTQ1NDU0O1xcbiAgICAgICAgZm9udC1mYW1pbHk6IGFyaWFsLCByZWd1bGFyO1xcbiAgICAgICAgZm9udC1zaXplOiAxM3B4O1xcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XFxuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xcbiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkO1xcbiAgICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIiNjb21iaW5hdGlvbi1lZGl0LW1vZGFsIC5jb21iaW5hdGlvbi1tb2RhbCAubW9kYWx7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0jY29tYmluYXRpb24tZWRpdC1tb2RhbCAuY29tYmluYXRpb24tbW9kYWwgLm1vZGFsLWRpYWxvZ3ttYXgtd2lkdGg6OTkwcHg7d2lkdGg6OTAlO2hlaWdodDo5NSU7bWFyZ2luOjB9I2NvbWJpbmF0aW9uLWVkaXQtbW9kYWwgLmNvbWJpbmF0aW9uLW1vZGFsIC5tb2RhbC1kaWFsb2cgLm1vZGFsLWhlYWRlcntkaXNwbGF5Om5vbmV9I2NvbWJpbmF0aW9uLWVkaXQtbW9kYWwgLmNvbWJpbmF0aW9uLW1vZGFsIC5tb2RhbC1kaWFsb2cgLm1vZGFsLWNvbnRlbnR7aGVpZ2h0OjEwMCU7cGFkZGluZzowO21hcmdpbjowIDFyZW07b3ZlcmZsb3c6aGlkZGVufSNjb21iaW5hdGlvbi1lZGl0LW1vZGFsIC5jb21iaW5hdGlvbi1tb2RhbCAubW9kYWwtZGlhbG9nIC5tb2RhbC1jb250ZW50IC5tb2RhbC1ib2R5e3BhZGRpbmc6MC41cmVtO21hcmdpbjowO2JhY2tncm91bmQ6I2VhZWJlY30jY29tYmluYXRpb24tZWRpdC1tb2RhbCAuY29tYmluYXRpb24tbW9kYWwgLm1vZGFsLWRpYWxvZyAubW9kYWwtY29udGVudCAubW9kYWwtYm9keSAuY29tYmluYXRpb24tbG9hZGluZ3twb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjt6LWluZGV4OjE7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuOCl9I2NvbWJpbmF0aW9uLWVkaXQtbW9kYWwgLmNvbWJpbmF0aW9uLW1vZGFsIC5tb2RhbC1kaWFsb2cgLm1vZGFsLWNvbnRlbnQgLm1vZGFsLWJvZHkgLmNvbWJpbmF0aW9uLWlmcmFtZXtwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7b3V0bGluZTpub25lO3ZlcnRpY2FsLWFsaWduOnRvcDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9I2NvbWJpbmF0aW9uLWVkaXQtbW9kYWwgLmNvbWJpbmF0aW9uLW1vZGFsIC5tb2RhbC1kaWFsb2cgLm1vZGFsLWNvbnRlbnQgLm1vZGFsLWJvZHkgLmNvbWJpbmF0aW9uLWlmcmFtZSAuY2FyZHttYXJnaW4tYm90dG9tOjB9I2NvbWJpbmF0aW9uLWVkaXQtbW9kYWwgLmNvbWJpbmF0aW9uLW1vZGFsIC5tb2RhbC1kaWFsb2cgLm1vZGFsLWNvbnRlbnQgLm1vZGFsLWZvb3RlcnttYXJnaW46MDtwYWRkaW5nOjAuNnJlbSAxcmVtO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfSNjb21iaW5hdGlvbi1lZGl0LW1vZGFsIC5jb21iaW5hdGlvbi1tb2RhbCAubW9kYWwtZGlhbG9nIC5tb2RhbC1jb250ZW50IC5tb2RhbC1mb290ZXIgLmJ0bi1jbG9zZXttYXJnaW4tcmlnaHQ6YXV0b30jY29tYmluYXRpb24tZWRpdC1tb2RhbCAuY29tYmluYXRpb24tbW9kYWwgLmhpc3Rvcnl7bWF4LXdpZHRoOjQwMHB4O3dpZHRoOjEwMCU7bWluLWhlaWdodDpjYWxjKDEwMCUgLSAzLjVyZW0pO3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7aGVpZ2h0Ojk1JTttYXJnaW4tcmlnaHQ6MXJlbX1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvY29tYmluYXRpb24tbW9kYWwvQ29tYmluYXRpb25Nb2RhbC52dWVcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBK1hBLGtEQUVJLFlBQWEsQ0FDYixzQkFBdUIsQ0FDdkIsc0JBQXVCLENBSjNCLHlEQVFJLGVBQWdCLENBQ2hCLFNBQVUsQ0FDVixVQUFXLENBQ1gsUUFBUyxDQVhiLHVFQWNNLFlBQWEsQ0FkbkIsd0VBa0JNLFdBQVksQ0FDWixTQUFVLENBQ1YsYUFBYyxDQUNkLGVBQWdCLENBckJ0QixvRkF3QlEsY0FBZSxDQUNmLFFBQVMsQ0FDVCxrQkFBbUIsQ0ExQjNCLHlHQTZCVSxpQkFBa0IsQ0FDbEIsVUFBVyxDQUNYLFdBQVksQ0FDWixZQUFhLENBQ2Isa0JBQW1CLENBQ25CLHNCQUF1QixDQUN2QixTQUFVLENBQ1YsZ0NBQW9DLENBcEM5Qyx3R0F3Q1UsU0FBVSxDQUNWLFFBQVMsQ0FDVCxRQUFTLENBQ1QsWUFBYSxDQUNiLGtCQUFtQixDQUNuQixVQUFXLENBQ1gsV0FBWSxDQUNaLGFBQWMsQ0EvQ3hCLDhHQWtEWSxlQUFnQixDQWxENUIsc0ZBd0RRLFFBQVMsQ0FDVCxtQkFBb0IsQ0FDcEIsWUFBYSxDQUNiLGtCQUFtQixDQUNuQix3QkFBeUIsQ0E1RGpDLGlHQStEVSxpQkFBa0IsQ0EvRDVCLG9EQXNFSSxlQUFnQixDQUNoQixVQUFXLENBQ1gsOEJBQStCLENBQy9CLE9BQVEsQ0FDUiwwQkFBMkIsQ0FDM0IsVUFBVyxDQUNYLGlCQUFrQlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5AaW1wb3J0ICd+QHNjc3MvY29uZmlnL19zZXR0aW5ncy5zY3NzJztcXG5cXG4jY29tYmluYXRpb24tZWRpdC1tb2RhbCAuY29tYmluYXRpb24tbW9kYWwge1xcbiAgLm1vZGFsIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgfVxcblxcbiAgLm1vZGFsLWRpYWxvZyB7XFxuICAgIG1heC13aWR0aDogOTkwcHg7XFxuICAgIHdpZHRoOiA5MCU7XFxuICAgIGhlaWdodDogOTUlO1xcbiAgICBtYXJnaW46IDA7XFxuXFxuICAgIC5tb2RhbC1oZWFkZXIge1xcbiAgICAgIGRpc3BsYXk6IG5vbmU7XFxuICAgIH1cXG5cXG4gICAgLm1vZGFsLWNvbnRlbnQge1xcbiAgICAgIGhlaWdodDogMTAwJTtcXG4gICAgICBwYWRkaW5nOiAwO1xcbiAgICAgIG1hcmdpbjogMCAxcmVtO1xcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxuXFxuICAgICAgLm1vZGFsLWJvZHkge1xcbiAgICAgICAgcGFkZGluZzogMC41cmVtO1xcbiAgICAgICAgbWFyZ2luOiAwO1xcbiAgICAgICAgYmFja2dyb3VuZDogI2VhZWJlYztcXG5cXG4gICAgICAgIC5jb21iaW5hdGlvbi1sb2FkaW5nIHtcXG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgICB3aWR0aDogMTAwJTtcXG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgICAgICAgei1pbmRleDogMTtcXG4gICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLmNvbWJpbmF0aW9uLWlmcmFtZSB7XFxuICAgICAgICAgIHBhZGRpbmc6IDA7XFxuICAgICAgICAgIG1hcmdpbjogMDtcXG4gICAgICAgICAgYm9yZGVyOiAwO1xcbiAgICAgICAgICBvdXRsaW5lOiBub25lO1xcbiAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xcbiAgICAgICAgICB3aWR0aDogMTAwJTtcXG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcXG5cXG4gICAgICAgICAgLmNhcmQge1xcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuXFxuICAgICAgLm1vZGFsLWZvb3RlciB7XFxuICAgICAgICBtYXJnaW46IDA7XFxuICAgICAgICBwYWRkaW5nOiAwLjZyZW0gMXJlbTtcXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG5cXG4gICAgICAgIC5idG4tY2xvc2Uge1xcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXFxuICAuaGlzdG9yeSB7XFxuICAgIG1heC13aWR0aDogNDAwcHg7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMCUgLSAzLjVyZW0pO1xcbiAgICB0b3A6IDUwJTtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xcbiAgICBoZWlnaHQ6IDk1JTtcXG4gICAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xcbiAgfVxcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIuaGlzdG9yeS1saXN0e3BhZGRpbmc6MDttYXJnaW46MH0uaGlzdG9yeSAuY2FyZC1ibG9ja3twYWRkaW5nOjA7aGVpZ2h0OmNhbGMoMTAwJSAtIDdyZW0pfS5oaXN0b3J5LWVtcHR5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7aGVpZ2h0OmNhbGMoMTAwJSAtIDRyZW0pfS5oaXN0b3J5LWVtcHR5LXRpcHtjb2xvcjojOGE4YThhO2ZvbnQtc2l6ZToxcmVtO3RleHQtYWxpZ246Y2VudGVyO21heC13aWR0aDoyODBweDttYXJnaW4tdG9wOjEuNzVyZW19Lmhpc3RvcnktaXRlbXtsaXN0LXN0eWxlLXR5cGU6bm9uZTtwYWRkaW5nOjAuNzVyZW0gMXJlbTt0cmFuc2l0aW9uOjAuMjVzIGVhc2Utb3V0O2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlfS5oaXN0b3J5LWl0ZW0gaXtjb2xvcjojMjViOWQ3O29wYWNpdHk6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3JpZ2h0OjFyZW07Zm9udC1zaXplOjEuMjVyZW07dHJhbnNpdGlvbjowLjI1cyBlYXNlLW91dH0uaGlzdG9yeS1pdGVtLnNlbGVjdGVke2JhY2tncm91bmQ6I2Y3ZjdmN30uaGlzdG9yeS1pdGVtOmhvdmVye2JhY2tncm91bmQ6I2YwZmNmZDtjb2xvcjojMjViOWQ3fS5oaXN0b3J5LWl0ZW06aG92ZXIgaXtvcGFjaXR5OjF9XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vanMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2NvbWJpbmF0aW9uLW1vZGFsL0hpc3RvcnkudnVlXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvcHJlc3Rha2l0L3Njc3MvX3ZhcmlhYmxlcy5zY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQStKRSxjQUNFLFNBQVUsQ0FDVixRQUFTLENBSGIscUJBT0ksU0FBVSxDQUNWLHdCQUF5QixDQUMxQixlQUdDLFlBQWEsQ0FDYixxQkFBc0IsQ0FDdEIsa0JBQW1CLENBQ25CLHNCQUF1QixDQUN2Qix3QkFBeUIsQ0FFekIsbUJBQ0UsYUFBYyxDQUNkLGNBQWUsQ0FDZixpQkFBa0IsQ0FDbEIsZUFBZ0IsQ0FDaEIsa0JBQW1CLENBQ3BCLGNBSUQsb0JBQXFCLENBQ3JCLG9CQUFxQixDQUNyQix5QkFBMEIsQ0FDMUIsY0FBZSxDQUNmLGlCQUFrQixDQUxuQixnQkFRRyxhQy9KUSxDRGdLUixTQUFVLENBQ1YsaUJBQWtCLENBQ2xCLE9BQVEsQ0FDUiwwQkFBMkIsQ0FDM0IsVUFBVyxDQUNYLGlCQUFrQixDQUNsQix5QkFBMEIsQ0FmN0IsdUJBbUJHLGtCQUFtQixDQW5CdEIsb0JBdUJHLGtCQUFtQixDQUNuQixhQy9LUSxDRHVKWCxzQkEyQkssU0FBVVwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5AaW1wb3J0IFxcXCJ+QHNjc3MvY29uZmlnL19zZXR0aW5ncy5zY3NzXFxcIjtcXG5cXG4uaGlzdG9yeSB7XFxuICAmLWxpc3Qge1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgICBtYXJnaW46IDA7XFxuICB9XFxuXFxuICAuY2FyZC1ibG9jayB7XFxuICAgIHBhZGRpbmc6IDA7XFxuICAgIGhlaWdodDogY2FsYygxMDAlIC0gN3JlbSk7XFxuICB9XFxuXFxuICAmLWVtcHR5IHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGhlaWdodDogY2FsYygxMDAlIC0gNHJlbSk7XFxuXFxuICAgICYtdGlwIHtcXG4gICAgICBjb2xvcjogIzhhOGE4YTtcXG4gICAgICBmb250LXNpemU6IDFyZW07XFxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICAgIG1heC13aWR0aDogMjgwcHg7XFxuICAgICAgbWFyZ2luLXRvcDogMS43NXJlbTtcXG4gICAgfVxcbiAgfVxcblxcbiAgJi1pdGVtIHtcXG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbiAgICBwYWRkaW5nOiAwLjc1cmVtIDFyZW07XFxuICAgIHRyYW5zaXRpb246IDAuMjVzIGVhc2Utb3V0O1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG5cXG4gICAgaSB7XFxuICAgICAgY29sb3I6ICRwcmltYXJ5O1xcbiAgICAgIG9wYWNpdHk6IDA7XFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgIHRvcDogNTAlO1xcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcXG4gICAgICByaWdodDogMXJlbTtcXG4gICAgICBmb250LXNpemU6IDEuMjVyZW07XFxuICAgICAgdHJhbnNpdGlvbjogMC4yNXMgZWFzZS1vdXQ7XFxuICAgIH1cXG5cXG4gICAgJi5zZWxlY3RlZCB7XFxuICAgICAgYmFja2dyb3VuZDogI2Y3ZjdmNztcXG4gICAgfVxcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kOiAjZjBmY2ZkO1xcbiAgICAgIGNvbG9yOiAkcHJpbWFyeTtcXG5cXG4gICAgICBpIHtcXG4gICAgICAgIG9wYWNpdHk6IDE7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxufVxcblwiLFwiLyogc3R5bGVsaW50LWRpc2FibGUgKi9cXG5cXG4vLyBDb2xvciBzeXN0ZW1cXG4kd2hpdGU6ICNmZmY7XFxuJGdyYXktZGlzYWJsZWQ6ICNlYWViZWM7XFxuJGdyYXktMTAwOiAjZmFmYmZjO1xcbiRncmF5LTIwMDogI2ZhZmJmYztcXG4kZ3JheS0yNTA6ICNmYWZiZmM7XFxuJGdyYXktMzAwOiAjYmJjZGQyO1xcbiRncmF5LTQwMDogI2JiY2RkMjtcXG4kZ3JheS00NTA6ICNiM2M3Y2Q7XFxuJGdyYXktNTAwOiAjNmM4NjhlO1xcbiRncmF5LTU1MDogIzcwODA5MDtcXG4kZ3JheS02MDA6ICM2Yzg2OGU7XFxuJGdyYXktNzAwOiAjMzYzYTQxO1xcbiRncmF5LTc1MDogIzM2M2E0MTtcXG4kZ3JheS04MDA6ICMzNjNhNDE7XFxuJGdyYXktOTAwOiAjMjgyYjMwO1xcbiRibGFjazogIzAwMDtcXG5cXG4vLyBQUyBWYXJzXFxuJGV4dHJhLWxpZ2h0LWdyYXk6ICRncmF5LTEwMDtcXG4kbGlnaHQtZ3JheTogJGdyYXktMzAwO1xcbiRtZWRpdW0tZ3JheTogJGdyYXktNTAwO1xcbiRkYXJrLWdyYXk6ICRncmF5LTcwMDtcXG4kZXh0cmEtZGFyay1ncmF5OiAkZ3JheS05MDA7XFxuJGdyYXktbGlnaHQ6ICRsaWdodC1ncmF5O1xcbiRncmF5LW1lZGl1bTogJG1lZGl1bS1ncmF5O1xcbiRncmF5LWRhcms6ICRkYXJrLWdyYXk7XFxuJGdyYXktc29mdDogJGdyYXktMjAwO1xcbiRiYWNrZ3JvdW5kLWNvbG9yOiAjZWZmMWYyO1xcbiRwcmltYXJ5LWxpZ2h0ZW46ICNmNGZjZmQ7XFxuJGxvY2FsLWZvbnQ6IGZhbHNlICFkZWZhdWx0O1xcblxcbiRibHVlOiAjMjViOWQ3O1xcbiRpbmRpZ286ICM2NjEwZjIgIWRlZmF1bHQ7XFxuJHB1cnBsZTogIzZmNDJjMSAhZGVmYXVsdDtcXG4kcGluazogI2U4M2U4YyAhZGVmYXVsdDtcXG4kcmVkOiAjZjU0YzNlO1xcbiRvcmFuZ2U6ICNmZDdlMTQgIWRlZmF1bHQ7XFxuJHllbGxvdzogI2ZhYjAwMDtcXG4kZ3JlZW46ICM3MGI1ODA7XFxuJG9yYW5nZTogI2ZkN2UxNCAhZGVmYXVsdDtcXG4kdGVhbDogIzIwYzk5NyAhZGVmYXVsdDtcXG4kY3lhbjogJGJsdWU7XFxuJGxpZ2h0LWJsdWU6ICNmNGZjZmQ7XFxuXFxuLy8gbWFpbiBidXR0b24gYmFja2dyb3VuZCBjb2xvcnNcXG4kcHJpbWFyeS1ob3ZlcjogIzdjZDVlNztcXG4kcHJpbWFyeS1hY3RpdmU6ICMyMWE2YzE7XFxuJHByaW1hcnktZGlzYWJsZWQ6ICNkM2YxZjc7XFxuJHNlY29uZGFyeS1ob3ZlcjogI2I3Y2VkMztcXG4kc2Vjb25kYXJ5LWFjdGl2ZTogIzg4OWRhMjtcXG4kZGFuZ2VyLWhvdmVyOiAjZmRlMWUxO1xcbiRub3RpY2U6ICNkZmY1Zjk7XFxuXFxuJHByaW1hcnk6ICRibHVlICFkZWZhdWx0O1xcbiRzZWNvbmRhcnk6ICRtZWRpdW0tZ3JheTtcXG4kc3VjY2VzczogJGdyZWVuICFkZWZhdWx0O1xcbiRpbmZvOiAkY3lhbiAhZGVmYXVsdDtcXG4kd2FybmluZzogJHllbGxvdyAhZGVmYXVsdDtcXG4kZGFuZ2VyOiAkcmVkICFkZWZhdWx0O1xcbiRsaWdodDogJGdyYXktMTAwICFkZWZhdWx0O1xcbiRkYXJrOiAkZ3JheS04MDAgIWRlZmF1bHQ7XFxuXFxuJHRvYXN0LXN1Y2Nlc3M6ICM1M2Q1NzIgIWRlZmF1bHQ7XFxuJHRvYXN0LXdhcm5pbmc6ICNmYWIwMDAgIWRlZmF1bHQ7XFxuXFxuJGJyYW5kLXByaW1hcnk6ICRwcmltYXJ5ICFkZWZhdWx0O1xcbiRicmFuZC1zZWNvbmRhcnk6ICRzZWNvbmRhcnkgIWRlZmF1bHQ7XFxuJGJyYW5kLWluZm86ICM1YmMwZGUgIWRlZmF1bHQ7XFxuJGJyYW5kLXdhcm5pbmc6ICNmMGFkNGUgIWRlZmF1bHQ7XFxuJGJyYW5kLXN1Y2Nlc3M6ICRzdWNjZXNzICFkZWZhdWx0O1xcbiRicmFuZC1kYW5nZXI6ICRkYW5nZXIgIWRlZmF1bHQ7XFxuXFxuJGJ0bi1wcmltYXJ5LWJnOiAkcHJpbWFyeS1ob3ZlcjtcXG4kYnRuLXNlY29uZGFyeS1ib3JkZXI6ICMwMDA7XFxuJGJ0bi1pbmZvLWJnOiAkYnJhbmQtaW5mbyAhZGVmYXVsdDtcXG4kYnRuLXN1Y2Nlc3MtYmc6ICRicmFuZC1zdWNjZXNzICFkZWZhdWx0O1xcbiRidG4td2FybmluZy1iZzogJGJyYW5kLXdhcm5pbmcgIWRlZmF1bHQ7XFxuJGJ0bi1kYW5nZXItYmc6ICRicmFuZC1kYW5nZXIgIWRlZmF1bHQ7XFxuXFxuJHRoZW1lLWNvbG9yczogKFxcbiAgXFxcInByaW1hcnlcXFwiOiAkcHJpbWFyeSxcXG4gIFxcXCJzZWNvbmRhcnlcXFwiOiAkc2Vjb25kYXJ5LFxcbiAgXFxcInN1Y2Nlc3NcXFwiOiAkc3VjY2VzcyxcXG4gIFxcXCJpbmZvXFxcIjogJGluZm8sXFxuICBcXFwid2FybmluZ1xcXCI6ICR3YXJuaW5nLFxcbiAgXFxcImRhbmdlclxcXCI6ICRkYW5nZXIsXFxuICBcXFwibGlnaHRcXFwiOiAkbGlnaHQsXFxuICBcXFwiZGFya1xcXCI6ICRkYXJrXFxuKTtcXG5cXG4kYWxlcnRzLWJhY2tncm91bmQtY29sb3JzOiAoXFxuICBcXFwic3VjY2Vzc1xcXCI6ICNjYmYyZDQsXFxuICBcXFwiaW5mb1xcXCI6ICNiZWVhZjMsXFxuICBcXFwid2FybmluZ1xcXCI6ICNmZmZiZDMsXFxuICBcXFwiZGFuZ2VyXFxcIjogI2ZiYzZjM1xcbik7XFxuXFxuJGFsZXJ0cy1zZWNvbmQtY29sb3JzOiAoXFxuICBcXFwic3VjY2Vzc1xcXCI6ICM1M2Q1NzIsXFxuICBcXFwiaW5mb1xcXCI6ICMyNWI5ZDcsXFxuICBcXFwid2FybmluZ1xcXCI6ICNmYWIwMDAsXFxuICBcXFwiZGFuZ2VyXFxcIjogI2Y0NDMzNlxcbik7XFxuXFxuJHRoZW1lLWFsZXJ0cy1pY29uczogKFxcbiAgc3VjY2VzczogXFxcIlxcXFxFNUNBXFxcIixcXG4gIGluZm86IFxcXCJcXFxcZTg4ZVxcXCIsXFxuICB3YXJuaW5nOiBcXFwiXFxcXEUwMDJcXFwiLFxcbiAgZGFuZ2VyOiBcXFwiXFxcXGUwMDBcXFwiXFxuKTtcXG5cXG4kdGhlbWUtY29sb3JzLWljb25zOiAoXFxuICBcXFwicHJpbWFyeVxcXCI6ICRwcmltYXJ5LFxcbiAgXFxcInNlY29uZGFyeVxcXCI6ICRzZWNvbmRhcnksXFxuICBcXFwic3VjY2Vzc1xcXCI6ICRzdWNjZXNzLFxcbiAgXFxcImluZm9cXFwiOiAkaW5mbyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogI2ZhYjAwMCxcXG4gIFxcXCJkYW5nZXJcXFwiOiAkZGFuZ2VyLFxcbiAgXFxcImxpZ2h0XFxcIjogJGxpZ2h0XFxuKTtcXG5cXG4kdGhlbWUtY29sb3JzLWhvdmVyOiAoXFxuICBwcmltYXJ5OiAkcHJpbWFyeS1ob3ZlcixcXG4gIHNlY29uZGFyeTogJHNlY29uZGFyeS1ob3ZlcixcXG4gIHN1Y2Nlc3M6ICM5YmNiYTYsXFxuICBpbmZvOiAkcHJpbWFyeS1ob3ZlcixcXG4gIHdhcm5pbmc6ICNlNmIwNDUsXFxuICBkYW5nZXI6ICNlNzZkN2EsXFxuICBsaWdodDogJGdyYXktODAwLFxcbiAgZGFyazogJGdyYXktMTAwLFxcbiAgZGVmYXVsdDogJGxpZ2h0LWJsdWVcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtYWN0aXZlOiAoXFxuICBwcmltYXJ5OiAkcHJpbWFyeS1hY3RpdmUsXFxuICBzZWNvbmRhcnk6ICRzZWNvbmRhcnktYWN0aXZlLFxcbiAgc3VjY2VzczogIzVhOTE2NixcXG4gIGluZm86IGRhcmtlbihtYXAtZ2V0KCR0aGVtZS1jb2xvcnMsIFxcXCJpbmZvXFxcIiksIDEwJSksXFxuICB3YXJuaW5nOiBkYXJrZW4obWFwLWdldCgkdGhlbWUtY29sb3JzLCBcXFwid2FybmluZ1xcXCIpLCAxMCUpLFxcbiAgZGFuZ2VyOiAjYzMzNjJiLFxcbiAgbGlnaHQ6IGRhcmtlbihtYXAtZ2V0KCR0aGVtZS1jb2xvcnMsIFxcXCJsaWdodFxcXCIpLCAxMCUpLFxcbiAgZGFyazogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcImRhcmtcXFwiKSwgMTAlKSxcXG4gIGRlZmF1bHQ6ICRwcmltYXJ5XFxuKTtcXG5cXG4kdGhlbWUtY29sb3JzLWJhY2tncm91bmQ6IChcXG4gIHByaW1hcnk6ICNkZmY1ZjksXFxuICBzZWNvbmRhcnk6ICRibGFjayxcXG4gIHN1Y2Nlc3M6ICNkNmYwZDgsXFxuICBpbmZvOiAjZGZmNWY5LFxcbiAgd2FybmluZzogI2ZmZmJkMyxcXG4gIGRhbmdlcjogI2ZkZTFlMSxcXG4gIGxpZ2h0OiAkZ3JheS0yMDAsXFxuICBkYXJrOiAkZ3JheS03MDBcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtc2hhZG93OiAoXFxuICBwcmltYXJ5OiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpLFxcbiAgc2Vjb25kYXJ5OiAkYmxhY2ssXFxuICBzdWNjZXNzOiB0aGVtZS1jb2xvcihcXFwic3VjY2Vzc1xcXCIpLFxcbiAgaW5mbzogdGhlbWUtY29sb3IoXFxcImluZm9cXFwiKSxcXG4gIHdhcm5pbmc6IHRoZW1lLWNvbG9yKFxcXCJ3YXJuaW5nXFxcIiksXFxuICBkYW5nZXI6IHRoZW1lLWNvbG9yKFxcXCJkYW5nZXJcXFwiKSxcXG4gIGxpZ2h0OiB0aGVtZS1jb2xvcihcXFwibGlnaHRcXFwiKSxcXG4gIGRhcms6IHRoZW1lLWNvbG9yKFxcXCJkYXJrXFxcIilcXG4pO1xcblxcbi8vIE9wdGlvbnNcXG4kZW5hYmxlLWNhcmV0OiB0cnVlICFkZWZhdWx0O1xcbiRlbmFibGUtcm91bmRlZDogdHJ1ZTtcXG4kZW5hYmxlLXNoYWRvd3M6IHRydWU7XFxuJGVuYWJsZS1ncmFkaWVudHM6IGZhbHNlICFkZWZhdWx0O1xcbiRlbmFibGUtdHJhbnNpdGlvbnM6IHRydWUgIWRlZmF1bHQ7XFxuJGVuYWJsZS1ncmlkLWNsYXNzZXM6IHRydWUgIWRlZmF1bHQ7XFxuJGVuYWJsZS1wcmludC1zdHlsZXM6IHRydWUgIWRlZmF1bHQ7XFxuXFxuLy8gU3BhY2luZ1xcbiRzcGFjZXI6IDEuODc1cmVtO1xcblxcbiRzcGFjZXJzOiAoXFxuICAwOiAwLFxcbiAgMTogKFxcbiAgICAkc3BhY2VyIC8gNlxcbiAgKSxcXG4gIDI6IChcXG4gICAgJHNwYWNlciAvIDNcXG4gICksXFxuICAzOiAoXFxuICAgICRzcGFjZXIgLyAyXFxuICApLFxcbiAgNDogJHNwYWNlcixcXG4gIDU6IChcXG4gICAgJHNwYWNlciAqIDJcXG4gIClcXG4pO1xcblxcbi8vIEJvZHlcXG4kYm9keS1iZzogJHdoaXRlICFkZWZhdWx0O1xcbiRib2R5LWNvbG9yOiAkZGFyay1ncmF5O1xcblxcbi8vIExpbmtzXFxuJGxpbmstaG92ZXItY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIikgIWRlZmF1bHQ7XFxuJGxpbmstaG92ZXItZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcblxcbi8vIFBhcmFncmFwaHNcXG4kcGFyYWdyYXBoLW1hcmdpbi1ib3R0b206IDFyZW07XFxuXFxuLy8gR3JpZCBicmVha3BvaW50c1xcbiRncmlkLWJyZWFrcG9pbnRzOiAoXFxuICB4czogMCxcXG4gIHNtOiA1NDRweCxcXG4gIG1kOiA3NjhweCxcXG4gIGxnOiAxMDI0cHgsXFxuICB4bDogMTMwMHB4LFxcbiAgeHhsOiAxNjAwcHggLy8gUFMgY3VzdG9tXFxuKTtcXG5AaW5jbHVkZSBfYXNzZXJ0LWFzY2VuZGluZygkZ3JpZC1icmVha3BvaW50cywgXFxcIiRncmlkLWJyZWFrcG9pbnRzXFxcIik7XFxuQGluY2x1ZGUgX2Fzc2VydC1zdGFydHMtYXQtemVybygkZ3JpZC1icmVha3BvaW50cyk7XFxuXFxuLy8gR3JpZCBjb250YWluZXJzXFxuJGNvbnRhaW5lci1tYXgtd2lkdGhzOiAoXFxuICBzbTogNTc2cHgsXFxuICBtZDogNzIwcHgsXFxuICBsZzogOTcycHgsXFxuICB4bDogMTI0MHB4XFxuKTtcXG5AaW5jbHVkZSBfYXNzZXJ0LWFzY2VuZGluZygkY29udGFpbmVyLW1heC13aWR0aHMsIFxcXCIkY29udGFpbmVyLW1heC13aWR0aHNcXFwiKTtcXG5cXG4vLyBHcmlkIGNvbHVtbnNcXG4vLyRncmlkLWNvbHVtbnM6ICAgICAgICAgICAgICAgIDEyICFkZWZhdWx0O1xcbiRncmlkLWd1dHRlci13aWR0aDogMS44NzVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8gQ29tcG9uZW50c1xcbi8vJGxpbmUtaGVpZ2h0LWxnOiAgICAgICAgICAgICAgMS41ICFkZWZhdWx0O1xcbi8vJGxpbmUtaGVpZ2h0LXNtOiAgICAgICAgICAgICAgMS41ICFkZWZhdWx0O1xcblxcbi8vJGJvcmRlci13aWR0aDogICAgICAgICAgICAgICAgMXB4ICFkZWZhdWx0O1xcbi8vJGJvcmRlci1jb2xvcjogICAgICAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcblxcbiRib3JkZXItcmFkaXVzOiA0cHggIWRlZmF1bHQ7XFxuLy8kYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICAgICAuM3JlbSAhZGVmYXVsdDtcXG4vLyRib3JkZXItcmFkaXVzLXNtOiAgICAgICAgICAgIC4ycmVtICFkZWZhdWx0O1xcblxcbi8vJGNvbXBvbmVudC1hY3RpdmUtY29sb3I6ICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbi8vJGNvbXBvbmVudC1hY3RpdmUtYmc6ICAgICAgICAgdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSAhZGVmYXVsdDtcXG5cXG4kY2FyZXQtd2lkdGg6IC4yNXJlbTtcXG5cXG4vLyR0cmFuc2l0aW9uLWJhc2U6ICAgICAgICAgICAgIGFsbCAuMnMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XFxuLy8kdHJhbnNpdGlvbi1mYWRlOiAgICAgICAgICAgICBvcGFjaXR5IC4xNXMgbGluZWFyICFkZWZhdWx0O1xcbi8vJHRyYW5zaXRpb24tY29sbGFwc2U6ICAgICAgICAgaGVpZ2h0IC4zNXMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBGb250c1xcbiRmb250LWZhbWlseS1zYW5zLXNlcmlmOiBcXFwiT3BlbiBTYW5zXFxcIiwgaGVsdmV0aWNhLCBhcmlhbCwgc2Fucy1zZXJpZjtcXG4vLyRmb250LWZhbWlseS1tb25vc3BhY2U6ICAgICAgIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXFxcIkxpYmVyYXRpb24gTW9ub1xcXCIsIFxcXCJDb3VyaWVyIE5ld1xcXCIsIG1vbm9zcGFjZSAhZGVmYXVsdDtcXG4vLyRmb250LWZhbWlseS1iYXNlOiAgICAgICAgICAgICRmb250LWZhbWlseS1zYW5zLXNlcmlmICFkZWZhdWx0O1xcblxcbiRmb250LXNpemUtYmFzZTogLjg3NXJlbTtcXG4kZm9udC1zaXplLWxnOiAxcmVtO1xcbiRmb250LXNpemUtc206IC43NXJlbTtcXG4kZm9udC1zaXplLXhzOiAuNjI1cmVtOyAvLyBQUyBjdXN0b21cXG5cXG4vLyRmb250LXdlaWdodC1saWdodDogICAgICAgICAgIDMwMDtcXG4vLyRmb250LXdlaWdodC1ub3JtYWw6ICAgICAgICAgIDQwMDtcXG4kZm9udC13ZWlnaHQtc2VtaWJvbGQ6IDYwMDtcXG4kZm9udC13ZWlnaHQtYm9sZDogNzAwO1xcblxcbiRoMS1mb250LXNpemU6IDEuNXJlbTtcXG4kaDItZm9udC1zaXplOiAxLjI1cmVtO1xcbiRoMy1mb250LXNpemU6IDFyZW07XFxuJGg0LWZvbnQtc2l6ZTogLjg3NXJlbTtcXG4kaDUtZm9udC1zaXplOiAuNzVyZW07XFxuJGg2LWZvbnQtc2l6ZTogLjYyNXJlbTtcXG5cXG4vLyRoZWFkaW5ncy1tYXJnaW4tYm90dG9tOiAgICAgICgkc3BhY2VyIC8gMikgIWRlZmF1bHQ7XFxuJGhlYWRpbmdzLWZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktc2Fucy1zZXJpZjtcXG4kaGVhZGluZ3MtZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1ib2xkO1xcbiRoZWFkaW5ncy1jb2xvcjogJGJvZHktY29sb3I7XFxuXFxuLy8kZGlzcGxheTEtc2l6ZTogICAgICAgICAgICAgICA2cmVtICFkZWZhdWx0O1xcbi8vJGRpc3BsYXkyLXNpemU6ICAgICAgICAgICAgICAgNS41cmVtICFkZWZhdWx0O1xcbi8vJGRpc3BsYXkzLXNpemU6ICAgICAgICAgICAgICAgNC41cmVtICFkZWZhdWx0O1xcbi8vJGRpc3BsYXk0LXNpemU6ICAgICAgICAgICAgICAgMy41cmVtICFkZWZhdWx0O1xcblxcbi8vJGRpc3BsYXkxLXdlaWdodDogICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbi8vJGRpc3BsYXkyLXdlaWdodDogICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbi8vJGRpc3BsYXkzLXdlaWdodDogICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbi8vJGRpc3BsYXk0LXdlaWdodDogICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbi8vJGRpc3BsYXktbGluZS1oZWlnaHQ6ICAgICAgICAgJGhlYWRpbmdzLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcblxcbi8vJGxlYWQtZm9udC1zaXplOiAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqIDEuMjUpICFkZWZhdWx0O1xcbi8vJGxlYWQtZm9udC13ZWlnaHQ6ICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcblxcbi8vJHNtYWxsLWZvbnQtc2l6ZTogICAgICAgICAgICAgODAlICFkZWZhdWx0O1xcblxcbiR0ZXh0LW11dGVkOiAkbWVkaXVtLWdyYXk7XFxuXFxuLy8kYmxvY2txdW90ZS1zbWFsbC1jb2xvcjogICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuLy8kYmxvY2txdW90ZS1mb250LXNpemU6ICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogMS4yNSkgIWRlZmF1bHQ7XFxuXFxuJGhyLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kaHItYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcblxcbi8vJG1hcmstcGFkZGluZzogICAgICAgICAgICAgICAgLjJlbSAhZGVmYXVsdDtcXG5cXG4vLyRkdC1mb250LXdlaWdodDogICAgICAgICAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xcblxcbi8vJGtiZC1ib3gtc2hhZG93OiAgICAgICAgICAgICAgaW5zZXQgMCAtLjFyZW0gMCByZ2JhKCRibGFjaywgLjI1KSAhZGVmYXVsdDtcXG4vLyRuZXN0ZWQta2JkLWZvbnQtd2VpZ2h0OiAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xcblxcbi8vJGxpc3QtaW5saW5lLXBhZGRpbmc6ICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kbWFyay1iZzogICAgICAgICAgICAgICAgICAgICAjZmNmOGUzICFkZWZhdWx0O1xcblxcbi8vJGhyLW1hcmdpbi15OiAgICAgICAgICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcXG5cXG4vLyBUYWJsZXNcXG4kdGFibGUtY2VsbC1wYWRkaW5nOiAuNHJlbTtcXG4kdGFibGUtY2VsbC1wYWRkaW5nLXNtOiAuMjVyZW07XFxuXFxuLy8kdGFibGUtYmc6ICAgICAgICAgICAgICAgICAgICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcXG4kdGFibGUtYWNjZW50LWJnOiAkYmFja2dyb3VuZC1jb2xvcjtcXG4kdGFibGUtaG92ZXItYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuJHRhYmxlLWFjdGl2ZS1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG5cXG4vLyR0YWJsZS1ib3JkZXItd2lkdGg6ICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuLy8kdGFibGUtYm9yZGVyLWNvbG9yOiAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuXFxuJHRhYmxlLWhlYWQtYmc6ICRiYWNrZ3JvdW5kLWNvbG9yO1xcbiR0YWJsZS1oZWFkLWNvbG9yOiAkYm9keS1jb2xvcjtcXG5cXG4kdGFibGUtZGFyay1iZzogJGJvZHktY29sb3I7XFxuJHRhYmxlLWRhcmstYWNjZW50LWJnOiAkZXh0cmEtZGFyay1ncmF5O1xcbiR0YWJsZS1kYXJrLWhvdmVyLWJnOiB0aGVtZS1jb2xvci1ob3ZlcihcXFwicHJpbWFyeVxcXCIpO1xcbiR0YWJsZS1kYXJrLWJvcmRlci1jb2xvcjogJG1lZGl1bS1ncmF5O1xcbi8vJHRhYmxlLWRhcmstY29sb3I6ICAgICAgICAgICAgJGJvZHktYmcgIWRlZmF1bHQ7XFxuXFxuLy8gQnV0dG9uc1xcbiRpbnB1dC1idG4tcGFkZGluZy15OiAuMzc1cmVtO1xcbiRpbnB1dC1idG4tcGFkZGluZy14OiAuODM4cmVtO1xcbi8vJGlucHV0LWJ0bi1saW5lLWhlaWdodDogICAgICAgJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtYnRuLWZvY3VzLXdpZHRoOiAgICAgICAuMnJlbSAhZGVmYXVsdDtcXG4vLyRpbnB1dC1idG4tZm9jdXMtY29sb3I6ICAgICAgIHJnYmEoJGNvbXBvbmVudC1hY3RpdmUtYmcsIC4yNSkgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3c6ICAwIDAgMCAkaW5wdXQtYnRuLWZvY3VzLXdpZHRoICRpbnB1dC1idG4tZm9jdXMtY29sb3IgIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWJ0bi1wYWRkaW5nLXktc206IC4zMTNyZW07XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXgtc206IC42MjVyZW07XFxuLy8kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LXNtOiAgICAkbGluZS1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWJ0bi1wYWRkaW5nLXktbGc6IC40MzhyZW07XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGc6IC44MzhyZW07XFxuLy8kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnOiAgICAkbGluZS1oZWlnaHQtbGcgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtYnRuLWJvcmRlci13aWR0aDogICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcblxcbi8vIEJ1dHRvbnNcXG4kYnRuLXBhZGRpbmcteTogLjVyZW0gIWRlZmF1bHQ7XFxuJGJ0bi1wYWRkaW5nLXg6IDFyZW0gIWRlZmF1bHQ7XFxuLy8kYnRuLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcblxcbi8vJGJ0bi1wYWRkaW5nLXktc206ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktc20gIWRlZmF1bHQ7XFxuLy8kYnRuLXBhZGRpbmcteC1zbTogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1zbSAhZGVmYXVsdDtcXG4vLyRidG4tbGluZS1oZWlnaHQtc206ICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLXBhZGRpbmcteS1sZzogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1sZyAhZGVmYXVsdDtcXG4vLyRidG4tcGFkZGluZy14LWxnOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LWxnICFkZWZhdWx0O1xcbi8vJGJ0bi1saW5lLWhlaWdodC1sZzogICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4vLyRidG4tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICRpbnB1dC1idG4tYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcblxcbiRidG4tZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1zZW1pYm9sZDtcXG4kYnRuLWJveC1zaGFkb3c6IG5vbmU7XFxuLy8kYnRuLWZvY3VzLXdpZHRoOiAgICAgICAgICAgICAkaW5wdXQtYnRuLWZvY3VzLXdpZHRoICFkZWZhdWx0O1xcbiRidG4tZm9jdXMtYm94LXNoYWRvdzogbm9uZTtcXG4vLyRidG4tZGlzYWJsZWQtb3BhY2l0eTogICAgICAgIC42NSAhZGVmYXVsdDtcXG4kYnRuLWFjdGl2ZS1ib3gtc2hhZG93OiBub25lO1xcblxcbi8vJGJ0bi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcblxcbi8vJGJ0bi1ibG9jay1zcGFjaW5nLXk6ICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuXFxuJGJ0bi1ib3JkZXItcmFkaXVzOiA0cHg7XFxuLy8kYnRuLWJvcmRlci1yYWRpdXMtbGc6ICAgICAgICAkYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcXG4vLyRidG4tYm9yZGVyLXJhZGl1cy1zbTogICAgICAgICRib3JkZXItcmFkaXVzLXNtICFkZWZhdWx0O1xcblxcbi8vJGJ0bi10cmFuc2l0aW9uOiAgICAgICAgICAgICAgY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYmFja2dyb3VuZC1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xcblxcbi8vIEZvcm1zXFxuJGlucHV0LXBhZGRpbmcteTogLjM3NXJlbTtcXG4kaW5wdXQtcGFkZGluZy14OiAuNDM3NXJlbTtcXG4vLyRpbnB1dC1saW5lLWhlaWdodDogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LXBhZGRpbmcteS1zbTogICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LXNtICFkZWZhdWx0O1xcbi8vJGlucHV0LXBhZGRpbmcteC1zbTogICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LXNtICFkZWZhdWx0O1xcbi8vJGlucHV0LWxpbmUtaGVpZ2h0LXNtOiAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtcGFkZGluZy15LWxnOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktbGcgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtcGFkZGluZy14LWxnOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGcgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtbGluZS1oZWlnaHQtbGc6ICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1iZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGlucHV0LWRpc2FibGVkLWJnOiAjZWNlZWVmO1xcblxcbiRpbnB1dC1jb2xvcjogJGJvZHktY29sb3I7XFxuJGlucHV0LWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kaW5wdXQtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJGlucHV0LWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuLy8kaW5wdXQtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMtbGcgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtYm9yZGVyLXJhZGl1cy1zbTogICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMtc20gIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtZm9jdXMtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJnICFkZWZhdWx0O1xcbiRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3I6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuLy8kaW5wdXQtZm9jdXMtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbi8vJGlucHV0LWZvY3VzLXdpZHRoOiAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tZm9jdXMtd2lkdGggIWRlZmF1bHQ7XFxuJGlucHV0LWZvY3VzLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuJGlucHV0LXBsYWNlaG9sZGVyLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuXFxuLy8kaW5wdXQtaGVpZ2h0LWJvcmRlcjogICAgICAgICAgICAgICAgICAgJGlucHV0LWJvcmRlci13aWR0aCAqIDIgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtaGVpZ2h0LWlubmVyOiAgICAgICAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqICRpbnB1dC1idG4tbGluZS1oZWlnaHQpICsgKCRpbnB1dC1idG4tcGFkZGluZy15ICogMikgIWRlZmF1bHQ7XFxuJGlucHV0LWhlaWdodDogMi4xODhyZW07XFxuXFxuLy8kaW5wdXQtaGVpZ2h0LWlubmVyLXNtOiAgICAgICAgICAgICAgICAgKCRmb250LXNpemUtc20gKiAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LXNtKSArICgkaW5wdXQtYnRuLXBhZGRpbmcteS1zbSAqIDIpICFkZWZhdWx0O1xcbi8vJGlucHV0LWhlaWdodC1zbTogICAgICAgICAgICAgICAgICAgICAgIGNhbGMoI3skaW5wdXQtaGVpZ2h0LWlubmVyLXNtfSArICN7JGlucHV0LWhlaWdodC1ib3JkZXJ9KSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXItbGc6ICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1sZyAqICRpbnB1dC1idG4tbGluZS1oZWlnaHQtbGcpICsgKCRpbnB1dC1idG4tcGFkZGluZy15LWxnICogMikgIWRlZmF1bHQ7XFxuJGlucHV0LWhlaWdodC1sZzogMi4xODhyZW07XFxuXFxuLy8kaW5wdXQtdHJhbnNpdGlvbjogICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgLjE1cyBlYXNlLWluLW91dCAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLXRleHQtbWFyZ2luLXRvcDogICAgICAgICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZm9ybS1jaGVjay1pbnB1dC1ndXR0ZXI6ICAgICAgICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG4vLyRmb3JtLWNoZWNrLWlucHV0LW1hcmdpbi15OiAgICAgICAgICAgICAuM3JlbSAhZGVmYXVsdDtcXG4vLyRmb3JtLWNoZWNrLWlucHV0LW1hcmdpbi14OiAgICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZm9ybS1jaGVjay1pbmxpbmUtbWFyZ2luLXg6ICAgICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcbi8vJGZvcm0tY2hlY2staW5saW5lLWlucHV0LW1hcmdpbi14OiAgICAgIC4zMTI1cmVtICFkZWZhdWx0O1xcblxcbi8vJGZvcm0tZ3JvdXAtbWFyZ2luLWJvdHRvbTogICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtZ3JvdXAtYWRkb24tY29sb3I6ICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbiRpbnB1dC1ncm91cC1hZGRvbi1iZzogJGV4dHJhLWxpZ2h0LWdyYXk7XFxuLy8kaW5wdXQtZ3JvdXAtYWRkb24tYm9yZGVyLWNvbG9yOiAgICAgICAgJGlucHV0LWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tY29udHJvbC1ndXR0ZXI6ICAgICAgICAgICAgICAgICAxLjVyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtc3BhY2VyLXg6ICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3Itc2l6ZTogICAgICAgICAxcmVtICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1iZzogICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYmctc2l6ZTogICAgICA1MCUgNTAlICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1ib3gtc2hhZG93OiAgIGluc2V0IDAgLjI1cmVtIC4yNXJlbSByZ2JhKCRibGFjaywgLjEpICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1kaXNhYmxlZC1iZzogICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWxhYmVsLWRpc2FibGVkLWNvbG9yOiAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWNvbG9yOiAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtYmc6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1kaXNhYmxlZC1iZzogIHJnYmEodGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSwgLjUpICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWJveC1zaGFkb3c6ICAgbm9uZSAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItZm9jdXMtYm94LXNoYWRvdzogICAgIDAgMCAwIDFweCAkYm9keS1iZywgJGlucHV0LWJ0bi1mb2N1cy1ib3gtc2hhZG93ICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1hY3RpdmUtY29sb3I6ICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1iZzogICAgICAgICAgICBsaWdodGVuKCRjb21wb25lbnQtYWN0aXZlLWJnLCAzNSUpICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1hY3RpdmUtYm94LXNoYWRvdzogICAgbm9uZSAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWJvcmRlci1yYWRpdXM6ICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaWNvbi1jaGVja2VkOiAgICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA4IDgnJTNFJTNDcGF0aCBmaWxsPScjeyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvcn0nIGQ9J002LjU2NC43NWwtMy41OSAzLjYxMi0xLjUzOC0xLjU1TDAgNC4yNiAyLjk3NCA3LjI1IDggMi4xOTN6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaW5kZXRlcm1pbmF0ZS1iZzogICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWNvbG9yOiAkY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pY29uLWluZGV0ZXJtaW5hdGU6ICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDQgNCclM0UlM0NwYXRoIHN0cm9rZT0nI3skY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWNvbG9yfScgZD0nTTAgMmg0Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaW5kZXRlcm1pbmF0ZS1ib3gtc2hhZG93OiBub25lICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1yYWRpby1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1czogICAgICAgICAgNTAlICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1yYWRpby1pbmRpY2F0b3ItaWNvbi1jaGVja2VkOiAgICAgICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9Jy00IC00IDggOCclM0UlM0NjaXJjbGUgcj0nMycgZmlsbD0nI3skY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3J9Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1zZWxlY3QtcGFkZGluZy15OiAgICAgICAgICAgLjM3NXJlbSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LXBhZGRpbmcteDogICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtaGVpZ2h0OiAgICAgICAgICAgICAgJGlucHV0LWhlaWdodCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWluZGljYXRvci1wYWRkaW5nOiAgIDFyZW0gIWRlZmF1bHQ7IC8vIEV4dHJhIHBhZGRpbmcgdG8gYWNjb3VudCBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBiYWNrZ3JvdW5kLWltYWdlIGJhc2VkIGluZGljYXRvclxcbi8vJGN1c3RvbS1zZWxlY3QtbGluZS1oZWlnaHQ6ICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWNvbG9yOiAgICAgICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1kaXNhYmxlZC1jb2xvcjogJG1lZGl1bS1ncmF5O1xcbi8vJGN1c3RvbS1zZWxlY3QtYmc6ICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWRpc2FibGVkLWJnOiAkaW5wdXQtZGlzYWJsZWQtYmc7XFxuJGN1c3RvbS1zZWxlY3QtYmctc2l6ZTogOHB4IDEwcHggIWRlZmF1bHQ7IC8vIEluIHBpeGVscyBiZWNhdXNlIGltYWdlIGRpbWVuc2lvbnNcXG4kY3VzdG9tLXNlbGVjdC1pbmRpY2F0b3ItY29sb3I6ICRpbnB1dC1jb2xvcjtcXG4vLyRjdXN0b20tc2VsZWN0LWluZGljYXRvcjogICAgICAgICAgIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA1JyUzRSUzQ3BhdGggZmlsbD0nI3skY3VzdG9tLXNlbGVjdC1pbmRpY2F0b3ItY29sb3J9JyBkPSdNMiAwTDAgMmg0em0wIDVMMCAzaDR6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtYm9yZGVyLXdpZHRoOiAgICAgICAgJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1ib3JkZXItY29sb3I6ICAgICAgICAkaW5wdXQtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtYm9yZGVyLXJhZGl1czogICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1zZWxlY3QtZm9jdXMtYm9yZGVyLWNvbG9yOiAkaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yO1xcbiRjdXN0b20tc2VsZWN0LWZvY3VzLWJveC1zaGFkb3c6ICRpbnB1dC1mb2N1cy1ib3gtc2hhZG93O1xcblxcbi8vJGN1c3RvbS1zZWxlY3QtZm9udC1zaXplLXNtOiAgICAgICAgNzUlICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtaGVpZ2h0LXNtOiAgICAgICAgICAgJGlucHV0LWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tc2VsZWN0LWZvbnQtc2l6ZS1sZzogICAgICAgIDEyNSUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1oZWlnaHQtbGc6ICAgICAgICAgICAkaW5wdXQtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1maWxlLWhlaWdodDogICAgICAgICAgICAgICAgJGlucHV0LWhlaWdodCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1mb2N1cy1ib3JkZXItY29sb3I6ICAgICRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLWZvY3VzLWJveC1zaGFkb3c6ICRpbnB1dC1mb2N1cy1ib3gtc2hhZG93O1xcblxcbi8vJGN1c3RvbS1maWxlLXBhZGRpbmcteTogICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXkgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtcGFkZGluZy14OiAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1saW5lLWhlaWdodDogICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtY29sb3I6ICAgICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYmc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYmcgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYm9yZGVyLXdpZHRoOiAgICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItY29sb3I6ICAgICAgICAgICRpbnB1dC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYm9yZGVyLXJhZGl1czogICAgICAgICAkaW5wdXQtYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3gtc2hhZG93OiAgICAgICAgICAgICRpbnB1dC1ib3gtc2hhZG93ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJ1dHRvbi1jb2xvcjogICAgICAgICAgJGN1c3RvbS1maWxlLWNvbG9yICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJ1dHRvbi1iZzogICAgICAgICAgICAgJGlucHV0LWdyb3VwLWFkZG9uLWJnICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLXRleHQ6IChcXG4vLyAgICAgICAgZW46IFxcXCJCcm93c2VcXFwiXFxuLy8pICFkZWZhdWx0O1xcblxcbiRjdXJzb3ItZGlzYWJsZWQ6IG5vdC1hbGxvd2VkOyAvLyBQUyBjdXN0b21cXG5cXG4vLyBGb3JtIHZhbGlkYXRpb25cXG4vLyRmb3JtLWZlZWRiYWNrLW1hcmdpbi10b3A6ICAgICAgICAgICRmb3JtLXRleHQtbWFyZ2luLXRvcCAhZGVmYXVsdDtcXG4vLyRmb3JtLWZlZWRiYWNrLWZvbnQtc2l6ZTogICAgICAgICAgICRzbWFsbC1mb250LXNpemUgIWRlZmF1bHQ7XFxuJGZvcm0tZmVlZGJhY2stdmFsaWQtY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJzdWNjZXNzXFxcIik7XFxuJGZvcm0tZmVlZGJhY2staW52YWxpZC1jb2xvcjogdGhlbWUtY29sb3IoXFxcImRhbmdlclxcXCIpO1xcbiRmb3JtLWZlZWRiYWNrLXdhcm5pbmctY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJ3YXJuaW5nXFxcIik7IC8vIFBTIGN1c3RvbVxcblxcbi8vIERyb3Bkb3duc1xcbi8vJGRyb3Bkb3duLW1pbi13aWR0aDogICAgICAgICAgICAgICAgMTByZW0gIWRlZmF1bHQ7XFxuJGRyb3Bkb3duLXBhZGRpbmcteTogMDtcXG4vLyRkcm9wZG93bi1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcbi8vJGRyb3Bkb3duLXNwYWNlcjogICAgICAgICAgICAgICAgICAgLjEyNXJlbSAhZGVmYXVsdDtcXG4vLyRkcm9wZG93bi1iZzogICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRkcm9wZG93bi1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGRyb3Bkb3duLWJvcmRlci13aWR0aDogICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kZHJvcGRvd24tZGl2aWRlci1iZzogJGxpZ2h0LWdyYXk7XFxuLy8kZHJvcGRvd24tYm94LXNoYWRvdzogICAgICAgICAgICAgICAwIC41cmVtIDFyZW0gcmdiYSgkYmxhY2ssIC4xNzUpICFkZWZhdWx0O1xcblxcbiRkcm9wZG93bi1saW5rLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuJGRyb3Bkb3duLWxpbmstaG92ZXItY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIik7XFxuJGRyb3Bkb3duLWxpbmstaG92ZXItYmc6ICR3aGl0ZTtcXG5cXG4vLyRkcm9wZG93bi1saW5rLWFjdGl2ZS1jb2xvcjogICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbi8vJGRyb3Bkb3duLWxpbmstYWN0aXZlLWJnOiAgICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuXFxuLy8kZHJvcGRvd24tbGluay1kaXNhYmxlZC1jb2xvcjogICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuJGRyb3Bkb3duLWl0ZW0tcGFkZGluZy14OiAuMzEyNXJlbTtcXG4kZHJvcGRvd24taXRlbS1wYWRkaW5nLXk6IC4zMTI1cmVtO1xcblxcbi8vJGRyb3Bkb3duLWhlYWRlci1jb2xvcjogICAgICAgICAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcblxcbi8vIE5hdnNcXG4kbmF2LWxpbmstcGFkZGluZy15OiAuOTM3NXJlbTtcXG4kbmF2LWxpbmstcGFkZGluZy14OiAxLjI1cmVtO1xcbiRuYXYtbGluay1kaXNhYmxlZC1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuXFxuJG5hdi10YWJzLWJvcmRlci1jb2xvcjogJHdoaXRlO1xcbi8vJG5hdi10YWJzLWJvcmRlci13aWR0aDogICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRuYXYtdGFicy1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbiRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG4kbmF2LXRhYnMtbGluay1hY3RpdmUtY29sb3I6ICRib2R5LWNvbG9yO1xcbiRuYXYtdGFicy1saW5rLWFjdGl2ZS1iZzogJGJvZHktYmc7XFxuJG5hdi10YWJzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG5cXG4kbmF2LXBpbGxzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiAkbmF2LXRhYnMtbGluay1ob3Zlci1ib3JkZXItY29sb3I7XFxuJG5hdi1waWxscy1saW5rLWFjdGl2ZS1jb2xvcjogJG5hdi10YWJzLWxpbmstYWN0aXZlLWNvbG9yO1xcbiRuYXYtcGlsbHMtbGluay1hY3RpdmUtYmc6ICNmNGY5ZmI7XFxuJG5hdi1waWxscy1saW5rLWFjdGl2ZS1ib3JkZXItY29sb3I6ICRuYXYtdGFicy1saW5rLWFjdGl2ZS1ib3JkZXItY29sb3I7IC8vIFBTIGN1c3RvbVxcblxcbi8vJG5hdi1waWxscy1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRuYXYtcGlsbHMtbGluay1hY3RpdmUtYmc6ICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xcblxcbi8vIE5hdmJhclxcbi8vJG5hdmJhci1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgICAgKCRzcGFjZXIgLyAyKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICRzcGFjZXIgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2YmFyLW5hdi1saW5rLXBhZGRpbmcteDogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItYnJhbmQtZm9udC1zaXplOiAgICAgICAgICAgICRmb250LXNpemUtbGcgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2LWxpbmstaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogJGxpbmUtaGVpZ2h0LWJhc2UgKyAkbmF2LWxpbmstcGFkZGluZy15ICogMikgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWJyYW5kLWhlaWdodDogICAgICAgICAgICAgICAkbmF2YmFyLWJyYW5kLWZvbnQtc2l6ZSAqICRsaW5lLWhlaWdodC1iYXNlICFkZWZhdWx0O1xcbi8vJG5hdmJhci1icmFuZC1wYWRkaW5nLXk6ICAgICAgICAgICAgKCRuYXYtbGluay1oZWlnaHQgLSAkbmF2YmFyLWJyYW5kLWhlaWdodCkgLyAyICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci10b2dnbGVyLXBhZGRpbmcteTogICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xcbi8vJG5hdmJhci10b2dnbGVyLXBhZGRpbmcteDogICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcbi8vJG5hdmJhci10b2dnbGVyLWZvbnQtc2l6ZTogICAgICAgICAgJGZvbnQtc2l6ZS1sZyAhZGVmYXVsdDtcXG4vLyRuYXZiYXItdG9nZ2xlci1ib3JkZXItcmFkaXVzOiAgICAgICRidG4tYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItZGFyay1jb2xvcjogICAgICAgICAgICAgICAgIHJnYmEoJHdoaXRlLCAuNSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWRhcmstaG92ZXItY29sb3I6ICAgICAgICAgICByZ2JhKCR3aGl0ZSwgLjc1KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay1hY3RpdmUtY29sb3I6ICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay1kaXNhYmxlZC1jb2xvcjogICAgICAgIHJnYmEoJHdoaXRlLCAuMjUpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLXRvZ2dsZXItaWNvbi1iZzogICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB2aWV3Qm94PScwIDAgMzAgMzAnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIHN0cm9rZT0nI3skbmF2YmFyLWRhcmstY29sb3J9JyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW1pdGVybGltaXQ9JzEwJyBkPSdNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay10b2dnbGVyLWJvcmRlci1jb2xvcjogIHJnYmEoJHdoaXRlLCAuMSkgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2YmFyLWxpZ2h0LWNvbG9yOiAgICAgICAgICAgICAgICByZ2JhKCRibGFjaywgLjUpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1saWdodC1ob3Zlci1jb2xvcjogICAgICAgICAgcmdiYSgkYmxhY2ssIC43KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtYWN0aXZlLWNvbG9yOiAgICAgICAgIHJnYmEoJGJsYWNrLCAuOSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LWRpc2FibGVkLWNvbG9yOiAgICAgICByZ2JhKCRibGFjaywgLjMpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1saWdodC10b2dnbGVyLWljb24tYmc6ICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB2aWV3Qm94PScwIDAgMzAgMzAnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIHN0cm9rZT0nI3skbmF2YmFyLWxpZ2h0LWNvbG9yfScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1taXRlcmxpbWl0PScxMCcgZD0nTTQgN2gyMk00IDE1aDIyTTQgMjNoMjInLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LXRvZ2dsZXItYm9yZGVyLWNvbG9yOiByZ2JhKCRibGFjaywgLjEpICFkZWZhdWx0O1xcblxcbi8vIFBhZ2luYXRpb25cXG4kcGFnaW5hdGlvbi1wYWRkaW5nLXk6IC42NXJlbTtcXG4kcGFnaW5hdGlvbi1wYWRkaW5nLXg6IC41cmVtO1xcbi8vJHBhZ2luYXRpb24tcGFkZGluZy15LXNtOiAgICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xcbi8vJHBhZ2luYXRpb24tcGFkZGluZy14LXNtOiAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXktbGc6ICAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAxLjVyZW0gIWRlZmF1bHQ7XFxuLy8kcGFnaW5hdGlvbi1saW5lLWhlaWdodDogICAgICAgICAgICAxLjI1ICFkZWZhdWx0O1xcblxcbiRwYWdpbmF0aW9uLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuJHBhZ2luYXRpb24tYmc6ICR3aGl0ZTtcXG4vLyRwYWdpbmF0aW9uLWJvcmRlci13aWR0aDogICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yOiAkd2hpdGU7XFxuXFxuLy8kcGFnaW5hdGlvbi1mb2N1cy1ib3gtc2hhZG93OiAgICAgICAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuXFxuJHBhZ2luYXRpb24taG92ZXItY29sb3I6ICRwYWdpbmF0aW9uLWNvbG9yO1xcbiRwYWdpbmF0aW9uLWhvdmVyLWJnOiAkcGFnaW5hdGlvbi1iZztcXG4kcGFnaW5hdGlvbi1ob3Zlci1ib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWJvcmRlci1jb2xvcjtcXG5cXG4kcGFnaW5hdGlvbi1hY3RpdmUtY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIik7XFxuJHBhZ2luYXRpb24tYWN0aXZlLWJnOiAkcGFnaW5hdGlvbi1iZztcXG4kcGFnaW5hdGlvbi1hY3RpdmUtYm9yZGVyLWNvbG9yOiAkcGFnaW5hdGlvbi1ib3JkZXItY29sb3I7XFxuXFxuJHBhZ2luYXRpb24tZGlzYWJsZWQtY29sb3I6ICRsaWdodC1ncmF5O1xcbiRwYWdpbmF0aW9uLWRpc2FibGVkLWJnOiAkcGFnaW5hdGlvbi1iZztcXG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1ib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWJvcmRlci1jb2xvcjtcXG5cXG4vLyBKdW1ib3Ryb25cXG4kanVtYm90cm9uLXBhZGRpbmc6IDJyZW0gIWRlZmF1bHQ7XFxuJGp1bWJvdHJvbi1iZzogJGV4dHJhLWxpZ2h0LWdyYXk7XFxuXFxuLy8gQ2FyZHNcXG4kY2FyZC1zcGFjZXIteDogLjYyNXJlbSAhZGVmYXVsdDtcXG4kY2FyZC1zcGFjZXIteTogLjYyNXJlbSAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItd2lkdGg6IDFweCAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItcmFkaXVzOiA1cHggIWRlZmF1bHQ7XFxuJGNhcmQtYm9yZGVyLXJhZGl1cy1pbm5lcjogJGNhcmQtYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kY2FyZC1jYXAtYmc6ICRncmF5LTIwMCAhZGVmYXVsdDtcXG4kY2FyZC1iZzogI2ZmZiAhZGVmYXVsdDtcXG4kY2FyZC1saW5rLWhvdmVyLWNvbG9yOiAjZmZmICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci1jb2xvcjogI2RiZTZlOSAhZGVmYXVsdDtcXG4vLyRjYXJkLWlubmVyLWJvcmRlci1yYWRpdXM6ICAgICAgICAgIGNhbGMoI3skY2FyZC1ib3JkZXItcmFkaXVzfSAtICN7JGNhcmQtYm9yZGVyLXdpZHRofSkgIWRlZmF1bHQ7XFxuLy8kY2FyZC1jYXAtYmc6ICAgICAgICAgICAgICAgICAgICAgICByZ2JhKCRibGFjaywgLjAzKSAhZGVmYXVsdDtcXG4vLyRjYXJkLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJkLWltZy1vdmVybGF5LXBhZGRpbmc6ICAgICAgICAgIDEuMjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kY2FyZC1ncm91cC1tYXJnaW46ICAgICAgICAgICAgICAgICAoJGdyaWQtZ3V0dGVyLXdpZHRoIC8gMikgIWRlZmF1bHQ7XFxuLy8kY2FyZC1kZWNrLW1hcmdpbjogICAgICAgICAgICAgICAgICAkY2FyZC1ncm91cC1tYXJnaW4gIWRlZmF1bHQ7XFxuXFxuLy8kY2FyZC1jb2x1bW5zLWNvdW50OiAgICAgICAgICAgICAgICAzICFkZWZhdWx0O1xcbi8vJGNhcmQtY29sdW1ucy1nYXA6ICAgICAgICAgICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG4vLyRjYXJkLWNvbHVtbnMtbWFyZ2luOiAgICAgICAgICAgICAgICRjYXJkLXNwYWNlci15ICFkZWZhdWx0O1xcblxcbi8vIFRvb2x0aXBzXFxuLy8kdG9vbHRpcC1mb250LXNpemU6ICAgICAgICAgICAkZm9udC1zaXplLXNtICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtbWF4LXdpZHRoOiAgICAgICAgICAgMjAwcHggIWRlZmF1bHQ7XFxuLy8kdG9vbHRpcC1jb2xvcjogICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJHRvb2x0aXAtYmc6ICRtZWRpdW0tZ3JheTtcXG4vLyR0b29sdGlwLWJvcmRlci1yYWRpdXM6ICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLW9wYWNpdHk6ICAgICAgICAgICAgIC45ICFkZWZhdWx0O1xcbiR0b29sdGlwLXBhZGRpbmcteTogLjYyNXJlbTtcXG4kdG9vbHRpcC1wYWRkaW5nLXg6IDEuMjVyZW07XFxuLy8kdG9vbHRpcC1tYXJnaW46ICAgICAgICAgICAgICAwICFkZWZhdWx0O1xcblxcbi8vJHRvb2x0aXAtYXJyb3ctd2lkdGg6ICAgICAgICAgLjhyZW0gIWRlZmF1bHQ7XFxuLy8kdG9vbHRpcC1hcnJvdy1oZWlnaHQ6ICAgICAgICAuNHJlbSAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLWFycm93LWNvbG9yOiAgICAgICAgICR0b29sdGlwLWJnICFkZWZhdWx0O1xcblxcbi8vIFBvcG92ZXJzXFxuLy8kcG9wb3Zlci1mb250LXNpemU6ICAgICAgICAgICAgICAgICAkZm9udC1zaXplLXNtICFkZWZhdWx0O1xcbi8vJHBvcG92ZXItYmc6ICAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbi8vJHBvcG92ZXItbWF4LXdpZHRoOiAgICAgICAgICAgICAgICAgMjc2cHggIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kcG9wb3Zlci1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcXG4kcG9wb3Zlci1ib3gtc2hhZG93OiBub25lO1xcblxcbiRwb3BvdmVyLWhlYWRlci1iZzogJGV4dHJhLWxpZ2h0LWdyYXk7XFxuLy8kcG9wb3Zlci1oZWFkZXItY29sb3I6ICAgICAgICAgICAgICAkaGVhZGluZ3MtY29sb3IgIWRlZmF1bHQ7XFxuJHBvcG92ZXItaGVhZGVyLXBhZGRpbmcteTogLjYyNXJlbTtcXG4kcG9wb3Zlci1oZWFkZXItcGFkZGluZy14OiAxLjI1cmVtO1xcblxcbi8vJHBvcG92ZXItYm9keS1jb2xvcjogICAgICAgICAgICAgICAgJGJvZHktY29sb3IgIWRlZmF1bHQ7XFxuJHBvcG92ZXItYm9keS1wYWRkaW5nLXk6IC42MjVyZW07XFxuJHBvcG92ZXItYm9keS1wYWRkaW5nLXg6IDEuMjVyZW07XFxuXFxuLy8kcG9wb3Zlci1hcnJvdy13aWR0aDogICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcbi8vJHBvcG92ZXItYXJyb3ctaGVpZ2h0OiAgICAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1hcnJvdy1jb2xvcjogICAgICAgICAgICAgICAkcG9wb3Zlci1iZyAhZGVmYXVsdDtcXG5cXG4vLyRwb3BvdmVyLWFycm93LW91dGVyLWNvbG9yOiAgICAgICAgIGZhZGUtaW4oJHBvcG92ZXItYm9yZGVyLWNvbG9yLCAuMDUpICFkZWZhdWx0O1xcblxcbi8vIEJhZGdlc1xcbiRiYWRnZS1mb250LXNpemU6IC42MjVyZW0gIWRlZmF1bHQ7XFxuJGJhZGdlLWZvbnQtd2VpZ2h0OiA1MDAgIWRlZmF1bHQ7XFxuJGJhZGdlLXBhZGRpbmcteTogLjI1cmVtO1xcbiRiYWRnZS1wYWRkaW5nLXg6IC41cmVtO1xcbi8vJGJhZGdlLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuXFxuLy8kYmFkZ2UtcGlsbC1wYWRkaW5nLXg6ICAgICAgICAgICAgICAuNmVtICFkZWZhdWx0O1xcbi8vJGJhZGdlLXBpbGwtYm9yZGVyLXJhZGl1czogICAgICAgICAgMTByZW0gIWRlZmF1bHQ7XFxuXFxuLy8gTW9kYWxzXFxuJG1vZGFsLWlubmVyLXBhZGRpbmc6IDEuODc1cmVtO1xcblxcbi8vJG1vZGFsLWRpYWxvZy1tYXJnaW46ICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuLy8kbW9kYWwtZGlhbG9nLW1hcmdpbi15LXNtLXVwOiAxLjc1cmVtICFkZWZhdWx0O1xcblxcbi8vJG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XFxuXFxuLy8kbW9kYWwtY29udGVudC1iZzogICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJG1vZGFsLWNvbnRlbnQtYm9yZGVyLWNvbG9yOiBub25lO1xcbi8vJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoOiAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXhzOiAwIDhweCAxNnB4IDAgcmdiYSgwLCAwLCAwLCAuMSk7XFxuJG1vZGFsLWNvbnRlbnQtYm94LXNoYWRvdy1zbS11cDogMCA4cHggMTZweCAwIHJnYmEoMCwgMCwgMCwgLjEpO1xcblxcbi8vJG1vZGFsLWJhY2tkcm9wLWJnOiAgICAgICAgICAgJGJsYWNrICFkZWZhdWx0O1xcbi8vJG1vZGFsLWJhY2tkcm9wLW9wYWNpdHk6ICAgICAgLjUgIWRlZmF1bHQ7XFxuJG1vZGFsLWhlYWRlci1ib3JkZXItY29sb3I6IG5vbmU7XFxuLy8kbW9kYWwtZm9vdGVyLWJvcmRlci1jb2xvcjogICAkbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4vLyRtb2RhbC1oZWFkZXItYm9yZGVyLXdpZHRoOiAgICRtb2RhbC1jb250ZW50LWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRtb2RhbC1mb290ZXItYm9yZGVyLXdpZHRoOiAgICRtb2RhbC1oZWFkZXItYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRtb2RhbC1oZWFkZXItcGFkZGluZzogJG1vZGFsLWlubmVyLXBhZGRpbmc7XFxuXFxuJG1vZGFsLWxnOiA5MDBweDtcXG4kbW9kYWwtbWQ6IDY4MHB4O1xcbiRtb2RhbC1zbTogNDAwcHg7XFxuXFxuLy8kbW9kYWwtdHJhbnNpdGlvbjogICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0gLjNzIGVhc2Utb3V0ICFkZWZhdWx0O1xcblxcbi8vIEFsZXJ0c1xcbiRhbGVydC1wYWRkaW5nLXk6IDFyZW0gIWRlZmF1bHQ7XFxuJGFsZXJ0LXBhZGRpbmcteDogMXJlbTtcXG4vLyRhbGVydC1tYXJnaW4tYm90dG9tOiAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kYWxlcnQtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRhbGVydC1saW5rLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xcbiRhbGVydC1ib3JkZXItd2lkdGg6IC4xMjVyZW07XFxuXFxuLy8kYWxlcnQtYmctbGV2ZWw6ICAgICAgICAgICAgICAgICAgICAtMTAgIWRlZmF1bHQ7XFxuLy8kYWxlcnQtYm9yZGVyLWxldmVsOiAgICAgICAgICAgICAgICAtOSAhZGVmYXVsdDtcXG4vLyRhbGVydC1jb2xvci1sZXZlbDogICAgICAgICAgICAgICAgIDYgIWRlZmF1bHQ7XFxuXFxuLy8gUHJvZ3Jlc3MgYmFyc1xcbi8vJHByb2dyZXNzLWhlaWdodDogICAgICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1mb250LXNpemU6ICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAuNzUpICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWJnOiAgICAgICAgICAgICAgICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYm94LXNoYWRvdzogICAgICAgICAgICAgICBpbnNldCAwIC4xcmVtIC4xcmVtIHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLWNvbG9yOiAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLWJnOiAgICAgICAgICAgICAgICAgICB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWJhci1hbmltYXRpb24tdGltaW5nOiAgICAgMXMgbGluZWFyIGluZmluaXRlICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWJhci10cmFuc2l0aW9uOiAgICAgICAgICAgd2lkdGggLjZzIGVhc2UgIWRlZmF1bHQ7XFxuXFxuLy8gTGlzdCBncm91cFxcbi8vJGxpc3QtZ3JvdXAtYmc6ICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kbGlzdC1ncm91cC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJGxpc3QtZ3JvdXAtYm9yZGVyLXJhZGl1czogICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuXFxuJGxpc3QtZ3JvdXAtaXRlbS1wYWRkaW5nLXk6ICRpbnB1dC1wYWRkaW5nLXk7XFxuJGxpc3QtZ3JvdXAtaXRlbS1wYWRkaW5nLXg6ICRpbnB1dC1wYWRkaW5nLXg7XFxuXFxuJGxpc3QtZ3JvdXAtaG92ZXItYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuLy8kbGlzdC1ncm91cC1hY3RpdmUtY29sb3I6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3RpdmUtYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuLy8kbGlzdC1ncm91cC1hY3RpdmUtYm9yZGVyLWNvbG9yOiAgICAkbGlzdC1ncm91cC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuXFxuJGxpc3QtZ3JvdXAtZGlzYWJsZWQtY29sb3I6ICRsaWdodC1ncmF5O1xcbi8vJGxpc3QtZ3JvdXAtZGlzYWJsZWQtYmc6ICAgICAgICAgICAgJGxpc3QtZ3JvdXAtYmcgIWRlZmF1bHQ7XFxuXFxuLy8kbGlzdC1ncm91cC1hY3Rpb24tY29sb3I6ICAgICAgICAgICAkZ3JheS03MDAgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYWN0aW9uLWhvdmVyLWNvbG9yOiAkd2hpdGU7XFxuXFxuJGxpc3QtZ3JvdXAtYWN0aW9uLWFjdGl2ZS1jb2xvcjogJGJvZHktY29sb3IgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYWN0aW9uLWFjdGl2ZS1iZzogJGdyYXktMjAwICFkZWZhdWx0O1xcblxcbi8vIEltYWdlIHRodW1ibmFpbHNcXG4kdGh1bWJuYWlsLXBhZGRpbmc6IDA7XFxuLy8kdGh1bWJuYWlsLWJnOiAgICAgICAgICAgICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcXG4vLyR0aHVtYm5haWwtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJHRodW1ibmFpbC1ib3JkZXItY29sb3I6ICRsaWdodC1ncmF5O1xcbi8vJHRodW1ibmFpbC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJHRodW1ibmFpbC1ib3gtc2hhZG93OiBub25lO1xcblxcbi8vIEZpZ3VyZXNcXG4vLyRmaWd1cmUtY2FwdGlvbi1mb250LXNpemU6ICAgICAgICAgIDkwJSAhZGVmYXVsdDtcXG4kZmlndXJlLWNhcHRpb24tY29sb3I6ICRtZWRpdW0tZ3JheTtcXG5cXG4vLyBCcmVhZGNydW1ic1xcbiRicmVhZGNydW1iLXBhZGRpbmcteTogLjMxMjVyZW07XFxuJGJyZWFkY3J1bWItcGFkZGluZy14OiAuMzEyNXJlbTtcXG4kYnJlYWRjcnVtYi1pdGVtLXBhZGRpbmc6IC4zcmVtO1xcblxcbiRicmVhZGNydW1iLW1hcmdpbi1ib3R0b206IDA7XFxuXFxuJGJyZWFkY3J1bWItYmc6IG5vbmU7XFxuJGJyZWFkY3J1bWItZGl2aWRlci1jb2xvcjogJGRhcmstZ3JheTtcXG4kYnJlYWRjcnVtYi1hY3RpdmUtY29sb3I6ICRleHRyYS1kYXJrLWdyYXk7XFxuJGJyZWFkY3J1bWItZGl2aWRlcjogXFxcIi9cXFwiO1xcblxcbi8vIENhcm91c2VsXFxuLy8kY2Fyb3VzZWwtY29udHJvbC1jb2xvcjogICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtY29udHJvbC13aWR0aDogICAgICAgICAgICAxNSUgIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtY29udHJvbC1vcGFjaXR5OiAgICAgICAgICAuNSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3Itd2lkdGg6ICAgICAgICAgIDMwcHggIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtaW5kaWNhdG9yLWhlaWdodDogICAgICAgICAzcHggIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtaW5kaWNhdG9yLXNwYWNlcjogICAgICAgICAzcHggIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtaW5kaWNhdG9yLWFjdGl2ZS1iZzogICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtY2FwdGlvbi13aWR0aDogICAgICAgICAgICA3MCUgIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtY2FwdGlvbi1jb2xvcjogICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtY29udHJvbC1pY29uLXdpZHRoOiAgICAgICAyMHB4ICFkZWZhdWx0O1xcblxcbi8vJGNhcm91c2VsLWNvbnRyb2wtcHJldi1pY29uLWJnOiAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGZpbGw9JyN7JGNhcm91c2VsLWNvbnRyb2wtY29sb3J9JyB2aWV3Qm94PScwIDAgOCA4JyUzRSUzQ3BhdGggZD0nTTUuMjUgMGwtNCA0IDQgNCAxLjUtMS41LTIuNS0yLjUgMi41LTIuNS0xLjUtMS41eicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jb250cm9sLW5leHQtaWNvbi1iZzogICAgIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBmaWxsPScjeyRjYXJvdXNlbC1jb250cm9sLWNvbG9yfScgdmlld0JveD0nMCAwIDggOCclM0UlM0NwYXRoIGQ9J00yLjc1IDBsLTEuNSAxLjUgMi41IDIuNS0yLjUgMi41IDEuNSAxLjUgNC00LTQtNHonLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtdHJhbnNpdGlvbjogICAgICAgICAgICAgICB0cmFuc2Zvcm0gLjZzIGVhc2UgIWRlZmF1bHQ7XFxuXFxuLy8gQ2xvc2VcXG4vLyRjbG9zZS1mb250LXNpemU6ICAgICAgICAgICAgICRmb250LXNpemUtYmFzZSAqIDEuNSAhZGVmYXVsdDtcXG4vLyRjbG9zZS1mb250LXdlaWdodDogICAgICAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xcbi8vJGNsb3NlLWNvbG9yOiAgICAgICAgICAgICAgICAgJGJsYWNrICFkZWZhdWx0O1xcbi8vJGNsb3NlLXRleHQtc2hhZG93OiAgICAgICAgICAgMCAxcHggMCAkd2hpdGUgIWRlZmF1bHQ7XFxuXFxuLy8gQ29kZVxcbi8vJGNvZGUtZm9udC1zaXplOiAgICAgICAgICAgICAgICAgICAgODcuNSUgIWRlZmF1bHQ7XFxuJGNvZGUtY29sb3I6ICRib2R5LWNvbG9yO1xcblxcbi8vJGtiZC1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgICAgICAgLjJyZW0gIWRlZmF1bHQ7XFxuLy8ka2JkLXBhZGRpbmcteDogICAgICAgICAgICAgICAgICAgICAuNHJlbSAhZGVmYXVsdDtcXG4vLyRrYmQtZm9udC1zaXplOiAgICAgICAgICAgICAgICAgICAgICRjb2RlLWZvbnQtc2l6ZSAhZGVmYXVsdDtcXG4ka2JkLWNvbG9yOiAkd2hpdGU7XFxuJGtiZC1iZzogJGV4dHJhLWRhcmstZ3JheTtcXG5cXG4kcHJlLWNvbG9yOiAkYm9keS1jb2xvcjtcXG4vLyRwcmUtc2Nyb2xsYWJsZS1tYXgtaGVpZ2h0OiAgICAgICAgIDM0MHB4ICFkZWZhdWx0O1xcblxcbi8vIFByaW50aW5nXFxuLy8kcHJpbnQtcGFnZS1zaXplOiAgICAgICAgICAgICAgICAgICBhMyAhZGVmYXVsdDtcXG4vLyRwcmludC1ib2R5LW1pbi13aWR0aDogICAgICAgICAgICAgIG1hcC1nZXQoJGdyaWQtYnJlYWtwb2ludHMsIFxcXCJsZ1xcXCIpICFkZWZhdWx0O1xcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5hbGlnbi1iYXNlbGluZXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZSAhaW1wb3J0YW50fS5hbGlnbi10b3B7dmVydGljYWwtYWxpZ246dG9wICFpbXBvcnRhbnR9LmFsaWduLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUgIWltcG9ydGFudH0uYWxpZ24tYm90dG9te3ZlcnRpY2FsLWFsaWduOmJvdHRvbSAhaW1wb3J0YW50fS5hbGlnbi10ZXh0LWJvdHRvbXt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbSAhaW1wb3J0YW50fS5hbGlnbi10ZXh0LXRvcHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcCAhaW1wb3J0YW50fS5iZy1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6IzI1YjlkNyAhaW1wb3J0YW50fWEuYmctcHJpbWFyeTpob3ZlcixhLmJnLXByaW1hcnk6Zm9jdXMsYnV0dG9uLmJnLXByaW1hcnk6aG92ZXIsYnV0dG9uLmJnLXByaW1hcnk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojMWU5NGFiICFpbXBvcnRhbnR9LmJnLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOiM2Yzg2OGUgIWltcG9ydGFudH1hLmJnLXNlY29uZGFyeTpob3ZlcixhLmJnLXNlY29uZGFyeTpmb2N1cyxidXR0b24uYmctc2Vjb25kYXJ5OmhvdmVyLGJ1dHRvbi5iZy1zZWNvbmRhcnk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojNTY2YjcxICFpbXBvcnRhbnR9LmJnLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojNzBiNTgwICFpbXBvcnRhbnR9YS5iZy1zdWNjZXNzOmhvdmVyLGEuYmctc3VjY2Vzczpmb2N1cyxidXR0b24uYmctc3VjY2Vzczpob3ZlcixidXR0b24uYmctc3VjY2Vzczpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiM1MzlmNjQgIWltcG9ydGFudH0uYmctaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiMyNWI5ZDcgIWltcG9ydGFudH1hLmJnLWluZm86aG92ZXIsYS5iZy1pbmZvOmZvY3VzLGJ1dHRvbi5iZy1pbmZvOmhvdmVyLGJ1dHRvbi5iZy1pbmZvOmZvY3Vze2JhY2tncm91bmQtY29sb3I6IzFlOTRhYiAhaW1wb3J0YW50fS5iZy13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2ZhYjAwMCAhaW1wb3J0YW50fWEuYmctd2FybmluZzpob3ZlcixhLmJnLXdhcm5pbmc6Zm9jdXMsYnV0dG9uLmJnLXdhcm5pbmc6aG92ZXIsYnV0dG9uLmJnLXdhcm5pbmc6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojYzc4YzAwICFpbXBvcnRhbnR9LmJnLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNTRjM2UgIWltcG9ydGFudH1hLmJnLWRhbmdlcjpob3ZlcixhLmJnLWRhbmdlcjpmb2N1cyxidXR0b24uYmctZGFuZ2VyOmhvdmVyLGJ1dHRvbi5iZy1kYW5nZXI6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojZjIxZjBlICFpbXBvcnRhbnR9LmJnLWxpZ2h0e2JhY2tncm91bmQtY29sb3I6I2ZhZmJmYyAhaW1wb3J0YW50fWEuYmctbGlnaHQ6aG92ZXIsYS5iZy1saWdodDpmb2N1cyxidXR0b24uYmctbGlnaHQ6aG92ZXIsYnV0dG9uLmJnLWxpZ2h0OmZvY3Vze2JhY2tncm91bmQtY29sb3I6I2RhZTJlOSAhaW1wb3J0YW50fS5iZy1kYXJre2JhY2tncm91bmQtY29sb3I6IzM2M2E0MSAhaW1wb3J0YW50fWEuYmctZGFyazpob3ZlcixhLmJnLWRhcms6Zm9jdXMsYnV0dG9uLmJnLWRhcms6aG92ZXIsYnV0dG9uLmJnLWRhcms6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojMWYyMTI1ICFpbXBvcnRhbnR9LmJnLXdoaXRle2JhY2tncm91bmQtY29sb3I6I2ZmZiAhaW1wb3J0YW50fS5iZy10cmFuc3BhcmVudHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50ICFpbXBvcnRhbnR9LmJvcmRlcntib3JkZXI6MXB4IHNvbGlkICNiYmNkZDIgIWltcG9ydGFudH0uYm9yZGVyLXRvcHtib3JkZXItdG9wOjFweCBzb2xpZCAjYmJjZGQyICFpbXBvcnRhbnR9LmJvcmRlci1yaWdodHtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNiYmNkZDIgIWltcG9ydGFudH0uYm9yZGVyLWJvdHRvbXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjYmJjZGQyICFpbXBvcnRhbnR9LmJvcmRlci1sZWZ0e2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjYmJjZGQyICFpbXBvcnRhbnR9LmJvcmRlci0we2JvcmRlcjowICFpbXBvcnRhbnR9LmJvcmRlci10b3AtMHtib3JkZXItdG9wOjAgIWltcG9ydGFudH0uYm9yZGVyLXJpZ2h0LTB7Ym9yZGVyLXJpZ2h0OjAgIWltcG9ydGFudH0uYm9yZGVyLWJvdHRvbS0we2JvcmRlci1ib3R0b206MCAhaW1wb3J0YW50fS5ib3JkZXItbGVmdC0we2JvcmRlci1sZWZ0OjAgIWltcG9ydGFudH0uYm9yZGVyLXByaW1hcnl7Ym9yZGVyLWNvbG9yOiMyNWI5ZDcgIWltcG9ydGFudH0uYm9yZGVyLXNlY29uZGFyeXtib3JkZXItY29sb3I6IzZjODY4ZSAhaW1wb3J0YW50fS5ib3JkZXItc3VjY2Vzc3tib3JkZXItY29sb3I6IzcwYjU4MCAhaW1wb3J0YW50fS5ib3JkZXItaW5mb3tib3JkZXItY29sb3I6IzI1YjlkNyAhaW1wb3J0YW50fS5ib3JkZXItd2FybmluZ3tib3JkZXItY29sb3I6I2ZhYjAwMCAhaW1wb3J0YW50fS5ib3JkZXItZGFuZ2Vye2JvcmRlci1jb2xvcjojZjU0YzNlICFpbXBvcnRhbnR9LmJvcmRlci1saWdodHtib3JkZXItY29sb3I6I2ZhZmJmYyAhaW1wb3J0YW50fS5ib3JkZXItZGFya3tib3JkZXItY29sb3I6IzM2M2E0MSAhaW1wb3J0YW50fS5ib3JkZXItd2hpdGV7Ym9yZGVyLWNvbG9yOiNmZmYgIWltcG9ydGFudH0ucm91bmRlZHtib3JkZXItcmFkaXVzOjRweCAhaW1wb3J0YW50fS5yb3VuZGVkLXRvcHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweCAhaW1wb3J0YW50O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweCAhaW1wb3J0YW50fS5yb3VuZGVkLXJpZ2h0e2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweCAhaW1wb3J0YW50O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweCAhaW1wb3J0YW50fS5yb3VuZGVkLWJvdHRvbXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHggIWltcG9ydGFudDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweCAhaW1wb3J0YW50fS5yb3VuZGVkLWxlZnR7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHggIWltcG9ydGFudDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweCAhaW1wb3J0YW50fS5yb3VuZGVkLWNpcmNsZXtib3JkZXItcmFkaXVzOjUwJSAhaW1wb3J0YW50fS5yb3VuZGVkLTB7Ym9yZGVyLXJhZGl1czowICFpbXBvcnRhbnR9LmNsZWFyZml4OjphZnRlcntkaXNwbGF5OmJsb2NrO2NsZWFyOmJvdGg7Y29udGVudDpcXFwiXFxcIn0uZC1ub25le2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fS5kLWlubGluZXtkaXNwbGF5OmlubGluZSAhaW1wb3J0YW50fS5kLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayAhaW1wb3J0YW50fS5kLWJsb2Nre2Rpc3BsYXk6YmxvY2sgIWltcG9ydGFudH0uZC10YWJsZXtkaXNwbGF5OnRhYmxlICFpbXBvcnRhbnR9LmQtdGFibGUtcm93e2Rpc3BsYXk6dGFibGUtcm93ICFpbXBvcnRhbnR9LmQtdGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwgIWltcG9ydGFudH0uZC1mbGV4e2Rpc3BsYXk6ZmxleCAhaW1wb3J0YW50fS5kLWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXggIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDogNTQ0cHgpey5kLXNtLW5vbmV7ZGlzcGxheTpub25lICFpbXBvcnRhbnR9LmQtc20taW5saW5le2Rpc3BsYXk6aW5saW5lICFpbXBvcnRhbnR9LmQtc20taW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrICFpbXBvcnRhbnR9LmQtc20tYmxvY2t7ZGlzcGxheTpibG9jayAhaW1wb3J0YW50fS5kLXNtLXRhYmxle2Rpc3BsYXk6dGFibGUgIWltcG9ydGFudH0uZC1zbS10YWJsZS1yb3d7ZGlzcGxheTp0YWJsZS1yb3cgIWltcG9ydGFudH0uZC1zbS10YWJsZS1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbCAhaW1wb3J0YW50fS5kLXNtLWZsZXh7ZGlzcGxheTpmbGV4ICFpbXBvcnRhbnR9LmQtc20taW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpey5kLW1kLW5vbmV7ZGlzcGxheTpub25lICFpbXBvcnRhbnR9LmQtbWQtaW5saW5le2Rpc3BsYXk6aW5saW5lICFpbXBvcnRhbnR9LmQtbWQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrICFpbXBvcnRhbnR9LmQtbWQtYmxvY2t7ZGlzcGxheTpibG9jayAhaW1wb3J0YW50fS5kLW1kLXRhYmxle2Rpc3BsYXk6dGFibGUgIWltcG9ydGFudH0uZC1tZC10YWJsZS1yb3d7ZGlzcGxheTp0YWJsZS1yb3cgIWltcG9ydGFudH0uZC1tZC10YWJsZS1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbCAhaW1wb3J0YW50fS5kLW1kLWZsZXh7ZGlzcGxheTpmbGV4ICFpbXBvcnRhbnR9LmQtbWQtaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDogMTAyNHB4KXsuZC1sZy1ub25le2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fS5kLWxnLWlubGluZXtkaXNwbGF5OmlubGluZSAhaW1wb3J0YW50fS5kLWxnLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayAhaW1wb3J0YW50fS5kLWxnLWJsb2Nre2Rpc3BsYXk6YmxvY2sgIWltcG9ydGFudH0uZC1sZy10YWJsZXtkaXNwbGF5OnRhYmxlICFpbXBvcnRhbnR9LmQtbGctdGFibGUtcm93e2Rpc3BsYXk6dGFibGUtcm93ICFpbXBvcnRhbnR9LmQtbGctdGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwgIWltcG9ydGFudH0uZC1sZy1mbGV4e2Rpc3BsYXk6ZmxleCAhaW1wb3J0YW50fS5kLWxnLWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXggIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDEzMDBweCl7LmQteGwtbm9uZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0uZC14bC1pbmxpbmV7ZGlzcGxheTppbmxpbmUgIWltcG9ydGFudH0uZC14bC1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2sgIWltcG9ydGFudH0uZC14bC1ibG9ja3tkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnR9LmQteGwtdGFibGV7ZGlzcGxheTp0YWJsZSAhaW1wb3J0YW50fS5kLXhsLXRhYmxlLXJvd3tkaXNwbGF5OnRhYmxlLXJvdyAhaW1wb3J0YW50fS5kLXhsLXRhYmxlLWNlbGx7ZGlzcGxheTp0YWJsZS1jZWxsICFpbXBvcnRhbnR9LmQteGwtZmxleHtkaXNwbGF5OmZsZXggIWltcG9ydGFudH0uZC14bC1pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4ICFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOiAxNjAwcHgpey5kLXh4bC1ub25le2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fS5kLXh4bC1pbmxpbmV7ZGlzcGxheTppbmxpbmUgIWltcG9ydGFudH0uZC14eGwtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrICFpbXBvcnRhbnR9LmQteHhsLWJsb2Nre2Rpc3BsYXk6YmxvY2sgIWltcG9ydGFudH0uZC14eGwtdGFibGV7ZGlzcGxheTp0YWJsZSAhaW1wb3J0YW50fS5kLXh4bC10YWJsZS1yb3d7ZGlzcGxheTp0YWJsZS1yb3cgIWltcG9ydGFudH0uZC14eGwtdGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwgIWltcG9ydGFudH0uZC14eGwtZmxleHtkaXNwbGF5OmZsZXggIWltcG9ydGFudH0uZC14eGwtaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCAhaW1wb3J0YW50fX1AbWVkaWEgcHJpbnR7LmQtcHJpbnQtbm9uZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0uZC1wcmludC1pbmxpbmV7ZGlzcGxheTppbmxpbmUgIWltcG9ydGFudH0uZC1wcmludC1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2sgIWltcG9ydGFudH0uZC1wcmludC1ibG9ja3tkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnR9LmQtcHJpbnQtdGFibGV7ZGlzcGxheTp0YWJsZSAhaW1wb3J0YW50fS5kLXByaW50LXRhYmxlLXJvd3tkaXNwbGF5OnRhYmxlLXJvdyAhaW1wb3J0YW50fS5kLXByaW50LXRhYmxlLWNlbGx7ZGlzcGxheTp0YWJsZS1jZWxsICFpbXBvcnRhbnR9LmQtcHJpbnQtZmxleHtkaXNwbGF5OmZsZXggIWltcG9ydGFudH0uZC1wcmludC1pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4ICFpbXBvcnRhbnR9fS5lbWJlZC1yZXNwb25zaXZle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtwYWRkaW5nOjA7b3ZlcmZsb3c6aGlkZGVufS5lbWJlZC1yZXNwb25zaXZlOjpiZWZvcmV7ZGlzcGxheTpibG9jaztjb250ZW50OlxcXCJcXFwifS5lbWJlZC1yZXNwb25zaXZlIC5lbWJlZC1yZXNwb25zaXZlLWl0ZW0sLmVtYmVkLXJlc3BvbnNpdmUgaWZyYW1lLC5lbWJlZC1yZXNwb25zaXZlIGVtYmVkLC5lbWJlZC1yZXNwb25zaXZlIG9iamVjdCwuZW1iZWQtcmVzcG9uc2l2ZSB2aWRlb3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6MH0uZW1iZWQtcmVzcG9uc2l2ZS0yMWJ5OTo6YmVmb3Jle3BhZGRpbmctdG9wOjQyLjg1NzE0JX0uZW1iZWQtcmVzcG9uc2l2ZS0xNmJ5OTo6YmVmb3Jle3BhZGRpbmctdG9wOjU2LjI1JX0uZW1iZWQtcmVzcG9uc2l2ZS00YnkzOjpiZWZvcmV7cGFkZGluZy10b3A6NzUlfS5lbWJlZC1yZXNwb25zaXZlLTFieTE6OmJlZm9yZXtwYWRkaW5nLXRvcDoxMDAlfS5mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3cgIWltcG9ydGFudH0uZmxleC1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uICFpbXBvcnRhbnR9LmZsZXgtcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UgIWltcG9ydGFudH0uZmxleC1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50fS5mbGV4LXdyYXB7ZmxleC13cmFwOndyYXAgIWltcG9ydGFudH0uZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCAhaW1wb3J0YW50fS5mbGV4LXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZCAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4gIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0ICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1jZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoICFpbXBvcnRhbnR9LmFsaWduLXNlbGYtYXV0b3thbGlnbi1zZWxmOmF1dG8gIWltcG9ydGFudH0uYWxpZ24tc2VsZi1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24tc2VsZi1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUgIWltcG9ydGFudH0uYWxpZ24tc2VsZi1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCAhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOiA1NDRweCl7LmZsZXgtc20tcm93e2ZsZXgtZGlyZWN0aW9uOnJvdyAhaW1wb3J0YW50fS5mbGV4LXNtLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4gIWltcG9ydGFudH0uZmxleC1zbS1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSAhaW1wb3J0YW50fS5mbGV4LXNtLWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnR9LmZsZXgtc20td3JhcHtmbGV4LXdyYXA6d3JhcCAhaW1wb3J0YW50fS5mbGV4LXNtLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwICFpbXBvcnRhbnR9LmZsZXgtc20td3JhcC1yZXZlcnNle2ZsZXgtd3JhcDp3cmFwLXJldmVyc2UgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXNtLXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0ICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1zbS1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1zbS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlciAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtc20tYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtc20tYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtc20tc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1zbS1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtc20tY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1zbS1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1zbS1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ggIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1zbS1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1zbS1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXNtLWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXNtLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtc20tYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtc20tc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ggIWltcG9ydGFudH0uYWxpZ24tc2VsZi1zbS1hdXRve2FsaWduLXNlbGY6YXV0byAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLXNtLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLXNtLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kICFpbXBvcnRhbnR9LmFsaWduLXNlbGYtc20tY2VudGVye2FsaWduLXNlbGY6Y2VudGVyICFpbXBvcnRhbnR9LmFsaWduLXNlbGYtc20tYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLXNtLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoICFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOiA3NjhweCl7LmZsZXgtbWQtcm93e2ZsZXgtZGlyZWN0aW9uOnJvdyAhaW1wb3J0YW50fS5mbGV4LW1kLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4gIWltcG9ydGFudH0uZmxleC1tZC1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSAhaW1wb3J0YW50fS5mbGV4LW1kLWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnR9LmZsZXgtbWQtd3JhcHtmbGV4LXdyYXA6d3JhcCAhaW1wb3J0YW50fS5mbGV4LW1kLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwICFpbXBvcnRhbnR9LmZsZXgtbWQtd3JhcC1yZXZlcnNle2ZsZXgtd3JhcDp3cmFwLXJldmVyc2UgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LW1kLXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0ICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1tZC1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1tZC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlciAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtbWQtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtbWQtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtbWQtc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1tZC1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtbWQtY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1tZC1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1tZC1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ggIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1tZC1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1tZC1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LW1kLWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LW1kLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtbWQtYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtbWQtc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ggIWltcG9ydGFudH0uYWxpZ24tc2VsZi1tZC1hdXRve2FsaWduLXNlbGY6YXV0byAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLW1kLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLW1kLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kICFpbXBvcnRhbnR9LmFsaWduLXNlbGYtbWQtY2VudGVye2FsaWduLXNlbGY6Y2VudGVyICFpbXBvcnRhbnR9LmFsaWduLXNlbGYtbWQtYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLW1kLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoICFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpey5mbGV4LWxnLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3cgIWltcG9ydGFudH0uZmxleC1sZy1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uICFpbXBvcnRhbnR9LmZsZXgtbGctcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UgIWltcG9ydGFudH0uZmxleC1sZy1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50fS5mbGV4LWxnLXdyYXB7ZmxleC13cmFwOndyYXAgIWltcG9ydGFudH0uZmxleC1sZy1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCAhaW1wb3J0YW50fS5mbGV4LWxnLXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1sZy1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtbGctZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZCAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtbGctY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LWxnLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4gIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LWxnLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLWxnLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtbGctZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLWxnLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtbGctYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtbGctc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtbGctc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0ICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtbGctZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1sZy1jZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1sZy1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LWxnLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LWxnLXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoICFpbXBvcnRhbnR9LmFsaWduLXNlbGYtbGctYXV0b3thbGlnbi1zZWxmOmF1dG8gIWltcG9ydGFudH0uYWxpZ24tc2VsZi1sZy1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24tc2VsZi1sZy1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLWxnLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLWxnLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUgIWltcG9ydGFudH0uYWxpZ24tc2VsZi1sZy1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDogMTMwMHB4KXsuZmxleC14bC1yb3d7ZmxleC1kaXJlY3Rpb246cm93ICFpbXBvcnRhbnR9LmZsZXgteGwtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiAhaW1wb3J0YW50fS5mbGV4LXhsLXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlICFpbXBvcnRhbnR9LmZsZXgteGwtY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2UgIWltcG9ydGFudH0uZmxleC14bC13cmFwe2ZsZXgtd3JhcDp3cmFwICFpbXBvcnRhbnR9LmZsZXgteGwtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAgIWltcG9ydGFudH0uZmxleC14bC13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQteGwtc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXhsLWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXhsLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC14bC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC14bC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZCAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy14bC1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0ICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLXhsLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZCAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy14bC1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLXhsLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLXhsLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXhsLXN0YXJ0e2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXhsLWVuZHthbGlnbi1jb250ZW50OmZsZXgtZW5kICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQteGwtY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQteGwtYmV0d2VlbnthbGlnbi1jb250ZW50OnNwYWNlLWJldHdlZW4gIWltcG9ydGFudH0uYWxpZ24tY29udGVudC14bC1hcm91bmR7YWxpZ24tY29udGVudDpzcGFjZS1hcm91bmQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC14bC1zdHJldGNoe2FsaWduLWNvbnRlbnQ6c3RyZXRjaCAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLXhsLWF1dG97YWxpZ24tc2VsZjphdXRvICFpbXBvcnRhbnR9LmFsaWduLXNlbGYteGwtc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0ICFpbXBvcnRhbnR9LmFsaWduLXNlbGYteGwtZW5ke2FsaWduLXNlbGY6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24tc2VsZi14bC1jZW50ZXJ7YWxpZ24tc2VsZjpjZW50ZXIgIWltcG9ydGFudH0uYWxpZ24tc2VsZi14bC1iYXNlbGluZXthbGlnbi1zZWxmOmJhc2VsaW5lICFpbXBvcnRhbnR9LmFsaWduLXNlbGYteGwtc3RyZXRjaHthbGlnbi1zZWxmOnN0cmV0Y2ggIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDE2MDBweCl7LmZsZXgteHhsLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3cgIWltcG9ydGFudH0uZmxleC14eGwtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiAhaW1wb3J0YW50fS5mbGV4LXh4bC1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSAhaW1wb3J0YW50fS5mbGV4LXh4bC1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50fS5mbGV4LXh4bC13cmFwe2ZsZXgtd3JhcDp3cmFwICFpbXBvcnRhbnR9LmZsZXgteHhsLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwICFpbXBvcnRhbnR9LmZsZXgteHhsLXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC14eGwtc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXh4bC1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC14eGwtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXh4bC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC14eGwtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMteHhsLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMteHhsLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZCAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy14eGwtY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy14eGwtYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUgIWltcG9ydGFudH0uYWxpZ24taXRlbXMteHhsLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXh4bC1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC14eGwtZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC14eGwtY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQteHhsLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQteHhsLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXh4bC1zdHJldGNoe2FsaWduLWNvbnRlbnQ6c3RyZXRjaCAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLXh4bC1hdXRve2FsaWduLXNlbGY6YXV0byAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLXh4bC1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24tc2VsZi14eGwtZW5ke2FsaWduLXNlbGY6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24tc2VsZi14eGwtY2VudGVye2FsaWduLXNlbGY6Y2VudGVyICFpbXBvcnRhbnR9LmFsaWduLXNlbGYteHhsLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUgIWltcG9ydGFudH0uYWxpZ24tc2VsZi14eGwtc3RyZXRjaHthbGlnbi1zZWxmOnN0cmV0Y2ggIWltcG9ydGFudH19LmZsb2F0LWxlZnR7ZmxvYXQ6bGVmdCAhaW1wb3J0YW50fS5mbG9hdC1yaWdodHtmbG9hdDpyaWdodCAhaW1wb3J0YW50fS5mbG9hdC1ub25le2Zsb2F0Om5vbmUgIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDogNTQ0cHgpey5mbG9hdC1zbS1sZWZ0e2Zsb2F0OmxlZnQgIWltcG9ydGFudH0uZmxvYXQtc20tcmlnaHR7ZmxvYXQ6cmlnaHQgIWltcG9ydGFudH0uZmxvYXQtc20tbm9uZXtmbG9hdDpub25lICFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOiA3NjhweCl7LmZsb2F0LW1kLWxlZnR7ZmxvYXQ6bGVmdCAhaW1wb3J0YW50fS5mbG9hdC1tZC1yaWdodHtmbG9hdDpyaWdodCAhaW1wb3J0YW50fS5mbG9hdC1tZC1ub25le2Zsb2F0Om5vbmUgIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDEwMjRweCl7LmZsb2F0LWxnLWxlZnR7ZmxvYXQ6bGVmdCAhaW1wb3J0YW50fS5mbG9hdC1sZy1yaWdodHtmbG9hdDpyaWdodCAhaW1wb3J0YW50fS5mbG9hdC1sZy1ub25le2Zsb2F0Om5vbmUgIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDEzMDBweCl7LmZsb2F0LXhsLWxlZnR7ZmxvYXQ6bGVmdCAhaW1wb3J0YW50fS5mbG9hdC14bC1yaWdodHtmbG9hdDpyaWdodCAhaW1wb3J0YW50fS5mbG9hdC14bC1ub25le2Zsb2F0Om5vbmUgIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDE2MDBweCl7LmZsb2F0LXh4bC1sZWZ0e2Zsb2F0OmxlZnQgIWltcG9ydGFudH0uZmxvYXQteHhsLXJpZ2h0e2Zsb2F0OnJpZ2h0ICFpbXBvcnRhbnR9LmZsb2F0LXh4bC1ub25le2Zsb2F0Om5vbmUgIWltcG9ydGFudH19LnBvc2l0aW9uLXN0YXRpY3twb3NpdGlvbjpzdGF0aWMgIWltcG9ydGFudH0ucG9zaXRpb24tcmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmUgIWltcG9ydGFudH0ucG9zaXRpb24tYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGUgIWltcG9ydGFudH0ucG9zaXRpb24tZml4ZWR7cG9zaXRpb246Zml4ZWQgIWltcG9ydGFudH0ucG9zaXRpb24tc3RpY2t5e3Bvc2l0aW9uOnN0aWNreSAhaW1wb3J0YW50fS5maXhlZC10b3B7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6MDtsZWZ0OjA7ei1pbmRleDoxMDMwfS5maXhlZC1ib3R0b217cG9zaXRpb246Zml4ZWQ7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7ei1pbmRleDoxMDMwfUBzdXBwb3J0cyAocG9zaXRpb246IHN0aWNreSl7LnN0aWNreS10b3B7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MTAyMH19LnNyLW9ubHl7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O2hlaWdodDoxcHg7cGFkZGluZzowO292ZXJmbG93OmhpZGRlbjtjbGlwOnJlY3QoMCwgMCwgMCwgMCk7d2hpdGUtc3BhY2U6bm93cmFwO2NsaXAtcGF0aDppbnNldCg1MCUpO2JvcmRlcjowfS5zci1vbmx5LWZvY3VzYWJsZTphY3RpdmUsLnNyLW9ubHktZm9jdXNhYmxlOmZvY3Vze3Bvc2l0aW9uOnN0YXRpYzt3aWR0aDphdXRvO2hlaWdodDphdXRvO292ZXJmbG93OnZpc2libGU7Y2xpcDphdXRvO3doaXRlLXNwYWNlOm5vcm1hbDtjbGlwLXBhdGg6bm9uZX0udy0yNXt3aWR0aDoyNSUgIWltcG9ydGFudH0udy01MHt3aWR0aDo1MCUgIWltcG9ydGFudH0udy03NXt3aWR0aDo3NSUgIWltcG9ydGFudH0udy0xMDB7d2lkdGg6MTAwJSAhaW1wb3J0YW50fS5oLTI1e2hlaWdodDoyNSUgIWltcG9ydGFudH0uaC01MHtoZWlnaHQ6NTAlICFpbXBvcnRhbnR9LmgtNzV7aGVpZ2h0Ojc1JSAhaW1wb3J0YW50fS5oLTEwMHtoZWlnaHQ6MTAwJSAhaW1wb3J0YW50fS5tdy0xMDB7bWF4LXdpZHRoOjEwMCUgIWltcG9ydGFudH0ubWgtMTAwe21heC1oZWlnaHQ6MTAwJSAhaW1wb3J0YW50fS5tLTB7bWFyZ2luOjAgIWltcG9ydGFudH0ubXQtMCwubXktMHttYXJnaW4tdG9wOjAgIWltcG9ydGFudH0ubXItMCwubXgtMHttYXJnaW4tcmlnaHQ6MCAhaW1wb3J0YW50fS5tYi0wLC5teS0we21hcmdpbi1ib3R0b206MCAhaW1wb3J0YW50fS5tbC0wLC5teC0we21hcmdpbi1sZWZ0OjAgIWltcG9ydGFudH0ubS0xe21hcmdpbjouMzEyNXJlbSAhaW1wb3J0YW50fS5tdC0xLC5teS0xe21hcmdpbi10b3A6LjMxMjVyZW0gIWltcG9ydGFudH0ubXItMSwubXgtMXttYXJnaW4tcmlnaHQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubWItMSwubXktMXttYXJnaW4tYm90dG9tOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm1sLTEsLm14LTF7bWFyZ2luLWxlZnQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubS0ye21hcmdpbjouNjI1cmVtICFpbXBvcnRhbnR9Lm10LTIsLm15LTJ7bWFyZ2luLXRvcDouNjI1cmVtICFpbXBvcnRhbnR9Lm1yLTIsLm14LTJ7bWFyZ2luLXJpZ2h0Oi42MjVyZW0gIWltcG9ydGFudH0ubWItMiwubXktMnttYXJnaW4tYm90dG9tOi42MjVyZW0gIWltcG9ydGFudH0ubWwtMiwubXgtMnttYXJnaW4tbGVmdDouNjI1cmVtICFpbXBvcnRhbnR9Lm0tM3ttYXJnaW46LjkzNzVyZW0gIWltcG9ydGFudH0ubXQtMywubXktM3ttYXJnaW4tdG9wOi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1yLTMsLm14LTN7bWFyZ2luLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1iLTMsLm15LTN7bWFyZ2luLWJvdHRvbTouOTM3NXJlbSAhaW1wb3J0YW50fS5tbC0zLC5teC0ze21hcmdpbi1sZWZ0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm0tNHttYXJnaW46MS44NzVyZW0gIWltcG9ydGFudH0ubXQtNCwubXktNHttYXJnaW4tdG9wOjEuODc1cmVtICFpbXBvcnRhbnR9Lm1yLTQsLm14LTR7bWFyZ2luLXJpZ2h0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm1iLTQsLm15LTR7bWFyZ2luLWJvdHRvbToxLjg3NXJlbSAhaW1wb3J0YW50fS5tbC00LC5teC00e21hcmdpbi1sZWZ0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm0tNXttYXJnaW46My43NXJlbSAhaW1wb3J0YW50fS5tdC01LC5teS01e21hcmdpbi10b3A6My43NXJlbSAhaW1wb3J0YW50fS5tci01LC5teC01e21hcmdpbi1yaWdodDozLjc1cmVtICFpbXBvcnRhbnR9Lm1iLTUsLm15LTV7bWFyZ2luLWJvdHRvbTozLjc1cmVtICFpbXBvcnRhbnR9Lm1sLTUsLm14LTV7bWFyZ2luLWxlZnQ6My43NXJlbSAhaW1wb3J0YW50fS5wLTB7cGFkZGluZzowICFpbXBvcnRhbnR9LnB0LTAsLnB5LTB7cGFkZGluZy10b3A6MCAhaW1wb3J0YW50fS5wci0wLC5weC0we3BhZGRpbmctcmlnaHQ6MCAhaW1wb3J0YW50fS5wYi0wLC5weS0we3BhZGRpbmctYm90dG9tOjAgIWltcG9ydGFudH0ucGwtMCwucHgtMHtwYWRkaW5nLWxlZnQ6MCAhaW1wb3J0YW50fS5wLTF7cGFkZGluZzouMzEyNXJlbSAhaW1wb3J0YW50fS5wdC0xLC5weS0xe3BhZGRpbmctdG9wOi4zMTI1cmVtICFpbXBvcnRhbnR9LnByLTEsLnB4LTF7cGFkZGluZy1yaWdodDouMzEyNXJlbSAhaW1wb3J0YW50fS5wYi0xLC5weS0xe3BhZGRpbmctYm90dG9tOi4zMTI1cmVtICFpbXBvcnRhbnR9LnBsLTEsLnB4LTF7cGFkZGluZy1sZWZ0Oi4zMTI1cmVtICFpbXBvcnRhbnR9LnAtMntwYWRkaW5nOi42MjVyZW0gIWltcG9ydGFudH0ucHQtMiwucHktMntwYWRkaW5nLXRvcDouNjI1cmVtICFpbXBvcnRhbnR9LnByLTIsLnB4LTJ7cGFkZGluZy1yaWdodDouNjI1cmVtICFpbXBvcnRhbnR9LnBiLTIsLnB5LTJ7cGFkZGluZy1ib3R0b206LjYyNXJlbSAhaW1wb3J0YW50fS5wbC0yLC5weC0ye3BhZGRpbmctbGVmdDouNjI1cmVtICFpbXBvcnRhbnR9LnAtM3twYWRkaW5nOi45Mzc1cmVtICFpbXBvcnRhbnR9LnB0LTMsLnB5LTN7cGFkZGluZy10b3A6LjkzNzVyZW0gIWltcG9ydGFudH0ucHItMywucHgtM3twYWRkaW5nLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9LnBiLTMsLnB5LTN7cGFkZGluZy1ib3R0b206LjkzNzVyZW0gIWltcG9ydGFudH0ucGwtMywucHgtM3twYWRkaW5nLWxlZnQ6LjkzNzVyZW0gIWltcG9ydGFudH0ucC00e3BhZGRpbmc6MS44NzVyZW0gIWltcG9ydGFudH0ucHQtNCwucHktNHtwYWRkaW5nLXRvcDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wci00LC5weC00e3BhZGRpbmctcmlnaHQ6MS44NzVyZW0gIWltcG9ydGFudH0ucGItNCwucHktNHtwYWRkaW5nLWJvdHRvbToxLjg3NXJlbSAhaW1wb3J0YW50fS5wbC00LC5weC00e3BhZGRpbmctbGVmdDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wLTV7cGFkZGluZzozLjc1cmVtICFpbXBvcnRhbnR9LnB0LTUsLnB5LTV7cGFkZGluZy10b3A6My43NXJlbSAhaW1wb3J0YW50fS5wci01LC5weC01e3BhZGRpbmctcmlnaHQ6My43NXJlbSAhaW1wb3J0YW50fS5wYi01LC5weS01e3BhZGRpbmctYm90dG9tOjMuNzVyZW0gIWltcG9ydGFudH0ucGwtNSwucHgtNXtwYWRkaW5nLWxlZnQ6My43NXJlbSAhaW1wb3J0YW50fS5tLWF1dG97bWFyZ2luOmF1dG8gIWltcG9ydGFudH0ubXQtYXV0bywubXktYXV0b3ttYXJnaW4tdG9wOmF1dG8gIWltcG9ydGFudH0ubXItYXV0bywubXgtYXV0b3ttYXJnaW4tcmlnaHQ6YXV0byAhaW1wb3J0YW50fS5tYi1hdXRvLC5teS1hdXRve21hcmdpbi1ib3R0b206YXV0byAhaW1wb3J0YW50fS5tbC1hdXRvLC5teC1hdXRve21hcmdpbi1sZWZ0OmF1dG8gIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDogNTQ0cHgpey5tLXNtLTB7bWFyZ2luOjAgIWltcG9ydGFudH0ubXQtc20tMCwubXktc20tMHttYXJnaW4tdG9wOjAgIWltcG9ydGFudH0ubXItc20tMCwubXgtc20tMHttYXJnaW4tcmlnaHQ6MCAhaW1wb3J0YW50fS5tYi1zbS0wLC5teS1zbS0we21hcmdpbi1ib3R0b206MCAhaW1wb3J0YW50fS5tbC1zbS0wLC5teC1zbS0we21hcmdpbi1sZWZ0OjAgIWltcG9ydGFudH0ubS1zbS0xe21hcmdpbjouMzEyNXJlbSAhaW1wb3J0YW50fS5tdC1zbS0xLC5teS1zbS0xe21hcmdpbi10b3A6LjMxMjVyZW0gIWltcG9ydGFudH0ubXItc20tMSwubXgtc20tMXttYXJnaW4tcmlnaHQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubWItc20tMSwubXktc20tMXttYXJnaW4tYm90dG9tOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm1sLXNtLTEsLm14LXNtLTF7bWFyZ2luLWxlZnQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubS1zbS0ye21hcmdpbjouNjI1cmVtICFpbXBvcnRhbnR9Lm10LXNtLTIsLm15LXNtLTJ7bWFyZ2luLXRvcDouNjI1cmVtICFpbXBvcnRhbnR9Lm1yLXNtLTIsLm14LXNtLTJ7bWFyZ2luLXJpZ2h0Oi42MjVyZW0gIWltcG9ydGFudH0ubWItc20tMiwubXktc20tMnttYXJnaW4tYm90dG9tOi42MjVyZW0gIWltcG9ydGFudH0ubWwtc20tMiwubXgtc20tMnttYXJnaW4tbGVmdDouNjI1cmVtICFpbXBvcnRhbnR9Lm0tc20tM3ttYXJnaW46LjkzNzVyZW0gIWltcG9ydGFudH0ubXQtc20tMywubXktc20tM3ttYXJnaW4tdG9wOi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1yLXNtLTMsLm14LXNtLTN7bWFyZ2luLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1iLXNtLTMsLm15LXNtLTN7bWFyZ2luLWJvdHRvbTouOTM3NXJlbSAhaW1wb3J0YW50fS5tbC1zbS0zLC5teC1zbS0ze21hcmdpbi1sZWZ0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm0tc20tNHttYXJnaW46MS44NzVyZW0gIWltcG9ydGFudH0ubXQtc20tNCwubXktc20tNHttYXJnaW4tdG9wOjEuODc1cmVtICFpbXBvcnRhbnR9Lm1yLXNtLTQsLm14LXNtLTR7bWFyZ2luLXJpZ2h0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm1iLXNtLTQsLm15LXNtLTR7bWFyZ2luLWJvdHRvbToxLjg3NXJlbSAhaW1wb3J0YW50fS5tbC1zbS00LC5teC1zbS00e21hcmdpbi1sZWZ0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm0tc20tNXttYXJnaW46My43NXJlbSAhaW1wb3J0YW50fS5tdC1zbS01LC5teS1zbS01e21hcmdpbi10b3A6My43NXJlbSAhaW1wb3J0YW50fS5tci1zbS01LC5teC1zbS01e21hcmdpbi1yaWdodDozLjc1cmVtICFpbXBvcnRhbnR9Lm1iLXNtLTUsLm15LXNtLTV7bWFyZ2luLWJvdHRvbTozLjc1cmVtICFpbXBvcnRhbnR9Lm1sLXNtLTUsLm14LXNtLTV7bWFyZ2luLWxlZnQ6My43NXJlbSAhaW1wb3J0YW50fS5wLXNtLTB7cGFkZGluZzowICFpbXBvcnRhbnR9LnB0LXNtLTAsLnB5LXNtLTB7cGFkZGluZy10b3A6MCAhaW1wb3J0YW50fS5wci1zbS0wLC5weC1zbS0we3BhZGRpbmctcmlnaHQ6MCAhaW1wb3J0YW50fS5wYi1zbS0wLC5weS1zbS0we3BhZGRpbmctYm90dG9tOjAgIWltcG9ydGFudH0ucGwtc20tMCwucHgtc20tMHtwYWRkaW5nLWxlZnQ6MCAhaW1wb3J0YW50fS5wLXNtLTF7cGFkZGluZzouMzEyNXJlbSAhaW1wb3J0YW50fS5wdC1zbS0xLC5weS1zbS0xe3BhZGRpbmctdG9wOi4zMTI1cmVtICFpbXBvcnRhbnR9LnByLXNtLTEsLnB4LXNtLTF7cGFkZGluZy1yaWdodDouMzEyNXJlbSAhaW1wb3J0YW50fS5wYi1zbS0xLC5weS1zbS0xe3BhZGRpbmctYm90dG9tOi4zMTI1cmVtICFpbXBvcnRhbnR9LnBsLXNtLTEsLnB4LXNtLTF7cGFkZGluZy1sZWZ0Oi4zMTI1cmVtICFpbXBvcnRhbnR9LnAtc20tMntwYWRkaW5nOi42MjVyZW0gIWltcG9ydGFudH0ucHQtc20tMiwucHktc20tMntwYWRkaW5nLXRvcDouNjI1cmVtICFpbXBvcnRhbnR9LnByLXNtLTIsLnB4LXNtLTJ7cGFkZGluZy1yaWdodDouNjI1cmVtICFpbXBvcnRhbnR9LnBiLXNtLTIsLnB5LXNtLTJ7cGFkZGluZy1ib3R0b206LjYyNXJlbSAhaW1wb3J0YW50fS5wbC1zbS0yLC5weC1zbS0ye3BhZGRpbmctbGVmdDouNjI1cmVtICFpbXBvcnRhbnR9LnAtc20tM3twYWRkaW5nOi45Mzc1cmVtICFpbXBvcnRhbnR9LnB0LXNtLTMsLnB5LXNtLTN7cGFkZGluZy10b3A6LjkzNzVyZW0gIWltcG9ydGFudH0ucHItc20tMywucHgtc20tM3twYWRkaW5nLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9LnBiLXNtLTMsLnB5LXNtLTN7cGFkZGluZy1ib3R0b206LjkzNzVyZW0gIWltcG9ydGFudH0ucGwtc20tMywucHgtc20tM3twYWRkaW5nLWxlZnQ6LjkzNzVyZW0gIWltcG9ydGFudH0ucC1zbS00e3BhZGRpbmc6MS44NzVyZW0gIWltcG9ydGFudH0ucHQtc20tNCwucHktc20tNHtwYWRkaW5nLXRvcDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wci1zbS00LC5weC1zbS00e3BhZGRpbmctcmlnaHQ6MS44NzVyZW0gIWltcG9ydGFudH0ucGItc20tNCwucHktc20tNHtwYWRkaW5nLWJvdHRvbToxLjg3NXJlbSAhaW1wb3J0YW50fS5wbC1zbS00LC5weC1zbS00e3BhZGRpbmctbGVmdDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wLXNtLTV7cGFkZGluZzozLjc1cmVtICFpbXBvcnRhbnR9LnB0LXNtLTUsLnB5LXNtLTV7cGFkZGluZy10b3A6My43NXJlbSAhaW1wb3J0YW50fS5wci1zbS01LC5weC1zbS01e3BhZGRpbmctcmlnaHQ6My43NXJlbSAhaW1wb3J0YW50fS5wYi1zbS01LC5weS1zbS01e3BhZGRpbmctYm90dG9tOjMuNzVyZW0gIWltcG9ydGFudH0ucGwtc20tNSwucHgtc20tNXtwYWRkaW5nLWxlZnQ6My43NXJlbSAhaW1wb3J0YW50fS5tLXNtLWF1dG97bWFyZ2luOmF1dG8gIWltcG9ydGFudH0ubXQtc20tYXV0bywubXktc20tYXV0b3ttYXJnaW4tdG9wOmF1dG8gIWltcG9ydGFudH0ubXItc20tYXV0bywubXgtc20tYXV0b3ttYXJnaW4tcmlnaHQ6YXV0byAhaW1wb3J0YW50fS5tYi1zbS1hdXRvLC5teS1zbS1hdXRve21hcmdpbi1ib3R0b206YXV0byAhaW1wb3J0YW50fS5tbC1zbS1hdXRvLC5teC1zbS1hdXRve21hcmdpbi1sZWZ0OmF1dG8gIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KXsubS1tZC0we21hcmdpbjowICFpbXBvcnRhbnR9Lm10LW1kLTAsLm15LW1kLTB7bWFyZ2luLXRvcDowICFpbXBvcnRhbnR9Lm1yLW1kLTAsLm14LW1kLTB7bWFyZ2luLXJpZ2h0OjAgIWltcG9ydGFudH0ubWItbWQtMCwubXktbWQtMHttYXJnaW4tYm90dG9tOjAgIWltcG9ydGFudH0ubWwtbWQtMCwubXgtbWQtMHttYXJnaW4tbGVmdDowICFpbXBvcnRhbnR9Lm0tbWQtMXttYXJnaW46LjMxMjVyZW0gIWltcG9ydGFudH0ubXQtbWQtMSwubXktbWQtMXttYXJnaW4tdG9wOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm1yLW1kLTEsLm14LW1kLTF7bWFyZ2luLXJpZ2h0Oi4zMTI1cmVtICFpbXBvcnRhbnR9Lm1iLW1kLTEsLm15LW1kLTF7bWFyZ2luLWJvdHRvbTouMzEyNXJlbSAhaW1wb3J0YW50fS5tbC1tZC0xLC5teC1tZC0xe21hcmdpbi1sZWZ0Oi4zMTI1cmVtICFpbXBvcnRhbnR9Lm0tbWQtMnttYXJnaW46LjYyNXJlbSAhaW1wb3J0YW50fS5tdC1tZC0yLC5teS1tZC0ye21hcmdpbi10b3A6LjYyNXJlbSAhaW1wb3J0YW50fS5tci1tZC0yLC5teC1tZC0ye21hcmdpbi1yaWdodDouNjI1cmVtICFpbXBvcnRhbnR9Lm1iLW1kLTIsLm15LW1kLTJ7bWFyZ2luLWJvdHRvbTouNjI1cmVtICFpbXBvcnRhbnR9Lm1sLW1kLTIsLm14LW1kLTJ7bWFyZ2luLWxlZnQ6LjYyNXJlbSAhaW1wb3J0YW50fS5tLW1kLTN7bWFyZ2luOi45Mzc1cmVtICFpbXBvcnRhbnR9Lm10LW1kLTMsLm15LW1kLTN7bWFyZ2luLXRvcDouOTM3NXJlbSAhaW1wb3J0YW50fS5tci1tZC0zLC5teC1tZC0ze21hcmdpbi1yaWdodDouOTM3NXJlbSAhaW1wb3J0YW50fS5tYi1tZC0zLC5teS1tZC0ze21hcmdpbi1ib3R0b206LjkzNzVyZW0gIWltcG9ydGFudH0ubWwtbWQtMywubXgtbWQtM3ttYXJnaW4tbGVmdDouOTM3NXJlbSAhaW1wb3J0YW50fS5tLW1kLTR7bWFyZ2luOjEuODc1cmVtICFpbXBvcnRhbnR9Lm10LW1kLTQsLm15LW1kLTR7bWFyZ2luLXRvcDoxLjg3NXJlbSAhaW1wb3J0YW50fS5tci1tZC00LC5teC1tZC00e21hcmdpbi1yaWdodDoxLjg3NXJlbSAhaW1wb3J0YW50fS5tYi1tZC00LC5teS1tZC00e21hcmdpbi1ib3R0b206MS44NzVyZW0gIWltcG9ydGFudH0ubWwtbWQtNCwubXgtbWQtNHttYXJnaW4tbGVmdDoxLjg3NXJlbSAhaW1wb3J0YW50fS5tLW1kLTV7bWFyZ2luOjMuNzVyZW0gIWltcG9ydGFudH0ubXQtbWQtNSwubXktbWQtNXttYXJnaW4tdG9wOjMuNzVyZW0gIWltcG9ydGFudH0ubXItbWQtNSwubXgtbWQtNXttYXJnaW4tcmlnaHQ6My43NXJlbSAhaW1wb3J0YW50fS5tYi1tZC01LC5teS1tZC01e21hcmdpbi1ib3R0b206My43NXJlbSAhaW1wb3J0YW50fS5tbC1tZC01LC5teC1tZC01e21hcmdpbi1sZWZ0OjMuNzVyZW0gIWltcG9ydGFudH0ucC1tZC0we3BhZGRpbmc6MCAhaW1wb3J0YW50fS5wdC1tZC0wLC5weS1tZC0we3BhZGRpbmctdG9wOjAgIWltcG9ydGFudH0ucHItbWQtMCwucHgtbWQtMHtwYWRkaW5nLXJpZ2h0OjAgIWltcG9ydGFudH0ucGItbWQtMCwucHktbWQtMHtwYWRkaW5nLWJvdHRvbTowICFpbXBvcnRhbnR9LnBsLW1kLTAsLnB4LW1kLTB7cGFkZGluZy1sZWZ0OjAgIWltcG9ydGFudH0ucC1tZC0xe3BhZGRpbmc6LjMxMjVyZW0gIWltcG9ydGFudH0ucHQtbWQtMSwucHktbWQtMXtwYWRkaW5nLXRvcDouMzEyNXJlbSAhaW1wb3J0YW50fS5wci1tZC0xLC5weC1tZC0xe3BhZGRpbmctcmlnaHQ6LjMxMjVyZW0gIWltcG9ydGFudH0ucGItbWQtMSwucHktbWQtMXtwYWRkaW5nLWJvdHRvbTouMzEyNXJlbSAhaW1wb3J0YW50fS5wbC1tZC0xLC5weC1tZC0xe3BhZGRpbmctbGVmdDouMzEyNXJlbSAhaW1wb3J0YW50fS5wLW1kLTJ7cGFkZGluZzouNjI1cmVtICFpbXBvcnRhbnR9LnB0LW1kLTIsLnB5LW1kLTJ7cGFkZGluZy10b3A6LjYyNXJlbSAhaW1wb3J0YW50fS5wci1tZC0yLC5weC1tZC0ye3BhZGRpbmctcmlnaHQ6LjYyNXJlbSAhaW1wb3J0YW50fS5wYi1tZC0yLC5weS1tZC0ye3BhZGRpbmctYm90dG9tOi42MjVyZW0gIWltcG9ydGFudH0ucGwtbWQtMiwucHgtbWQtMntwYWRkaW5nLWxlZnQ6LjYyNXJlbSAhaW1wb3J0YW50fS5wLW1kLTN7cGFkZGluZzouOTM3NXJlbSAhaW1wb3J0YW50fS5wdC1tZC0zLC5weS1tZC0ze3BhZGRpbmctdG9wOi45Mzc1cmVtICFpbXBvcnRhbnR9LnByLW1kLTMsLnB4LW1kLTN7cGFkZGluZy1yaWdodDouOTM3NXJlbSAhaW1wb3J0YW50fS5wYi1tZC0zLC5weS1tZC0ze3BhZGRpbmctYm90dG9tOi45Mzc1cmVtICFpbXBvcnRhbnR9LnBsLW1kLTMsLnB4LW1kLTN7cGFkZGluZy1sZWZ0Oi45Mzc1cmVtICFpbXBvcnRhbnR9LnAtbWQtNHtwYWRkaW5nOjEuODc1cmVtICFpbXBvcnRhbnR9LnB0LW1kLTQsLnB5LW1kLTR7cGFkZGluZy10b3A6MS44NzVyZW0gIWltcG9ydGFudH0ucHItbWQtNCwucHgtbWQtNHtwYWRkaW5nLXJpZ2h0OjEuODc1cmVtICFpbXBvcnRhbnR9LnBiLW1kLTQsLnB5LW1kLTR7cGFkZGluZy1ib3R0b206MS44NzVyZW0gIWltcG9ydGFudH0ucGwtbWQtNCwucHgtbWQtNHtwYWRkaW5nLWxlZnQ6MS44NzVyZW0gIWltcG9ydGFudH0ucC1tZC01e3BhZGRpbmc6My43NXJlbSAhaW1wb3J0YW50fS5wdC1tZC01LC5weS1tZC01e3BhZGRpbmctdG9wOjMuNzVyZW0gIWltcG9ydGFudH0ucHItbWQtNSwucHgtbWQtNXtwYWRkaW5nLXJpZ2h0OjMuNzVyZW0gIWltcG9ydGFudH0ucGItbWQtNSwucHktbWQtNXtwYWRkaW5nLWJvdHRvbTozLjc1cmVtICFpbXBvcnRhbnR9LnBsLW1kLTUsLnB4LW1kLTV7cGFkZGluZy1sZWZ0OjMuNzVyZW0gIWltcG9ydGFudH0ubS1tZC1hdXRve21hcmdpbjphdXRvICFpbXBvcnRhbnR9Lm10LW1kLWF1dG8sLm15LW1kLWF1dG97bWFyZ2luLXRvcDphdXRvICFpbXBvcnRhbnR9Lm1yLW1kLWF1dG8sLm14LW1kLWF1dG97bWFyZ2luLXJpZ2h0OmF1dG8gIWltcG9ydGFudH0ubWItbWQtYXV0bywubXktbWQtYXV0b3ttYXJnaW4tYm90dG9tOmF1dG8gIWltcG9ydGFudH0ubWwtbWQtYXV0bywubXgtbWQtYXV0b3ttYXJnaW4tbGVmdDphdXRvICFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpey5tLWxnLTB7bWFyZ2luOjAgIWltcG9ydGFudH0ubXQtbGctMCwubXktbGctMHttYXJnaW4tdG9wOjAgIWltcG9ydGFudH0ubXItbGctMCwubXgtbGctMHttYXJnaW4tcmlnaHQ6MCAhaW1wb3J0YW50fS5tYi1sZy0wLC5teS1sZy0we21hcmdpbi1ib3R0b206MCAhaW1wb3J0YW50fS5tbC1sZy0wLC5teC1sZy0we21hcmdpbi1sZWZ0OjAgIWltcG9ydGFudH0ubS1sZy0xe21hcmdpbjouMzEyNXJlbSAhaW1wb3J0YW50fS5tdC1sZy0xLC5teS1sZy0xe21hcmdpbi10b3A6LjMxMjVyZW0gIWltcG9ydGFudH0ubXItbGctMSwubXgtbGctMXttYXJnaW4tcmlnaHQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubWItbGctMSwubXktbGctMXttYXJnaW4tYm90dG9tOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm1sLWxnLTEsLm14LWxnLTF7bWFyZ2luLWxlZnQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubS1sZy0ye21hcmdpbjouNjI1cmVtICFpbXBvcnRhbnR9Lm10LWxnLTIsLm15LWxnLTJ7bWFyZ2luLXRvcDouNjI1cmVtICFpbXBvcnRhbnR9Lm1yLWxnLTIsLm14LWxnLTJ7bWFyZ2luLXJpZ2h0Oi42MjVyZW0gIWltcG9ydGFudH0ubWItbGctMiwubXktbGctMnttYXJnaW4tYm90dG9tOi42MjVyZW0gIWltcG9ydGFudH0ubWwtbGctMiwubXgtbGctMnttYXJnaW4tbGVmdDouNjI1cmVtICFpbXBvcnRhbnR9Lm0tbGctM3ttYXJnaW46LjkzNzVyZW0gIWltcG9ydGFudH0ubXQtbGctMywubXktbGctM3ttYXJnaW4tdG9wOi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1yLWxnLTMsLm14LWxnLTN7bWFyZ2luLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1iLWxnLTMsLm15LWxnLTN7bWFyZ2luLWJvdHRvbTouOTM3NXJlbSAhaW1wb3J0YW50fS5tbC1sZy0zLC5teC1sZy0ze21hcmdpbi1sZWZ0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm0tbGctNHttYXJnaW46MS44NzVyZW0gIWltcG9ydGFudH0ubXQtbGctNCwubXktbGctNHttYXJnaW4tdG9wOjEuODc1cmVtICFpbXBvcnRhbnR9Lm1yLWxnLTQsLm14LWxnLTR7bWFyZ2luLXJpZ2h0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm1iLWxnLTQsLm15LWxnLTR7bWFyZ2luLWJvdHRvbToxLjg3NXJlbSAhaW1wb3J0YW50fS5tbC1sZy00LC5teC1sZy00e21hcmdpbi1sZWZ0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm0tbGctNXttYXJnaW46My43NXJlbSAhaW1wb3J0YW50fS5tdC1sZy01LC5teS1sZy01e21hcmdpbi10b3A6My43NXJlbSAhaW1wb3J0YW50fS5tci1sZy01LC5teC1sZy01e21hcmdpbi1yaWdodDozLjc1cmVtICFpbXBvcnRhbnR9Lm1iLWxnLTUsLm15LWxnLTV7bWFyZ2luLWJvdHRvbTozLjc1cmVtICFpbXBvcnRhbnR9Lm1sLWxnLTUsLm14LWxnLTV7bWFyZ2luLWxlZnQ6My43NXJlbSAhaW1wb3J0YW50fS5wLWxnLTB7cGFkZGluZzowICFpbXBvcnRhbnR9LnB0LWxnLTAsLnB5LWxnLTB7cGFkZGluZy10b3A6MCAhaW1wb3J0YW50fS5wci1sZy0wLC5weC1sZy0we3BhZGRpbmctcmlnaHQ6MCAhaW1wb3J0YW50fS5wYi1sZy0wLC5weS1sZy0we3BhZGRpbmctYm90dG9tOjAgIWltcG9ydGFudH0ucGwtbGctMCwucHgtbGctMHtwYWRkaW5nLWxlZnQ6MCAhaW1wb3J0YW50fS5wLWxnLTF7cGFkZGluZzouMzEyNXJlbSAhaW1wb3J0YW50fS5wdC1sZy0xLC5weS1sZy0xe3BhZGRpbmctdG9wOi4zMTI1cmVtICFpbXBvcnRhbnR9LnByLWxnLTEsLnB4LWxnLTF7cGFkZGluZy1yaWdodDouMzEyNXJlbSAhaW1wb3J0YW50fS5wYi1sZy0xLC5weS1sZy0xe3BhZGRpbmctYm90dG9tOi4zMTI1cmVtICFpbXBvcnRhbnR9LnBsLWxnLTEsLnB4LWxnLTF7cGFkZGluZy1sZWZ0Oi4zMTI1cmVtICFpbXBvcnRhbnR9LnAtbGctMntwYWRkaW5nOi42MjVyZW0gIWltcG9ydGFudH0ucHQtbGctMiwucHktbGctMntwYWRkaW5nLXRvcDouNjI1cmVtICFpbXBvcnRhbnR9LnByLWxnLTIsLnB4LWxnLTJ7cGFkZGluZy1yaWdodDouNjI1cmVtICFpbXBvcnRhbnR9LnBiLWxnLTIsLnB5LWxnLTJ7cGFkZGluZy1ib3R0b206LjYyNXJlbSAhaW1wb3J0YW50fS5wbC1sZy0yLC5weC1sZy0ye3BhZGRpbmctbGVmdDouNjI1cmVtICFpbXBvcnRhbnR9LnAtbGctM3twYWRkaW5nOi45Mzc1cmVtICFpbXBvcnRhbnR9LnB0LWxnLTMsLnB5LWxnLTN7cGFkZGluZy10b3A6LjkzNzVyZW0gIWltcG9ydGFudH0ucHItbGctMywucHgtbGctM3twYWRkaW5nLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9LnBiLWxnLTMsLnB5LWxnLTN7cGFkZGluZy1ib3R0b206LjkzNzVyZW0gIWltcG9ydGFudH0ucGwtbGctMywucHgtbGctM3twYWRkaW5nLWxlZnQ6LjkzNzVyZW0gIWltcG9ydGFudH0ucC1sZy00e3BhZGRpbmc6MS44NzVyZW0gIWltcG9ydGFudH0ucHQtbGctNCwucHktbGctNHtwYWRkaW5nLXRvcDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wci1sZy00LC5weC1sZy00e3BhZGRpbmctcmlnaHQ6MS44NzVyZW0gIWltcG9ydGFudH0ucGItbGctNCwucHktbGctNHtwYWRkaW5nLWJvdHRvbToxLjg3NXJlbSAhaW1wb3J0YW50fS5wbC1sZy00LC5weC1sZy00e3BhZGRpbmctbGVmdDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wLWxnLTV7cGFkZGluZzozLjc1cmVtICFpbXBvcnRhbnR9LnB0LWxnLTUsLnB5LWxnLTV7cGFkZGluZy10b3A6My43NXJlbSAhaW1wb3J0YW50fS5wci1sZy01LC5weC1sZy01e3BhZGRpbmctcmlnaHQ6My43NXJlbSAhaW1wb3J0YW50fS5wYi1sZy01LC5weS1sZy01e3BhZGRpbmctYm90dG9tOjMuNzVyZW0gIWltcG9ydGFudH0ucGwtbGctNSwucHgtbGctNXtwYWRkaW5nLWxlZnQ6My43NXJlbSAhaW1wb3J0YW50fS5tLWxnLWF1dG97bWFyZ2luOmF1dG8gIWltcG9ydGFudH0ubXQtbGctYXV0bywubXktbGctYXV0b3ttYXJnaW4tdG9wOmF1dG8gIWltcG9ydGFudH0ubXItbGctYXV0bywubXgtbGctYXV0b3ttYXJnaW4tcmlnaHQ6YXV0byAhaW1wb3J0YW50fS5tYi1sZy1hdXRvLC5teS1sZy1hdXRve21hcmdpbi1ib3R0b206YXV0byAhaW1wb3J0YW50fS5tbC1sZy1hdXRvLC5teC1sZy1hdXRve21hcmdpbi1sZWZ0OmF1dG8gIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDEzMDBweCl7Lm0teGwtMHttYXJnaW46MCAhaW1wb3J0YW50fS5tdC14bC0wLC5teS14bC0we21hcmdpbi10b3A6MCAhaW1wb3J0YW50fS5tci14bC0wLC5teC14bC0we21hcmdpbi1yaWdodDowICFpbXBvcnRhbnR9Lm1iLXhsLTAsLm15LXhsLTB7bWFyZ2luLWJvdHRvbTowICFpbXBvcnRhbnR9Lm1sLXhsLTAsLm14LXhsLTB7bWFyZ2luLWxlZnQ6MCAhaW1wb3J0YW50fS5tLXhsLTF7bWFyZ2luOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm10LXhsLTEsLm15LXhsLTF7bWFyZ2luLXRvcDouMzEyNXJlbSAhaW1wb3J0YW50fS5tci14bC0xLC5teC14bC0xe21hcmdpbi1yaWdodDouMzEyNXJlbSAhaW1wb3J0YW50fS5tYi14bC0xLC5teS14bC0xe21hcmdpbi1ib3R0b206LjMxMjVyZW0gIWltcG9ydGFudH0ubWwteGwtMSwubXgteGwtMXttYXJnaW4tbGVmdDouMzEyNXJlbSAhaW1wb3J0YW50fS5tLXhsLTJ7bWFyZ2luOi42MjVyZW0gIWltcG9ydGFudH0ubXQteGwtMiwubXkteGwtMnttYXJnaW4tdG9wOi42MjVyZW0gIWltcG9ydGFudH0ubXIteGwtMiwubXgteGwtMnttYXJnaW4tcmlnaHQ6LjYyNXJlbSAhaW1wb3J0YW50fS5tYi14bC0yLC5teS14bC0ye21hcmdpbi1ib3R0b206LjYyNXJlbSAhaW1wb3J0YW50fS5tbC14bC0yLC5teC14bC0ye21hcmdpbi1sZWZ0Oi42MjVyZW0gIWltcG9ydGFudH0ubS14bC0ze21hcmdpbjouOTM3NXJlbSAhaW1wb3J0YW50fS5tdC14bC0zLC5teS14bC0ze21hcmdpbi10b3A6LjkzNzVyZW0gIWltcG9ydGFudH0ubXIteGwtMywubXgteGwtM3ttYXJnaW4tcmlnaHQ6LjkzNzVyZW0gIWltcG9ydGFudH0ubWIteGwtMywubXkteGwtM3ttYXJnaW4tYm90dG9tOi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1sLXhsLTMsLm14LXhsLTN7bWFyZ2luLWxlZnQ6LjkzNzVyZW0gIWltcG9ydGFudH0ubS14bC00e21hcmdpbjoxLjg3NXJlbSAhaW1wb3J0YW50fS5tdC14bC00LC5teS14bC00e21hcmdpbi10b3A6MS44NzVyZW0gIWltcG9ydGFudH0ubXIteGwtNCwubXgteGwtNHttYXJnaW4tcmlnaHQ6MS44NzVyZW0gIWltcG9ydGFudH0ubWIteGwtNCwubXkteGwtNHttYXJnaW4tYm90dG9tOjEuODc1cmVtICFpbXBvcnRhbnR9Lm1sLXhsLTQsLm14LXhsLTR7bWFyZ2luLWxlZnQ6MS44NzVyZW0gIWltcG9ydGFudH0ubS14bC01e21hcmdpbjozLjc1cmVtICFpbXBvcnRhbnR9Lm10LXhsLTUsLm15LXhsLTV7bWFyZ2luLXRvcDozLjc1cmVtICFpbXBvcnRhbnR9Lm1yLXhsLTUsLm14LXhsLTV7bWFyZ2luLXJpZ2h0OjMuNzVyZW0gIWltcG9ydGFudH0ubWIteGwtNSwubXkteGwtNXttYXJnaW4tYm90dG9tOjMuNzVyZW0gIWltcG9ydGFudH0ubWwteGwtNSwubXgteGwtNXttYXJnaW4tbGVmdDozLjc1cmVtICFpbXBvcnRhbnR9LnAteGwtMHtwYWRkaW5nOjAgIWltcG9ydGFudH0ucHQteGwtMCwucHkteGwtMHtwYWRkaW5nLXRvcDowICFpbXBvcnRhbnR9LnByLXhsLTAsLnB4LXhsLTB7cGFkZGluZy1yaWdodDowICFpbXBvcnRhbnR9LnBiLXhsLTAsLnB5LXhsLTB7cGFkZGluZy1ib3R0b206MCAhaW1wb3J0YW50fS5wbC14bC0wLC5weC14bC0we3BhZGRpbmctbGVmdDowICFpbXBvcnRhbnR9LnAteGwtMXtwYWRkaW5nOi4zMTI1cmVtICFpbXBvcnRhbnR9LnB0LXhsLTEsLnB5LXhsLTF7cGFkZGluZy10b3A6LjMxMjVyZW0gIWltcG9ydGFudH0ucHIteGwtMSwucHgteGwtMXtwYWRkaW5nLXJpZ2h0Oi4zMTI1cmVtICFpbXBvcnRhbnR9LnBiLXhsLTEsLnB5LXhsLTF7cGFkZGluZy1ib3R0b206LjMxMjVyZW0gIWltcG9ydGFudH0ucGwteGwtMSwucHgteGwtMXtwYWRkaW5nLWxlZnQ6LjMxMjVyZW0gIWltcG9ydGFudH0ucC14bC0ye3BhZGRpbmc6LjYyNXJlbSAhaW1wb3J0YW50fS5wdC14bC0yLC5weS14bC0ye3BhZGRpbmctdG9wOi42MjVyZW0gIWltcG9ydGFudH0ucHIteGwtMiwucHgteGwtMntwYWRkaW5nLXJpZ2h0Oi42MjVyZW0gIWltcG9ydGFudH0ucGIteGwtMiwucHkteGwtMntwYWRkaW5nLWJvdHRvbTouNjI1cmVtICFpbXBvcnRhbnR9LnBsLXhsLTIsLnB4LXhsLTJ7cGFkZGluZy1sZWZ0Oi42MjVyZW0gIWltcG9ydGFudH0ucC14bC0ze3BhZGRpbmc6LjkzNzVyZW0gIWltcG9ydGFudH0ucHQteGwtMywucHkteGwtM3twYWRkaW5nLXRvcDouOTM3NXJlbSAhaW1wb3J0YW50fS5wci14bC0zLC5weC14bC0ze3BhZGRpbmctcmlnaHQ6LjkzNzVyZW0gIWltcG9ydGFudH0ucGIteGwtMywucHkteGwtM3twYWRkaW5nLWJvdHRvbTouOTM3NXJlbSAhaW1wb3J0YW50fS5wbC14bC0zLC5weC14bC0ze3BhZGRpbmctbGVmdDouOTM3NXJlbSAhaW1wb3J0YW50fS5wLXhsLTR7cGFkZGluZzoxLjg3NXJlbSAhaW1wb3J0YW50fS5wdC14bC00LC5weS14bC00e3BhZGRpbmctdG9wOjEuODc1cmVtICFpbXBvcnRhbnR9LnByLXhsLTQsLnB4LXhsLTR7cGFkZGluZy1yaWdodDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wYi14bC00LC5weS14bC00e3BhZGRpbmctYm90dG9tOjEuODc1cmVtICFpbXBvcnRhbnR9LnBsLXhsLTQsLnB4LXhsLTR7cGFkZGluZy1sZWZ0OjEuODc1cmVtICFpbXBvcnRhbnR9LnAteGwtNXtwYWRkaW5nOjMuNzVyZW0gIWltcG9ydGFudH0ucHQteGwtNSwucHkteGwtNXtwYWRkaW5nLXRvcDozLjc1cmVtICFpbXBvcnRhbnR9LnByLXhsLTUsLnB4LXhsLTV7cGFkZGluZy1yaWdodDozLjc1cmVtICFpbXBvcnRhbnR9LnBiLXhsLTUsLnB5LXhsLTV7cGFkZGluZy1ib3R0b206My43NXJlbSAhaW1wb3J0YW50fS5wbC14bC01LC5weC14bC01e3BhZGRpbmctbGVmdDozLjc1cmVtICFpbXBvcnRhbnR9Lm0teGwtYXV0b3ttYXJnaW46YXV0byAhaW1wb3J0YW50fS5tdC14bC1hdXRvLC5teS14bC1hdXRve21hcmdpbi10b3A6YXV0byAhaW1wb3J0YW50fS5tci14bC1hdXRvLC5teC14bC1hdXRve21hcmdpbi1yaWdodDphdXRvICFpbXBvcnRhbnR9Lm1iLXhsLWF1dG8sLm15LXhsLWF1dG97bWFyZ2luLWJvdHRvbTphdXRvICFpbXBvcnRhbnR9Lm1sLXhsLWF1dG8sLm14LXhsLWF1dG97bWFyZ2luLWxlZnQ6YXV0byAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDogMTYwMHB4KXsubS14eGwtMHttYXJnaW46MCAhaW1wb3J0YW50fS5tdC14eGwtMCwubXkteHhsLTB7bWFyZ2luLXRvcDowICFpbXBvcnRhbnR9Lm1yLXh4bC0wLC5teC14eGwtMHttYXJnaW4tcmlnaHQ6MCAhaW1wb3J0YW50fS5tYi14eGwtMCwubXkteHhsLTB7bWFyZ2luLWJvdHRvbTowICFpbXBvcnRhbnR9Lm1sLXh4bC0wLC5teC14eGwtMHttYXJnaW4tbGVmdDowICFpbXBvcnRhbnR9Lm0teHhsLTF7bWFyZ2luOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm10LXh4bC0xLC5teS14eGwtMXttYXJnaW4tdG9wOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm1yLXh4bC0xLC5teC14eGwtMXttYXJnaW4tcmlnaHQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubWIteHhsLTEsLm15LXh4bC0xe21hcmdpbi1ib3R0b206LjMxMjVyZW0gIWltcG9ydGFudH0ubWwteHhsLTEsLm14LXh4bC0xe21hcmdpbi1sZWZ0Oi4zMTI1cmVtICFpbXBvcnRhbnR9Lm0teHhsLTJ7bWFyZ2luOi42MjVyZW0gIWltcG9ydGFudH0ubXQteHhsLTIsLm15LXh4bC0ye21hcmdpbi10b3A6LjYyNXJlbSAhaW1wb3J0YW50fS5tci14eGwtMiwubXgteHhsLTJ7bWFyZ2luLXJpZ2h0Oi42MjVyZW0gIWltcG9ydGFudH0ubWIteHhsLTIsLm15LXh4bC0ye21hcmdpbi1ib3R0b206LjYyNXJlbSAhaW1wb3J0YW50fS5tbC14eGwtMiwubXgteHhsLTJ7bWFyZ2luLWxlZnQ6LjYyNXJlbSAhaW1wb3J0YW50fS5tLXh4bC0ze21hcmdpbjouOTM3NXJlbSAhaW1wb3J0YW50fS5tdC14eGwtMywubXkteHhsLTN7bWFyZ2luLXRvcDouOTM3NXJlbSAhaW1wb3J0YW50fS5tci14eGwtMywubXgteHhsLTN7bWFyZ2luLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1iLXh4bC0zLC5teS14eGwtM3ttYXJnaW4tYm90dG9tOi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1sLXh4bC0zLC5teC14eGwtM3ttYXJnaW4tbGVmdDouOTM3NXJlbSAhaW1wb3J0YW50fS5tLXh4bC00e21hcmdpbjoxLjg3NXJlbSAhaW1wb3J0YW50fS5tdC14eGwtNCwubXkteHhsLTR7bWFyZ2luLXRvcDoxLjg3NXJlbSAhaW1wb3J0YW50fS5tci14eGwtNCwubXgteHhsLTR7bWFyZ2luLXJpZ2h0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm1iLXh4bC00LC5teS14eGwtNHttYXJnaW4tYm90dG9tOjEuODc1cmVtICFpbXBvcnRhbnR9Lm1sLXh4bC00LC5teC14eGwtNHttYXJnaW4tbGVmdDoxLjg3NXJlbSAhaW1wb3J0YW50fS5tLXh4bC01e21hcmdpbjozLjc1cmVtICFpbXBvcnRhbnR9Lm10LXh4bC01LC5teS14eGwtNXttYXJnaW4tdG9wOjMuNzVyZW0gIWltcG9ydGFudH0ubXIteHhsLTUsLm14LXh4bC01e21hcmdpbi1yaWdodDozLjc1cmVtICFpbXBvcnRhbnR9Lm1iLXh4bC01LC5teS14eGwtNXttYXJnaW4tYm90dG9tOjMuNzVyZW0gIWltcG9ydGFudH0ubWwteHhsLTUsLm14LXh4bC01e21hcmdpbi1sZWZ0OjMuNzVyZW0gIWltcG9ydGFudH0ucC14eGwtMHtwYWRkaW5nOjAgIWltcG9ydGFudH0ucHQteHhsLTAsLnB5LXh4bC0we3BhZGRpbmctdG9wOjAgIWltcG9ydGFudH0ucHIteHhsLTAsLnB4LXh4bC0we3BhZGRpbmctcmlnaHQ6MCAhaW1wb3J0YW50fS5wYi14eGwtMCwucHkteHhsLTB7cGFkZGluZy1ib3R0b206MCAhaW1wb3J0YW50fS5wbC14eGwtMCwucHgteHhsLTB7cGFkZGluZy1sZWZ0OjAgIWltcG9ydGFudH0ucC14eGwtMXtwYWRkaW5nOi4zMTI1cmVtICFpbXBvcnRhbnR9LnB0LXh4bC0xLC5weS14eGwtMXtwYWRkaW5nLXRvcDouMzEyNXJlbSAhaW1wb3J0YW50fS5wci14eGwtMSwucHgteHhsLTF7cGFkZGluZy1yaWdodDouMzEyNXJlbSAhaW1wb3J0YW50fS5wYi14eGwtMSwucHkteHhsLTF7cGFkZGluZy1ib3R0b206LjMxMjVyZW0gIWltcG9ydGFudH0ucGwteHhsLTEsLnB4LXh4bC0xe3BhZGRpbmctbGVmdDouMzEyNXJlbSAhaW1wb3J0YW50fS5wLXh4bC0ye3BhZGRpbmc6LjYyNXJlbSAhaW1wb3J0YW50fS5wdC14eGwtMiwucHkteHhsLTJ7cGFkZGluZy10b3A6LjYyNXJlbSAhaW1wb3J0YW50fS5wci14eGwtMiwucHgteHhsLTJ7cGFkZGluZy1yaWdodDouNjI1cmVtICFpbXBvcnRhbnR9LnBiLXh4bC0yLC5weS14eGwtMntwYWRkaW5nLWJvdHRvbTouNjI1cmVtICFpbXBvcnRhbnR9LnBsLXh4bC0yLC5weC14eGwtMntwYWRkaW5nLWxlZnQ6LjYyNXJlbSAhaW1wb3J0YW50fS5wLXh4bC0ze3BhZGRpbmc6LjkzNzVyZW0gIWltcG9ydGFudH0ucHQteHhsLTMsLnB5LXh4bC0ze3BhZGRpbmctdG9wOi45Mzc1cmVtICFpbXBvcnRhbnR9LnByLXh4bC0zLC5weC14eGwtM3twYWRkaW5nLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9LnBiLXh4bC0zLC5weS14eGwtM3twYWRkaW5nLWJvdHRvbTouOTM3NXJlbSAhaW1wb3J0YW50fS5wbC14eGwtMywucHgteHhsLTN7cGFkZGluZy1sZWZ0Oi45Mzc1cmVtICFpbXBvcnRhbnR9LnAteHhsLTR7cGFkZGluZzoxLjg3NXJlbSAhaW1wb3J0YW50fS5wdC14eGwtNCwucHkteHhsLTR7cGFkZGluZy10b3A6MS44NzVyZW0gIWltcG9ydGFudH0ucHIteHhsLTQsLnB4LXh4bC00e3BhZGRpbmctcmlnaHQ6MS44NzVyZW0gIWltcG9ydGFudH0ucGIteHhsLTQsLnB5LXh4bC00e3BhZGRpbmctYm90dG9tOjEuODc1cmVtICFpbXBvcnRhbnR9LnBsLXh4bC00LC5weC14eGwtNHtwYWRkaW5nLWxlZnQ6MS44NzVyZW0gIWltcG9ydGFudH0ucC14eGwtNXtwYWRkaW5nOjMuNzVyZW0gIWltcG9ydGFudH0ucHQteHhsLTUsLnB5LXh4bC01e3BhZGRpbmctdG9wOjMuNzVyZW0gIWltcG9ydGFudH0ucHIteHhsLTUsLnB4LXh4bC01e3BhZGRpbmctcmlnaHQ6My43NXJlbSAhaW1wb3J0YW50fS5wYi14eGwtNSwucHkteHhsLTV7cGFkZGluZy1ib3R0b206My43NXJlbSAhaW1wb3J0YW50fS5wbC14eGwtNSwucHgteHhsLTV7cGFkZGluZy1sZWZ0OjMuNzVyZW0gIWltcG9ydGFudH0ubS14eGwtYXV0b3ttYXJnaW46YXV0byAhaW1wb3J0YW50fS5tdC14eGwtYXV0bywubXkteHhsLWF1dG97bWFyZ2luLXRvcDphdXRvICFpbXBvcnRhbnR9Lm1yLXh4bC1hdXRvLC5teC14eGwtYXV0b3ttYXJnaW4tcmlnaHQ6YXV0byAhaW1wb3J0YW50fS5tYi14eGwtYXV0bywubXkteHhsLWF1dG97bWFyZ2luLWJvdHRvbTphdXRvICFpbXBvcnRhbnR9Lm1sLXh4bC1hdXRvLC5teC14eGwtYXV0b3ttYXJnaW4tbGVmdDphdXRvICFpbXBvcnRhbnR9fS50ZXh0LWp1c3RpZnl7dGV4dC1hbGlnbjpqdXN0aWZ5ICFpbXBvcnRhbnR9LnRleHQtbm93cmFwe3doaXRlLXNwYWNlOm5vd3JhcCAhaW1wb3J0YW50fS50ZXh0LXRydW5jYXRle292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHQgIWltcG9ydGFudH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXIgIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDogNTQ0cHgpey50ZXh0LXNtLWxlZnR7dGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnR9LnRleHQtc20tcmlnaHR7dGV4dC1hbGlnbjpyaWdodCAhaW1wb3J0YW50fS50ZXh0LXNtLWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlciAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpey50ZXh0LW1kLWxlZnR7dGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnR9LnRleHQtbWQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodCAhaW1wb3J0YW50fS50ZXh0LW1kLWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlciAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDogMTAyNHB4KXsudGV4dC1sZy1sZWZ0e3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50fS50ZXh0LWxnLXJpZ2h0e3RleHQtYWxpZ246cmlnaHQgIWltcG9ydGFudH0udGV4dC1sZy1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXIgIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDEzMDBweCl7LnRleHQteGwtbGVmdHt0ZXh0LWFsaWduOmxlZnQgIWltcG9ydGFudH0udGV4dC14bC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0ICFpbXBvcnRhbnR9LnRleHQteGwtY2VudGVye3RleHQtYWxpZ246Y2VudGVyICFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOiAxNjAwcHgpey50ZXh0LXh4bC1sZWZ0e3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50fS50ZXh0LXh4bC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0ICFpbXBvcnRhbnR9LnRleHQteHhsLWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlciAhaW1wb3J0YW50fX0udGV4dC1sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlICFpbXBvcnRhbnR9LnRleHQtdXBwZXJjYXNle3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZSAhaW1wb3J0YW50fS50ZXh0LWNhcGl0YWxpemV7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZSAhaW1wb3J0YW50fS5mb250LXdlaWdodC1saWdodHtmb250LXdlaWdodDozMDAgIWltcG9ydGFudH0uZm9udC13ZWlnaHQtbm9ybWFse2ZvbnQtd2VpZ2h0OjQwMCAhaW1wb3J0YW50fS5mb250LXdlaWdodC1ib2xke2ZvbnQtd2VpZ2h0OjcwMCAhaW1wb3J0YW50fS5mb250LWl0YWxpY3tmb250LXN0eWxlOml0YWxpYyAhaW1wb3J0YW50fS50ZXh0LXdoaXRle2NvbG9yOiNmZmYgIWltcG9ydGFudH0udGV4dC1wcmltYXJ5e2NvbG9yOiMyNWI5ZDcgIWltcG9ydGFudH1hLnRleHQtcHJpbWFyeTpob3ZlcixhLnRleHQtcHJpbWFyeTpmb2N1c3tjb2xvcjojMWU5NGFiICFpbXBvcnRhbnR9LnRleHQtc2Vjb25kYXJ5e2NvbG9yOiM2Yzg2OGUgIWltcG9ydGFudH1hLnRleHQtc2Vjb25kYXJ5OmhvdmVyLGEudGV4dC1zZWNvbmRhcnk6Zm9jdXN7Y29sb3I6IzU2NmI3MSAhaW1wb3J0YW50fS50ZXh0LXN1Y2Nlc3N7Y29sb3I6IzcwYjU4MCAhaW1wb3J0YW50fWEudGV4dC1zdWNjZXNzOmhvdmVyLGEudGV4dC1zdWNjZXNzOmZvY3Vze2NvbG9yOiM1MzlmNjQgIWltcG9ydGFudH0udGV4dC1pbmZve2NvbG9yOiMyNWI5ZDcgIWltcG9ydGFudH1hLnRleHQtaW5mbzpob3ZlcixhLnRleHQtaW5mbzpmb2N1c3tjb2xvcjojMWU5NGFiICFpbXBvcnRhbnR9LnRleHQtd2FybmluZ3tjb2xvcjojZmFiMDAwICFpbXBvcnRhbnR9YS50ZXh0LXdhcm5pbmc6aG92ZXIsYS50ZXh0LXdhcm5pbmc6Zm9jdXN7Y29sb3I6I2M3OGMwMCAhaW1wb3J0YW50fS50ZXh0LWRhbmdlcntjb2xvcjojZjU0YzNlICFpbXBvcnRhbnR9YS50ZXh0LWRhbmdlcjpob3ZlcixhLnRleHQtZGFuZ2VyOmZvY3Vze2NvbG9yOiNmMjFmMGUgIWltcG9ydGFudH0udGV4dC1saWdodHtjb2xvcjojZmFmYmZjICFpbXBvcnRhbnR9YS50ZXh0LWxpZ2h0OmhvdmVyLGEudGV4dC1saWdodDpmb2N1c3tjb2xvcjojZGFlMmU5ICFpbXBvcnRhbnR9LnRleHQtZGFya3tjb2xvcjojMzYzYTQxICFpbXBvcnRhbnR9YS50ZXh0LWRhcms6aG92ZXIsYS50ZXh0LWRhcms6Zm9jdXN7Y29sb3I6IzFmMjEyNSAhaW1wb3J0YW50fS50ZXh0LW11dGVke2NvbG9yOiM2Yzg2OGUgIWltcG9ydGFudH0udGV4dC1oaWRle2ZvbnQ6MC8wIGE7Y29sb3I6dHJhbnNwYXJlbnQ7dGV4dC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjowfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZSAhaW1wb3J0YW50fS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW4gIWltcG9ydGFudH0ucHJvZHVjdC1wYWdlICNwcm9kdWN0LWltYWdlcy1kcm9wem9uZS5mdWxse2N1cnNvcjpwb2ludGVyO3dpZHRoOjEwMCV9LnByb2R1Y3QtcGFnZSAjcHJvZHVjdC1pbWFnZXMtZHJvcHpvbmUgLmRyb3B6b25lLWxvYWRpbmd7d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWluLWhlaWdodDoxMHJlbX0ucHJvZHVjdC1wYWdlICNwcm9kdWN0LWltYWdlcy1kcm9wem9uZS5kcm9wem9uZS1jb250YWluZXIgLmR6LXByZXZpZXd7cG9zaXRpb246cmVsYXRpdmU7Y3Vyc29yOnBvaW50ZXJ9LnByb2R1Y3QtcGFnZSAjcHJvZHVjdC1pbWFnZXMtZHJvcHpvbmUuZHJvcHpvbmUtY29udGFpbmVyIC5kei1wcmV2aWV3IC5pc2NvdmVye2Rpc3BsYXk6bm9uZTtsZWZ0Oi0ycHg7Ym90dG9tOi0zcHg7d2lkdGg6Y2FsYygxMDAlICsgNHB4KTtwYWRkaW5nOjlweH0ucHJvZHVjdC1wYWdlICNwcm9kdWN0LWltYWdlcy1kcm9wem9uZS5kcm9wem9uZS1jb250YWluZXIgLmR6LXByZXZpZXcuaXMtY292ZXIgLmlzY292ZXJ7ZGlzcGxheTpibG9ja30ucHJvZHVjdC1wYWdlICNwcm9kdWN0LWltYWdlcy1kcm9wem9uZS5kcm9wem9uZS1jb250YWluZXIgLmR6LXByZXZpZXc6bm90KC5vcGVuZmlsZW1hbmFnZXIpe2JvcmRlcjozcHggc29saWQgdHJhbnNwYXJlbnR9LnByb2R1Y3QtcGFnZSAjcHJvZHVjdC1pbWFnZXMtZHJvcHpvbmUuZHJvcHpvbmUtY29udGFpbmVyIC5kei1wcmV2aWV3Om5vdCgub3BlbmZpbGVtYW5hZ2VyKTpob3Zlcntib3JkZXI6M3B4IHNvbGlkICMyNWI5ZDd9LnByb2R1Y3QtcGFnZSAjcHJvZHVjdC1pbWFnZXMtZHJvcHpvbmUuZHJvcHpvbmUtY29udGFpbmVyIC5kei1wcmV2aWV3Om5vdCgub3BlbmZpbGVtYW5hZ2VyKSAuZHotaW1hZ2V7Ym9yZGVyOjFweCBzb2xpZCAjYmJjZGQyO3dpZHRoOjEzMHB4O2hlaWdodDoxMzBweDttYXJnaW46LTNweH0ucHJvZHVjdC1wYWdlICNwcm9kdWN0LWltYWdlcy1kcm9wem9uZS5kcm9wem9uZS1jb250YWluZXIgLmR6LXByZXZpZXcub3BlbmZpbGVtYW5hZ2Vye2JvcmRlci1zdHlsZTpkYXNoZWQ7bWluLXdpZHRoOjEzMHB4fS5wcm9kdWN0LXBhZ2UgI3Byb2R1Y3QtaW1hZ2VzLWRyb3B6b25lLmRyb3B6b25lLWNvbnRhaW5lciAuZHotcHJldmlldy5vcGVuZmlsZW1hbmFnZXI6aG92ZXJ7Ym9yZGVyLXN0eWxlOnNvbGlkfS5wcm9kdWN0LXBhZ2UgI3Byb2R1Y3QtaW1hZ2VzLWRyb3B6b25lLmRyb3B6b25lLWNvbnRhaW5lciAuZHotcHJldmlldy5vcGVuZmlsZW1hbmFnZXI+ZGl2e2JvcmRlcjpub25lfS5wcm9kdWN0LXBhZ2UgI3Byb2R1Y3QtaW1hZ2VzLWRyb3B6b25lLmRyb3B6b25lLWNvbnRhaW5lciAuZHotcHJldmlldy5vcGVuZmlsZW1hbmFnZXI+ZGl2IGl7Zm9udC1zaXplOjIuNXJlbX0ucHJvZHVjdC1wYWdlICNwcm9kdWN0LWltYWdlcy1kcm9wem9uZS5kcm9wem9uZS1jb250YWluZXIgLmR6LXByZXZpZXcgaW1ne21hcmdpbjowfS5wcm9kdWN0LXBhZ2UgI3Byb2R1Y3QtaW1hZ2VzLWRyb3B6b25lLmRyb3B6b25lLWNvbnRhaW5lciAuZHotcHJldmlldzpob3ZlciAuZHotaG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDAuNyl9LnByb2R1Y3QtcGFnZSAjcHJvZHVjdC1pbWFnZXMtZHJvcHpvbmUuZHJvcHpvbmUtY29udGFpbmVyIC5kei1wcmV2aWV3OmhvdmVyIC5kei1ob3ZlciAuZHJhZy1pbmRpY2F0b3IsLnByb2R1Y3QtcGFnZSAjcHJvZHVjdC1pbWFnZXMtZHJvcHpvbmUuZHJvcHpvbmUtY29udGFpbmVyIC5kei1wcmV2aWV3OmhvdmVyIC5kei1ob3ZlciAubWQtY2hlY2tib3h7b3BhY2l0eToxfS5wcm9kdWN0LXBhZ2UgI3Byb2R1Y3QtaW1hZ2VzLWRyb3B6b25lLmRyb3B6b25lLWNvbnRhaW5lciAuZHotcHJldmlldy5zZWxlY3RlZCAubWQtY2hlY2tib3h7b3BhY2l0eToxfS5wcm9kdWN0LXBhZ2UgI3Byb2R1Y3QtaW1hZ2VzLWRyb3B6b25lLmRyb3B6b25lLWNvbnRhaW5lciAuZHotaG92ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOi0zcHg7bGVmdDotM3B4O3dpZHRoOmNhbGMoMTAwJSArIDZweCk7aGVpZ2h0OmNhbGMoMTAwJSArIDZweCk7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RyYW5zaXRpb246MC4yNXMgZWFzZS1vdXQ7cG9pbnRlci1ldmVudHM6bm9uZTt6LWluZGV4OjExfS5wcm9kdWN0LXBhZ2UgI3Byb2R1Y3QtaW1hZ2VzLWRyb3B6b25lLmRyb3B6b25lLWNvbnRhaW5lciAuZHotaG92ZXIgLmRyYWctaW5kaWNhdG9ye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowLjVyZW07bGVmdDowLjVyZW07Y29sb3I6I2ZmZmZmZjtvcGFjaXR5OjA7dHJhbnNpdGlvbjowLjI1cyBlYXNlLW91dH0ucHJvZHVjdC1wYWdlICNwcm9kdWN0LWltYWdlcy1kcm9wem9uZS5kcm9wem9uZS1jb250YWluZXIgLmR6LWhvdmVyIC5tZC1jaGVja2JveHtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MC41cmVtO2xlZnQ6MC41cmVtO29wYWNpdHk6MDt0cmFuc2l0aW9uOjAuMjVzIGVhc2Utb3V0fS5wcm9kdWN0LXBhZ2UgI3Byb2R1Y3QtaW1hZ2VzLWRyb3B6b25lLmRyb3B6b25lLWNvbnRhaW5lciAuZHotaG92ZXIgLm1kLWNoZWNrYm94IC5tZC1jaGVja2JveC1jb250cm9sOjpiZWZvcmV7YmFja2dyb3VuZDp0cmFuc3BhcmVudH0ucHJvZHVjdC1wYWdlICNwcm9kdWN0LWltYWdlcy1kcm9wem9uZS5kcm9wem9uZS1jb250YWluZXIgLmR6LWhvdmVyIC5tZC1jaGVja2JveCBpbnB1dDpjaGVja2VkKy5tZC1jaGVja2JveC1jb250cm9sOjpiZWZvcmV7YmFja2dyb3VuZDojMjViOWQ3fUBtZWRpYSAobWF4LXdpZHRoOiA1NDMuOThweCl7LnByb2R1Y3QtcGFnZSAjcHJvZHVjdC1pbWFnZXMtY29udGFpbmVye2ZsZXgtd3JhcDp3cmFwfX0ucHJvZHVjdC1wYWdlICNwcm9kdWN0LWltYWdlcy1jb250YWluZXIgI3Byb2R1Y3QtaW1hZ2VzLWRyb3B6b25lLmRyb3B6b25le2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2JvcmRlci1yYWRpdXM6NHB4O2ZsZXgtd3JhcDp3cmFwfUBtZWRpYSAobWF4LXdpZHRoOiA1NDMuOThweCl7LnByb2R1Y3QtcGFnZSAjcHJvZHVjdC1pbWFnZXMtY29udGFpbmVyICNwcm9kdWN0LWltYWdlcy1kcm9wem9uZS5kcm9wem9uZXtmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kO3dpZHRoOjEwMCV9LnByb2R1Y3QtcGFnZSAjcHJvZHVjdC1pbWFnZXMtY29udGFpbmVyICNwcm9kdWN0LWltYWdlcy1kcm9wem9uZS5kcm9wem9uZSAuZHotcHJldmlld3t3aWR0aDoxMDBweDtoZWlnaHQ6MTAwcHg7bWluLWhlaWdodDoxMDBweDttYXJnaW46MC41cmVtfS5wcm9kdWN0LXBhZ2UgI3Byb2R1Y3QtaW1hZ2VzLWNvbnRhaW5lciAjcHJvZHVjdC1pbWFnZXMtZHJvcHpvbmUuZHJvcHpvbmUgLmR6LXByZXZpZXcub3BlbmZpbGVtYW5hZ2Vye21pbi13aWR0aDoxMDBweH0ucHJvZHVjdC1wYWdlICNwcm9kdWN0LWltYWdlcy1jb250YWluZXIgI3Byb2R1Y3QtaW1hZ2VzLWRyb3B6b25lLmRyb3B6b25lIC5kei1wcmV2aWV3IGltZ3ttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LnByb2R1Y3QtcGFnZSAjcHJvZHVjdC1pbWFnZXMtY29udGFpbmVyICNwcm9kdWN0LWltYWdlcy1kcm9wem9uZS5kcm9wem9uZSAuZHotcHJldmlldyAuZHotaW1hZ2V7d2lkdGg6MTAwcHg7aGVpZ2h0OjEwMHB4fX1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL19hbGlnbi5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19iYWNrZ3JvdW5kLXZhcmlhbnQuc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9faG92ZXIuc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3V0aWxpdGllcy9fYmFja2dyb3VuZC5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL19ib3JkZXJzLnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2NsZWFyZml4LnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy91dGlsaXRpZXMvX2Rpc3BsYXkuc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYnJlYWtwb2ludHMuc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3V0aWxpdGllcy9fZW1iZWQuc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3V0aWxpdGllcy9fZmxleC5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL19mbG9hdC5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19mbG9hdC5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL19wb3NpdGlvbi5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3ZhcmlhYmxlcy5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL19zY3JlZW5yZWFkZXJzLnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3NjcmVlbi1yZWFkZXIuc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3V0aWxpdGllcy9fc2l6aW5nLnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy91dGlsaXRpZXMvX3NwYWNpbmcuc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3V0aWxpdGllcy9fdGV4dC5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL190ZXh0LXRydW5jYXRlLnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3RleHQtZW1waGFzaXMuc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fdGV4dC1oaWRlLnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3Zpc2liaWxpdHkuc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3V0aWxpdGllcy9fdmlzaWJpbGl0eS5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvZHJvcHpvbmUvRHJvcHpvbmUudnVlXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvcHJlc3Rha2l0L3Njc3MvX3ZhcmlhYmxlcy5zY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUVBLGdCQUFxQixrQ0FBbUMsQ0FBSSxXQUN2Qyw2QkFBOEIsQ0FBSSxjQUNsQyxnQ0FBaUMsQ0FBSSxjQUNyQyxnQ0FBaUMsQ0FBSSxtQkFDckMscUNBQXNDLENBQUksZ0JBQzFDLGtDQUFtQyxDQ0Z0RCxZQUNFLG1DQUFtQyxDQ1lyQyxzRkRQSSxtQ0FBZ0QsQ0NVbkQsY0RmQyxtQ0FBbUMsQ0NZckMsOEZEUEksbUNBQWdELENDVW5ELFlEZkMsbUNBQW1DLENDWXJDLHNGRFBJLG1DQUFnRCxDQ1VuRCxTRGZDLG1DQUFtQyxDQ1lyQywwRURQSSxtQ0FBZ0QsQ0NVbkQsWURmQyxtQ0FBbUMsQ0NZckMsc0ZEUEksbUNBQWdELENDVW5ELFdEZkMsbUNBQW1DLENDWXJDLGtGRFBJLG1DQUFnRCxDQ1VuRCxVRGZDLG1DQUFtQyxDQ1lyQyw4RURQSSxtQ0FBZ0QsQ0NVbkQsU0RmQyxtQ0FBbUMsQ0NZckMsMEVEUEksbUNBQWdELENDVW5ELFVDUkQsZ0NBQW1DLENBQ3BDLGdCQUdDLHVD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LHNGQWdEUSxtQkFBb0IsQ0FDcEIsZUFBZ0IsQ0FqRHhCLDRGQW9EVSxrQkFBbUIsQ0FwRDdCLDBGQXdEVSxXQUFZLENBeER0Qiw0RkEyRFksZ0JBQWlCLENBM0Q3QiwwRUFpRVEsUUFBUyxDQWpFakIsc0ZBc0VVLGdDQUFvQyxDQXRFOUMseU1BMEVZLFNBQVUsQ0ExRXRCLDRGQWlGVSxTQUFVLENBakZwQixvRUF1Rk0saUJBQWtCLENBQ2xCLFFBQVMsQ0FDVCxTQUFVLENBQ1Ysc0JBQXVCLENBQ3ZCLHVCQUF3QixDQUN4Qiw4QkFBa0MsQ0FDbEMseUJBQTBCLENBQzFCLG1CQUFvQixDQUNwQixVQUFXLENBL0ZqQixvRkFrR1EsaUJBQWtCLENBQ2xCLFVBQVcsQ0FDWCxXQUFZLENBQ1osYUFBYyxDQUNkLFNBQVUsQ0FDVix5QkFBMEIsQ0F2R2xDLGlGQTJHUSxpQkFBa0IsQ0FDbEIsYUFBYyxDQUNkLFdBQVksQ0FDWixTQUFVLENBQ1YseUJBQTBCLENBL0dsQyw4R0FrSFUsc0JBQXVCLENBbEhqQyw0SEFzSFUsa0JDM25CSSxDRDRuQkwsNkJBTVQsd0NBRUksY0FBZSxDQXFDbEIsQ0F2Q0QsMEVBTUksWUFBYSxDQUNiLHNCQUF1QixDQUN2Qiw2QkFBOEIsQ0FDOUIsaUJBQWtCLENBQ2xCLGNBQWUsQ0E0QmhCLDZCQXRDSCwwRUFhTSxjQUFlLENBQ2YsNEJBQTZCLENBQzdCLFVBQVcsQ0FmakIsc0ZBa0JRLFdBQVksQ0FDWixZQUFhLENBQ2IsZ0JBQWlCLENBQ2pCLGFBQWMsQ0FyQnRCLHNHQXdCVSxlQUFnQixDQXhCMUIsMEZBNEJVLGNBQWUsQ0FDZixlQUFnQixDQTdCMUIsZ0dBaUNVLFdBQVksQ0FDWixZQUFhLENBQ2RcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLy8gc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XFxuXFxuLmFsaWduLWJhc2VsaW5lICAgIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7IH0gLy8gQnJvd3NlciBkZWZhdWx0XFxuLmFsaWduLXRvcCAgICAgICAgIHsgdmVydGljYWwtYWxpZ246IHRvcCAhaW1wb3J0YW50OyB9XFxuLmFsaWduLW1pZGRsZSAgICAgIHsgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50OyB9XFxuLmFsaWduLWJvdHRvbSAgICAgIHsgdmVydGljYWwtYWxpZ246IGJvdHRvbSAhaW1wb3J0YW50OyB9XFxuLmFsaWduLXRleHQtYm90dG9tIHsgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tICFpbXBvcnRhbnQ7IH1cXG4uYWxpZ24tdGV4dC10b3AgICAgeyB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3AgIWltcG9ydGFudDsgfVxcblwiLFwiLy8gc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XFxuXFxuLy8gQ29udGV4dHVhbCBiYWNrZ3JvdW5kc1xcblxcbkBtaXhpbiBiZy12YXJpYW50KCRwYXJlbnQsICRjb2xvcikge1xcbiAgI3skcGFyZW50fSB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgYSN7JHBhcmVudH0sXFxuICBidXR0b24jeyRwYXJlbnR9IHtcXG4gICAgQGluY2x1ZGUgaG92ZXItZm9jdXMge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkY29sb3IsIDEwJSkgIWltcG9ydGFudDtcXG4gICAgfVxcbiAgfVxcbn1cXG5cXG5AbWl4aW4gYmctZ3JhZGllbnQtdmFyaWFudCgkcGFyZW50LCAkY29sb3IpIHtcXG4gICN7JHBhcmVudH0ge1xcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3IgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgbWl4KCRib2R5LWJnLCAkY29sb3IsIDE1JSksICRjb2xvcikgcmVwZWF0LXggIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXCIsXCIvLyBzdHlsZWxpbnQtZGlzYWJsZSBpbmRlbnRhdGlvblxcblxcbi8vIEhvdmVyIG1peGluIGFuZCBgJGVuYWJsZS1ob3Zlci1tZWRpYS1xdWVyeWAgYXJlIGRlcHJlY2F0ZWQuXFxuLy9cXG4vLyBPcmlnYWxseSBhZGRlZCBkdXJpbmcgb3VyIGFscGhhcyBhbmQgbWFpbnRhaW5lZCBkdXJpbmcgYmV0YXMsIHRoaXMgbWl4aW4gd2FzXFxuLy8gZGVzaWduZWQgdG8gcHJldmVudCBgOmhvdmVyYCBzdGlja2luZXNzIG9uIGlPU+KAlGFuIGlzc3VlIHdoZXJlIGhvdmVyIHN0eWxlc1xcbi8vIHdvdWxkIHBlcnNpc3QgYWZ0ZXIgaW5pdGlhbCB0b3VjaC5cXG4vL1xcbi8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB3ZSd2ZSBrZXB0IHRoZXNlIG1peGlucyBhbmQgdXBkYXRlZCB0aGVtIHRvXFxuLy8gYWx3YXlzIHJldHVybiB0aGVpciByZWd1bGFyIHBzdWVkby1jbGFzc2VzIGluc3RlYWQgb2YgYSBzaGltbWVkIG1lZGlhIHF1ZXJ5Llxcbi8vXFxuLy8gSXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMjUxOTVcXG5cXG5AbWl4aW4gaG92ZXIge1xcbiAgJjpob3ZlciB7IEBjb250ZW50OyB9XFxufVxcblxcbkBtaXhpbiBob3Zlci1mb2N1cyB7XFxuICAmOmhvdmVyLFxcbiAgJjpmb2N1cyB7XFxuICAgIEBjb250ZW50O1xcbiAgfVxcbn1cXG5cXG5AbWl4aW4gcGxhaW4taG92ZXItZm9jdXMge1xcbiAgJixcXG4gICY6aG92ZXIsXFxuICAmOmZvY3VzIHtcXG4gICAgQGNvbnRlbnQ7XFxuICB9XFxufVxcblxcbkBtaXhpbiBob3Zlci1mb2N1cy1hY3RpdmUge1xcbiAgJjpob3ZlcixcXG4gICY6Zm9jdXMsXFxuICAmOmFjdGl2ZSB7XFxuICAgIEBjb250ZW50O1xcbiAgfVxcbn1cXG5cIixcIi8vIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxcblxcbkBlYWNoICRjb2xvciwgJHZhbHVlIGluICR0aGVtZS1jb2xvcnMge1xcbiAgQGluY2x1ZGUgYmctdmFyaWFudChcXFwiLmJnLSN7JGNvbG9yfVxcXCIsICR2YWx1ZSk7XFxufVxcblxcbkBpZiAkZW5hYmxlLWdyYWRpZW50cyB7XFxuICBAZWFjaCAkY29sb3IsICR2YWx1ZSBpbiAkdGhlbWUtY29sb3JzIHtcXG4gICAgQGluY2x1ZGUgYmctZ3JhZGllbnQtdmFyaWFudChcXFwiLmJnLWdyYWRpZW50LSN7JGNvbG9yfVxcXCIsICR2YWx1ZSk7XFxuICB9XFxufVxcblxcbi5iZy13aGl0ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkd2hpdGUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLXRyYW5zcGFyZW50IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxufVxcblwiLFwiLy8gc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XFxuXFxuLy9cXG4vLyBCb3JkZXJcXG4vL1xcblxcbi5ib3JkZXIgICAgICAgICB7IGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkYm9yZGVyLWNvbG9yICFpbXBvcnRhbnQ7IH1cXG4uYm9yZGVyLXRvcCAgICAgeyBib3JkZXItdG9wOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRib3JkZXItY29sb3IgIWltcG9ydGFudDsgfVxcbi5ib3JkZXItcmlnaHQgICB7IGJvcmRlci1yaWdodDogJGJvcmRlci13aWR0aCBzb2xpZCAkYm9yZGVyLWNvbG9yICFpbXBvcnRhbnQ7IH1cXG4uYm9yZGVyLWJvdHRvbSAgeyBib3JkZXItYm90dG9tOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRib3JkZXItY29sb3IgIWltcG9ydGFudDsgfVxcbi5ib3JkZXItbGVmdCAgICB7IGJvcmRlci1sZWZ0OiAkYm9yZGVyLXdpZHRoIHNvbGlkICRib3JkZXItY29sb3IgIWltcG9ydGFudDsgfVxcblxcbi5ib3JkZXItMCAgICAgICAgeyBib3JkZXI6IDAgIWltcG9ydGFudDsgfVxcbi5ib3JkZXItdG9wLTAgICAgeyBib3JkZXItdG9wOiAwICFpbXBvcnRhbnQ7IH1cXG4uYm9yZGVyLXJpZ2h0LTAgIHsgYm9yZGVyLXJpZ2h0OiAwICFpbXBvcnRhbnQ7IH1cXG4uYm9yZGVyLWJvdHRvbS0wIHsgYm9yZGVyLWJvdHRvbTogMCAhaW1wb3J0YW50OyB9XFxuLmJvcmRlci1sZWZ0LTAgICB7IGJvcmRlci1sZWZ0OiAwICFpbXBvcnRhbnQ7IH1cXG5cXG5AZWFjaCAkY29sb3IsICR2YWx1ZSBpbiAkdGhlbWUtY29sb3JzIHtcXG4gIC5ib3JkZXItI3skY29sb3J9IHtcXG4gICAgYm9yZGVyLWNvbG9yOiAkdmFsdWUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuLmJvcmRlci13aGl0ZSB7XFxuICBib3JkZXItY29sb3I6ICR3aGl0ZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4vL1xcbi8vIEJvcmRlci1yYWRpdXNcXG4vL1xcblxcbi5yb3VuZGVkIHtcXG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzICFpbXBvcnRhbnQ7XFxufVxcbi5yb3VuZGVkLXRvcCB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAhaW1wb3J0YW50O1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzICFpbXBvcnRhbnQ7XFxufVxcbi5yb3VuZGVkLXJpZ2h0IHtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAhaW1wb3J0YW50O1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzICFpbXBvcnRhbnQ7XFxufVxcbi5yb3VuZGVkLWJvdHRvbSB7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgIWltcG9ydGFudDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzICFpbXBvcnRhbnQ7XFxufVxcbi5yb3VuZGVkLWxlZnQge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgIWltcG9ydGFudDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yb3VuZGVkLWNpcmNsZSB7XFxuICBib3JkZXItcmFkaXVzOiA1MCUgIWltcG9ydGFudDtcXG59XFxuXFxuLnJvdW5kZWQtMCB7XFxuICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XFxufVxcblwiLFwiQG1peGluIGNsZWFyZml4KCkge1xcbiAgJjo6YWZ0ZXIge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgY2xlYXI6IGJvdGg7XFxuICAgIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgfVxcbn1cXG5cIixcIi8vIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxcblxcbi8vXFxuLy8gVXRpbGl0aWVzIGZvciBjb21tb24gYGRpc3BsYXlgIHZhbHVlc1xcbi8vXFxuXFxuQGVhY2ggJGJyZWFrcG9pbnQgaW4gbWFwLWtleXMoJGdyaWQtYnJlYWtwb2ludHMpIHtcXG4gIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtdXAoJGJyZWFrcG9pbnQpIHtcXG4gICAgJGluZml4OiBicmVha3BvaW50LWluZml4KCRicmVha3BvaW50LCAkZ3JpZC1icmVha3BvaW50cyk7XFxuXFxuICAgIC5kI3skaW5maXh9LW5vbmUgICAgICAgICB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxcbiAgICAuZCN7JGluZml4fS1pbmxpbmUgICAgICAgeyBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsgfVxcbiAgICAuZCN7JGluZml4fS1pbmxpbmUtYmxvY2sgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsgfVxcbiAgICAuZCN7JGluZml4fS1ibG9jayAgICAgICAgeyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9XFxuICAgIC5kI3skaW5maXh9LXRhYmxlICAgICAgICB7IGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7IH1cXG4gICAgLmQjeyRpbmZpeH0tdGFibGUtcm93ICAgIHsgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH1cXG4gICAgLmQjeyRpbmZpeH0tdGFibGUtY2VsbCAgIHsgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OyB9XFxuICAgIC5kI3skaW5maXh9LWZsZXggICAgICAgICB7IGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsgfVxcbiAgICAuZCN7JGluZml4fS1pbmxpbmUtZmxleCAgeyBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50OyB9XFxuICB9XFxufVxcblxcblxcbi8vXFxuLy8gVXRpbGl0aWVzIGZvciB0b2dnbGluZyBgZGlzcGxheWAgaW4gcHJpbnRcXG4vL1xcblxcbkBtZWRpYSBwcmludCB7XFxuICAuZC1wcmludC1ub25lICAgICAgICAgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH1cXG4gIC5kLXByaW50LWlubGluZSAgICAgICB7IGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50OyB9XFxuICAuZC1wcmludC1pbmxpbmUtYmxvY2sgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsgfVxcbiAgLmQtcHJpbnQtYmxvY2sgICAgICAgIHsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgfVxcbiAgLmQtcHJpbnQtdGFibGUgICAgICAgIHsgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDsgfVxcbiAgLmQtcHJpbnQtdGFibGUtcm93ICAgIHsgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH1cXG4gIC5kLXByaW50LXRhYmxlLWNlbGwgICB7IGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsgfVxcbiAgLmQtcHJpbnQtZmxleCAgICAgICAgIHsgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OyB9XFxuICAuZC1wcmludC1pbmxpbmUtZmxleCAgeyBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50OyB9XFxufVxcblwiLFwiLy8gQnJlYWtwb2ludCB2aWV3cG9ydCBzaXplcyBhbmQgbWVkaWEgcXVlcmllcy5cXG4vL1xcbi8vIEJyZWFrcG9pbnRzIGFyZSBkZWZpbmVkIGFzIGEgbWFwIG9mIChuYW1lOiBtaW5pbXVtIHdpZHRoKSwgb3JkZXIgZnJvbSBzbWFsbCB0byBsYXJnZTpcXG4vL1xcbi8vICAgICh4czogMCwgc206IDU3NnB4LCBtZDogNzY4cHgsIGxnOiA5OTJweCwgeGw6IDEyMDBweClcXG4vL1xcbi8vIFRoZSBtYXAgZGVmaW5lZCBpbiB0aGUgYCRncmlkLWJyZWFrcG9pbnRzYCBnbG9iYWwgdmFyaWFibGUgaXMgdXNlZCBhcyB0aGUgYCRicmVha3BvaW50c2AgYXJndW1lbnQgYnkgZGVmYXVsdC5cXG5cXG4vLyBOYW1lIG9mIHRoZSBuZXh0IGJyZWFrcG9pbnQsIG9yIG51bGwgZm9yIHRoZSBsYXN0IGJyZWFrcG9pbnQuXFxuLy9cXG4vLyAgICA+PiBicmVha3BvaW50LW5leHQoc20pXFxuLy8gICAgbWRcXG4vLyAgICA+PiBicmVha3BvaW50LW5leHQoc20sICh4czogMCwgc206IDU3NnB4LCBtZDogNzY4cHgsIGxnOiA5OTJweCwgeGw6IDEyMDBweCkpXFxuLy8gICAgbWRcXG4vLyAgICA+PiBicmVha3BvaW50LW5leHQoc20sICRicmVha3BvaW50LW5hbWVzOiAoeHMgc20gbWQgbGcgeGwpKVxcbi8vICAgIG1kXFxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtbmV4dCgkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cywgJGJyZWFrcG9pbnQtbmFtZXM6IG1hcC1rZXlzKCRicmVha3BvaW50cykpIHtcXG4gICRuOiBpbmRleCgkYnJlYWtwb2ludC1uYW1lcywgJG5hbWUpO1xcbiAgQHJldHVybiBpZigkbiA8IGxlbmd0aCgkYnJlYWtwb2ludC1uYW1lcyksIG50aCgkYnJlYWtwb2ludC1uYW1lcywgJG4gKyAxKSwgbnVsbCk7XFxufVxcblxcbi8vIE1pbmltdW0gYnJlYWtwb2ludCB3aWR0aC4gTnVsbCBmb3IgdGhlIHNtYWxsZXN0IChmaXJzdCkgYnJlYWtwb2ludC5cXG4vL1xcbi8vICAgID4+IGJyZWFrcG9pbnQtbWluKHNtLCAoeHM6IDAsIHNtOiA1NzZweCwgbWQ6IDc2OHB4LCBsZzogOTkycHgsIHhsOiAxMjAwcHgpKVxcbi8vICAgIDU3NnB4XFxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtbWluKCRuYW1lLCAkYnJlYWtwb2ludHM6ICRncmlkLWJyZWFrcG9pbnRzKSB7XFxuICAkbWluOiBtYXAtZ2V0KCRicmVha3BvaW50cywgJG5hbWUpO1xcbiAgQHJldHVybiBpZigkbWluICE9IDAsICRtaW4sIG51bGwpO1xcbn1cXG5cXG4vLyBNYXhpbXVtIGJyZWFrcG9pbnQgd2lkdGguIE51bGwgZm9yIHRoZSBsYXJnZXN0IChsYXN0KSBicmVha3BvaW50Llxcbi8vIFRoZSBtYXhpbXVtIHZhbHVlIGlzIGNhbGN1bGF0ZWQgYXMgdGhlIG1pbmltdW0gb2YgdGhlIG5leHQgb25lIGxlc3MgMC4wMnB4XFxuLy8gdG8gd29yayBhcm91bmQgdGhlIGxpbWl0YXRpb25zIG9mIGBtaW4tYCBhbmQgYG1heC1gIHByZWZpeGVzIGFuZCB2aWV3cG9ydHMgd2l0aCBmcmFjdGlvbmFsIHdpZHRocy5cXG4vLyBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL21lZGlhcXVlcmllcy00LyNtcS1taW4tbWF4XFxuLy8gVXNlcyAwLjAycHggcmF0aGVyIHRoYW4gMC4wMXB4IHRvIHdvcmsgYXJvdW5kIGEgY3VycmVudCByb3VuZGluZyBidWcgaW4gU2FmYXJpLlxcbi8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc4MjYxXFxuLy9cXG4vLyAgICA+PiBicmVha3BvaW50LW1heChzbSwgKHhzOiAwLCBzbTogNTc2cHgsIG1kOiA3NjhweCwgbGc6IDk5MnB4LCB4bDogMTIwMHB4KSlcXG4vLyAgICA3NjcuOThweFxcbkBmdW5jdGlvbiBicmVha3BvaW50LW1heCgkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xcbiAgJG5leHQ6IGJyZWFrcG9pbnQtbmV4dCgkbmFtZSwgJGJyZWFrcG9pbnRzKTtcXG4gIEByZXR1cm4gaWYoJG5leHQsIGJyZWFrcG9pbnQtbWluKCRuZXh0LCAkYnJlYWtwb2ludHMpIC0gLjAycHgsIG51bGwpO1xcbn1cXG5cXG4vLyBSZXR1cm5zIGEgYmxhbmsgc3RyaW5nIGlmIHNtYWxsZXN0IGJyZWFrcG9pbnQsIG90aGVyd2lzZSByZXR1cm5zIHRoZSBuYW1lIHdpdGggYSBkYXNoIGluZnJvbnQuXFxuLy8gVXNlZnVsIGZvciBtYWtpbmcgcmVzcG9uc2l2ZSB1dGlsaXRpZXMuXFxuLy9cXG4vLyAgICA+PiBicmVha3BvaW50LWluZml4KHhzLCAoeHM6IDAsIHNtOiA1NzZweCwgbWQ6IDc2OHB4LCBsZzogOTkycHgsIHhsOiAxMjAwcHgpKVxcbi8vICAgIFxcXCJcXFwiICAoUmV0dXJucyBhIGJsYW5rIHN0cmluZylcXG4vLyAgICA+PiBicmVha3BvaW50LWluZml4KHNtLCAoeHM6IDAsIHNtOiA1NzZweCwgbWQ6IDc2OHB4LCBsZzogOTkycHgsIHhsOiAxMjAwcHgpKVxcbi8vICAgIFxcXCItc21cXFwiXFxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtaW5maXgoJG5hbWUsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcXG4gIEByZXR1cm4gaWYoYnJlYWtwb2ludC1taW4oJG5hbWUsICRicmVha3BvaW50cykgPT0gbnVsbCwgXFxcIlxcXCIsIFxcXCItI3skbmFtZX1cXFwiKTtcXG59XFxuXFxuLy8gTWVkaWEgb2YgYXQgbGVhc3QgdGhlIG1pbmltdW0gYnJlYWtwb2ludCB3aWR0aC4gTm8gcXVlcnkgZm9yIHRoZSBzbWFsbGVzdCBicmVha3BvaW50Llxcbi8vIE1ha2VzIHRoZSBAY29udGVudCBhcHBseSB0byB0aGUgZ2l2ZW4gYnJlYWtwb2ludCBhbmQgd2lkZXIuXFxuQG1peGluIG1lZGlhLWJyZWFrcG9pbnQtdXAoJG5hbWUsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcXG4gICRtaW46IGJyZWFrcG9pbnQtbWluKCRuYW1lLCAkYnJlYWtwb2ludHMpO1xcbiAgQGlmICRtaW4ge1xcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJG1pbikge1xcbiAgICAgIEBjb250ZW50O1xcbiAgICB9XFxuICB9IEBlbHNlIHtcXG4gICAgQGNvbnRlbnQ7XFxuICB9XFxufVxcblxcbi8vIE1lZGlhIG9mIGF0IG1vc3QgdGhlIG1heGltdW0gYnJlYWtwb2ludCB3aWR0aC4gTm8gcXVlcnkgZm9yIHRoZSBsYXJnZXN0IGJyZWFrcG9pbnQuXFxuLy8gTWFrZXMgdGhlIEBjb250ZW50IGFwcGx5IHRvIHRoZSBnaXZlbiBicmVha3BvaW50IGFuZCBuYXJyb3dlci5cXG5AbWl4aW4gbWVkaWEtYnJlYWtwb2ludC1kb3duKCRuYW1lLCAkYnJlYWtwb2ludHM6ICRncmlkLWJyZWFrcG9pbnRzKSB7XFxuICAkbWF4OiBicmVha3BvaW50LW1heCgkbmFtZSwgJGJyZWFrcG9pbnRzKTtcXG4gIEBpZiAkbWF4IHtcXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRtYXgpIHtcXG4gICAgICBAY29udGVudDtcXG4gICAgfVxcbiAgfSBAZWxzZSB7XFxuICAgIEBjb250ZW50O1xcbiAgfVxcbn1cXG5cXG4vLyBNZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIGJyZWFrcG9pbnQgd2lkdGhzLlxcbi8vIE1ha2VzIHRoZSBAY29udGVudCBhcHBseSBiZXR3ZWVuIHRoZSBtaW4gYW5kIG1heCBicmVha3BvaW50c1xcbkBtaXhpbiBtZWRpYS1icmVha3BvaW50LWJldHdlZW4oJGxvd2VyLCAkdXBwZXIsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcXG4gICRtaW46IGJyZWFrcG9pbnQtbWluKCRsb3dlciwgJGJyZWFrcG9pbnRzKTtcXG4gICRtYXg6IGJyZWFrcG9pbnQtbWF4KCR1cHBlciwgJGJyZWFrcG9pbnRzKTtcXG5cXG4gIEBpZiAkbWluICE9IG51bGwgYW5kICRtYXggIT0gbnVsbCB7XFxuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xcbiAgICAgIEBjb250ZW50O1xcbiAgICB9XFxuICB9IEBlbHNlIGlmICRtYXggPT0gbnVsbCB7XFxuICAgIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtdXAoJGxvd2VyLCAkYnJlYWtwb2ludHMpIHtcXG4gICAgICBAY29udGVudDtcXG4gICAgfVxcbiAgfSBAZWxzZSBpZiAkbWluID09IG51bGwge1xcbiAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LWRvd24oJHVwcGVyLCAkYnJlYWtwb2ludHMpIHtcXG4gICAgICBAY29udGVudDtcXG4gICAgfVxcbiAgfVxcbn1cXG5cXG4vLyBNZWRpYSBiZXR3ZWVuIHRoZSBicmVha3BvaW50J3MgbWluaW11bSBhbmQgbWF4aW11bSB3aWR0aHMuXFxuLy8gTm8gbWluaW11bSBmb3IgdGhlIHNtYWxsZXN0IGJyZWFrcG9pbnQsIGFuZCBubyBtYXhpbXVtIGZvciB0aGUgbGFyZ2VzdCBvbmUuXFxuLy8gTWFrZXMgdGhlIEBjb250ZW50IGFwcGx5IG9ubHkgdG8gdGhlIGdpdmVuIGJyZWFrcG9pbnQsIG5vdCB2aWV3cG9ydHMgYW55IHdpZGVyIG9yIG5hcnJvd2VyLlxcbkBtaXhpbiBtZWRpYS1icmVha3BvaW50LW9ubHkoJG5hbWUsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcXG4gICRtaW46IGJyZWFrcG9pbnQtbWluKCRuYW1lLCAkYnJlYWtwb2ludHMpO1xcbiAgJG1heDogYnJlYWtwb2ludC1tYXgoJG5hbWUsICRicmVha3BvaW50cyk7XFxuXFxuICBAaWYgJG1pbiAhPSBudWxsIGFuZCAkbWF4ICE9IG51bGwge1xcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcXG4gICAgICBAY29udGVudDtcXG4gICAgfVxcbiAgfSBAZWxzZSBpZiAkbWF4ID09IG51bGwge1xcbiAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCRuYW1lLCAkYnJlYWtwb2ludHMpIHtcXG4gICAgICBAY29udGVudDtcXG4gICAgfVxcbiAgfSBAZWxzZSBpZiAkbWluID09IG51bGwge1xcbiAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LWRvd24oJG5hbWUsICRicmVha3BvaW50cykge1xcbiAgICAgIEBjb250ZW50O1xcbiAgICB9XFxuICB9XFxufVxcblwiLFwiLy8gQ3JlZGl0OiBOaWNvbGFzIEdhbGxhZ2hlciBhbmQgU1VJVCBDU1MuXFxuXFxuLmVtYmVkLXJlc3BvbnNpdmUge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcblxcbiAgJjo6YmVmb3JlIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgfVxcblxcbiAgLmVtYmVkLXJlc3BvbnNpdmUtaXRlbSxcXG4gIGlmcmFtZSxcXG4gIGVtYmVkLFxcbiAgb2JqZWN0LFxcbiAgdmlkZW8ge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHRvcDogMDtcXG4gICAgYm90dG9tOiAwO1xcbiAgICBsZWZ0OiAwO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICBib3JkZXI6IDA7XFxuICB9XFxufVxcblxcbi5lbWJlZC1yZXNwb25zaXZlLTIxYnk5IHtcXG4gICY6OmJlZm9yZSB7XFxuICAgIHBhZGRpbmctdG9wOiBwZXJjZW50YWdlKDkgLyAyMSk7XFxuICB9XFxufVxcblxcbi5lbWJlZC1yZXNwb25zaXZlLTE2Ynk5IHtcXG4gICY6OmJlZm9yZSB7XFxuICAgIHBhZGRpbmctdG9wOiBwZXJjZW50YWdlKDkgLyAxNik7XFxuICB9XFxufVxcblxcbi5lbWJlZC1yZXNwb25zaXZlLTRieTMge1xcbiAgJjo6YmVmb3JlIHtcXG4gICAgcGFkZGluZy10b3A6IHBlcmNlbnRhZ2UoMyAvIDQpO1xcbiAgfVxcbn1cXG5cXG4uZW1iZWQtcmVzcG9uc2l2ZS0xYnkxIHtcXG4gICY6OmJlZm9yZSB7XFxuICAgIHBhZGRpbmctdG9wOiBwZXJjZW50YWdlKDEgLyAxKTtcXG4gIH1cXG59XFxuXCIsXCIvLyBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnRcXG5cXG4vLyBGbGV4IHZhcmlhdGlvblxcbi8vXFxuLy8gQ3VzdG9tIHN0eWxlcyBmb3IgYWRkaXRpb25hbCBmbGV4IGFsaWdubWVudCBvcHRpb25zLlxcblxcbkBlYWNoICRicmVha3BvaW50IGluIG1hcC1rZXlzKCRncmlkLWJyZWFrcG9pbnRzKSB7XFxuICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCRicmVha3BvaW50KSB7XFxuICAgICRpbmZpeDogYnJlYWtwb2ludC1pbmZpeCgkYnJlYWtwb2ludCwgJGdyaWQtYnJlYWtwb2ludHMpO1xcblxcbiAgICAuZmxleCN7JGluZml4fS1yb3cgICAgICAgICAgICB7IGZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDsgfVxcbiAgICAuZmxleCN7JGluZml4fS1jb2x1bW4gICAgICAgICB7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDsgfVxcbiAgICAuZmxleCN7JGluZml4fS1yb3ctcmV2ZXJzZSAgICB7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZSAhaW1wb3J0YW50OyB9XFxuICAgIC5mbGV4I3skaW5maXh9LWNvbHVtbi1yZXZlcnNlIHsgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnQ7IH1cXG5cXG4gICAgLmZsZXgjeyRpbmZpeH0td3JhcCAgICAgICAgIHsgZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7IH1cXG4gICAgLmZsZXgjeyRpbmZpeH0tbm93cmFwICAgICAgIHsgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDsgfVxcbiAgICAuZmxleCN7JGluZml4fS13cmFwLXJldmVyc2UgeyBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50OyB9XFxuXFxuICAgIC5qdXN0aWZ5LWNvbnRlbnQjeyRpbmZpeH0tc3RhcnQgICB7IGp1c3RpZnktY29udGVudDogZmxleC1zdGFydCAhaW1wb3J0YW50OyB9XFxuICAgIC5qdXN0aWZ5LWNvbnRlbnQjeyRpbmZpeH0tZW5kICAgICB7IGp1c3RpZnktY29udGVudDogZmxleC1lbmQgIWltcG9ydGFudDsgfVxcbiAgICAuanVzdGlmeS1jb250ZW50I3skaW5maXh9LWNlbnRlciAgeyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50OyB9XFxuICAgIC5qdXN0aWZ5LWNvbnRlbnQjeyRpbmZpeH0tYmV0d2VlbiB7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50OyB9XFxuICAgIC5qdXN0aWZ5LWNvbnRlbnQjeyRpbmZpeH0tYXJvdW5kICB7IGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kICFpbXBvcnRhbnQ7IH1cXG5cXG4gICAgLmFsaWduLWl0ZW1zI3skaW5maXh9LXN0YXJ0ICAgIHsgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQgIWltcG9ydGFudDsgfVxcbiAgICAuYWxpZ24taXRlbXMjeyRpbmZpeH0tZW5kICAgICAgeyBhbGlnbi1pdGVtczogZmxleC1lbmQgIWltcG9ydGFudDsgfVxcbiAgICAuYWxpZ24taXRlbXMjeyRpbmZpeH0tY2VudGVyICAgeyBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7IH1cXG4gICAgLmFsaWduLWl0ZW1zI3skaW5maXh9LWJhc2VsaW5lIHsgYWxpZ24taXRlbXM6IGJhc2VsaW5lICFpbXBvcnRhbnQ7IH1cXG4gICAgLmFsaWduLWl0ZW1zI3skaW5maXh9LXN0cmV0Y2ggIHsgYWxpZ24taXRlbXM6IHN0cmV0Y2ggIWltcG9ydGFudDsgfVxcblxcbiAgICAuYWxpZ24tY29udGVudCN7JGluZml4fS1zdGFydCAgIHsgYWxpZ24tY29udGVudDogZmxleC1zdGFydCAhaW1wb3J0YW50OyB9XFxuICAgIC5hbGlnbi1jb250ZW50I3skaW5maXh9LWVuZCAgICAgeyBhbGlnbi1jb250ZW50OiBmbGV4LWVuZCAhaW1wb3J0YW50OyB9XFxuICAgIC5hbGlnbi1jb250ZW50I3skaW5maXh9LWNlbnRlciAgeyBhbGlnbi1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDsgfVxcbiAgICAuYWxpZ24tY29udGVudCN7JGluZml4fS1iZXR3ZWVuIHsgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50OyB9XFxuICAgIC5hbGlnbi1jb250ZW50I3skaW5maXh9LWFyb3VuZCAgeyBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQgIWltcG9ydGFudDsgfVxcbiAgICAuYWxpZ24tY29udGVudCN7JGluZml4fS1zdHJldGNoIHsgYWxpZ24tY29udGVudDogc3RyZXRjaCAhaW1wb3J0YW50OyB9XFxuXFxuICAgIC5hbGlnbi1zZWxmI3skaW5maXh9LWF1dG8gICAgIHsgYWxpZ24tc2VsZjogYXV0byAhaW1wb3J0YW50OyB9XFxuICAgIC5hbGlnbi1zZWxmI3skaW5maXh9LXN0YXJ0ICAgIHsgYWxpZ24tc2VsZjogZmxleC1zdGFydCAhaW1wb3J0YW50OyB9XFxuICAgIC5hbGlnbi1zZWxmI3skaW5maXh9LWVuZCAgICAgIHsgYWxpZ24tc2VsZjogZmxleC1lbmQgIWltcG9ydGFudDsgfVxcbiAgICAuYWxpZ24tc2VsZiN7JGluZml4fS1jZW50ZXIgICB7IGFsaWduLXNlbGY6IGNlbnRlciAhaW1wb3J0YW50OyB9XFxuICAgIC5hbGlnbi1zZWxmI3skaW5maXh9LWJhc2VsaW5lIHsgYWxpZ24tc2VsZjogYmFzZWxpbmUgIWltcG9ydGFudDsgfVxcbiAgICAuYWxpZ24tc2VsZiN7JGluZml4fS1zdHJldGNoICB7IGFsaWduLXNlbGY6IHN0cmV0Y2ggIWltcG9ydGFudDsgfVxcbiAgfVxcbn1cXG5cIixcIkBlYWNoICRicmVha3BvaW50IGluIG1hcC1rZXlzKCRncmlkLWJyZWFrcG9pbnRzKSB7XFxuICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCRicmVha3BvaW50KSB7XFxuICAgICRpbmZpeDogYnJlYWtwb2ludC1pbmZpeCgkYnJlYWtwb2ludCwgJGdyaWQtYnJlYWtwb2ludHMpO1xcblxcbiAgICAuZmxvYXQjeyRpbmZpeH0tbGVmdCAgeyBAaW5jbHVkZSBmbG9hdC1sZWZ0OyB9XFxuICAgIC5mbG9hdCN7JGluZml4fS1yaWdodCB7IEBpbmNsdWRlIGZsb2F0LXJpZ2h0OyB9XFxuICAgIC5mbG9hdCN7JGluZml4fS1ub25lICB7IEBpbmNsdWRlIGZsb2F0LW5vbmU7IH1cXG4gIH1cXG59XFxuXCIsXCIvLyBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnRcXG5cXG5AbWl4aW4gZmxvYXQtbGVmdCB7XFxuICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xcbn1cXG5AbWl4aW4gZmxvYXQtcmlnaHQge1xcbiAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XFxufVxcbkBtaXhpbiBmbG9hdC1ub25lIHtcXG4gIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XFxufVxcblwiLFwiLy8gc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XFxuXFxuLy8gQ29tbW9uIHZhbHVlc1xcblxcbi8vIFNhc3MgbGlzdCBub3QgaW4gdmFyaWFibGVzIHNpbmNlIGl0J3Mgbm90IGludGVuZGVkIGZvciBjdXN0b21pemF0aW9uLlxcbiRwb3NpdGlvbnM6IHN0YXRpYywgcmVsYXRpdmUsIGFic29sdXRlLCBmaXhlZCwgc3RpY2t5O1xcblxcbkBlYWNoICRwb3NpdGlvbiBpbiAkcG9zaXRpb25zIHtcXG4gIC5wb3NpdGlvbi0jeyRwb3NpdGlvbn0geyBwb3NpdGlvbjogJHBvc2l0aW9uICFpbXBvcnRhbnQ7IH1cXG59XFxuXFxuLy8gU2hvcnRoYW5kXFxuXFxuLmZpeGVkLXRvcCB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAkemluZGV4LWZpeGVkO1xcbn1cXG5cXG4uZml4ZWQtYm90dG9tIHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIHotaW5kZXg6ICR6aW5kZXgtZml4ZWQ7XFxufVxcblxcbi5zdGlja3ktdG9wIHtcXG4gIEBzdXBwb3J0cyAocG9zaXRpb246IHN0aWNreSkge1xcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xcbiAgICB0b3A6IDA7XFxuICAgIHotaW5kZXg6ICR6aW5kZXgtc3RpY2t5O1xcbiAgfVxcbn1cXG5cIixcIi8vIFZhcmlhYmxlc1xcbi8vXFxuLy8gVmFyaWFibGVzIHNob3VsZCBmb2xsb3cgdGhlIGAkY29tcG9uZW50LXN0YXRlLXByb3BlcnR5LXNpemVgIGZvcm11bGEgZm9yXFxuLy8gY29uc2lzdGVudCBuYW1pbmcuIEV4OiAkbmF2LWxpbmstZGlzYWJsZWQtY29sb3IgYW5kICRtb2RhbC1jb250ZW50LWJveC1zaGFkb3cteHMuXFxuXFxuXFxuLy9cXG4vLyBDb2xvciBzeXN0ZW1cXG4vL1xcblxcbi8vIHN0eWxlbGludC1kaXNhYmxlXFxuJHdoaXRlOiAgICAjZmZmICFkZWZhdWx0O1xcbiRncmF5LTEwMDogI2Y4ZjlmYSAhZGVmYXVsdDtcXG4kZ3JheS0yMDA6ICNlOWVjZWYgIWRlZmF1bHQ7XFxuJGdyYXktMzAwOiAjZGVlMmU2ICFkZWZhdWx0O1xcbiRncmF5LTQwMDogI2NlZDRkYSAhZGVmYXVsdDtcXG4kZ3JheS01MDA6ICNhZGI1YmQgIWRlZmF1bHQ7XFxuJGdyYXktNjAwOiAjNmM3NTdkICFkZWZhdWx0O1xcbiRncmF5LTcwMDogIzQ5NTA1NyAhZGVmYXVsdDtcXG4kZ3JheS04MDA6ICMzNDNhNDAgIWRlZmF1bHQ7XFxuJGdyYXktOTAwOiAjMjEyNTI5ICFkZWZhdWx0O1xcbiRibGFjazogICAgIzAwMCAhZGVmYXVsdDtcXG5cXG4kZ3JheXM6ICgpICFkZWZhdWx0O1xcbiRncmF5czogbWFwLW1lcmdlKChcXG4gIFxcXCIxMDBcXFwiOiAkZ3JheS0xMDAsXFxuICBcXFwiMjAwXFxcIjogJGdyYXktMjAwLFxcbiAgXFxcIjMwMFxcXCI6ICRncmF5LTMwMCxcXG4gIFxcXCI0MDBcXFwiOiAkZ3JheS00MDAsXFxuICBcXFwiNTAwXFxcIjogJGdyYXktNTAwLFxcbiAgXFxcIjYwMFxcXCI6ICRncmF5LTYwMCxcXG4gIFxcXCI3MDBcXFwiOiAkZ3JheS03MDAsXFxuICBcXFwiODAwXFxcIjogJGdyYXktODAwLFxcbiAgXFxcIjkwMFxcXCI6ICRncmF5LTkwMFxcbiksICRncmF5cyk7XFxuXFxuJGJsdWU6ICAgICMwMDdiZmYgIWRlZmF1bHQ7XFxuJGluZGlnbzogICM2NjEwZjIgIWRlZmF1bHQ7XFxuJHB1cnBsZTogICM2ZjQyYzEgIWRlZmF1bHQ7XFxuJHBpbms6ICAgICNlODNlOGMgIWRlZmF1bHQ7XFxuJHJlZDogICAgICNkYzM1NDUgIWRlZmF1bHQ7XFxuJG9yYW5nZTogICNmZDdlMTQgIWRlZmF1bHQ7XFxuJHllbGxvdzogICNmZmMxMDcgIWRlZmF1bHQ7XFxuJGdyZWVuOiAgICMyOGE3NDUgIWRlZmF1bHQ7XFxuJHRlYWw6ICAgICMyMGM5OTcgIWRlZmF1bHQ7XFxuJGN5YW46ICAgICMxN2EyYjggIWRlZmF1bHQ7XFxuXFxuJGNvbG9yczogKCkgIWRlZmF1bHQ7XFxuJGNvbG9yczogbWFwLW1lcmdlKChcXG4gIFxcXCJibHVlXFxcIjogICAgICAgJGJsdWUsXFxuICBcXFwiaW5kaWdvXFxcIjogICAgICRpbmRpZ28sXFxuICBcXFwicHVycGxlXFxcIjogICAgICRwdXJwbGUsXFxuICBcXFwicGlua1xcXCI6ICAgICAgICRwaW5rLFxcbiAgXFxcInJlZFxcXCI6ICAgICAgICAkcmVkLFxcbiAgXFxcIm9yYW5nZVxcXCI6ICAgICAkb3JhbmdlLFxcbiAgXFxcInllbGxvd1xcXCI6ICAgICAkeWVsbG93LFxcbiAgXFxcImdyZWVuXFxcIjogICAgICAkZ3JlZW4sXFxuICBcXFwidGVhbFxcXCI6ICAgICAgICR0ZWFsLFxcbiAgXFxcImN5YW5cXFwiOiAgICAgICAkY3lhbixcXG4gIFxcXCJ3aGl0ZVxcXCI6ICAgICAgJHdoaXRlLFxcbiAgXFxcImdyYXlcXFwiOiAgICAgICAkZ3JheS02MDAsXFxuICBcXFwiZ3JheS1kYXJrXFxcIjogICRncmF5LTgwMFxcbiksICRjb2xvcnMpO1xcblxcbiRwcmltYXJ5OiAgICAgICAkYmx1ZSAhZGVmYXVsdDtcXG4kc2Vjb25kYXJ5OiAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcbiRzdWNjZXNzOiAgICAgICAkZ3JlZW4gIWRlZmF1bHQ7XFxuJGluZm86ICAgICAgICAgICRjeWFuICFkZWZhdWx0O1xcbiR3YXJuaW5nOiAgICAgICAkeWVsbG93ICFkZWZhdWx0O1xcbiRkYW5nZXI6ICAgICAgICAkcmVkICFkZWZhdWx0O1xcbiRsaWdodDogICAgICAgICAkZ3JheS0xMDAgIWRlZmF1bHQ7XFxuJGRhcms6ICAgICAgICAgICRncmF5LTgwMCAhZGVmYXVsdDtcXG5cXG4kdGhlbWUtY29sb3JzOiAoKSAhZGVmYXVsdDtcXG4kdGhlbWUtY29sb3JzOiBtYXAtbWVyZ2UoKFxcbiAgXFxcInByaW1hcnlcXFwiOiAgICAkcHJpbWFyeSxcXG4gIFxcXCJzZWNvbmRhcnlcXFwiOiAgJHNlY29uZGFyeSxcXG4gIFxcXCJzdWNjZXNzXFxcIjogICAgJHN1Y2Nlc3MsXFxuICBcXFwiaW5mb1xcXCI6ICAgICAgICRpbmZvLFxcbiAgXFxcIndhcm5pbmdcXFwiOiAgICAkd2FybmluZyxcXG4gIFxcXCJkYW5nZXJcXFwiOiAgICAgJGRhbmdlcixcXG4gIFxcXCJsaWdodFxcXCI6ICAgICAgJGxpZ2h0LFxcbiAgXFxcImRhcmtcXFwiOiAgICAgICAkZGFya1xcbiksICR0aGVtZS1jb2xvcnMpO1xcbi8vIHN0eWxlbGludC1lbmFibGVcXG5cXG4vLyBTZXQgYSBzcGVjaWZpYyBqdW1wIHBvaW50IGZvciByZXF1ZXN0aW5nIGNvbG9yIGp1bXBzXFxuJHRoZW1lLWNvbG9yLWludGVydmFsOiAgICAgIDglICFkZWZhdWx0O1xcblxcbi8vIFRoZSB5aXEgbGlnaHRuZXNzIHZhbHVlIHRoYXQgZGV0ZXJtaW5lcyB3aGVuIHRoZSBsaWdodG5lc3Mgb2YgY29sb3IgY2hhbmdlcyBmcm9tIFxcXCJkYXJrXFxcIiB0byBcXFwibGlnaHRcXFwiLiBBY2NlcHRhYmxlIHZhbHVlcyBhcmUgYmV0d2VlbiAwIGFuZCAyNTUuXFxuJHlpcS1jb250cmFzdGVkLXRocmVzaG9sZDogMTUwICFkZWZhdWx0O1xcblxcbi8vIEN1c3RvbWl6ZSB0aGUgbGlnaHQgYW5kIGRhcmsgdGV4dCBjb2xvcnMgZm9yIHVzZSBpbiBvdXIgWUlRIGNvbG9yIGNvbnRyYXN0IGZ1bmN0aW9uLlxcbiR5aXEtdGV4dC1kYXJrOiAkZ3JheS05MDAgIWRlZmF1bHQ7XFxuJHlpcS10ZXh0LWxpZ2h0OiAkd2hpdGUgIWRlZmF1bHQ7XFxuXFxuLy8gT3B0aW9uc1xcbi8vXFxuLy8gUXVpY2tseSBtb2RpZnkgZ2xvYmFsIHN0eWxpbmcgYnkgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIG9wdGlvbmFsIGZlYXR1cmVzLlxcblxcbiRlbmFibGUtY2FyZXQ6ICAgICAgICAgICAgICB0cnVlICFkZWZhdWx0O1xcbiRlbmFibGUtcm91bmRlZDogICAgICAgICAgICB0cnVlICFkZWZhdWx0O1xcbiRlbmFibGUtc2hhZG93czogICAgICAgICAgICBmYWxzZSAhZGVmYXVsdDtcXG4kZW5hYmxlLWdyYWRpZW50czogICAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XFxuJGVuYWJsZS10cmFuc2l0aW9uczogICAgICAgIHRydWUgIWRlZmF1bHQ7XFxuJGVuYWJsZS1ob3Zlci1tZWRpYS1xdWVyeTogIGZhbHNlICFkZWZhdWx0OyAvLyBEZXByZWNhdGVkLCBubyBsb25nZXIgYWZmZWN0cyBhbnkgY29tcGlsZWQgQ1NTXFxuJGVuYWJsZS1ncmlkLWNsYXNzZXM6ICAgICAgIHRydWUgIWRlZmF1bHQ7XFxuJGVuYWJsZS1wcmludC1zdHlsZXM6ICAgICAgIHRydWUgIWRlZmF1bHQ7XFxuXFxuXFxuLy8gU3BhY2luZ1xcbi8vXFxuLy8gQ29udHJvbCB0aGUgZGVmYXVsdCBzdHlsaW5nIG9mIG1vc3QgQm9vdHN0cmFwIGVsZW1lbnRzIGJ5IG1vZGlmeWluZyB0aGVzZVxcbi8vIHZhcmlhYmxlcy4gTW9zdGx5IGZvY3VzZWQgb24gc3BhY2luZy5cXG4vLyBZb3UgY2FuIGFkZCBtb3JlIGVudHJpZXMgdG8gdGhlICRzcGFjZXJzIG1hcCwgc2hvdWxkIHlvdSBuZWVkIG1vcmUgdmFyaWF0aW9uLlxcblxcbi8vIHN0eWxlbGludC1kaXNhYmxlXFxuJHNwYWNlcjogMXJlbSAhZGVmYXVsdDtcXG4kc3BhY2VyczogKCkgIWRlZmF1bHQ7XFxuJHNwYWNlcnM6IG1hcC1tZXJnZSgoXFxuICAwOiAwLFxcbiAgMTogKCRzcGFjZXIgKiAuMjUpLFxcbiAgMjogKCRzcGFjZXIgKiAuNSksXFxuICAzOiAkc3BhY2VyLFxcbiAgNDogKCRzcGFjZXIgKiAxLjUpLFxcbiAgNTogKCRzcGFjZXIgKiAzKVxcbiksICRzcGFjZXJzKTtcXG5cXG4vLyBUaGlzIHZhcmlhYmxlIGFmZmVjdHMgdGhlIGAuaC0qYCBhbmQgYC53LSpgIGNsYXNzZXMuXFxuJHNpemVzOiAoKSAhZGVmYXVsdDtcXG4kc2l6ZXM6IG1hcC1tZXJnZSgoXFxuICAyNTogMjUlLFxcbiAgNTA6IDUwJSxcXG4gIDc1OiA3NSUsXFxuICAxMDA6IDEwMCVcXG4pLCAkc2l6ZXMpO1xcbi8vIHN0eWxlbGludC1lbmFibGVcXG5cXG4vLyBCb2R5XFxuLy9cXG4vLyBTZXR0aW5ncyBmb3IgdGhlIGA8Ym9keT5gIGVsZW1lbnQuXFxuXFxuJGJvZHktYmc6ICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kYm9keS1jb2xvcjogICAgICAgICAgICAgICAgJGdyYXktOTAwICFkZWZhdWx0O1xcblxcbi8vIExpbmtzXFxuLy9cXG4vLyBTdHlsZSBhbmNob3IgZWxlbWVudHMuXFxuXFxuJGxpbmstY29sb3I6ICAgICAgICAgICAgICAgIHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIikgIWRlZmF1bHQ7XFxuJGxpbmstZGVjb3JhdGlvbjogICAgICAgICAgIG5vbmUgIWRlZmF1bHQ7XFxuJGxpbmstaG92ZXItY29sb3I6ICAgICAgICAgIGRhcmtlbigkbGluay1jb2xvciwgMTUlKSAhZGVmYXVsdDtcXG4kbGluay1ob3Zlci1kZWNvcmF0aW9uOiAgICAgdW5kZXJsaW5lICFkZWZhdWx0O1xcblxcbi8vIFBhcmFncmFwaHNcXG4vL1xcbi8vIFN0eWxlIHAgZWxlbWVudC5cXG5cXG4kcGFyYWdyYXBoLW1hcmdpbi1ib3R0b206ICAgMXJlbSAhZGVmYXVsdDtcXG5cXG5cXG4vLyBHcmlkIGJyZWFrcG9pbnRzXFxuLy9cXG4vLyBEZWZpbmUgdGhlIG1pbmltdW0gZGltZW5zaW9ucyBhdCB3aGljaCB5b3VyIGxheW91dCB3aWxsIGNoYW5nZSxcXG4vLyBhZGFwdGluZyB0byBkaWZmZXJlbnQgc2NyZWVuIHNpemVzLCBmb3IgdXNlIGluIG1lZGlhIHF1ZXJpZXMuXFxuXFxuJGdyaWQtYnJlYWtwb2ludHM6IChcXG4gIHhzOiAwLFxcbiAgc206IDU3NnB4LFxcbiAgbWQ6IDc2OHB4LFxcbiAgbGc6IDk5MnB4LFxcbiAgeGw6IDEyMDBweFxcbikgIWRlZmF1bHQ7XFxuXFxuQGluY2x1ZGUgX2Fzc2VydC1hc2NlbmRpbmcoJGdyaWQtYnJlYWtwb2ludHMsIFxcXCIkZ3JpZC1icmVha3BvaW50c1xcXCIpO1xcbkBpbmNsdWRlIF9hc3NlcnQtc3RhcnRzLWF0LXplcm8oJGdyaWQtYnJlYWtwb2ludHMpO1xcblxcblxcbi8vIEdyaWQgY29udGFpbmVyc1xcbi8vXFxuLy8gRGVmaW5lIHRoZSBtYXhpbXVtIHdpZHRoIG9mIGAuY29udGFpbmVyYCBmb3IgZGlmZmVyZW50IHNjcmVlbiBzaXplcy5cXG5cXG4kY29udGFpbmVyLW1heC13aWR0aHM6IChcXG4gIHNtOiA1NDBweCxcXG4gIG1kOiA3MjBweCxcXG4gIGxnOiA5NjBweCxcXG4gIHhsOiAxMTQwcHhcXG4pICFkZWZhdWx0O1xcblxcbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRjb250YWluZXItbWF4LXdpZHRocywgXFxcIiRjb250YWluZXItbWF4LXdpZHRoc1xcXCIpO1xcblxcblxcbi8vIEdyaWQgY29sdW1uc1xcbi8vXFxuLy8gU2V0IHRoZSBudW1iZXIgb2YgY29sdW1ucyBhbmQgc3BlY2lmeSB0aGUgd2lkdGggb2YgdGhlIGd1dHRlcnMuXFxuXFxuJGdyaWQtY29sdW1uczogICAgICAgICAgICAgICAgMTIgIWRlZmF1bHQ7XFxuJGdyaWQtZ3V0dGVyLXdpZHRoOiAgICAgICAgICAgMzBweCAhZGVmYXVsdDtcXG5cXG4vLyBDb21wb25lbnRzXFxuLy9cXG4vLyBEZWZpbmUgY29tbW9uIHBhZGRpbmcgYW5kIGJvcmRlciByYWRpdXMgc2l6ZXMgYW5kIG1vcmUuXFxuXFxuJGxpbmUtaGVpZ2h0LWxnOiAgICAgICAgICAgICAgMS41ICFkZWZhdWx0O1xcbiRsaW5lLWhlaWdodC1zbTogICAgICAgICAgICAgIDEuNSAhZGVmYXVsdDtcXG5cXG4kYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgICAxcHggIWRlZmF1bHQ7XFxuJGJvcmRlci1jb2xvcjogICAgICAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcblxcbiRib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG4kYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICAgICAuM3JlbSAhZGVmYXVsdDtcXG4kYm9yZGVyLXJhZGl1cy1zbTogICAgICAgICAgICAuMnJlbSAhZGVmYXVsdDtcXG5cXG4kY29tcG9uZW50LWFjdGl2ZS1jb2xvcjogICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGNvbXBvbmVudC1hY3RpdmUtYmc6ICAgICAgICAgdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSAhZGVmYXVsdDtcXG5cXG4kY2FyZXQtd2lkdGg6ICAgICAgICAgICAgICAgICAuM2VtICFkZWZhdWx0O1xcblxcbiR0cmFuc2l0aW9uLWJhc2U6ICAgICAgICAgICAgIGFsbCAuMnMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XFxuJHRyYW5zaXRpb24tZmFkZTogICAgICAgICAgICAgb3BhY2l0eSAuMTVzIGxpbmVhciAhZGVmYXVsdDtcXG4kdHJhbnNpdGlvbi1jb2xsYXBzZTogICAgICAgICBoZWlnaHQgLjM1cyBlYXNlICFkZWZhdWx0O1xcblxcblxcbi8vIEZvbnRzXFxuLy9cXG4vLyBGb250LCBsaW5lLWhlaWdodCwgYW5kIGNvbG9yIGZvciBib2R5IHRleHQsIGhlYWRpbmdzLCBhbmQgbW9yZS5cXG5cXG4vLyBzdHlsZWxpbnQtZGlzYWJsZSB2YWx1ZS1rZXl3b3JkLWNhc2VcXG4kZm9udC1mYW1pbHktc2Fucy1zZXJpZjogICAgICAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFxcXCJTZWdvZSBVSVxcXCIsIFJvYm90bywgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgQXJpYWwsIHNhbnMtc2VyaWYsIFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsIFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsIFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiICFkZWZhdWx0O1xcbiRmb250LWZhbWlseS1tb25vc3BhY2U6ICAgICAgIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXFxcIkxpYmVyYXRpb24gTW9ub1xcXCIsIFxcXCJDb3VyaWVyIE5ld1xcXCIsIG1vbm9zcGFjZSAhZGVmYXVsdDtcXG4kZm9udC1mYW1pbHktYmFzZTogICAgICAgICAgICAkZm9udC1mYW1pbHktc2Fucy1zZXJpZiAhZGVmYXVsdDtcXG4vLyBzdHlsZWxpbnQtZW5hYmxlIHZhbHVlLWtleXdvcmQtY2FzZVxcblxcbiRmb250LXNpemUtYmFzZTogICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7IC8vIEFzc3VtZXMgdGhlIGJyb3dzZXIgZGVmYXVsdCwgdHlwaWNhbGx5IGAxNnB4YFxcbiRmb250LXNpemUtbGc6ICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAxLjI1KSAhZGVmYXVsdDtcXG4kZm9udC1zaXplLXNtOiAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogLjg3NSkgIWRlZmF1bHQ7XFxuXFxuJGZvbnQtd2VpZ2h0LWxpZ2h0OiAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbiRmb250LXdlaWdodC1ub3JtYWw6ICAgICAgICAgIDQwMCAhZGVmYXVsdDtcXG4kZm9udC13ZWlnaHQtYm9sZDogICAgICAgICAgICA3MDAgIWRlZmF1bHQ7XFxuXFxuJGZvbnQtd2VpZ2h0LWJhc2U6ICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LW5vcm1hbCAhZGVmYXVsdDtcXG4kbGluZS1oZWlnaHQtYmFzZTogICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XFxuXFxuJGgxLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMi41ICFkZWZhdWx0O1xcbiRoMi1mb250LXNpemU6ICAgICAgICAgICAgICAgICRmb250LXNpemUtYmFzZSAqIDIgIWRlZmF1bHQ7XFxuJGgzLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMS43NSAhZGVmYXVsdDtcXG4kaDQtZm9udC1zaXplOiAgICAgICAgICAgICAgICAkZm9udC1zaXplLWJhc2UgKiAxLjUgIWRlZmF1bHQ7XFxuJGg1LWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMS4yNSAhZGVmYXVsdDtcXG4kaDYtZm9udC1zaXplOiAgICAgICAgICAgICAgICAkZm9udC1zaXplLWJhc2UgIWRlZmF1bHQ7XFxuXFxuJGhlYWRpbmdzLW1hcmdpbi1ib3R0b206ICAgICAgKCRzcGFjZXIgLyAyKSAhZGVmYXVsdDtcXG4kaGVhZGluZ3MtZm9udC1mYW1pbHk6ICAgICAgICBpbmhlcml0ICFkZWZhdWx0O1xcbiRoZWFkaW5ncy1mb250LXdlaWdodDogICAgICAgIDUwMCAhZGVmYXVsdDtcXG4kaGVhZGluZ3MtbGluZS1oZWlnaHQ6ICAgICAgICAxLjIgIWRlZmF1bHQ7XFxuJGhlYWRpbmdzLWNvbG9yOiAgICAgICAgICAgICAgaW5oZXJpdCAhZGVmYXVsdDtcXG5cXG4kZGlzcGxheTEtc2l6ZTogICAgICAgICAgICAgICA2cmVtICFkZWZhdWx0O1xcbiRkaXNwbGF5Mi1zaXplOiAgICAgICAgICAgICAgIDUuNXJlbSAhZGVmYXVsdDtcXG4kZGlzcGxheTMtc2l6ZTogICAgICAgICAgICAgICA0LjVyZW0gIWRlZmF1bHQ7XFxuJGRpc3BsYXk0LXNpemU6ICAgICAgICAgICAgICAgMy41cmVtICFkZWZhdWx0O1xcblxcbiRkaXNwbGF5MS13ZWlnaHQ6ICAgICAgICAgICAgIDMwMCAhZGVmYXVsdDtcXG4kZGlzcGxheTItd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuJGRpc3BsYXkzLXdlaWdodDogICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbiRkaXNwbGF5NC13ZWlnaHQ6ICAgICAgICAgICAgIDMwMCAhZGVmYXVsdDtcXG4kZGlzcGxheS1saW5lLWhlaWdodDogICAgICAgICAkaGVhZGluZ3MtbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuJGxlYWQtZm9udC1zaXplOiAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqIDEuMjUpICFkZWZhdWx0O1xcbiRsZWFkLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgIDMwMCAhZGVmYXVsdDtcXG5cXG4kc21hbGwtZm9udC1zaXplOiAgICAgICAgICAgICA4MCUgIWRlZmF1bHQ7XFxuXFxuJHRleHQtbXV0ZWQ6ICAgICAgICAgICAgICAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcblxcbiRibG9ja3F1b3RlLXNtYWxsLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG4kYmxvY2txdW90ZS1mb250LXNpemU6ICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogMS4yNSkgIWRlZmF1bHQ7XFxuXFxuJGhyLWJvcmRlci1jb2xvcjogICAgICAgICAgICAgcmdiYSgkYmxhY2ssIC4xKSAhZGVmYXVsdDtcXG4kaHItYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcblxcbiRtYXJrLXBhZGRpbmc6ICAgICAgICAgICAgICAgIC4yZW0gIWRlZmF1bHQ7XFxuXFxuJGR0LWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuXFxuJGtiZC1ib3gtc2hhZG93OiAgICAgICAgICAgICAgaW5zZXQgMCAtLjFyZW0gMCByZ2JhKCRibGFjaywgLjI1KSAhZGVmYXVsdDtcXG4kbmVzdGVkLWtiZC1mb250LXdlaWdodDogICAgICAkZm9udC13ZWlnaHQtYm9sZCAhZGVmYXVsdDtcXG5cXG4kbGlzdC1pbmxpbmUtcGFkZGluZzogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4kbWFyay1iZzogICAgICAgICAgICAgICAgICAgICAjZmNmOGUzICFkZWZhdWx0O1xcblxcbiRoci1tYXJnaW4teTogICAgICAgICAgICAgICAgICRzcGFjZXIgIWRlZmF1bHQ7XFxuXFxuXFxuLy8gVGFibGVzXFxuLy9cXG4vLyBDdXN0b21pemVzIHRoZSBgLnRhYmxlYCBjb21wb25lbnQgd2l0aCBiYXNpYyB2YWx1ZXMsIGVhY2ggdXNlZCBhY3Jvc3MgYWxsIHRhYmxlIHZhcmlhdGlvbnMuXFxuXFxuJHRhYmxlLWNlbGwtcGFkZGluZzogICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcbiR0YWJsZS1jZWxsLXBhZGRpbmctc206ICAgICAgIC4zcmVtICFkZWZhdWx0O1xcblxcbiR0YWJsZS1iZzogICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xcbiR0YWJsZS1hY2NlbnQtYmc6ICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMDUpICFkZWZhdWx0O1xcbiR0YWJsZS1ob3Zlci1iZzogICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMDc1KSAhZGVmYXVsdDtcXG4kdGFibGUtYWN0aXZlLWJnOiAgICAgICAgICAgICAkdGFibGUtaG92ZXItYmcgIWRlZmF1bHQ7XFxuXFxuJHRhYmxlLWJvcmRlci13aWR0aDogICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kdGFibGUtYm9yZGVyLWNvbG9yOiAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuXFxuJHRhYmxlLWhlYWQtYmc6ICAgICAgICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcbiR0YWJsZS1oZWFkLWNvbG9yOiAgICAgICAgICAgICRncmF5LTcwMCAhZGVmYXVsdDtcXG5cXG4kdGFibGUtZGFyay1iZzogICAgICAgICAgICAgICAkZ3JheS05MDAgIWRlZmF1bHQ7XFxuJHRhYmxlLWRhcmstYWNjZW50LWJnOiAgICAgICAgcmdiYSgkd2hpdGUsIC4wNSkgIWRlZmF1bHQ7XFxuJHRhYmxlLWRhcmstaG92ZXItYmc6ICAgICAgICAgcmdiYSgkd2hpdGUsIC4wNzUpICFkZWZhdWx0O1xcbiR0YWJsZS1kYXJrLWJvcmRlci1jb2xvcjogICAgIGxpZ2h0ZW4oJGdyYXktOTAwLCA3LjUlKSAhZGVmYXVsdDtcXG4kdGFibGUtZGFyay1jb2xvcjogICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcXG5cXG5cXG4vLyBCdXR0b25zICsgRm9ybXNcXG4vL1xcbi8vIFNoYXJlZCB2YXJpYWJsZXMgdGhhdCBhcmUgcmVhc3NpZ25lZCB0byBgJGlucHV0LWAgYW5kIGAkYnRuLWAgc3BlY2lmaWMgdmFyaWFibGVzLlxcblxcbiRpbnB1dC1idG4tcGFkZGluZy15OiAgICAgICAgIC4zNzVyZW0gIWRlZmF1bHQ7XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXg6ICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcbiRpbnB1dC1idG4tbGluZS1oZWlnaHQ6ICAgICAgICRsaW5lLWhlaWdodC1iYXNlICFkZWZhdWx0O1xcblxcbiRpbnB1dC1idG4tZm9jdXMtd2lkdGg6ICAgICAgIC4ycmVtICFkZWZhdWx0O1xcbiRpbnB1dC1idG4tZm9jdXMtY29sb3I6ICAgICAgIHJnYmEoJGNvbXBvbmVudC1hY3RpdmUtYmcsIC4yNSkgIWRlZmF1bHQ7XFxuJGlucHV0LWJ0bi1mb2N1cy1ib3gtc2hhZG93OiAgMCAwIDAgJGlucHV0LWJ0bi1mb2N1cy13aWR0aCAkaW5wdXQtYnRuLWZvY3VzLWNvbG9yICFkZWZhdWx0O1xcblxcbiRpbnB1dC1idG4tcGFkZGluZy15LXNtOiAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG4kaW5wdXQtYnRuLXBhZGRpbmcteC1zbTogICAgICAuNXJlbSAhZGVmYXVsdDtcXG4kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LXNtOiAgICAkbGluZS1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWJ0bi1wYWRkaW5nLXktbGc6ICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGc6ICAgICAgMXJlbSAhZGVmYXVsdDtcXG4kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnOiAgICAkbGluZS1oZWlnaHQtbGcgIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWJ0bi1ib3JkZXItd2lkdGg6ICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG5cXG5cXG4vLyBCdXR0b25zXFxuLy9cXG4vLyBGb3IgZWFjaCBvZiBCb290c3RyYXAncyBidXR0b25zLCBkZWZpbmUgdGV4dCwgYmFja2dyb3VuZCwgYW5kIGJvcmRlciBjb2xvci5cXG5cXG4kYnRuLXBhZGRpbmcteTogICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteSAhZGVmYXVsdDtcXG4kYnRuLXBhZGRpbmcteDogICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteCAhZGVmYXVsdDtcXG4kYnRuLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcblxcbiRidG4tcGFkZGluZy15LXNtOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LXNtICFkZWZhdWx0O1xcbiRidG4tcGFkZGluZy14LXNtOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LXNtICFkZWZhdWx0O1xcbiRidG4tbGluZS1oZWlnaHQtc206ICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuJGJ0bi1wYWRkaW5nLXktbGc6ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktbGcgIWRlZmF1bHQ7XFxuJGJ0bi1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGcgIWRlZmF1bHQ7XFxuJGJ0bi1saW5lLWhlaWdodC1sZzogICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4kYnRuLWJvcmRlci13aWR0aDogICAgICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG5cXG4kYnRuLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAkZm9udC13ZWlnaHQtbm9ybWFsICFkZWZhdWx0O1xcbiRidG4tYm94LXNoYWRvdzogICAgICAgICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgkd2hpdGUsIC4xNSksIDAgMXB4IDFweCByZ2JhKCRibGFjaywgLjA3NSkgIWRlZmF1bHQ7XFxuJGJ0bi1mb2N1cy13aWR0aDogICAgICAgICAgICAgJGlucHV0LWJ0bi1mb2N1cy13aWR0aCAhZGVmYXVsdDtcXG4kYnRuLWZvY3VzLWJveC1zaGFkb3c6ICAgICAgICAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuJGJ0bi1kaXNhYmxlZC1vcGFjaXR5OiAgICAgICAgLjY1ICFkZWZhdWx0O1xcbiRidG4tYWN0aXZlLWJveC1zaGFkb3c6ICAgICAgIGluc2V0IDAgM3B4IDVweCByZ2JhKCRibGFjaywgLjEyNSkgIWRlZmF1bHQ7XFxuXFxuJGJ0bi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcblxcbiRidG4tYmxvY2stc3BhY2luZy15OiAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcblxcbi8vIEFsbG93cyBmb3IgY3VzdG9taXppbmcgYnV0dG9uIHJhZGl1cyBpbmRlcGVuZGVudGx5IGZyb20gZ2xvYmFsIGJvcmRlciByYWRpdXNcXG4kYnRuLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kYnRuLWJvcmRlci1yYWRpdXMtbGc6ICAgICAgICAkYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcXG4kYnRuLWJvcmRlci1yYWRpdXMtc206ICAgICAgICAkYm9yZGVyLXJhZGl1cy1zbSAhZGVmYXVsdDtcXG5cXG4kYnRuLXRyYW5zaXRpb246ICAgICAgICAgICAgICBjb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XFxuXFxuXFxuLy8gRm9ybXNcXG5cXG4kaW5wdXQtcGFkZGluZy15OiAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXkgIWRlZmF1bHQ7XFxuJGlucHV0LXBhZGRpbmcteDogICAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14ICFkZWZhdWx0O1xcbiRpbnB1dC1saW5lLWhlaWdodDogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcblxcbiRpbnB1dC1wYWRkaW5nLXktc206ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1zbSAhZGVmYXVsdDtcXG4kaW5wdXQtcGFkZGluZy14LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtc20gIWRlZmF1bHQ7XFxuJGlucHV0LWxpbmUtaGVpZ2h0LXNtOiAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuJGlucHV0LXBhZGRpbmcteS1sZzogICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LWxnICFkZWZhdWx0O1xcbiRpbnB1dC1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1sZyAhZGVmYXVsdDtcXG4kaW5wdXQtbGluZS1oZWlnaHQtbGc6ICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRpbnB1dC1kaXNhYmxlZC1iZzogICAgICAgICAgICAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICAgICAgICRncmF5LTcwMCAhZGVmYXVsdDtcXG4kaW5wdXQtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgJGdyYXktNDAwICFkZWZhdWx0O1xcbiRpbnB1dC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kaW5wdXQtYm94LXNoYWRvdzogICAgICAgICAgICAgICAgICAgICAgaW5zZXQgMCAxcHggMXB4IHJnYmEoJGJsYWNrLCAuMDc1KSAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJGlucHV0LWJvcmRlci1yYWRpdXMtbGc6ICAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xcbiRpbnB1dC1ib3JkZXItcmFkaXVzLXNtOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1zbSAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtZm9jdXMtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJnICFkZWZhdWx0O1xcbiRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3I6ICAgICAgICAgICAgICBsaWdodGVuKCRjb21wb25lbnQtYWN0aXZlLWJnLCAyNSUpICFkZWZhdWx0O1xcbiRpbnB1dC1mb2N1cy1jb2xvcjogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuJGlucHV0LWZvY3VzLXdpZHRoOiAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tZm9jdXMtd2lkdGggIWRlZmF1bHQ7XFxuJGlucHV0LWZvY3VzLWJveC1zaGFkb3c6ICAgICAgICAgICAgICAgICRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdyAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtcGxhY2Vob2xkZXItY29sb3I6ICAgICAgICAgICAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcblxcbiRpbnB1dC1oZWlnaHQtYm9yZGVyOiAgICAgICAgICAgICAgICAgICAkaW5wdXQtYm9yZGVyLXdpZHRoICogMiAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtaGVpZ2h0LWlubmVyOiAgICAgICAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqICRpbnB1dC1idG4tbGluZS1oZWlnaHQpICsgKCRpbnB1dC1idG4tcGFkZGluZy15ICogMikgIWRlZmF1bHQ7XFxuJGlucHV0LWhlaWdodDogICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGMoI3skaW5wdXQtaGVpZ2h0LWlubmVyfSArICN7JGlucHV0LWhlaWdodC1ib3JkZXJ9KSAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtaGVpZ2h0LWlubmVyLXNtOiAgICAgICAgICAgICAgICAgKCRmb250LXNpemUtc20gKiAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LXNtKSArICgkaW5wdXQtYnRuLXBhZGRpbmcteS1zbSAqIDIpICFkZWZhdWx0O1xcbiRpbnB1dC1oZWlnaHQtc206ICAgICAgICAgICAgICAgICAgICAgICBjYWxjKCN7JGlucHV0LWhlaWdodC1pbm5lci1zbX0gKyAjeyRpbnB1dC1oZWlnaHQtYm9yZGVyfSkgIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWhlaWdodC1pbm5lci1sZzogICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWxnICogJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZykgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXktbGcgKiAyKSAhZGVmYXVsdDtcXG4kaW5wdXQtaGVpZ2h0LWxnOiAgICAgICAgICAgICAgICAgICAgICAgY2FsYygjeyRpbnB1dC1oZWlnaHQtaW5uZXItbGd9ICsgI3skaW5wdXQtaGVpZ2h0LWJvcmRlcn0pICFkZWZhdWx0O1xcblxcbiRpbnB1dC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xcblxcbiRmb3JtLXRleHQtbWFyZ2luLXRvcDogICAgICAgICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuXFxuJGZvcm0tY2hlY2staW5wdXQtZ3V0dGVyOiAgICAgICAgICAgICAgIDEuMjVyZW0gIWRlZmF1bHQ7XFxuJGZvcm0tY2hlY2staW5wdXQtbWFyZ2luLXk6ICAgICAgICAgICAgIC4zcmVtICFkZWZhdWx0O1xcbiRmb3JtLWNoZWNrLWlucHV0LW1hcmdpbi14OiAgICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuXFxuJGZvcm0tY2hlY2staW5saW5lLW1hcmdpbi14OiAgICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4kZm9ybS1jaGVjay1pbmxpbmUtaW5wdXQtbWFyZ2luLXg6ICAgICAgLjMxMjVyZW0gIWRlZmF1bHQ7XFxuXFxuJGZvcm0tZ3JvdXAtbWFyZ2luLWJvdHRvbTogICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWdyb3VwLWFkZG9uLWNvbG9yOiAgICAgICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcXG4kaW5wdXQtZ3JvdXAtYWRkb24tYmc6ICAgICAgICAgICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcbiRpbnB1dC1ncm91cC1hZGRvbi1ib3JkZXItY29sb3I6ICAgICAgICAkaW5wdXQtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcblxcbiRjdXN0b20tY29udHJvbC1ndXR0ZXI6ICAgICAgICAgICAgICAgICAxLjVyZW0gIWRlZmF1bHQ7XFxuJGN1c3RvbS1jb250cm9sLXNwYWNlci14OiAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1zaXplOiAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1iZzogICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcXG4kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJnLXNpemU6ICAgICAgNTAlIDUwJSAhZGVmYXVsdDtcXG4kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJveC1zaGFkb3c6ICAgaW5zZXQgMCAuMjVyZW0gLjI1cmVtIHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1kaXNhYmxlZC1iZzogICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcbiRjdXN0b20tY29udHJvbC1sYWJlbC1kaXNhYmxlZC1jb2xvcjogICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG4kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3I6ICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtYmc6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG4kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtZGlzYWJsZWQtYmc6ICByZ2JhKHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIiksIC41KSAhZGVmYXVsdDtcXG4kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtYm94LXNoYWRvdzogICBub25lICFkZWZhdWx0O1xcblxcbiRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItZm9jdXMtYm94LXNoYWRvdzogICAgIDAgMCAwIDFweCAkYm9keS1iZywgJGlucHV0LWJ0bi1mb2N1cy1ib3gtc2hhZG93ICFkZWZhdWx0O1xcblxcbiRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYWN0aXZlLWNvbG9yOiAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbiRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICAgICAgIGxpZ2h0ZW4oJGNvbXBvbmVudC1hY3RpdmUtYmcsIDM1JSkgIWRlZmF1bHQ7XFxuJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1hY3RpdmUtYm94LXNoYWRvdzogICAgbm9uZSAhZGVmYXVsdDtcXG5cXG4kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1ib3JkZXItcmFkaXVzOiAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pY29uLWNoZWNrZWQ6ICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDggOCclM0UlM0NwYXRoIGZpbGw9JyN7JGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWNvbG9yfScgZD0nTTYuNTY0Ljc1bC0zLjU5IDMuNjEyLTEuNTM4LTEuNTVMMCA0LjI2IDIuOTc0IDcuMjUgOCAyLjE5M3onLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaW5kZXRlcm1pbmF0ZS1iZzogICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaW5kZXRlcm1pbmF0ZS1jb2xvcjogJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWNvbG9yICFkZWZhdWx0O1xcbiRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWljb24taW5kZXRlcm1pbmF0ZTogIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA0JyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtY29sb3J9JyBkPSdNMCAyaDQnLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaW5kZXRlcm1pbmF0ZS1ib3gtc2hhZG93OiBub25lICFkZWZhdWx0O1xcblxcbiRjdXN0b20tcmFkaW8taW5kaWNhdG9yLWJvcmRlci1yYWRpdXM6ICAgICAgICAgIDUwJSAhZGVmYXVsdDtcXG4kY3VzdG9tLXJhZGlvLWluZGljYXRvci1pY29uLWNoZWNrZWQ6ICAgICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nLTQgLTQgOCA4JyUzRSUzQ2NpcmNsZSByPSczJyBmaWxsPScjeyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvcn0nLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1zZWxlY3QtcGFkZGluZy15OiAgICAgICAgICAgLjM3NXJlbSAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1wYWRkaW5nLXg6ICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1oZWlnaHQ6ICAgICAgICAgICAgICAkaW5wdXQtaGVpZ2h0ICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWluZGljYXRvci1wYWRkaW5nOiAgIDFyZW0gIWRlZmF1bHQ7IC8vIEV4dHJhIHBhZGRpbmcgdG8gYWNjb3VudCBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBiYWNrZ3JvdW5kLWltYWdlIGJhc2VkIGluZGljYXRvclxcbiRjdXN0b20tc2VsZWN0LWxpbmUtaGVpZ2h0OiAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuJGN1c3RvbS1zZWxlY3QtY29sb3I6ICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWRpc2FibGVkLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1iZzogICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGN1c3RvbS1zZWxlY3QtZGlzYWJsZWQtYmc6ICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWJnLXNpemU6ICAgICAgICAgICAgIDhweCAxMHB4ICFkZWZhdWx0OyAvLyBJbiBwaXhlbHMgYmVjYXVzZSBpbWFnZSBkaW1lbnNpb25zXFxuJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yLWNvbG9yOiAgICAgJGdyYXktODAwICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWluZGljYXRvcjogICAgICAgICAgIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA1JyUzRSUzQ3BhdGggZmlsbD0nI3skY3VzdG9tLXNlbGVjdC1pbmRpY2F0b3ItY29sb3J9JyBkPSdNMiAwTDAgMmg0em0wIDVMMCAzaDR6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWJvcmRlci13aWR0aDogICAgICAgICRpbnB1dC1idG4tYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWJvcmRlci1jb2xvcjogICAgICAgICRpbnB1dC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuJGN1c3RvbS1zZWxlY3QtYm9yZGVyLXJhZGl1czogICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1zZWxlY3QtZm9jdXMtYm9yZGVyLWNvbG9yOiAgJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1mb2N1cy1ib3gtc2hhZG93OiAgICBpbnNldCAwIDFweCAycHggcmdiYSgkYmxhY2ssIC4wNzUpLCAwIDAgNXB4IHJnYmEoJGN1c3RvbS1zZWxlY3QtZm9jdXMtYm9yZGVyLWNvbG9yLCAuNSkgIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1zZWxlY3QtZm9udC1zaXplLXNtOiAgICAgICAgNzUlICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWhlaWdodC1zbTogICAgICAgICAgICRpbnB1dC1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1zZWxlY3QtZm9udC1zaXplLWxnOiAgICAgICAgMTI1JSAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1oZWlnaHQtbGc6ICAgICAgICAgICAkaW5wdXQtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbiRjdXN0b20tZmlsZS1oZWlnaHQ6ICAgICAgICAgICAgICAgICRpbnB1dC1oZWlnaHQgIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLWZvY3VzLWJvcmRlci1jb2xvcjogICAgJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLWZpbGUtZm9jdXMtYm94LXNoYWRvdzogICAgICAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1maWxlLXBhZGRpbmcteTogICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXkgIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLXBhZGRpbmcteDogICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXggIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodCAhZGVmYXVsdDtcXG4kY3VzdG9tLWZpbGUtY29sb3I6ICAgICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLWJnOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJnICFkZWZhdWx0O1xcbiRjdXN0b20tZmlsZS1ib3JkZXItd2lkdGg6ICAgICAgICAgICRpbnB1dC1idG4tYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRjdXN0b20tZmlsZS1ib3JkZXItY29sb3I6ICAgICAgICAgICRpbnB1dC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLWJvcmRlci1yYWRpdXM6ICAgICAgICAgJGlucHV0LWJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLWJveC1zaGFkb3c6ICAgICAgICAgICAgJGlucHV0LWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLWJ1dHRvbi1jb2xvcjogICAgICAgICAgJGN1c3RvbS1maWxlLWNvbG9yICFkZWZhdWx0O1xcbiRjdXN0b20tZmlsZS1idXR0b24tYmc6ICAgICAgICAgICAgICRpbnB1dC1ncm91cC1hZGRvbi1iZyAhZGVmYXVsdDtcXG4kY3VzdG9tLWZpbGUtdGV4dDogKFxcbiAgZW46IFxcXCJCcm93c2VcXFwiXFxuKSAhZGVmYXVsdDtcXG5cXG5cXG4vLyBGb3JtIHZhbGlkYXRpb25cXG4kZm9ybS1mZWVkYmFjay1tYXJnaW4tdG9wOiAgICAgICAgICAkZm9ybS10ZXh0LW1hcmdpbi10b3AgIWRlZmF1bHQ7XFxuJGZvcm0tZmVlZGJhY2stZm9udC1zaXplOiAgICAgICAgICAgJHNtYWxsLWZvbnQtc2l6ZSAhZGVmYXVsdDtcXG4kZm9ybS1mZWVkYmFjay12YWxpZC1jb2xvcjogICAgICAgICB0aGVtZS1jb2xvcihcXFwic3VjY2Vzc1xcXCIpICFkZWZhdWx0O1xcbiRmb3JtLWZlZWRiYWNrLWludmFsaWQtY29sb3I6ICAgICAgIHRoZW1lLWNvbG9yKFxcXCJkYW5nZXJcXFwiKSAhZGVmYXVsdDtcXG5cXG5cXG4vLyBEcm9wZG93bnNcXG4vL1xcbi8vIERyb3Bkb3duIG1lbnUgY29udGFpbmVyIGFuZCBjb250ZW50cy5cXG5cXG4kZHJvcGRvd24tbWluLXdpZHRoOiAgICAgICAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tcGFkZGluZy15OiAgICAgICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tc3BhY2VyOiAgICAgICAgICAgICAgICAgICAuMTI1cmVtICFkZWZhdWx0O1xcbiRkcm9wZG93bi1iZzogICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICByZ2JhKCRibGFjaywgLjE1KSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tYm9yZGVyLXJhZGl1czogICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kZHJvcGRvd24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRkcm9wZG93bi1kaXZpZGVyLWJnOiAgICAgICAgICAgICAgICRncmF5LTIwMCAhZGVmYXVsdDtcXG4kZHJvcGRvd24tYm94LXNoYWRvdzogICAgICAgICAgICAgICAwIC41cmVtIDFyZW0gcmdiYSgkYmxhY2ssIC4xNzUpICFkZWZhdWx0O1xcblxcbiRkcm9wZG93bi1saW5rLWNvbG9yOiAgICAgICAgICAgICAgICRncmF5LTkwMCAhZGVmYXVsdDtcXG4kZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjogICAgICAgICBkYXJrZW4oJGdyYXktOTAwLCA1JSkgIWRlZmF1bHQ7XFxuJGRyb3Bkb3duLWxpbmstaG92ZXItYmc6ICAgICAgICAgICAgJGdyYXktMTAwICFkZWZhdWx0O1xcblxcbiRkcm9wZG93bi1saW5rLWFjdGl2ZS1jb2xvcjogICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbiRkcm9wZG93bi1saW5rLWFjdGl2ZS1iZzogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xcblxcbiRkcm9wZG93bi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG4kZHJvcGRvd24taXRlbS1wYWRkaW5nLXk6ICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuJGRyb3Bkb3duLWl0ZW0tcGFkZGluZy14OiAgICAgICAgICAgMS41cmVtICFkZWZhdWx0O1xcblxcbiRkcm9wZG93bi1oZWFkZXItY29sb3I6ICAgICAgICAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG5cXG4vLyBaLWluZGV4IG1hc3RlciBsaXN0XFxuLy9cXG4vLyBXYXJuaW5nOiBBdm9pZCBjdXN0b21pemluZyB0aGVzZSB2YWx1ZXMuIFRoZXkncmUgdXNlZCBmb3IgYSBiaXJkJ3MgZXllIHZpZXdcXG4vLyBvZiBjb21wb25lbnRzIGRlcGVuZGVudCBvbiB0aGUgei1heGlzIGFuZCBhcmUgZGVzaWduZWQgdG8gYWxsIHdvcmsgdG9nZXRoZXIuXFxuXFxuJHppbmRleC1kcm9wZG93bjogICAgICAgICAgICAgICAgICAgMTAwMCAhZGVmYXVsdDtcXG4kemluZGV4LXN0aWNreTogICAgICAgICAgICAgICAgICAgICAxMDIwICFkZWZhdWx0O1xcbiR6aW5kZXgtZml4ZWQ6ICAgICAgICAgICAgICAgICAgICAgIDEwMzAgIWRlZmF1bHQ7XFxuJHppbmRleC1tb2RhbC1iYWNrZHJvcDogICAgICAgICAgICAgMTA0MCAhZGVmYXVsdDtcXG4kemluZGV4LW1vZGFsOiAgICAgICAgICAgICAgICAgICAgICAxMDUwICFkZWZhdWx0O1xcbiR6aW5kZXgtcG9wb3ZlcjogICAgICAgICAgICAgICAgICAgIDEwNjAgIWRlZmF1bHQ7XFxuJHppbmRleC10b29sdGlwOiAgICAgICAgICAgICAgICAgICAgMTA3MCAhZGVmYXVsdDtcXG5cXG4vLyBOYXZzXFxuXFxuJG5hdi1saW5rLXBhZGRpbmcteTogICAgICAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuJG5hdi1saW5rLXBhZGRpbmcteDogICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG4kbmF2LWxpbmstZGlzYWJsZWQtY29sb3I6ICAgICAgICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuJG5hdi10YWJzLWJvcmRlci1jb2xvcjogICAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcbiRuYXYtdGFicy1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJG5hdi10YWJzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiAgJGdyYXktMjAwICRncmF5LTIwMCAkbmF2LXRhYnMtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcbiRuYXYtdGFicy1saW5rLWFjdGl2ZS1jb2xvcjogICAgICAgICRncmF5LTcwMCAhZGVmYXVsdDtcXG4kbmF2LXRhYnMtbGluay1hY3RpdmUtYmc6ICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcXG4kbmF2LXRhYnMtbGluay1hY3RpdmUtYm9yZGVyLWNvbG9yOiAkZ3JheS0zMDAgJGdyYXktMzAwICRuYXYtdGFicy1saW5rLWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4kbmF2LXBpbGxzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWJnOiAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4vLyBOYXZiYXJcXG5cXG4kbmF2YmFyLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAoJHNwYWNlciAvIDIpICFkZWZhdWx0O1xcbiRuYXZiYXItcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICRzcGFjZXIgIWRlZmF1bHQ7XFxuXFxuJG5hdmJhci1uYXYtbGluay1wYWRkaW5nLXg6ICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuXFxuJG5hdmJhci1icmFuZC1mb250LXNpemU6ICAgICAgICAgICAgJGZvbnQtc2l6ZS1sZyAhZGVmYXVsdDtcXG4vLyBDb21wdXRlIHRoZSBuYXZiYXItYnJhbmQgcGFkZGluZy15IHNvIHRoZSBuYXZiYXItYnJhbmQgd2lsbCBoYXZlIHRoZSBzYW1lIGhlaWdodCBhcyBuYXZiYXItdGV4dCBhbmQgbmF2LWxpbmtcXG4kbmF2LWxpbmstaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogJGxpbmUtaGVpZ2h0LWJhc2UgKyAkbmF2LWxpbmstcGFkZGluZy15ICogMikgIWRlZmF1bHQ7XFxuJG5hdmJhci1icmFuZC1oZWlnaHQ6ICAgICAgICAgICAgICAgJG5hdmJhci1icmFuZC1mb250LXNpemUgKiAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcXG4kbmF2YmFyLWJyYW5kLXBhZGRpbmcteTogICAgICAgICAgICAoJG5hdi1saW5rLWhlaWdodCAtICRuYXZiYXItYnJhbmQtaGVpZ2h0KSAvIDIgIWRlZmF1bHQ7XFxuXFxuJG5hdmJhci10b2dnbGVyLXBhZGRpbmcteTogICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xcbiRuYXZiYXItdG9nZ2xlci1wYWRkaW5nLXg6ICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4kbmF2YmFyLXRvZ2dsZXItZm9udC1zaXplOiAgICAgICAgICAkZm9udC1zaXplLWxnICFkZWZhdWx0O1xcbiRuYXZiYXItdG9nZ2xlci1ib3JkZXItcmFkaXVzOiAgICAgICRidG4tYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4kbmF2YmFyLWRhcmstY29sb3I6ICAgICAgICAgICAgICAgICByZ2JhKCR3aGl0ZSwgLjUpICFkZWZhdWx0O1xcbiRuYXZiYXItZGFyay1ob3Zlci1jb2xvcjogICAgICAgICAgIHJnYmEoJHdoaXRlLCAuNzUpICFkZWZhdWx0O1xcbiRuYXZiYXItZGFyay1hY3RpdmUtY29sb3I6ICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kbmF2YmFyLWRhcmstZGlzYWJsZWQtY29sb3I6ICAgICAgICByZ2JhKCR3aGl0ZSwgLjI1KSAhZGVmYXVsdDtcXG4kbmF2YmFyLWRhcmstdG9nZ2xlci1pY29uLWJnOiAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItZGFyay1jb2xvcn0nIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbiRuYXZiYXItZGFyay10b2dnbGVyLWJvcmRlci1jb2xvcjogIHJnYmEoJHdoaXRlLCAuMSkgIWRlZmF1bHQ7XFxuXFxuJG5hdmJhci1saWdodC1jb2xvcjogICAgICAgICAgICAgICAgcmdiYSgkYmxhY2ssIC41KSAhZGVmYXVsdDtcXG4kbmF2YmFyLWxpZ2h0LWhvdmVyLWNvbG9yOiAgICAgICAgICByZ2JhKCRibGFjaywgLjcpICFkZWZhdWx0O1xcbiRuYXZiYXItbGlnaHQtYWN0aXZlLWNvbG9yOiAgICAgICAgIHJnYmEoJGJsYWNrLCAuOSkgIWRlZmF1bHQ7XFxuJG5hdmJhci1saWdodC1kaXNhYmxlZC1jb2xvcjogICAgICAgcmdiYSgkYmxhY2ssIC4zKSAhZGVmYXVsdDtcXG4kbmF2YmFyLWxpZ2h0LXRvZ2dsZXItaWNvbi1iZzogICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItbGlnaHQtY29sb3J9JyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW1pdGVybGltaXQ9JzEwJyBkPSdNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4kbmF2YmFyLWxpZ2h0LXRvZ2dsZXItYm9yZGVyLWNvbG9yOiByZ2JhKCRibGFjaywgLjEpICFkZWZhdWx0O1xcblxcbi8vIFBhZ2luYXRpb25cXG5cXG4kcGFnaW5hdGlvbi1wYWRkaW5nLXk6ICAgICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1wYWRkaW5nLXg6ICAgICAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tcGFkZGluZy15LXNtOiAgICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xcbiRwYWdpbmF0aW9uLXBhZGRpbmcteC1zbTogICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcbiRwYWdpbmF0aW9uLXBhZGRpbmcteS1sZzogICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAxLjVyZW0gIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tbGluZS1oZWlnaHQ6ICAgICAgICAgICAgMS4yNSAhZGVmYXVsdDtcXG5cXG4kcGFnaW5hdGlvbi1jb2xvcjogICAgICAgICAgICAgICAgICAkbGluay1jb2xvciAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1iZzogICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1ib3JkZXItY29sb3I6ICAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuXFxuJHBhZ2luYXRpb24tZm9jdXMtYm94LXNoYWRvdzogICAgICAgJGlucHV0LWJ0bi1mb2N1cy1ib3gtc2hhZG93ICFkZWZhdWx0O1xcblxcbiRwYWdpbmF0aW9uLWhvdmVyLWNvbG9yOiAgICAgICAgICAgICRsaW5rLWhvdmVyLWNvbG9yICFkZWZhdWx0O1xcbiRwYWdpbmF0aW9uLWhvdmVyLWJnOiAgICAgICAgICAgICAgICRncmF5LTIwMCAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1ob3Zlci1ib3JkZXItY29sb3I6ICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuXFxuJHBhZ2luYXRpb24tYWN0aXZlLWNvbG9yOiAgICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tYWN0aXZlLWJnOiAgICAgICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tYWN0aXZlLWJvcmRlci1jb2xvcjogICAgJHBhZ2luYXRpb24tYWN0aXZlLWJnICFkZWZhdWx0O1xcblxcbiRwYWdpbmF0aW9uLWRpc2FibGVkLWNvbG9yOiAgICAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1iZzogICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tZGlzYWJsZWQtYm9yZGVyLWNvbG9yOiAgJGdyYXktMzAwICFkZWZhdWx0O1xcblxcblxcbi8vIEp1bWJvdHJvblxcblxcbiRqdW1ib3Ryb24tcGFkZGluZzogICAgICAgICAgICAgICAgIDJyZW0gIWRlZmF1bHQ7XFxuJGp1bWJvdHJvbi1iZzogICAgICAgICAgICAgICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcblxcblxcbi8vIENhcmRzXFxuXFxuJGNhcmQtc3BhY2VyLXk6ICAgICAgICAgICAgICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcbiRjYXJkLXNwYWNlci14OiAgICAgICAgICAgICAgICAgICAgIDEuMjVyZW0gIWRlZmF1bHQ7XFxuJGNhcmQtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItY29sb3I6ICAgICAgICAgICAgICAgICByZ2JhKCRibGFjaywgLjEyNSkgIWRlZmF1bHQ7XFxuJGNhcmQtaW5uZXItYm9yZGVyLXJhZGl1czogICAgICAgICAgY2FsYygjeyRjYXJkLWJvcmRlci1yYWRpdXN9IC0gI3skY2FyZC1ib3JkZXItd2lkdGh9KSAhZGVmYXVsdDtcXG4kY2FyZC1jYXAtYmc6ICAgICAgICAgICAgICAgICAgICAgICByZ2JhKCRibGFjaywgLjAzKSAhZGVmYXVsdDtcXG4kY2FyZC1iZzogICAgICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuXFxuJGNhcmQtaW1nLW92ZXJsYXktcGFkZGluZzogICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG5cXG4kY2FyZC1ncm91cC1tYXJnaW46ICAgICAgICAgICAgICAgICAoJGdyaWQtZ3V0dGVyLXdpZHRoIC8gMikgIWRlZmF1bHQ7XFxuJGNhcmQtZGVjay1tYXJnaW46ICAgICAgICAgICAgICAgICAgJGNhcmQtZ3JvdXAtbWFyZ2luICFkZWZhdWx0O1xcblxcbiRjYXJkLWNvbHVtbnMtY291bnQ6ICAgICAgICAgICAgICAgIDMgIWRlZmF1bHQ7XFxuJGNhcmQtY29sdW1ucy1nYXA6ICAgICAgICAgICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG4kY2FyZC1jb2x1bW5zLW1hcmdpbjogICAgICAgICAgICAgICAkY2FyZC1zcGFjZXIteSAhZGVmYXVsdDtcXG5cXG5cXG4vLyBUb29sdGlwc1xcblxcbiR0b29sdGlwLWZvbnQtc2l6ZTogICAgICAgICAgICRmb250LXNpemUtc20gIWRlZmF1bHQ7XFxuJHRvb2x0aXAtbWF4LXdpZHRoOiAgICAgICAgICAgMjAwcHggIWRlZmF1bHQ7XFxuJHRvb2x0aXAtY29sb3I6ICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiR0b29sdGlwLWJnOiAgICAgICAgICAgICAgICAgICRibGFjayAhZGVmYXVsdDtcXG4kdG9vbHRpcC1ib3JkZXItcmFkaXVzOiAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJHRvb2x0aXAtb3BhY2l0eTogICAgICAgICAgICAgLjkgIWRlZmF1bHQ7XFxuJHRvb2x0aXAtcGFkZGluZy15OiAgICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xcbiR0b29sdGlwLXBhZGRpbmcteDogICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcbiR0b29sdGlwLW1hcmdpbjogICAgICAgICAgICAgIDAgIWRlZmF1bHQ7XFxuXFxuJHRvb2x0aXAtYXJyb3ctd2lkdGg6ICAgICAgICAgLjhyZW0gIWRlZmF1bHQ7XFxuJHRvb2x0aXAtYXJyb3ctaGVpZ2h0OiAgICAgICAgLjRyZW0gIWRlZmF1bHQ7XFxuJHRvb2x0aXAtYXJyb3ctY29sb3I6ICAgICAgICAgJHRvb2x0aXAtYmcgIWRlZmF1bHQ7XFxuXFxuXFxuLy8gUG9wb3ZlcnNcXG5cXG4kcG9wb3Zlci1mb250LXNpemU6ICAgICAgICAgICAgICAgICAkZm9udC1zaXplLXNtICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kcG9wb3Zlci1tYXgtd2lkdGg6ICAgICAgICAgICAgICAgICAyNzZweCAhZGVmYXVsdDtcXG4kcG9wb3Zlci1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJvcmRlci1jb2xvcjogICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMikgIWRlZmF1bHQ7XFxuJHBvcG92ZXItYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMtbGcgIWRlZmF1bHQ7XFxuJHBvcG92ZXItYm94LXNoYWRvdzogICAgICAgICAgICAgICAgMCAuMjVyZW0gLjVyZW0gcmdiYSgkYmxhY2ssIC4yKSAhZGVmYXVsdDtcXG5cXG4kcG9wb3Zlci1oZWFkZXItYmc6ICAgICAgICAgICAgICAgICBkYXJrZW4oJHBvcG92ZXItYmcsIDMlKSAhZGVmYXVsdDtcXG4kcG9wb3Zlci1oZWFkZXItY29sb3I6ICAgICAgICAgICAgICAkaGVhZGluZ3MtY29sb3IgIWRlZmF1bHQ7XFxuJHBvcG92ZXItaGVhZGVyLXBhZGRpbmcteTogICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuJHBvcG92ZXItaGVhZGVyLXBhZGRpbmcteDogICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcblxcbiRwb3BvdmVyLWJvZHktY29sb3I6ICAgICAgICAgICAgICAgICRib2R5LWNvbG9yICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJvZHktcGFkZGluZy15OiAgICAgICAgICAgICRwb3BvdmVyLWhlYWRlci1wYWRkaW5nLXkgIWRlZmF1bHQ7XFxuJHBvcG92ZXItYm9keS1wYWRkaW5nLXg6ICAgICAgICAgICAgJHBvcG92ZXItaGVhZGVyLXBhZGRpbmcteCAhZGVmYXVsdDtcXG5cXG4kcG9wb3Zlci1hcnJvdy13aWR0aDogICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcbiRwb3BvdmVyLWFycm93LWhlaWdodDogICAgICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcbiRwb3BvdmVyLWFycm93LWNvbG9yOiAgICAgICAgICAgICAgICRwb3BvdmVyLWJnICFkZWZhdWx0O1xcblxcbiRwb3BvdmVyLWFycm93LW91dGVyLWNvbG9yOiAgICAgICAgIGZhZGUtaW4oJHBvcG92ZXItYm9yZGVyLWNvbG9yLCAuMDUpICFkZWZhdWx0O1xcblxcblxcbi8vIEJhZGdlc1xcblxcbiRiYWRnZS1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgIDc1JSAhZGVmYXVsdDtcXG4kYmFkZ2UtZm9udC13ZWlnaHQ6ICAgICAgICAgICAgICAgICAkZm9udC13ZWlnaHQtYm9sZCAhZGVmYXVsdDtcXG4kYmFkZ2UtcGFkZGluZy15OiAgICAgICAgICAgICAgICAgICAuMjVlbSAhZGVmYXVsdDtcXG4kYmFkZ2UtcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICAuNGVtICFkZWZhdWx0O1xcbiRiYWRnZS1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcblxcbiRiYWRnZS1waWxsLXBhZGRpbmcteDogICAgICAgICAgICAgIC42ZW0gIWRlZmF1bHQ7XFxuLy8gVXNlIGEgaGlnaGVyIHRoYW4gbm9ybWFsIHZhbHVlIHRvIGVuc3VyZSBjb21wbGV0ZWx5IHJvdW5kZWQgZWRnZXMgd2hlblxcbi8vIGN1c3RvbWl6aW5nIHBhZGRpbmcgb3IgZm9udC1zaXplIG9uIGxhYmVscy5cXG4kYmFkZ2UtcGlsbC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcXG5cXG5cXG4vLyBNb2RhbHNcXG5cXG4vLyBQYWRkaW5nIGFwcGxpZWQgdG8gdGhlIG1vZGFsIGJvZHlcXG4kbW9kYWwtaW5uZXItcGFkZGluZzogICAgICAgICAxcmVtICFkZWZhdWx0O1xcblxcbiRtb2RhbC1kaWFsb2ctbWFyZ2luOiAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcbiRtb2RhbC1kaWFsb2ctbWFyZ2luLXktc20tdXA6IDEuNzVyZW0gIWRlZmF1bHQ7XFxuXFxuJG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XFxuXFxuJG1vZGFsLWNvbnRlbnQtYmc6ICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRtb2RhbC1jb250ZW50LWJvcmRlci1jb2xvcjogICAgIHJnYmEoJGJsYWNrLCAuMikgIWRlZmF1bHQ7XFxuJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoOiAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXhzOiAgICAwIC4yNXJlbSAuNXJlbSByZ2JhKCRibGFjaywgLjUpICFkZWZhdWx0O1xcbiRtb2RhbC1jb250ZW50LWJveC1zaGFkb3ctc20tdXA6IDAgLjVyZW0gMXJlbSByZ2JhKCRibGFjaywgLjUpICFkZWZhdWx0O1xcblxcbiRtb2RhbC1iYWNrZHJvcC1iZzogICAgICAgICAgICRibGFjayAhZGVmYXVsdDtcXG4kbW9kYWwtYmFja2Ryb3Atb3BhY2l0eTogICAgICAuNSAhZGVmYXVsdDtcXG4kbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcjogICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuJG1vZGFsLWZvb3Rlci1ib3JkZXItY29sb3I6ICAgJG1vZGFsLWhlYWRlci1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGg6ICAgJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRtb2RhbC1mb290ZXItYm9yZGVyLXdpZHRoOiAgICRtb2RhbC1oZWFkZXItYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRtb2RhbC1oZWFkZXItcGFkZGluZzogICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuXFxuJG1vZGFsLWxnOiAgICAgICAgICAgICAgICAgICAgICAgICAgODAwcHggIWRlZmF1bHQ7XFxuJG1vZGFsLW1kOiAgICAgICAgICAgICAgICAgICAgICAgICAgNTAwcHggIWRlZmF1bHQ7XFxuJG1vZGFsLXNtOiAgICAgICAgICAgICAgICAgICAgICAgICAgMzAwcHggIWRlZmF1bHQ7XFxuXFxuJG1vZGFsLXRyYW5zaXRpb246ICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtIC4zcyBlYXNlLW91dCAhZGVmYXVsdDtcXG5cXG5cXG4vLyBBbGVydHNcXG4vL1xcbi8vIERlZmluZSBhbGVydCBjb2xvcnMsIGJvcmRlciByYWRpdXMsIGFuZCBwYWRkaW5nLlxcblxcbiRhbGVydC1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4kYWxlcnQtcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcbiRhbGVydC1tYXJnaW4tYm90dG9tOiAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuJGFsZXJ0LWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJGFsZXJ0LWxpbmstZm9udC13ZWlnaHQ6ICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuJGFsZXJ0LWJvcmRlci13aWR0aDogICAgICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG5cXG4kYWxlcnQtYmctbGV2ZWw6ICAgICAgICAgICAgICAgICAgICAtMTAgIWRlZmF1bHQ7XFxuJGFsZXJ0LWJvcmRlci1sZXZlbDogICAgICAgICAgICAgICAgLTkgIWRlZmF1bHQ7XFxuJGFsZXJ0LWNvbG9yLWxldmVsOiAgICAgICAgICAgICAgICAgNiAhZGVmYXVsdDtcXG5cXG5cXG4vLyBQcm9ncmVzcyBiYXJzXFxuXFxuJHByb2dyZXNzLWhlaWdodDogICAgICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG4kcHJvZ3Jlc3MtZm9udC1zaXplOiAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogLjc1KSAhZGVmYXVsdDtcXG4kcHJvZ3Jlc3MtYmc6ICAgICAgICAgICAgICAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuJHByb2dyZXNzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJHByb2dyZXNzLWJveC1zaGFkb3c6ICAgICAgICAgICAgICAgaW5zZXQgMCAuMXJlbSAuMXJlbSByZ2JhKCRibGFjaywgLjEpICFkZWZhdWx0O1xcbiRwcm9ncmVzcy1iYXItY29sb3I6ICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kcHJvZ3Jlc3MtYmFyLWJnOiAgICAgICAgICAgICAgICAgICB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpICFkZWZhdWx0O1xcbiRwcm9ncmVzcy1iYXItYW5pbWF0aW9uLXRpbWluZzogICAgIDFzIGxpbmVhciBpbmZpbml0ZSAhZGVmYXVsdDtcXG4kcHJvZ3Jlc3MtYmFyLXRyYW5zaXRpb246ICAgICAgICAgICB3aWR0aCAuNnMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBMaXN0IGdyb3VwXFxuXFxuJGxpc3QtZ3JvdXAtYmc6ICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWJvcmRlci1jb2xvcjogICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMTI1KSAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcblxcbiRsaXN0LWdyb3VwLWl0ZW0tcGFkZGluZy15OiAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteDogICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcblxcbiRsaXN0LWdyb3VwLWhvdmVyLWJnOiAgICAgICAgICAgICAgICRncmF5LTEwMCAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3RpdmUtY29sb3I6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3RpdmUtYmc6ICAgICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3RpdmUtYm9yZGVyLWNvbG9yOiAgICAkbGlzdC1ncm91cC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuXFxuJGxpc3QtZ3JvdXAtZGlzYWJsZWQtY29sb3I6ICAgICAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWRpc2FibGVkLWJnOiAgICAgICAgICAgICRsaXN0LWdyb3VwLWJnICFkZWZhdWx0O1xcblxcbiRsaXN0LWdyb3VwLWFjdGlvbi1jb2xvcjogICAgICAgICAgICRncmF5LTcwMCAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3Rpb24taG92ZXItY29sb3I6ICAgICAkbGlzdC1ncm91cC1hY3Rpb24tY29sb3IgIWRlZmF1bHQ7XFxuXFxuJGxpc3QtZ3JvdXAtYWN0aW9uLWFjdGl2ZS1jb2xvcjogICAgJGJvZHktY29sb3IgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYWN0aW9uLWFjdGl2ZS1iZzogICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcblxcblxcbi8vIEltYWdlIHRodW1ibmFpbHNcXG5cXG4kdGh1bWJuYWlsLXBhZGRpbmc6ICAgICAgICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuJHRodW1ibmFpbC1iZzogICAgICAgICAgICAgICAgICAgICAgJGJvZHktYmcgIWRlZmF1bHQ7XFxuJHRodW1ibmFpbC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kdGh1bWJuYWlsLWJvcmRlci1jb2xvcjogICAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuJHRodW1ibmFpbC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJHRodW1ibmFpbC1ib3gtc2hhZG93OiAgICAgICAgICAgICAgMCAxcHggMnB4IHJnYmEoJGJsYWNrLCAuMDc1KSAhZGVmYXVsdDtcXG5cXG5cXG4vLyBGaWd1cmVzXFxuXFxuJGZpZ3VyZS1jYXB0aW9uLWZvbnQtc2l6ZTogICAgICAgICAgOTAlICFkZWZhdWx0O1xcbiRmaWd1cmUtY2FwdGlvbi1jb2xvcjogICAgICAgICAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG5cXG4vLyBCcmVhZGNydW1ic1xcblxcbiRicmVhZGNydW1iLXBhZGRpbmcteTogICAgICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4kYnJlYWRjcnVtYi1wYWRkaW5nLXg6ICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcbiRicmVhZGNydW1iLWl0ZW0tcGFkZGluZzogICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcblxcbiRicmVhZGNydW1iLW1hcmdpbi1ib3R0b206ICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuXFxuJGJyZWFkY3J1bWItYmc6ICAgICAgICAgICAgICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcbiRicmVhZGNydW1iLWRpdmlkZXItY29sb3I6ICAgICAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG4kYnJlYWRjcnVtYi1hY3RpdmUtY29sb3I6ICAgICAgICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuJGJyZWFkY3J1bWItZGl2aWRlcjogICAgICAgICAgICAgICAgXFxcIi9cXFwiICFkZWZhdWx0O1xcblxcblxcbi8vIENhcm91c2VsXFxuXFxuJGNhcm91c2VsLWNvbnRyb2wtY29sb3I6ICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRjYXJvdXNlbC1jb250cm9sLXdpZHRoOiAgICAgICAgICAgIDE1JSAhZGVmYXVsdDtcXG4kY2Fyb3VzZWwtY29udHJvbC1vcGFjaXR5OiAgICAgICAgICAuNSAhZGVmYXVsdDtcXG5cXG4kY2Fyb3VzZWwtaW5kaWNhdG9yLXdpZHRoOiAgICAgICAgICAzMHB4ICFkZWZhdWx0O1xcbiRjYXJvdXNlbC1pbmRpY2F0b3ItaGVpZ2h0OiAgICAgICAgIDNweCAhZGVmYXVsdDtcXG4kY2Fyb3VzZWwtaW5kaWNhdG9yLXNwYWNlcjogICAgICAgICAzcHggIWRlZmF1bHQ7XFxuJGNhcm91c2VsLWluZGljYXRvci1hY3RpdmUtYmc6ICAgICAgJHdoaXRlICFkZWZhdWx0O1xcblxcbiRjYXJvdXNlbC1jYXB0aW9uLXdpZHRoOiAgICAgICAgICAgIDcwJSAhZGVmYXVsdDtcXG4kY2Fyb3VzZWwtY2FwdGlvbi1jb2xvcjogICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuXFxuJGNhcm91c2VsLWNvbnRyb2wtaWNvbi13aWR0aDogICAgICAgMjBweCAhZGVmYXVsdDtcXG5cXG4kY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb24tYmc6ICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nI3skY2Fyb3VzZWwtY29udHJvbC1jb2xvcn0nIHZpZXdCb3g9JzAgMCA4IDgnJTNFJTNDcGF0aCBkPSdNNS4yNSAwbC00IDQgNCA0IDEuNS0xLjUtMi41LTIuNSAyLjUtMi41LTEuNS0xLjV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbiRjYXJvdXNlbC1jb250cm9sLW5leHQtaWNvbi1iZzogICAgIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBmaWxsPScjeyRjYXJvdXNlbC1jb250cm9sLWNvbG9yfScgdmlld0JveD0nMCAwIDggOCclM0UlM0NwYXRoIGQ9J00yLjc1IDBsLTEuNSAxLjUgMi41IDIuNS0yLjUgMi41IDEuNSAxLjUgNC00LTQtNHonLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuJGNhcm91c2VsLXRyYW5zaXRpb246ICAgICAgICAgICAgICAgdHJhbnNmb3JtIC42cyBlYXNlICFkZWZhdWx0O1xcblxcblxcbi8vIENsb3NlXFxuXFxuJGNsb3NlLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMS41ICFkZWZhdWx0O1xcbiRjbG9zZS1mb250LXdlaWdodDogICAgICAgICAgICAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xcbiRjbG9zZS1jb2xvcjogICAgICAgICAgICAgICAgICAgICAgICRibGFjayAhZGVmYXVsdDtcXG4kY2xvc2UtdGV4dC1zaGFkb3c6ICAgICAgICAgICAgICAgICAwIDFweCAwICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyBDb2RlXFxuXFxuJGNvZGUtZm9udC1zaXplOiAgICAgICAgICAgICAgICAgICAgODcuNSUgIWRlZmF1bHQ7XFxuJGNvZGUtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgICAgJHBpbmsgIWRlZmF1bHQ7XFxuXFxuJGtiZC1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgICAgICAgLjJyZW0gIWRlZmF1bHQ7XFxuJGtiZC1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgICAgICAgLjRyZW0gIWRlZmF1bHQ7XFxuJGtiZC1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICAgJGNvZGUtZm9udC1zaXplICFkZWZhdWx0O1xcbiRrYmQtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4ka2JkLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZ3JheS05MDAgIWRlZmF1bHQ7XFxuXFxuJHByZS1jb2xvcjogICAgICAgICAgICAgICAgICAgICAgICAgJGdyYXktOTAwICFkZWZhdWx0O1xcbiRwcmUtc2Nyb2xsYWJsZS1tYXgtaGVpZ2h0OiAgICAgICAgIDM0MHB4ICFkZWZhdWx0O1xcblxcblxcbi8vIFByaW50aW5nXFxuJHByaW50LXBhZ2Utc2l6ZTogICAgICAgICAgICAgICAgICAgYTMgIWRlZmF1bHQ7XFxuJHByaW50LWJvZHktbWluLXdpZHRoOiAgICAgICAgICAgICAgbWFwLWdldCgkZ3JpZC1icmVha3BvaW50cywgXFxcImxnXFxcIikgIWRlZmF1bHQ7XFxuXCIsXCIvL1xcbi8vIFNjcmVlbnJlYWRlcnNcXG4vL1xcblxcbi5zci1vbmx5IHtcXG4gIEBpbmNsdWRlIHNyLW9ubHkoKTtcXG59XFxuXFxuLnNyLW9ubHktZm9jdXNhYmxlIHtcXG4gIEBpbmNsdWRlIHNyLW9ubHktZm9jdXNhYmxlKCk7XFxufVxcblwiLFwiLy8gT25seSBkaXNwbGF5IGNvbnRlbnQgdG8gc2NyZWVuIHJlYWRlcnNcXG4vL1xcbi8vIFNlZTogaHR0cDovL2ExMXlwcm9qZWN0LmNvbS9wb3N0cy9ob3ctdG8taGlkZS1jb250ZW50L1xcbi8vIFNlZTogaHR0cHM6Ly9odWdvZ2lyYXVkZWwuY29tLzIwMTYvMTAvMTMvY3NzLWhpZGUtYW5kLXNlZWsvXFxuXFxuQG1peGluIHNyLW9ubHkge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgcGFkZGluZzogMDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIGNsaXAtcGF0aDogaW5zZXQoNTAlKTtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLy8gVXNlIGluIGNvbmp1bmN0aW9uIHdpdGggLnNyLW9ubHkgdG8gb25seSBkaXNwbGF5IGNvbnRlbnQgd2hlbiBpdCdzIGZvY3VzZWQuXFxuLy9cXG4vLyBVc2VmdWwgZm9yIFxcXCJTa2lwIHRvIG1haW4gY29udGVudFxcXCIgbGlua3M7IHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvMjAxMy9OT1RFLVdDQUcyMC1URUNIUy0yMDEzMDkwNS9HMVxcbi8vXFxuLy8gQ3JlZGl0OiBIVE1MNSBCb2lsZXJwbGF0ZVxcblxcbkBtaXhpbiBzci1vbmx5LWZvY3VzYWJsZSB7XFxuICAmOmFjdGl2ZSxcXG4gICY6Zm9jdXMge1xcbiAgICBwb3NpdGlvbjogc3RhdGljO1xcbiAgICB3aWR0aDogYXV0bztcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcXG4gICAgY2xpcDogYXV0bztcXG4gICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcXG4gICAgY2xpcC1wYXRoOiBub25lO1xcbiAgfVxcbn1cXG5cIixcIi8vIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxcblxcbi8vIFdpZHRoIGFuZCBoZWlnaHRcXG5cXG5AZWFjaCAkcHJvcCwgJGFiYnJldiBpbiAod2lkdGg6IHcsIGhlaWdodDogaCkge1xcbiAgQGVhY2ggJHNpemUsICRsZW5ndGggaW4gJHNpemVzIHtcXG4gICAgLiN7JGFiYnJldn0tI3skc2l6ZX0geyAjeyRwcm9wfTogJGxlbmd0aCAhaW1wb3J0YW50OyB9XFxuICB9XFxufVxcblxcbi5tdy0xMDAgeyBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgfVxcbi5taC0xMDAgeyBtYXgtaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7IH1cXG5cIixcIi8vIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxcblxcbi8vIE1hcmdpbiBhbmQgUGFkZGluZ1xcblxcbkBlYWNoICRicmVha3BvaW50IGluIG1hcC1rZXlzKCRncmlkLWJyZWFrcG9pbnRzKSB7XFxuICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCRicmVha3BvaW50KSB7XFxuICAgICRpbmZpeDogYnJlYWtwb2ludC1pbmZpeCgkYnJlYWtwb2ludCwgJGdyaWQtYnJlYWtwb2ludHMpO1xcblxcbiAgICBAZWFjaCAkcHJvcCwgJGFiYnJldiBpbiAobWFyZ2luOiBtLCBwYWRkaW5nOiBwKSB7XFxuICAgICAgQGVhY2ggJHNpemUsICRsZW5ndGggaW4gJHNwYWNlcnMge1xcblxcbiAgICAgICAgLiN7JGFiYnJldn0jeyRpbmZpeH0tI3skc2l6ZX0geyAjeyRwcm9wfTogJGxlbmd0aCAhaW1wb3J0YW50OyB9XFxuICAgICAgICAuI3skYWJicmV2fXQjeyRpbmZpeH0tI3skc2l6ZX0sXFxuICAgICAgICAuI3skYWJicmV2fXkjeyRpbmZpeH0tI3skc2l6ZX0ge1xcbiAgICAgICAgICAjeyRwcm9wfS10b3A6ICRsZW5ndGggIWltcG9ydGFudDtcXG4gICAgICAgIH1cXG4gICAgICAgIC4jeyRhYmJyZXZ9ciN7JGluZml4fS0jeyRzaXplfSxcXG4gICAgICAgIC4jeyRhYmJyZXZ9eCN7JGluZml4fS0jeyRzaXplfSB7XFxuICAgICAgICAgICN7JHByb3B9LXJpZ2h0OiAkbGVuZ3RoICFpbXBvcnRhbnQ7XFxuICAgICAgICB9XFxuICAgICAgICAuI3skYWJicmV2fWIjeyRpbmZpeH0tI3skc2l6ZX0sXFxuICAgICAgICAuI3skYWJicmV2fXkjeyRpbmZpeH0tI3skc2l6ZX0ge1xcbiAgICAgICAgICAjeyRwcm9wfS1ib3R0b206ICRsZW5ndGggIWltcG9ydGFudDtcXG4gICAgICAgIH1cXG4gICAgICAgIC4jeyRhYmJyZXZ9bCN7JGluZml4fS0jeyRzaXplfSxcXG4gICAgICAgIC4jeyRhYmJyZXZ9eCN7JGluZml4fS0jeyRzaXplfSB7XFxuICAgICAgICAgICN7JHByb3B9LWxlZnQ6ICRsZW5ndGggIWltcG9ydGFudDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgLy8gU29tZSBzcGVjaWFsIG1hcmdpbiB1dGlsc1xcbiAgICAubSN7JGluZml4fS1hdXRvIHsgbWFyZ2luOiBhdXRvICFpbXBvcnRhbnQ7IH1cXG4gICAgLm10I3skaW5maXh9LWF1dG8sXFxuICAgIC5teSN7JGluZml4fS1hdXRvIHtcXG4gICAgICBtYXJnaW4tdG9wOiBhdXRvICFpbXBvcnRhbnQ7XFxuICAgIH1cXG4gICAgLm1yI3skaW5maXh9LWF1dG8sXFxuICAgIC5teCN7JGluZml4fS1hdXRvIHtcXG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDtcXG4gICAgfVxcbiAgICAubWIjeyRpbmZpeH0tYXV0byxcXG4gICAgLm15I3skaW5maXh9LWF1dG8ge1xcbiAgICAgIG1hcmdpbi1ib3R0b206IGF1dG8gIWltcG9ydGFudDtcXG4gICAgfVxcbiAgICAubWwjeyRpbmZpeH0tYXV0byxcXG4gICAgLm14I3skaW5maXh9LWF1dG8ge1xcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvICFpbXBvcnRhbnQ7XFxuICAgIH1cXG4gIH1cXG59XFxuXCIsXCIvLyBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnRcXG5cXG4vL1xcbi8vIFRleHRcXG4vL1xcblxcbi8vIEFsaWdubWVudFxcblxcbi50ZXh0LWp1c3RpZnkgIHsgdGV4dC1hbGlnbjoganVzdGlmeSAhaW1wb3J0YW50OyB9XFxuLnRleHQtbm93cmFwICAgeyB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7IH1cXG4udGV4dC10cnVuY2F0ZSB7IEBpbmNsdWRlIHRleHQtdHJ1bmNhdGU7IH1cXG5cXG4vLyBSZXNwb25zaXZlIGFsaWdubWVudFxcblxcbkBlYWNoICRicmVha3BvaW50IGluIG1hcC1rZXlzKCRncmlkLWJyZWFrcG9pbnRzKSB7XFxuICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCRicmVha3BvaW50KSB7XFxuICAgICRpbmZpeDogYnJlYWtwb2ludC1pbmZpeCgkYnJlYWtwb2ludCwgJGdyaWQtYnJlYWtwb2ludHMpO1xcblxcbiAgICAudGV4dCN7JGluZml4fS1sZWZ0ICAgeyB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7IH1cXG4gICAgLnRleHQjeyRpbmZpeH0tcmlnaHQgIHsgdGV4dC1hbGlnbjogcmlnaHQgIWltcG9ydGFudDsgfVxcbiAgICAudGV4dCN7JGluZml4fS1jZW50ZXIgeyB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsgfVxcbiAgfVxcbn1cXG5cXG4vLyBUcmFuc2Zvcm1hdGlvblxcblxcbi50ZXh0LWxvd2VyY2FzZSAgeyB0ZXh0LXRyYW5zZm9ybTogbG93ZXJjYXNlICFpbXBvcnRhbnQ7IH1cXG4udGV4dC11cHBlcmNhc2UgIHsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSAhaW1wb3J0YW50OyB9XFxuLnRleHQtY2FwaXRhbGl6ZSB7IHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplICFpbXBvcnRhbnQ7IH1cXG5cXG4vLyBXZWlnaHQgYW5kIGl0YWxpY3NcXG5cXG4uZm9udC13ZWlnaHQtbGlnaHQgIHsgZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1saWdodCAhaW1wb3J0YW50OyB9XFxuLmZvbnQtd2VpZ2h0LW5vcm1hbCB7IGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQtbm9ybWFsICFpbXBvcnRhbnQ7IH1cXG4uZm9udC13ZWlnaHQtYm9sZCAgIHsgZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1ib2xkICFpbXBvcnRhbnQ7IH1cXG4uZm9udC1pdGFsaWMgICAgICAgIHsgZm9udC1zdHlsZTogaXRhbGljICFpbXBvcnRhbnQ7IH1cXG5cXG4vLyBDb250ZXh0dWFsIGNvbG9yc1xcblxcbi50ZXh0LXdoaXRlIHsgY29sb3I6ICNmZmYgIWltcG9ydGFudDsgfVxcblxcbkBlYWNoICRjb2xvciwgJHZhbHVlIGluICR0aGVtZS1jb2xvcnMge1xcbiAgQGluY2x1ZGUgdGV4dC1lbXBoYXNpcy12YXJpYW50KFxcXCIudGV4dC0jeyRjb2xvcn1cXFwiLCAkdmFsdWUpO1xcbn1cXG5cXG4udGV4dC1tdXRlZCB7IGNvbG9yOiAkdGV4dC1tdXRlZCAhaW1wb3J0YW50OyB9XFxuXFxuLy8gTWlzY1xcblxcbi50ZXh0LWhpZGUge1xcbiAgQGluY2x1ZGUgdGV4dC1oaWRlKCk7XFxufVxcblwiLFwiLy8gVGV4dCB0cnVuY2F0ZVxcbi8vIFJlcXVpcmVzIGlubGluZS1ibG9jayBvciBibG9jayBmb3IgcHJvcGVyIHN0eWxpbmdcXG5cXG5AbWl4aW4gdGV4dC10cnVuY2F0ZSgpIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxufVxcblwiLFwiLy8gc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XFxuXFxuLy8gVHlwb2dyYXBoeVxcblxcbkBtaXhpbiB0ZXh0LWVtcGhhc2lzLXZhcmlhbnQoJHBhcmVudCwgJGNvbG9yKSB7XFxuICAjeyRwYXJlbnR9IHtcXG4gICAgY29sb3I6ICRjb2xvciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgYSN7JHBhcmVudH0ge1xcbiAgICBAaW5jbHVkZSBob3Zlci1mb2N1cyB7XFxuICAgICAgY29sb3I6IGRhcmtlbigkY29sb3IsIDEwJSkgIWltcG9ydGFudDtcXG4gICAgfVxcbiAgfVxcbn1cXG5cIixcIi8vIENTUyBpbWFnZSByZXBsYWNlbWVudFxcbkBtaXhpbiB0ZXh0LWhpZGUoKSB7XFxuICAvLyBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZm9udC1mYW1pbHktbm8tbWlzc2luZy1nZW5lcmljLWZhbWlseS1rZXl3b3JkXFxuICBmb250OiAwLzAgYTtcXG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIHRleHQtc2hhZG93OiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IDA7XFxufVxcblwiLFwiLy8gc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XFxuXFxuLy8gVmlzaWJpbGl0eVxcblxcbkBtaXhpbiBpbnZpc2libGUoJHZpc2liaWxpdHkpIHtcXG4gIHZpc2liaWxpdHk6ICR2aXNpYmlsaXR5ICFpbXBvcnRhbnQ7XFxufVxcblwiLFwiLy9cXG4vLyBWaXNpYmlsaXR5IHV0aWxpdGllc1xcbi8vXFxuXFxuLnZpc2libGUge1xcbiAgQGluY2x1ZGUgaW52aXNpYmxlKHZpc2libGUpO1xcbn1cXG5cXG4uaW52aXNpYmxlIHtcXG4gIEBpbmNsdWRlIGludmlzaWJsZShoaWRkZW4pO1xcbn1cXG5cIixcIlxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcbkBpbXBvcnQgJ35Ac2Nzcy9jb25maWcvX3NldHRpbmdzLnNjc3MnO1xcbkBpbXBvcnQgJ35Ac2Nzcy9jb25maWcvX2Jvb3RzdHJhcC5zY3NzJztcXG5cXG4ucHJvZHVjdC1wYWdlICNwcm9kdWN0LWltYWdlcy1kcm9wem9uZSB7XFxuICAmLmZ1bGwge1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgfVxcblxcbiAgLmRyb3B6b25lLWxvYWRpbmcge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIG1pbi1oZWlnaHQ6IDEwcmVtO1xcbiAgfVxcblxcbiAgJi5kcm9wem9uZS1jb250YWluZXIge1xcbiAgICAuZHotcHJldmlldyB7XFxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG5cXG4gICAgICAuaXNjb3ZlciB7XFxuICAgICAgICBkaXNwbGF5OiBub25lO1xcbiAgICAgICAgbGVmdDogLTJweDtcXG4gICAgICAgIGJvdHRvbTogLTNweDtcXG4gICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgKyA0cHgpO1xcbiAgICAgICAgcGFkZGluZzogOXB4O1xcbiAgICAgIH1cXG4gICAgICAmLmlzLWNvdmVyIHtcXG4gICAgICAgIC5pc2NvdmVyIHtcXG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XFxuICAgICAgICB9XFxuICAgICAgfVxcblxcbiAgICAgICY6bm90KC5vcGVuZmlsZW1hbmFnZXIpIHtcXG4gICAgICAgIGJvcmRlcjogM3B4IHNvbGlkIHRyYW5zcGFyZW50O1xcblxcbiAgICAgICAgJjpob3ZlciB7XFxuICAgICAgICAgIGJvcmRlcjogM3B4IHNvbGlkICRwcmltYXJ5O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLmR6LWltYWdlIHtcXG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJGdyYXktMzAwO1xcbiAgICAgICAgICB3aWR0aDogMTMwcHg7XFxuICAgICAgICAgIGhlaWdodDogMTMwcHg7XFxuICAgICAgICAgIG1hcmdpbjogLTNweDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuXFxuICAgICAgJi5vcGVuZmlsZW1hbmFnZXIge1xcbiAgICAgICAgYm9yZGVyLXN0eWxlOiBkYXNoZWQ7XFxuICAgICAgICBtaW4td2lkdGg6IDEzMHB4O1xcblxcbiAgICAgICAgJjpob3ZlciB7XFxuICAgICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XFxuICAgICAgICB9XFxuXFxuICAgICAgICA+IGRpdiB7XFxuICAgICAgICAgIGJvcmRlcjogbm9uZTtcXG5cXG4gICAgICAgICAgaSB7XFxuICAgICAgICAgICAgZm9udC1zaXplOiAyLjVyZW07XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuXFxuICAgICAgaW1nIHtcXG4gICAgICAgIG1hcmdpbjogMDtcXG4gICAgICB9XFxuXFxuICAgICAgJjpob3ZlciB7XFxuICAgICAgICAuZHotaG92ZXIge1xcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNyk7XFxuXFxuICAgICAgICAgIC5kcmFnLWluZGljYXRvcixcXG4gICAgICAgICAgLm1kLWNoZWNrYm94IHtcXG4gICAgICAgICAgICBvcGFjaXR5OiAxO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcblxcbiAgICAgICYuc2VsZWN0ZWQge1xcbiAgICAgICAgLm1kLWNoZWNrYm94IHtcXG4gICAgICAgICAgb3BhY2l0eTogMTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgLmR6LWhvdmVyIHtcXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgdG9wOiAtM3B4O1xcbiAgICAgIGxlZnQ6IC0zcHg7XFxuICAgICAgd2lkdGg6IGNhbGMoMTAwJSArIDZweCk7XFxuICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgKyA2cHgpO1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XFxuICAgICAgdHJhbnNpdGlvbjogMC4yNXMgZWFzZS1vdXQ7XFxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICAgICAgei1pbmRleDogMTE7XFxuXFxuICAgICAgLmRyYWctaW5kaWNhdG9yIHtcXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgIHRvcDogMC41cmVtO1xcbiAgICAgICAgbGVmdDogMC41cmVtO1xcbiAgICAgICAgY29sb3I6ICNmZmZmZmY7XFxuICAgICAgICBvcGFjaXR5OiAwO1xcbiAgICAgICAgdHJhbnNpdGlvbjogMC4yNXMgZWFzZS1vdXQ7XFxuICAgICAgfVxcblxcbiAgICAgIC5tZC1jaGVja2JveCB7XFxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICBib3R0b206IDAuNXJlbTtcXG4gICAgICAgIGxlZnQ6IDAuNXJlbTtcXG4gICAgICAgIG9wYWNpdHk6IDA7XFxuICAgICAgICB0cmFuc2l0aW9uOiAwLjI1cyBlYXNlLW91dDtcXG5cXG4gICAgICAgIC5tZC1jaGVja2JveC1jb250cm9sOjpiZWZvcmUge1xcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlucHV0OmNoZWNrZWQgKyAubWQtY2hlY2tib3gtY29udHJvbDo6YmVmb3JlIHtcXG4gICAgICAgICAgYmFja2dyb3VuZDogJHByaW1hcnk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxufVxcblxcbi5wcm9kdWN0LXBhZ2UgI3Byb2R1Y3QtaW1hZ2VzLWNvbnRhaW5lciB7XFxuICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LWRvd24oeHMpIHtcXG4gICAgZmxleC13cmFwOiB3cmFwO1xcbiAgfVxcblxcbiAgI3Byb2R1Y3QtaW1hZ2VzLWRyb3B6b25lLmRyb3B6b25lIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgICBmbGV4LXdyYXA6IHdyYXA7XFxuXFxuICAgIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtZG93bih4cykge1xcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcXG4gICAgICB3aWR0aDogMTAwJTtcXG5cXG4gICAgICAuZHotcHJldmlldyB7XFxuICAgICAgICB3aWR0aDogMTAwcHg7XFxuICAgICAgICBoZWlnaHQ6IDEwMHB4O1xcbiAgICAgICAgbWluLWhlaWdodDogMTAwcHg7XFxuICAgICAgICBtYXJnaW46IDAuNXJlbTtcXG5cXG4gICAgICAgICYub3BlbmZpbGVtYW5hZ2VyIHtcXG4gICAgICAgICAgbWluLXdpZHRoOiAxMDBweDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGltZyB7XFxuICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcXG4gICAgICAgICAgbWF4LWhlaWdodDogMTAwJTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIC5kei1pbWFnZSB7XFxuICAgICAgICAgIHdpZHRoOiAxMDBweDtcXG4gICAgICAgICAgaGVpZ2h0OiAxMDBweDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG59XFxuXCIsXCIvKiBzdHlsZWxpbnQtZGlzYWJsZSAqL1xcblxcbi8vIENvbG9yIHN5c3RlbVxcbiR3aGl0ZTogI2ZmZjtcXG4kZ3JheS1kaXNhYmxlZDogI2VhZWJlYztcXG4kZ3JheS0xMDA6ICNmYWZiZmM7XFxuJGdyYXktMjAwOiAjZmFmYmZjO1xcbiRncmF5LTI1MDogI2ZhZmJmYztcXG4kZ3JheS0zMDA6ICNiYmNkZDI7XFxuJGdyYXktNDAwOiAjYmJjZGQyO1xcbiRncmF5LTQ1MDogI2IzYzdjZDtcXG4kZ3JheS01MDA6ICM2Yzg2OGU7XFxuJGdyYXktNTUwOiAjNzA4MDkwO1xcbiRncmF5LTYwMDogIzZjODY4ZTtcXG4kZ3JheS03MDA6ICMzNjNhNDE7XFxuJGdyYXktNzUwOiAjMzYzYTQxO1xcbiRncmF5LTgwMDogIzM2M2E0MTtcXG4kZ3JheS05MDA6ICMyODJiMzA7XFxuJGJsYWNrOiAjMDAwO1xcblxcbi8vIFBTIFZhcnNcXG4kZXh0cmEtbGlnaHQtZ3JheTogJGdyYXktMTAwO1xcbiRsaWdodC1ncmF5OiAkZ3JheS0zMDA7XFxuJG1lZGl1bS1ncmF5OiAkZ3JheS01MDA7XFxuJGRhcmstZ3JheTogJGdyYXktNzAwO1xcbiRleHRyYS1kYXJrLWdyYXk6ICRncmF5LTkwMDtcXG4kZ3JheS1saWdodDogJGxpZ2h0LWdyYXk7XFxuJGdyYXktbWVkaXVtOiAkbWVkaXVtLWdyYXk7XFxuJGdyYXktZGFyazogJGRhcmstZ3JheTtcXG4kZ3JheS1zb2Z0OiAkZ3JheS0yMDA7XFxuJGJhY2tncm91bmQtY29sb3I6ICNlZmYxZjI7XFxuJHByaW1hcnktbGlnaHRlbjogI2Y0ZmNmZDtcXG4kbG9jYWwtZm9udDogZmFsc2UgIWRlZmF1bHQ7XFxuXFxuJGJsdWU6ICMyNWI5ZDc7XFxuJGluZGlnbzogIzY2MTBmMiAhZGVmYXVsdDtcXG4kcHVycGxlOiAjNmY0MmMxICFkZWZhdWx0O1xcbiRwaW5rOiAjZTgzZThjICFkZWZhdWx0O1xcbiRyZWQ6ICNmNTRjM2U7XFxuJG9yYW5nZTogI2ZkN2UxNCAhZGVmYXVsdDtcXG4keWVsbG93OiAjZmFiMDAwO1xcbiRncmVlbjogIzcwYjU4MDtcXG4kb3JhbmdlOiAjZmQ3ZTE0ICFkZWZhdWx0O1xcbiR0ZWFsOiAjMjBjOTk3ICFkZWZhdWx0O1xcbiRjeWFuOiAkYmx1ZTtcXG4kbGlnaHQtYmx1ZTogI2Y0ZmNmZDtcXG5cXG4vLyBtYWluIGJ1dHRvbiBiYWNrZ3JvdW5kIGNvbG9yc1xcbiRwcmltYXJ5LWhvdmVyOiAjN2NkNWU3O1xcbiRwcmltYXJ5LWFjdGl2ZTogIzIxYTZjMTtcXG4kcHJpbWFyeS1kaXNhYmxlZDogI2QzZjFmNztcXG4kc2Vjb25kYXJ5LWhvdmVyOiAjYjdjZWQzO1xcbiRzZWNvbmRhcnktYWN0aXZlOiAjODg5ZGEyO1xcbiRkYW5nZXItaG92ZXI6ICNmZGUxZTE7XFxuJG5vdGljZTogI2RmZjVmOTtcXG5cXG4kcHJpbWFyeTogJGJsdWUgIWRlZmF1bHQ7XFxuJHNlY29uZGFyeTogJG1lZGl1bS1ncmF5O1xcbiRzdWNjZXNzOiAkZ3JlZW4gIWRlZmF1bHQ7XFxuJGluZm86ICRjeWFuICFkZWZhdWx0O1xcbiR3YXJuaW5nOiAkeWVsbG93ICFkZWZhdWx0O1xcbiRkYW5nZXI6ICRyZWQgIWRlZmF1bHQ7XFxuJGxpZ2h0OiAkZ3JheS0xMDAgIWRlZmF1bHQ7XFxuJGRhcms6ICRncmF5LTgwMCAhZGVmYXVsdDtcXG5cXG4kdG9hc3Qtc3VjY2VzczogIzUzZDU3MiAhZGVmYXVsdDtcXG4kdG9hc3Qtd2FybmluZzogI2ZhYjAwMCAhZGVmYXVsdDtcXG5cXG4kYnJhbmQtcHJpbWFyeTogJHByaW1hcnkgIWRlZmF1bHQ7XFxuJGJyYW5kLXNlY29uZGFyeTogJHNlY29uZGFyeSAhZGVmYXVsdDtcXG4kYnJhbmQtaW5mbzogIzViYzBkZSAhZGVmYXVsdDtcXG4kYnJhbmQtd2FybmluZzogI2YwYWQ0ZSAhZGVmYXVsdDtcXG4kYnJhbmQtc3VjY2VzczogJHN1Y2Nlc3MgIWRlZmF1bHQ7XFxuJGJyYW5kLWRhbmdlcjogJGRhbmdlciAhZGVmYXVsdDtcXG5cXG4kYnRuLXByaW1hcnktYmc6ICRwcmltYXJ5LWhvdmVyO1xcbiRidG4tc2Vjb25kYXJ5LWJvcmRlcjogIzAwMDtcXG4kYnRuLWluZm8tYmc6ICRicmFuZC1pbmZvICFkZWZhdWx0O1xcbiRidG4tc3VjY2Vzcy1iZzogJGJyYW5kLXN1Y2Nlc3MgIWRlZmF1bHQ7XFxuJGJ0bi13YXJuaW5nLWJnOiAkYnJhbmQtd2FybmluZyAhZGVmYXVsdDtcXG4kYnRuLWRhbmdlci1iZzogJGJyYW5kLWRhbmdlciAhZGVmYXVsdDtcXG5cXG4kdGhlbWUtY29sb3JzOiAoXFxuICBcXFwicHJpbWFyeVxcXCI6ICRwcmltYXJ5LFxcbiAgXFxcInNlY29uZGFyeVxcXCI6ICRzZWNvbmRhcnksXFxuICBcXFwic3VjY2Vzc1xcXCI6ICRzdWNjZXNzLFxcbiAgXFxcImluZm9cXFwiOiAkaW5mbyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogJHdhcm5pbmcsXFxuICBcXFwiZGFuZ2VyXFxcIjogJGRhbmdlcixcXG4gIFxcXCJsaWdodFxcXCI6ICRsaWdodCxcXG4gIFxcXCJkYXJrXFxcIjogJGRhcmtcXG4pO1xcblxcbiRhbGVydHMtYmFja2dyb3VuZC1jb2xvcnM6IChcXG4gIFxcXCJzdWNjZXNzXFxcIjogI2NiZjJkNCxcXG4gIFxcXCJpbmZvXFxcIjogI2JlZWFmMyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogI2ZmZmJkMyxcXG4gIFxcXCJkYW5nZXJcXFwiOiAjZmJjNmMzXFxuKTtcXG5cXG4kYWxlcnRzLXNlY29uZC1jb2xvcnM6IChcXG4gIFxcXCJzdWNjZXNzXFxcIjogIzUzZDU3MixcXG4gIFxcXCJpbmZvXFxcIjogIzI1YjlkNyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogI2ZhYjAwMCxcXG4gIFxcXCJkYW5nZXJcXFwiOiAjZjQ0MzM2XFxuKTtcXG5cXG4kdGhlbWUtYWxlcnRzLWljb25zOiAoXFxuICBzdWNjZXNzOiBcXFwiXFxcXEU1Q0FcXFwiLFxcbiAgaW5mbzogXFxcIlxcXFxlODhlXFxcIixcXG4gIHdhcm5pbmc6IFxcXCJcXFxcRTAwMlxcXCIsXFxuICBkYW5nZXI6IFxcXCJcXFxcZTAwMFxcXCJcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtaWNvbnM6IChcXG4gIFxcXCJwcmltYXJ5XFxcIjogJHByaW1hcnksXFxuICBcXFwic2Vjb25kYXJ5XFxcIjogJHNlY29uZGFyeSxcXG4gIFxcXCJzdWNjZXNzXFxcIjogJHN1Y2Nlc3MsXFxuICBcXFwiaW5mb1xcXCI6ICRpbmZvLFxcbiAgXFxcIndhcm5pbmdcXFwiOiAjZmFiMDAwLFxcbiAgXFxcImRhbmdlclxcXCI6ICRkYW5nZXIsXFxuICBcXFwibGlnaHRcXFwiOiAkbGlnaHRcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtaG92ZXI6IChcXG4gIHByaW1hcnk6ICRwcmltYXJ5LWhvdmVyLFxcbiAgc2Vjb25kYXJ5OiAkc2Vjb25kYXJ5LWhvdmVyLFxcbiAgc3VjY2VzczogIzliY2JhNixcXG4gIGluZm86ICRwcmltYXJ5LWhvdmVyLFxcbiAgd2FybmluZzogI2U2YjA0NSxcXG4gIGRhbmdlcjogI2U3NmQ3YSxcXG4gIGxpZ2h0OiAkZ3JheS04MDAsXFxuICBkYXJrOiAkZ3JheS0xMDAsXFxuICBkZWZhdWx0OiAkbGlnaHQtYmx1ZVxcbik7XFxuXFxuJHRoZW1lLWNvbG9ycy1hY3RpdmU6IChcXG4gIHByaW1hcnk6ICRwcmltYXJ5LWFjdGl2ZSxcXG4gIHNlY29uZGFyeTogJHNlY29uZGFyeS1hY3RpdmUsXFxuICBzdWNjZXNzOiAjNWE5MTY2LFxcbiAgaW5mbzogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcImluZm9cXFwiKSwgMTAlKSxcXG4gIHdhcm5pbmc6IGRhcmtlbihtYXAtZ2V0KCR0aGVtZS1jb2xvcnMsIFxcXCJ3YXJuaW5nXFxcIiksIDEwJSksXFxuICBkYW5nZXI6ICNjMzM2MmIsXFxuICBsaWdodDogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcImxpZ2h0XFxcIiksIDEwJSksXFxuICBkYXJrOiBkYXJrZW4obWFwLWdldCgkdGhlbWUtY29sb3JzLCBcXFwiZGFya1xcXCIpLCAxMCUpLFxcbiAgZGVmYXVsdDogJHByaW1hcnlcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtYmFja2dyb3VuZDogKFxcbiAgcHJpbWFyeTogI2RmZjVmOSxcXG4gIHNlY29uZGFyeTogJGJsYWNrLFxcbiAgc3VjY2VzczogI2Q2ZjBkOCxcXG4gIGluZm86ICNkZmY1ZjksXFxuICB3YXJuaW5nOiAjZmZmYmQzLFxcbiAgZGFuZ2VyOiAjZmRlMWUxLFxcbiAgbGlnaHQ6ICRncmF5LTIwMCxcXG4gIGRhcms6ICRncmF5LTcwMFxcbik7XFxuXFxuJHRoZW1lLWNvbG9ycy1zaGFkb3c6IChcXG4gIHByaW1hcnk6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIiksXFxuICBzZWNvbmRhcnk6ICRibGFjayxcXG4gIHN1Y2Nlc3M6IHRoZW1lLWNvbG9yKFxcXCJzdWNjZXNzXFxcIiksXFxuICBpbmZvOiB0aGVtZS1jb2xvcihcXFwiaW5mb1xcXCIpLFxcbiAgd2FybmluZzogdGhlbWUtY29sb3IoXFxcIndhcm5pbmdcXFwiKSxcXG4gIGRhbmdlcjogdGhlbWUtY29sb3IoXFxcImRhbmdlclxcXCIpLFxcbiAgbGlnaHQ6IHRoZW1lLWNvbG9yKFxcXCJsaWdodFxcXCIpLFxcbiAgZGFyazogdGhlbWUtY29sb3IoXFxcImRhcmtcXFwiKVxcbik7XFxuXFxuLy8gT3B0aW9uc1xcbiRlbmFibGUtY2FyZXQ6IHRydWUgIWRlZmF1bHQ7XFxuJGVuYWJsZS1yb3VuZGVkOiB0cnVlO1xcbiRlbmFibGUtc2hhZG93czogdHJ1ZTtcXG4kZW5hYmxlLWdyYWRpZW50czogZmFsc2UgIWRlZmF1bHQ7XFxuJGVuYWJsZS10cmFuc2l0aW9uczogdHJ1ZSAhZGVmYXVsdDtcXG4kZW5hYmxlLWdyaWQtY2xhc3NlczogdHJ1ZSAhZGVmYXVsdDtcXG4kZW5hYmxlLXByaW50LXN0eWxlczogdHJ1ZSAhZGVmYXVsdDtcXG5cXG4vLyBTcGFjaW5nXFxuJHNwYWNlcjogMS44NzVyZW07XFxuXFxuJHNwYWNlcnM6IChcXG4gIDA6IDAsXFxuICAxOiAoXFxuICAgICRzcGFjZXIgLyA2XFxuICApLFxcbiAgMjogKFxcbiAgICAkc3BhY2VyIC8gM1xcbiAgKSxcXG4gIDM6IChcXG4gICAgJHNwYWNlciAvIDJcXG4gICksXFxuICA0OiAkc3BhY2VyLFxcbiAgNTogKFxcbiAgICAkc3BhY2VyICogMlxcbiAgKVxcbik7XFxuXFxuLy8gQm9keVxcbiRib2R5LWJnOiAkd2hpdGUgIWRlZmF1bHQ7XFxuJGJvZHktY29sb3I6ICRkYXJrLWdyYXk7XFxuXFxuLy8gTGlua3NcXG4kbGluay1ob3Zlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSAhZGVmYXVsdDtcXG4kbGluay1ob3Zlci1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuXFxuLy8gUGFyYWdyYXBoc1xcbiRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTogMXJlbTtcXG5cXG4vLyBHcmlkIGJyZWFrcG9pbnRzXFxuJGdyaWQtYnJlYWtwb2ludHM6IChcXG4gIHhzOiAwLFxcbiAgc206IDU0NHB4LFxcbiAgbWQ6IDc2OHB4LFxcbiAgbGc6IDEwMjRweCxcXG4gIHhsOiAxMzAwcHgsXFxuICB4eGw6IDE2MDBweCAvLyBQUyBjdXN0b21cXG4pO1xcbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRncmlkLWJyZWFrcG9pbnRzLCBcXFwiJGdyaWQtYnJlYWtwb2ludHNcXFwiKTtcXG5AaW5jbHVkZSBfYXNzZXJ0LXN0YXJ0cy1hdC16ZXJvKCRncmlkLWJyZWFrcG9pbnRzKTtcXG5cXG4vLyBHcmlkIGNvbnRhaW5lcnNcXG4kY29udGFpbmVyLW1heC13aWR0aHM6IChcXG4gIHNtOiA1NzZweCxcXG4gIG1kOiA3MjBweCxcXG4gIGxnOiA5NzJweCxcXG4gIHhsOiAxMjQwcHhcXG4pO1xcbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRjb250YWluZXItbWF4LXdpZHRocywgXFxcIiRjb250YWluZXItbWF4LXdpZHRoc1xcXCIpO1xcblxcbi8vIEdyaWQgY29sdW1uc1xcbi8vJGdyaWQtY29sdW1uczogICAgICAgICAgICAgICAgMTIgIWRlZmF1bHQ7XFxuJGdyaWQtZ3V0dGVyLXdpZHRoOiAxLjg3NXJlbSAhZGVmYXVsdDtcXG5cXG4vLyBDb21wb25lbnRzXFxuLy8kbGluZS1oZWlnaHQtbGc6ICAgICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XFxuLy8kbGluZS1oZWlnaHQtc206ICAgICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XFxuXFxuLy8kYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgICAxcHggIWRlZmF1bHQ7XFxuLy8kYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuXFxuJGJvcmRlci1yYWRpdXM6IDRweCAhZGVmYXVsdDtcXG4vLyRib3JkZXItcmFkaXVzLWxnOiAgICAgICAgICAgIC4zcmVtICFkZWZhdWx0O1xcbi8vJGJvcmRlci1yYWRpdXMtc206ICAgICAgICAgICAgLjJyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kY29tcG9uZW50LWFjdGl2ZS1jb2xvcjogICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kY29tcG9uZW50LWFjdGl2ZS1iZzogICAgICAgICB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpICFkZWZhdWx0O1xcblxcbiRjYXJldC13aWR0aDogLjI1cmVtO1xcblxcbi8vJHRyYW5zaXRpb24tYmFzZTogICAgICAgICAgICAgYWxsIC4ycyBlYXNlLWluLW91dCAhZGVmYXVsdDtcXG4vLyR0cmFuc2l0aW9uLWZhZGU6ICAgICAgICAgICAgIG9wYWNpdHkgLjE1cyBsaW5lYXIgIWRlZmF1bHQ7XFxuLy8kdHJhbnNpdGlvbi1jb2xsYXBzZTogICAgICAgICBoZWlnaHQgLjM1cyBlYXNlICFkZWZhdWx0O1xcblxcbi8vIEZvbnRzXFxuJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWY6IFxcXCJPcGVuIFNhbnNcXFwiLCBoZWx2ZXRpY2EsIGFyaWFsLCBzYW5zLXNlcmlmO1xcbi8vJGZvbnQtZmFtaWx5LW1vbm9zcGFjZTogICAgICAgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcXFwiTGliZXJhdGlvbiBNb25vXFxcIiwgXFxcIkNvdXJpZXIgTmV3XFxcIiwgbW9ub3NwYWNlICFkZWZhdWx0O1xcbi8vJGZvbnQtZmFtaWx5LWJhc2U6ICAgICAgICAgICAgJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWYgIWRlZmF1bHQ7XFxuXFxuJGZvbnQtc2l6ZS1iYXNlOiAuODc1cmVtO1xcbiRmb250LXNpemUtbGc6IDFyZW07XFxuJGZvbnQtc2l6ZS1zbTogLjc1cmVtO1xcbiRmb250LXNpemUteHM6IC42MjVyZW07IC8vIFBTIGN1c3RvbVxcblxcbi8vJGZvbnQtd2VpZ2h0LWxpZ2h0OiAgICAgICAgICAgMzAwO1xcbi8vJGZvbnQtd2VpZ2h0LW5vcm1hbDogICAgICAgICAgNDAwO1xcbiRmb250LXdlaWdodC1zZW1pYm9sZDogNjAwO1xcbiRmb250LXdlaWdodC1ib2xkOiA3MDA7XFxuXFxuJGgxLWZvbnQtc2l6ZTogMS41cmVtO1xcbiRoMi1mb250LXNpemU6IDEuMjVyZW07XFxuJGgzLWZvbnQtc2l6ZTogMXJlbTtcXG4kaDQtZm9udC1zaXplOiAuODc1cmVtO1xcbiRoNS1mb250LXNpemU6IC43NXJlbTtcXG4kaDYtZm9udC1zaXplOiAuNjI1cmVtO1xcblxcbi8vJGhlYWRpbmdzLW1hcmdpbi1ib3R0b206ICAgICAgKCRzcGFjZXIgLyAyKSAhZGVmYXVsdDtcXG4kaGVhZGluZ3MtZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1zYW5zLXNlcmlmO1xcbiRoZWFkaW5ncy1mb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LWJvbGQ7XFxuJGhlYWRpbmdzLWNvbG9yOiAkYm9keS1jb2xvcjtcXG5cXG4vLyRkaXNwbGF5MS1zaXplOiAgICAgICAgICAgICAgIDZyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTItc2l6ZTogICAgICAgICAgICAgICA1LjVyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTMtc2l6ZTogICAgICAgICAgICAgICA0LjVyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTQtc2l6ZTogICAgICAgICAgICAgICAzLjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZGlzcGxheTEtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTItd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTMtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTQtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheS1saW5lLWhlaWdodDogICAgICAgICAkaGVhZGluZ3MtbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kbGVhZC1mb250LXNpemU6ICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogMS4yNSkgIWRlZmF1bHQ7XFxuLy8kbGVhZC1mb250LXdlaWdodDogICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuXFxuLy8kc21hbGwtZm9udC1zaXplOiAgICAgICAgICAgICA4MCUgIWRlZmF1bHQ7XFxuXFxuJHRleHQtbXV0ZWQ6ICRtZWRpdW0tZ3JheTtcXG5cXG4vLyRibG9ja3F1b3RlLXNtYWxsLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG4vLyRibG9ja3F1b3RlLWZvbnQtc2l6ZTogICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAxLjI1KSAhZGVmYXVsdDtcXG5cXG4kaHItYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRoci1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuLy8kbWFyay1wYWRkaW5nOiAgICAgICAgICAgICAgICAuMmVtICFkZWZhdWx0O1xcblxcbi8vJGR0LWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuXFxuLy8ka2JkLWJveC1zaGFkb3c6ICAgICAgICAgICAgICBpbnNldCAwIC0uMXJlbSAwIHJnYmEoJGJsYWNrLCAuMjUpICFkZWZhdWx0O1xcbi8vJG5lc3RlZC1rYmQtZm9udC13ZWlnaHQ6ICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuXFxuLy8kbGlzdC1pbmxpbmUtcGFkZGluZzogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRtYXJrLWJnOiAgICAgICAgICAgICAgICAgICAgICNmY2Y4ZTMgIWRlZmF1bHQ7XFxuXFxuLy8kaHItbWFyZ2luLXk6ICAgICAgICAgICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xcblxcbi8vIFRhYmxlc1xcbiR0YWJsZS1jZWxsLXBhZGRpbmc6IC40cmVtO1xcbiR0YWJsZS1jZWxsLXBhZGRpbmctc206IC4yNXJlbTtcXG5cXG4vLyR0YWJsZS1iZzogICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xcbiR0YWJsZS1hY2NlbnQtYmc6ICRiYWNrZ3JvdW5kLWNvbG9yO1xcbiR0YWJsZS1ob3Zlci1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4kdGFibGUtYWN0aXZlLWJnOiB0aGVtZS1jb2xvci1ob3ZlcihcXFwicHJpbWFyeVxcXCIpO1xcblxcbi8vJHRhYmxlLWJvcmRlci13aWR0aDogICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyR0YWJsZS1ib3JkZXItY29sb3I6ICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcXG5cXG4kdGFibGUtaGVhZC1iZzogJGJhY2tncm91bmQtY29sb3I7XFxuJHRhYmxlLWhlYWQtY29sb3I6ICRib2R5LWNvbG9yO1xcblxcbiR0YWJsZS1kYXJrLWJnOiAkYm9keS1jb2xvcjtcXG4kdGFibGUtZGFyay1hY2NlbnQtYmc6ICRleHRyYS1kYXJrLWdyYXk7XFxuJHRhYmxlLWRhcmstaG92ZXItYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuJHRhYmxlLWRhcmstYm9yZGVyLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuLy8kdGFibGUtZGFyay1jb2xvcjogICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcXG5cXG4vLyBCdXR0b25zXFxuJGlucHV0LWJ0bi1wYWRkaW5nLXk6IC4zNzVyZW07XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXg6IC44MzhyZW07XFxuLy8kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0OiAgICAgICAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1idG4tZm9jdXMtd2lkdGg6ICAgICAgIC4ycmVtICFkZWZhdWx0O1xcbi8vJGlucHV0LWJ0bi1mb2N1cy1jb2xvcjogICAgICAgcmdiYSgkY29tcG9uZW50LWFjdGl2ZS1iZywgLjI1KSAhZGVmYXVsdDtcXG4vLyRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdzogIDAgMCAwICRpbnB1dC1idG4tZm9jdXMtd2lkdGggJGlucHV0LWJ0bi1mb2N1cy1jb2xvciAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYnRuLXBhZGRpbmcteS1zbTogLjMxM3JlbTtcXG4kaW5wdXQtYnRuLXBhZGRpbmcteC1zbTogLjYyNXJlbTtcXG4vLyRpbnB1dC1idG4tbGluZS1oZWlnaHQtc206ICAgICRsaW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYnRuLXBhZGRpbmcteS1sZzogLjQzOHJlbTtcXG4kaW5wdXQtYnRuLXBhZGRpbmcteC1sZzogLjgzOHJlbTtcXG4vLyRpbnB1dC1idG4tbGluZS1oZWlnaHQtbGc6ICAgICRsaW5lLWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1idG4tYm9yZGVyLXdpZHRoOiAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuLy8gQnV0dG9uc1xcbiRidG4tcGFkZGluZy15OiAuNXJlbSAhZGVmYXVsdDtcXG4kYnRuLXBhZGRpbmcteDogMXJlbSAhZGVmYXVsdDtcXG4vLyRidG4tbGluZS1oZWlnaHQ6ICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLXBhZGRpbmcteS1zbTogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1zbSAhZGVmYXVsdDtcXG4vLyRidG4tcGFkZGluZy14LXNtOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LXNtICFkZWZhdWx0O1xcbi8vJGJ0bi1saW5lLWhlaWdodC1zbTogICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4vLyRidG4tcGFkZGluZy15LWxnOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LWxnICFkZWZhdWx0O1xcbi8vJGJ0bi1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGcgIWRlZmF1bHQ7XFxuLy8kYnRuLWxpbmUtaGVpZ2h0LWxnOiAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGJ0bi1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuJGJ0bi1mb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LXNlbWlib2xkO1xcbiRidG4tYm94LXNoYWRvdzogbm9uZTtcXG4vLyRidG4tZm9jdXMtd2lkdGg6ICAgICAgICAgICAgICRpbnB1dC1idG4tZm9jdXMtd2lkdGggIWRlZmF1bHQ7XFxuJGJ0bi1mb2N1cy1ib3gtc2hhZG93OiBub25lO1xcbi8vJGJ0bi1kaXNhYmxlZC1vcGFjaXR5OiAgICAgICAgLjY1ICFkZWZhdWx0O1xcbiRidG4tYWN0aXZlLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuLy8kYnRuLWxpbmstZGlzYWJsZWQtY29sb3I6ICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLWJsb2NrLXNwYWNpbmcteTogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4kYnRuLWJvcmRlci1yYWRpdXM6IDRweDtcXG4vLyRidG4tYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xcbi8vJGJ0bi1ib3JkZXItcmFkaXVzLXNtOiAgICAgICAgJGJvcmRlci1yYWRpdXMtc20gIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLXRyYW5zaXRpb246ICAgICAgICAgICAgICBjb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XFxuXFxuLy8gRm9ybXNcXG4kaW5wdXQtcGFkZGluZy15OiAuMzc1cmVtO1xcbiRpbnB1dC1wYWRkaW5nLXg6IC40Mzc1cmVtO1xcbi8vJGlucHV0LWxpbmUtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtcGFkZGluZy15LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktc20gIWRlZmF1bHQ7XFxuLy8kaW5wdXQtcGFkZGluZy14LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtc20gIWRlZmF1bHQ7XFxuLy8kaW5wdXQtbGluZS1oZWlnaHQtc206ICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1wYWRkaW5nLXktbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1saW5lLWhlaWdodC1sZzogICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kaW5wdXQtZGlzYWJsZWQtYmc6ICNlY2VlZWY7XFxuXFxuJGlucHV0LWNvbG9yOiAkYm9keS1jb2xvcjtcXG4kaW5wdXQtYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRpbnB1dC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kaW5wdXQtYm94LXNoYWRvdzogbm9uZTtcXG5cXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzLWxnOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzLXNtOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1zbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1mb2N1cy1iZzogICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYmcgIWRlZmF1bHQ7XFxuJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvcjogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRpbnB1dC1mb2N1cy1jb2xvcjogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtZm9jdXMtd2lkdGg6ICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1mb2N1cy13aWR0aCAhZGVmYXVsdDtcXG4kaW5wdXQtZm9jdXMtYm94LXNoYWRvdzogbm9uZTtcXG5cXG4kaW5wdXQtcGxhY2Vob2xkZXItY29sb3I6ICRtZWRpdW0tZ3JheTtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtYm9yZGVyOiAgICAgICAgICAgICAgICAgICAkaW5wdXQtYm9yZGVyLXdpZHRoICogMiAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXI6ICAgICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogJGlucHV0LWJ0bi1saW5lLWhlaWdodCkgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXkgKiAyKSAhZGVmYXVsdDtcXG4kaW5wdXQtaGVpZ2h0OiAyLjE4OHJlbTtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXItc206ICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1zbSAqICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20pICsgKCRpbnB1dC1idG4tcGFkZGluZy15LXNtICogMikgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtaGVpZ2h0LXNtOiAgICAgICAgICAgICAgICAgICAgICAgY2FsYygjeyRpbnB1dC1oZWlnaHQtaW5uZXItc219ICsgI3skaW5wdXQtaGVpZ2h0LWJvcmRlcn0pICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWhlaWdodC1pbm5lci1sZzogICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWxnICogJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZykgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXktbGcgKiAyKSAhZGVmYXVsdDtcXG4kaW5wdXQtaGVpZ2h0LWxnOiAyLjE4OHJlbTtcXG5cXG4vLyRpbnB1dC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xcblxcbi8vJGZvcm0tdGV4dC1tYXJnaW4tdG9wOiAgICAgICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLWNoZWNrLWlucHV0LWd1dHRlcjogICAgICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcbi8vJGZvcm0tY2hlY2staW5wdXQtbWFyZ2luLXk6ICAgICAgICAgICAgIC4zcmVtICFkZWZhdWx0O1xcbi8vJGZvcm0tY2hlY2staW5wdXQtbWFyZ2luLXg6ICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLWNoZWNrLWlubGluZS1tYXJnaW4teDogICAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kZm9ybS1jaGVjay1pbmxpbmUtaW5wdXQtbWFyZ2luLXg6ICAgICAgLjMxMjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZm9ybS1ncm91cC1tYXJnaW4tYm90dG9tOiAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1ncm91cC1hZGRvbi1jb2xvcjogICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuJGlucHV0LWdyb3VwLWFkZG9uLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG4vLyRpbnB1dC1ncm91cC1hZGRvbi1ib3JkZXItY29sb3I6ICAgICAgICAkaW5wdXQtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWd1dHRlcjogICAgICAgICAgICAgICAgIDEuNXJlbSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1zcGFjZXIteDogICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1zaXplOiAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJnOiAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1iZy1zaXplOiAgICAgIDUwJSA1MCUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJveC1zaGFkb3c6ICAgaW5zZXQgMCAuMjVyZW0gLjI1cmVtIHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWRpc2FibGVkLWJnOiAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtbGFiZWwtZGlzYWJsZWQtY29sb3I6ICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3I6ICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1iZzogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWRpc2FibGVkLWJnOiAgcmdiYSh0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpLCAuNSkgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtYm94LXNoYWRvdzogICBub25lICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1mb2N1cy1ib3gtc2hhZG93OiAgICAgMCAwIDAgMXB4ICRib2R5LWJnLCAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1jb2xvcjogICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICAgICAgIGxpZ2h0ZW4oJGNvbXBvbmVudC1hY3RpdmUtYmcsIDM1JSkgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1ib3gtc2hhZG93OiAgICBub25lICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1czogICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pY29uLWNoZWNrZWQ6ICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDggOCclM0UlM0NwYXRoIGZpbGw9JyN7JGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWNvbG9yfScgZD0nTTYuNTY0Ljc1bC0zLjU5IDMuNjEyLTEuNTM4LTEuNTVMMCA0LjI2IDIuOTc0IDcuMjUgOCAyLjE5M3onLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWJnOiAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtY29sb3I6ICRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWljb24taW5kZXRlcm1pbmF0ZTogIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA0JyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtY29sb3J9JyBkPSdNMCAyaDQnLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWJveC1zaGFkb3c6IG5vbmUgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLXJhZGlvLWluZGljYXRvci1ib3JkZXItcmFkaXVzOiAgICAgICAgICA1MCUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXJhZGlvLWluZGljYXRvci1pY29uLWNoZWNrZWQ6ICAgICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nLTQgLTQgOCA4JyUzRSUzQ2NpcmNsZSByPSczJyBmaWxsPScjeyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvcn0nLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLXNlbGVjdC1wYWRkaW5nLXk6ICAgICAgICAgICAuMzc1cmVtICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtcGFkZGluZy14OiAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1oZWlnaHQ6ICAgICAgICAgICAgICAkaW5wdXQtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yLXBhZGRpbmc6ICAgMXJlbSAhZGVmYXVsdDsgLy8gRXh0cmEgcGFkZGluZyB0byBhY2NvdW50IGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIGJhY2tncm91bmQtaW1hZ2UgYmFzZWQgaW5kaWNhdG9yXFxuLy8kY3VzdG9tLXNlbGVjdC1saW5lLWhlaWdodDogICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtY29sb3I6ICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWRpc2FibGVkLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuLy8kY3VzdG9tLXNlbGVjdC1iZzogICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGN1c3RvbS1zZWxlY3QtZGlzYWJsZWQtYmc6ICRpbnB1dC1kaXNhYmxlZC1iZztcXG4kY3VzdG9tLXNlbGVjdC1iZy1zaXplOiA4cHggMTBweCAhZGVmYXVsdDsgLy8gSW4gcGl4ZWxzIGJlY2F1c2UgaW1hZ2UgZGltZW5zaW9uc1xcbiRjdXN0b20tc2VsZWN0LWluZGljYXRvci1jb2xvcjogJGlucHV0LWNvbG9yO1xcbi8vJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yOiAgICAgICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0IDUnJTNFJTNDcGF0aCBmaWxsPScjeyRjdXN0b20tc2VsZWN0LWluZGljYXRvci1jb2xvcn0nIGQ9J00yIDBMMCAyaDR6bTAgNUwwIDNoNHonLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1ib3JkZXItd2lkdGg6ICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWJvcmRlci1jb2xvcjogICAgICAgICRpbnB1dC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1ib3JkZXItcmFkaXVzOiAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4kY3VzdG9tLXNlbGVjdC1mb2N1cy1ib3JkZXItY29sb3I6ICRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3I7XFxuJGN1c3RvbS1zZWxlY3QtZm9jdXMtYm94LXNoYWRvdzogJGlucHV0LWZvY3VzLWJveC1zaGFkb3c7XFxuXFxuLy8kY3VzdG9tLXNlbGVjdC1mb250LXNpemUtc206ICAgICAgICA3NSUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1oZWlnaHQtc206ICAgICAgICAgICAkaW5wdXQtaGVpZ2h0LXNtICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1zZWxlY3QtZm9udC1zaXplLWxnOiAgICAgICAgMTI1JSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWhlaWdodC1sZzogICAgICAgICAgICRpbnB1dC1oZWlnaHQtbGcgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWZpbGUtaGVpZ2h0OiAgICAgICAgICAgICAgICAkaW5wdXQtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWZvY3VzLWJvcmRlci1jb2xvcjogICAgJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLWZpbGUtZm9jdXMtYm94LXNoYWRvdzogJGlucHV0LWZvY3VzLWJveC1zaGFkb3c7XFxuXFxuLy8kY3VzdG9tLWZpbGUtcGFkZGluZy15OiAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1wYWRkaW5nLXg6ICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1jb2xvcjogICAgICAgICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1iZzogICAgICAgICAgICAgICAgICAgICRpbnB1dC1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItd2lkdGg6ICAgICAgICAgICRpbnB1dC1idG4tYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJvcmRlci1jb2xvcjogICAgICAgICAgJGlucHV0LWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItcmFkaXVzOiAgICAgICAgICRpbnB1dC1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJveC1zaGFkb3c6ICAgICAgICAgICAgJGlucHV0LWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYnV0dG9uLWNvbG9yOiAgICAgICAgICAkY3VzdG9tLWZpbGUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYnV0dG9uLWJnOiAgICAgICAgICAgICAkaW5wdXQtZ3JvdXAtYWRkb24tYmcgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtdGV4dDogKFxcbi8vICAgICAgICBlbjogXFxcIkJyb3dzZVxcXCJcXG4vLykgIWRlZmF1bHQ7XFxuXFxuJGN1cnNvci1kaXNhYmxlZDogbm90LWFsbG93ZWQ7IC8vIFBTIGN1c3RvbVxcblxcbi8vIEZvcm0gdmFsaWRhdGlvblxcbi8vJGZvcm0tZmVlZGJhY2stbWFyZ2luLXRvcDogICAgICAgICAgJGZvcm0tdGV4dC1tYXJnaW4tdG9wICFkZWZhdWx0O1xcbi8vJGZvcm0tZmVlZGJhY2stZm9udC1zaXplOiAgICAgICAgICAgJHNtYWxsLWZvbnQtc2l6ZSAhZGVmYXVsdDtcXG4kZm9ybS1mZWVkYmFjay12YWxpZC1jb2xvcjogdGhlbWUtY29sb3IoXFxcInN1Y2Nlc3NcXFwiKTtcXG4kZm9ybS1mZWVkYmFjay1pbnZhbGlkLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwiZGFuZ2VyXFxcIik7XFxuJGZvcm0tZmVlZGJhY2std2FybmluZy1jb2xvcjogdGhlbWUtY29sb3IoXFxcIndhcm5pbmdcXFwiKTsgLy8gUFMgY3VzdG9tXFxuXFxuLy8gRHJvcGRvd25zXFxuLy8kZHJvcGRvd24tbWluLXdpZHRoOiAgICAgICAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tcGFkZGluZy15OiAwO1xcbi8vJGRyb3Bkb3duLXBhZGRpbmcteTogICAgICAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tc3BhY2VyOiAgICAgICAgICAgICAgICAgICAuMTI1cmVtICFkZWZhdWx0O1xcbi8vJGRyb3Bkb3duLWJnOiAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRkcm9wZG93bi1ib3JkZXItY29sb3I6ICRsaWdodC1ncmF5O1xcbi8vJGRyb3Bkb3duLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRkcm9wZG93bi1kaXZpZGVyLWJnOiAkbGlnaHQtZ3JheTtcXG4vLyRkcm9wZG93bi1ib3gtc2hhZG93OiAgICAgICAgICAgICAgIDAgLjVyZW0gMXJlbSByZ2JhKCRibGFjaywgLjE3NSkgIWRlZmF1bHQ7XFxuXFxuJGRyb3Bkb3duLWxpbmstY29sb3I6ICRtZWRpdW0tZ3JheTtcXG4kZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG4kZHJvcGRvd24tbGluay1ob3Zlci1iZzogJHdoaXRlO1xcblxcbi8vJGRyb3Bkb3duLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tbGluay1hY3RpdmUtYmc6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4vLyRkcm9wZG93bi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG4kZHJvcGRvd24taXRlbS1wYWRkaW5nLXg6IC4zMTI1cmVtO1xcbiRkcm9wZG93bi1pdGVtLXBhZGRpbmcteTogLjMxMjVyZW07XFxuXFxuLy8kZHJvcGRvd24taGVhZGVyLWNvbG9yOiAgICAgICAgICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8gTmF2c1xcbiRuYXYtbGluay1wYWRkaW5nLXk6IC45Mzc1cmVtO1xcbiRuYXYtbGluay1wYWRkaW5nLXg6IDEuMjVyZW07XFxuJG5hdi1saW5rLWRpc2FibGVkLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG5cXG4kbmF2LXRhYnMtYm9yZGVyLWNvbG9yOiAkd2hpdGU7XFxuLy8kbmF2LXRhYnMtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJG5hdi10YWJzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpO1xcbiRuYXYtdGFicy1saW5rLWFjdGl2ZS1jb2xvcjogJGJvZHktY29sb3I7XFxuJG5hdi10YWJzLWxpbmstYWN0aXZlLWJnOiAkYm9keS1iZztcXG4kbmF2LXRhYnMtbGluay1hY3RpdmUtYm9yZGVyLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpO1xcblxcbiRuYXYtcGlsbHMtbGluay1ob3Zlci1ib3JkZXItY29sb3I6ICRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWNvbG9yOiAkbmF2LXRhYnMtbGluay1hY3RpdmUtY29sb3I7XFxuJG5hdi1waWxscy1saW5rLWFjdGl2ZS1iZzogI2Y0ZjlmYjtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjogJG5hdi10YWJzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjsgLy8gUFMgY3VzdG9tXFxuXFxuLy8kbmF2LXBpbGxzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRuYXYtcGlsbHMtbGluay1hY3RpdmUtY29sb3I6ICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbi8vJG5hdi1waWxscy1saW5rLWFjdGl2ZS1iZzogICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuXFxuLy8gTmF2YmFyXFxuLy8kbmF2YmFyLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAoJHNwYWNlciAvIDIpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItbmF2LWxpbmstcGFkZGluZy14OiAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci1icmFuZC1mb250LXNpemU6ICAgICAgICAgICAgJGZvbnQtc2l6ZS1sZyAhZGVmYXVsdDtcXG5cXG4vLyRuYXYtbGluay1oZWlnaHQ6ICAgICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAkbGluZS1oZWlnaHQtYmFzZSArICRuYXYtbGluay1wYWRkaW5nLXkgKiAyKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItYnJhbmQtaGVpZ2h0OiAgICAgICAgICAgICAgICRuYXZiYXItYnJhbmQtZm9udC1zaXplICogJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWJyYW5kLXBhZGRpbmcteTogICAgICAgICAgICAoJG5hdi1saW5rLWhlaWdodCAtICRuYXZiYXItYnJhbmQtaGVpZ2h0KSAvIDIgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2YmFyLXRvZ2dsZXItcGFkZGluZy15OiAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLXRvZ2dsZXItcGFkZGluZy14OiAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLXRvZ2dsZXItZm9udC1zaXplOiAgICAgICAgICAkZm9udC1zaXplLWxnICFkZWZhdWx0O1xcbi8vJG5hdmJhci10b2dnbGVyLWJvcmRlci1yYWRpdXM6ICAgICAgJGJ0bi1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci1kYXJrLWNvbG9yOiAgICAgICAgICAgICAgICAgcmdiYSgkd2hpdGUsIC41KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay1ob3Zlci1jb2xvcjogICAgICAgICAgIHJnYmEoJHdoaXRlLCAuNzUpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLWFjdGl2ZS1jb2xvcjogICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLWRpc2FibGVkLWNvbG9yOiAgICAgICAgcmdiYSgkd2hpdGUsIC4yNSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWRhcmstdG9nZ2xlci1pY29uLWJnOiAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItZGFyay1jb2xvcn0nIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLXRvZ2dsZXItYm9yZGVyLWNvbG9yOiAgcmdiYSgkd2hpdGUsIC4xKSAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItbGlnaHQtY29sb3I6ICAgICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuNSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LWhvdmVyLWNvbG9yOiAgICAgICAgICByZ2JhKCRibGFjaywgLjcpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1saWdodC1hY3RpdmUtY29sb3I6ICAgICAgICAgcmdiYSgkYmxhY2ssIC45KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtZGlzYWJsZWQtY29sb3I6ICAgICAgIHJnYmEoJGJsYWNrLCAuMykgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LXRvZ2dsZXItaWNvbi1iZzogICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItbGlnaHQtY29sb3J9JyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW1pdGVybGltaXQ9JzEwJyBkPSdNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtdG9nZ2xlci1ib3JkZXItY29sb3I6IHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuXFxuLy8gUGFnaW5hdGlvblxcbiRwYWdpbmF0aW9uLXBhZGRpbmcteTogLjY1cmVtO1xcbiRwYWdpbmF0aW9uLXBhZGRpbmcteDogLjVyZW07XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXktc206ICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXgtc206ICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLXBhZGRpbmcteS1sZzogICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLXBhZGRpbmcteC1sZzogICAgICAgICAgIDEuNXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgIDEuMjUgIWRlZmF1bHQ7XFxuXFxuJHBhZ2luYXRpb24tY29sb3I6ICRtZWRpdW0tZ3JheTtcXG4kcGFnaW5hdGlvbi1iZzogJHdoaXRlO1xcbi8vJHBhZ2luYXRpb24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1ib3JkZXItY29sb3I6ICR3aGl0ZTtcXG5cXG4vLyRwYWdpbmF0aW9uLWZvY3VzLWJveC1zaGFkb3c6ICAgICAgICRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdyAhZGVmYXVsdDtcXG5cXG4kcGFnaW5hdGlvbi1ob3Zlci1jb2xvcjogJHBhZ2luYXRpb24tY29sb3I7XFxuJHBhZ2luYXRpb24taG92ZXItYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWhvdmVyLWJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yO1xcblxcbiRwYWdpbmF0aW9uLWFjdGl2ZS1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG4kcGFnaW5hdGlvbi1hY3RpdmUtYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWFjdGl2ZS1ib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWJvcmRlci1jb2xvcjtcXG5cXG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuJHBhZ2luYXRpb24tZGlzYWJsZWQtYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWRpc2FibGVkLWJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yO1xcblxcbi8vIEp1bWJvdHJvblxcbiRqdW1ib3Ryb24tcGFkZGluZzogMnJlbSAhZGVmYXVsdDtcXG4kanVtYm90cm9uLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG5cXG4vLyBDYXJkc1xcbiRjYXJkLXNwYWNlci14OiAuNjI1cmVtICFkZWZhdWx0O1xcbiRjYXJkLXNwYWNlci15OiAuNjI1cmVtICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci13aWR0aDogMXB4ICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci1yYWRpdXM6IDVweCAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItcmFkaXVzLWlubmVyOiAkY2FyZC1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbiRjYXJkLWNhcC1iZzogJGdyYXktMjAwICFkZWZhdWx0O1xcbiRjYXJkLWJnOiAjZmZmICFkZWZhdWx0O1xcbiRjYXJkLWxpbmstaG92ZXItY29sb3I6ICNmZmYgIWRlZmF1bHQ7XFxuJGNhcmQtYm9yZGVyLWNvbG9yOiAjZGJlNmU5ICFkZWZhdWx0O1xcbi8vJGNhcmQtaW5uZXItYm9yZGVyLXJhZGl1czogICAgICAgICAgY2FsYygjeyRjYXJkLWJvcmRlci1yYWRpdXN9IC0gI3skY2FyZC1ib3JkZXItd2lkdGh9KSAhZGVmYXVsdDtcXG4vLyRjYXJkLWNhcC1iZzogICAgICAgICAgICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMDMpICFkZWZhdWx0O1xcbi8vJGNhcmQtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcblxcbi8vJGNhcmQtaW1nLW92ZXJsYXktcGFkZGluZzogICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJkLWdyb3VwLW1hcmdpbjogICAgICAgICAgICAgICAgICgkZ3JpZC1ndXR0ZXItd2lkdGggLyAyKSAhZGVmYXVsdDtcXG4vLyRjYXJkLWRlY2stbWFyZ2luOiAgICAgICAgICAgICAgICAgICRjYXJkLWdyb3VwLW1hcmdpbiAhZGVmYXVsdDtcXG5cXG4vLyRjYXJkLWNvbHVtbnMtY291bnQ6ICAgICAgICAgICAgICAgIDMgIWRlZmF1bHQ7XFxuLy8kY2FyZC1jb2x1bW5zLWdhcDogICAgICAgICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcbi8vJGNhcmQtY29sdW1ucy1tYXJnaW46ICAgICAgICAgICAgICAgJGNhcmQtc3BhY2VyLXkgIWRlZmF1bHQ7XFxuXFxuLy8gVG9vbHRpcHNcXG4vLyR0b29sdGlwLWZvbnQtc2l6ZTogICAgICAgICAgICRmb250LXNpemUtc20gIWRlZmF1bHQ7XFxuLy8kdG9vbHRpcC1tYXgtd2lkdGg6ICAgICAgICAgICAyMDBweCAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLWNvbG9yOiAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kdG9vbHRpcC1iZzogJG1lZGl1bS1ncmF5O1xcbi8vJHRvb2x0aXAtYm9yZGVyLXJhZGl1czogICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtb3BhY2l0eTogICAgICAgICAgICAgLjkgIWRlZmF1bHQ7XFxuJHRvb2x0aXAtcGFkZGluZy15OiAuNjI1cmVtO1xcbiR0b29sdGlwLXBhZGRpbmcteDogMS4yNXJlbTtcXG4vLyR0b29sdGlwLW1hcmdpbjogICAgICAgICAgICAgIDAgIWRlZmF1bHQ7XFxuXFxuLy8kdG9vbHRpcC1hcnJvdy13aWR0aDogICAgICAgICAuOHJlbSAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLWFycm93LWhlaWdodDogICAgICAgIC40cmVtICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtYXJyb3ctY29sb3I6ICAgICAgICAgJHRvb2x0aXAtYmcgIWRlZmF1bHQ7XFxuXFxuLy8gUG9wb3ZlcnNcXG4vLyRwb3BvdmVyLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICRmb250LXNpemUtc20gIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1iZzogICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1tYXgtd2lkdGg6ICAgICAgICAgICAgICAgICAyNzZweCAhZGVmYXVsdDtcXG4vLyRwb3BvdmVyLWJvcmRlci13aWR0aDogICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJHBvcG92ZXItYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRwb3BvdmVyLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuJHBvcG92ZXItaGVhZGVyLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG4vLyRwb3BvdmVyLWhlYWRlci1jb2xvcjogICAgICAgICAgICAgICRoZWFkaW5ncy1jb2xvciAhZGVmYXVsdDtcXG4kcG9wb3Zlci1oZWFkZXItcGFkZGluZy15OiAuNjI1cmVtO1xcbiRwb3BvdmVyLWhlYWRlci1wYWRkaW5nLXg6IDEuMjVyZW07XFxuXFxuLy8kcG9wb3Zlci1ib2R5LWNvbG9yOiAgICAgICAgICAgICAgICAkYm9keS1jb2xvciAhZGVmYXVsdDtcXG4kcG9wb3Zlci1ib2R5LXBhZGRpbmcteTogLjYyNXJlbTtcXG4kcG9wb3Zlci1ib2R5LXBhZGRpbmcteDogMS4yNXJlbTtcXG5cXG4vLyRwb3BvdmVyLWFycm93LXdpZHRoOiAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1hcnJvdy1oZWlnaHQ6ICAgICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRwb3BvdmVyLWFycm93LWNvbG9yOiAgICAgICAgICAgICAgICRwb3BvdmVyLWJnICFkZWZhdWx0O1xcblxcbi8vJHBvcG92ZXItYXJyb3ctb3V0ZXItY29sb3I6ICAgICAgICAgZmFkZS1pbigkcG9wb3Zlci1ib3JkZXItY29sb3IsIC4wNSkgIWRlZmF1bHQ7XFxuXFxuLy8gQmFkZ2VzXFxuJGJhZGdlLWZvbnQtc2l6ZTogLjYyNXJlbSAhZGVmYXVsdDtcXG4kYmFkZ2UtZm9udC13ZWlnaHQ6IDUwMCAhZGVmYXVsdDtcXG4kYmFkZ2UtcGFkZGluZy15OiAuMjVyZW07XFxuJGJhZGdlLXBhZGRpbmcteDogLjVyZW07XFxuLy8kYmFkZ2UtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4vLyRiYWRnZS1waWxsLXBhZGRpbmcteDogICAgICAgICAgICAgIC42ZW0gIWRlZmF1bHQ7XFxuLy8kYmFkZ2UtcGlsbC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcXG5cXG4vLyBNb2RhbHNcXG4kbW9kYWwtaW5uZXItcGFkZGluZzogMS44NzVyZW07XFxuXFxuLy8kbW9kYWwtZGlhbG9nLW1hcmdpbjogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRtb2RhbC1kaWFsb2ctbWFyZ2luLXktc20tdXA6IDEuNzVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQ6ICAgICAgICAgICAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcXG5cXG4vLyRtb2RhbC1jb250ZW50LWJnOiAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kbW9kYWwtY29udGVudC1ib3JkZXItY29sb3I6IG5vbmU7XFxuLy8kbW9kYWwtY29udGVudC1ib3JkZXItd2lkdGg6ICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRtb2RhbC1jb250ZW50LWJveC1zaGFkb3cteHM6IDAgOHB4IDE2cHggMCByZ2JhKDAsIDAsIDAsIC4xKTtcXG4kbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXNtLXVwOiAwIDhweCAxNnB4IDAgcmdiYSgwLCAwLCAwLCAuMSk7XFxuXFxuLy8kbW9kYWwtYmFja2Ryb3AtYmc6ICAgICAgICAgICAkYmxhY2sgIWRlZmF1bHQ7XFxuLy8kbW9kYWwtYmFja2Ryb3Atb3BhY2l0eTogICAgICAuNSAhZGVmYXVsdDtcXG4kbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcjogbm9uZTtcXG4vLyRtb2RhbC1mb290ZXItYm9yZGVyLWNvbG9yOiAgICRtb2RhbC1oZWFkZXItYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcbi8vJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGg6ICAgJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJG1vZGFsLWZvb3Rlci1ib3JkZXItd2lkdGg6ICAgJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJG1vZGFsLWhlYWRlci1wYWRkaW5nOiAkbW9kYWwtaW5uZXItcGFkZGluZztcXG5cXG4kbW9kYWwtbGc6IDkwMHB4O1xcbiRtb2RhbC1tZDogNjgwcHg7XFxuJG1vZGFsLXNtOiA0MDBweDtcXG5cXG4vLyRtb2RhbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSAuM3MgZWFzZS1vdXQgIWRlZmF1bHQ7XFxuXFxuLy8gQWxlcnRzXFxuJGFsZXJ0LXBhZGRpbmcteTogMXJlbSAhZGVmYXVsdDtcXG4kYWxlcnQtcGFkZGluZy14OiAxcmVtO1xcbi8vJGFsZXJ0LW1hcmdpbi1ib3R0b206ICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG4vLyRhbGVydC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGFsZXJ0LWxpbmstZm9udC13ZWlnaHQ6ICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuJGFsZXJ0LWJvcmRlci13aWR0aDogLjEyNXJlbTtcXG5cXG4vLyRhbGVydC1iZy1sZXZlbDogICAgICAgICAgICAgICAgICAgIC0xMCAhZGVmYXVsdDtcXG4vLyRhbGVydC1ib3JkZXItbGV2ZWw6ICAgICAgICAgICAgICAgIC05ICFkZWZhdWx0O1xcbi8vJGFsZXJ0LWNvbG9yLWxldmVsOiAgICAgICAgICAgICAgICAgNiAhZGVmYXVsdDtcXG5cXG4vLyBQcm9ncmVzcyBiYXJzXFxuLy8kcHJvZ3Jlc3MtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqIC43NSkgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmc6ICAgICAgICAgICAgICAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1ib3gtc2hhZG93OiAgICAgICAgICAgICAgIGluc2V0IDAgLjFyZW0gLjFyZW0gcmdiYSgkYmxhY2ssIC4xKSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1iYXItY29sb3I6ICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1iYXItYmc6ICAgICAgICAgICAgICAgICAgIHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIikgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLWFuaW1hdGlvbi10aW1pbmc6ICAgICAxcyBsaW5lYXIgaW5maW5pdGUgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLXRyYW5zaXRpb246ICAgICAgICAgICB3aWR0aCAuNnMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBMaXN0IGdyb3VwXFxuLy8kbGlzdC1ncm91cC1iZzogICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRsaXN0LWdyb3VwLWJvcmRlci13aWR0aDogICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuLy8kbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteTogJGlucHV0LXBhZGRpbmcteTtcXG4kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteDogJGlucHV0LXBhZGRpbmcteDtcXG5cXG4kbGlzdC1ncm91cC1ob3Zlci1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRsaXN0LWdyb3VwLWFjdGl2ZS1jb2xvcjogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWFjdGl2ZS1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRsaXN0LWdyb3VwLWFjdGl2ZS1ib3JkZXItY29sb3I6ICAgICRsaXN0LWdyb3VwLWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4kbGlzdC1ncm91cC1kaXNhYmxlZC1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kbGlzdC1ncm91cC1kaXNhYmxlZC1iZzogICAgICAgICAgICAkbGlzdC1ncm91cC1iZyAhZGVmYXVsdDtcXG5cXG4vLyRsaXN0LWdyb3VwLWFjdGlvbi1jb2xvcjogICAgICAgICAgICRncmF5LTcwMCAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3Rpb24taG92ZXItY29sb3I6ICR3aGl0ZTtcXG5cXG4kbGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWNvbG9yOiAkYm9keS1jb2xvciAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWJnOiAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuXFxuLy8gSW1hZ2UgdGh1bWJuYWlsc1xcbiR0aHVtYm5haWwtcGFkZGluZzogMDtcXG4vLyR0aHVtYm5haWwtYmc6ICAgICAgICAgICAgICAgICAgICAgICRib2R5LWJnICFkZWZhdWx0O1xcbi8vJHRodW1ibmFpbC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kdGh1bWJuYWlsLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kdGh1bWJuYWlsLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kdGh1bWJuYWlsLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuLy8gRmlndXJlc1xcbi8vJGZpZ3VyZS1jYXB0aW9uLWZvbnQtc2l6ZTogICAgICAgICAgOTAlICFkZWZhdWx0O1xcbiRmaWd1cmUtY2FwdGlvbi1jb2xvcjogJG1lZGl1bS1ncmF5O1xcblxcbi8vIEJyZWFkY3J1bWJzXFxuJGJyZWFkY3J1bWItcGFkZGluZy15OiAuMzEyNXJlbTtcXG4kYnJlYWRjcnVtYi1wYWRkaW5nLXg6IC4zMTI1cmVtO1xcbiRicmVhZGNydW1iLWl0ZW0tcGFkZGluZzogLjNyZW07XFxuXFxuJGJyZWFkY3J1bWItbWFyZ2luLWJvdHRvbTogMDtcXG5cXG4kYnJlYWRjcnVtYi1iZzogbm9uZTtcXG4kYnJlYWRjcnVtYi1kaXZpZGVyLWNvbG9yOiAkZGFyay1ncmF5O1xcbiRicmVhZGNydW1iLWFjdGl2ZS1jb2xvcjogJGV4dHJhLWRhcmstZ3JheTtcXG4kYnJlYWRjcnVtYi1kaXZpZGVyOiBcXFwiL1xcXCI7XFxuXFxuLy8gQ2Fyb3VzZWxcXG4vLyRjYXJvdXNlbC1jb250cm9sLWNvbG9yOiAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jb250cm9sLXdpZHRoOiAgICAgICAgICAgIDE1JSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jb250cm9sLW9wYWNpdHk6ICAgICAgICAgIC41ICFkZWZhdWx0O1xcblxcbi8vJGNhcm91c2VsLWluZGljYXRvci13aWR0aDogICAgICAgICAgMzBweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3ItaGVpZ2h0OiAgICAgICAgIDNweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3Itc3BhY2VyOiAgICAgICAgIDNweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1jYXB0aW9uLXdpZHRoOiAgICAgICAgICAgIDcwJSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jYXB0aW9uLWNvbG9yOiAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1jb250cm9sLWljb24td2lkdGg6ICAgICAgIDIwcHggIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb24tYmc6ICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nI3skY2Fyb3VzZWwtY29udHJvbC1jb2xvcn0nIHZpZXdCb3g9JzAgMCA4IDgnJTNFJTNDcGF0aCBkPSdNNS4yNSAwbC00IDQgNCA0IDEuNS0xLjUtMi41LTIuNSAyLjUtMi41LTEuNS0xLjV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJGNhcm91c2VsLWNvbnRyb2wtbmV4dC1pY29uLWJnOiAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGZpbGw9JyN7JGNhcm91c2VsLWNvbnRyb2wtY29sb3J9JyB2aWV3Qm94PScwIDAgOCA4JyUzRSUzQ3BhdGggZD0nTTIuNzUgMGwtMS41IDEuNSAyLjUgMi41LTIuNSAyLjUgMS41IDEuNSA0LTQtNC00eicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgIHRyYW5zZm9ybSAuNnMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBDbG9zZVxcbi8vJGNsb3NlLWZvbnQtc2l6ZTogICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMS41ICFkZWZhdWx0O1xcbi8vJGNsb3NlLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuLy8kY2xvc2UtY29sb3I6ICAgICAgICAgICAgICAgICAkYmxhY2sgIWRlZmF1bHQ7XFxuLy8kY2xvc2UtdGV4dC1zaGFkb3c6ICAgICAgICAgICAwIDFweCAwICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyBDb2RlXFxuLy8kY29kZS1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICA4Ny41JSAhZGVmYXVsdDtcXG4kY29kZS1jb2xvcjogJGJvZHktY29sb3I7XFxuXFxuLy8ka2JkLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAgICAuMnJlbSAhZGVmYXVsdDtcXG4vLyRrYmQtcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICAgIC40cmVtICFkZWZhdWx0O1xcbi8vJGtiZC1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICAgJGNvZGUtZm9udC1zaXplICFkZWZhdWx0O1xcbiRrYmQtY29sb3I6ICR3aGl0ZTtcXG4ka2JkLWJnOiAkZXh0cmEtZGFyay1ncmF5O1xcblxcbiRwcmUtY29sb3I6ICRib2R5LWNvbG9yO1xcbi8vJHByZS1zY3JvbGxhYmxlLW1heC1oZWlnaHQ6ICAgICAgICAgMzQwcHggIWRlZmF1bHQ7XFxuXFxuLy8gUHJpbnRpbmdcXG4vLyRwcmludC1wYWdlLXNpemU6ICAgICAgICAgICAgICAgICAgIGEzICFkZWZhdWx0O1xcbi8vJHByaW50LWJvZHktbWluLXdpZHRoOiAgICAgICAgICAgICAgbWFwLWdldCgkZ3JpZC1icmVha3BvaW50cywgXFxcImxnXFxcIikgIWRlZmF1bHQ7XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLnByb2R1Y3QtcGFnZSAjcHJvZHVjdC1pbWFnZXMtY29udGFpbmVyIC5wc3dwX19idXR0b257YmFja2dyb3VuZDpub25lO2NvbG9yOndoaXRlfS5wcm9kdWN0LXBhZ2UgI3Byb2R1Y3QtaW1hZ2VzLWNvbnRhaW5lciAucHN3cF9fYnV0dG9uOjpiZWZvcmV7Y29udGVudDpub25lfS5wcm9kdWN0LXBhZ2UgI3Byb2R1Y3QtaW1hZ2VzLWNvbnRhaW5lciAucHN3cF9fYnV0dG9uIGl7cG9pbnRlci1ldmVudHM6bm9uZX1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvZHJvcHpvbmUvRHJvcHpvbmVQaG90b1N3aXBlLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFtTEEsc0RBRUksZUFBZ0IsQ0FDaEIsV0FBWSxDQUhoQiw4REFNTSxZQUFhLENBTm5CLHdEQVVNLG1CQUFvQlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5AaW1wb3J0IFxcXCJ+QHNjc3MvY29uZmlnL19zZXR0aW5ncy5zY3NzXFxcIjtcXG5cXG4ucHJvZHVjdC1wYWdlICNwcm9kdWN0LWltYWdlcy1jb250YWluZXIge1xcbiAgLnBzd3BfX2J1dHRvbiB7XFxuICAgIGJhY2tncm91bmQ6IG5vbmU7XFxuICAgIGNvbG9yOiB3aGl0ZTtcXG5cXG4gICAgJjo6YmVmb3JlIHtcXG4gICAgICBjb250ZW50OiBub25lO1xcbiAgICB9XFxuXFxuICAgIGkge1xcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgICB9XFxuICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5hbGlnbi1iYXNlbGluZXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZSAhaW1wb3J0YW50fS5hbGlnbi10b3B7dmVydGljYWwtYWxpZ246dG9wICFpbXBvcnRhbnR9LmFsaWduLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUgIWltcG9ydGFudH0uYWxpZ24tYm90dG9te3ZlcnRpY2FsLWFsaWduOmJvdHRvbSAhaW1wb3J0YW50fS5hbGlnbi10ZXh0LWJvdHRvbXt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbSAhaW1wb3J0YW50fS5hbGlnbi10ZXh0LXRvcHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcCAhaW1wb3J0YW50fS5iZy1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6IzI1YjlkNyAhaW1wb3J0YW50fWEuYmctcHJpbWFyeTpob3ZlcixhLmJnLXByaW1hcnk6Zm9jdXMsYnV0dG9uLmJnLXByaW1hcnk6aG92ZXIsYnV0dG9uLmJnLXByaW1hcnk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojMWU5NGFiICFpbXBvcnRhbnR9LmJnLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOiM2Yzg2OGUgIWltcG9ydGFudH1hLmJnLXNlY29uZGFyeTpob3ZlcixhLmJnLXNlY29uZGFyeTpmb2N1cyxidXR0b24uYmctc2Vjb25kYXJ5OmhvdmVyLGJ1dHRvbi5iZy1zZWNvbmRhcnk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojNTY2YjcxICFpbXBvcnRhbnR9LmJnLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojNzBiNTgwICFpbXBvcnRhbnR9YS5iZy1zdWNjZXNzOmhvdmVyLGEuYmctc3VjY2Vzczpmb2N1cyxidXR0b24uYmctc3VjY2Vzczpob3ZlcixidXR0b24uYmctc3VjY2Vzczpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiM1MzlmNjQgIWltcG9ydGFudH0uYmctaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiMyNWI5ZDcgIWltcG9ydGFudH1hLmJnLWluZm86aG92ZXIsYS5iZy1pbmZvOmZvY3VzLGJ1dHRvbi5iZy1pbmZvOmhvdmVyLGJ1dHRvbi5iZy1pbmZvOmZvY3Vze2JhY2tncm91bmQtY29sb3I6IzFlOTRhYiAhaW1wb3J0YW50fS5iZy13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2ZhYjAwMCAhaW1wb3J0YW50fWEuYmctd2FybmluZzpob3ZlcixhLmJnLXdhcm5pbmc6Zm9jdXMsYnV0dG9uLmJnLXdhcm5pbmc6aG92ZXIsYnV0dG9uLmJnLXdhcm5pbmc6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojYzc4YzAwICFpbXBvcnRhbnR9LmJnLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNTRjM2UgIWltcG9ydGFudH1hLmJnLWRhbmdlcjpob3ZlcixhLmJnLWRhbmdlcjpmb2N1cyxidXR0b24uYmctZGFuZ2VyOmhvdmVyLGJ1dHRvbi5iZy1kYW5nZXI6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojZjIxZjBlICFpbXBvcnRhbnR9LmJnLWxpZ2h0e2JhY2tncm91bmQtY29sb3I6I2ZhZmJmYyAhaW1wb3J0YW50fWEuYmctbGlnaHQ6aG92ZXIsYS5iZy1saWdodDpmb2N1cyxidXR0b24uYmctbGlnaHQ6aG92ZXIsYnV0dG9uLmJnLWxpZ2h0OmZvY3Vze2JhY2tncm91bmQtY29sb3I6I2RhZTJlOSAhaW1wb3J0YW50fS5iZy1kYXJre2JhY2tncm91bmQtY29sb3I6IzM2M2E0MSAhaW1wb3J0YW50fWEuYmctZGFyazpob3ZlcixhLmJnLWRhcms6Zm9jdXMsYnV0dG9uLmJnLWRhcms6aG92ZXIsYnV0dG9uLmJnLWRhcms6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojMWYyMTI1ICFpbXBvcnRhbnR9LmJnLXdoaXRle2JhY2tncm91bmQtY29sb3I6I2ZmZiAhaW1wb3J0YW50fS5iZy10cmFuc3BhcmVudHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50ICFpbXBvcnRhbnR9LmJvcmRlcntib3JkZXI6MXB4IHNvbGlkICNiYmNkZDIgIWltcG9ydGFudH0uYm9yZGVyLXRvcHtib3JkZXItdG9wOjFweCBzb2xpZCAjYmJjZGQyICFpbXBvcnRhbnR9LmJvcmRlci1yaWdodHtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNiYmNkZDIgIWltcG9ydGFudH0uYm9yZGVyLWJvdHRvbXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjYmJjZGQyICFpbXBvcnRhbnR9LmJvcmRlci1sZWZ0e2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjYmJjZGQyICFpbXBvcnRhbnR9LmJvcmRlci0we2JvcmRlcjowICFpbXBvcnRhbnR9LmJvcmRlci10b3AtMHtib3JkZXItdG9wOjAgIWltcG9ydGFudH0uYm9yZGVyLXJpZ2h0LTB7Ym9yZGVyLXJpZ2h0OjAgIWltcG9ydGFudH0uYm9yZGVyLWJvdHRvbS0we2JvcmRlci1ib3R0b206MCAhaW1wb3J0YW50fS5ib3JkZXItbGVmdC0we2JvcmRlci1sZWZ0OjAgIWltcG9ydGFudH0uYm9yZGVyLXByaW1hcnl7Ym9yZGVyLWNvbG9yOiMyNWI5ZDcgIWltcG9ydGFudH0uYm9yZGVyLXNlY29uZGFyeXtib3JkZXItY29sb3I6IzZjODY4ZSAhaW1wb3J0YW50fS5ib3JkZXItc3VjY2Vzc3tib3JkZXItY29sb3I6IzcwYjU4MCAhaW1wb3J0YW50fS5ib3JkZXItaW5mb3tib3JkZXItY29sb3I6IzI1YjlkNyAhaW1wb3J0YW50fS5ib3JkZXItd2FybmluZ3tib3JkZXItY29sb3I6I2ZhYjAwMCAhaW1wb3J0YW50fS5ib3JkZXItZGFuZ2Vye2JvcmRlci1jb2xvcjojZjU0YzNlICFpbXBvcnRhbnR9LmJvcmRlci1saWdodHtib3JkZXItY29sb3I6I2ZhZmJmYyAhaW1wb3J0YW50fS5ib3JkZXItZGFya3tib3JkZXItY29sb3I6IzM2M2E0MSAhaW1wb3J0YW50fS5ib3JkZXItd2hpdGV7Ym9yZGVyLWNvbG9yOiNmZmYgIWltcG9ydGFudH0ucm91bmRlZHtib3JkZXItcmFkaXVzOjRweCAhaW1wb3J0YW50fS5yb3VuZGVkLXRvcHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweCAhaW1wb3J0YW50O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweCAhaW1wb3J0YW50fS5yb3VuZGVkLXJpZ2h0e2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweCAhaW1wb3J0YW50O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweCAhaW1wb3J0YW50fS5yb3VuZGVkLWJvdHRvbXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHggIWltcG9ydGFudDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweCAhaW1wb3J0YW50fS5yb3VuZGVkLWxlZnR7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHggIWltcG9ydGFudDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweCAhaW1wb3J0YW50fS5yb3VuZGVkLWNpcmNsZXtib3JkZXItcmFkaXVzOjUwJSAhaW1wb3J0YW50fS5yb3VuZGVkLTB7Ym9yZGVyLXJhZGl1czowICFpbXBvcnRhbnR9LmNsZWFyZml4OjphZnRlcntkaXNwbGF5OmJsb2NrO2NsZWFyOmJvdGg7Y29udGVudDpcXFwiXFxcIn0uZC1ub25le2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fS5kLWlubGluZXtkaXNwbGF5OmlubGluZSAhaW1wb3J0YW50fS5kLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayAhaW1wb3J0YW50fS5kLWJsb2Nre2Rpc3BsYXk6YmxvY2sgIWltcG9ydGFudH0uZC10YWJsZXtkaXNwbGF5OnRhYmxlICFpbXBvcnRhbnR9LmQtdGFibGUtcm93e2Rpc3BsYXk6dGFibGUtcm93ICFpbXBvcnRhbnR9LmQtdGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwgIWltcG9ydGFudH0uZC1mbGV4e2Rpc3BsYXk6ZmxleCAhaW1wb3J0YW50fS5kLWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXggIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDogNTQ0cHgpey5kLXNtLW5vbmV7ZGlzcGxheTpub25lICFpbXBvcnRhbnR9LmQtc20taW5saW5le2Rpc3BsYXk6aW5saW5lICFpbXBvcnRhbnR9LmQtc20taW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrICFpbXBvcnRhbnR9LmQtc20tYmxvY2t7ZGlzcGxheTpibG9jayAhaW1wb3J0YW50fS5kLXNtLXRhYmxle2Rpc3BsYXk6dGFibGUgIWltcG9ydGFudH0uZC1zbS10YWJsZS1yb3d7ZGlzcGxheTp0YWJsZS1yb3cgIWltcG9ydGFudH0uZC1zbS10YWJsZS1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbCAhaW1wb3J0YW50fS5kLXNtLWZsZXh7ZGlzcGxheTpmbGV4ICFpbXBvcnRhbnR9LmQtc20taW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpey5kLW1kLW5vbmV7ZGlzcGxheTpub25lICFpbXBvcnRhbnR9LmQtbWQtaW5saW5le2Rpc3BsYXk6aW5saW5lICFpbXBvcnRhbnR9LmQtbWQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrICFpbXBvcnRhbnR9LmQtbWQtYmxvY2t7ZGlzcGxheTpibG9jayAhaW1wb3J0YW50fS5kLW1kLXRhYmxle2Rpc3BsYXk6dGFibGUgIWltcG9ydGFudH0uZC1tZC10YWJsZS1yb3d7ZGlzcGxheTp0YWJsZS1yb3cgIWltcG9ydGFudH0uZC1tZC10YWJsZS1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbCAhaW1wb3J0YW50fS5kLW1kLWZsZXh7ZGlzcGxheTpmbGV4ICFpbXBvcnRhbnR9LmQtbWQtaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDogMTAyNHB4KXsuZC1sZy1ub25le2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fS5kLWxnLWlubGluZXtkaXNwbGF5OmlubGluZSAhaW1wb3J0YW50fS5kLWxnLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayAhaW1wb3J0YW50fS5kLWxnLWJsb2Nre2Rpc3BsYXk6YmxvY2sgIWltcG9ydGFudH0uZC1sZy10YWJsZXtkaXNwbGF5OnRhYmxlICFpbXBvcnRhbnR9LmQtbGctdGFibGUtcm93e2Rpc3BsYXk6dGFibGUtcm93ICFpbXBvcnRhbnR9LmQtbGctdGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwgIWltcG9ydGFudH0uZC1sZy1mbGV4e2Rpc3BsYXk6ZmxleCAhaW1wb3J0YW50fS5kLWxnLWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXggIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDEzMDBweCl7LmQteGwtbm9uZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0uZC14bC1pbmxpbmV7ZGlzcGxheTppbmxpbmUgIWltcG9ydGFudH0uZC14bC1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2sgIWltcG9ydGFudH0uZC14bC1ibG9ja3tkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnR9LmQteGwtdGFibGV7ZGlzcGxheTp0YWJsZSAhaW1wb3J0YW50fS5kLXhsLXRhYmxlLXJvd3tkaXNwbGF5OnRhYmxlLXJvdyAhaW1wb3J0YW50fS5kLXhsLXRhYmxlLWNlbGx7ZGlzcGxheTp0YWJsZS1jZWxsICFpbXBvcnRhbnR9LmQteGwtZmxleHtkaXNwbGF5OmZsZXggIWltcG9ydGFudH0uZC14bC1pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4ICFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOiAxNjAwcHgpey5kLXh4bC1ub25le2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fS5kLXh4bC1pbmxpbmV7ZGlzcGxheTppbmxpbmUgIWltcG9ydGFudH0uZC14eGwtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrICFpbXBvcnRhbnR9LmQteHhsLWJsb2Nre2Rpc3BsYXk6YmxvY2sgIWltcG9ydGFudH0uZC14eGwtdGFibGV7ZGlzcGxheTp0YWJsZSAhaW1wb3J0YW50fS5kLXh4bC10YWJsZS1yb3d7ZGlzcGxheTp0YWJsZS1yb3cgIWltcG9ydGFudH0uZC14eGwtdGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwgIWltcG9ydGFudH0uZC14eGwtZmxleHtkaXNwbGF5OmZsZXggIWltcG9ydGFudH0uZC14eGwtaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCAhaW1wb3J0YW50fX1AbWVkaWEgcHJpbnR7LmQtcHJpbnQtbm9uZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0uZC1wcmludC1pbmxpbmV7ZGlzcGxheTppbmxpbmUgIWltcG9ydGFudH0uZC1wcmludC1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2sgIWltcG9ydGFudH0uZC1wcmludC1ibG9ja3tkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnR9LmQtcHJpbnQtdGFibGV7ZGlzcGxheTp0YWJsZSAhaW1wb3J0YW50fS5kLXByaW50LXRhYmxlLXJvd3tkaXNwbGF5OnRhYmxlLXJvdyAhaW1wb3J0YW50fS5kLXByaW50LXRhYmxlLWNlbGx7ZGlzcGxheTp0YWJsZS1jZWxsICFpbXBvcnRhbnR9LmQtcHJpbnQtZmxleHtkaXNwbGF5OmZsZXggIWltcG9ydGFudH0uZC1wcmludC1pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4ICFpbXBvcnRhbnR9fS5lbWJlZC1yZXNwb25zaXZle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtwYWRkaW5nOjA7b3ZlcmZsb3c6aGlkZGVufS5lbWJlZC1yZXNwb25zaXZlOjpiZWZvcmV7ZGlzcGxheTpibG9jaztjb250ZW50OlxcXCJcXFwifS5lbWJlZC1yZXNwb25zaXZlIC5lbWJlZC1yZXNwb25zaXZlLWl0ZW0sLmVtYmVkLXJlc3BvbnNpdmUgaWZyYW1lLC5lbWJlZC1yZXNwb25zaXZlIGVtYmVkLC5lbWJlZC1yZXNwb25zaXZlIG9iamVjdCwuZW1iZWQtcmVzcG9uc2l2ZSB2aWRlb3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6MH0uZW1iZWQtcmVzcG9uc2l2ZS0yMWJ5OTo6YmVmb3Jle3BhZGRpbmctdG9wOjQyLjg1NzE0JX0uZW1iZWQtcmVzcG9uc2l2ZS0xNmJ5OTo6YmVmb3Jle3BhZGRpbmctdG9wOjU2LjI1JX0uZW1iZWQtcmVzcG9uc2l2ZS00YnkzOjpiZWZvcmV7cGFkZGluZy10b3A6NzUlfS5lbWJlZC1yZXNwb25zaXZlLTFieTE6OmJlZm9yZXtwYWRkaW5nLXRvcDoxMDAlfS5mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3cgIWltcG9ydGFudH0uZmxleC1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uICFpbXBvcnRhbnR9LmZsZXgtcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UgIWltcG9ydGFudH0uZmxleC1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50fS5mbGV4LXdyYXB7ZmxleC13cmFwOndyYXAgIWltcG9ydGFudH0uZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCAhaW1wb3J0YW50fS5mbGV4LXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZCAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4gIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0ICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1jZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoICFpbXBvcnRhbnR9LmFsaWduLXNlbGYtYXV0b3thbGlnbi1zZWxmOmF1dG8gIWltcG9ydGFudH0uYWxpZ24tc2VsZi1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24tc2VsZi1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUgIWltcG9ydGFudH0uYWxpZ24tc2VsZi1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCAhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOiA1NDRweCl7LmZsZXgtc20tcm93e2ZsZXgtZGlyZWN0aW9uOnJvdyAhaW1wb3J0YW50fS5mbGV4LXNtLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4gIWltcG9ydGFudH0uZmxleC1zbS1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSAhaW1wb3J0YW50fS5mbGV4LXNtLWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnR9LmZsZXgtc20td3JhcHtmbGV4LXdyYXA6d3JhcCAhaW1wb3J0YW50fS5mbGV4LXNtLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwICFpbXBvcnRhbnR9LmZsZXgtc20td3JhcC1yZXZlcnNle2ZsZXgtd3JhcDp3cmFwLXJldmVyc2UgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXNtLXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0ICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1zbS1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1zbS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlciAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtc20tYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtc20tYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtc20tc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1zbS1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtc20tY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1zbS1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1zbS1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ggIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1zbS1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1zbS1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXNtLWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXNtLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtc20tYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtc20tc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ggIWltcG9ydGFudH0uYWxpZ24tc2VsZi1zbS1hdXRve2FsaWduLXNlbGY6YXV0byAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLXNtLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLXNtLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kICFpbXBvcnRhbnR9LmFsaWduLXNlbGYtc20tY2VudGVye2FsaWduLXNlbGY6Y2VudGVyICFpbXBvcnRhbnR9LmFsaWduLXNlbGYtc20tYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLXNtLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoICFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOiA3NjhweCl7LmZsZXgtbWQtcm93e2ZsZXgtZGlyZWN0aW9uOnJvdyAhaW1wb3J0YW50fS5mbGV4LW1kLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4gIWltcG9ydGFudH0uZmxleC1tZC1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSAhaW1wb3J0YW50fS5mbGV4LW1kLWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnR9LmZsZXgtbWQtd3JhcHtmbGV4LXdyYXA6d3JhcCAhaW1wb3J0YW50fS5mbGV4LW1kLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwICFpbXBvcnRhbnR9LmZsZXgtbWQtd3JhcC1yZXZlcnNle2ZsZXgtd3JhcDp3cmFwLXJldmVyc2UgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LW1kLXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0ICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1tZC1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1tZC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlciAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtbWQtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtbWQtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtbWQtc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1tZC1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtbWQtY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1tZC1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1tZC1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ggIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1tZC1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1tZC1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LW1kLWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LW1kLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtbWQtYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtbWQtc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ggIWltcG9ydGFudH0uYWxpZ24tc2VsZi1tZC1hdXRve2FsaWduLXNlbGY6YXV0byAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLW1kLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLW1kLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kICFpbXBvcnRhbnR9LmFsaWduLXNlbGYtbWQtY2VudGVye2FsaWduLXNlbGY6Y2VudGVyICFpbXBvcnRhbnR9LmFsaWduLXNlbGYtbWQtYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLW1kLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoICFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpey5mbGV4LWxnLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3cgIWltcG9ydGFudH0uZmxleC1sZy1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uICFpbXBvcnRhbnR9LmZsZXgtbGctcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UgIWltcG9ydGFudH0uZmxleC1sZy1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50fS5mbGV4LWxnLXdyYXB7ZmxleC13cmFwOndyYXAgIWltcG9ydGFudH0uZmxleC1sZy1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCAhaW1wb3J0YW50fS5mbGV4LWxnLXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1sZy1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtbGctZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZCAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtbGctY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LWxnLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4gIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LWxnLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLWxnLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtbGctZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLWxnLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtbGctYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtbGctc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtbGctc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0ICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtbGctZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1sZy1jZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1sZy1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LWxnLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LWxnLXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoICFpbXBvcnRhbnR9LmFsaWduLXNlbGYtbGctYXV0b3thbGlnbi1zZWxmOmF1dG8gIWltcG9ydGFudH0uYWxpZ24tc2VsZi1sZy1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24tc2VsZi1sZy1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLWxnLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLWxnLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUgIWltcG9ydGFudH0uYWxpZ24tc2VsZi1sZy1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDogMTMwMHB4KXsuZmxleC14bC1yb3d7ZmxleC1kaXJlY3Rpb246cm93ICFpbXBvcnRhbnR9LmZsZXgteGwtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiAhaW1wb3J0YW50fS5mbGV4LXhsLXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlICFpbXBvcnRhbnR9LmZsZXgteGwtY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2UgIWltcG9ydGFudH0uZmxleC14bC13cmFwe2ZsZXgtd3JhcDp3cmFwICFpbXBvcnRhbnR9LmZsZXgteGwtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAgIWltcG9ydGFudH0uZmxleC14bC13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQteGwtc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXhsLWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXhsLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC14bC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC14bC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZCAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy14bC1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0ICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLXhsLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZCAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy14bC1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLXhsLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLXhsLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXhsLXN0YXJ0e2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXhsLWVuZHthbGlnbi1jb250ZW50OmZsZXgtZW5kICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQteGwtY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQteGwtYmV0d2VlbnthbGlnbi1jb250ZW50OnNwYWNlLWJldHdlZW4gIWltcG9ydGFudH0uYWxpZ24tY29udGVudC14bC1hcm91bmR7YWxpZ24tY29udGVudDpzcGFjZS1hcm91bmQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC14bC1zdHJldGNoe2FsaWduLWNvbnRlbnQ6c3RyZXRjaCAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLXhsLWF1dG97YWxpZ24tc2VsZjphdXRvICFpbXBvcnRhbnR9LmFsaWduLXNlbGYteGwtc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0ICFpbXBvcnRhbnR9LmFsaWduLXNlbGYteGwtZW5ke2FsaWduLXNlbGY6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24tc2VsZi14bC1jZW50ZXJ7YWxpZ24tc2VsZjpjZW50ZXIgIWltcG9ydGFudH0uYWxpZ24tc2VsZi14bC1iYXNlbGluZXthbGlnbi1zZWxmOmJhc2VsaW5lICFpbXBvcnRhbnR9LmFsaWduLXNlbGYteGwtc3RyZXRjaHthbGlnbi1zZWxmOnN0cmV0Y2ggIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDE2MDBweCl7LmZsZXgteHhsLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3cgIWltcG9ydGFudH0uZmxleC14eGwtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiAhaW1wb3J0YW50fS5mbGV4LXh4bC1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSAhaW1wb3J0YW50fS5mbGV4LXh4bC1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50fS5mbGV4LXh4bC13cmFwe2ZsZXgtd3JhcDp3cmFwICFpbXBvcnRhbnR9LmZsZXgteHhsLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwICFpbXBvcnRhbnR9LmZsZXgteHhsLXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC14eGwtc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXh4bC1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC14eGwtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXh4bC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC14eGwtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMteHhsLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMteHhsLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZCAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy14eGwtY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy14eGwtYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUgIWltcG9ydGFudH0uYWxpZ24taXRlbXMteHhsLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXh4bC1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC14eGwtZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC14eGwtY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQteHhsLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQteHhsLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXh4bC1zdHJldGNoe2FsaWduLWNvbnRlbnQ6c3RyZXRjaCAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLXh4bC1hdXRve2FsaWduLXNlbGY6YXV0byAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLXh4bC1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24tc2VsZi14eGwtZW5ke2FsaWduLXNlbGY6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24tc2VsZi14eGwtY2VudGVye2FsaWduLXNlbGY6Y2VudGVyICFpbXBvcnRhbnR9LmFsaWduLXNlbGYteHhsLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUgIWltcG9ydGFudH0uYWxpZ24tc2VsZi14eGwtc3RyZXRjaHthbGlnbi1zZWxmOnN0cmV0Y2ggIWltcG9ydGFudH19LmZsb2F0LWxlZnR7ZmxvYXQ6bGVmdCAhaW1wb3J0YW50fS5mbG9hdC1yaWdodHtmbG9hdDpyaWdodCAhaW1wb3J0YW50fS5mbG9hdC1ub25le2Zsb2F0Om5vbmUgIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDogNTQ0cHgpey5mbG9hdC1zbS1sZWZ0e2Zsb2F0OmxlZnQgIWltcG9ydGFudH0uZmxvYXQtc20tcmlnaHR7ZmxvYXQ6cmlnaHQgIWltcG9ydGFudH0uZmxvYXQtc20tbm9uZXtmbG9hdDpub25lICFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOiA3NjhweCl7LmZsb2F0LW1kLWxlZnR7ZmxvYXQ6bGVmdCAhaW1wb3J0YW50fS5mbG9hdC1tZC1yaWdodHtmbG9hdDpyaWdodCAhaW1wb3J0YW50fS5mbG9hdC1tZC1ub25le2Zsb2F0Om5vbmUgIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDEwMjRweCl7LmZsb2F0LWxnLWxlZnR7ZmxvYXQ6bGVmdCAhaW1wb3J0YW50fS5mbG9hdC1sZy1yaWdodHtmbG9hdDpyaWdodCAhaW1wb3J0YW50fS5mbG9hdC1sZy1ub25le2Zsb2F0Om5vbmUgIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDEzMDBweCl7LmZsb2F0LXhsLWxlZnR7ZmxvYXQ6bGVmdCAhaW1wb3J0YW50fS5mbG9hdC14bC1yaWdodHtmbG9hdDpyaWdodCAhaW1wb3J0YW50fS5mbG9hdC14bC1ub25le2Zsb2F0Om5vbmUgIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDE2MDBweCl7LmZsb2F0LXh4bC1sZWZ0e2Zsb2F0OmxlZnQgIWltcG9ydGFudH0uZmxvYXQteHhsLXJpZ2h0e2Zsb2F0OnJpZ2h0ICFpbXBvcnRhbnR9LmZsb2F0LXh4bC1ub25le2Zsb2F0Om5vbmUgIWltcG9ydGFudH19LnBvc2l0aW9uLXN0YXRpY3twb3NpdGlvbjpzdGF0aWMgIWltcG9ydGFudH0ucG9zaXRpb24tcmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmUgIWltcG9ydGFudH0ucG9zaXRpb24tYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGUgIWltcG9ydGFudH0ucG9zaXRpb24tZml4ZWR7cG9zaXRpb246Zml4ZWQgIWltcG9ydGFudH0ucG9zaXRpb24tc3RpY2t5e3Bvc2l0aW9uOnN0aWNreSAhaW1wb3J0YW50fS5maXhlZC10b3B7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6MDtsZWZ0OjA7ei1pbmRleDoxMDMwfS5maXhlZC1ib3R0b217cG9zaXRpb246Zml4ZWQ7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7ei1pbmRleDoxMDMwfUBzdXBwb3J0cyAocG9zaXRpb246IHN0aWNreSl7LnN0aWNreS10b3B7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MTAyMH19LnNyLW9ubHl7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O2hlaWdodDoxcHg7cGFkZGluZzowO292ZXJmbG93OmhpZGRlbjtjbGlwOnJlY3QoMCwgMCwgMCwgMCk7d2hpdGUtc3BhY2U6bm93cmFwO2NsaXAtcGF0aDppbnNldCg1MCUpO2JvcmRlcjowfS5zci1vbmx5LWZvY3VzYWJsZTphY3RpdmUsLnNyLW9ubHktZm9jdXNhYmxlOmZvY3Vze3Bvc2l0aW9uOnN0YXRpYzt3aWR0aDphdXRvO2hlaWdodDphdXRvO292ZXJmbG93OnZpc2libGU7Y2xpcDphdXRvO3doaXRlLXNwYWNlOm5vcm1hbDtjbGlwLXBhdGg6bm9uZX0udy0yNXt3aWR0aDoyNSUgIWltcG9ydGFudH0udy01MHt3aWR0aDo1MCUgIWltcG9ydGFudH0udy03NXt3aWR0aDo3NSUgIWltcG9ydGFudH0udy0xMDB7d2lkdGg6MTAwJSAhaW1wb3J0YW50fS5oLTI1e2hlaWdodDoyNSUgIWltcG9ydGFudH0uaC01MHtoZWlnaHQ6NTAlICFpbXBvcnRhbnR9LmgtNzV7aGVpZ2h0Ojc1JSAhaW1wb3J0YW50fS5oLTEwMHtoZWlnaHQ6MTAwJSAhaW1wb3J0YW50fS5tdy0xMDB7bWF4LXdpZHRoOjEwMCUgIWltcG9ydGFudH0ubWgtMTAwe21heC1oZWlnaHQ6MTAwJSAhaW1wb3J0YW50fS5tLTB7bWFyZ2luOjAgIWltcG9ydGFudH0ubXQtMCwubXktMHttYXJnaW4tdG9wOjAgIWltcG9ydGFudH0ubXItMCwubXgtMHttYXJnaW4tcmlnaHQ6MCAhaW1wb3J0YW50fS5tYi0wLC5teS0we21hcmdpbi1ib3R0b206MCAhaW1wb3J0YW50fS5tbC0wLC5teC0we21hcmdpbi1sZWZ0OjAgIWltcG9ydGFudH0ubS0xe21hcmdpbjouMzEyNXJlbSAhaW1wb3J0YW50fS5tdC0xLC5teS0xe21hcmdpbi10b3A6LjMxMjVyZW0gIWltcG9ydGFudH0ubXItMSwubXgtMXttYXJnaW4tcmlnaHQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubWItMSwubXktMXttYXJnaW4tYm90dG9tOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm1sLTEsLm14LTF7bWFyZ2luLWxlZnQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubS0ye21hcmdpbjouNjI1cmVtICFpbXBvcnRhbnR9Lm10LTIsLm15LTJ7bWFyZ2luLXRvcDouNjI1cmVtICFpbXBvcnRhbnR9Lm1yLTIsLm14LTJ7bWFyZ2luLXJpZ2h0Oi42MjVyZW0gIWltcG9ydGFudH0ubWItMiwubXktMnttYXJnaW4tYm90dG9tOi42MjVyZW0gIWltcG9ydGFudH0ubWwtMiwubXgtMnttYXJnaW4tbGVmdDouNjI1cmVtICFpbXBvcnRhbnR9Lm0tM3ttYXJnaW46LjkzNzVyZW0gIWltcG9ydGFudH0ubXQtMywubXktM3ttYXJnaW4tdG9wOi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1yLTMsLm14LTN7bWFyZ2luLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1iLTMsLm15LTN7bWFyZ2luLWJvdHRvbTouOTM3NXJlbSAhaW1wb3J0YW50fS5tbC0zLC5teC0ze21hcmdpbi1sZWZ0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm0tNHttYXJnaW46MS44NzVyZW0gIWltcG9ydGFudH0ubXQtNCwubXktNHttYXJnaW4tdG9wOjEuODc1cmVtICFpbXBvcnRhbnR9Lm1yLTQsLm14LTR7bWFyZ2luLXJpZ2h0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm1iLTQsLm15LTR7bWFyZ2luLWJvdHRvbToxLjg3NXJlbSAhaW1wb3J0YW50fS5tbC00LC5teC00e21hcmdpbi1sZWZ0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm0tNXttYXJnaW46My43NXJlbSAhaW1wb3J0YW50fS5tdC01LC5teS01e21hcmdpbi10b3A6My43NXJlbSAhaW1wb3J0YW50fS5tci01LC5teC01e21hcmdpbi1yaWdodDozLjc1cmVtICFpbXBvcnRhbnR9Lm1iLTUsLm15LTV7bWFyZ2luLWJvdHRvbTozLjc1cmVtICFpbXBvcnRhbnR9Lm1sLTUsLm14LTV7bWFyZ2luLWxlZnQ6My43NXJlbSAhaW1wb3J0YW50fS5wLTB7cGFkZGluZzowICFpbXBvcnRhbnR9LnB0LTAsLnB5LTB7cGFkZGluZy10b3A6MCAhaW1wb3J0YW50fS5wci0wLC5weC0we3BhZGRpbmctcmlnaHQ6MCAhaW1wb3J0YW50fS5wYi0wLC5weS0we3BhZGRpbmctYm90dG9tOjAgIWltcG9ydGFudH0ucGwtMCwucHgtMHtwYWRkaW5nLWxlZnQ6MCAhaW1wb3J0YW50fS5wLTF7cGFkZGluZzouMzEyNXJlbSAhaW1wb3J0YW50fS5wdC0xLC5weS0xe3BhZGRpbmctdG9wOi4zMTI1cmVtICFpbXBvcnRhbnR9LnByLTEsLnB4LTF7cGFkZGluZy1yaWdodDouMzEyNXJlbSAhaW1wb3J0YW50fS5wYi0xLC5weS0xe3BhZGRpbmctYm90dG9tOi4zMTI1cmVtICFpbXBvcnRhbnR9LnBsLTEsLnB4LTF7cGFkZGluZy1sZWZ0Oi4zMTI1cmVtICFpbXBvcnRhbnR9LnAtMntwYWRkaW5nOi42MjVyZW0gIWltcG9ydGFudH0ucHQtMiwucHktMntwYWRkaW5nLXRvcDouNjI1cmVtICFpbXBvcnRhbnR9LnByLTIsLnB4LTJ7cGFkZGluZy1yaWdodDouNjI1cmVtICFpbXBvcnRhbnR9LnBiLTIsLnB5LTJ7cGFkZGluZy1ib3R0b206LjYyNXJlbSAhaW1wb3J0YW50fS5wbC0yLC5weC0ye3BhZGRpbmctbGVmdDouNjI1cmVtICFpbXBvcnRhbnR9LnAtM3twYWRkaW5nOi45Mzc1cmVtICFpbXBvcnRhbnR9LnB0LTMsLnB5LTN7cGFkZGluZy10b3A6LjkzNzVyZW0gIWltcG9ydGFudH0ucHItMywucHgtM3twYWRkaW5nLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9LnBiLTMsLnB5LTN7cGFkZGluZy1ib3R0b206LjkzNzVyZW0gIWltcG9ydGFudH0ucGwtMywucHgtM3twYWRkaW5nLWxlZnQ6LjkzNzVyZW0gIWltcG9ydGFudH0ucC00e3BhZGRpbmc6MS44NzVyZW0gIWltcG9ydGFudH0ucHQtNCwucHktNHtwYWRkaW5nLXRvcDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wci00LC5weC00e3BhZGRpbmctcmlnaHQ6MS44NzVyZW0gIWltcG9ydGFudH0ucGItNCwucHktNHtwYWRkaW5nLWJvdHRvbToxLjg3NXJlbSAhaW1wb3J0YW50fS5wbC00LC5weC00e3BhZGRpbmctbGVmdDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wLTV7cGFkZGluZzozLjc1cmVtICFpbXBvcnRhbnR9LnB0LTUsLnB5LTV7cGFkZGluZy10b3A6My43NXJlbSAhaW1wb3J0YW50fS5wci01LC5weC01e3BhZGRpbmctcmlnaHQ6My43NXJlbSAhaW1wb3J0YW50fS5wYi01LC5weS01e3BhZGRpbmctYm90dG9tOjMuNzVyZW0gIWltcG9ydGFudH0ucGwtNSwucHgtNXtwYWRkaW5nLWxlZnQ6My43NXJlbSAhaW1wb3J0YW50fS5tLWF1dG97bWFyZ2luOmF1dG8gIWltcG9ydGFudH0ubXQtYXV0bywubXktYXV0b3ttYXJnaW4tdG9wOmF1dG8gIWltcG9ydGFudH0ubXItYXV0bywubXgtYXV0b3ttYXJnaW4tcmlnaHQ6YXV0byAhaW1wb3J0YW50fS5tYi1hdXRvLC5teS1hdXRve21hcmdpbi1ib3R0b206YXV0byAhaW1wb3J0YW50fS5tbC1hdXRvLC5teC1hdXRve21hcmdpbi1sZWZ0OmF1dG8gIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDogNTQ0cHgpey5tLXNtLTB7bWFyZ2luOjAgIWltcG9ydGFudH0ubXQtc20tMCwubXktc20tMHttYXJnaW4tdG9wOjAgIWltcG9ydGFudH0ubXItc20tMCwubXgtc20tMHttYXJnaW4tcmlnaHQ6MCAhaW1wb3J0YW50fS5tYi1zbS0wLC5teS1zbS0we21hcmdpbi1ib3R0b206MCAhaW1wb3J0YW50fS5tbC1zbS0wLC5teC1zbS0we21hcmdpbi1sZWZ0OjAgIWltcG9ydGFudH0ubS1zbS0xe21hcmdpbjouMzEyNXJlbSAhaW1wb3J0YW50fS5tdC1zbS0xLC5teS1zbS0xe21hcmdpbi10b3A6LjMxMjVyZW0gIWltcG9ydGFudH0ubXItc20tMSwubXgtc20tMXttYXJnaW4tcmlnaHQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubWItc20tMSwubXktc20tMXttYXJnaW4tYm90dG9tOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm1sLXNtLTEsLm14LXNtLTF7bWFyZ2luLWxlZnQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubS1zbS0ye21hcmdpbjouNjI1cmVtICFpbXBvcnRhbnR9Lm10LXNtLTIsLm15LXNtLTJ7bWFyZ2luLXRvcDouNjI1cmVtICFpbXBvcnRhbnR9Lm1yLXNtLTIsLm14LXNtLTJ7bWFyZ2luLXJpZ2h0Oi42MjVyZW0gIWltcG9ydGFudH0ubWItc20tMiwubXktc20tMnttYXJnaW4tYm90dG9tOi42MjVyZW0gIWltcG9ydGFudH0ubWwtc20tMiwubXgtc20tMnttYXJnaW4tbGVmdDouNjI1cmVtICFpbXBvcnRhbnR9Lm0tc20tM3ttYXJnaW46LjkzNzVyZW0gIWltcG9ydGFudH0ubXQtc20tMywubXktc20tM3ttYXJnaW4tdG9wOi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1yLXNtLTMsLm14LXNtLTN7bWFyZ2luLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1iLXNtLTMsLm15LXNtLTN7bWFyZ2luLWJvdHRvbTouOTM3NXJlbSAhaW1wb3J0YW50fS5tbC1zbS0zLC5teC1zbS0ze21hcmdpbi1sZWZ0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm0tc20tNHttYXJnaW46MS44NzVyZW0gIWltcG9ydGFudH0ubXQtc20tNCwubXktc20tNHttYXJnaW4tdG9wOjEuODc1cmVtICFpbXBvcnRhbnR9Lm1yLXNtLTQsLm14LXNtLTR7bWFyZ2luLXJpZ2h0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm1iLXNtLTQsLm15LXNtLTR7bWFyZ2luLWJvdHRvbToxLjg3NXJlbSAhaW1wb3J0YW50fS5tbC1zbS00LC5teC1zbS00e21hcmdpbi1sZWZ0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm0tc20tNXttYXJnaW46My43NXJlbSAhaW1wb3J0YW50fS5tdC1zbS01LC5teS1zbS01e21hcmdpbi10b3A6My43NXJlbSAhaW1wb3J0YW50fS5tci1zbS01LC5teC1zbS01e21hcmdpbi1yaWdodDozLjc1cmVtICFpbXBvcnRhbnR9Lm1iLXNtLTUsLm15LXNtLTV7bWFyZ2luLWJvdHRvbTozLjc1cmVtICFpbXBvcnRhbnR9Lm1sLXNtLTUsLm14LXNtLTV7bWFyZ2luLWxlZnQ6My43NXJlbSAhaW1wb3J0YW50fS5wLXNtLTB7cGFkZGluZzowICFpbXBvcnRhbnR9LnB0LXNtLTAsLnB5LXNtLTB7cGFkZGluZy10b3A6MCAhaW1wb3J0YW50fS5wci1zbS0wLC5weC1zbS0we3BhZGRpbmctcmlnaHQ6MCAhaW1wb3J0YW50fS5wYi1zbS0wLC5weS1zbS0we3BhZGRpbmctYm90dG9tOjAgIWltcG9ydGFudH0ucGwtc20tMCwucHgtc20tMHtwYWRkaW5nLWxlZnQ6MCAhaW1wb3J0YW50fS5wLXNtLTF7cGFkZGluZzouMzEyNXJlbSAhaW1wb3J0YW50fS5wdC1zbS0xLC5weS1zbS0xe3BhZGRpbmctdG9wOi4zMTI1cmVtICFpbXBvcnRhbnR9LnByLXNtLTEsLnB4LXNtLTF7cGFkZGluZy1yaWdodDouMzEyNXJlbSAhaW1wb3J0YW50fS5wYi1zbS0xLC5weS1zbS0xe3BhZGRpbmctYm90dG9tOi4zMTI1cmVtICFpbXBvcnRhbnR9LnBsLXNtLTEsLnB4LXNtLTF7cGFkZGluZy1sZWZ0Oi4zMTI1cmVtICFpbXBvcnRhbnR9LnAtc20tMntwYWRkaW5nOi42MjVyZW0gIWltcG9ydGFudH0ucHQtc20tMiwucHktc20tMntwYWRkaW5nLXRvcDouNjI1cmVtICFpbXBvcnRhbnR9LnByLXNtLTIsLnB4LXNtLTJ7cGFkZGluZy1yaWdodDouNjI1cmVtICFpbXBvcnRhbnR9LnBiLXNtLTIsLnB5LXNtLTJ7cGFkZGluZy1ib3R0b206LjYyNXJlbSAhaW1wb3J0YW50fS5wbC1zbS0yLC5weC1zbS0ye3BhZGRpbmctbGVmdDouNjI1cmVtICFpbXBvcnRhbnR9LnAtc20tM3twYWRkaW5nOi45Mzc1cmVtICFpbXBvcnRhbnR9LnB0LXNtLTMsLnB5LXNtLTN7cGFkZGluZy10b3A6LjkzNzVyZW0gIWltcG9ydGFudH0ucHItc20tMywucHgtc20tM3twYWRkaW5nLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9LnBiLXNtLTMsLnB5LXNtLTN7cGFkZGluZy1ib3R0b206LjkzNzVyZW0gIWltcG9ydGFudH0ucGwtc20tMywucHgtc20tM3twYWRkaW5nLWxlZnQ6LjkzNzVyZW0gIWltcG9ydGFudH0ucC1zbS00e3BhZGRpbmc6MS44NzVyZW0gIWltcG9ydGFudH0ucHQtc20tNCwucHktc20tNHtwYWRkaW5nLXRvcDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wci1zbS00LC5weC1zbS00e3BhZGRpbmctcmlnaHQ6MS44NzVyZW0gIWltcG9ydGFudH0ucGItc20tNCwucHktc20tNHtwYWRkaW5nLWJvdHRvbToxLjg3NXJlbSAhaW1wb3J0YW50fS5wbC1zbS00LC5weC1zbS00e3BhZGRpbmctbGVmdDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wLXNtLTV7cGFkZGluZzozLjc1cmVtICFpbXBvcnRhbnR9LnB0LXNtLTUsLnB5LXNtLTV7cGFkZGluZy10b3A6My43NXJlbSAhaW1wb3J0YW50fS5wci1zbS01LC5weC1zbS01e3BhZGRpbmctcmlnaHQ6My43NXJlbSAhaW1wb3J0YW50fS5wYi1zbS01LC5weS1zbS01e3BhZGRpbmctYm90dG9tOjMuNzVyZW0gIWltcG9ydGFudH0ucGwtc20tNSwucHgtc20tNXtwYWRkaW5nLWxlZnQ6My43NXJlbSAhaW1wb3J0YW50fS5tLXNtLWF1dG97bWFyZ2luOmF1dG8gIWltcG9ydGFudH0ubXQtc20tYXV0bywubXktc20tYXV0b3ttYXJnaW4tdG9wOmF1dG8gIWltcG9ydGFudH0ubXItc20tYXV0bywubXgtc20tYXV0b3ttYXJnaW4tcmlnaHQ6YXV0byAhaW1wb3J0YW50fS5tYi1zbS1hdXRvLC5teS1zbS1hdXRve21hcmdpbi1ib3R0b206YXV0byAhaW1wb3J0YW50fS5tbC1zbS1hdXRvLC5teC1zbS1hdXRve21hcmdpbi1sZWZ0OmF1dG8gIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KXsubS1tZC0we21hcmdpbjowICFpbXBvcnRhbnR9Lm10LW1kLTAsLm15LW1kLTB7bWFyZ2luLXRvcDowICFpbXBvcnRhbnR9Lm1yLW1kLTAsLm14LW1kLTB7bWFyZ2luLXJpZ2h0OjAgIWltcG9ydGFudH0ubWItbWQtMCwubXktbWQtMHttYXJnaW4tYm90dG9tOjAgIWltcG9ydGFudH0ubWwtbWQtMCwubXgtbWQtMHttYXJnaW4tbGVmdDowICFpbXBvcnRhbnR9Lm0tbWQtMXttYXJnaW46LjMxMjVyZW0gIWltcG9ydGFudH0ubXQtbWQtMSwubXktbWQtMXttYXJnaW4tdG9wOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm1yLW1kLTEsLm14LW1kLTF7bWFyZ2luLXJpZ2h0Oi4zMTI1cmVtICFpbXBvcnRhbnR9Lm1iLW1kLTEsLm15LW1kLTF7bWFyZ2luLWJvdHRvbTouMzEyNXJlbSAhaW1wb3J0YW50fS5tbC1tZC0xLC5teC1tZC0xe21hcmdpbi1sZWZ0Oi4zMTI1cmVtICFpbXBvcnRhbnR9Lm0tbWQtMnttYXJnaW46LjYyNXJlbSAhaW1wb3J0YW50fS5tdC1tZC0yLC5teS1tZC0ye21hcmdpbi10b3A6LjYyNXJlbSAhaW1wb3J0YW50fS5tci1tZC0yLC5teC1tZC0ye21hcmdpbi1yaWdodDouNjI1cmVtICFpbXBvcnRhbnR9Lm1iLW1kLTIsLm15LW1kLTJ7bWFyZ2luLWJvdHRvbTouNjI1cmVtICFpbXBvcnRhbnR9Lm1sLW1kLTIsLm14LW1kLTJ7bWFyZ2luLWxlZnQ6LjYyNXJlbSAhaW1wb3J0YW50fS5tLW1kLTN7bWFyZ2luOi45Mzc1cmVtICFpbXBvcnRhbnR9Lm10LW1kLTMsLm15LW1kLTN7bWFyZ2luLXRvcDouOTM3NXJlbSAhaW1wb3J0YW50fS5tci1tZC0zLC5teC1tZC0ze21hcmdpbi1yaWdodDouOTM3NXJlbSAhaW1wb3J0YW50fS5tYi1tZC0zLC5teS1tZC0ze21hcmdpbi1ib3R0b206LjkzNzVyZW0gIWltcG9ydGFudH0ubWwtbWQtMywubXgtbWQtM3ttYXJnaW4tbGVmdDouOTM3NXJlbSAhaW1wb3J0YW50fS5tLW1kLTR7bWFyZ2luOjEuODc1cmVtICFpbXBvcnRhbnR9Lm10LW1kLTQsLm15LW1kLTR7bWFyZ2luLXRvcDoxLjg3NXJlbSAhaW1wb3J0YW50fS5tci1tZC00LC5teC1tZC00e21hcmdpbi1yaWdodDoxLjg3NXJlbSAhaW1wb3J0YW50fS5tYi1tZC00LC5teS1tZC00e21hcmdpbi1ib3R0b206MS44NzVyZW0gIWltcG9ydGFudH0ubWwtbWQtNCwubXgtbWQtNHttYXJnaW4tbGVmdDoxLjg3NXJlbSAhaW1wb3J0YW50fS5tLW1kLTV7bWFyZ2luOjMuNzVyZW0gIWltcG9ydGFudH0ubXQtbWQtNSwubXktbWQtNXttYXJnaW4tdG9wOjMuNzVyZW0gIWltcG9ydGFudH0ubXItbWQtNSwubXgtbWQtNXttYXJnaW4tcmlnaHQ6My43NXJlbSAhaW1wb3J0YW50fS5tYi1tZC01LC5teS1tZC01e21hcmdpbi1ib3R0b206My43NXJlbSAhaW1wb3J0YW50fS5tbC1tZC01LC5teC1tZC01e21hcmdpbi1sZWZ0OjMuNzVyZW0gIWltcG9ydGFudH0ucC1tZC0we3BhZGRpbmc6MCAhaW1wb3J0YW50fS5wdC1tZC0wLC5weS1tZC0we3BhZGRpbmctdG9wOjAgIWltcG9ydGFudH0ucHItbWQtMCwucHgtbWQtMHtwYWRkaW5nLXJpZ2h0OjAgIWltcG9ydGFudH0ucGItbWQtMCwucHktbWQtMHtwYWRkaW5nLWJvdHRvbTowICFpbXBvcnRhbnR9LnBsLW1kLTAsLnB4LW1kLTB7cGFkZGluZy1sZWZ0OjAgIWltcG9ydGFudH0ucC1tZC0xe3BhZGRpbmc6LjMxMjVyZW0gIWltcG9ydGFudH0ucHQtbWQtMSwucHktbWQtMXtwYWRkaW5nLXRvcDouMzEyNXJlbSAhaW1wb3J0YW50fS5wci1tZC0xLC5weC1tZC0xe3BhZGRpbmctcmlnaHQ6LjMxMjVyZW0gIWltcG9ydGFudH0ucGItbWQtMSwucHktbWQtMXtwYWRkaW5nLWJvdHRvbTouMzEyNXJlbSAhaW1wb3J0YW50fS5wbC1tZC0xLC5weC1tZC0xe3BhZGRpbmctbGVmdDouMzEyNXJlbSAhaW1wb3J0YW50fS5wLW1kLTJ7cGFkZGluZzouNjI1cmVtICFpbXBvcnRhbnR9LnB0LW1kLTIsLnB5LW1kLTJ7cGFkZGluZy10b3A6LjYyNXJlbSAhaW1wb3J0YW50fS5wci1tZC0yLC5weC1tZC0ye3BhZGRpbmctcmlnaHQ6LjYyNXJlbSAhaW1wb3J0YW50fS5wYi1tZC0yLC5weS1tZC0ye3BhZGRpbmctYm90dG9tOi42MjVyZW0gIWltcG9ydGFudH0ucGwtbWQtMiwucHgtbWQtMntwYWRkaW5nLWxlZnQ6LjYyNXJlbSAhaW1wb3J0YW50fS5wLW1kLTN7cGFkZGluZzouOTM3NXJlbSAhaW1wb3J0YW50fS5wdC1tZC0zLC5weS1tZC0ze3BhZGRpbmctdG9wOi45Mzc1cmVtICFpbXBvcnRhbnR9LnByLW1kLTMsLnB4LW1kLTN7cGFkZGluZy1yaWdodDouOTM3NXJlbSAhaW1wb3J0YW50fS5wYi1tZC0zLC5weS1tZC0ze3BhZGRpbmctYm90dG9tOi45Mzc1cmVtICFpbXBvcnRhbnR9LnBsLW1kLTMsLnB4LW1kLTN7cGFkZGluZy1sZWZ0Oi45Mzc1cmVtICFpbXBvcnRhbnR9LnAtbWQtNHtwYWRkaW5nOjEuODc1cmVtICFpbXBvcnRhbnR9LnB0LW1kLTQsLnB5LW1kLTR7cGFkZGluZy10b3A6MS44NzVyZW0gIWltcG9ydGFudH0ucHItbWQtNCwucHgtbWQtNHtwYWRkaW5nLXJpZ2h0OjEuODc1cmVtICFpbXBvcnRhbnR9LnBiLW1kLTQsLnB5LW1kLTR7cGFkZGluZy1ib3R0b206MS44NzVyZW0gIWltcG9ydGFudH0ucGwtbWQtNCwucHgtbWQtNHtwYWRkaW5nLWxlZnQ6MS44NzVyZW0gIWltcG9ydGFudH0ucC1tZC01e3BhZGRpbmc6My43NXJlbSAhaW1wb3J0YW50fS5wdC1tZC01LC5weS1tZC01e3BhZGRpbmctdG9wOjMuNzVyZW0gIWltcG9ydGFudH0ucHItbWQtNSwucHgtbWQtNXtwYWRkaW5nLXJpZ2h0OjMuNzVyZW0gIWltcG9ydGFudH0ucGItbWQtNSwucHktbWQtNXtwYWRkaW5nLWJvdHRvbTozLjc1cmVtICFpbXBvcnRhbnR9LnBsLW1kLTUsLnB4LW1kLTV7cGFkZGluZy1sZWZ0OjMuNzVyZW0gIWltcG9ydGFudH0ubS1tZC1hdXRve21hcmdpbjphdXRvICFpbXBvcnRhbnR9Lm10LW1kLWF1dG8sLm15LW1kLWF1dG97bWFyZ2luLXRvcDphdXRvICFpbXBvcnRhbnR9Lm1yLW1kLWF1dG8sLm14LW1kLWF1dG97bWFyZ2luLXJpZ2h0OmF1dG8gIWltcG9ydGFudH0ubWItbWQtYXV0bywubXktbWQtYXV0b3ttYXJnaW4tYm90dG9tOmF1dG8gIWltcG9ydGFudH0ubWwtbWQtYXV0bywubXgtbWQtYXV0b3ttYXJnaW4tbGVmdDphdXRvICFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpey5tLWxnLTB7bWFyZ2luOjAgIWltcG9ydGFudH0ubXQtbGctMCwubXktbGctMHttYXJnaW4tdG9wOjAgIWltcG9ydGFudH0ubXItbGctMCwubXgtbGctMHttYXJnaW4tcmlnaHQ6MCAhaW1wb3J0YW50fS5tYi1sZy0wLC5teS1sZy0we21hcmdpbi1ib3R0b206MCAhaW1wb3J0YW50fS5tbC1sZy0wLC5teC1sZy0we21hcmdpbi1sZWZ0OjAgIWltcG9ydGFudH0ubS1sZy0xe21hcmdpbjouMzEyNXJlbSAhaW1wb3J0YW50fS5tdC1sZy0xLC5teS1sZy0xe21hcmdpbi10b3A6LjMxMjVyZW0gIWltcG9ydGFudH0ubXItbGctMSwubXgtbGctMXttYXJnaW4tcmlnaHQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubWItbGctMSwubXktbGctMXttYXJnaW4tYm90dG9tOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm1sLWxnLTEsLm14LWxnLTF7bWFyZ2luLWxlZnQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubS1sZy0ye21hcmdpbjouNjI1cmVtICFpbXBvcnRhbnR9Lm10LWxnLTIsLm15LWxnLTJ7bWFyZ2luLXRvcDouNjI1cmVtICFpbXBvcnRhbnR9Lm1yLWxnLTIsLm14LWxnLTJ7bWFyZ2luLXJpZ2h0Oi42MjVyZW0gIWltcG9ydGFudH0ubWItbGctMiwubXktbGctMnttYXJnaW4tYm90dG9tOi42MjVyZW0gIWltcG9ydGFudH0ubWwtbGctMiwubXgtbGctMnttYXJnaW4tbGVmdDouNjI1cmVtICFpbXBvcnRhbnR9Lm0tbGctM3ttYXJnaW46LjkzNzVyZW0gIWltcG9ydGFudH0ubXQtbGctMywubXktbGctM3ttYXJnaW4tdG9wOi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1yLWxnLTMsLm14LWxnLTN7bWFyZ2luLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1iLWxnLTMsLm15LWxnLTN7bWFyZ2luLWJvdHRvbTouOTM3NXJlbSAhaW1wb3J0YW50fS5tbC1sZy0zLC5teC1sZy0ze21hcmdpbi1sZWZ0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm0tbGctNHttYXJnaW46MS44NzVyZW0gIWltcG9ydGFudH0ubXQtbGctNCwubXktbGctNHttYXJnaW4tdG9wOjEuODc1cmVtICFpbXBvcnRhbnR9Lm1yLWxnLTQsLm14LWxnLTR7bWFyZ2luLXJpZ2h0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm1iLWxnLTQsLm15LWxnLTR7bWFyZ2luLWJvdHRvbToxLjg3NXJlbSAhaW1wb3J0YW50fS5tbC1sZy00LC5teC1sZy00e21hcmdpbi1sZWZ0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm0tbGctNXttYXJnaW46My43NXJlbSAhaW1wb3J0YW50fS5tdC1sZy01LC5teS1sZy01e21hcmdpbi10b3A6My43NXJlbSAhaW1wb3J0YW50fS5tci1sZy01LC5teC1sZy01e21hcmdpbi1yaWdodDozLjc1cmVtICFpbXBvcnRhbnR9Lm1iLWxnLTUsLm15LWxnLTV7bWFyZ2luLWJvdHRvbTozLjc1cmVtICFpbXBvcnRhbnR9Lm1sLWxnLTUsLm14LWxnLTV7bWFyZ2luLWxlZnQ6My43NXJlbSAhaW1wb3J0YW50fS5wLWxnLTB7cGFkZGluZzowICFpbXBvcnRhbnR9LnB0LWxnLTAsLnB5LWxnLTB7cGFkZGluZy10b3A6MCAhaW1wb3J0YW50fS5wci1sZy0wLC5weC1sZy0we3BhZGRpbmctcmlnaHQ6MCAhaW1wb3J0YW50fS5wYi1sZy0wLC5weS1sZy0we3BhZGRpbmctYm90dG9tOjAgIWltcG9ydGFudH0ucGwtbGctMCwucHgtbGctMHtwYWRkaW5nLWxlZnQ6MCAhaW1wb3J0YW50fS5wLWxnLTF7cGFkZGluZzouMzEyNXJlbSAhaW1wb3J0YW50fS5wdC1sZy0xLC5weS1sZy0xe3BhZGRpbmctdG9wOi4zMTI1cmVtICFpbXBvcnRhbnR9LnByLWxnLTEsLnB4LWxnLTF7cGFkZGluZy1yaWdodDouMzEyNXJlbSAhaW1wb3J0YW50fS5wYi1sZy0xLC5weS1sZy0xe3BhZGRpbmctYm90dG9tOi4zMTI1cmVtICFpbXBvcnRhbnR9LnBsLWxnLTEsLnB4LWxnLTF7cGFkZGluZy1sZWZ0Oi4zMTI1cmVtICFpbXBvcnRhbnR9LnAtbGctMntwYWRkaW5nOi42MjVyZW0gIWltcG9ydGFudH0ucHQtbGctMiwucHktbGctMntwYWRkaW5nLXRvcDouNjI1cmVtICFpbXBvcnRhbnR9LnByLWxnLTIsLnB4LWxnLTJ7cGFkZGluZy1yaWdodDouNjI1cmVtICFpbXBvcnRhbnR9LnBiLWxnLTIsLnB5LWxnLTJ7cGFkZGluZy1ib3R0b206LjYyNXJlbSAhaW1wb3J0YW50fS5wbC1sZy0yLC5weC1sZy0ye3BhZGRpbmctbGVmdDouNjI1cmVtICFpbXBvcnRhbnR9LnAtbGctM3twYWRkaW5nOi45Mzc1cmVtICFpbXBvcnRhbnR9LnB0LWxnLTMsLnB5LWxnLTN7cGFkZGluZy10b3A6LjkzNzVyZW0gIWltcG9ydGFudH0ucHItbGctMywucHgtbGctM3twYWRkaW5nLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9LnBiLWxnLTMsLnB5LWxnLTN7cGFkZGluZy1ib3R0b206LjkzNzVyZW0gIWltcG9ydGFudH0ucGwtbGctMywucHgtbGctM3twYWRkaW5nLWxlZnQ6LjkzNzVyZW0gIWltcG9ydGFudH0ucC1sZy00e3BhZGRpbmc6MS44NzVyZW0gIWltcG9ydGFudH0ucHQtbGctNCwucHktbGctNHtwYWRkaW5nLXRvcDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wci1sZy00LC5weC1sZy00e3BhZGRpbmctcmlnaHQ6MS44NzVyZW0gIWltcG9ydGFudH0ucGItbGctNCwucHktbGctNHtwYWRkaW5nLWJvdHRvbToxLjg3NXJlbSAhaW1wb3J0YW50fS5wbC1sZy00LC5weC1sZy00e3BhZGRpbmctbGVmdDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wLWxnLTV7cGFkZGluZzozLjc1cmVtICFpbXBvcnRhbnR9LnB0LWxnLTUsLnB5LWxnLTV7cGFkZGluZy10b3A6My43NXJlbSAhaW1wb3J0YW50fS5wci1sZy01LC5weC1sZy01e3BhZGRpbmctcmlnaHQ6My43NXJlbSAhaW1wb3J0YW50fS5wYi1sZy01LC5weS1sZy01e3BhZGRpbmctYm90dG9tOjMuNzVyZW0gIWltcG9ydGFudH0ucGwtbGctNSwucHgtbGctNXtwYWRkaW5nLWxlZnQ6My43NXJlbSAhaW1wb3J0YW50fS5tLWxnLWF1dG97bWFyZ2luOmF1dG8gIWltcG9ydGFudH0ubXQtbGctYXV0bywubXktbGctYXV0b3ttYXJnaW4tdG9wOmF1dG8gIWltcG9ydGFudH0ubXItbGctYXV0bywubXgtbGctYXV0b3ttYXJnaW4tcmlnaHQ6YXV0byAhaW1wb3J0YW50fS5tYi1sZy1hdXRvLC5teS1sZy1hdXRve21hcmdpbi1ib3R0b206YXV0byAhaW1wb3J0YW50fS5tbC1sZy1hdXRvLC5teC1sZy1hdXRve21hcmdpbi1sZWZ0OmF1dG8gIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDEzMDBweCl7Lm0teGwtMHttYXJnaW46MCAhaW1wb3J0YW50fS5tdC14bC0wLC5teS14bC0we21hcmdpbi10b3A6MCAhaW1wb3J0YW50fS5tci14bC0wLC5teC14bC0we21hcmdpbi1yaWdodDowICFpbXBvcnRhbnR9Lm1iLXhsLTAsLm15LXhsLTB7bWFyZ2luLWJvdHRvbTowICFpbXBvcnRhbnR9Lm1sLXhsLTAsLm14LXhsLTB7bWFyZ2luLWxlZnQ6MCAhaW1wb3J0YW50fS5tLXhsLTF7bWFyZ2luOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm10LXhsLTEsLm15LXhsLTF7bWFyZ2luLXRvcDouMzEyNXJlbSAhaW1wb3J0YW50fS5tci14bC0xLC5teC14bC0xe21hcmdpbi1yaWdodDouMzEyNXJlbSAhaW1wb3J0YW50fS5tYi14bC0xLC5teS14bC0xe21hcmdpbi1ib3R0b206LjMxMjVyZW0gIWltcG9ydGFudH0ubWwteGwtMSwubXgteGwtMXttYXJnaW4tbGVmdDouMzEyNXJlbSAhaW1wb3J0YW50fS5tLXhsLTJ7bWFyZ2luOi42MjVyZW0gIWltcG9ydGFudH0ubXQteGwtMiwubXkteGwtMnttYXJnaW4tdG9wOi42MjVyZW0gIWltcG9ydGFudH0ubXIteGwtMiwubXgteGwtMnttYXJnaW4tcmlnaHQ6LjYyNXJlbSAhaW1wb3J0YW50fS5tYi14bC0yLC5teS14bC0ye21hcmdpbi1ib3R0b206LjYyNXJlbSAhaW1wb3J0YW50fS5tbC14bC0yLC5teC14bC0ye21hcmdpbi1sZWZ0Oi42MjVyZW0gIWltcG9ydGFudH0ubS14bC0ze21hcmdpbjouOTM3NXJlbSAhaW1wb3J0YW50fS5tdC14bC0zLC5teS14bC0ze21hcmdpbi10b3A6LjkzNzVyZW0gIWltcG9ydGFudH0ubXIteGwtMywubXgteGwtM3ttYXJnaW4tcmlnaHQ6LjkzNzVyZW0gIWltcG9ydGFudH0ubWIteGwtMywubXkteGwtM3ttYXJnaW4tYm90dG9tOi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1sLXhsLTMsLm14LXhsLTN7bWFyZ2luLWxlZnQ6LjkzNzVyZW0gIWltcG9ydGFudH0ubS14bC00e21hcmdpbjoxLjg3NXJlbSAhaW1wb3J0YW50fS5tdC14bC00LC5teS14bC00e21hcmdpbi10b3A6MS44NzVyZW0gIWltcG9ydGFudH0ubXIteGwtNCwubXgteGwtNHttYXJnaW4tcmlnaHQ6MS44NzVyZW0gIWltcG9ydGFudH0ubWIteGwtNCwubXkteGwtNHttYXJnaW4tYm90dG9tOjEuODc1cmVtICFpbXBvcnRhbnR9Lm1sLXhsLTQsLm14LXhsLTR7bWFyZ2luLWxlZnQ6MS44NzVyZW0gIWltcG9ydGFudH0ubS14bC01e21hcmdpbjozLjc1cmVtICFpbXBvcnRhbnR9Lm10LXhsLTUsLm15LXhsLTV7bWFyZ2luLXRvcDozLjc1cmVtICFpbXBvcnRhbnR9Lm1yLXhsLTUsLm14LXhsLTV7bWFyZ2luLXJpZ2h0OjMuNzVyZW0gIWltcG9ydGFudH0ubWIteGwtNSwubXkteGwtNXttYXJnaW4tYm90dG9tOjMuNzVyZW0gIWltcG9ydGFudH0ubWwteGwtNSwubXgteGwtNXttYXJnaW4tbGVmdDozLjc1cmVtICFpbXBvcnRhbnR9LnAteGwtMHtwYWRkaW5nOjAgIWltcG9ydGFudH0ucHQteGwtMCwucHkteGwtMHtwYWRkaW5nLXRvcDowICFpbXBvcnRhbnR9LnByLXhsLTAsLnB4LXhsLTB7cGFkZGluZy1yaWdodDowICFpbXBvcnRhbnR9LnBiLXhsLTAsLnB5LXhsLTB7cGFkZGluZy1ib3R0b206MCAhaW1wb3J0YW50fS5wbC14bC0wLC5weC14bC0we3BhZGRpbmctbGVmdDowICFpbXBvcnRhbnR9LnAteGwtMXtwYWRkaW5nOi4zMTI1cmVtICFpbXBvcnRhbnR9LnB0LXhsLTEsLnB5LXhsLTF7cGFkZGluZy10b3A6LjMxMjVyZW0gIWltcG9ydGFudH0ucHIteGwtMSwucHgteGwtMXtwYWRkaW5nLXJpZ2h0Oi4zMTI1cmVtICFpbXBvcnRhbnR9LnBiLXhsLTEsLnB5LXhsLTF7cGFkZGluZy1ib3R0b206LjMxMjVyZW0gIWltcG9ydGFudH0ucGwteGwtMSwucHgteGwtMXtwYWRkaW5nLWxlZnQ6LjMxMjVyZW0gIWltcG9ydGFudH0ucC14bC0ye3BhZGRpbmc6LjYyNXJlbSAhaW1wb3J0YW50fS5wdC14bC0yLC5weS14bC0ye3BhZGRpbmctdG9wOi42MjVyZW0gIWltcG9ydGFudH0ucHIteGwtMiwucHgteGwtMntwYWRkaW5nLXJpZ2h0Oi42MjVyZW0gIWltcG9ydGFudH0ucGIteGwtMiwucHkteGwtMntwYWRkaW5nLWJvdHRvbTouNjI1cmVtICFpbXBvcnRhbnR9LnBsLXhsLTIsLnB4LXhsLTJ7cGFkZGluZy1sZWZ0Oi42MjVyZW0gIWltcG9ydGFudH0ucC14bC0ze3BhZGRpbmc6LjkzNzVyZW0gIWltcG9ydGFudH0ucHQteGwtMywucHkteGwtM3twYWRkaW5nLXRvcDouOTM3NXJlbSAhaW1wb3J0YW50fS5wci14bC0zLC5weC14bC0ze3BhZGRpbmctcmlnaHQ6LjkzNzVyZW0gIWltcG9ydGFudH0ucGIteGwtMywucHkteGwtM3twYWRkaW5nLWJvdHRvbTouOTM3NXJlbSAhaW1wb3J0YW50fS5wbC14bC0zLC5weC14bC0ze3BhZGRpbmctbGVmdDouOTM3NXJlbSAhaW1wb3J0YW50fS5wLXhsLTR7cGFkZGluZzoxLjg3NXJlbSAhaW1wb3J0YW50fS5wdC14bC00LC5weS14bC00e3BhZGRpbmctdG9wOjEuODc1cmVtICFpbXBvcnRhbnR9LnByLXhsLTQsLnB4LXhsLTR7cGFkZGluZy1yaWdodDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wYi14bC00LC5weS14bC00e3BhZGRpbmctYm90dG9tOjEuODc1cmVtICFpbXBvcnRhbnR9LnBsLXhsLTQsLnB4LXhsLTR7cGFkZGluZy1sZWZ0OjEuODc1cmVtICFpbXBvcnRhbnR9LnAteGwtNXtwYWRkaW5nOjMuNzVyZW0gIWltcG9ydGFudH0ucHQteGwtNSwucHkteGwtNXtwYWRkaW5nLXRvcDozLjc1cmVtICFpbXBvcnRhbnR9LnByLXhsLTUsLnB4LXhsLTV7cGFkZGluZy1yaWdodDozLjc1cmVtICFpbXBvcnRhbnR9LnBiLXhsLTUsLnB5LXhsLTV7cGFkZGluZy1ib3R0b206My43NXJlbSAhaW1wb3J0YW50fS5wbC14bC01LC5weC14bC01e3BhZGRpbmctbGVmdDozLjc1cmVtICFpbXBvcnRhbnR9Lm0teGwtYXV0b3ttYXJnaW46YXV0byAhaW1wb3J0YW50fS5tdC14bC1hdXRvLC5teS14bC1hdXRve21hcmdpbi10b3A6YXV0byAhaW1wb3J0YW50fS5tci14bC1hdXRvLC5teC14bC1hdXRve21hcmdpbi1yaWdodDphdXRvICFpbXBvcnRhbnR9Lm1iLXhsLWF1dG8sLm15LXhsLWF1dG97bWFyZ2luLWJvdHRvbTphdXRvICFpbXBvcnRhbnR9Lm1sLXhsLWF1dG8sLm14LXhsLWF1dG97bWFyZ2luLWxlZnQ6YXV0byAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDogMTYwMHB4KXsubS14eGwtMHttYXJnaW46MCAhaW1wb3J0YW50fS5tdC14eGwtMCwubXkteHhsLTB7bWFyZ2luLXRvcDowICFpbXBvcnRhbnR9Lm1yLXh4bC0wLC5teC14eGwtMHttYXJnaW4tcmlnaHQ6MCAhaW1wb3J0YW50fS5tYi14eGwtMCwubXkteHhsLTB7bWFyZ2luLWJvdHRvbTowICFpbXBvcnRhbnR9Lm1sLXh4bC0wLC5teC14eGwtMHttYXJnaW4tbGVmdDowICFpbXBvcnRhbnR9Lm0teHhsLTF7bWFyZ2luOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm10LXh4bC0xLC5teS14eGwtMXttYXJnaW4tdG9wOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm1yLXh4bC0xLC5teC14eGwtMXttYXJnaW4tcmlnaHQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubWIteHhsLTEsLm15LXh4bC0xe21hcmdpbi1ib3R0b206LjMxMjVyZW0gIWltcG9ydGFudH0ubWwteHhsLTEsLm14LXh4bC0xe21hcmdpbi1sZWZ0Oi4zMTI1cmVtICFpbXBvcnRhbnR9Lm0teHhsLTJ7bWFyZ2luOi42MjVyZW0gIWltcG9ydGFudH0ubXQteHhsLTIsLm15LXh4bC0ye21hcmdpbi10b3A6LjYyNXJlbSAhaW1wb3J0YW50fS5tci14eGwtMiwubXgteHhsLTJ7bWFyZ2luLXJpZ2h0Oi42MjVyZW0gIWltcG9ydGFudH0ubWIteHhsLTIsLm15LXh4bC0ye21hcmdpbi1ib3R0b206LjYyNXJlbSAhaW1wb3J0YW50fS5tbC14eGwtMiwubXgteHhsLTJ7bWFyZ2luLWxlZnQ6LjYyNXJlbSAhaW1wb3J0YW50fS5tLXh4bC0ze21hcmdpbjouOTM3NXJlbSAhaW1wb3J0YW50fS5tdC14eGwtMywubXkteHhsLTN7bWFyZ2luLXRvcDouOTM3NXJlbSAhaW1wb3J0YW50fS5tci14eGwtMywubXgteHhsLTN7bWFyZ2luLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1iLXh4bC0zLC5teS14eGwtM3ttYXJnaW4tYm90dG9tOi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1sLXh4bC0zLC5teC14eGwtM3ttYXJnaW4tbGVmdDouOTM3NXJlbSAhaW1wb3J0YW50fS5tLXh4bC00e21hcmdpbjoxLjg3NXJlbSAhaW1wb3J0YW50fS5tdC14eGwtNCwubXkteHhsLTR7bWFyZ2luLXRvcDoxLjg3NXJlbSAhaW1wb3J0YW50fS5tci14eGwtNCwubXgteHhsLTR7bWFyZ2luLXJpZ2h0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm1iLXh4bC00LC5teS14eGwtNHttYXJnaW4tYm90dG9tOjEuODc1cmVtICFpbXBvcnRhbnR9Lm1sLXh4bC00LC5teC14eGwtNHttYXJnaW4tbGVmdDoxLjg3NXJlbSAhaW1wb3J0YW50fS5tLXh4bC01e21hcmdpbjozLjc1cmVtICFpbXBvcnRhbnR9Lm10LXh4bC01LC5teS14eGwtNXttYXJnaW4tdG9wOjMuNzVyZW0gIWltcG9ydGFudH0ubXIteHhsLTUsLm14LXh4bC01e21hcmdpbi1yaWdodDozLjc1cmVtICFpbXBvcnRhbnR9Lm1iLXh4bC01LC5teS14eGwtNXttYXJnaW4tYm90dG9tOjMuNzVyZW0gIWltcG9ydGFudH0ubWwteHhsLTUsLm14LXh4bC01e21hcmdpbi1sZWZ0OjMuNzVyZW0gIWltcG9ydGFudH0ucC14eGwtMHtwYWRkaW5nOjAgIWltcG9ydGFudH0ucHQteHhsLTAsLnB5LXh4bC0we3BhZGRpbmctdG9wOjAgIWltcG9ydGFudH0ucHIteHhsLTAsLnB4LXh4bC0we3BhZGRpbmctcmlnaHQ6MCAhaW1wb3J0YW50fS5wYi14eGwtMCwucHkteHhsLTB7cGFkZGluZy1ib3R0b206MCAhaW1wb3J0YW50fS5wbC14eGwtMCwucHgteHhsLTB7cGFkZGluZy1sZWZ0OjAgIWltcG9ydGFudH0ucC14eGwtMXtwYWRkaW5nOi4zMTI1cmVtICFpbXBvcnRhbnR9LnB0LXh4bC0xLC5weS14eGwtMXtwYWRkaW5nLXRvcDouMzEyNXJlbSAhaW1wb3J0YW50fS5wci14eGwtMSwucHgteHhsLTF7cGFkZGluZy1yaWdodDouMzEyNXJlbSAhaW1wb3J0YW50fS5wYi14eGwtMSwucHkteHhsLTF7cGFkZGluZy1ib3R0b206LjMxMjVyZW0gIWltcG9ydGFudH0ucGwteHhsLTEsLnB4LXh4bC0xe3BhZGRpbmctbGVmdDouMzEyNXJlbSAhaW1wb3J0YW50fS5wLXh4bC0ye3BhZGRpbmc6LjYyNXJlbSAhaW1wb3J0YW50fS5wdC14eGwtMiwucHkteHhsLTJ7cGFkZGluZy10b3A6LjYyNXJlbSAhaW1wb3J0YW50fS5wci14eGwtMiwucHgteHhsLTJ7cGFkZGluZy1yaWdodDouNjI1cmVtICFpbXBvcnRhbnR9LnBiLXh4bC0yLC5weS14eGwtMntwYWRkaW5nLWJvdHRvbTouNjI1cmVtICFpbXBvcnRhbnR9LnBsLXh4bC0yLC5weC14eGwtMntwYWRkaW5nLWxlZnQ6LjYyNXJlbSAhaW1wb3J0YW50fS5wLXh4bC0ze3BhZGRpbmc6LjkzNzVyZW0gIWltcG9ydGFudH0ucHQteHhsLTMsLnB5LXh4bC0ze3BhZGRpbmctdG9wOi45Mzc1cmVtICFpbXBvcnRhbnR9LnByLXh4bC0zLC5weC14eGwtM3twYWRkaW5nLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9LnBiLXh4bC0zLC5weS14eGwtM3twYWRkaW5nLWJvdHRvbTouOTM3NXJlbSAhaW1wb3J0YW50fS5wbC14eGwtMywucHgteHhsLTN7cGFkZGluZy1sZWZ0Oi45Mzc1cmVtICFpbXBvcnRhbnR9LnAteHhsLTR7cGFkZGluZzoxLjg3NXJlbSAhaW1wb3J0YW50fS5wdC14eGwtNCwucHkteHhsLTR7cGFkZGluZy10b3A6MS44NzVyZW0gIWltcG9ydGFudH0ucHIteHhsLTQsLnB4LXh4bC00e3BhZGRpbmctcmlnaHQ6MS44NzVyZW0gIWltcG9ydGFudH0ucGIteHhsLTQsLnB5LXh4bC00e3BhZGRpbmctYm90dG9tOjEuODc1cmVtICFpbXBvcnRhbnR9LnBsLXh4bC00LC5weC14eGwtNHtwYWRkaW5nLWxlZnQ6MS44NzVyZW0gIWltcG9ydGFudH0ucC14eGwtNXtwYWRkaW5nOjMuNzVyZW0gIWltcG9ydGFudH0ucHQteHhsLTUsLnB5LXh4bC01e3BhZGRpbmctdG9wOjMuNzVyZW0gIWltcG9ydGFudH0ucHIteHhsLTUsLnB4LXh4bC01e3BhZGRpbmctcmlnaHQ6My43NXJlbSAhaW1wb3J0YW50fS5wYi14eGwtNSwucHkteHhsLTV7cGFkZGluZy1ib3R0b206My43NXJlbSAhaW1wb3J0YW50fS5wbC14eGwtNSwucHgteHhsLTV7cGFkZGluZy1sZWZ0OjMuNzVyZW0gIWltcG9ydGFudH0ubS14eGwtYXV0b3ttYXJnaW46YXV0byAhaW1wb3J0YW50fS5tdC14eGwtYXV0bywubXkteHhsLWF1dG97bWFyZ2luLXRvcDphdXRvICFpbXBvcnRhbnR9Lm1yLXh4bC1hdXRvLC5teC14eGwtYXV0b3ttYXJnaW4tcmlnaHQ6YXV0byAhaW1wb3J0YW50fS5tYi14eGwtYXV0bywubXkteHhsLWF1dG97bWFyZ2luLWJvdHRvbTphdXRvICFpbXBvcnRhbnR9Lm1sLXh4bC1hdXRvLC5teC14eGwtYXV0b3ttYXJnaW4tbGVmdDphdXRvICFpbXBvcnRhbnR9fS50ZXh0LWp1c3RpZnl7dGV4dC1hbGlnbjpqdXN0aWZ5ICFpbXBvcnRhbnR9LnRleHQtbm93cmFwe3doaXRlLXNwYWNlOm5vd3JhcCAhaW1wb3J0YW50fS50ZXh0LXRydW5jYXRle292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHQgIWltcG9ydGFudH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXIgIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDogNTQ0cHgpey50ZXh0LXNtLWxlZnR7dGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnR9LnRleHQtc20tcmlnaHR7dGV4dC1hbGlnbjpyaWdodCAhaW1wb3J0YW50fS50ZXh0LXNtLWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlciAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpey50ZXh0LW1kLWxlZnR7dGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnR9LnRleHQtbWQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodCAhaW1wb3J0YW50fS50ZXh0LW1kLWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlciAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDogMTAyNHB4KXsudGV4dC1sZy1sZWZ0e3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50fS50ZXh0LWxnLXJpZ2h0e3RleHQtYWxpZ246cmlnaHQgIWltcG9ydGFudH0udGV4dC1sZy1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXIgIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDEzMDBweCl7LnRleHQteGwtbGVmdHt0ZXh0LWFsaWduOmxlZnQgIWltcG9ydGFudH0udGV4dC14bC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0ICFpbXBvcnRhbnR9LnRleHQteGwtY2VudGVye3RleHQtYWxpZ246Y2VudGVyICFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOiAxNjAwcHgpey50ZXh0LXh4bC1sZWZ0e3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50fS50ZXh0LXh4bC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0ICFpbXBvcnRhbnR9LnRleHQteHhsLWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlciAhaW1wb3J0YW50fX0udGV4dC1sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlICFpbXBvcnRhbnR9LnRleHQtdXBwZXJjYXNle3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZSAhaW1wb3J0YW50fS50ZXh0LWNhcGl0YWxpemV7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZSAhaW1wb3J0YW50fS5mb250LXdlaWdodC1saWdodHtmb250LXdlaWdodDozMDAgIWltcG9ydGFudH0uZm9udC13ZWlnaHQtbm9ybWFse2ZvbnQtd2VpZ2h0OjQwMCAhaW1wb3J0YW50fS5mb250LXdlaWdodC1ib2xke2ZvbnQtd2VpZ2h0OjcwMCAhaW1wb3J0YW50fS5mb250LWl0YWxpY3tmb250LXN0eWxlOml0YWxpYyAhaW1wb3J0YW50fS50ZXh0LXdoaXRle2NvbG9yOiNmZmYgIWltcG9ydGFudH0udGV4dC1wcmltYXJ5e2NvbG9yOiMyNWI5ZDcgIWltcG9ydGFudH1hLnRleHQtcHJpbWFyeTpob3ZlcixhLnRleHQtcHJpbWFyeTpmb2N1c3tjb2xvcjojMWU5NGFiICFpbXBvcnRhbnR9LnRleHQtc2Vjb25kYXJ5e2NvbG9yOiM2Yzg2OGUgIWltcG9ydGFudH1hLnRleHQtc2Vjb25kYXJ5OmhvdmVyLGEudGV4dC1zZWNvbmRhcnk6Zm9jdXN7Y29sb3I6IzU2NmI3MSAhaW1wb3J0YW50fS50ZXh0LXN1Y2Nlc3N7Y29sb3I6IzcwYjU4MCAhaW1wb3J0YW50fWEudGV4dC1zdWNjZXNzOmhvdmVyLGEudGV4dC1zdWNjZXNzOmZvY3Vze2NvbG9yOiM1MzlmNjQgIWltcG9ydGFudH0udGV4dC1pbmZve2NvbG9yOiMyNWI5ZDcgIWltcG9ydGFudH1hLnRleHQtaW5mbzpob3ZlcixhLnRleHQtaW5mbzpmb2N1c3tjb2xvcjojMWU5NGFiICFpbXBvcnRhbnR9LnRleHQtd2FybmluZ3tjb2xvcjojZmFiMDAwICFpbXBvcnRhbnR9YS50ZXh0LXdhcm5pbmc6aG92ZXIsYS50ZXh0LXdhcm5pbmc6Zm9jdXN7Y29sb3I6I2M3OGMwMCAhaW1wb3J0YW50fS50ZXh0LWRhbmdlcntjb2xvcjojZjU0YzNlICFpbXBvcnRhbnR9YS50ZXh0LWRhbmdlcjpob3ZlcixhLnRleHQtZGFuZ2VyOmZvY3Vze2NvbG9yOiNmMjFmMGUgIWltcG9ydGFudH0udGV4dC1saWdodHtjb2xvcjojZmFmYmZjICFpbXBvcnRhbnR9YS50ZXh0LWxpZ2h0OmhvdmVyLGEudGV4dC1saWdodDpmb2N1c3tjb2xvcjojZGFlMmU5ICFpbXBvcnRhbnR9LnRleHQtZGFya3tjb2xvcjojMzYzYTQxICFpbXBvcnRhbnR9YS50ZXh0LWRhcms6aG92ZXIsYS50ZXh0LWRhcms6Zm9jdXN7Y29sb3I6IzFmMjEyNSAhaW1wb3J0YW50fS50ZXh0LW11dGVke2NvbG9yOiM2Yzg2OGUgIWltcG9ydGFudH0udGV4dC1oaWRle2ZvbnQ6MC8wIGE7Y29sb3I6dHJhbnNwYXJlbnQ7dGV4dC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjowfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZSAhaW1wb3J0YW50fS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW4gIWltcG9ydGFudH0ucHJvZHVjdC1wYWdlIC5kcm9wem9uZS13aW5kb3d7d2lkdGg6NDUlO2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTthbGlnbi1zZWxmOnN0cmV0Y2g7cGFkZGluZzoxcmVtO21pbi13aWR0aDoyMHJlbX0ucHJvZHVjdC1wYWdlIC5kcm9wem9uZS13aW5kb3ctZmlsZW1hbmFnZXJ7ZGlzcGxheTpub25lfS5wcm9kdWN0LXBhZ2UgLmRyb3B6b25lLXdpbmRvdy1sYWJlbHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1ib3R0b206MC41cmVtfS5wcm9kdWN0LXBhZ2UgLmRyb3B6b25lLXdpbmRvdy1sYWJlbCBsYWJlbHttYXJnaW4tYm90dG9tOjB9LnByb2R1Y3QtcGFnZSAuZHJvcHpvbmUtd2luZG93LWxhYmVsIC5kcm9wZG93bj5idXR0b257cGFkZGluZy1yaWdodDowLjI1cmVtfS5wcm9kdWN0LXBhZ2UgLmRyb3B6b25lLXdpbmRvdy1sYWJlbCAuZHJvcGRvd24taXRlbXtjdXJzb3I6cG9pbnRlcn0ucHJvZHVjdC1wYWdlIC5kcm9wem9uZS13aW5kb3cgdGV4dGFyZWF7bWFyZ2luLWJvdHRvbToxcmVtfS5wcm9kdWN0LXBhZ2UgLmRyb3B6b25lLXdpbmRvdy1idXR0b24tY29udGFpbmVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LnByb2R1Y3QtcGFnZSAuZHJvcHpvbmUtd2luZG93LWNoZWNrYm94e21hcmdpbi1ib3R0b206MXJlbX0ucHJvZHVjdC1wYWdlIC5kcm9wem9uZS13aW5kb3ctY2hlY2tib3ggbGFiZWx7Zm9udC1zaXplOjAuODc1cmVtfS5wcm9kdWN0LXBhZ2UgLmRyb3B6b25lLXdpbmRvdy1zZWxlY3QsLnByb2R1Y3QtcGFnZSAuZHJvcHpvbmUtd2luZG93LXVuc2VsZWN0e2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MC45MjVyZW07Y29sb3I6IzI1YjlkNztjdXJzb3I6cG9pbnRlcjttYXJnaW4tdG9wOjAuNXJlbX0ucHJvZHVjdC1wYWdlIC5kcm9wem9uZS13aW5kb3ctbnVtYmVye2ZvbnQtc2l6ZToxcmVtfS5wcm9kdWN0LXBhZ2UgLmRyb3B6b25lLXdpbmRvdy1udW1iZXIgc3Bhbntjb2xvcjojMjViOWQ3O2ZvbnQtd2VpZ2h0OjYwMH0ucHJvZHVjdC1wYWdlIC5kcm9wem9uZS13aW5kb3ctaGVhZGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZzowIDFyZW19LnByb2R1Y3QtcGFnZSAuZHJvcHpvbmUtd2luZG93LWhlYWRlciBwe21hcmdpbi1ib3R0b206MH0ucHJvZHVjdC1wYWdlIC5kcm9wem9uZS13aW5kb3ctaGVhZGVyIC5tYXRlcmlhbC1pY29uc3tjdXJzb3I6cG9pbnRlcjtjb2xvcjojNmM4NjhlO3RyYW5zaXRpb246MC4yNXMgZWFzZS1vdXQ7Zm9udC1zaXplOjEuNXJlbTttYXJnaW46MCAwLjI1cmVtfS5wcm9kdWN0LXBhZ2UgLmRyb3B6b25lLXdpbmRvdy1oZWFkZXIgLm1hdGVyaWFsLWljb25zOmxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjB9LnByb2R1Y3QtcGFnZSAuZHJvcHpvbmUtd2luZG93LWhlYWRlciAubWF0ZXJpYWwtaWNvbnM6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0ucHJvZHVjdC1wYWdlIC5kcm9wem9uZS13aW5kb3ctaGVhZGVyIC5tYXRlcmlhbC1pY29uczpob3Zlcntjb2xvcjpwcmltYXJ5fUBtZWRpYSAobWF4LXdpZHRoOiA1NDMuOThweCl7LnByb2R1Y3QtcGFnZSAuZHJvcHpvbmUtd2luZG93e3dpZHRoOjEwMCU7bWluLXdpZHRoOjEwMCV9fVxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy91dGlsaXRpZXMvX2FsaWduLnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2JhY2tncm91bmQtdmFyaWFudC5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19ob3Zlci5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL19iYWNrZ3JvdW5kLnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy91dGlsaXRpZXMvX2JvcmRlcnMuc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fY2xlYXJmaXguc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3V0aWxpdGllcy9fZGlzcGxheS5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19icmVha3BvaW50cy5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL19lbWJlZC5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL19mbGV4LnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy91dGlsaXRpZXMvX2Zsb2F0LnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2Zsb2F0LnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy91dGlsaXRpZXMvX3Bvc2l0aW9uLnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fdmFyaWFibGVzLnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy91dGlsaXRpZXMvX3NjcmVlbnJlYWRlcnMuc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fc2NyZWVuLXJlYWRlci5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL19zaXppbmcuc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3V0aWxpdGllcy9fc3BhY2luZy5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL190ZXh0LnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3RleHQtdHJ1bmNhdGUuc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fdGV4dC1lbXBoYXNpcy5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL190ZXh0LWhpZGUuc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fdmlzaWJpbGl0eS5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL192aXNpYmlsaXR5LnNjc3NcIixcIndlYnBhY2s6Ly8uL2pzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9kcm9wem9uZS9Ecm9wem9uZVdpbmRvdy52dWVcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9wcmVzdGFraXQvc2Nzcy9fdmFyaWFibGVzLnNjc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBRUEsZ0JBQXFCLGtDQUFtQyxDQUFJLFdBQ3ZDLDZCQUE4QixDQUFJLGNBQ2xDLGdDQUFpQyxDQUFJLGNBQ3JDLGdDQUFpQyxDQUFJLG1CQUNyQyxxQ0FBc0MsQ0FBSSxnQkFDMUMsa0NBQW1DLENDRnRELFlBQ0UsbUNBQW1DLENDWXJDLHNGRFBJLG1DQUFnRCxDQ1VuRCxjRGZDLG1DQUFtQyxDQ1lyQyw4RkRQSSxtQ0FBZ0QsQ0NVbkQsWURmQyxtQ0FBbUMsQ0NZckMsc0ZEUEksbUNBQWdELENDVW5ELFNEZkMsbUNBQW1DLENDWXJDLDBFRFBJLG1DQUFnRCxDQ1VuRCxZRGZDLG1DQUFtQyxDQ1lyQyxzRkRQSSxtQ0FBZ0QsQ0NVbkQsV0RmQyxtQ0FBbUMsQ0NZckMsa0ZEUEksbUNBQWdELENDVW5ELFVEZkMsbUNBQW1DLENDWXJDLDhFRFBJLG1DQUFnRCxDQ1VuRCxTRGZDLG1DQUFtQyxDQ1lyQywwRURQSSxtQ0FBZ0QsQ0NVbkQsVUNSRCxnQ0FBbUMsQ0FDcEMsZ0JBR0MsdUNBQXdDLENBQ3pDLFFDWmlCLG1DQUFvRCxDQUFJLFlBQ3hELHVDQUF3RCxDQUFJLGNBQzVELHlDQUEwRCxDQUFJLGVBQzlELDBDQUEyRCxDQUFJLGFBQy9ELHdDQUF5RCxDQUFJLFVBRTVELG1CQUFvQixDQUFJLGNBQ3hCLHVCQUF3QixDQUFJLGdCQUM1Qix5QkFBMEIsQ0FBSSxpQkFDOUIsMEJBQTJCLENBQUksZUFDL0Isd0JBQXlCLENBQUksZ0JBSTVDLCtCQUErQixDQURqQyxrQkFDRSwrQkFBK0IsQ0FEakMsZ0JBQ0UsK0JBQStCLENBRGpDLGFBQ0UsK0JBQStCLENBRGpDLGdCQUNFLCtCQUErQixDQURqQyxlQUNFLCtCQUErQixDQURqQyxjQUNFLCtCQUErQixDQURqQyxhQUNFLCtCQUErQixDQUNoQyxjQUlELDRCQUErQixDQUNoQyxTQU9DLDRCQUF3QyxDQUN6QyxhQUVDLHFDQUFpRCxDQUNqRCxzQ0FBa0QsQ0FDbkQsZUFFQyxzQ0FBa0QsQ0FDbEQseUNBQXFELENBQ3RELGdCQUVDLHlDQUFxRCxDQUNyRCx3Q0FBb0QsQ0FDckQsY0FFQyxxQ0FBaUQsQ0FDakQsd0NBQW9ELENBQ3JELGdCQUdDLDRCQUE2QixDQUM5QixXQUdDLDBCQUEyQixDQ3hEM0IsaUJBQ0UsYUFBYyxDQUNkLFVBQVcsQ0FDWCxVQUFXLENBQ1osUUNLNEIsdUJBQXdCLENBQUksVUFDNUIseUJBQTBCLENBQUksZ0JBQzlCLCtCQUFnQyxDQUFJLFNBQ3BDLHdCQUF5QixDQUFJLFNBQzdCLHdCQUF5QixDQUFJLGFBQzdCLDRCQUE2QixDQUFJLGNBQ2pDLDZCQUE4QixDQUFJLFFBQ2xDLHVCQUF3QixDQUFJLGVBQzVCLDhCQUErQixDQzBDMUQsMEJEbERBLFdBQTJCLHVCQUF3QixDQUFJLGFBQzVCLHlCQUEwQixDQUFJLG1CQUM5QiwrQkFBZ0MsQ0FBSSxZQUNwQyx3QkFBeUIsQ0FBSSxZQUM3Qix3QkFBeUIsQ0FBSSxnQkFDN0IsNEJBQTZCLENBQUksaUJBQ2pDLDZCQUE4QixDQUFJLFdBQ2xDLHVCQUF3QixDQUFJLGtCQUM1Qiw4QkFBK0IsQ0FBSSxDQzBDOUQsMEJEbERBLFdBQTJCLHVCQUF3QixDQUFJLGFBQzVCLHlCQUEwQixDQUFJLG1CQUM5QiwrQkFBZ0MsQ0FBSSxZQUNwQyx3QkFBeUIsQ0FBSSxZQUM3Qix3QkFBeUIsQ0FBSSxnQkFDN0IsNEJBQTZCLENBQUksaUJBQ2pDLDZCQUE4QixDQUFJLFdBQ2xDLHVCQUF3QixDQUFJLGtCQUM1Qiw4QkFBK0IsQ0FBSSxDQzBDOUQsMkJEbERBLFdBQTJCLHVCQUF3QixDQUFJLGFBQzVCLHlCQUEwQixDQUFJLG1CQUM5QiwrQkFBZ0MsQ0FBSSxZQUNwQyx3QkFBeUIsQ0FBSSxZQUM3Qix3QkFBeUIsQ0FBSSxnQkFDN0IsNEJBQTZCLENBQUksaUJBQ2pDLDZCQUE4QixDQUFJLFdBQ2xDLHVCQUF3QixDQUFJLGtCQUM1Qiw4QkFBK0IsQ0FBSSxDQzBDOUQsMkJEbERBLFdBQTJCLHVCQUF3QixDQUFJLGFBQzVCLHlCQUEwQixDQUFJLG1CQUM5QiwrQkFBZ0MsQ0FBSSxZQUNwQyx3QkFBeUIsQ0FBSSxZQUM3Qix3QkFBeUIsQ0FBSSxnQkFDN0IsNEJBQTZCLENBQUksaUJBQ2pDLDZCQUE4QixDQUFJLFdBQ2xDLHVCQUF3QixDQUFJLGtCQUM1Qiw4QkFBK0IsQ0FBSSxDQzBDOUQsMkJEbERBLFlBQTJCLHVCQUF3QixDQUFJLGNBQzVCLHlCQUEwQixDQUFJLG9CQUM5QiwrQkFBZ0MsQ0FBSSxhQUNwQyx3QkFBeUIsQ0FBSSxhQUM3Qix3QkFBeUIsQ0FBSSxpQkFDN0IsNEJBQTZCLENBQUksa0JBQ2pDLDZCQUE4QixDQUFJLFlBQ2xDLHVCQUF3QixDQUFJLG1CQUM1Qiw4QkFBK0IsQ0FBSSxDQVNsRSxhQUNFLGNBQXdCLHVCQUF3QixDQUFJLGdCQUM1Qix5QkFBMEIsQ0FBSSxzQkFDOUIsK0JBQWdDLENBQUksZUFDcEMsd0JBQXlCLENBQUksZUFDN0Isd0JBQXlCLENBQUksbUJBQzdCLDRCQUE2QixDQUFJLG9CQUNqQyw2QkFBOEIsQ0FBSSxjQUNsQyx1QkFBd0IsQ0FBSSxxQkFDNUIsOEJBQStCLENBQUksQ0VsQzdELGtCQUNFLGlCQUFrQixDQUNsQixhQUFjLENBQ2QsVUFBVyxDQUNYLFNBQVUsQ0FDVixlQUFnQixDQUxsQiwwQkFRSSxhQUFjLENBQ2QsVUFBVyxDQVRmLDJJQWlCSSxpQkFBa0IsQ0FDbEIsS0FBTSxDQUNOLFFBQVMsQ0FDVCxNQUFPLENBQ1AsVUFBVyxDQUNYLFdBQVksQ0FDWixRQUFTLENBQ1YsZ0NBS0MscUJBQStCLENBQ2hDLGdDQUtDLGtCQUErQixDQUNoQywrQkFLQyxlQUE4QixDQUMvQiwrQkFLQyxnQkFBOEIsQ0FDL0IsVUN4Q2lDLDZCQUE4QixDQUFJLGFBQ2xDLGdDQUFpQyxDQUFJLGtCQUNyQyxxQ0FBc0MsQ0FBSSxxQkFDMUMsd0NBQXlDLENBQUksV0FFL0MseUJBQTBCLENBQUksYUFDOUIsMkJBQTRCLENBQUksbUJBQ2hDLGlDQUFrQyxDQUFJLHVCQUVoQyxxQ0FBc0MsQ0FBSSxxQkFDMUMsbUNBQW9DLENBQUksd0JBQ3hDLGlDQUFrQyxDQUFJLHlCQUN0Qyx3Q0FBeUMsQ0FBSSx3QkFDN0MsdUNBQXdDLENBQUksbUJBRS9DLGlDQUFrQyxDQUFJLGlCQUN0QywrQkFBZ0MsQ0FBSSxvQkFDcEMsNkJBQThCLENBQUksc0JBQ2xDLCtCQUFnQyxDQUFJLHFCQUNwQyw4QkFBK0IsQ0FBSSxxQkFFbEMsbUNBQW9DLENBQUksbUJBQ3hDLGlDQUFrQyxDQUFJLHNCQUN0QywrQkFBZ0MsQ0FBSSx1QkFDcEMsc0NBQXVDLENBQUksc0JBQzNDLHFDQUFzQyxDQUFJLHVCQUMxQyxnQ0FBaUMsQ0FBSSxpQkFFdkMsMEJBQTJCLENBQUksa0JBQy9CLGdDQUFpQyxDQUFJLGdCQUNyQyw4QkFBK0IsQ0FBSSxtQkFDbkMsNEJBQTZCLENBQUkscUJBQ2pDLDhCQUErQixDQUFJLG9CQUNuQyw2QkFBOEIsQ0ZpQjlELDBCRWxEQSxhQUFnQyw2QkFBOEIsQ0FBSSxnQkFDbEMsZ0NBQWlDLENBQUkscUJBQ3JDLHFDQUFzQyxDQUFJLHdCQUMxQyx3Q0FBeUMsQ0FBSSxjQUUvQyx5QkFBMEIsQ0FBSSxnQkFDOUIsMkJBQTRCLENBQUksc0JBQ2hDLGlDQUFrQyxDQUFJLDBCQUVoQyxxQ0FBc0MsQ0FBSSx3QkFDMUMsbUNBQW9DLENBQUksMkJBQ3hDLGlDQUFrQyxDQUFJLDRCQUN0Qyx3Q0FBeUMsQ0FBSSwyQkFDN0MsdUNBQXdDLENBQUksc0JBRS9DLGlDQUFrQyxDQUFJLG9CQUN0QywrQkFBZ0MsQ0FBSSx1QkFDcEMsNkJBQThCLENBQUkseUJBQ2xDLCtCQUFnQyxDQUFJLHdCQUNwQyw4QkFBK0IsQ0FBSSx3QkFFbEMsbUNBQW9DLENBQUksc0JBQ3hDLGlDQUFrQyxDQUFJLHlCQUN0QywrQkFBZ0MsQ0FBSSwwQkFDcEMsc0NBQXVDLENBQUkseUJBQzNDLHFDQUFzQyxDQUFJLDBCQUMxQyxnQ0FBaUMsQ0FBSSxvQkFFdkMsMEJBQTJCLENBQUkscUJBQy9CLGdDQUFpQyxDQUFJLG1CQUNyQyw4QkFBK0IsQ0FBSSxzQkFDbkMsNEJBQTZCLENBQUksd0JBQ2pDLDhCQUErQixDQUFJLHVCQUNuQyw2QkFBOEIsQ0FBSSxDRmlCbEUsMEJFbERBLGFBQWdDLDZCQUE4QixDQUFJLGdCQUNsQyxnQ0FBaUMsQ0FBSSxxQkFDckMscUNBQXNDLENBQUksd0JBQzFDLHdDQUF5QyxDQUFJLGNBRS9DLHlCQUEwQixDQUFJLGdCQUM5QiwyQkFBNEIsQ0FBSSxzQkFDaEMsaUNBQWtDLENBQUksMEJBRWhDLHFDQUFzQyxDQUFJLHdCQUMxQyxtQ0FBb0MsQ0FBSSwyQkFDeEMsaUNBQWtDLENBQUksNEJBQ3RDLHdDQUF5QyxDQUFJLDJCQUM3Qyx1Q0FBd0MsQ0FBSSxzQkFFL0MsaUNBQWtDLENBQUksb0JBQ3RDLCtCQUFnQyxDQUFJLHVCQUNwQyw2QkFBOEIsQ0FBSSx5QkFDbEMsK0JBQWdDLENBQUksd0JBQ3BDLDhCQUErQixDQUFJLHdCQUVsQyxtQ0FBb0MsQ0FBSSxzQkFDeEMsaUNBQWtDLENBQUkseUJBQ3RDLCtCQUFnQyxDQUFJLDBCQUNwQyxzQ0FBdUMsQ0FBSSx5QkFDM0MscUNBQXNDLENBQUksMEJBQzFDLGdDQUFpQyxDQUFJLG9CQUV2QywwQkFBMkIsQ0FBSSxxQkFDL0IsZ0NBQWlDLENBQUksbUJBQ3JDLDhCQUErQixDQUFJLHNCQUNuQyw0QkFBNkIsQ0FBSSx3QkFDakMsOEJBQStCLENBQUksdUJBQ25DLDZCQUE4QixDQUFJLENGaUJsRSwyQkVsREEsYUFBZ0MsNkJBQThCLENBQUksZ0JBQ2xDLGdDQUFpQyxDQUFJLHFCQUNyQyxxQ0FBc0MsQ0FBSSx3QkFDMUMsd0NBQXlDLENBQUksY0FFL0MseUJBQTBCLENBQUksZ0JBQzlCLDJCQUE0QixDQUFJLHNCQUNoQyxpQ0FBa0MsQ0FBSSwwQkFFaEMscUNBQXNDLENBQUksd0JBQzFDLG1DQUFvQyxDQUFJLDJCQUN4QyxpQ0FBa0MsQ0FBSSw0QkFDdEMsd0NBQXlDLENBQUksMkJBQzdDLHVDQUF3QyxDQUFJLHNCQUUvQyxpQ0FBa0MsQ0FBSSxvQkFDdEMsK0JBQWdDLENBQUksdUJBQ3BDLDZCQUE4QixDQUFJLHlCQUNsQywrQkFBZ0MsQ0FBSSx3QkFDcEMsOEJBQStCLENBQUksd0JBRWxDLG1DQUFvQyxDQUFJLHNCQUN4QyxpQ0FBa0MsQ0FBSSx5QkFDdEMsK0JBQWdDLENBQUksMEJBQ3BDLHNDQUF1QyxDQUFJLHlCQUMzQyxxQ0FBc0MsQ0FBSSwwQkFDMUMsZ0NBQWlDLENBQUksb0JBRXZDLDBCQUEyQixDQUFJLHFCQUMvQixnQ0FBaUMsQ0FBSSxtQkFDckMsOEJBQStCLENBQUksc0JBQ25DLDRCQUE2QixDQUFJLHdCQUNqQyw4QkFBK0IsQ0FBSSx1QkFDbkMsNkJBQThCLENBQUksQ0ZpQmxFLDJCRWxEQSxhQUFnQyw2QkFBOEIsQ0FBSSxnQkFDbEMsZ0NBQWlDLENBQUkscUJBQ3JDLHFDQUFzQyxDQUFJLHdCQUMxQyx3Q0FBeUMsQ0FBSSxjQUUvQyx5QkFBMEIsQ0FBSSxnQkFDOUIsMkJBQTRCLENBQUksc0JBQ2hDLGlDQUFrQyxDQUFJLDBCQUVoQyxxQ0FBc0MsQ0FBSSx3QkFDMUMsbUNBQW9DLENBQUksMkJBQ3hDLGlDQUFrQyxDQUFJLDRCQUN0Qyx3Q0FBeUMsQ0FBSSwyQkFDN0MsdUNBQXdDLENBQUksc0JBRS9DLGlDQUFrQyxDQUFJLG9CQUN0QywrQkFBZ0MsQ0FBSSx1QkFDcEMsNkJBQThCLENBQUkseUJBQ2xDLCtCQUFnQyxDQUFJLHdCQUNwQyw4QkFBK0IsQ0FBSSx3QkFFbEMsbUNBQW9DLENBQUksc0JBQ3hDLGlDQUFrQyxDQUFJLHlCQUN0QywrQkFBZ0MsQ0FBSSwwQkFDcEMsc0NBQXVDLENBQUkseUJBQzNDLHFDQUFzQyxDQUFJLDBCQUMxQyxnQ0FBaUMsQ0FBSSxvQkFFdkMsMEJBQTJCLENBQUkscUJBQy9CLGdDQUFpQyxDQUFJLG1CQUNyQyw4QkFBK0IsQ0FBSSxzQkFDbkMsNEJBQTZCLENBQUksd0JBQ2pDLDhCQUErQixDQUFJLHVCQUNuQyw2QkFBOEIsQ0FBSSxDRmlCbEUsMkJFbERBLGNBQWdDLDZCQUE4QixDQUFJLGlCQUNsQyxnQ0FBaUMsQ0FBSSxzQkFDckMscUNBQXNDLENBQUkseUJBQzFDLHdDQUF5QyxDQUFJLGVBRS9DLHlCQUEwQixDQUFJLGlCQUM5QiwyQkFBNEIsQ0FBSSx1QkFDaEMsaUNBQWtDLENBQUksMkJBRWhDLHFDQUFzQyxDQUFJLHlCQUMxQyxtQ0FBb0MsQ0FBSSw0QkFDeEMsaUNBQWtDLENBQUksNkJBQ3RDLHdDQUF5QyxDQUFJLDRCQUM3Qyx1Q0FBd0MsQ0FBSSx1QkFFL0MsaUNBQWtDLENBQUkscUJBQ3RDLCtCQUFnQyxDQUFJLHdCQUNwQyw2QkFBOEIsQ0FBSSwwQkFDbEMsK0JBQWdDLENBQUkseUJBQ3BDLDhCQUErQixDQUFJLHlCQUVsQyxtQ0FBb0MsQ0FBSSx1QkFDeEMsaUNBQWtDLENBQUksMEJBQ3RDLCtCQUFnQyxDQUFJLDJCQUNwQyxzQ0FBdUMsQ0FBSSwwQkFDM0MscUNBQXNDLENBQUksMkJBQzFDLGdDQUFpQyxDQUFJLHFCQUV2QywwQkFBMkIsQ0FBSSxzQkFDL0IsZ0NBQWlDLENBQUksb0JBQ3JDLDhCQUErQixDQUFJLHVCQUNuQyw0QkFBNkIsQ0FBSSx5QkFDakMsOEJBQStCLENBQUksd0JBQ25DLDZCQUE4QixDQUFJLENDdkNsRSxZQ0RGLHFCQUFzQixDREMyQixhQ0VqRCxzQkFBdUIsQ0REMkIsWUNJbEQscUJBQXNCLENKbURwQiwwQkd4REEsZUNERixxQkFBc0IsQ0RDMkIsZ0JDRWpELHNCQUF1QixDREQyQixlQ0lsRCxxQkFBc0IsQ0RIMkIsQ0hzRC9DLDBCR3hEQSxlQ0RGLHFCQUFzQixDREMyQixnQkNFakQsc0JBQXVCLENERDJCLGVDSWxELHFCQUFzQixDREgyQixDSHNEL0MsMkJHeERBLGVDREYscUJBQXNCLENEQzJCLGdCQ0VqRCxzQkFBdUIsQ0REMkIsZUNJbEQscUJBQXNCLENESDJCLENIc0QvQywyQkd4REEsZUNERixxQkFBc0IsQ0RDMkIsZ0JDRWpELHNCQUF1QixDREQyQixlQ0lsRCxxQkFBc0IsQ0RIMkIsQ0hzRC9DLDJCR3hEQSxnQkNERixxQkFBc0IsQ0RDMkIsaUJDRWpELHNCQUF1QixDREQyQixnQkNJbEQscUJBQXNCLENESDJCLENFRWpELGlCQUF5QiwwQkFBOEIsQ0FBdkQsbUJBQXlCLDRCQUE4QixDQUF2RCxtQkFBeUIsNEJBQThCLENBQXZELGdCQUF5Qix5QkFBOEIsQ0FBdkQsaUJBQXlCLDBCQUE4QixDQUFJLFdBTTNELGNBQWUsQ0FDZixLQUFNLENBQ04sT0FBUSxDQUNSLE1BQU8sQ0FDUCxZQ2lpQnNDLENEaGlCdkMsY0FHQyxjQUFlLENBQ2YsT0FBUSxDQUNSLFFBQVMsQ0FDVCxNQUFPLENBQ1AsWUN5aEJzQyxDRHhoQnZDLDZCQUVELFlBRUksZUFBZ0IsQ0FDaEIsS0FBTSxDQUNOLFlDaWhCb0MsQ0QvZ0J2QyxDRS9CRCxTQ0VFLGlCQUFrQixDQUNsQixTQUFVLENBQ1YsVUFBVyxDQUNYLFNBQVUsQ0FDVixlQUFnQixDQUNoQixxQkFBc0IsQ0FDdEIsa0JBQW1CLENBQ25CLG9CQUFxQixDQUNyQixRQUFTLENBVVQsbURBRUUsZUFBZ0IsQ0FDaEIsVUFBVyxDQUNYLFdBQVksQ0FDWixnQkFBaUIsQ0FDakIsU0FBVSxDQUNWLGtCQUFtQixDQUNuQixjQUFlLENBQ2hCLE1DM0J3QixvQkFBNEIsQ0FBbkQsTUFBdUIsb0JBQTRCLENBQW5ELE1BQXVCLG9CQUE0QixDQUFuRCxPQUF1QixxQkFBNEIsQ0FBbkQsTUFBdUIscUJBQTRCLENBQW5ELE1BQXVCLHFCQUE0QixDQUFuRCxNQUF1QixxQkFBNEIsQ0FBbkQsT0FBdUIsc0JBQTRCLENBQUksUUFJakQseUJBQTBCLENBQUksUUFDOUIsMEJBQTJCLENBQUksS0NBRCxtQkFBNEIsQ0FBSSxZQUc5RCx1QkFBb0MsQ0FDckMsWUFHQyx5QkFBd0MsQ0FDekMsWUFHQywwQkFBMEMsQ0FDM0MsWUFHQyx3QkFBc0MsQ0FmeEMsS0FBZ0MsMEJBQTRCLENBQUksWUFHOUQsOEJBQW9DLENBQ3JDLFlBR0MsZ0NBQXdDLENBQ3pDLFlBR0MsaUNBQTBDLENBQzNDLFlBR0MsK0JBQXNDLENBZnhDLEtBQWdDLHlCQUE0QixDQUFJLFlBRzlELDZCQUFvQyxDQUNyQyxZQUdDLCtCQUF3QyxDQUN6QyxZQUdDLGdDQUEwQyxDQUMzQyxZQUdDLDhCQUFzQyxDQWZ4QyxLQUFnQywwQkFBNEIsQ0FBSSxZQUc5RCw4QkFBb0MsQ0FDckMsWUFHQyxnQ0FBd0MsQ0FDekMsWUFHQyxpQ0FBMEMsQ0FDM0MsWUFHQywrQkFBc0MsQ0FmeEMsS0FBZ0MsMEJBQTRCLENBQUksWUFHOUQsOEJBQW9DLENBQ3JDLFlBR0MsZ0NBQXdDLENBQ3pDLFlBR0MsaUNBQTBDLENBQzNDLFlBR0MsK0JBQXNDLENBZnhDLEtBQWdDLHlCQUE0QixDQUFJLFlBRzlELDZCQUFvQyxDQUNyQyxZQUdDLCtCQUF3QyxDQUN6QyxZQUdDLGdDQUEwQyxDQUMzQyxZQUdDLDhCQUFzQyxDQWZ4QyxLQUFnQyxvQkFBNEIsQ0FBSSxZQUc5RCx3QkFBb0MsQ0FDckMsWUFHQywwQkFBd0MsQ0FDekMsWUFHQywyQkFBMEMsQ0FDM0MsWUFHQyx5QkFBc0MsQ0FmeEMsS0FBZ0MsMkJBQTRCLENBQUksWUFHOUQsK0JBQW9DLENBQ3JDLFlBR0MsaUNBQXdDLENBQ3pDLFlBR0Msa0NBQTBDLENBQzNDLFlBR0MsZ0NBQXNDLENBZnhDLEtBQWdDLDBCQUE0QixDQUFJLFlBRzlELDhCQUFvQyxDQUNyQyxZQUdDLGdDQUF3QyxDQUN6QyxZQUdDLGlDQUEwQyxDQUMzQyxZQUdDLCtCQUFzQyxDQWZ4QyxLQUFnQywyQkFBNEIsQ0FBSSxZQUc5RCwrQkFBb0MsQ0FDckMsWUFHQyxpQ0FBd0MsQ0FDekMsWUFHQyxrQ0FBMEMsQ0FDM0MsWUFHQyxnQ0FBc0MsQ0FmeEMsS0FBZ0MsMkJBQTRCLENBQUksWUFHOUQsK0JBQW9DLENBQ3JDLFlBR0MsaUNBQXdDLENBQ3pDLFlBR0Msa0NBQTBDLENBQzNDLFlBR0MsZ0NBQXNDLENBZnhDLEtBQWdDLDBCQUE0QixDQUFJLFlBRzlELDhCQUFvQyxDQUNyQyxZQUdDLGdDQUF3QyxDQUN6QyxZQUdDLGlDQUEwQyxDQUMzQyxZQUdDLCtCQUFzQyxDQUN2QyxRQUtjLHNCQUF1QixDQUFJLGtCQUc1QywwQkFBMkIsQ0FDNUIsa0JBR0MsNEJBQTZCLENBQzlCLGtCQUdDLDZCQUE4QixDQUMvQixrQkFHQywyQkFBNEIsQ1ZhOUIsMEJVakRJLFFBQWdDLG1CQUE0QixDQUFJLGtCQUc5RCx1QkFBb0MsQ0FDckMsa0JBR0MseUJBQXdDLENBQ3pDLGtCQUdDLDBCQUEwQyxDQUMzQyxrQkFHQyx3QkFBc0MsQ0FmeEMsUUFBZ0MsMEJBQTRCLENBQUksa0JBRzlELDhCQUFvQyxDQUNyQyxrQkFHQyxnQ0FBd0MsQ0FDekMsa0JBR0MsaUNBQTBDLENBQzNDLGtCQUdDLCtCQUFzQyxDQWZ4QyxRQUFnQyx5QkFBNEIsQ0FBSSxrQkFHOUQsNkJBQW9DLENBQ3JDLGtCQUdDLCtCQUF3QyxDQUN6QyxrQkFHQyxnQ0FBMEMsQ0FDM0Msa0JBR0MsOEJBQXNDLENBZnhDLFFBQWdDLDBCQUE0QixDQUFJLGtCQUc5RCw4QkFBb0MsQ0FDckMsa0JBR0MsZ0NBQXdDLENBQ3pDLGtCQUdDLGlDQUEwQyxDQUMzQyxrQkFHQywrQkFBc0MsQ0FmeEMsUUFBZ0MsMEJBQTRCLENBQUksa0JBRzlELDhCQUFvQyxDQUNyQyxrQkFHQyxnQ0FBd0MsQ0FDekMsa0JBR0MsaUNBQTBDLENBQzNDLGtCQUdDLCtCQUFzQyxDQWZ4QyxRQUFnQyx5QkFBNEIsQ0FBSSxrQkFHOUQsNkJBQW9DLENBQ3JDLGtCQUdDLCtCQUF3QyxDQUN6QyxrQkFHQyxnQ0FBMEMsQ0FDM0Msa0JBR0MsOEJBQXNDLENBZnhDLFFBQWdDLG9CQUE0QixDQUFJLGtCQUc5RCx3QkFBb0MsQ0FDckMsa0JBR0MsMEJBQXdDLENBQ3pDLGtCQUdDLDJCQUEwQyxDQUMzQyxrQkFHQyx5QkFBc0MsQ0FmeEMsUUFBZ0MsMkJBQTRCLENBQUksa0JBRzlELCtCQUFvQyxDQUNyQyxrQkFHQyxpQ0FBd0MsQ0FDekMsa0JBR0Msa0NBQTBDLENBQzNDLGtCQUdDLGdDQUFzQyxDQWZ4QyxRQUFnQywwQkFBNEIsQ0FBSSxrQkFHOUQsOEJBQW9DLENBQ3JDLGtCQUdDLGdDQUF3QyxDQUN6QyxrQkFHQyxpQ0FBMEMsQ0FDM0Msa0JBR0MsK0JBQXNDLENBZnhDLFFBQWdDLDJCQUE0QixDQUFJLGtCQUc5RCwrQkFBb0MsQ0FDckMsa0JBR0MsaUNBQXdDLENBQ3pDLGtCQUdDLGtDQUEwQyxDQUMzQyxrQkFHQyxnQ0FBc0MsQ0FmeEMsUUFBZ0MsMkJBQTRCLENBQUksa0JBRzlELCtCQUFvQyxDQUNyQyxrQkFHQyxpQ0FBd0MsQ0FDekMsa0JBR0Msa0NBQTBDLENBQzNDLGtCQUdDLGdDQUFzQyxDQWZ4QyxRQUFnQywwQkFBNEIsQ0FBSSxrQkFHOUQsOEJBQW9DLENBQ3JDLGtCQUdDLGdDQUF3QyxDQUN6QyxrQkFHQyxpQ0FBMEMsQ0FDM0Msa0JBR0MsK0JBQXNDLENBQ3ZDLFdBS2Msc0JBQXVCLENBQUksd0JBRzVDLDBCQUEyQixDQUM1Qix3QkFHQyw0QkFBNkIsQ0FDOUIsd0JBR0MsNkJBQThCLENBQy9CLHdCQUdDLDJCQUE0QixDQUM3QixDVllELDBCVWpESSxRQUFnQyxtQkFBNEIsQ0FBSSxrQkFHOUQsdUJBQW9DLENBQ3JDLGtCQUdDLHlCQUF3QyxDQUN6QyxrQkFHQywwQkFBMEMsQ0FDM0Msa0JBR0Msd0JBQXNDLENBZnhDLFFBQWdDLDBCQUE0QixDQUFJLGtCQUc5RCw4QkFBb0MsQ0FDckMsa0JBR0MsZ0NBQXdDLENBQ3pDLGtCQUdDLGlDQUEwQyxDQUMzQyxrQkFHQywrQkFBc0MsQ0FmeEMsUUFBZ0MseUJBQTRCLENBQUksa0JBRzlELDZCQUFvQyxDQUNyQyxrQkFHQywrQkFBd0MsQ0FDekMsa0JBR0MsZ0NBQTBDLENBQzNDLGtCQUdDLDhCQUFzQyxDQWZ4QyxRQUFnQywwQkFBNEIsQ0FBSSxrQkFHOUQsOEJBQW9DLENBQ3JDLGtCQUdDLGdDQUF3QyxDQUN6QyxrQkFHQyxpQ0FBMEMsQ0FDM0Msa0JBR0MsK0JBQXNDLENBZnhDLFFBQWdDLDBCQUE0QixDQUFJLGtCQUc5RCw4QkFBb0MsQ0FDckMsa0JBR0MsZ0NBQXdDLENBQ3pDLGtCQUdDLGlDQUEwQyxDQUMzQyxrQkFHQywrQkFBc0MsQ0FmeEMsUUFBZ0MseUJBQTRCLENBQUksa0JBRzlELDZCQUFvQyxDQUNyQyxrQkFHQywrQkFBd0MsQ0FDekMsa0JBR0MsZ0NBQTBDLENBQzNDLGtCQUdDLDhCQUFzQyxDQWZ4QyxRQUFnQyxvQkFBNEIsQ0FBSSxrQkFHOUQsd0JBQW9DLENBQ3JDLGtCQUdDLDBCQUF3QyxDQUN6QyxrQkFHQywyQkFBMEMsQ0FDM0Msa0JBR0MseUJBQXNDLENBZnhDLFFBQWdDLDJCQUE0QixDQUFJLGtCQUc5RCwrQkFBb0MsQ0FDckMsa0JBR0MsaUNBQXdDLENBQ3pDLGtCQUdDLGtDQUEwQyxDQUMzQyxrQkFHQyxnQ0FBc0MsQ0FmeEMsUUFBZ0MsMEJBQTRCLENBQUksa0JBRzlELDhCQUFvQyxDQUNyQyxrQkFHQyxnQ0FBd0MsQ0FDekMsa0JBR0MsaUNBQTBDLENBQzNDLGtCQUdDLCtCQUFzQyxDQWZ4QyxRQUFnQywyQkFBNEIsQ0FBSSxrQkFHOUQsK0JBQW9DLENBQ3JDLGtCQUdDLGlDQUF3QyxDQUN6QyxrQkFHQyxrQ0FBMEMsQ0FDM0Msa0JBR0MsZ0NBQXNDLENBZnhDLFFBQWdDLDJCQUE0QixDQUFJLGtCQUc5RCwrQkFBb0MsQ0FDckMsa0JBR0MsaUNBQXdDLENBQ3pDLGtCQUdDLGtDQUEwQyxDQUMzQyxrQkFHQyxnQ0FBc0MsQ0FmeEMsUUFBZ0MsMEJBQTRCLENBQUksa0JBRzlELDhCQUFvQyxDQUNyQyxrQkFHQyxnQ0FBd0MsQ0FDekMsa0JBR0MsaUNBQTBDLENBQzNDLGtCQUdDLCtCQUFzQyxDQUN2QyxXQUtjLHNCQUF1QixDQUFJLHdCQUc1QywwQkFBMkIsQ0FDNUIsd0JBR0MsNEJBQTZCLENBQzlCLHdCQUdDLDZCQUE4QixDQUMvQix3QkFHQywyQkFBNEIsQ0FDN0IsQ1ZZRCwyQlVqREksUUFBZ0MsbUJBQTRCLENBQUksa0JBRzlELHVCQUFvQyxDQUNyQyxrQkFHQyx5QkFBd0MsQ0FDekMsa0JBR0MsMEJBQTBDLENBQzNDLGtCQUdDLHdCQUFzQyxDQWZ4QyxRQUFnQywwQkFBNEIsQ0FBSSxrQkFHOUQsOEJBQW9DLENBQ3JDLGtCQUdDLGdDQUF3QyxDQUN6QyxrQkFHQyxpQ0FBMEMsQ0FDM0Msa0JBR0MsK0JBQXNDLENBZnhDLFFBQWdDLHlCQUE0QixDQUFJLGtCQUc5RCw2QkFBb0MsQ0FDckMsa0JBR0MsK0JBQXdDLENBQ3pDLGtCQUdDLGdDQUEwQyxDQUMzQyxrQkFHQyw4QkFBc0MsQ0FmeEMsUUFBZ0MsMEJBQTRCLENBQUksa0JBRzlELDhCQUFvQyxDQUNyQyxrQkFHQyxnQ0FBd0MsQ0FDekMsa0JBR0MsaUNBQTBDLENBQzNDLGtCQUdDLCtCQUFzQyxDQWZ4QyxRQUFnQywwQkFBNEIsQ0FBSSxrQkFHOUQsOEJBQW9DLENBQ3JDLGtCQUdDLGdDQUF3QyxDQUN6QyxrQkFHQyxpQ0FBMEMsQ0FDM0Msa0JBR0MsK0JBQXNDLENBZnhDLFFBQWdDLHlCQUE0QixDQUFJLGtCQUc5RCw2QkFBb0MsQ0FDckMsa0JBR0MsK0JBQXdDLENBQ3pDLGtCQUdDLGdDQUEwQyxDQUMzQyxrQkFHQyw4QkFBc0MsQ0FmeEMsUUFBZ0Msb0JBQTRCLENBQUksa0JBRzlELHdCQUFvQyxDQUNyQyxrQkFHQywwQkFBd0MsQ0FDekMsa0JBR0MsMkJBQTBDLENBQzNDLGtCQUdDLHlCQUFzQyxDQWZ4QyxRQUFnQywyQkFBNEIsQ0FBSSxrQkFHOUQsK0JBQW9DLENBQ3JDLGtCQUdDLGlDQUF3QyxDQUN6QyxrQkFHQyxrQ0FBMEMsQ0FDM0Msa0JBR0MsZ0NBQXNDLENBZnhDLFFBQWdDLDBCQUE0QixDQUFJLGtCQUc5RCw4QkFBb0MsQ0FDckMsa0JBR0MsZ0NBQXdDLENBQ3pDLGtCQUdDLGlDQUEwQyxDQUMzQyxrQkFHQywrQkFBc0MsQ0FmeEMsUUFBZ0MsMkJBQTRCLENBQUksa0JBRzlELCtCQUFvQyxDQUNyQyxrQkFHQyxpQ0FBd0MsQ0FDekMsa0JBR0Msa0NBQTBDLENBQzNDLGtCQUdDLGdDQUFzQyxDQWZ4QyxRQUFnQywyQkFBNEIsQ0FBSSxrQkFHOUQsK0JBQW9DLENBQ3JDLGtCQUdDLGlDQUF3QyxDQUN6QyxrQkFHQyxrQ0FBMEMsQ0FDM0Msa0JBR0MsZ0NBQXNDLENBZnhDLFFBQWdDLDBCQUE0QixDQUFJLGtCQUc5RCw4QkFBb0MsQ0FDckMsa0JBR0MsZ0NBQXdDLENBQ3pDLGtCQUdDLGlDQUEwQyxDQUMzQyxrQkFHQywrQkFBc0MsQ0FDdkMsV0FLYyxzQkFBdUIsQ0FBSSx3QkFHNUMsMEJBQTJCLENBQzVCLHdCQUdDLDRCQUE2QixDQUM5Qix3QkFHQyw2QkFBOEIsQ0FDL0Isd0JBR0MsMkJBQTRCLENBQzdCLENWWUQsMkJVakRJLFFBQWdDLG1CQUE0QixDQUFJLGtCQUc5RCx1QkFBb0MsQ0FDckMsa0JBR0MseUJBQXdDLENBQ3pDLGtCQUdDLDBCQUEwQyxDQUMzQyxrQkFHQyx3QkFBc0MsQ0FmeEMsUUFBZ0MsMEJBQTRCLENBQUksa0JBRzlELDhCQUFvQyxDQUNyQyxrQkFHQyxnQ0FBd0MsQ0FDekMsa0JBR0MsaUNBQTBDLENBQzNDLGtCQUdDLCtCQUFzQyxDQWZ4QyxRQUFnQyx5QkFBNEIsQ0FBSSxrQkFHOUQsNkJBQW9DLENBQ3JDLGtCQUdDLCtCQUF3QyxDQUN6QyxrQkFHQyxnQ0FBMEMsQ0FDM0Msa0JBR0MsOEJBQXNDLENBZnhDLFFBQWdDLDBCQUE0QixDQUFJLGtCQUc5RCw4QkFBb0MsQ0FDckMsa0JBR0MsZ0NBQXdDLENBQ3pDLGtCQUdDLGlDQUEwQyxDQUMzQyxrQkFHQywrQkFBc0MsQ0FmeEMsUUFBZ0MsMEJBQTRCLENBQUksa0JBRzlELDhCQUFvQyxDQUNyQyxrQkFHQyxnQ0FBd0MsQ0FDekMsa0JBR0MsaUNBQTBDLENBQzNDLGtCQUdDLCtCQUFzQyxDQWZ4QyxRQUFnQyx5QkFBNEIsQ0FBSSxrQkFHOUQsNkJBQW9DLENBQ3JDLGtCQUdDLCtCQUF3QyxDQUN6QyxrQkFHQyxnQ0FBMEMsQ0FDM0Msa0JBR0MsOEJBQXNDLENBZnhDLFFBQWdDLG9CQUE0QixDQUFJLGtCQUc5RCx3QkFBb0MsQ0FDckMsa0JBR0MsMEJBQXdDLENBQ3pDLGtCQUdDLDJCQUEwQyxDQUMzQyxrQkFHQyx5QkFBc0MsQ0FmeEMsUUFBZ0MsMkJBQTRCLENBQUksa0JBRzlELCtCQUFvQyxDQUNyQyxrQkFHQyxpQ0FBd0MsQ0FDekMsa0JBR0Msa0NBQTBDLENBQzNDLGtCQUdDLGdDQUFzQyxDQWZ4QyxRQUFnQywwQkFBNEIsQ0FBSSxrQkFHOUQsOEJBQW9DLENBQ3JDLGtCQUdDLGdDQUF3QyxDQUN6QyxrQkFHQyxpQ0FBMEMsQ0FDM0Msa0JBR0MsK0JBQXNDLENBZnhDLFFBQWdDLDJCQUE0QixDQUFJLGtCQUc5RCwrQkFBb0MsQ0FDckMsa0JBR0MsaUNBQXdDLENBQ3pDLGtCQUdDLGtDQUEwQyxDQUMzQyxrQkFHQyxnQ0FBc0MsQ0FmeEMsUUFBZ0MsMkJBQTRCLENBQUksa0JBRzlELCtCQUFvQyxDQUNyQyxrQkFHQyxpQ0FBd0MsQ0FDekMsa0JBR0Msa0NBQTBDLENBQzNDLGtCQUdDLGdDQUFzQyxDQWZ4QyxRQUFnQywwQkFBNEIsQ0FBSSxrQkFHOUQsOEJBQW9DLENBQ3JDLGtCQUdDLGdDQUF3QyxDQUN6QyxrQkFHQyxpQ0FBMEMsQ0FDM0Msa0JBR0MsK0JBQXNDLENBQ3ZDLFdBS2Msc0JBQXVCLENBQUksd0JBRzVDLDBCQUEyQixDQUM1Qix3QkFHQyw0QkFBNkIsQ0FDOUIsd0JBR0MsNkJBQThCLENBQy9CLHdCQUdDLDJCQUE0QixDQUM3QixDVllELDJCVWpESSxTQUFnQyxtQkFBNEIsQ0FBSSxvQkFHOUQsdUJBQW9DLENBQ3JDLG9CQUdDLHlCQUF3QyxDQUN6QyxvQkFHQywwQkFBMEMsQ0FDM0Msb0JBR0Msd0JBQXNDLENBZnhDLFNBQWdDLDBCQUE0QixDQUFJLG9CQUc5RCw4QkFBb0MsQ0FDckMsb0JBR0MsZ0NBQXdDLENBQ3pDLG9CQUdDLGlDQUEwQyxDQUMzQyxvQkFHQywrQkFBc0MsQ0FmeEMsU0FBZ0MseUJBQTRCLENBQUksb0JBRzlELDZCQUFvQyxDQUNyQyxvQkFHQywrQkFBd0MsQ0FDekMsb0JBR0MsZ0NBQTBDLENBQzNDLG9CQUdDLDhCQUFzQyxDQWZ4QyxTQUFnQywwQkFBNEIsQ0FBSSxvQkFHOUQsOEJBQW9DLENBQ3JDLG9CQUdDLGdDQUF3QyxDQUN6QyxvQkFHQyxpQ0FBMEMsQ0FDM0Msb0JBR0MsK0JBQXNDLENBZnhDLFNBQWdDLDBCQUE0QixDQUFJLG9CQUc5RCw4QkFBb0MsQ0FDckMsb0JBR0MsZ0NBQXdDLENBQ3pDLG9CQUdDLGlDQUEwQyxDQUMzQyxvQkFHQywrQkFBc0MsQ0FmeEMsU0FBZ0MseUJBQTRCLENBQUksb0JBRzlELDZCQUFvQyxDQUNyQyxvQkFHQywrQkFBd0MsQ0FDekMsb0JBR0MsZ0NBQTBDLENBQzNDLG9CQUdDLDhCQUFzQyxDQWZ4QyxTQUFnQyxvQkFBNEIsQ0FBSSxvQkFHOUQsd0JBQW9DLENBQ3JDLG9CQUdDLDBCQUF3QyxDQUN6QyxvQkFHQywyQkFBMEMsQ0FDM0Msb0JBR0MseUJBQXNDLENBZnhDLFNBQWdDLDJCQUE0QixDQUFJLG9CQUc5RCwrQkFBb0MsQ0FDckMsb0JBR0MsaUNBQXdDLENBQ3pDLG9CQUdDLGtDQUEwQyxDQUMzQyxvQkFHQyxnQ0FBc0MsQ0FmeEMsU0FBZ0MsMEJBQTRCLENBQUksb0JBRzlELDhCQUFvQyxDQUNyQyxvQkFHQyxnQ0FBd0MsQ0FDekMsb0JBR0MsaUNBQTBDLENBQzNDLG9CQUdDLCtCQUFzQyxDQWZ4QyxTQUFnQywyQkFBNEIsQ0FBSSxvQkFHOUQsK0JBQW9DLENBQ3JDLG9CQUdDLGlDQUF3QyxDQUN6QyxvQkFHQyxrQ0FBMEMsQ0FDM0Msb0JBR0MsZ0NBQXNDLENBZnhDLFNBQWdDLDJCQUE0QixDQUFJLG9CQUc5RCwrQkFBb0MsQ0FDckMsb0JBR0MsaUNBQXdDLENBQ3pDLG9CQUdDLGtDQUEwQyxDQUMzQyxvQkFHQyxnQ0FBc0MsQ0FmeEMsU0FBZ0MsMEJBQTRCLENBQUksb0JBRzlELDhCQUFvQyxDQUNyQyxvQkFHQyxnQ0FBd0MsQ0FDekMsb0JBR0MsaUNBQTBDLENBQzNDLG9CQUdDLCtCQUFzQyxDQUN2QyxZQUtjLHNCQUF1QixDQUFJLDBCQUc1QywwQkFBMkIsQ0FDNUIsMEJBR0MsNEJBQTZCLENBQzlCLDBCQUdDLDZCQUE4QixDQUMvQiwwQkFHQywyQkFBNEIsQ0FDN0IsQ0N4Q0wsY0FBaUIsNkJBQThCLENBQUksYUFDbEMsNkJBQThCLENBQUksZUNMakQsZUFBZ0IsQ0FDaEIsc0JBQXVCLENBQ3ZCLGtCQUFtQixDRElzQixXQVFmLDBCQUEyQixDQUFJLFlBQy9CLDJCQUE0QixDQUFJLGFBQ2hDLDRCQUE2QixDWHdDckQsMEJXMUNBLGNBQXdCLDBCQUEyQixDQUFJLGVBQy9CLDJCQUE0QixDQUFJLGdCQUNoQyw0QkFBNkIsQ0FBSSxDWHdDekQsMEJXMUNBLGNBQXdCLDBCQUEyQixDQUFJLGVBQy9CLDJCQUE0QixDQUFJLGdCQUNoQyw0QkFBNkIsQ0FBSSxDWHdDekQsMkJXMUNBLGNBQXdCLDBCQUEyQixDQUFJLGVBQy9CLDJCQUE0QixDQUFJLGdCQUNoQyw0QkFBNkIsQ0FBSSxDWHdDekQsMkJXMUNBLGNBQXdCLDBCQUEyQixDQUFJLGVBQy9CLDJCQUE0QixDQUFJLGdCQUNoQyw0QkFBNkIsQ0FBSSxDWHdDekQsMkJXMUNBLGVBQXdCLDBCQUEyQixDQUFJLGdCQUMvQiwyQkFBNEIsQ0FBSSxpQkFDaEMsNEJBQTZCLENBQUksQ0FNN0QsZ0JBQW1CLG1DQUFvQyxDQUFJLGdCQUN4QyxtQ0FBb0MsQ0FBSSxpQkFDeEMsb0NBQXFDLENBQUksbUJBSXRDLDBCQUEwQyxDQUFJLG9CQUM5QywwQkFBMkMsQ0FBSSxrQkFDL0MsMEJBQXlDLENBQUksYUFDN0MsNEJBQTZCLENBQUksWUFJekMscUJBQXNCLENFbENsQyxjQUNFLHdCQUF3QixDbEJZMUIsMENrQlJJLHdCQUFxQyxDbEJXeEMsZ0JrQmZDLHdCQUF3QixDbEJZMUIsOENrQlJJLHdCQUFxQyxDbEJXeEMsY2tCZkMsd0JBQXdCLENsQlkxQiwwQ2tCUkksd0JBQXFDLENsQld4QyxXa0JmQyx3QkFBd0IsQ2xCWTFCLG9Da0JSSSx3QkFBcUMsQ2xCV3hDLGNrQmZDLHdCQUF3QixDbEJZMUIsMENrQlJJLHdCQUFxQyxDbEJXeEMsYWtCZkMsd0JBQXdCLENsQlkxQix3Q2tCUkksd0JBQXFDLENsQld4QyxZa0JmQyx3QkFBd0IsQ2xCWTFCLHNDa0JSSSx3QkFBcUMsQ2xCV3hDLFdrQmZDLHdCQUF3QixDbEJZMUIsb0NrQlJJLHdCQUFxQyxDbEJXeEMsWWdCd0JXLHdCQUE2QixDQUFJLFdHMUM3QyxVQUFXLENBQ1gsaUJBQWtCLENBQ2xCLGdCQUFpQixDQUNqQiw0QkFBNkIsQ0FDN0IsUUFBUyxDSDRDVixTSTlDQyw2QkFBa0MsQ0NDbkMsV0REQyw0QkFBa0MsQ0V3UnBDLCtCQUVJLFNBQVUsQ0FDVix3QkFBcUMsQ0FDckMsa0JBQW1CLENBQ25CLFlBQWEsQ0FDYixlQUFnQixDQU5wQiwyQ0FTTSxZQUFhLENBVG5CLHFDQWFNLFlBQWEsQ0FDYixrQkFBbUIsQ0FDbkIsNkJBQThCLENBQzlCLG9CQUFxQixDQWhCM0IsMkNBbUJRLGVBQWdCLENBbkJ4QixzREF3QlUscUJBQXNCLENBeEJoQyxvREE0QlUsY0FBZSxDQTVCekIsd0NBa0NNLGtCQUFtQixDQWxDekIsZ0RBdUNRLFlBQWEsQ0FDYix3QkFBeUIsQ0F4Q2pDLHdDQTZDTSxrQkFBbUIsQ0E3Q3pCLDhDQWdEUSxrQkFBbUIsQ0FoRDNCLDhFQXNETSxlQUFnQixDQUNoQixrQkFBbUIsQ0FDbkIsYUNuVFEsQ0RvVFIsY0FBZSxDQUNmLGlCQUFrQixDQTFEeEIsc0NBOERNLGNBQWUsQ0E5RHJCLDJDQWlFUSxhQzVUTSxDRDZUTixlQUFnQixDQWxFeEIsc0NBdUVNLFlBQWEsQ0FDYixrQkFBbUIsQ0FDbkIsNkJBQThCLENBQzlCLGNBQWUsQ0ExRXJCLHdDQTZFUSxlQUFnQixDQTdFeEIsc0RBaUZRLGNBQWUsQ0FDZixhQ3BXVSxDRHFXVix5QkFBMEIsQ0FDMUIsZ0JBQWlCLENBQ2pCLGdCQUFpQixDQXJGekIsaUVBd0ZVLGNBQWUsQ0F4RnpCLGtFQTRGVSxhQUFjLENBNUZ4Qiw0REFnR1UsYUFBYyxDQUNmLDZCQWpHVCwrQkFzR00sVUFBVyxDQUNYLGNBQWUsQ0FFbEJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLy8gc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XFxuXFxuLmFsaWduLWJhc2VsaW5lICAgIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lICFpbXBvcnRhbnQ7IH0gLy8gQnJvd3NlciBkZWZhdWx0XFxuLmFsaWduLXRvcCAgICAgICAgIHsgdmVydGljYWwtYWxpZ246IHRvcCAhaW1wb3J0YW50OyB9XFxuLmFsaWduLW1pZGRsZSAgICAgIHsgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50OyB9XFxuLmFsaWduLWJvdHRvbSAgICAgIHsgdmVydGljYWwtYWxpZ246IGJvdHRvbSAhaW1wb3J0YW50OyB9XFxuLmFsaWduLXRleHQtYm90dG9tIHsgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tICFpbXBvcnRhbnQ7IH1cXG4uYWxpZ24tdGV4dC10b3AgICAgeyB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3AgIWltcG9ydGFudDsgfVxcblwiLFwiLy8gc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XFxuXFxuLy8gQ29udGV4dHVhbCBiYWNrZ3JvdW5kc1xcblxcbkBtaXhpbiBiZy12YXJpYW50KCRwYXJlbnQsICRjb2xvcikge1xcbiAgI3skcGFyZW50fSB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgYSN7JHBhcmVudH0sXFxuICBidXR0b24jeyRwYXJlbnR9IHtcXG4gICAgQGluY2x1ZGUgaG92ZXItZm9jdXMge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkY29sb3IsIDEwJSkgIWltcG9ydGFudDtcXG4gICAgfVxcbiAgfVxcbn1cXG5cXG5AbWl4aW4gYmctZ3JhZGllbnQtdmFyaWFudCgkcGFyZW50LCAkY29sb3IpIHtcXG4gICN7JHBhcmVudH0ge1xcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3IgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgbWl4KCRib2R5LWJnLCAkY29sb3IsIDE1JSksICRjb2xvcikgcmVwZWF0LXggIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXCIsXCIvLyBzdHlsZWxpbnQtZGlzYWJsZSBpbmRlbnRhdGlvblxcblxcbi8vIEhvdmVyIG1peGluIGFuZCBgJGVuYWJsZS1ob3Zlci1tZWRpYS1xdWVyeWAgYXJlIGRlcHJlY2F0ZWQuXFxuLy9cXG4vLyBPcmlnYWxseSBhZGRlZCBkdXJpbmcgb3VyIGFscGhhcyBhbmQgbWFpbnRhaW5lZCBkdXJpbmcgYmV0YXMsIHRoaXMgbWl4aW4gd2FzXFxuLy8gZGVzaWduZWQgdG8gcHJldmVudCBgOmhvdmVyYCBzdGlja2luZXNzIG9uIGlPU+KAlGFuIGlzc3VlIHdoZXJlIGhvdmVyIHN0eWxlc1xcbi8vIHdvdWxkIHBlcnNpc3QgYWZ0ZXIgaW5pdGlhbCB0b3VjaC5cXG4vL1xcbi8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB3ZSd2ZSBrZXB0IHRoZXNlIG1peGlucyBhbmQgdXBkYXRlZCB0aGVtIHRvXFxuLy8gYWx3YXlzIHJldHVybiB0aGVpciByZWd1bGFyIHBzdWVkby1jbGFzc2VzIGluc3RlYWQgb2YgYSBzaGltbWVkIG1lZGlhIHF1ZXJ5Llxcbi8vXFxuLy8gSXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMjUxOTVcXG5cXG5AbWl4aW4gaG92ZXIge1xcbiAgJjpob3ZlciB7IEBjb250ZW50OyB9XFxufVxcblxcbkBtaXhpbiBob3Zlci1mb2N1cyB7XFxuICAmOmhvdmVyLFxcbiAgJjpmb2N1cyB7XFxuICAgIEBjb250ZW50O1xcbiAgfVxcbn1cXG5cXG5AbWl4aW4gcGxhaW4taG92ZXItZm9jdXMge1xcbiAgJixcXG4gICY6aG92ZXIsXFxuICAmOmZvY3VzIHtcXG4gICAgQGNvbnRlbnQ7XFxuICB9XFxufVxcblxcbkBtaXhpbiBob3Zlci1mb2N1cy1hY3RpdmUge1xcbiAgJjpob3ZlcixcXG4gICY6Zm9jdXMsXFxuICAmOmFjdGl2ZSB7XFxuICAgIEBjb250ZW50O1xcbiAgfVxcbn1cXG5cIixcIi8vIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxcblxcbkBlYWNoICRjb2xvciwgJHZhbHVlIGluICR0aGVtZS1jb2xvcnMge1xcbiAgQGluY2x1ZGUgYmctdmFyaWFudChcXFwiLmJnLSN7JGNvbG9yfVxcXCIsICR2YWx1ZSk7XFxufVxcblxcbkBpZiAkZW5hYmxlLWdyYWRpZW50cyB7XFxuICBAZWFjaCAkY29sb3IsICR2YWx1ZSBpbiAkdGhlbWUtY29sb3JzIHtcXG4gICAgQGluY2x1ZGUgYmctZ3JhZGllbnQtdmFyaWFudChcXFwiLmJnLWdyYWRpZW50LSN7JGNvbG9yfVxcXCIsICR2YWx1ZSk7XFxuICB9XFxufVxcblxcbi5iZy13aGl0ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkd2hpdGUgIWltcG9ydGFudDtcXG59XFxuXFxuLmJnLXRyYW5zcGFyZW50IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxufVxcblwiLFwiLy8gc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XFxuXFxuLy9cXG4vLyBCb3JkZXJcXG4vL1xcblxcbi5ib3JkZXIgICAgICAgICB7IGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkYm9yZGVyLWNvbG9yICFpbXBvcnRhbnQ7IH1cXG4uYm9yZGVyLXRvcCAgICAgeyBib3JkZXItdG9wOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRib3JkZXItY29sb3IgIWltcG9ydGFudDsgfVxcbi5ib3JkZXItcmlnaHQgICB7IGJvcmRlci1yaWdodDogJGJvcmRlci13aWR0aCBzb2xpZCAkYm9yZGVyLWNvbG9yICFpbXBvcnRhbnQ7IH1cXG4uYm9yZGVyLWJvdHRvbSAgeyBib3JkZXItYm90dG9tOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRib3JkZXItY29sb3IgIWltcG9ydGFudDsgfVxcbi5ib3JkZXItbGVmdCAgICB7IGJvcmRlci1sZWZ0OiAkYm9yZGVyLXdpZHRoIHNvbGlkICRib3JkZXItY29sb3IgIWltcG9ydGFudDsgfVxcblxcbi5ib3JkZXItMCAgICAgICAgeyBib3JkZXI6IDAgIWltcG9ydGFudDsgfVxcbi5ib3JkZXItdG9wLTAgICAgeyBib3JkZXItdG9wOiAwICFpbXBvcnRhbnQ7IH1cXG4uYm9yZGVyLXJpZ2h0LTAgIHsgYm9yZGVyLXJpZ2h0OiAwICFpbXBvcnRhbnQ7IH1cXG4uYm9yZGVyLWJvdHRvbS0wIHsgYm9yZGVyLWJvdHRvbTogMCAhaW1wb3J0YW50OyB9XFxuLmJvcmRlci1sZWZ0LTAgICB7IGJvcmRlci1sZWZ0OiAwICFpbXBvcnRhbnQ7IH1cXG5cXG5AZWFjaCAkY29sb3IsICR2YWx1ZSBpbiAkdGhlbWUtY29sb3JzIHtcXG4gIC5ib3JkZXItI3skY29sb3J9IHtcXG4gICAgYm9yZGVyLWNvbG9yOiAkdmFsdWUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuXFxuLmJvcmRlci13aGl0ZSB7XFxuICBib3JkZXItY29sb3I6ICR3aGl0ZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4vL1xcbi8vIEJvcmRlci1yYWRpdXNcXG4vL1xcblxcbi5yb3VuZGVkIHtcXG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzICFpbXBvcnRhbnQ7XFxufVxcbi5yb3VuZGVkLXRvcCB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAhaW1wb3J0YW50O1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzICFpbXBvcnRhbnQ7XFxufVxcbi5yb3VuZGVkLXJpZ2h0IHtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAhaW1wb3J0YW50O1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzICFpbXBvcnRhbnQ7XFxufVxcbi5yb3VuZGVkLWJvdHRvbSB7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgIWltcG9ydGFudDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzICFpbXBvcnRhbnQ7XFxufVxcbi5yb3VuZGVkLWxlZnQge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgIWltcG9ydGFudDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yb3VuZGVkLWNpcmNsZSB7XFxuICBib3JkZXItcmFkaXVzOiA1MCUgIWltcG9ydGFudDtcXG59XFxuXFxuLnJvdW5kZWQtMCB7XFxuICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XFxufVxcblwiLFwiQG1peGluIGNsZWFyZml4KCkge1xcbiAgJjo6YWZ0ZXIge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgY2xlYXI6IGJvdGg7XFxuICAgIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgfVxcbn1cXG5cIixcIi8vIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxcblxcbi8vXFxuLy8gVXRpbGl0aWVzIGZvciBjb21tb24gYGRpc3BsYXlgIHZhbHVlc1xcbi8vXFxuXFxuQGVhY2ggJGJyZWFrcG9pbnQgaW4gbWFwLWtleXMoJGdyaWQtYnJlYWtwb2ludHMpIHtcXG4gIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtdXAoJGJyZWFrcG9pbnQpIHtcXG4gICAgJGluZml4OiBicmVha3BvaW50LWluZml4KCRicmVha3BvaW50LCAkZ3JpZC1icmVha3BvaW50cyk7XFxuXFxuICAgIC5kI3skaW5maXh9LW5vbmUgICAgICAgICB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfVxcbiAgICAuZCN7JGluZml4fS1pbmxpbmUgICAgICAgeyBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsgfVxcbiAgICAuZCN7JGluZml4fS1pbmxpbmUtYmxvY2sgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsgfVxcbiAgICAuZCN7JGluZml4fS1ibG9jayAgICAgICAgeyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9XFxuICAgIC5kI3skaW5maXh9LXRhYmxlICAgICAgICB7IGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7IH1cXG4gICAgLmQjeyRpbmZpeH0tdGFibGUtcm93ICAgIHsgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH1cXG4gICAgLmQjeyRpbmZpeH0tdGFibGUtY2VsbCAgIHsgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OyB9XFxuICAgIC5kI3skaW5maXh9LWZsZXggICAgICAgICB7IGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsgfVxcbiAgICAuZCN7JGluZml4fS1pbmxpbmUtZmxleCAgeyBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50OyB9XFxuICB9XFxufVxcblxcblxcbi8vXFxuLy8gVXRpbGl0aWVzIGZvciB0b2dnbGluZyBgZGlzcGxheWAgaW4gcHJpbnRcXG4vL1xcblxcbkBtZWRpYSBwcmludCB7XFxuICAuZC1wcmludC1ub25lICAgICAgICAgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH1cXG4gIC5kLXByaW50LWlubGluZSAgICAgICB7IGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50OyB9XFxuICAuZC1wcmludC1pbmxpbmUtYmxvY2sgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsgfVxcbiAgLmQtcHJpbnQtYmxvY2sgICAgICAgIHsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgfVxcbiAgLmQtcHJpbnQtdGFibGUgICAgICAgIHsgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDsgfVxcbiAgLmQtcHJpbnQtdGFibGUtcm93ICAgIHsgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7IH1cXG4gIC5kLXByaW50LXRhYmxlLWNlbGwgICB7IGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsgfVxcbiAgLmQtcHJpbnQtZmxleCAgICAgICAgIHsgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OyB9XFxuICAuZC1wcmludC1pbmxpbmUtZmxleCAgeyBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50OyB9XFxufVxcblwiLFwiLy8gQnJlYWtwb2ludCB2aWV3cG9ydCBzaXplcyBhbmQgbWVkaWEgcXVlcmllcy5cXG4vL1xcbi8vIEJyZWFrcG9pbnRzIGFyZSBkZWZpbmVkIGFzIGEgbWFwIG9mIChuYW1lOiBtaW5pbXVtIHdpZHRoKSwgb3JkZXIgZnJvbSBzbWFsbCB0byBsYXJnZTpcXG4vL1xcbi8vICAgICh4czogMCwgc206IDU3NnB4LCBtZDogNzY4cHgsIGxnOiA5OTJweCwgeGw6IDEyMDBweClcXG4vL1xcbi8vIFRoZSBtYXAgZGVmaW5lZCBpbiB0aGUgYCRncmlkLWJyZWFrcG9pbnRzYCBnbG9iYWwgdmFyaWFibGUgaXMgdXNlZCBhcyB0aGUgYCRicmVha3BvaW50c2AgYXJndW1lbnQgYnkgZGVmYXVsdC5cXG5cXG4vLyBOYW1lIG9mIHRoZSBuZXh0IGJyZWFrcG9pbnQsIG9yIG51bGwgZm9yIHRoZSBsYXN0IGJyZWFrcG9pbnQuXFxuLy9cXG4vLyAgICA+PiBicmVha3BvaW50LW5leHQoc20pXFxuLy8gICAgbWRcXG4vLyAgICA+PiBicmVha3BvaW50LW5leHQoc20sICh4czogMCwgc206IDU3NnB4LCBtZDogNzY4cHgsIGxnOiA5OTJweCwgeGw6IDEyMDBweCkpXFxuLy8gICAgbWRcXG4vLyAgICA+PiBicmVha3BvaW50LW5leHQoc20sICRicmVha3BvaW50LW5hbWVzOiAoeHMgc20gbWQgbGcgeGwpKVxcbi8vICAgIG1kXFxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtbmV4dCgkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cywgJGJyZWFrcG9pbnQtbmFtZXM6IG1hcC1rZXlzKCRicmVha3BvaW50cykpIHtcXG4gICRuOiBpbmRleCgkYnJlYWtwb2ludC1uYW1lcywgJG5hbWUpO1xcbiAgQHJldHVybiBpZigkbiA8IGxlbmd0aCgkYnJlYWtwb2ludC1uYW1lcyksIG50aCgkYnJlYWtwb2ludC1uYW1lcywgJG4gKyAxKSwgbnVsbCk7XFxufVxcblxcbi8vIE1pbmltdW0gYnJlYWtwb2ludCB3aWR0aC4gTnVsbCBmb3IgdGhlIHNtYWxsZXN0IChmaXJzdCkgYnJlYWtwb2ludC5cXG4vL1xcbi8vICAgID4+IGJyZWFrcG9pbnQtbWluKHNtLCAoeHM6IDAsIHNtOiA1NzZweCwgbWQ6IDc2OHB4LCBsZzogOTkycHgsIHhsOiAxMjAwcHgpKVxcbi8vICAgIDU3NnB4XFxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtbWluKCRuYW1lLCAkYnJlYWtwb2ludHM6ICRncmlkLWJyZWFrcG9pbnRzKSB7XFxuICAkbWluOiBtYXAtZ2V0KCRicmVha3BvaW50cywgJG5hbWUpO1xcbiAgQHJldHVybiBpZigkbWluICE9IDAsICRtaW4sIG51bGwpO1xcbn1cXG5cXG4vLyBNYXhpbXVtIGJyZWFrcG9pbnQgd2lkdGguIE51bGwgZm9yIHRoZSBsYXJnZXN0IChsYXN0KSBicmVha3BvaW50Llxcbi8vIFRoZSBtYXhpbXVtIHZhbHVlIGlzIGNhbGN1bGF0ZWQgYXMgdGhlIG1pbmltdW0gb2YgdGhlIG5leHQgb25lIGxlc3MgMC4wMnB4XFxuLy8gdG8gd29yayBhcm91bmQgdGhlIGxpbWl0YXRpb25zIG9mIGBtaW4tYCBhbmQgYG1heC1gIHByZWZpeGVzIGFuZCB2aWV3cG9ydHMgd2l0aCBmcmFjdGlvbmFsIHdpZHRocy5cXG4vLyBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL21lZGlhcXVlcmllcy00LyNtcS1taW4tbWF4XFxuLy8gVXNlcyAwLjAycHggcmF0aGVyIHRoYW4gMC4wMXB4IHRvIHdvcmsgYXJvdW5kIGEgY3VycmVudCByb3VuZGluZyBidWcgaW4gU2FmYXJpLlxcbi8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc4MjYxXFxuLy9cXG4vLyAgICA+PiBicmVha3BvaW50LW1heChzbSwgKHhzOiAwLCBzbTogNTc2cHgsIG1kOiA3NjhweCwgbGc6IDk5MnB4LCB4bDogMTIwMHB4KSlcXG4vLyAgICA3NjcuOThweFxcbkBmdW5jdGlvbiBicmVha3BvaW50LW1heCgkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xcbiAgJG5leHQ6IGJyZWFrcG9pbnQtbmV4dCgkbmFtZSwgJGJyZWFrcG9pbnRzKTtcXG4gIEByZXR1cm4gaWYoJG5leHQsIGJyZWFrcG9pbnQtbWluKCRuZXh0LCAkYnJlYWtwb2ludHMpIC0gLjAycHgsIG51bGwpO1xcbn1cXG5cXG4vLyBSZXR1cm5zIGEgYmxhbmsgc3RyaW5nIGlmIHNtYWxsZXN0IGJyZWFrcG9pbnQsIG90aGVyd2lzZSByZXR1cm5zIHRoZSBuYW1lIHdpdGggYSBkYXNoIGluZnJvbnQuXFxuLy8gVXNlZnVsIGZvciBtYWtpbmcgcmVzcG9uc2l2ZSB1dGlsaXRpZXMuXFxuLy9cXG4vLyAgICA+PiBicmVha3BvaW50LWluZml4KHhzLCAoeHM6IDAsIHNtOiA1NzZweCwgbWQ6IDc2OHB4LCBsZzogOTkycHgsIHhsOiAxMjAwcHgpKVxcbi8vICAgIFxcXCJcXFwiICAoUmV0dXJucyBhIGJsYW5rIHN0cmluZylcXG4vLyAgICA+PiBicmVha3BvaW50LWluZml4KHNtLCAoeHM6IDAsIHNtOiA1NzZweCwgbWQ6IDc2OHB4LCBsZzogOTkycHgsIHhsOiAxMjAwcHgpKVxcbi8vICAgIFxcXCItc21cXFwiXFxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtaW5maXgoJG5hbWUsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcXG4gIEByZXR1cm4gaWYoYnJlYWtwb2ludC1taW4oJG5hbWUsICRicmVha3BvaW50cykgPT0gbnVsbCwgXFxcIlxcXCIsIFxcXCItI3skbmFtZX1cXFwiKTtcXG59XFxuXFxuLy8gTWVkaWEgb2YgYXQgbGVhc3QgdGhlIG1pbmltdW0gYnJlYWtwb2ludCB3aWR0aC4gTm8gcXVlcnkgZm9yIHRoZSBzbWFsbGVzdCBicmVha3BvaW50Llxcbi8vIE1ha2VzIHRoZSBAY29udGVudCBhcHBseSB0byB0aGUgZ2l2ZW4gYnJlYWtwb2ludCBhbmQgd2lkZXIuXFxuQG1peGluIG1lZGlhLWJyZWFrcG9pbnQtdXAoJG5hbWUsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcXG4gICRtaW46IGJyZWFrcG9pbnQtbWluKCRuYW1lLCAkYnJlYWtwb2ludHMpO1xcbiAgQGlmICRtaW4ge1xcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJG1pbikge1xcbiAgICAgIEBjb250ZW50O1xcbiAgICB9XFxuICB9IEBlbHNlIHtcXG4gICAgQGNvbnRlbnQ7XFxuICB9XFxufVxcblxcbi8vIE1lZGlhIG9mIGF0IG1vc3QgdGhlIG1heGltdW0gYnJlYWtwb2ludCB3aWR0aC4gTm8gcXVlcnkgZm9yIHRoZSBsYXJnZXN0IGJyZWFrcG9pbnQuXFxuLy8gTWFrZXMgdGhlIEBjb250ZW50IGFwcGx5IHRvIHRoZSBnaXZlbiBicmVha3BvaW50IGFuZCBuYXJyb3dlci5cXG5AbWl4aW4gbWVkaWEtYnJlYWtwb2ludC1kb3duKCRuYW1lLCAkYnJlYWtwb2ludHM6ICRncmlkLWJyZWFrcG9pbnRzKSB7XFxuICAkbWF4OiBicmVha3BvaW50LW1heCgkbmFtZSwgJGJyZWFrcG9pbnRzKTtcXG4gIEBpZiAkbWF4IHtcXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRtYXgpIHtcXG4gICAgICBAY29udGVudDtcXG4gICAgfVxcbiAgfSBAZWxzZSB7XFxuICAgIEBjb250ZW50O1xcbiAgfVxcbn1cXG5cXG4vLyBNZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIGJyZWFrcG9pbnQgd2lkdGhzLlxcbi8vIE1ha2VzIHRoZSBAY29udGVudCBhcHBseSBiZXR3ZWVuIHRoZSBtaW4gYW5kIG1heCBicmVha3BvaW50c1xcbkBtaXhpbiBtZWRpYS1icmVha3BvaW50LWJldHdlZW4oJGxvd2VyLCAkdXBwZXIsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcXG4gICRtaW46IGJyZWFrcG9pbnQtbWluKCRsb3dlciwgJGJyZWFrcG9pbnRzKTtcXG4gICRtYXg6IGJyZWFrcG9pbnQtbWF4KCR1cHBlciwgJGJyZWFrcG9pbnRzKTtcXG5cXG4gIEBpZiAkbWluICE9IG51bGwgYW5kICRtYXggIT0gbnVsbCB7XFxuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkbWluKSBhbmQgKG1heC13aWR0aDogJG1heCkge1xcbiAgICAgIEBjb250ZW50O1xcbiAgICB9XFxuICB9IEBlbHNlIGlmICRtYXggPT0gbnVsbCB7XFxuICAgIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtdXAoJGxvd2VyLCAkYnJlYWtwb2ludHMpIHtcXG4gICAgICBAY29udGVudDtcXG4gICAgfVxcbiAgfSBAZWxzZSBpZiAkbWluID09IG51bGwge1xcbiAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LWRvd24oJHVwcGVyLCAkYnJlYWtwb2ludHMpIHtcXG4gICAgICBAY29udGVudDtcXG4gICAgfVxcbiAgfVxcbn1cXG5cXG4vLyBNZWRpYSBiZXR3ZWVuIHRoZSBicmVha3BvaW50J3MgbWluaW11bSBhbmQgbWF4aW11bSB3aWR0aHMuXFxuLy8gTm8gbWluaW11bSBmb3IgdGhlIHNtYWxsZXN0IGJyZWFrcG9pbnQsIGFuZCBubyBtYXhpbXVtIGZvciB0aGUgbGFyZ2VzdCBvbmUuXFxuLy8gTWFrZXMgdGhlIEBjb250ZW50IGFwcGx5IG9ubHkgdG8gdGhlIGdpdmVuIGJyZWFrcG9pbnQsIG5vdCB2aWV3cG9ydHMgYW55IHdpZGVyIG9yIG5hcnJvd2VyLlxcbkBtaXhpbiBtZWRpYS1icmVha3BvaW50LW9ubHkoJG5hbWUsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcXG4gICRtaW46IGJyZWFrcG9pbnQtbWluKCRuYW1lLCAkYnJlYWtwb2ludHMpO1xcbiAgJG1heDogYnJlYWtwb2ludC1tYXgoJG5hbWUsICRicmVha3BvaW50cyk7XFxuXFxuICBAaWYgJG1pbiAhPSBudWxsIGFuZCAkbWF4ICE9IG51bGwge1xcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcXG4gICAgICBAY29udGVudDtcXG4gICAgfVxcbiAgfSBAZWxzZSBpZiAkbWF4ID09IG51bGwge1xcbiAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCRuYW1lLCAkYnJlYWtwb2ludHMpIHtcXG4gICAgICBAY29udGVudDtcXG4gICAgfVxcbiAgfSBAZWxzZSBpZiAkbWluID09IG51bGwge1xcbiAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LWRvd24oJG5hbWUsICRicmVha3BvaW50cykge1xcbiAgICAgIEBjb250ZW50O1xcbiAgICB9XFxuICB9XFxufVxcblwiLFwiLy8gQ3JlZGl0OiBOaWNvbGFzIEdhbGxhZ2hlciBhbmQgU1VJVCBDU1MuXFxuXFxuLmVtYmVkLXJlc3BvbnNpdmUge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcblxcbiAgJjo6YmVmb3JlIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgfVxcblxcbiAgLmVtYmVkLXJlc3BvbnNpdmUtaXRlbSxcXG4gIGlmcmFtZSxcXG4gIGVtYmVkLFxcbiAgb2JqZWN0LFxcbiAgdmlkZW8ge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHRvcDogMDtcXG4gICAgYm90dG9tOiAwO1xcbiAgICBsZWZ0OiAwO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICBib3JkZXI6IDA7XFxuICB9XFxufVxcblxcbi5lbWJlZC1yZXNwb25zaXZlLTIxYnk5IHtcXG4gICY6OmJlZm9yZSB7XFxuICAgIHBhZGRpbmctdG9wOiBwZXJjZW50YWdlKDkgLyAyMSk7XFxuICB9XFxufVxcblxcbi5lbWJlZC1yZXNwb25zaXZlLTE2Ynk5IHtcXG4gICY6OmJlZm9yZSB7XFxuICAgIHBhZGRpbmctdG9wOiBwZXJjZW50YWdlKDkgLyAxNik7XFxuICB9XFxufVxcblxcbi5lbWJlZC1yZXNwb25zaXZlLTRieTMge1xcbiAgJjo6YmVmb3JlIHtcXG4gICAgcGFkZGluZy10b3A6IHBlcmNlbnRhZ2UoMyAvIDQpO1xcbiAgfVxcbn1cXG5cXG4uZW1iZWQtcmVzcG9uc2l2ZS0xYnkxIHtcXG4gICY6OmJlZm9yZSB7XFxuICAgIHBhZGRpbmctdG9wOiBwZXJjZW50YWdlKDEgLyAxKTtcXG4gIH1cXG59XFxuXCIsXCIvLyBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnRcXG5cXG4vLyBGbGV4IHZhcmlhdGlvblxcbi8vXFxuLy8gQ3VzdG9tIHN0eWxlcyBmb3IgYWRkaXRpb25hbCBmbGV4IGFsaWdubWVudCBvcHRpb25zLlxcblxcbkBlYWNoICRicmVha3BvaW50IGluIG1hcC1rZXlzKCRncmlkLWJyZWFrcG9pbnRzKSB7XFxuICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCRicmVha3BvaW50KSB7XFxuICAgICRpbmZpeDogYnJlYWtwb2ludC1pbmZpeCgkYnJlYWtwb2ludCwgJGdyaWQtYnJlYWtwb2ludHMpO1xcblxcbiAgICAuZmxleCN7JGluZml4fS1yb3cgICAgICAgICAgICB7IGZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDsgfVxcbiAgICAuZmxleCN7JGluZml4fS1jb2x1bW4gICAgICAgICB7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDsgfVxcbiAgICAuZmxleCN7JGluZml4fS1yb3ctcmV2ZXJzZSAgICB7IGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZSAhaW1wb3J0YW50OyB9XFxuICAgIC5mbGV4I3skaW5maXh9LWNvbHVtbi1yZXZlcnNlIHsgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnQ7IH1cXG5cXG4gICAgLmZsZXgjeyRpbmZpeH0td3JhcCAgICAgICAgIHsgZmxleC13cmFwOiB3cmFwICFpbXBvcnRhbnQ7IH1cXG4gICAgLmZsZXgjeyRpbmZpeH0tbm93cmFwICAgICAgIHsgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDsgfVxcbiAgICAuZmxleCN7JGluZml4fS13cmFwLXJldmVyc2UgeyBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZSAhaW1wb3J0YW50OyB9XFxuXFxuICAgIC5qdXN0aWZ5LWNvbnRlbnQjeyRpbmZpeH0tc3RhcnQgICB7IGp1c3RpZnktY29udGVudDogZmxleC1zdGFydCAhaW1wb3J0YW50OyB9XFxuICAgIC5qdXN0aWZ5LWNvbnRlbnQjeyRpbmZpeH0tZW5kICAgICB7IGp1c3RpZnktY29udGVudDogZmxleC1lbmQgIWltcG9ydGFudDsgfVxcbiAgICAuanVzdGlmeS1jb250ZW50I3skaW5maXh9LWNlbnRlciAgeyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50OyB9XFxuICAgIC5qdXN0aWZ5LWNvbnRlbnQjeyRpbmZpeH0tYmV0d2VlbiB7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50OyB9XFxuICAgIC5qdXN0aWZ5LWNvbnRlbnQjeyRpbmZpeH0tYXJvdW5kICB7IGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kICFpbXBvcnRhbnQ7IH1cXG5cXG4gICAgLmFsaWduLWl0ZW1zI3skaW5maXh9LXN0YXJ0ICAgIHsgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQgIWltcG9ydGFudDsgfVxcbiAgICAuYWxpZ24taXRlbXMjeyRpbmZpeH0tZW5kICAgICAgeyBhbGlnbi1pdGVtczogZmxleC1lbmQgIWltcG9ydGFudDsgfVxcbiAgICAuYWxpZ24taXRlbXMjeyRpbmZpeH0tY2VudGVyICAgeyBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7IH1cXG4gICAgLmFsaWduLWl0ZW1zI3skaW5maXh9LWJhc2VsaW5lIHsgYWxpZ24taXRlbXM6IGJhc2VsaW5lICFpbXBvcnRhbnQ7IH1cXG4gICAgLmFsaWduLWl0ZW1zI3skaW5maXh9LXN0cmV0Y2ggIHsgYWxpZ24taXRlbXM6IHN0cmV0Y2ggIWltcG9ydGFudDsgfVxcblxcbiAgICAuYWxpZ24tY29udGVudCN7JGluZml4fS1zdGFydCAgIHsgYWxpZ24tY29udGVudDogZmxleC1zdGFydCAhaW1wb3J0YW50OyB9XFxuICAgIC5hbGlnbi1jb250ZW50I3skaW5maXh9LWVuZCAgICAgeyBhbGlnbi1jb250ZW50OiBmbGV4LWVuZCAhaW1wb3J0YW50OyB9XFxuICAgIC5hbGlnbi1jb250ZW50I3skaW5maXh9LWNlbnRlciAgeyBhbGlnbi1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDsgfVxcbiAgICAuYWxpZ24tY29udGVudCN7JGluZml4fS1iZXR3ZWVuIHsgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50OyB9XFxuICAgIC5hbGlnbi1jb250ZW50I3skaW5maXh9LWFyb3VuZCAgeyBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQgIWltcG9ydGFudDsgfVxcbiAgICAuYWxpZ24tY29udGVudCN7JGluZml4fS1zdHJldGNoIHsgYWxpZ24tY29udGVudDogc3RyZXRjaCAhaW1wb3J0YW50OyB9XFxuXFxuICAgIC5hbGlnbi1zZWxmI3skaW5maXh9LWF1dG8gICAgIHsgYWxpZ24tc2VsZjogYXV0byAhaW1wb3J0YW50OyB9XFxuICAgIC5hbGlnbi1zZWxmI3skaW5maXh9LXN0YXJ0ICAgIHsgYWxpZ24tc2VsZjogZmxleC1zdGFydCAhaW1wb3J0YW50OyB9XFxuICAgIC5hbGlnbi1zZWxmI3skaW5maXh9LWVuZCAgICAgIHsgYWxpZ24tc2VsZjogZmxleC1lbmQgIWltcG9ydGFudDsgfVxcbiAgICAuYWxpZ24tc2VsZiN7JGluZml4fS1jZW50ZXIgICB7IGFsaWduLXNlbGY6IGNlbnRlciAhaW1wb3J0YW50OyB9XFxuICAgIC5hbGlnbi1zZWxmI3skaW5maXh9LWJhc2VsaW5lIHsgYWxpZ24tc2VsZjogYmFzZWxpbmUgIWltcG9ydGFudDsgfVxcbiAgICAuYWxpZ24tc2VsZiN7JGluZml4fS1zdHJldGNoICB7IGFsaWduLXNlbGY6IHN0cmV0Y2ggIWltcG9ydGFudDsgfVxcbiAgfVxcbn1cXG5cIixcIkBlYWNoICRicmVha3BvaW50IGluIG1hcC1rZXlzKCRncmlkLWJyZWFrcG9pbnRzKSB7XFxuICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCRicmVha3BvaW50KSB7XFxuICAgICRpbmZpeDogYnJlYWtwb2ludC1pbmZpeCgkYnJlYWtwb2ludCwgJGdyaWQtYnJlYWtwb2ludHMpO1xcblxcbiAgICAuZmxvYXQjeyRpbmZpeH0tbGVmdCAgeyBAaW5jbHVkZSBmbG9hdC1sZWZ0OyB9XFxuICAgIC5mbG9hdCN7JGluZml4fS1yaWdodCB7IEBpbmNsdWRlIGZsb2F0LXJpZ2h0OyB9XFxuICAgIC5mbG9hdCN7JGluZml4fS1ub25lICB7IEBpbmNsdWRlIGZsb2F0LW5vbmU7IH1cXG4gIH1cXG59XFxuXCIsXCIvLyBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnRcXG5cXG5AbWl4aW4gZmxvYXQtbGVmdCB7XFxuICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xcbn1cXG5AbWl4aW4gZmxvYXQtcmlnaHQge1xcbiAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XFxufVxcbkBtaXhpbiBmbG9hdC1ub25lIHtcXG4gIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7XFxufVxcblwiLFwiLy8gc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XFxuXFxuLy8gQ29tbW9uIHZhbHVlc1xcblxcbi8vIFNhc3MgbGlzdCBub3QgaW4gdmFyaWFibGVzIHNpbmNlIGl0J3Mgbm90IGludGVuZGVkIGZvciBjdXN0b21pemF0aW9uLlxcbiRwb3NpdGlvbnM6IHN0YXRpYywgcmVsYXRpdmUsIGFic29sdXRlLCBmaXhlZCwgc3RpY2t5O1xcblxcbkBlYWNoICRwb3NpdGlvbiBpbiAkcG9zaXRpb25zIHtcXG4gIC5wb3NpdGlvbi0jeyRwb3NpdGlvbn0geyBwb3NpdGlvbjogJHBvc2l0aW9uICFpbXBvcnRhbnQ7IH1cXG59XFxuXFxuLy8gU2hvcnRoYW5kXFxuXFxuLmZpeGVkLXRvcCB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAkemluZGV4LWZpeGVkO1xcbn1cXG5cXG4uZml4ZWQtYm90dG9tIHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIHotaW5kZXg6ICR6aW5kZXgtZml4ZWQ7XFxufVxcblxcbi5zdGlja3ktdG9wIHtcXG4gIEBzdXBwb3J0cyAocG9zaXRpb246IHN0aWNreSkge1xcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xcbiAgICB0b3A6IDA7XFxuICAgIHotaW5kZXg6ICR6aW5kZXgtc3RpY2t5O1xcbiAgfVxcbn1cXG5cIixcIi8vIFZhcmlhYmxlc1xcbi8vXFxuLy8gVmFyaWFibGVzIHNob3VsZCBmb2xsb3cgdGhlIGAkY29tcG9uZW50LXN0YXRlLXByb3BlcnR5LXNpemVgIGZvcm11bGEgZm9yXFxuLy8gY29uc2lzdGVudCBuYW1pbmcuIEV4OiAkbmF2LWxpbmstZGlzYWJsZWQtY29sb3IgYW5kICRtb2RhbC1jb250ZW50LWJveC1zaGFkb3cteHMuXFxuXFxuXFxuLy9cXG4vLyBDb2xvciBzeXN0ZW1cXG4vL1xcblxcbi8vIHN0eWxlbGludC1kaXNhYmxlXFxuJHdoaXRlOiAgICAjZmZmICFkZWZhdWx0O1xcbiRncmF5LTEwMDogI2Y4ZjlmYSAhZGVmYXVsdDtcXG4kZ3JheS0yMDA6ICNlOWVjZWYgIWRlZmF1bHQ7XFxuJGdyYXktMzAwOiAjZGVlMmU2ICFkZWZhdWx0O1xcbiRncmF5LTQwMDogI2NlZDRkYSAhZGVmYXVsdDtcXG4kZ3JheS01MDA6ICNhZGI1YmQgIWRlZmF1bHQ7XFxuJGdyYXktNjAwOiAjNmM3NTdkICFkZWZhdWx0O1xcbiRncmF5LTcwMDogIzQ5NTA1NyAhZGVmYXVsdDtcXG4kZ3JheS04MDA6ICMzNDNhNDAgIWRlZmF1bHQ7XFxuJGdyYXktOTAwOiAjMjEyNTI5ICFkZWZhdWx0O1xcbiRibGFjazogICAgIzAwMCAhZGVmYXVsdDtcXG5cXG4kZ3JheXM6ICgpICFkZWZhdWx0O1xcbiRncmF5czogbWFwLW1lcmdlKChcXG4gIFxcXCIxMDBcXFwiOiAkZ3JheS0xMDAsXFxuICBcXFwiMjAwXFxcIjogJGdyYXktMjAwLFxcbiAgXFxcIjMwMFxcXCI6ICRncmF5LTMwMCxcXG4gIFxcXCI0MDBcXFwiOiAkZ3JheS00MDAsXFxuICBcXFwiNTAwXFxcIjogJGdyYXktNTAwLFxcbiAgXFxcIjYwMFxcXCI6ICRncmF5LTYwMCxcXG4gIFxcXCI3MDBcXFwiOiAkZ3JheS03MDAsXFxuICBcXFwiODAwXFxcIjogJGdyYXktODAwLFxcbiAgXFxcIjkwMFxcXCI6ICRncmF5LTkwMFxcbiksICRncmF5cyk7XFxuXFxuJGJsdWU6ICAgICMwMDdiZmYgIWRlZmF1bHQ7XFxuJGluZGlnbzogICM2NjEwZjIgIWRlZmF1bHQ7XFxuJHB1cnBsZTogICM2ZjQyYzEgIWRlZmF1bHQ7XFxuJHBpbms6ICAgICNlODNlOGMgIWRlZmF1bHQ7XFxuJHJlZDogICAgICNkYzM1NDUgIWRlZmF1bHQ7XFxuJG9yYW5nZTogICNmZDdlMTQgIWRlZmF1bHQ7XFxuJHllbGxvdzogICNmZmMxMDcgIWRlZmF1bHQ7XFxuJGdyZWVuOiAgICMyOGE3NDUgIWRlZmF1bHQ7XFxuJHRlYWw6ICAgICMyMGM5OTcgIWRlZmF1bHQ7XFxuJGN5YW46ICAgICMxN2EyYjggIWRlZmF1bHQ7XFxuXFxuJGNvbG9yczogKCkgIWRlZmF1bHQ7XFxuJGNvbG9yczogbWFwLW1lcmdlKChcXG4gIFxcXCJibHVlXFxcIjogICAgICAgJGJsdWUsXFxuICBcXFwiaW5kaWdvXFxcIjogICAgICRpbmRpZ28sXFxuICBcXFwicHVycGxlXFxcIjogICAgICRwdXJwbGUsXFxuICBcXFwicGlua1xcXCI6ICAgICAgICRwaW5rLFxcbiAgXFxcInJlZFxcXCI6ICAgICAgICAkcmVkLFxcbiAgXFxcIm9yYW5nZVxcXCI6ICAgICAkb3JhbmdlLFxcbiAgXFxcInllbGxvd1xcXCI6ICAgICAkeWVsbG93LFxcbiAgXFxcImdyZWVuXFxcIjogICAgICAkZ3JlZW4sXFxuICBcXFwidGVhbFxcXCI6ICAgICAgICR0ZWFsLFxcbiAgXFxcImN5YW5cXFwiOiAgICAgICAkY3lhbixcXG4gIFxcXCJ3aGl0ZVxcXCI6ICAgICAgJHdoaXRlLFxcbiAgXFxcImdyYXlcXFwiOiAgICAgICAkZ3JheS02MDAsXFxuICBcXFwiZ3JheS1kYXJrXFxcIjogICRncmF5LTgwMFxcbiksICRjb2xvcnMpO1xcblxcbiRwcmltYXJ5OiAgICAgICAkYmx1ZSAhZGVmYXVsdDtcXG4kc2Vjb25kYXJ5OiAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcbiRzdWNjZXNzOiAgICAgICAkZ3JlZW4gIWRlZmF1bHQ7XFxuJGluZm86ICAgICAgICAgICRjeWFuICFkZWZhdWx0O1xcbiR3YXJuaW5nOiAgICAgICAkeWVsbG93ICFkZWZhdWx0O1xcbiRkYW5nZXI6ICAgICAgICAkcmVkICFkZWZhdWx0O1xcbiRsaWdodDogICAgICAgICAkZ3JheS0xMDAgIWRlZmF1bHQ7XFxuJGRhcms6ICAgICAgICAgICRncmF5LTgwMCAhZGVmYXVsdDtcXG5cXG4kdGhlbWUtY29sb3JzOiAoKSAhZGVmYXVsdDtcXG4kdGhlbWUtY29sb3JzOiBtYXAtbWVyZ2UoKFxcbiAgXFxcInByaW1hcnlcXFwiOiAgICAkcHJpbWFyeSxcXG4gIFxcXCJzZWNvbmRhcnlcXFwiOiAgJHNlY29uZGFyeSxcXG4gIFxcXCJzdWNjZXNzXFxcIjogICAgJHN1Y2Nlc3MsXFxuICBcXFwiaW5mb1xcXCI6ICAgICAgICRpbmZvLFxcbiAgXFxcIndhcm5pbmdcXFwiOiAgICAkd2FybmluZyxcXG4gIFxcXCJkYW5nZXJcXFwiOiAgICAgJGRhbmdlcixcXG4gIFxcXCJsaWdodFxcXCI6ICAgICAgJGxpZ2h0LFxcbiAgXFxcImRhcmtcXFwiOiAgICAgICAkZGFya1xcbiksICR0aGVtZS1jb2xvcnMpO1xcbi8vIHN0eWxlbGludC1lbmFibGVcXG5cXG4vLyBTZXQgYSBzcGVjaWZpYyBqdW1wIHBvaW50IGZvciByZXF1ZXN0aW5nIGNvbG9yIGp1bXBzXFxuJHRoZW1lLWNvbG9yLWludGVydmFsOiAgICAgIDglICFkZWZhdWx0O1xcblxcbi8vIFRoZSB5aXEgbGlnaHRuZXNzIHZhbHVlIHRoYXQgZGV0ZXJtaW5lcyB3aGVuIHRoZSBsaWdodG5lc3Mgb2YgY29sb3IgY2hhbmdlcyBmcm9tIFxcXCJkYXJrXFxcIiB0byBcXFwibGlnaHRcXFwiLiBBY2NlcHRhYmxlIHZhbHVlcyBhcmUgYmV0d2VlbiAwIGFuZCAyNTUuXFxuJHlpcS1jb250cmFzdGVkLXRocmVzaG9sZDogMTUwICFkZWZhdWx0O1xcblxcbi8vIEN1c3RvbWl6ZSB0aGUgbGlnaHQgYW5kIGRhcmsgdGV4dCBjb2xvcnMgZm9yIHVzZSBpbiBvdXIgWUlRIGNvbG9yIGNvbnRyYXN0IGZ1bmN0aW9uLlxcbiR5aXEtdGV4dC1kYXJrOiAkZ3JheS05MDAgIWRlZmF1bHQ7XFxuJHlpcS10ZXh0LWxpZ2h0OiAkd2hpdGUgIWRlZmF1bHQ7XFxuXFxuLy8gT3B0aW9uc1xcbi8vXFxuLy8gUXVpY2tseSBtb2RpZnkgZ2xvYmFsIHN0eWxpbmcgYnkgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIG9wdGlvbmFsIGZlYXR1cmVzLlxcblxcbiRlbmFibGUtY2FyZXQ6ICAgICAgICAgICAgICB0cnVlICFkZWZhdWx0O1xcbiRlbmFibGUtcm91bmRlZDogICAgICAgICAgICB0cnVlICFkZWZhdWx0O1xcbiRlbmFibGUtc2hhZG93czogICAgICAgICAgICBmYWxzZSAhZGVmYXVsdDtcXG4kZW5hYmxlLWdyYWRpZW50czogICAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XFxuJGVuYWJsZS10cmFuc2l0aW9uczogICAgICAgIHRydWUgIWRlZmF1bHQ7XFxuJGVuYWJsZS1ob3Zlci1tZWRpYS1xdWVyeTogIGZhbHNlICFkZWZhdWx0OyAvLyBEZXByZWNhdGVkLCBubyBsb25nZXIgYWZmZWN0cyBhbnkgY29tcGlsZWQgQ1NTXFxuJGVuYWJsZS1ncmlkLWNsYXNzZXM6ICAgICAgIHRydWUgIWRlZmF1bHQ7XFxuJGVuYWJsZS1wcmludC1zdHlsZXM6ICAgICAgIHRydWUgIWRlZmF1bHQ7XFxuXFxuXFxuLy8gU3BhY2luZ1xcbi8vXFxuLy8gQ29udHJvbCB0aGUgZGVmYXVsdCBzdHlsaW5nIG9mIG1vc3QgQm9vdHN0cmFwIGVsZW1lbnRzIGJ5IG1vZGlmeWluZyB0aGVzZVxcbi8vIHZhcmlhYmxlcy4gTW9zdGx5IGZvY3VzZWQgb24gc3BhY2luZy5cXG4vLyBZb3UgY2FuIGFkZCBtb3JlIGVudHJpZXMgdG8gdGhlICRzcGFjZXJzIG1hcCwgc2hvdWxkIHlvdSBuZWVkIG1vcmUgdmFyaWF0aW9uLlxcblxcbi8vIHN0eWxlbGludC1kaXNhYmxlXFxuJHNwYWNlcjogMXJlbSAhZGVmYXVsdDtcXG4kc3BhY2VyczogKCkgIWRlZmF1bHQ7XFxuJHNwYWNlcnM6IG1hcC1tZXJnZSgoXFxuICAwOiAwLFxcbiAgMTogKCRzcGFjZXIgKiAuMjUpLFxcbiAgMjogKCRzcGFjZXIgKiAuNSksXFxuICAzOiAkc3BhY2VyLFxcbiAgNDogKCRzcGFjZXIgKiAxLjUpLFxcbiAgNTogKCRzcGFjZXIgKiAzKVxcbiksICRzcGFjZXJzKTtcXG5cXG4vLyBUaGlzIHZhcmlhYmxlIGFmZmVjdHMgdGhlIGAuaC0qYCBhbmQgYC53LSpgIGNsYXNzZXMuXFxuJHNpemVzOiAoKSAhZGVmYXVsdDtcXG4kc2l6ZXM6IG1hcC1tZXJnZSgoXFxuICAyNTogMjUlLFxcbiAgNTA6IDUwJSxcXG4gIDc1OiA3NSUsXFxuICAxMDA6IDEwMCVcXG4pLCAkc2l6ZXMpO1xcbi8vIHN0eWxlbGludC1lbmFibGVcXG5cXG4vLyBCb2R5XFxuLy9cXG4vLyBTZXR0aW5ncyBmb3IgdGhlIGA8Ym9keT5gIGVsZW1lbnQuXFxuXFxuJGJvZHktYmc6ICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kYm9keS1jb2xvcjogICAgICAgICAgICAgICAgJGdyYXktOTAwICFkZWZhdWx0O1xcblxcbi8vIExpbmtzXFxuLy9cXG4vLyBTdHlsZSBhbmNob3IgZWxlbWVudHMuXFxuXFxuJGxpbmstY29sb3I6ICAgICAgICAgICAgICAgIHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIikgIWRlZmF1bHQ7XFxuJGxpbmstZGVjb3JhdGlvbjogICAgICAgICAgIG5vbmUgIWRlZmF1bHQ7XFxuJGxpbmstaG92ZXItY29sb3I6ICAgICAgICAgIGRhcmtlbigkbGluay1jb2xvciwgMTUlKSAhZGVmYXVsdDtcXG4kbGluay1ob3Zlci1kZWNvcmF0aW9uOiAgICAgdW5kZXJsaW5lICFkZWZhdWx0O1xcblxcbi8vIFBhcmFncmFwaHNcXG4vL1xcbi8vIFN0eWxlIHAgZWxlbWVudC5cXG5cXG4kcGFyYWdyYXBoLW1hcmdpbi1ib3R0b206ICAgMXJlbSAhZGVmYXVsdDtcXG5cXG5cXG4vLyBHcmlkIGJyZWFrcG9pbnRzXFxuLy9cXG4vLyBEZWZpbmUgdGhlIG1pbmltdW0gZGltZW5zaW9ucyBhdCB3aGljaCB5b3VyIGxheW91dCB3aWxsIGNoYW5nZSxcXG4vLyBhZGFwdGluZyB0byBkaWZmZXJlbnQgc2NyZWVuIHNpemVzLCBmb3IgdXNlIGluIG1lZGlhIHF1ZXJpZXMuXFxuXFxuJGdyaWQtYnJlYWtwb2ludHM6IChcXG4gIHhzOiAwLFxcbiAgc206IDU3NnB4LFxcbiAgbWQ6IDc2OHB4LFxcbiAgbGc6IDk5MnB4LFxcbiAgeGw6IDEyMDBweFxcbikgIWRlZmF1bHQ7XFxuXFxuQGluY2x1ZGUgX2Fzc2VydC1hc2NlbmRpbmcoJGdyaWQtYnJlYWtwb2ludHMsIFxcXCIkZ3JpZC1icmVha3BvaW50c1xcXCIpO1xcbkBpbmNsdWRlIF9hc3NlcnQtc3RhcnRzLWF0LXplcm8oJGdyaWQtYnJlYWtwb2ludHMpO1xcblxcblxcbi8vIEdyaWQgY29udGFpbmVyc1xcbi8vXFxuLy8gRGVmaW5lIHRoZSBtYXhpbXVtIHdpZHRoIG9mIGAuY29udGFpbmVyYCBmb3IgZGlmZmVyZW50IHNjcmVlbiBzaXplcy5cXG5cXG4kY29udGFpbmVyLW1heC13aWR0aHM6IChcXG4gIHNtOiA1NDBweCxcXG4gIG1kOiA3MjBweCxcXG4gIGxnOiA5NjBweCxcXG4gIHhsOiAxMTQwcHhcXG4pICFkZWZhdWx0O1xcblxcbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRjb250YWluZXItbWF4LXdpZHRocywgXFxcIiRjb250YWluZXItbWF4LXdpZHRoc1xcXCIpO1xcblxcblxcbi8vIEdyaWQgY29sdW1uc1xcbi8vXFxuLy8gU2V0IHRoZSBudW1iZXIgb2YgY29sdW1ucyBhbmQgc3BlY2lmeSB0aGUgd2lkdGggb2YgdGhlIGd1dHRlcnMuXFxuXFxuJGdyaWQtY29sdW1uczogICAgICAgICAgICAgICAgMTIgIWRlZmF1bHQ7XFxuJGdyaWQtZ3V0dGVyLXdpZHRoOiAgICAgICAgICAgMzBweCAhZGVmYXVsdDtcXG5cXG4vLyBDb21wb25lbnRzXFxuLy9cXG4vLyBEZWZpbmUgY29tbW9uIHBhZGRpbmcgYW5kIGJvcmRlciByYWRpdXMgc2l6ZXMgYW5kIG1vcmUuXFxuXFxuJGxpbmUtaGVpZ2h0LWxnOiAgICAgICAgICAgICAgMS41ICFkZWZhdWx0O1xcbiRsaW5lLWhlaWdodC1zbTogICAgICAgICAgICAgIDEuNSAhZGVmYXVsdDtcXG5cXG4kYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgICAxcHggIWRlZmF1bHQ7XFxuJGJvcmRlci1jb2xvcjogICAgICAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcblxcbiRib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG4kYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICAgICAuM3JlbSAhZGVmYXVsdDtcXG4kYm9yZGVyLXJhZGl1cy1zbTogICAgICAgICAgICAuMnJlbSAhZGVmYXVsdDtcXG5cXG4kY29tcG9uZW50LWFjdGl2ZS1jb2xvcjogICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGNvbXBvbmVudC1hY3RpdmUtYmc6ICAgICAgICAgdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSAhZGVmYXVsdDtcXG5cXG4kY2FyZXQtd2lkdGg6ICAgICAgICAgICAgICAgICAuM2VtICFkZWZhdWx0O1xcblxcbiR0cmFuc2l0aW9uLWJhc2U6ICAgICAgICAgICAgIGFsbCAuMnMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XFxuJHRyYW5zaXRpb24tZmFkZTogICAgICAgICAgICAgb3BhY2l0eSAuMTVzIGxpbmVhciAhZGVmYXVsdDtcXG4kdHJhbnNpdGlvbi1jb2xsYXBzZTogICAgICAgICBoZWlnaHQgLjM1cyBlYXNlICFkZWZhdWx0O1xcblxcblxcbi8vIEZvbnRzXFxuLy9cXG4vLyBGb250LCBsaW5lLWhlaWdodCwgYW5kIGNvbG9yIGZvciBib2R5IHRleHQsIGhlYWRpbmdzLCBhbmQgbW9yZS5cXG5cXG4vLyBzdHlsZWxpbnQtZGlzYWJsZSB2YWx1ZS1rZXl3b3JkLWNhc2VcXG4kZm9udC1mYW1pbHktc2Fucy1zZXJpZjogICAgICAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFxcXCJTZWdvZSBVSVxcXCIsIFJvYm90bywgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgQXJpYWwsIHNhbnMtc2VyaWYsIFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsIFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsIFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiICFkZWZhdWx0O1xcbiRmb250LWZhbWlseS1tb25vc3BhY2U6ICAgICAgIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXFxcIkxpYmVyYXRpb24gTW9ub1xcXCIsIFxcXCJDb3VyaWVyIE5ld1xcXCIsIG1vbm9zcGFjZSAhZGVmYXVsdDtcXG4kZm9udC1mYW1pbHktYmFzZTogICAgICAgICAgICAkZm9udC1mYW1pbHktc2Fucy1zZXJpZiAhZGVmYXVsdDtcXG4vLyBzdHlsZWxpbnQtZW5hYmxlIHZhbHVlLWtleXdvcmQtY2FzZVxcblxcbiRmb250LXNpemUtYmFzZTogICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7IC8vIEFzc3VtZXMgdGhlIGJyb3dzZXIgZGVmYXVsdCwgdHlwaWNhbGx5IGAxNnB4YFxcbiRmb250LXNpemUtbGc6ICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAxLjI1KSAhZGVmYXVsdDtcXG4kZm9udC1zaXplLXNtOiAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogLjg3NSkgIWRlZmF1bHQ7XFxuXFxuJGZvbnQtd2VpZ2h0LWxpZ2h0OiAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbiRmb250LXdlaWdodC1ub3JtYWw6ICAgICAgICAgIDQwMCAhZGVmYXVsdDtcXG4kZm9udC13ZWlnaHQtYm9sZDogICAgICAgICAgICA3MDAgIWRlZmF1bHQ7XFxuXFxuJGZvbnQtd2VpZ2h0LWJhc2U6ICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LW5vcm1hbCAhZGVmYXVsdDtcXG4kbGluZS1oZWlnaHQtYmFzZTogICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XFxuXFxuJGgxLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMi41ICFkZWZhdWx0O1xcbiRoMi1mb250LXNpemU6ICAgICAgICAgICAgICAgICRmb250LXNpemUtYmFzZSAqIDIgIWRlZmF1bHQ7XFxuJGgzLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMS43NSAhZGVmYXVsdDtcXG4kaDQtZm9udC1zaXplOiAgICAgICAgICAgICAgICAkZm9udC1zaXplLWJhc2UgKiAxLjUgIWRlZmF1bHQ7XFxuJGg1LWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMS4yNSAhZGVmYXVsdDtcXG4kaDYtZm9udC1zaXplOiAgICAgICAgICAgICAgICAkZm9udC1zaXplLWJhc2UgIWRlZmF1bHQ7XFxuXFxuJGhlYWRpbmdzLW1hcmdpbi1ib3R0b206ICAgICAgKCRzcGFjZXIgLyAyKSAhZGVmYXVsdDtcXG4kaGVhZGluZ3MtZm9udC1mYW1pbHk6ICAgICAgICBpbmhlcml0ICFkZWZhdWx0O1xcbiRoZWFkaW5ncy1mb250LXdlaWdodDogICAgICAgIDUwMCAhZGVmYXVsdDtcXG4kaGVhZGluZ3MtbGluZS1oZWlnaHQ6ICAgICAgICAxLjIgIWRlZmF1bHQ7XFxuJGhlYWRpbmdzLWNvbG9yOiAgICAgICAgICAgICAgaW5oZXJpdCAhZGVmYXVsdDtcXG5cXG4kZGlzcGxheTEtc2l6ZTogICAgICAgICAgICAgICA2cmVtICFkZWZhdWx0O1xcbiRkaXNwbGF5Mi1zaXplOiAgICAgICAgICAgICAgIDUuNXJlbSAhZGVmYXVsdDtcXG4kZGlzcGxheTMtc2l6ZTogICAgICAgICAgICAgICA0LjVyZW0gIWRlZmF1bHQ7XFxuJGRpc3BsYXk0LXNpemU6ICAgICAgICAgICAgICAgMy41cmVtICFkZWZhdWx0O1xcblxcbiRkaXNwbGF5MS13ZWlnaHQ6ICAgICAgICAgICAgIDMwMCAhZGVmYXVsdDtcXG4kZGlzcGxheTItd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuJGRpc3BsYXkzLXdlaWdodDogICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbiRkaXNwbGF5NC13ZWlnaHQ6ICAgICAgICAgICAgIDMwMCAhZGVmYXVsdDtcXG4kZGlzcGxheS1saW5lLWhlaWdodDogICAgICAgICAkaGVhZGluZ3MtbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuJGxlYWQtZm9udC1zaXplOiAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqIDEuMjUpICFkZWZhdWx0O1xcbiRsZWFkLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgIDMwMCAhZGVmYXVsdDtcXG5cXG4kc21hbGwtZm9udC1zaXplOiAgICAgICAgICAgICA4MCUgIWRlZmF1bHQ7XFxuXFxuJHRleHQtbXV0ZWQ6ICAgICAgICAgICAgICAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcblxcbiRibG9ja3F1b3RlLXNtYWxsLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG4kYmxvY2txdW90ZS1mb250LXNpemU6ICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogMS4yNSkgIWRlZmF1bHQ7XFxuXFxuJGhyLWJvcmRlci1jb2xvcjogICAgICAgICAgICAgcmdiYSgkYmxhY2ssIC4xKSAhZGVmYXVsdDtcXG4kaHItYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcblxcbiRtYXJrLXBhZGRpbmc6ICAgICAgICAgICAgICAgIC4yZW0gIWRlZmF1bHQ7XFxuXFxuJGR0LWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuXFxuJGtiZC1ib3gtc2hhZG93OiAgICAgICAgICAgICAgaW5zZXQgMCAtLjFyZW0gMCByZ2JhKCRibGFjaywgLjI1KSAhZGVmYXVsdDtcXG4kbmVzdGVkLWtiZC1mb250LXdlaWdodDogICAgICAkZm9udC13ZWlnaHQtYm9sZCAhZGVmYXVsdDtcXG5cXG4kbGlzdC1pbmxpbmUtcGFkZGluZzogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4kbWFyay1iZzogICAgICAgICAgICAgICAgICAgICAjZmNmOGUzICFkZWZhdWx0O1xcblxcbiRoci1tYXJnaW4teTogICAgICAgICAgICAgICAgICRzcGFjZXIgIWRlZmF1bHQ7XFxuXFxuXFxuLy8gVGFibGVzXFxuLy9cXG4vLyBDdXN0b21pemVzIHRoZSBgLnRhYmxlYCBjb21wb25lbnQgd2l0aCBiYXNpYyB2YWx1ZXMsIGVhY2ggdXNlZCBhY3Jvc3MgYWxsIHRhYmxlIHZhcmlhdGlvbnMuXFxuXFxuJHRhYmxlLWNlbGwtcGFkZGluZzogICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcbiR0YWJsZS1jZWxsLXBhZGRpbmctc206ICAgICAgIC4zcmVtICFkZWZhdWx0O1xcblxcbiR0YWJsZS1iZzogICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xcbiR0YWJsZS1hY2NlbnQtYmc6ICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMDUpICFkZWZhdWx0O1xcbiR0YWJsZS1ob3Zlci1iZzogICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMDc1KSAhZGVmYXVsdDtcXG4kdGFibGUtYWN0aXZlLWJnOiAgICAgICAgICAgICAkdGFibGUtaG92ZXItYmcgIWRlZmF1bHQ7XFxuXFxuJHRhYmxlLWJvcmRlci13aWR0aDogICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kdGFibGUtYm9yZGVyLWNvbG9yOiAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuXFxuJHRhYmxlLWhlYWQtYmc6ICAgICAgICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcbiR0YWJsZS1oZWFkLWNvbG9yOiAgICAgICAgICAgICRncmF5LTcwMCAhZGVmYXVsdDtcXG5cXG4kdGFibGUtZGFyay1iZzogICAgICAgICAgICAgICAkZ3JheS05MDAgIWRlZmF1bHQ7XFxuJHRhYmxlLWRhcmstYWNjZW50LWJnOiAgICAgICAgcmdiYSgkd2hpdGUsIC4wNSkgIWRlZmF1bHQ7XFxuJHRhYmxlLWRhcmstaG92ZXItYmc6ICAgICAgICAgcmdiYSgkd2hpdGUsIC4wNzUpICFkZWZhdWx0O1xcbiR0YWJsZS1kYXJrLWJvcmRlci1jb2xvcjogICAgIGxpZ2h0ZW4oJGdyYXktOTAwLCA3LjUlKSAhZGVmYXVsdDtcXG4kdGFibGUtZGFyay1jb2xvcjogICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcXG5cXG5cXG4vLyBCdXR0b25zICsgRm9ybXNcXG4vL1xcbi8vIFNoYXJlZCB2YXJpYWJsZXMgdGhhdCBhcmUgcmVhc3NpZ25lZCB0byBgJGlucHV0LWAgYW5kIGAkYnRuLWAgc3BlY2lmaWMgdmFyaWFibGVzLlxcblxcbiRpbnB1dC1idG4tcGFkZGluZy15OiAgICAgICAgIC4zNzVyZW0gIWRlZmF1bHQ7XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXg6ICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcbiRpbnB1dC1idG4tbGluZS1oZWlnaHQ6ICAgICAgICRsaW5lLWhlaWdodC1iYXNlICFkZWZhdWx0O1xcblxcbiRpbnB1dC1idG4tZm9jdXMtd2lkdGg6ICAgICAgIC4ycmVtICFkZWZhdWx0O1xcbiRpbnB1dC1idG4tZm9jdXMtY29sb3I6ICAgICAgIHJnYmEoJGNvbXBvbmVudC1hY3RpdmUtYmcsIC4yNSkgIWRlZmF1bHQ7XFxuJGlucHV0LWJ0bi1mb2N1cy1ib3gtc2hhZG93OiAgMCAwIDAgJGlucHV0LWJ0bi1mb2N1cy13aWR0aCAkaW5wdXQtYnRuLWZvY3VzLWNvbG9yICFkZWZhdWx0O1xcblxcbiRpbnB1dC1idG4tcGFkZGluZy15LXNtOiAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG4kaW5wdXQtYnRuLXBhZGRpbmcteC1zbTogICAgICAuNXJlbSAhZGVmYXVsdDtcXG4kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LXNtOiAgICAkbGluZS1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWJ0bi1wYWRkaW5nLXktbGc6ICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGc6ICAgICAgMXJlbSAhZGVmYXVsdDtcXG4kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnOiAgICAkbGluZS1oZWlnaHQtbGcgIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWJ0bi1ib3JkZXItd2lkdGg6ICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG5cXG5cXG4vLyBCdXR0b25zXFxuLy9cXG4vLyBGb3IgZWFjaCBvZiBCb290c3RyYXAncyBidXR0b25zLCBkZWZpbmUgdGV4dCwgYmFja2dyb3VuZCwgYW5kIGJvcmRlciBjb2xvci5cXG5cXG4kYnRuLXBhZGRpbmcteTogICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteSAhZGVmYXVsdDtcXG4kYnRuLXBhZGRpbmcteDogICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteCAhZGVmYXVsdDtcXG4kYnRuLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcblxcbiRidG4tcGFkZGluZy15LXNtOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LXNtICFkZWZhdWx0O1xcbiRidG4tcGFkZGluZy14LXNtOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LXNtICFkZWZhdWx0O1xcbiRidG4tbGluZS1oZWlnaHQtc206ICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuJGJ0bi1wYWRkaW5nLXktbGc6ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktbGcgIWRlZmF1bHQ7XFxuJGJ0bi1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGcgIWRlZmF1bHQ7XFxuJGJ0bi1saW5lLWhlaWdodC1sZzogICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4kYnRuLWJvcmRlci13aWR0aDogICAgICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG5cXG4kYnRuLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAkZm9udC13ZWlnaHQtbm9ybWFsICFkZWZhdWx0O1xcbiRidG4tYm94LXNoYWRvdzogICAgICAgICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgkd2hpdGUsIC4xNSksIDAgMXB4IDFweCByZ2JhKCRibGFjaywgLjA3NSkgIWRlZmF1bHQ7XFxuJGJ0bi1mb2N1cy13aWR0aDogICAgICAgICAgICAgJGlucHV0LWJ0bi1mb2N1cy13aWR0aCAhZGVmYXVsdDtcXG4kYnRuLWZvY3VzLWJveC1zaGFkb3c6ICAgICAgICAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuJGJ0bi1kaXNhYmxlZC1vcGFjaXR5OiAgICAgICAgLjY1ICFkZWZhdWx0O1xcbiRidG4tYWN0aXZlLWJveC1zaGFkb3c6ICAgICAgIGluc2V0IDAgM3B4IDVweCByZ2JhKCRibGFjaywgLjEyNSkgIWRlZmF1bHQ7XFxuXFxuJGJ0bi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcblxcbiRidG4tYmxvY2stc3BhY2luZy15OiAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcblxcbi8vIEFsbG93cyBmb3IgY3VzdG9taXppbmcgYnV0dG9uIHJhZGl1cyBpbmRlcGVuZGVudGx5IGZyb20gZ2xvYmFsIGJvcmRlciByYWRpdXNcXG4kYnRuLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kYnRuLWJvcmRlci1yYWRpdXMtbGc6ICAgICAgICAkYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcXG4kYnRuLWJvcmRlci1yYWRpdXMtc206ICAgICAgICAkYm9yZGVyLXJhZGl1cy1zbSAhZGVmYXVsdDtcXG5cXG4kYnRuLXRyYW5zaXRpb246ICAgICAgICAgICAgICBjb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XFxuXFxuXFxuLy8gRm9ybXNcXG5cXG4kaW5wdXQtcGFkZGluZy15OiAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXkgIWRlZmF1bHQ7XFxuJGlucHV0LXBhZGRpbmcteDogICAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14ICFkZWZhdWx0O1xcbiRpbnB1dC1saW5lLWhlaWdodDogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcblxcbiRpbnB1dC1wYWRkaW5nLXktc206ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1zbSAhZGVmYXVsdDtcXG4kaW5wdXQtcGFkZGluZy14LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtc20gIWRlZmF1bHQ7XFxuJGlucHV0LWxpbmUtaGVpZ2h0LXNtOiAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuJGlucHV0LXBhZGRpbmcteS1sZzogICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LWxnICFkZWZhdWx0O1xcbiRpbnB1dC1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1sZyAhZGVmYXVsdDtcXG4kaW5wdXQtbGluZS1oZWlnaHQtbGc6ICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRpbnB1dC1kaXNhYmxlZC1iZzogICAgICAgICAgICAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICAgICAgICRncmF5LTcwMCAhZGVmYXVsdDtcXG4kaW5wdXQtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgJGdyYXktNDAwICFkZWZhdWx0O1xcbiRpbnB1dC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kaW5wdXQtYm94LXNoYWRvdzogICAgICAgICAgICAgICAgICAgICAgaW5zZXQgMCAxcHggMXB4IHJnYmEoJGJsYWNrLCAuMDc1KSAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJGlucHV0LWJvcmRlci1yYWRpdXMtbGc6ICAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xcbiRpbnB1dC1ib3JkZXItcmFkaXVzLXNtOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1zbSAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtZm9jdXMtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJnICFkZWZhdWx0O1xcbiRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3I6ICAgICAgICAgICAgICBsaWdodGVuKCRjb21wb25lbnQtYWN0aXZlLWJnLCAyNSUpICFkZWZhdWx0O1xcbiRpbnB1dC1mb2N1cy1jb2xvcjogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuJGlucHV0LWZvY3VzLXdpZHRoOiAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tZm9jdXMtd2lkdGggIWRlZmF1bHQ7XFxuJGlucHV0LWZvY3VzLWJveC1zaGFkb3c6ICAgICAgICAgICAgICAgICRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdyAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtcGxhY2Vob2xkZXItY29sb3I6ICAgICAgICAgICAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcblxcbiRpbnB1dC1oZWlnaHQtYm9yZGVyOiAgICAgICAgICAgICAgICAgICAkaW5wdXQtYm9yZGVyLXdpZHRoICogMiAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtaGVpZ2h0LWlubmVyOiAgICAgICAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqICRpbnB1dC1idG4tbGluZS1oZWlnaHQpICsgKCRpbnB1dC1idG4tcGFkZGluZy15ICogMikgIWRlZmF1bHQ7XFxuJGlucHV0LWhlaWdodDogICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGMoI3skaW5wdXQtaGVpZ2h0LWlubmVyfSArICN7JGlucHV0LWhlaWdodC1ib3JkZXJ9KSAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtaGVpZ2h0LWlubmVyLXNtOiAgICAgICAgICAgICAgICAgKCRmb250LXNpemUtc20gKiAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LXNtKSArICgkaW5wdXQtYnRuLXBhZGRpbmcteS1zbSAqIDIpICFkZWZhdWx0O1xcbiRpbnB1dC1oZWlnaHQtc206ICAgICAgICAgICAgICAgICAgICAgICBjYWxjKCN7JGlucHV0LWhlaWdodC1pbm5lci1zbX0gKyAjeyRpbnB1dC1oZWlnaHQtYm9yZGVyfSkgIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWhlaWdodC1pbm5lci1sZzogICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWxnICogJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZykgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXktbGcgKiAyKSAhZGVmYXVsdDtcXG4kaW5wdXQtaGVpZ2h0LWxnOiAgICAgICAgICAgICAgICAgICAgICAgY2FsYygjeyRpbnB1dC1oZWlnaHQtaW5uZXItbGd9ICsgI3skaW5wdXQtaGVpZ2h0LWJvcmRlcn0pICFkZWZhdWx0O1xcblxcbiRpbnB1dC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xcblxcbiRmb3JtLXRleHQtbWFyZ2luLXRvcDogICAgICAgICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuXFxuJGZvcm0tY2hlY2staW5wdXQtZ3V0dGVyOiAgICAgICAgICAgICAgIDEuMjVyZW0gIWRlZmF1bHQ7XFxuJGZvcm0tY2hlY2staW5wdXQtbWFyZ2luLXk6ICAgICAgICAgICAgIC4zcmVtICFkZWZhdWx0O1xcbiRmb3JtLWNoZWNrLWlucHV0LW1hcmdpbi14OiAgICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuXFxuJGZvcm0tY2hlY2staW5saW5lLW1hcmdpbi14OiAgICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4kZm9ybS1jaGVjay1pbmxpbmUtaW5wdXQtbWFyZ2luLXg6ICAgICAgLjMxMjVyZW0gIWRlZmF1bHQ7XFxuXFxuJGZvcm0tZ3JvdXAtbWFyZ2luLWJvdHRvbTogICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWdyb3VwLWFkZG9uLWNvbG9yOiAgICAgICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcXG4kaW5wdXQtZ3JvdXAtYWRkb24tYmc6ICAgICAgICAgICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcbiRpbnB1dC1ncm91cC1hZGRvbi1ib3JkZXItY29sb3I6ICAgICAgICAkaW5wdXQtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcblxcbiRjdXN0b20tY29udHJvbC1ndXR0ZXI6ICAgICAgICAgICAgICAgICAxLjVyZW0gIWRlZmF1bHQ7XFxuJGN1c3RvbS1jb250cm9sLXNwYWNlci14OiAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1zaXplOiAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1iZzogICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcXG4kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJnLXNpemU6ICAgICAgNTAlIDUwJSAhZGVmYXVsdDtcXG4kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJveC1zaGFkb3c6ICAgaW5zZXQgMCAuMjVyZW0gLjI1cmVtIHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1kaXNhYmxlZC1iZzogICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcbiRjdXN0b20tY29udHJvbC1sYWJlbC1kaXNhYmxlZC1jb2xvcjogICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG4kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3I6ICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtYmc6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG4kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtZGlzYWJsZWQtYmc6ICByZ2JhKHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIiksIC41KSAhZGVmYXVsdDtcXG4kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtYm94LXNoYWRvdzogICBub25lICFkZWZhdWx0O1xcblxcbiRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItZm9jdXMtYm94LXNoYWRvdzogICAgIDAgMCAwIDFweCAkYm9keS1iZywgJGlucHV0LWJ0bi1mb2N1cy1ib3gtc2hhZG93ICFkZWZhdWx0O1xcblxcbiRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYWN0aXZlLWNvbG9yOiAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbiRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICAgICAgIGxpZ2h0ZW4oJGNvbXBvbmVudC1hY3RpdmUtYmcsIDM1JSkgIWRlZmF1bHQ7XFxuJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1hY3RpdmUtYm94LXNoYWRvdzogICAgbm9uZSAhZGVmYXVsdDtcXG5cXG4kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1ib3JkZXItcmFkaXVzOiAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pY29uLWNoZWNrZWQ6ICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDggOCclM0UlM0NwYXRoIGZpbGw9JyN7JGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWNvbG9yfScgZD0nTTYuNTY0Ljc1bC0zLjU5IDMuNjEyLTEuNTM4LTEuNTVMMCA0LjI2IDIuOTc0IDcuMjUgOCAyLjE5M3onLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaW5kZXRlcm1pbmF0ZS1iZzogICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaW5kZXRlcm1pbmF0ZS1jb2xvcjogJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWNvbG9yICFkZWZhdWx0O1xcbiRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWljb24taW5kZXRlcm1pbmF0ZTogIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA0JyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtY29sb3J9JyBkPSdNMCAyaDQnLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaW5kZXRlcm1pbmF0ZS1ib3gtc2hhZG93OiBub25lICFkZWZhdWx0O1xcblxcbiRjdXN0b20tcmFkaW8taW5kaWNhdG9yLWJvcmRlci1yYWRpdXM6ICAgICAgICAgIDUwJSAhZGVmYXVsdDtcXG4kY3VzdG9tLXJhZGlvLWluZGljYXRvci1pY29uLWNoZWNrZWQ6ICAgICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nLTQgLTQgOCA4JyUzRSUzQ2NpcmNsZSByPSczJyBmaWxsPScjeyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvcn0nLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1zZWxlY3QtcGFkZGluZy15OiAgICAgICAgICAgLjM3NXJlbSAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1wYWRkaW5nLXg6ICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1oZWlnaHQ6ICAgICAgICAgICAgICAkaW5wdXQtaGVpZ2h0ICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWluZGljYXRvci1wYWRkaW5nOiAgIDFyZW0gIWRlZmF1bHQ7IC8vIEV4dHJhIHBhZGRpbmcgdG8gYWNjb3VudCBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBiYWNrZ3JvdW5kLWltYWdlIGJhc2VkIGluZGljYXRvclxcbiRjdXN0b20tc2VsZWN0LWxpbmUtaGVpZ2h0OiAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuJGN1c3RvbS1zZWxlY3QtY29sb3I6ICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWRpc2FibGVkLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1iZzogICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGN1c3RvbS1zZWxlY3QtZGlzYWJsZWQtYmc6ICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWJnLXNpemU6ICAgICAgICAgICAgIDhweCAxMHB4ICFkZWZhdWx0OyAvLyBJbiBwaXhlbHMgYmVjYXVzZSBpbWFnZSBkaW1lbnNpb25zXFxuJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yLWNvbG9yOiAgICAgJGdyYXktODAwICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWluZGljYXRvcjogICAgICAgICAgIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA1JyUzRSUzQ3BhdGggZmlsbD0nI3skY3VzdG9tLXNlbGVjdC1pbmRpY2F0b3ItY29sb3J9JyBkPSdNMiAwTDAgMmg0em0wIDVMMCAzaDR6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWJvcmRlci13aWR0aDogICAgICAgICRpbnB1dC1idG4tYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWJvcmRlci1jb2xvcjogICAgICAgICRpbnB1dC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuJGN1c3RvbS1zZWxlY3QtYm9yZGVyLXJhZGl1czogICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1zZWxlY3QtZm9jdXMtYm9yZGVyLWNvbG9yOiAgJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1mb2N1cy1ib3gtc2hhZG93OiAgICBpbnNldCAwIDFweCAycHggcmdiYSgkYmxhY2ssIC4wNzUpLCAwIDAgNXB4IHJnYmEoJGN1c3RvbS1zZWxlY3QtZm9jdXMtYm9yZGVyLWNvbG9yLCAuNSkgIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1zZWxlY3QtZm9udC1zaXplLXNtOiAgICAgICAgNzUlICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWhlaWdodC1zbTogICAgICAgICAgICRpbnB1dC1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1zZWxlY3QtZm9udC1zaXplLWxnOiAgICAgICAgMTI1JSAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1oZWlnaHQtbGc6ICAgICAgICAgICAkaW5wdXQtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbiRjdXN0b20tZmlsZS1oZWlnaHQ6ICAgICAgICAgICAgICAgICRpbnB1dC1oZWlnaHQgIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLWZvY3VzLWJvcmRlci1jb2xvcjogICAgJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLWZpbGUtZm9jdXMtYm94LXNoYWRvdzogICAgICAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1maWxlLXBhZGRpbmcteTogICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXkgIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLXBhZGRpbmcteDogICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXggIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodCAhZGVmYXVsdDtcXG4kY3VzdG9tLWZpbGUtY29sb3I6ICAgICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLWJnOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJnICFkZWZhdWx0O1xcbiRjdXN0b20tZmlsZS1ib3JkZXItd2lkdGg6ICAgICAgICAgICRpbnB1dC1idG4tYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRjdXN0b20tZmlsZS1ib3JkZXItY29sb3I6ICAgICAgICAgICRpbnB1dC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLWJvcmRlci1yYWRpdXM6ICAgICAgICAgJGlucHV0LWJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLWJveC1zaGFkb3c6ICAgICAgICAgICAgJGlucHV0LWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLWJ1dHRvbi1jb2xvcjogICAgICAgICAgJGN1c3RvbS1maWxlLWNvbG9yICFkZWZhdWx0O1xcbiRjdXN0b20tZmlsZS1idXR0b24tYmc6ICAgICAgICAgICAgICRpbnB1dC1ncm91cC1hZGRvbi1iZyAhZGVmYXVsdDtcXG4kY3VzdG9tLWZpbGUtdGV4dDogKFxcbiAgZW46IFxcXCJCcm93c2VcXFwiXFxuKSAhZGVmYXVsdDtcXG5cXG5cXG4vLyBGb3JtIHZhbGlkYXRpb25cXG4kZm9ybS1mZWVkYmFjay1tYXJnaW4tdG9wOiAgICAgICAgICAkZm9ybS10ZXh0LW1hcmdpbi10b3AgIWRlZmF1bHQ7XFxuJGZvcm0tZmVlZGJhY2stZm9udC1zaXplOiAgICAgICAgICAgJHNtYWxsLWZvbnQtc2l6ZSAhZGVmYXVsdDtcXG4kZm9ybS1mZWVkYmFjay12YWxpZC1jb2xvcjogICAgICAgICB0aGVtZS1jb2xvcihcXFwic3VjY2Vzc1xcXCIpICFkZWZhdWx0O1xcbiRmb3JtLWZlZWRiYWNrLWludmFsaWQtY29sb3I6ICAgICAgIHRoZW1lLWNvbG9yKFxcXCJkYW5nZXJcXFwiKSAhZGVmYXVsdDtcXG5cXG5cXG4vLyBEcm9wZG93bnNcXG4vL1xcbi8vIERyb3Bkb3duIG1lbnUgY29udGFpbmVyIGFuZCBjb250ZW50cy5cXG5cXG4kZHJvcGRvd24tbWluLXdpZHRoOiAgICAgICAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tcGFkZGluZy15OiAgICAgICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tc3BhY2VyOiAgICAgICAgICAgICAgICAgICAuMTI1cmVtICFkZWZhdWx0O1xcbiRkcm9wZG93bi1iZzogICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICByZ2JhKCRibGFjaywgLjE1KSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tYm9yZGVyLXJhZGl1czogICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kZHJvcGRvd24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRkcm9wZG93bi1kaXZpZGVyLWJnOiAgICAgICAgICAgICAgICRncmF5LTIwMCAhZGVmYXVsdDtcXG4kZHJvcGRvd24tYm94LXNoYWRvdzogICAgICAgICAgICAgICAwIC41cmVtIDFyZW0gcmdiYSgkYmxhY2ssIC4xNzUpICFkZWZhdWx0O1xcblxcbiRkcm9wZG93bi1saW5rLWNvbG9yOiAgICAgICAgICAgICAgICRncmF5LTkwMCAhZGVmYXVsdDtcXG4kZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjogICAgICAgICBkYXJrZW4oJGdyYXktOTAwLCA1JSkgIWRlZmF1bHQ7XFxuJGRyb3Bkb3duLWxpbmstaG92ZXItYmc6ICAgICAgICAgICAgJGdyYXktMTAwICFkZWZhdWx0O1xcblxcbiRkcm9wZG93bi1saW5rLWFjdGl2ZS1jb2xvcjogICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbiRkcm9wZG93bi1saW5rLWFjdGl2ZS1iZzogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xcblxcbiRkcm9wZG93bi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG4kZHJvcGRvd24taXRlbS1wYWRkaW5nLXk6ICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuJGRyb3Bkb3duLWl0ZW0tcGFkZGluZy14OiAgICAgICAgICAgMS41cmVtICFkZWZhdWx0O1xcblxcbiRkcm9wZG93bi1oZWFkZXItY29sb3I6ICAgICAgICAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG5cXG4vLyBaLWluZGV4IG1hc3RlciBsaXN0XFxuLy9cXG4vLyBXYXJuaW5nOiBBdm9pZCBjdXN0b21pemluZyB0aGVzZSB2YWx1ZXMuIFRoZXkncmUgdXNlZCBmb3IgYSBiaXJkJ3MgZXllIHZpZXdcXG4vLyBvZiBjb21wb25lbnRzIGRlcGVuZGVudCBvbiB0aGUgei1heGlzIGFuZCBhcmUgZGVzaWduZWQgdG8gYWxsIHdvcmsgdG9nZXRoZXIuXFxuXFxuJHppbmRleC1kcm9wZG93bjogICAgICAgICAgICAgICAgICAgMTAwMCAhZGVmYXVsdDtcXG4kemluZGV4LXN0aWNreTogICAgICAgICAgICAgICAgICAgICAxMDIwICFkZWZhdWx0O1xcbiR6aW5kZXgtZml4ZWQ6ICAgICAgICAgICAgICAgICAgICAgIDEwMzAgIWRlZmF1bHQ7XFxuJHppbmRleC1tb2RhbC1iYWNrZHJvcDogICAgICAgICAgICAgMTA0MCAhZGVmYXVsdDtcXG4kemluZGV4LW1vZGFsOiAgICAgICAgICAgICAgICAgICAgICAxMDUwICFkZWZhdWx0O1xcbiR6aW5kZXgtcG9wb3ZlcjogICAgICAgICAgICAgICAgICAgIDEwNjAgIWRlZmF1bHQ7XFxuJHppbmRleC10b29sdGlwOiAgICAgICAgICAgICAgICAgICAgMTA3MCAhZGVmYXVsdDtcXG5cXG4vLyBOYXZzXFxuXFxuJG5hdi1saW5rLXBhZGRpbmcteTogICAgICAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuJG5hdi1saW5rLXBhZGRpbmcteDogICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG4kbmF2LWxpbmstZGlzYWJsZWQtY29sb3I6ICAgICAgICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuJG5hdi10YWJzLWJvcmRlci1jb2xvcjogICAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcbiRuYXYtdGFicy1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJG5hdi10YWJzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiAgJGdyYXktMjAwICRncmF5LTIwMCAkbmF2LXRhYnMtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcbiRuYXYtdGFicy1saW5rLWFjdGl2ZS1jb2xvcjogICAgICAgICRncmF5LTcwMCAhZGVmYXVsdDtcXG4kbmF2LXRhYnMtbGluay1hY3RpdmUtYmc6ICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcXG4kbmF2LXRhYnMtbGluay1hY3RpdmUtYm9yZGVyLWNvbG9yOiAkZ3JheS0zMDAgJGdyYXktMzAwICRuYXYtdGFicy1saW5rLWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4kbmF2LXBpbGxzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWJnOiAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4vLyBOYXZiYXJcXG5cXG4kbmF2YmFyLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAoJHNwYWNlciAvIDIpICFkZWZhdWx0O1xcbiRuYXZiYXItcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICRzcGFjZXIgIWRlZmF1bHQ7XFxuXFxuJG5hdmJhci1uYXYtbGluay1wYWRkaW5nLXg6ICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuXFxuJG5hdmJhci1icmFuZC1mb250LXNpemU6ICAgICAgICAgICAgJGZvbnQtc2l6ZS1sZyAhZGVmYXVsdDtcXG4vLyBDb21wdXRlIHRoZSBuYXZiYXItYnJhbmQgcGFkZGluZy15IHNvIHRoZSBuYXZiYXItYnJhbmQgd2lsbCBoYXZlIHRoZSBzYW1lIGhlaWdodCBhcyBuYXZiYXItdGV4dCBhbmQgbmF2LWxpbmtcXG4kbmF2LWxpbmstaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogJGxpbmUtaGVpZ2h0LWJhc2UgKyAkbmF2LWxpbmstcGFkZGluZy15ICogMikgIWRlZmF1bHQ7XFxuJG5hdmJhci1icmFuZC1oZWlnaHQ6ICAgICAgICAgICAgICAgJG5hdmJhci1icmFuZC1mb250LXNpemUgKiAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcXG4kbmF2YmFyLWJyYW5kLXBhZGRpbmcteTogICAgICAgICAgICAoJG5hdi1saW5rLWhlaWdodCAtICRuYXZiYXItYnJhbmQtaGVpZ2h0KSAvIDIgIWRlZmF1bHQ7XFxuXFxuJG5hdmJhci10b2dnbGVyLXBhZGRpbmcteTogICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xcbiRuYXZiYXItdG9nZ2xlci1wYWRkaW5nLXg6ICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4kbmF2YmFyLXRvZ2dsZXItZm9udC1zaXplOiAgICAgICAgICAkZm9udC1zaXplLWxnICFkZWZhdWx0O1xcbiRuYXZiYXItdG9nZ2xlci1ib3JkZXItcmFkaXVzOiAgICAgICRidG4tYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4kbmF2YmFyLWRhcmstY29sb3I6ICAgICAgICAgICAgICAgICByZ2JhKCR3aGl0ZSwgLjUpICFkZWZhdWx0O1xcbiRuYXZiYXItZGFyay1ob3Zlci1jb2xvcjogICAgICAgICAgIHJnYmEoJHdoaXRlLCAuNzUpICFkZWZhdWx0O1xcbiRuYXZiYXItZGFyay1hY3RpdmUtY29sb3I6ICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kbmF2YmFyLWRhcmstZGlzYWJsZWQtY29sb3I6ICAgICAgICByZ2JhKCR3aGl0ZSwgLjI1KSAhZGVmYXVsdDtcXG4kbmF2YmFyLWRhcmstdG9nZ2xlci1pY29uLWJnOiAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItZGFyay1jb2xvcn0nIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbiRuYXZiYXItZGFyay10b2dnbGVyLWJvcmRlci1jb2xvcjogIHJnYmEoJHdoaXRlLCAuMSkgIWRlZmF1bHQ7XFxuXFxuJG5hdmJhci1saWdodC1jb2xvcjogICAgICAgICAgICAgICAgcmdiYSgkYmxhY2ssIC41KSAhZGVmYXVsdDtcXG4kbmF2YmFyLWxpZ2h0LWhvdmVyLWNvbG9yOiAgICAgICAgICByZ2JhKCRibGFjaywgLjcpICFkZWZhdWx0O1xcbiRuYXZiYXItbGlnaHQtYWN0aXZlLWNvbG9yOiAgICAgICAgIHJnYmEoJGJsYWNrLCAuOSkgIWRlZmF1bHQ7XFxuJG5hdmJhci1saWdodC1kaXNhYmxlZC1jb2xvcjogICAgICAgcmdiYSgkYmxhY2ssIC4zKSAhZGVmYXVsdDtcXG4kbmF2YmFyLWxpZ2h0LXRvZ2dsZXItaWNvbi1iZzogICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItbGlnaHQtY29sb3J9JyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW1pdGVybGltaXQ9JzEwJyBkPSdNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4kbmF2YmFyLWxpZ2h0LXRvZ2dsZXItYm9yZGVyLWNvbG9yOiByZ2JhKCRibGFjaywgLjEpICFkZWZhdWx0O1xcblxcbi8vIFBhZ2luYXRpb25cXG5cXG4kcGFnaW5hdGlvbi1wYWRkaW5nLXk6ICAgICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1wYWRkaW5nLXg6ICAgICAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tcGFkZGluZy15LXNtOiAgICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xcbiRwYWdpbmF0aW9uLXBhZGRpbmcteC1zbTogICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcbiRwYWdpbmF0aW9uLXBhZGRpbmcteS1sZzogICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAxLjVyZW0gIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tbGluZS1oZWlnaHQ6ICAgICAgICAgICAgMS4yNSAhZGVmYXVsdDtcXG5cXG4kcGFnaW5hdGlvbi1jb2xvcjogICAgICAgICAgICAgICAgICAkbGluay1jb2xvciAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1iZzogICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1ib3JkZXItY29sb3I6ICAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuXFxuJHBhZ2luYXRpb24tZm9jdXMtYm94LXNoYWRvdzogICAgICAgJGlucHV0LWJ0bi1mb2N1cy1ib3gtc2hhZG93ICFkZWZhdWx0O1xcblxcbiRwYWdpbmF0aW9uLWhvdmVyLWNvbG9yOiAgICAgICAgICAgICRsaW5rLWhvdmVyLWNvbG9yICFkZWZhdWx0O1xcbiRwYWdpbmF0aW9uLWhvdmVyLWJnOiAgICAgICAgICAgICAgICRncmF5LTIwMCAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1ob3Zlci1ib3JkZXItY29sb3I6ICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuXFxuJHBhZ2luYXRpb24tYWN0aXZlLWNvbG9yOiAgICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tYWN0aXZlLWJnOiAgICAgICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tYWN0aXZlLWJvcmRlci1jb2xvcjogICAgJHBhZ2luYXRpb24tYWN0aXZlLWJnICFkZWZhdWx0O1xcblxcbiRwYWdpbmF0aW9uLWRpc2FibGVkLWNvbG9yOiAgICAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1iZzogICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tZGlzYWJsZWQtYm9yZGVyLWNvbG9yOiAgJGdyYXktMzAwICFkZWZhdWx0O1xcblxcblxcbi8vIEp1bWJvdHJvblxcblxcbiRqdW1ib3Ryb24tcGFkZGluZzogICAgICAgICAgICAgICAgIDJyZW0gIWRlZmF1bHQ7XFxuJGp1bWJvdHJvbi1iZzogICAgICAgICAgICAgICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcblxcblxcbi8vIENhcmRzXFxuXFxuJGNhcmQtc3BhY2VyLXk6ICAgICAgICAgICAgICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcbiRjYXJkLXNwYWNlci14OiAgICAgICAgICAgICAgICAgICAgIDEuMjVyZW0gIWRlZmF1bHQ7XFxuJGNhcmQtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItY29sb3I6ICAgICAgICAgICAgICAgICByZ2JhKCRibGFjaywgLjEyNSkgIWRlZmF1bHQ7XFxuJGNhcmQtaW5uZXItYm9yZGVyLXJhZGl1czogICAgICAgICAgY2FsYygjeyRjYXJkLWJvcmRlci1yYWRpdXN9IC0gI3skY2FyZC1ib3JkZXItd2lkdGh9KSAhZGVmYXVsdDtcXG4kY2FyZC1jYXAtYmc6ICAgICAgICAgICAgICAgICAgICAgICByZ2JhKCRibGFjaywgLjAzKSAhZGVmYXVsdDtcXG4kY2FyZC1iZzogICAgICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuXFxuJGNhcmQtaW1nLW92ZXJsYXktcGFkZGluZzogICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG5cXG4kY2FyZC1ncm91cC1tYXJnaW46ICAgICAgICAgICAgICAgICAoJGdyaWQtZ3V0dGVyLXdpZHRoIC8gMikgIWRlZmF1bHQ7XFxuJGNhcmQtZGVjay1tYXJnaW46ICAgICAgICAgICAgICAgICAgJGNhcmQtZ3JvdXAtbWFyZ2luICFkZWZhdWx0O1xcblxcbiRjYXJkLWNvbHVtbnMtY291bnQ6ICAgICAgICAgICAgICAgIDMgIWRlZmF1bHQ7XFxuJGNhcmQtY29sdW1ucy1nYXA6ICAgICAgICAgICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG4kY2FyZC1jb2x1bW5zLW1hcmdpbjogICAgICAgICAgICAgICAkY2FyZC1zcGFjZXIteSAhZGVmYXVsdDtcXG5cXG5cXG4vLyBUb29sdGlwc1xcblxcbiR0b29sdGlwLWZvbnQtc2l6ZTogICAgICAgICAgICRmb250LXNpemUtc20gIWRlZmF1bHQ7XFxuJHRvb2x0aXAtbWF4LXdpZHRoOiAgICAgICAgICAgMjAwcHggIWRlZmF1bHQ7XFxuJHRvb2x0aXAtY29sb3I6ICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiR0b29sdGlwLWJnOiAgICAgICAgICAgICAgICAgICRibGFjayAhZGVmYXVsdDtcXG4kdG9vbHRpcC1ib3JkZXItcmFkaXVzOiAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJHRvb2x0aXAtb3BhY2l0eTogICAgICAgICAgICAgLjkgIWRlZmF1bHQ7XFxuJHRvb2x0aXAtcGFkZGluZy15OiAgICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xcbiR0b29sdGlwLXBhZGRpbmcteDogICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcbiR0b29sdGlwLW1hcmdpbjogICAgICAgICAgICAgIDAgIWRlZmF1bHQ7XFxuXFxuJHRvb2x0aXAtYXJyb3ctd2lkdGg6ICAgICAgICAgLjhyZW0gIWRlZmF1bHQ7XFxuJHRvb2x0aXAtYXJyb3ctaGVpZ2h0OiAgICAgICAgLjRyZW0gIWRlZmF1bHQ7XFxuJHRvb2x0aXAtYXJyb3ctY29sb3I6ICAgICAgICAgJHRvb2x0aXAtYmcgIWRlZmF1bHQ7XFxuXFxuXFxuLy8gUG9wb3ZlcnNcXG5cXG4kcG9wb3Zlci1mb250LXNpemU6ICAgICAgICAgICAgICAgICAkZm9udC1zaXplLXNtICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kcG9wb3Zlci1tYXgtd2lkdGg6ICAgICAgICAgICAgICAgICAyNzZweCAhZGVmYXVsdDtcXG4kcG9wb3Zlci1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJvcmRlci1jb2xvcjogICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMikgIWRlZmF1bHQ7XFxuJHBvcG92ZXItYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMtbGcgIWRlZmF1bHQ7XFxuJHBvcG92ZXItYm94LXNoYWRvdzogICAgICAgICAgICAgICAgMCAuMjVyZW0gLjVyZW0gcmdiYSgkYmxhY2ssIC4yKSAhZGVmYXVsdDtcXG5cXG4kcG9wb3Zlci1oZWFkZXItYmc6ICAgICAgICAgICAgICAgICBkYXJrZW4oJHBvcG92ZXItYmcsIDMlKSAhZGVmYXVsdDtcXG4kcG9wb3Zlci1oZWFkZXItY29sb3I6ICAgICAgICAgICAgICAkaGVhZGluZ3MtY29sb3IgIWRlZmF1bHQ7XFxuJHBvcG92ZXItaGVhZGVyLXBhZGRpbmcteTogICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuJHBvcG92ZXItaGVhZGVyLXBhZGRpbmcteDogICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcblxcbiRwb3BvdmVyLWJvZHktY29sb3I6ICAgICAgICAgICAgICAgICRib2R5LWNvbG9yICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJvZHktcGFkZGluZy15OiAgICAgICAgICAgICRwb3BvdmVyLWhlYWRlci1wYWRkaW5nLXkgIWRlZmF1bHQ7XFxuJHBvcG92ZXItYm9keS1wYWRkaW5nLXg6ICAgICAgICAgICAgJHBvcG92ZXItaGVhZGVyLXBhZGRpbmcteCAhZGVmYXVsdDtcXG5cXG4kcG9wb3Zlci1hcnJvdy13aWR0aDogICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcbiRwb3BvdmVyLWFycm93LWhlaWdodDogICAgICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcbiRwb3BvdmVyLWFycm93LWNvbG9yOiAgICAgICAgICAgICAgICRwb3BvdmVyLWJnICFkZWZhdWx0O1xcblxcbiRwb3BvdmVyLWFycm93LW91dGVyLWNvbG9yOiAgICAgICAgIGZhZGUtaW4oJHBvcG92ZXItYm9yZGVyLWNvbG9yLCAuMDUpICFkZWZhdWx0O1xcblxcblxcbi8vIEJhZGdlc1xcblxcbiRiYWRnZS1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgIDc1JSAhZGVmYXVsdDtcXG4kYmFkZ2UtZm9udC13ZWlnaHQ6ICAgICAgICAgICAgICAgICAkZm9udC13ZWlnaHQtYm9sZCAhZGVmYXVsdDtcXG4kYmFkZ2UtcGFkZGluZy15OiAgICAgICAgICAgICAgICAgICAuMjVlbSAhZGVmYXVsdDtcXG4kYmFkZ2UtcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICAuNGVtICFkZWZhdWx0O1xcbiRiYWRnZS1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcblxcbiRiYWRnZS1waWxsLXBhZGRpbmcteDogICAgICAgICAgICAgIC42ZW0gIWRlZmF1bHQ7XFxuLy8gVXNlIGEgaGlnaGVyIHRoYW4gbm9ybWFsIHZhbHVlIHRvIGVuc3VyZSBjb21wbGV0ZWx5IHJvdW5kZWQgZWRnZXMgd2hlblxcbi8vIGN1c3RvbWl6aW5nIHBhZGRpbmcgb3IgZm9udC1zaXplIG9uIGxhYmVscy5cXG4kYmFkZ2UtcGlsbC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcXG5cXG5cXG4vLyBNb2RhbHNcXG5cXG4vLyBQYWRkaW5nIGFwcGxpZWQgdG8gdGhlIG1vZGFsIGJvZHlcXG4kbW9kYWwtaW5uZXItcGFkZGluZzogICAgICAgICAxcmVtICFkZWZhdWx0O1xcblxcbiRtb2RhbC1kaWFsb2ctbWFyZ2luOiAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcbiRtb2RhbC1kaWFsb2ctbWFyZ2luLXktc20tdXA6IDEuNzVyZW0gIWRlZmF1bHQ7XFxuXFxuJG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XFxuXFxuJG1vZGFsLWNvbnRlbnQtYmc6ICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRtb2RhbC1jb250ZW50LWJvcmRlci1jb2xvcjogICAgIHJnYmEoJGJsYWNrLCAuMikgIWRlZmF1bHQ7XFxuJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoOiAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXhzOiAgICAwIC4yNXJlbSAuNXJlbSByZ2JhKCRibGFjaywgLjUpICFkZWZhdWx0O1xcbiRtb2RhbC1jb250ZW50LWJveC1zaGFkb3ctc20tdXA6IDAgLjVyZW0gMXJlbSByZ2JhKCRibGFjaywgLjUpICFkZWZhdWx0O1xcblxcbiRtb2RhbC1iYWNrZHJvcC1iZzogICAgICAgICAgICRibGFjayAhZGVmYXVsdDtcXG4kbW9kYWwtYmFja2Ryb3Atb3BhY2l0eTogICAgICAuNSAhZGVmYXVsdDtcXG4kbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcjogICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuJG1vZGFsLWZvb3Rlci1ib3JkZXItY29sb3I6ICAgJG1vZGFsLWhlYWRlci1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGg6ICAgJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRtb2RhbC1mb290ZXItYm9yZGVyLXdpZHRoOiAgICRtb2RhbC1oZWFkZXItYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRtb2RhbC1oZWFkZXItcGFkZGluZzogICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuXFxuJG1vZGFsLWxnOiAgICAgICAgICAgICAgICAgICAgICAgICAgODAwcHggIWRlZmF1bHQ7XFxuJG1vZGFsLW1kOiAgICAgICAgICAgICAgICAgICAgICAgICAgNTAwcHggIWRlZmF1bHQ7XFxuJG1vZGFsLXNtOiAgICAgICAgICAgICAgICAgICAgICAgICAgMzAwcHggIWRlZmF1bHQ7XFxuXFxuJG1vZGFsLXRyYW5zaXRpb246ICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtIC4zcyBlYXNlLW91dCAhZGVmYXVsdDtcXG5cXG5cXG4vLyBBbGVydHNcXG4vL1xcbi8vIERlZmluZSBhbGVydCBjb2xvcnMsIGJvcmRlciByYWRpdXMsIGFuZCBwYWRkaW5nLlxcblxcbiRhbGVydC1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4kYWxlcnQtcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcbiRhbGVydC1tYXJnaW4tYm90dG9tOiAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuJGFsZXJ0LWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJGFsZXJ0LWxpbmstZm9udC13ZWlnaHQ6ICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuJGFsZXJ0LWJvcmRlci13aWR0aDogICAgICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG5cXG4kYWxlcnQtYmctbGV2ZWw6ICAgICAgICAgICAgICAgICAgICAtMTAgIWRlZmF1bHQ7XFxuJGFsZXJ0LWJvcmRlci1sZXZlbDogICAgICAgICAgICAgICAgLTkgIWRlZmF1bHQ7XFxuJGFsZXJ0LWNvbG9yLWxldmVsOiAgICAgICAgICAgICAgICAgNiAhZGVmYXVsdDtcXG5cXG5cXG4vLyBQcm9ncmVzcyBiYXJzXFxuXFxuJHByb2dyZXNzLWhlaWdodDogICAgICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG4kcHJvZ3Jlc3MtZm9udC1zaXplOiAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogLjc1KSAhZGVmYXVsdDtcXG4kcHJvZ3Jlc3MtYmc6ICAgICAgICAgICAgICAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuJHByb2dyZXNzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJHByb2dyZXNzLWJveC1zaGFkb3c6ICAgICAgICAgICAgICAgaW5zZXQgMCAuMXJlbSAuMXJlbSByZ2JhKCRibGFjaywgLjEpICFkZWZhdWx0O1xcbiRwcm9ncmVzcy1iYXItY29sb3I6ICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kcHJvZ3Jlc3MtYmFyLWJnOiAgICAgICAgICAgICAgICAgICB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpICFkZWZhdWx0O1xcbiRwcm9ncmVzcy1iYXItYW5pbWF0aW9uLXRpbWluZzogICAgIDFzIGxpbmVhciBpbmZpbml0ZSAhZGVmYXVsdDtcXG4kcHJvZ3Jlc3MtYmFyLXRyYW5zaXRpb246ICAgICAgICAgICB3aWR0aCAuNnMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBMaXN0IGdyb3VwXFxuXFxuJGxpc3QtZ3JvdXAtYmc6ICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWJvcmRlci1jb2xvcjogICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMTI1KSAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcblxcbiRsaXN0LWdyb3VwLWl0ZW0tcGFkZGluZy15OiAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteDogICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcblxcbiRsaXN0LWdyb3VwLWhvdmVyLWJnOiAgICAgICAgICAgICAgICRncmF5LTEwMCAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3RpdmUtY29sb3I6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3RpdmUtYmc6ICAgICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3RpdmUtYm9yZGVyLWNvbG9yOiAgICAkbGlzdC1ncm91cC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuXFxuJGxpc3QtZ3JvdXAtZGlzYWJsZWQtY29sb3I6ICAgICAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWRpc2FibGVkLWJnOiAgICAgICAgICAgICRsaXN0LWdyb3VwLWJnICFkZWZhdWx0O1xcblxcbiRsaXN0LWdyb3VwLWFjdGlvbi1jb2xvcjogICAgICAgICAgICRncmF5LTcwMCAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3Rpb24taG92ZXItY29sb3I6ICAgICAkbGlzdC1ncm91cC1hY3Rpb24tY29sb3IgIWRlZmF1bHQ7XFxuXFxuJGxpc3QtZ3JvdXAtYWN0aW9uLWFjdGl2ZS1jb2xvcjogICAgJGJvZHktY29sb3IgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYWN0aW9uLWFjdGl2ZS1iZzogICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcblxcblxcbi8vIEltYWdlIHRodW1ibmFpbHNcXG5cXG4kdGh1bWJuYWlsLXBhZGRpbmc6ICAgICAgICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuJHRodW1ibmFpbC1iZzogICAgICAgICAgICAgICAgICAgICAgJGJvZHktYmcgIWRlZmF1bHQ7XFxuJHRodW1ibmFpbC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kdGh1bWJuYWlsLWJvcmRlci1jb2xvcjogICAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuJHRodW1ibmFpbC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJHRodW1ibmFpbC1ib3gtc2hhZG93OiAgICAgICAgICAgICAgMCAxcHggMnB4IHJnYmEoJGJsYWNrLCAuMDc1KSAhZGVmYXVsdDtcXG5cXG5cXG4vLyBGaWd1cmVzXFxuXFxuJGZpZ3VyZS1jYXB0aW9uLWZvbnQtc2l6ZTogICAgICAgICAgOTAlICFkZWZhdWx0O1xcbiRmaWd1cmUtY2FwdGlvbi1jb2xvcjogICAgICAgICAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG5cXG4vLyBCcmVhZGNydW1ic1xcblxcbiRicmVhZGNydW1iLXBhZGRpbmcteTogICAgICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4kYnJlYWRjcnVtYi1wYWRkaW5nLXg6ICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcbiRicmVhZGNydW1iLWl0ZW0tcGFkZGluZzogICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcblxcbiRicmVhZGNydW1iLW1hcmdpbi1ib3R0b206ICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuXFxuJGJyZWFkY3J1bWItYmc6ICAgICAgICAgICAgICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcbiRicmVhZGNydW1iLWRpdmlkZXItY29sb3I6ICAgICAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG4kYnJlYWRjcnVtYi1hY3RpdmUtY29sb3I6ICAgICAgICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuJGJyZWFkY3J1bWItZGl2aWRlcjogICAgICAgICAgICAgICAgXFxcIi9cXFwiICFkZWZhdWx0O1xcblxcblxcbi8vIENhcm91c2VsXFxuXFxuJGNhcm91c2VsLWNvbnRyb2wtY29sb3I6ICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRjYXJvdXNlbC1jb250cm9sLXdpZHRoOiAgICAgICAgICAgIDE1JSAhZGVmYXVsdDtcXG4kY2Fyb3VzZWwtY29udHJvbC1vcGFjaXR5OiAgICAgICAgICAuNSAhZGVmYXVsdDtcXG5cXG4kY2Fyb3VzZWwtaW5kaWNhdG9yLXdpZHRoOiAgICAgICAgICAzMHB4ICFkZWZhdWx0O1xcbiRjYXJvdXNlbC1pbmRpY2F0b3ItaGVpZ2h0OiAgICAgICAgIDNweCAhZGVmYXVsdDtcXG4kY2Fyb3VzZWwtaW5kaWNhdG9yLXNwYWNlcjogICAgICAgICAzcHggIWRlZmF1bHQ7XFxuJGNhcm91c2VsLWluZGljYXRvci1hY3RpdmUtYmc6ICAgICAgJHdoaXRlICFkZWZhdWx0O1xcblxcbiRjYXJvdXNlbC1jYXB0aW9uLXdpZHRoOiAgICAgICAgICAgIDcwJSAhZGVmYXVsdDtcXG4kY2Fyb3VzZWwtY2FwdGlvbi1jb2xvcjogICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuXFxuJGNhcm91c2VsLWNvbnRyb2wtaWNvbi13aWR0aDogICAgICAgMjBweCAhZGVmYXVsdDtcXG5cXG4kY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb24tYmc6ICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nI3skY2Fyb3VzZWwtY29udHJvbC1jb2xvcn0nIHZpZXdCb3g9JzAgMCA4IDgnJTNFJTNDcGF0aCBkPSdNNS4yNSAwbC00IDQgNCA0IDEuNS0xLjUtMi41LTIuNSAyLjUtMi41LTEuNS0xLjV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbiRjYXJvdXNlbC1jb250cm9sLW5leHQtaWNvbi1iZzogICAgIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBmaWxsPScjeyRjYXJvdXNlbC1jb250cm9sLWNvbG9yfScgdmlld0JveD0nMCAwIDggOCclM0UlM0NwYXRoIGQ9J00yLjc1IDBsLTEuNSAxLjUgMi41IDIuNS0yLjUgMi41IDEuNSAxLjUgNC00LTQtNHonLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuJGNhcm91c2VsLXRyYW5zaXRpb246ICAgICAgICAgICAgICAgdHJhbnNmb3JtIC42cyBlYXNlICFkZWZhdWx0O1xcblxcblxcbi8vIENsb3NlXFxuXFxuJGNsb3NlLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMS41ICFkZWZhdWx0O1xcbiRjbG9zZS1mb250LXdlaWdodDogICAgICAgICAgICAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xcbiRjbG9zZS1jb2xvcjogICAgICAgICAgICAgICAgICAgICAgICRibGFjayAhZGVmYXVsdDtcXG4kY2xvc2UtdGV4dC1zaGFkb3c6ICAgICAgICAgICAgICAgICAwIDFweCAwICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyBDb2RlXFxuXFxuJGNvZGUtZm9udC1zaXplOiAgICAgICAgICAgICAgICAgICAgODcuNSUgIWRlZmF1bHQ7XFxuJGNvZGUtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgICAgJHBpbmsgIWRlZmF1bHQ7XFxuXFxuJGtiZC1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgICAgICAgLjJyZW0gIWRlZmF1bHQ7XFxuJGtiZC1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgICAgICAgLjRyZW0gIWRlZmF1bHQ7XFxuJGtiZC1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICAgJGNvZGUtZm9udC1zaXplICFkZWZhdWx0O1xcbiRrYmQtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4ka2JkLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZ3JheS05MDAgIWRlZmF1bHQ7XFxuXFxuJHByZS1jb2xvcjogICAgICAgICAgICAgICAgICAgICAgICAgJGdyYXktOTAwICFkZWZhdWx0O1xcbiRwcmUtc2Nyb2xsYWJsZS1tYXgtaGVpZ2h0OiAgICAgICAgIDM0MHB4ICFkZWZhdWx0O1xcblxcblxcbi8vIFByaW50aW5nXFxuJHByaW50LXBhZ2Utc2l6ZTogICAgICAgICAgICAgICAgICAgYTMgIWRlZmF1bHQ7XFxuJHByaW50LWJvZHktbWluLXdpZHRoOiAgICAgICAgICAgICAgbWFwLWdldCgkZ3JpZC1icmVha3BvaW50cywgXFxcImxnXFxcIikgIWRlZmF1bHQ7XFxuXCIsXCIvL1xcbi8vIFNjcmVlbnJlYWRlcnNcXG4vL1xcblxcbi5zci1vbmx5IHtcXG4gIEBpbmNsdWRlIHNyLW9ubHkoKTtcXG59XFxuXFxuLnNyLW9ubHktZm9jdXNhYmxlIHtcXG4gIEBpbmNsdWRlIHNyLW9ubHktZm9jdXNhYmxlKCk7XFxufVxcblwiLFwiLy8gT25seSBkaXNwbGF5IGNvbnRlbnQgdG8gc2NyZWVuIHJlYWRlcnNcXG4vL1xcbi8vIFNlZTogaHR0cDovL2ExMXlwcm9qZWN0LmNvbS9wb3N0cy9ob3ctdG8taGlkZS1jb250ZW50L1xcbi8vIFNlZTogaHR0cHM6Ly9odWdvZ2lyYXVkZWwuY29tLzIwMTYvMTAvMTMvY3NzLWhpZGUtYW5kLXNlZWsvXFxuXFxuQG1peGluIHNyLW9ubHkge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgcGFkZGluZzogMDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIGNsaXAtcGF0aDogaW5zZXQoNTAlKTtcXG4gIGJvcmRlcjogMDtcXG59XFxuXFxuLy8gVXNlIGluIGNvbmp1bmN0aW9uIHdpdGggLnNyLW9ubHkgdG8gb25seSBkaXNwbGF5IGNvbnRlbnQgd2hlbiBpdCdzIGZvY3VzZWQuXFxuLy9cXG4vLyBVc2VmdWwgZm9yIFxcXCJTa2lwIHRvIG1haW4gY29udGVudFxcXCIgbGlua3M7IHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvMjAxMy9OT1RFLVdDQUcyMC1URUNIUy0yMDEzMDkwNS9HMVxcbi8vXFxuLy8gQ3JlZGl0OiBIVE1MNSBCb2lsZXJwbGF0ZVxcblxcbkBtaXhpbiBzci1vbmx5LWZvY3VzYWJsZSB7XFxuICAmOmFjdGl2ZSxcXG4gICY6Zm9jdXMge1xcbiAgICBwb3NpdGlvbjogc3RhdGljO1xcbiAgICB3aWR0aDogYXV0bztcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcXG4gICAgY2xpcDogYXV0bztcXG4gICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcXG4gICAgY2xpcC1wYXRoOiBub25lO1xcbiAgfVxcbn1cXG5cIixcIi8vIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxcblxcbi8vIFdpZHRoIGFuZCBoZWlnaHRcXG5cXG5AZWFjaCAkcHJvcCwgJGFiYnJldiBpbiAod2lkdGg6IHcsIGhlaWdodDogaCkge1xcbiAgQGVhY2ggJHNpemUsICRsZW5ndGggaW4gJHNpemVzIHtcXG4gICAgLiN7JGFiYnJldn0tI3skc2l6ZX0geyAjeyRwcm9wfTogJGxlbmd0aCAhaW1wb3J0YW50OyB9XFxuICB9XFxufVxcblxcbi5tdy0xMDAgeyBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgfVxcbi5taC0xMDAgeyBtYXgtaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7IH1cXG5cIixcIi8vIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxcblxcbi8vIE1hcmdpbiBhbmQgUGFkZGluZ1xcblxcbkBlYWNoICRicmVha3BvaW50IGluIG1hcC1rZXlzKCRncmlkLWJyZWFrcG9pbnRzKSB7XFxuICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCRicmVha3BvaW50KSB7XFxuICAgICRpbmZpeDogYnJlYWtwb2ludC1pbmZpeCgkYnJlYWtwb2ludCwgJGdyaWQtYnJlYWtwb2ludHMpO1xcblxcbiAgICBAZWFjaCAkcHJvcCwgJGFiYnJldiBpbiAobWFyZ2luOiBtLCBwYWRkaW5nOiBwKSB7XFxuICAgICAgQGVhY2ggJHNpemUsICRsZW5ndGggaW4gJHNwYWNlcnMge1xcblxcbiAgICAgICAgLiN7JGFiYnJldn0jeyRpbmZpeH0tI3skc2l6ZX0geyAjeyRwcm9wfTogJGxlbmd0aCAhaW1wb3J0YW50OyB9XFxuICAgICAgICAuI3skYWJicmV2fXQjeyRpbmZpeH0tI3skc2l6ZX0sXFxuICAgICAgICAuI3skYWJicmV2fXkjeyRpbmZpeH0tI3skc2l6ZX0ge1xcbiAgICAgICAgICAjeyRwcm9wfS10b3A6ICRsZW5ndGggIWltcG9ydGFudDtcXG4gICAgICAgIH1cXG4gICAgICAgIC4jeyRhYmJyZXZ9ciN7JGluZml4fS0jeyRzaXplfSxcXG4gICAgICAgIC4jeyRhYmJyZXZ9eCN7JGluZml4fS0jeyRzaXplfSB7XFxuICAgICAgICAgICN7JHByb3B9LXJpZ2h0OiAkbGVuZ3RoICFpbXBvcnRhbnQ7XFxuICAgICAgICB9XFxuICAgICAgICAuI3skYWJicmV2fWIjeyRpbmZpeH0tI3skc2l6ZX0sXFxuICAgICAgICAuI3skYWJicmV2fXkjeyRpbmZpeH0tI3skc2l6ZX0ge1xcbiAgICAgICAgICAjeyRwcm9wfS1ib3R0b206ICRsZW5ndGggIWltcG9ydGFudDtcXG4gICAgICAgIH1cXG4gICAgICAgIC4jeyRhYmJyZXZ9bCN7JGluZml4fS0jeyRzaXplfSxcXG4gICAgICAgIC4jeyRhYmJyZXZ9eCN7JGluZml4fS0jeyRzaXplfSB7XFxuICAgICAgICAgICN7JHByb3B9LWxlZnQ6ICRsZW5ndGggIWltcG9ydGFudDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgLy8gU29tZSBzcGVjaWFsIG1hcmdpbiB1dGlsc1xcbiAgICAubSN7JGluZml4fS1hdXRvIHsgbWFyZ2luOiBhdXRvICFpbXBvcnRhbnQ7IH1cXG4gICAgLm10I3skaW5maXh9LWF1dG8sXFxuICAgIC5teSN7JGluZml4fS1hdXRvIHtcXG4gICAgICBtYXJnaW4tdG9wOiBhdXRvICFpbXBvcnRhbnQ7XFxuICAgIH1cXG4gICAgLm1yI3skaW5maXh9LWF1dG8sXFxuICAgIC5teCN7JGluZml4fS1hdXRvIHtcXG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDtcXG4gICAgfVxcbiAgICAubWIjeyRpbmZpeH0tYXV0byxcXG4gICAgLm15I3skaW5maXh9LWF1dG8ge1xcbiAgICAgIG1hcmdpbi1ib3R0b206IGF1dG8gIWltcG9ydGFudDtcXG4gICAgfVxcbiAgICAubWwjeyRpbmZpeH0tYXV0byxcXG4gICAgLm14I3skaW5maXh9LWF1dG8ge1xcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvICFpbXBvcnRhbnQ7XFxuICAgIH1cXG4gIH1cXG59XFxuXCIsXCIvLyBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnRcXG5cXG4vL1xcbi8vIFRleHRcXG4vL1xcblxcbi8vIEFsaWdubWVudFxcblxcbi50ZXh0LWp1c3RpZnkgIHsgdGV4dC1hbGlnbjoganVzdGlmeSAhaW1wb3J0YW50OyB9XFxuLnRleHQtbm93cmFwICAgeyB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7IH1cXG4udGV4dC10cnVuY2F0ZSB7IEBpbmNsdWRlIHRleHQtdHJ1bmNhdGU7IH1cXG5cXG4vLyBSZXNwb25zaXZlIGFsaWdubWVudFxcblxcbkBlYWNoICRicmVha3BvaW50IGluIG1hcC1rZXlzKCRncmlkLWJyZWFrcG9pbnRzKSB7XFxuICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCRicmVha3BvaW50KSB7XFxuICAgICRpbmZpeDogYnJlYWtwb2ludC1pbmZpeCgkYnJlYWtwb2ludCwgJGdyaWQtYnJlYWtwb2ludHMpO1xcblxcbiAgICAudGV4dCN7JGluZml4fS1sZWZ0ICAgeyB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7IH1cXG4gICAgLnRleHQjeyRpbmZpeH0tcmlnaHQgIHsgdGV4dC1hbGlnbjogcmlnaHQgIWltcG9ydGFudDsgfVxcbiAgICAudGV4dCN7JGluZml4fS1jZW50ZXIgeyB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsgfVxcbiAgfVxcbn1cXG5cXG4vLyBUcmFuc2Zvcm1hdGlvblxcblxcbi50ZXh0LWxvd2VyY2FzZSAgeyB0ZXh0LXRyYW5zZm9ybTogbG93ZXJjYXNlICFpbXBvcnRhbnQ7IH1cXG4udGV4dC11cHBlcmNhc2UgIHsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSAhaW1wb3J0YW50OyB9XFxuLnRleHQtY2FwaXRhbGl6ZSB7IHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplICFpbXBvcnRhbnQ7IH1cXG5cXG4vLyBXZWlnaHQgYW5kIGl0YWxpY3NcXG5cXG4uZm9udC13ZWlnaHQtbGlnaHQgIHsgZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1saWdodCAhaW1wb3J0YW50OyB9XFxuLmZvbnQtd2VpZ2h0LW5vcm1hbCB7IGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQtbm9ybWFsICFpbXBvcnRhbnQ7IH1cXG4uZm9udC13ZWlnaHQtYm9sZCAgIHsgZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1ib2xkICFpbXBvcnRhbnQ7IH1cXG4uZm9udC1pdGFsaWMgICAgICAgIHsgZm9udC1zdHlsZTogaXRhbGljICFpbXBvcnRhbnQ7IH1cXG5cXG4vLyBDb250ZXh0dWFsIGNvbG9yc1xcblxcbi50ZXh0LXdoaXRlIHsgY29sb3I6ICNmZmYgIWltcG9ydGFudDsgfVxcblxcbkBlYWNoICRjb2xvciwgJHZhbHVlIGluICR0aGVtZS1jb2xvcnMge1xcbiAgQGluY2x1ZGUgdGV4dC1lbXBoYXNpcy12YXJpYW50KFxcXCIudGV4dC0jeyRjb2xvcn1cXFwiLCAkdmFsdWUpO1xcbn1cXG5cXG4udGV4dC1tdXRlZCB7IGNvbG9yOiAkdGV4dC1tdXRlZCAhaW1wb3J0YW50OyB9XFxuXFxuLy8gTWlzY1xcblxcbi50ZXh0LWhpZGUge1xcbiAgQGluY2x1ZGUgdGV4dC1oaWRlKCk7XFxufVxcblwiLFwiLy8gVGV4dCB0cnVuY2F0ZVxcbi8vIFJlcXVpcmVzIGlubGluZS1ibG9jayBvciBibG9jayBmb3IgcHJvcGVyIHN0eWxpbmdcXG5cXG5AbWl4aW4gdGV4dC10cnVuY2F0ZSgpIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxufVxcblwiLFwiLy8gc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XFxuXFxuLy8gVHlwb2dyYXBoeVxcblxcbkBtaXhpbiB0ZXh0LWVtcGhhc2lzLXZhcmlhbnQoJHBhcmVudCwgJGNvbG9yKSB7XFxuICAjeyRwYXJlbnR9IHtcXG4gICAgY29sb3I6ICRjb2xvciAhaW1wb3J0YW50O1xcbiAgfVxcbiAgYSN7JHBhcmVudH0ge1xcbiAgICBAaW5jbHVkZSBob3Zlci1mb2N1cyB7XFxuICAgICAgY29sb3I6IGRhcmtlbigkY29sb3IsIDEwJSkgIWltcG9ydGFudDtcXG4gICAgfVxcbiAgfVxcbn1cXG5cIixcIi8vIENTUyBpbWFnZSByZXBsYWNlbWVudFxcbkBtaXhpbiB0ZXh0LWhpZGUoKSB7XFxuICAvLyBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZm9udC1mYW1pbHktbm8tbWlzc2luZy1nZW5lcmljLWZhbWlseS1rZXl3b3JkXFxuICBmb250OiAwLzAgYTtcXG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIHRleHQtc2hhZG93OiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IDA7XFxufVxcblwiLFwiLy8gc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XFxuXFxuLy8gVmlzaWJpbGl0eVxcblxcbkBtaXhpbiBpbnZpc2libGUoJHZpc2liaWxpdHkpIHtcXG4gIHZpc2liaWxpdHk6ICR2aXNpYmlsaXR5ICFpbXBvcnRhbnQ7XFxufVxcblwiLFwiLy9cXG4vLyBWaXNpYmlsaXR5IHV0aWxpdGllc1xcbi8vXFxuXFxuLnZpc2libGUge1xcbiAgQGluY2x1ZGUgaW52aXNpYmxlKHZpc2libGUpO1xcbn1cXG5cXG4uaW52aXNpYmxlIHtcXG4gIEBpbmNsdWRlIGludmlzaWJsZShoaWRkZW4pO1xcbn1cXG5cIixcIlxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcbkBpbXBvcnQgJ35Ac2Nzcy9jb25maWcvX3NldHRpbmdzLnNjc3MnO1xcbkBpbXBvcnQgJ35Ac2Nzcy9jb25maWcvX2Jvb3RzdHJhcC5zY3NzJztcXG5cXG4ucHJvZHVjdC1wYWdlIHtcXG4gIC5kcm9wem9uZS13aW5kb3cge1xcbiAgICB3aWR0aDogNDUlO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oI2ZmZmZmZiwgMiUpO1xcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xcbiAgICBwYWRkaW5nOiAxcmVtO1xcbiAgICBtaW4td2lkdGg6IDIwcmVtO1xcblxcbiAgICAmLWZpbGVtYW5hZ2VyIHtcXG4gICAgICBkaXNwbGF5OiBub25lO1xcbiAgICB9XFxuXFxuICAgICYtbGFiZWwge1xcbiAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgICAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xcblxcbiAgICAgIGxhYmVsIHtcXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICAgICAgfVxcblxcbiAgICAgIC5kcm9wZG93biB7XFxuICAgICAgICA+IGJ1dHRvbiB7XFxuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDAuMjVyZW07XFxuICAgICAgICB9XFxuXFxuICAgICAgICAmLWl0ZW0ge1xcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHRleHRhcmVhIHtcXG4gICAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbiAgICB9XFxuXFxuICAgICYtYnV0dG9uIHtcXG4gICAgICAmLWNvbnRhaW5lciB7XFxuICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgJi1jaGVja2JveCB7XFxuICAgICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG5cXG4gICAgICBsYWJlbCB7XFxuICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAmLXNlbGVjdCxcXG4gICAgJi11bnNlbGVjdCB7XFxuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gICAgICBmb250LXNpemU6IDAuOTI1cmVtO1xcbiAgICAgIGNvbG9yOiAkcHJpbWFyeTtcXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgbWFyZ2luLXRvcDogMC41cmVtO1xcbiAgICB9XFxuXFxuICAgICYtbnVtYmVyIHtcXG4gICAgICBmb250LXNpemU6IDFyZW07XFxuXFxuICAgICAgc3BhbiB7XFxuICAgICAgICBjb2xvcjogJHByaW1hcnk7XFxuICAgICAgICBmb250LXdlaWdodDogNjAwO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAmLWhlYWRlciB7XFxuICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgICBwYWRkaW5nOiAwIDFyZW07XFxuXFxuICAgICAgcCB7XFxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgICAgIH1cXG5cXG4gICAgICAubWF0ZXJpYWwtaWNvbnMge1xcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgICAgY29sb3I6ICRncmF5LTUwMDtcXG4gICAgICAgIHRyYW5zaXRpb246IDAuMjVzIGVhc2Utb3V0O1xcbiAgICAgICAgZm9udC1zaXplOiAxLjVyZW07XFxuICAgICAgICBtYXJnaW46IDAgMC4yNXJlbTtcXG5cXG4gICAgICAgICY6bGFzdC1jaGlsZCB7XFxuICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgICY6Zmlyc3QtY2hpbGQge1xcbiAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgICY6aG92ZXIge1xcbiAgICAgICAgICBjb2xvcjogcHJpbWFyeTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC1kb3duKHhzKSB7XFxuICAgICAgd2lkdGg6IDEwMCU7XFxuICAgICAgbWluLXdpZHRoOiAxMDAlO1xcbiAgICB9XFxuICB9XFxufVxcblwiLFwiLyogc3R5bGVsaW50LWRpc2FibGUgKi9cXG5cXG4vLyBDb2xvciBzeXN0ZW1cXG4kd2hpdGU6ICNmZmY7XFxuJGdyYXktZGlzYWJsZWQ6ICNlYWViZWM7XFxuJGdyYXktMTAwOiAjZmFmYmZjO1xcbiRncmF5LTIwMDogI2ZhZmJmYztcXG4kZ3JheS0yNTA6ICNmYWZiZmM7XFxuJGdyYXktMzAwOiAjYmJjZGQyO1xcbiRncmF5LTQwMDogI2JiY2RkMjtcXG4kZ3JheS00NTA6ICNiM2M3Y2Q7XFxuJGdyYXktNTAwOiAjNmM4NjhlO1xcbiRncmF5LTU1MDogIzcwODA5MDtcXG4kZ3JheS02MDA6ICM2Yzg2OGU7XFxuJGdyYXktNzAwOiAjMzYzYTQxO1xcbiRncmF5LTc1MDogIzM2M2E0MTtcXG4kZ3JheS04MDA6ICMzNjNhNDE7XFxuJGdyYXktOTAwOiAjMjgyYjMwO1xcbiRibGFjazogIzAwMDtcXG5cXG4vLyBQUyBWYXJzXFxuJGV4dHJhLWxpZ2h0LWdyYXk6ICRncmF5LTEwMDtcXG4kbGlnaHQtZ3JheTogJGdyYXktMzAwO1xcbiRtZWRpdW0tZ3JheTogJGdyYXktNTAwO1xcbiRkYXJrLWdyYXk6ICRncmF5LTcwMDtcXG4kZXh0cmEtZGFyay1ncmF5OiAkZ3JheS05MDA7XFxuJGdyYXktbGlnaHQ6ICRsaWdodC1ncmF5O1xcbiRncmF5LW1lZGl1bTogJG1lZGl1bS1ncmF5O1xcbiRncmF5LWRhcms6ICRkYXJrLWdyYXk7XFxuJGdyYXktc29mdDogJGdyYXktMjAwO1xcbiRiYWNrZ3JvdW5kLWNvbG9yOiAjZWZmMWYyO1xcbiRwcmltYXJ5LWxpZ2h0ZW46ICNmNGZjZmQ7XFxuJGxvY2FsLWZvbnQ6IGZhbHNlICFkZWZhdWx0O1xcblxcbiRibHVlOiAjMjViOWQ3O1xcbiRpbmRpZ286ICM2NjEwZjIgIWRlZmF1bHQ7XFxuJHB1cnBsZTogIzZmNDJjMSAhZGVmYXVsdDtcXG4kcGluazogI2U4M2U4YyAhZGVmYXVsdDtcXG4kcmVkOiAjZjU0YzNlO1xcbiRvcmFuZ2U6ICNmZDdlMTQgIWRlZmF1bHQ7XFxuJHllbGxvdzogI2ZhYjAwMDtcXG4kZ3JlZW46ICM3MGI1ODA7XFxuJG9yYW5nZTogI2ZkN2UxNCAhZGVmYXVsdDtcXG4kdGVhbDogIzIwYzk5NyAhZGVmYXVsdDtcXG4kY3lhbjogJGJsdWU7XFxuJGxpZ2h0LWJsdWU6ICNmNGZjZmQ7XFxuXFxuLy8gbWFpbiBidXR0b24gYmFja2dyb3VuZCBjb2xvcnNcXG4kcHJpbWFyeS1ob3ZlcjogIzdjZDVlNztcXG4kcHJpbWFyeS1hY3RpdmU6ICMyMWE2YzE7XFxuJHByaW1hcnktZGlzYWJsZWQ6ICNkM2YxZjc7XFxuJHNlY29uZGFyeS1ob3ZlcjogI2I3Y2VkMztcXG4kc2Vjb25kYXJ5LWFjdGl2ZTogIzg4OWRhMjtcXG4kZGFuZ2VyLWhvdmVyOiAjZmRlMWUxO1xcbiRub3RpY2U6ICNkZmY1Zjk7XFxuXFxuJHByaW1hcnk6ICRibHVlICFkZWZhdWx0O1xcbiRzZWNvbmRhcnk6ICRtZWRpdW0tZ3JheTtcXG4kc3VjY2VzczogJGdyZWVuICFkZWZhdWx0O1xcbiRpbmZvOiAkY3lhbiAhZGVmYXVsdDtcXG4kd2FybmluZzogJHllbGxvdyAhZGVmYXVsdDtcXG4kZGFuZ2VyOiAkcmVkICFkZWZhdWx0O1xcbiRsaWdodDogJGdyYXktMTAwICFkZWZhdWx0O1xcbiRkYXJrOiAkZ3JheS04MDAgIWRlZmF1bHQ7XFxuXFxuJHRvYXN0LXN1Y2Nlc3M6ICM1M2Q1NzIgIWRlZmF1bHQ7XFxuJHRvYXN0LXdhcm5pbmc6ICNmYWIwMDAgIWRlZmF1bHQ7XFxuXFxuJGJyYW5kLXByaW1hcnk6ICRwcmltYXJ5ICFkZWZhdWx0O1xcbiRicmFuZC1zZWNvbmRhcnk6ICRzZWNvbmRhcnkgIWRlZmF1bHQ7XFxuJGJyYW5kLWluZm86ICM1YmMwZGUgIWRlZmF1bHQ7XFxuJGJyYW5kLXdhcm5pbmc6ICNmMGFkNGUgIWRlZmF1bHQ7XFxuJGJyYW5kLXN1Y2Nlc3M6ICRzdWNjZXNzICFkZWZhdWx0O1xcbiRicmFuZC1kYW5nZXI6ICRkYW5nZXIgIWRlZmF1bHQ7XFxuXFxuJGJ0bi1wcmltYXJ5LWJnOiAkcHJpbWFyeS1ob3ZlcjtcXG4kYnRuLXNlY29uZGFyeS1ib3JkZXI6ICMwMDA7XFxuJGJ0bi1pbmZvLWJnOiAkYnJhbmQtaW5mbyAhZGVmYXVsdDtcXG4kYnRuLXN1Y2Nlc3MtYmc6ICRicmFuZC1zdWNjZXNzICFkZWZhdWx0O1xcbiRidG4td2FybmluZy1iZzogJGJyYW5kLXdhcm5pbmcgIWRlZmF1bHQ7XFxuJGJ0bi1kYW5nZXItYmc6ICRicmFuZC1kYW5nZXIgIWRlZmF1bHQ7XFxuXFxuJHRoZW1lLWNvbG9yczogKFxcbiAgXFxcInByaW1hcnlcXFwiOiAkcHJpbWFyeSxcXG4gIFxcXCJzZWNvbmRhcnlcXFwiOiAkc2Vjb25kYXJ5LFxcbiAgXFxcInN1Y2Nlc3NcXFwiOiAkc3VjY2VzcyxcXG4gIFxcXCJpbmZvXFxcIjogJGluZm8sXFxuICBcXFwid2FybmluZ1xcXCI6ICR3YXJuaW5nLFxcbiAgXFxcImRhbmdlclxcXCI6ICRkYW5nZXIsXFxuICBcXFwibGlnaHRcXFwiOiAkbGlnaHQsXFxuICBcXFwiZGFya1xcXCI6ICRkYXJrXFxuKTtcXG5cXG4kYWxlcnRzLWJhY2tncm91bmQtY29sb3JzOiAoXFxuICBcXFwic3VjY2Vzc1xcXCI6ICNjYmYyZDQsXFxuICBcXFwiaW5mb1xcXCI6ICNiZWVhZjMsXFxuICBcXFwid2FybmluZ1xcXCI6ICNmZmZiZDMsXFxuICBcXFwiZGFuZ2VyXFxcIjogI2ZiYzZjM1xcbik7XFxuXFxuJGFsZXJ0cy1zZWNvbmQtY29sb3JzOiAoXFxuICBcXFwic3VjY2Vzc1xcXCI6ICM1M2Q1NzIsXFxuICBcXFwiaW5mb1xcXCI6ICMyNWI5ZDcsXFxuICBcXFwid2FybmluZ1xcXCI6ICNmYWIwMDAsXFxuICBcXFwiZGFuZ2VyXFxcIjogI2Y0NDMzNlxcbik7XFxuXFxuJHRoZW1lLWFsZXJ0cy1pY29uczogKFxcbiAgc3VjY2VzczogXFxcIlxcXFxFNUNBXFxcIixcXG4gIGluZm86IFxcXCJcXFxcZTg4ZVxcXCIsXFxuICB3YXJuaW5nOiBcXFwiXFxcXEUwMDJcXFwiLFxcbiAgZGFuZ2VyOiBcXFwiXFxcXGUwMDBcXFwiXFxuKTtcXG5cXG4kdGhlbWUtY29sb3JzLWljb25zOiAoXFxuICBcXFwicHJpbWFyeVxcXCI6ICRwcmltYXJ5LFxcbiAgXFxcInNlY29uZGFyeVxcXCI6ICRzZWNvbmRhcnksXFxuICBcXFwic3VjY2Vzc1xcXCI6ICRzdWNjZXNzLFxcbiAgXFxcImluZm9cXFwiOiAkaW5mbyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogI2ZhYjAwMCxcXG4gIFxcXCJkYW5nZXJcXFwiOiAkZGFuZ2VyLFxcbiAgXFxcImxpZ2h0XFxcIjogJGxpZ2h0XFxuKTtcXG5cXG4kdGhlbWUtY29sb3JzLWhvdmVyOiAoXFxuICBwcmltYXJ5OiAkcHJpbWFyeS1ob3ZlcixcXG4gIHNlY29uZGFyeTogJHNlY29uZGFyeS1ob3ZlcixcXG4gIHN1Y2Nlc3M6ICM5YmNiYTYsXFxuICBpbmZvOiAkcHJpbWFyeS1ob3ZlcixcXG4gIHdhcm5pbmc6ICNlNmIwNDUsXFxuICBkYW5nZXI6ICNlNzZkN2EsXFxuICBsaWdodDogJGdyYXktODAwLFxcbiAgZGFyazogJGdyYXktMTAwLFxcbiAgZGVmYXVsdDogJGxpZ2h0LWJsdWVcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtYWN0aXZlOiAoXFxuICBwcmltYXJ5OiAkcHJpbWFyeS1hY3RpdmUsXFxuICBzZWNvbmRhcnk6ICRzZWNvbmRhcnktYWN0aXZlLFxcbiAgc3VjY2VzczogIzVhOTE2NixcXG4gIGluZm86IGRhcmtlbihtYXAtZ2V0KCR0aGVtZS1jb2xvcnMsIFxcXCJpbmZvXFxcIiksIDEwJSksXFxuICB3YXJuaW5nOiBkYXJrZW4obWFwLWdldCgkdGhlbWUtY29sb3JzLCBcXFwid2FybmluZ1xcXCIpLCAxMCUpLFxcbiAgZGFuZ2VyOiAjYzMzNjJiLFxcbiAgbGlnaHQ6IGRhcmtlbihtYXAtZ2V0KCR0aGVtZS1jb2xvcnMsIFxcXCJsaWdodFxcXCIpLCAxMCUpLFxcbiAgZGFyazogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcImRhcmtcXFwiKSwgMTAlKSxcXG4gIGRlZmF1bHQ6ICRwcmltYXJ5XFxuKTtcXG5cXG4kdGhlbWUtY29sb3JzLWJhY2tncm91bmQ6IChcXG4gIHByaW1hcnk6ICNkZmY1ZjksXFxuICBzZWNvbmRhcnk6ICRibGFjayxcXG4gIHN1Y2Nlc3M6ICNkNmYwZDgsXFxuICBpbmZvOiAjZGZmNWY5LFxcbiAgd2FybmluZzogI2ZmZmJkMyxcXG4gIGRhbmdlcjogI2ZkZTFlMSxcXG4gIGxpZ2h0OiAkZ3JheS0yMDAsXFxuICBkYXJrOiAkZ3JheS03MDBcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtc2hhZG93OiAoXFxuICBwcmltYXJ5OiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpLFxcbiAgc2Vjb25kYXJ5OiAkYmxhY2ssXFxuICBzdWNjZXNzOiB0aGVtZS1jb2xvcihcXFwic3VjY2Vzc1xcXCIpLFxcbiAgaW5mbzogdGhlbWUtY29sb3IoXFxcImluZm9cXFwiKSxcXG4gIHdhcm5pbmc6IHRoZW1lLWNvbG9yKFxcXCJ3YXJuaW5nXFxcIiksXFxuICBkYW5nZXI6IHRoZW1lLWNvbG9yKFxcXCJkYW5nZXJcXFwiKSxcXG4gIGxpZ2h0OiB0aGVtZS1jb2xvcihcXFwibGlnaHRcXFwiKSxcXG4gIGRhcms6IHRoZW1lLWNvbG9yKFxcXCJkYXJrXFxcIilcXG4pO1xcblxcbi8vIE9wdGlvbnNcXG4kZW5hYmxlLWNhcmV0OiB0cnVlICFkZWZhdWx0O1xcbiRlbmFibGUtcm91bmRlZDogdHJ1ZTtcXG4kZW5hYmxlLXNoYWRvd3M6IHRydWU7XFxuJGVuYWJsZS1ncmFkaWVudHM6IGZhbHNlICFkZWZhdWx0O1xcbiRlbmFibGUtdHJhbnNpdGlvbnM6IHRydWUgIWRlZmF1bHQ7XFxuJGVuYWJsZS1ncmlkLWNsYXNzZXM6IHRydWUgIWRlZmF1bHQ7XFxuJGVuYWJsZS1wcmludC1zdHlsZXM6IHRydWUgIWRlZmF1bHQ7XFxuXFxuLy8gU3BhY2luZ1xcbiRzcGFjZXI6IDEuODc1cmVtO1xcblxcbiRzcGFjZXJzOiAoXFxuICAwOiAwLFxcbiAgMTogKFxcbiAgICAkc3BhY2VyIC8gNlxcbiAgKSxcXG4gIDI6IChcXG4gICAgJHNwYWNlciAvIDNcXG4gICksXFxuICAzOiAoXFxuICAgICRzcGFjZXIgLyAyXFxuICApLFxcbiAgNDogJHNwYWNlcixcXG4gIDU6IChcXG4gICAgJHNwYWNlciAqIDJcXG4gIClcXG4pO1xcblxcbi8vIEJvZHlcXG4kYm9keS1iZzogJHdoaXRlICFkZWZhdWx0O1xcbiRib2R5LWNvbG9yOiAkZGFyay1ncmF5O1xcblxcbi8vIExpbmtzXFxuJGxpbmstaG92ZXItY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIikgIWRlZmF1bHQ7XFxuJGxpbmstaG92ZXItZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcblxcbi8vIFBhcmFncmFwaHNcXG4kcGFyYWdyYXBoLW1hcmdpbi1ib3R0b206IDFyZW07XFxuXFxuLy8gR3JpZCBicmVha3BvaW50c1xcbiRncmlkLWJyZWFrcG9pbnRzOiAoXFxuICB4czogMCxcXG4gIHNtOiA1NDRweCxcXG4gIG1kOiA3NjhweCxcXG4gIGxnOiAxMDI0cHgsXFxuICB4bDogMTMwMHB4LFxcbiAgeHhsOiAxNjAwcHggLy8gUFMgY3VzdG9tXFxuKTtcXG5AaW5jbHVkZSBfYXNzZXJ0LWFzY2VuZGluZygkZ3JpZC1icmVha3BvaW50cywgXFxcIiRncmlkLWJyZWFrcG9pbnRzXFxcIik7XFxuQGluY2x1ZGUgX2Fzc2VydC1zdGFydHMtYXQtemVybygkZ3JpZC1icmVha3BvaW50cyk7XFxuXFxuLy8gR3JpZCBjb250YWluZXJzXFxuJGNvbnRhaW5lci1tYXgtd2lkdGhzOiAoXFxuICBzbTogNTc2cHgsXFxuICBtZDogNzIwcHgsXFxuICBsZzogOTcycHgsXFxuICB4bDogMTI0MHB4XFxuKTtcXG5AaW5jbHVkZSBfYXNzZXJ0LWFzY2VuZGluZygkY29udGFpbmVyLW1heC13aWR0aHMsIFxcXCIkY29udGFpbmVyLW1heC13aWR0aHNcXFwiKTtcXG5cXG4vLyBHcmlkIGNvbHVtbnNcXG4vLyRncmlkLWNvbHVtbnM6ICAgICAgICAgICAgICAgIDEyICFkZWZhdWx0O1xcbiRncmlkLWd1dHRlci13aWR0aDogMS44NzVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8gQ29tcG9uZW50c1xcbi8vJGxpbmUtaGVpZ2h0LWxnOiAgICAgICAgICAgICAgMS41ICFkZWZhdWx0O1xcbi8vJGxpbmUtaGVpZ2h0LXNtOiAgICAgICAgICAgICAgMS41ICFkZWZhdWx0O1xcblxcbi8vJGJvcmRlci13aWR0aDogICAgICAgICAgICAgICAgMXB4ICFkZWZhdWx0O1xcbi8vJGJvcmRlci1jb2xvcjogICAgICAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcblxcbiRib3JkZXItcmFkaXVzOiA0cHggIWRlZmF1bHQ7XFxuLy8kYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICAgICAuM3JlbSAhZGVmYXVsdDtcXG4vLyRib3JkZXItcmFkaXVzLXNtOiAgICAgICAgICAgIC4ycmVtICFkZWZhdWx0O1xcblxcbi8vJGNvbXBvbmVudC1hY3RpdmUtY29sb3I6ICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbi8vJGNvbXBvbmVudC1hY3RpdmUtYmc6ICAgICAgICAgdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSAhZGVmYXVsdDtcXG5cXG4kY2FyZXQtd2lkdGg6IC4yNXJlbTtcXG5cXG4vLyR0cmFuc2l0aW9uLWJhc2U6ICAgICAgICAgICAgIGFsbCAuMnMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XFxuLy8kdHJhbnNpdGlvbi1mYWRlOiAgICAgICAgICAgICBvcGFjaXR5IC4xNXMgbGluZWFyICFkZWZhdWx0O1xcbi8vJHRyYW5zaXRpb24tY29sbGFwc2U6ICAgICAgICAgaGVpZ2h0IC4zNXMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBGb250c1xcbiRmb250LWZhbWlseS1zYW5zLXNlcmlmOiBcXFwiT3BlbiBTYW5zXFxcIiwgaGVsdmV0aWNhLCBhcmlhbCwgc2Fucy1zZXJpZjtcXG4vLyRmb250LWZhbWlseS1tb25vc3BhY2U6ICAgICAgIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXFxcIkxpYmVyYXRpb24gTW9ub1xcXCIsIFxcXCJDb3VyaWVyIE5ld1xcXCIsIG1vbm9zcGFjZSAhZGVmYXVsdDtcXG4vLyRmb250LWZhbWlseS1iYXNlOiAgICAgICAgICAgICRmb250LWZhbWlseS1zYW5zLXNlcmlmICFkZWZhdWx0O1xcblxcbiRmb250LXNpemUtYmFzZTogLjg3NXJlbTtcXG4kZm9udC1zaXplLWxnOiAxcmVtO1xcbiRmb250LXNpemUtc206IC43NXJlbTtcXG4kZm9udC1zaXplLXhzOiAuNjI1cmVtOyAvLyBQUyBjdXN0b21cXG5cXG4vLyRmb250LXdlaWdodC1saWdodDogICAgICAgICAgIDMwMDtcXG4vLyRmb250LXdlaWdodC1ub3JtYWw6ICAgICAgICAgIDQwMDtcXG4kZm9udC13ZWlnaHQtc2VtaWJvbGQ6IDYwMDtcXG4kZm9udC13ZWlnaHQtYm9sZDogNzAwO1xcblxcbiRoMS1mb250LXNpemU6IDEuNXJlbTtcXG4kaDItZm9udC1zaXplOiAxLjI1cmVtO1xcbiRoMy1mb250LXNpemU6IDFyZW07XFxuJGg0LWZvbnQtc2l6ZTogLjg3NXJlbTtcXG4kaDUtZm9udC1zaXplOiAuNzVyZW07XFxuJGg2LWZvbnQtc2l6ZTogLjYyNXJlbTtcXG5cXG4vLyRoZWFkaW5ncy1tYXJnaW4tYm90dG9tOiAgICAgICgkc3BhY2VyIC8gMikgIWRlZmF1bHQ7XFxuJGhlYWRpbmdzLWZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktc2Fucy1zZXJpZjtcXG4kaGVhZGluZ3MtZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1ib2xkO1xcbiRoZWFkaW5ncy1jb2xvcjogJGJvZHktY29sb3I7XFxuXFxuLy8kZGlzcGxheTEtc2l6ZTogICAgICAgICAgICAgICA2cmVtICFkZWZhdWx0O1xcbi8vJGRpc3BsYXkyLXNpemU6ICAgICAgICAgICAgICAgNS41cmVtICFkZWZhdWx0O1xcbi8vJGRpc3BsYXkzLXNpemU6ICAgICAgICAgICAgICAgNC41cmVtICFkZWZhdWx0O1xcbi8vJGRpc3BsYXk0LXNpemU6ICAgICAgICAgICAgICAgMy41cmVtICFkZWZhdWx0O1xcblxcbi8vJGRpc3BsYXkxLXdlaWdodDogICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbi8vJGRpc3BsYXkyLXdlaWdodDogICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbi8vJGRpc3BsYXkzLXdlaWdodDogICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbi8vJGRpc3BsYXk0LXdlaWdodDogICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbi8vJGRpc3BsYXktbGluZS1oZWlnaHQ6ICAgICAgICAgJGhlYWRpbmdzLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcblxcbi8vJGxlYWQtZm9udC1zaXplOiAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqIDEuMjUpICFkZWZhdWx0O1xcbi8vJGxlYWQtZm9udC13ZWlnaHQ6ICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcblxcbi8vJHNtYWxsLWZvbnQtc2l6ZTogICAgICAgICAgICAgODAlICFkZWZhdWx0O1xcblxcbiR0ZXh0LW11dGVkOiAkbWVkaXVtLWdyYXk7XFxuXFxuLy8kYmxvY2txdW90ZS1zbWFsbC1jb2xvcjogICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuLy8kYmxvY2txdW90ZS1mb250LXNpemU6ICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogMS4yNSkgIWRlZmF1bHQ7XFxuXFxuJGhyLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kaHItYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcblxcbi8vJG1hcmstcGFkZGluZzogICAgICAgICAgICAgICAgLjJlbSAhZGVmYXVsdDtcXG5cXG4vLyRkdC1mb250LXdlaWdodDogICAgICAgICAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xcblxcbi8vJGtiZC1ib3gtc2hhZG93OiAgICAgICAgICAgICAgaW5zZXQgMCAtLjFyZW0gMCByZ2JhKCRibGFjaywgLjI1KSAhZGVmYXVsdDtcXG4vLyRuZXN0ZWQta2JkLWZvbnQtd2VpZ2h0OiAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xcblxcbi8vJGxpc3QtaW5saW5lLXBhZGRpbmc6ICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kbWFyay1iZzogICAgICAgICAgICAgICAgICAgICAjZmNmOGUzICFkZWZhdWx0O1xcblxcbi8vJGhyLW1hcmdpbi15OiAgICAgICAgICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcXG5cXG4vLyBUYWJsZXNcXG4kdGFibGUtY2VsbC1wYWRkaW5nOiAuNHJlbTtcXG4kdGFibGUtY2VsbC1wYWRkaW5nLXNtOiAuMjVyZW07XFxuXFxuLy8kdGFibGUtYmc6ICAgICAgICAgICAgICAgICAgICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcXG4kdGFibGUtYWNjZW50LWJnOiAkYmFja2dyb3VuZC1jb2xvcjtcXG4kdGFibGUtaG92ZXItYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuJHRhYmxlLWFjdGl2ZS1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG5cXG4vLyR0YWJsZS1ib3JkZXItd2lkdGg6ICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuLy8kdGFibGUtYm9yZGVyLWNvbG9yOiAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuXFxuJHRhYmxlLWhlYWQtYmc6ICRiYWNrZ3JvdW5kLWNvbG9yO1xcbiR0YWJsZS1oZWFkLWNvbG9yOiAkYm9keS1jb2xvcjtcXG5cXG4kdGFibGUtZGFyay1iZzogJGJvZHktY29sb3I7XFxuJHRhYmxlLWRhcmstYWNjZW50LWJnOiAkZXh0cmEtZGFyay1ncmF5O1xcbiR0YWJsZS1kYXJrLWhvdmVyLWJnOiB0aGVtZS1jb2xvci1ob3ZlcihcXFwicHJpbWFyeVxcXCIpO1xcbiR0YWJsZS1kYXJrLWJvcmRlci1jb2xvcjogJG1lZGl1bS1ncmF5O1xcbi8vJHRhYmxlLWRhcmstY29sb3I6ICAgICAgICAgICAgJGJvZHktYmcgIWRlZmF1bHQ7XFxuXFxuLy8gQnV0dG9uc1xcbiRpbnB1dC1idG4tcGFkZGluZy15OiAuMzc1cmVtO1xcbiRpbnB1dC1idG4tcGFkZGluZy14OiAuODM4cmVtO1xcbi8vJGlucHV0LWJ0bi1saW5lLWhlaWdodDogICAgICAgJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtYnRuLWZvY3VzLXdpZHRoOiAgICAgICAuMnJlbSAhZGVmYXVsdDtcXG4vLyRpbnB1dC1idG4tZm9jdXMtY29sb3I6ICAgICAgIHJnYmEoJGNvbXBvbmVudC1hY3RpdmUtYmcsIC4yNSkgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3c6ICAwIDAgMCAkaW5wdXQtYnRuLWZvY3VzLXdpZHRoICRpbnB1dC1idG4tZm9jdXMtY29sb3IgIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWJ0bi1wYWRkaW5nLXktc206IC4zMTNyZW07XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXgtc206IC42MjVyZW07XFxuLy8kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LXNtOiAgICAkbGluZS1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWJ0bi1wYWRkaW5nLXktbGc6IC40MzhyZW07XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGc6IC44MzhyZW07XFxuLy8kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnOiAgICAkbGluZS1oZWlnaHQtbGcgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtYnRuLWJvcmRlci13aWR0aDogICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcblxcbi8vIEJ1dHRvbnNcXG4kYnRuLXBhZGRpbmcteTogLjVyZW0gIWRlZmF1bHQ7XFxuJGJ0bi1wYWRkaW5nLXg6IDFyZW0gIWRlZmF1bHQ7XFxuLy8kYnRuLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcblxcbi8vJGJ0bi1wYWRkaW5nLXktc206ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktc20gIWRlZmF1bHQ7XFxuLy8kYnRuLXBhZGRpbmcteC1zbTogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1zbSAhZGVmYXVsdDtcXG4vLyRidG4tbGluZS1oZWlnaHQtc206ICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLXBhZGRpbmcteS1sZzogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1sZyAhZGVmYXVsdDtcXG4vLyRidG4tcGFkZGluZy14LWxnOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LWxnICFkZWZhdWx0O1xcbi8vJGJ0bi1saW5lLWhlaWdodC1sZzogICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4vLyRidG4tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICRpbnB1dC1idG4tYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcblxcbiRidG4tZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1zZW1pYm9sZDtcXG4kYnRuLWJveC1zaGFkb3c6IG5vbmU7XFxuLy8kYnRuLWZvY3VzLXdpZHRoOiAgICAgICAgICAgICAkaW5wdXQtYnRuLWZvY3VzLXdpZHRoICFkZWZhdWx0O1xcbiRidG4tZm9jdXMtYm94LXNoYWRvdzogbm9uZTtcXG4vLyRidG4tZGlzYWJsZWQtb3BhY2l0eTogICAgICAgIC42NSAhZGVmYXVsdDtcXG4kYnRuLWFjdGl2ZS1ib3gtc2hhZG93OiBub25lO1xcblxcbi8vJGJ0bi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcblxcbi8vJGJ0bi1ibG9jay1zcGFjaW5nLXk6ICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuXFxuJGJ0bi1ib3JkZXItcmFkaXVzOiA0cHg7XFxuLy8kYnRuLWJvcmRlci1yYWRpdXMtbGc6ICAgICAgICAkYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcXG4vLyRidG4tYm9yZGVyLXJhZGl1cy1zbTogICAgICAgICRib3JkZXItcmFkaXVzLXNtICFkZWZhdWx0O1xcblxcbi8vJGJ0bi10cmFuc2l0aW9uOiAgICAgICAgICAgICAgY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYmFja2dyb3VuZC1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xcblxcbi8vIEZvcm1zXFxuJGlucHV0LXBhZGRpbmcteTogLjM3NXJlbTtcXG4kaW5wdXQtcGFkZGluZy14OiAuNDM3NXJlbTtcXG4vLyRpbnB1dC1saW5lLWhlaWdodDogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LXBhZGRpbmcteS1zbTogICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LXNtICFkZWZhdWx0O1xcbi8vJGlucHV0LXBhZGRpbmcteC1zbTogICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LXNtICFkZWZhdWx0O1xcbi8vJGlucHV0LWxpbmUtaGVpZ2h0LXNtOiAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtcGFkZGluZy15LWxnOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktbGcgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtcGFkZGluZy14LWxnOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGcgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtbGluZS1oZWlnaHQtbGc6ICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1iZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGlucHV0LWRpc2FibGVkLWJnOiAjZWNlZWVmO1xcblxcbiRpbnB1dC1jb2xvcjogJGJvZHktY29sb3I7XFxuJGlucHV0LWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kaW5wdXQtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJGlucHV0LWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuLy8kaW5wdXQtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMtbGcgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtYm9yZGVyLXJhZGl1cy1zbTogICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMtc20gIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtZm9jdXMtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJnICFkZWZhdWx0O1xcbiRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3I6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuLy8kaW5wdXQtZm9jdXMtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbi8vJGlucHV0LWZvY3VzLXdpZHRoOiAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tZm9jdXMtd2lkdGggIWRlZmF1bHQ7XFxuJGlucHV0LWZvY3VzLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuJGlucHV0LXBsYWNlaG9sZGVyLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuXFxuLy8kaW5wdXQtaGVpZ2h0LWJvcmRlcjogICAgICAgICAgICAgICAgICAgJGlucHV0LWJvcmRlci13aWR0aCAqIDIgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtaGVpZ2h0LWlubmVyOiAgICAgICAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqICRpbnB1dC1idG4tbGluZS1oZWlnaHQpICsgKCRpbnB1dC1idG4tcGFkZGluZy15ICogMikgIWRlZmF1bHQ7XFxuJGlucHV0LWhlaWdodDogMi4xODhyZW07XFxuXFxuLy8kaW5wdXQtaGVpZ2h0LWlubmVyLXNtOiAgICAgICAgICAgICAgICAgKCRmb250LXNpemUtc20gKiAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LXNtKSArICgkaW5wdXQtYnRuLXBhZGRpbmcteS1zbSAqIDIpICFkZWZhdWx0O1xcbi8vJGlucHV0LWhlaWdodC1zbTogICAgICAgICAgICAgICAgICAgICAgIGNhbGMoI3skaW5wdXQtaGVpZ2h0LWlubmVyLXNtfSArICN7JGlucHV0LWhlaWdodC1ib3JkZXJ9KSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXItbGc6ICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1sZyAqICRpbnB1dC1idG4tbGluZS1oZWlnaHQtbGcpICsgKCRpbnB1dC1idG4tcGFkZGluZy15LWxnICogMikgIWRlZmF1bHQ7XFxuJGlucHV0LWhlaWdodC1sZzogMi4xODhyZW07XFxuXFxuLy8kaW5wdXQtdHJhbnNpdGlvbjogICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgLjE1cyBlYXNlLWluLW91dCAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLXRleHQtbWFyZ2luLXRvcDogICAgICAgICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZm9ybS1jaGVjay1pbnB1dC1ndXR0ZXI6ICAgICAgICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG4vLyRmb3JtLWNoZWNrLWlucHV0LW1hcmdpbi15OiAgICAgICAgICAgICAuM3JlbSAhZGVmYXVsdDtcXG4vLyRmb3JtLWNoZWNrLWlucHV0LW1hcmdpbi14OiAgICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZm9ybS1jaGVjay1pbmxpbmUtbWFyZ2luLXg6ICAgICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcbi8vJGZvcm0tY2hlY2staW5saW5lLWlucHV0LW1hcmdpbi14OiAgICAgIC4zMTI1cmVtICFkZWZhdWx0O1xcblxcbi8vJGZvcm0tZ3JvdXAtbWFyZ2luLWJvdHRvbTogICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtZ3JvdXAtYWRkb24tY29sb3I6ICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbiRpbnB1dC1ncm91cC1hZGRvbi1iZzogJGV4dHJhLWxpZ2h0LWdyYXk7XFxuLy8kaW5wdXQtZ3JvdXAtYWRkb24tYm9yZGVyLWNvbG9yOiAgICAgICAgJGlucHV0LWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tY29udHJvbC1ndXR0ZXI6ICAgICAgICAgICAgICAgICAxLjVyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtc3BhY2VyLXg6ICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3Itc2l6ZTogICAgICAgICAxcmVtICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1iZzogICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYmctc2l6ZTogICAgICA1MCUgNTAlICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1ib3gtc2hhZG93OiAgIGluc2V0IDAgLjI1cmVtIC4yNXJlbSByZ2JhKCRibGFjaywgLjEpICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1kaXNhYmxlZC1iZzogICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWxhYmVsLWRpc2FibGVkLWNvbG9yOiAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWNvbG9yOiAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtYmc6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1kaXNhYmxlZC1iZzogIHJnYmEodGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSwgLjUpICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWJveC1zaGFkb3c6ICAgbm9uZSAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItZm9jdXMtYm94LXNoYWRvdzogICAgIDAgMCAwIDFweCAkYm9keS1iZywgJGlucHV0LWJ0bi1mb2N1cy1ib3gtc2hhZG93ICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1hY3RpdmUtY29sb3I6ICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1iZzogICAgICAgICAgICBsaWdodGVuKCRjb21wb25lbnQtYWN0aXZlLWJnLCAzNSUpICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1hY3RpdmUtYm94LXNoYWRvdzogICAgbm9uZSAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWJvcmRlci1yYWRpdXM6ICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaWNvbi1jaGVja2VkOiAgICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA4IDgnJTNFJTNDcGF0aCBmaWxsPScjeyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvcn0nIGQ9J002LjU2NC43NWwtMy41OSAzLjYxMi0xLjUzOC0xLjU1TDAgNC4yNiAyLjk3NCA3LjI1IDggMi4xOTN6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaW5kZXRlcm1pbmF0ZS1iZzogICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWNvbG9yOiAkY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pY29uLWluZGV0ZXJtaW5hdGU6ICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDQgNCclM0UlM0NwYXRoIHN0cm9rZT0nI3skY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWNvbG9yfScgZD0nTTAgMmg0Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaW5kZXRlcm1pbmF0ZS1ib3gtc2hhZG93OiBub25lICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1yYWRpby1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1czogICAgICAgICAgNTAlICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1yYWRpby1pbmRpY2F0b3ItaWNvbi1jaGVja2VkOiAgICAgICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9Jy00IC00IDggOCclM0UlM0NjaXJjbGUgcj0nMycgZmlsbD0nI3skY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3J9Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1zZWxlY3QtcGFkZGluZy15OiAgICAgICAgICAgLjM3NXJlbSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LXBhZGRpbmcteDogICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtaGVpZ2h0OiAgICAgICAgICAgICAgJGlucHV0LWhlaWdodCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWluZGljYXRvci1wYWRkaW5nOiAgIDFyZW0gIWRlZmF1bHQ7IC8vIEV4dHJhIHBhZGRpbmcgdG8gYWNjb3VudCBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBiYWNrZ3JvdW5kLWltYWdlIGJhc2VkIGluZGljYXRvclxcbi8vJGN1c3RvbS1zZWxlY3QtbGluZS1oZWlnaHQ6ICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWNvbG9yOiAgICAgICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1kaXNhYmxlZC1jb2xvcjogJG1lZGl1bS1ncmF5O1xcbi8vJGN1c3RvbS1zZWxlY3QtYmc6ICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWRpc2FibGVkLWJnOiAkaW5wdXQtZGlzYWJsZWQtYmc7XFxuJGN1c3RvbS1zZWxlY3QtYmctc2l6ZTogOHB4IDEwcHggIWRlZmF1bHQ7IC8vIEluIHBpeGVscyBiZWNhdXNlIGltYWdlIGRpbWVuc2lvbnNcXG4kY3VzdG9tLXNlbGVjdC1pbmRpY2F0b3ItY29sb3I6ICRpbnB1dC1jb2xvcjtcXG4vLyRjdXN0b20tc2VsZWN0LWluZGljYXRvcjogICAgICAgICAgIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA1JyUzRSUzQ3BhdGggZmlsbD0nI3skY3VzdG9tLXNlbGVjdC1pbmRpY2F0b3ItY29sb3J9JyBkPSdNMiAwTDAgMmg0em0wIDVMMCAzaDR6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtYm9yZGVyLXdpZHRoOiAgICAgICAgJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1ib3JkZXItY29sb3I6ICAgICAgICAkaW5wdXQtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtYm9yZGVyLXJhZGl1czogICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1zZWxlY3QtZm9jdXMtYm9yZGVyLWNvbG9yOiAkaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yO1xcbiRjdXN0b20tc2VsZWN0LWZvY3VzLWJveC1zaGFkb3c6ICRpbnB1dC1mb2N1cy1ib3gtc2hhZG93O1xcblxcbi8vJGN1c3RvbS1zZWxlY3QtZm9udC1zaXplLXNtOiAgICAgICAgNzUlICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtaGVpZ2h0LXNtOiAgICAgICAgICAgJGlucHV0LWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tc2VsZWN0LWZvbnQtc2l6ZS1sZzogICAgICAgIDEyNSUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1oZWlnaHQtbGc6ICAgICAgICAgICAkaW5wdXQtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1maWxlLWhlaWdodDogICAgICAgICAgICAgICAgJGlucHV0LWhlaWdodCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1mb2N1cy1ib3JkZXItY29sb3I6ICAgICRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLWZvY3VzLWJveC1zaGFkb3c6ICRpbnB1dC1mb2N1cy1ib3gtc2hhZG93O1xcblxcbi8vJGN1c3RvbS1maWxlLXBhZGRpbmcteTogICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXkgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtcGFkZGluZy14OiAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1saW5lLWhlaWdodDogICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtY29sb3I6ICAgICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYmc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYmcgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYm9yZGVyLXdpZHRoOiAgICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItY29sb3I6ICAgICAgICAgICRpbnB1dC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYm9yZGVyLXJhZGl1czogICAgICAgICAkaW5wdXQtYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3gtc2hhZG93OiAgICAgICAgICAgICRpbnB1dC1ib3gtc2hhZG93ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJ1dHRvbi1jb2xvcjogICAgICAgICAgJGN1c3RvbS1maWxlLWNvbG9yICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJ1dHRvbi1iZzogICAgICAgICAgICAgJGlucHV0LWdyb3VwLWFkZG9uLWJnICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLXRleHQ6IChcXG4vLyAgICAgICAgZW46IFxcXCJCcm93c2VcXFwiXFxuLy8pICFkZWZhdWx0O1xcblxcbiRjdXJzb3ItZGlzYWJsZWQ6IG5vdC1hbGxvd2VkOyAvLyBQUyBjdXN0b21cXG5cXG4vLyBGb3JtIHZhbGlkYXRpb25cXG4vLyRmb3JtLWZlZWRiYWNrLW1hcmdpbi10b3A6ICAgICAgICAgICRmb3JtLXRleHQtbWFyZ2luLXRvcCAhZGVmYXVsdDtcXG4vLyRmb3JtLWZlZWRiYWNrLWZvbnQtc2l6ZTogICAgICAgICAgICRzbWFsbC1mb250LXNpemUgIWRlZmF1bHQ7XFxuJGZvcm0tZmVlZGJhY2stdmFsaWQtY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJzdWNjZXNzXFxcIik7XFxuJGZvcm0tZmVlZGJhY2staW52YWxpZC1jb2xvcjogdGhlbWUtY29sb3IoXFxcImRhbmdlclxcXCIpO1xcbiRmb3JtLWZlZWRiYWNrLXdhcm5pbmctY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJ3YXJuaW5nXFxcIik7IC8vIFBTIGN1c3RvbVxcblxcbi8vIERyb3Bkb3duc1xcbi8vJGRyb3Bkb3duLW1pbi13aWR0aDogICAgICAgICAgICAgICAgMTByZW0gIWRlZmF1bHQ7XFxuJGRyb3Bkb3duLXBhZGRpbmcteTogMDtcXG4vLyRkcm9wZG93bi1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcbi8vJGRyb3Bkb3duLXNwYWNlcjogICAgICAgICAgICAgICAgICAgLjEyNXJlbSAhZGVmYXVsdDtcXG4vLyRkcm9wZG93bi1iZzogICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRkcm9wZG93bi1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGRyb3Bkb3duLWJvcmRlci13aWR0aDogICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kZHJvcGRvd24tZGl2aWRlci1iZzogJGxpZ2h0LWdyYXk7XFxuLy8kZHJvcGRvd24tYm94LXNoYWRvdzogICAgICAgICAgICAgICAwIC41cmVtIDFyZW0gcmdiYSgkYmxhY2ssIC4xNzUpICFkZWZhdWx0O1xcblxcbiRkcm9wZG93bi1saW5rLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuJGRyb3Bkb3duLWxpbmstaG92ZXItY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIik7XFxuJGRyb3Bkb3duLWxpbmstaG92ZXItYmc6ICR3aGl0ZTtcXG5cXG4vLyRkcm9wZG93bi1saW5rLWFjdGl2ZS1jb2xvcjogICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbi8vJGRyb3Bkb3duLWxpbmstYWN0aXZlLWJnOiAgICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuXFxuLy8kZHJvcGRvd24tbGluay1kaXNhYmxlZC1jb2xvcjogICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuJGRyb3Bkb3duLWl0ZW0tcGFkZGluZy14OiAuMzEyNXJlbTtcXG4kZHJvcGRvd24taXRlbS1wYWRkaW5nLXk6IC4zMTI1cmVtO1xcblxcbi8vJGRyb3Bkb3duLWhlYWRlci1jb2xvcjogICAgICAgICAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcblxcbi8vIE5hdnNcXG4kbmF2LWxpbmstcGFkZGluZy15OiAuOTM3NXJlbTtcXG4kbmF2LWxpbmstcGFkZGluZy14OiAxLjI1cmVtO1xcbiRuYXYtbGluay1kaXNhYmxlZC1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuXFxuJG5hdi10YWJzLWJvcmRlci1jb2xvcjogJHdoaXRlO1xcbi8vJG5hdi10YWJzLWJvcmRlci13aWR0aDogICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRuYXYtdGFicy1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbiRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG4kbmF2LXRhYnMtbGluay1hY3RpdmUtY29sb3I6ICRib2R5LWNvbG9yO1xcbiRuYXYtdGFicy1saW5rLWFjdGl2ZS1iZzogJGJvZHktYmc7XFxuJG5hdi10YWJzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG5cXG4kbmF2LXBpbGxzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiAkbmF2LXRhYnMtbGluay1ob3Zlci1ib3JkZXItY29sb3I7XFxuJG5hdi1waWxscy1saW5rLWFjdGl2ZS1jb2xvcjogJG5hdi10YWJzLWxpbmstYWN0aXZlLWNvbG9yO1xcbiRuYXYtcGlsbHMtbGluay1hY3RpdmUtYmc6ICNmNGY5ZmI7XFxuJG5hdi1waWxscy1saW5rLWFjdGl2ZS1ib3JkZXItY29sb3I6ICRuYXYtdGFicy1saW5rLWFjdGl2ZS1ib3JkZXItY29sb3I7IC8vIFBTIGN1c3RvbVxcblxcbi8vJG5hdi1waWxscy1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRuYXYtcGlsbHMtbGluay1hY3RpdmUtYmc6ICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xcblxcbi8vIE5hdmJhclxcbi8vJG5hdmJhci1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgICAgKCRzcGFjZXIgLyAyKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICRzcGFjZXIgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2YmFyLW5hdi1saW5rLXBhZGRpbmcteDogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItYnJhbmQtZm9udC1zaXplOiAgICAgICAgICAgICRmb250LXNpemUtbGcgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2LWxpbmstaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogJGxpbmUtaGVpZ2h0LWJhc2UgKyAkbmF2LWxpbmstcGFkZGluZy15ICogMikgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWJyYW5kLWhlaWdodDogICAgICAgICAgICAgICAkbmF2YmFyLWJyYW5kLWZvbnQtc2l6ZSAqICRsaW5lLWhlaWdodC1iYXNlICFkZWZhdWx0O1xcbi8vJG5hdmJhci1icmFuZC1wYWRkaW5nLXk6ICAgICAgICAgICAgKCRuYXYtbGluay1oZWlnaHQgLSAkbmF2YmFyLWJyYW5kLWhlaWdodCkgLyAyICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci10b2dnbGVyLXBhZGRpbmcteTogICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xcbi8vJG5hdmJhci10b2dnbGVyLXBhZGRpbmcteDogICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcbi8vJG5hdmJhci10b2dnbGVyLWZvbnQtc2l6ZTogICAgICAgICAgJGZvbnQtc2l6ZS1sZyAhZGVmYXVsdDtcXG4vLyRuYXZiYXItdG9nZ2xlci1ib3JkZXItcmFkaXVzOiAgICAgICRidG4tYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItZGFyay1jb2xvcjogICAgICAgICAgICAgICAgIHJnYmEoJHdoaXRlLCAuNSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWRhcmstaG92ZXItY29sb3I6ICAgICAgICAgICByZ2JhKCR3aGl0ZSwgLjc1KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay1hY3RpdmUtY29sb3I6ICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay1kaXNhYmxlZC1jb2xvcjogICAgICAgIHJnYmEoJHdoaXRlLCAuMjUpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLXRvZ2dsZXItaWNvbi1iZzogICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB2aWV3Qm94PScwIDAgMzAgMzAnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIHN0cm9rZT0nI3skbmF2YmFyLWRhcmstY29sb3J9JyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW1pdGVybGltaXQ9JzEwJyBkPSdNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay10b2dnbGVyLWJvcmRlci1jb2xvcjogIHJnYmEoJHdoaXRlLCAuMSkgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2YmFyLWxpZ2h0LWNvbG9yOiAgICAgICAgICAgICAgICByZ2JhKCRibGFjaywgLjUpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1saWdodC1ob3Zlci1jb2xvcjogICAgICAgICAgcmdiYSgkYmxhY2ssIC43KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtYWN0aXZlLWNvbG9yOiAgICAgICAgIHJnYmEoJGJsYWNrLCAuOSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LWRpc2FibGVkLWNvbG9yOiAgICAgICByZ2JhKCRibGFjaywgLjMpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1saWdodC10b2dnbGVyLWljb24tYmc6ICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB2aWV3Qm94PScwIDAgMzAgMzAnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIHN0cm9rZT0nI3skbmF2YmFyLWxpZ2h0LWNvbG9yfScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1taXRlcmxpbWl0PScxMCcgZD0nTTQgN2gyMk00IDE1aDIyTTQgMjNoMjInLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LXRvZ2dsZXItYm9yZGVyLWNvbG9yOiByZ2JhKCRibGFjaywgLjEpICFkZWZhdWx0O1xcblxcbi8vIFBhZ2luYXRpb25cXG4kcGFnaW5hdGlvbi1wYWRkaW5nLXk6IC42NXJlbTtcXG4kcGFnaW5hdGlvbi1wYWRkaW5nLXg6IC41cmVtO1xcbi8vJHBhZ2luYXRpb24tcGFkZGluZy15LXNtOiAgICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xcbi8vJHBhZ2luYXRpb24tcGFkZGluZy14LXNtOiAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXktbGc6ICAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAxLjVyZW0gIWRlZmF1bHQ7XFxuLy8kcGFnaW5hdGlvbi1saW5lLWhlaWdodDogICAgICAgICAgICAxLjI1ICFkZWZhdWx0O1xcblxcbiRwYWdpbmF0aW9uLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuJHBhZ2luYXRpb24tYmc6ICR3aGl0ZTtcXG4vLyRwYWdpbmF0aW9uLWJvcmRlci13aWR0aDogICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yOiAkd2hpdGU7XFxuXFxuLy8kcGFnaW5hdGlvbi1mb2N1cy1ib3gtc2hhZG93OiAgICAgICAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuXFxuJHBhZ2luYXRpb24taG92ZXItY29sb3I6ICRwYWdpbmF0aW9uLWNvbG9yO1xcbiRwYWdpbmF0aW9uLWhvdmVyLWJnOiAkcGFnaW5hdGlvbi1iZztcXG4kcGFnaW5hdGlvbi1ob3Zlci1ib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWJvcmRlci1jb2xvcjtcXG5cXG4kcGFnaW5hdGlvbi1hY3RpdmUtY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIik7XFxuJHBhZ2luYXRpb24tYWN0aXZlLWJnOiAkcGFnaW5hdGlvbi1iZztcXG4kcGFnaW5hdGlvbi1hY3RpdmUtYm9yZGVyLWNvbG9yOiAkcGFnaW5hdGlvbi1ib3JkZXItY29sb3I7XFxuXFxuJHBhZ2luYXRpb24tZGlzYWJsZWQtY29sb3I6ICRsaWdodC1ncmF5O1xcbiRwYWdpbmF0aW9uLWRpc2FibGVkLWJnOiAkcGFnaW5hdGlvbi1iZztcXG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1ib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWJvcmRlci1jb2xvcjtcXG5cXG4vLyBKdW1ib3Ryb25cXG4kanVtYm90cm9uLXBhZGRpbmc6IDJyZW0gIWRlZmF1bHQ7XFxuJGp1bWJvdHJvbi1iZzogJGV4dHJhLWxpZ2h0LWdyYXk7XFxuXFxuLy8gQ2FyZHNcXG4kY2FyZC1zcGFjZXIteDogLjYyNXJlbSAhZGVmYXVsdDtcXG4kY2FyZC1zcGFjZXIteTogLjYyNXJlbSAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItd2lkdGg6IDFweCAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItcmFkaXVzOiA1cHggIWRlZmF1bHQ7XFxuJGNhcmQtYm9yZGVyLXJhZGl1cy1pbm5lcjogJGNhcmQtYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kY2FyZC1jYXAtYmc6ICRncmF5LTIwMCAhZGVmYXVsdDtcXG4kY2FyZC1iZzogI2ZmZiAhZGVmYXVsdDtcXG4kY2FyZC1saW5rLWhvdmVyLWNvbG9yOiAjZmZmICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci1jb2xvcjogI2RiZTZlOSAhZGVmYXVsdDtcXG4vLyRjYXJkLWlubmVyLWJvcmRlci1yYWRpdXM6ICAgICAgICAgIGNhbGMoI3skY2FyZC1ib3JkZXItcmFkaXVzfSAtICN7JGNhcmQtYm9yZGVyLXdpZHRofSkgIWRlZmF1bHQ7XFxuLy8kY2FyZC1jYXAtYmc6ICAgICAgICAgICAgICAgICAgICAgICByZ2JhKCRibGFjaywgLjAzKSAhZGVmYXVsdDtcXG4vLyRjYXJkLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJkLWltZy1vdmVybGF5LXBhZGRpbmc6ICAgICAgICAgIDEuMjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kY2FyZC1ncm91cC1tYXJnaW46ICAgICAgICAgICAgICAgICAoJGdyaWQtZ3V0dGVyLXdpZHRoIC8gMikgIWRlZmF1bHQ7XFxuLy8kY2FyZC1kZWNrLW1hcmdpbjogICAgICAgICAgICAgICAgICAkY2FyZC1ncm91cC1tYXJnaW4gIWRlZmF1bHQ7XFxuXFxuLy8kY2FyZC1jb2x1bW5zLWNvdW50OiAgICAgICAgICAgICAgICAzICFkZWZhdWx0O1xcbi8vJGNhcmQtY29sdW1ucy1nYXA6ICAgICAgICAgICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG4vLyRjYXJkLWNvbHVtbnMtbWFyZ2luOiAgICAgICAgICAgICAgICRjYXJkLXNwYWNlci15ICFkZWZhdWx0O1xcblxcbi8vIFRvb2x0aXBzXFxuLy8kdG9vbHRpcC1mb250LXNpemU6ICAgICAgICAgICAkZm9udC1zaXplLXNtICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtbWF4LXdpZHRoOiAgICAgICAgICAgMjAwcHggIWRlZmF1bHQ7XFxuLy8kdG9vbHRpcC1jb2xvcjogICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJHRvb2x0aXAtYmc6ICRtZWRpdW0tZ3JheTtcXG4vLyR0b29sdGlwLWJvcmRlci1yYWRpdXM6ICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLW9wYWNpdHk6ICAgICAgICAgICAgIC45ICFkZWZhdWx0O1xcbiR0b29sdGlwLXBhZGRpbmcteTogLjYyNXJlbTtcXG4kdG9vbHRpcC1wYWRkaW5nLXg6IDEuMjVyZW07XFxuLy8kdG9vbHRpcC1tYXJnaW46ICAgICAgICAgICAgICAwICFkZWZhdWx0O1xcblxcbi8vJHRvb2x0aXAtYXJyb3ctd2lkdGg6ICAgICAgICAgLjhyZW0gIWRlZmF1bHQ7XFxuLy8kdG9vbHRpcC1hcnJvdy1oZWlnaHQ6ICAgICAgICAuNHJlbSAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLWFycm93LWNvbG9yOiAgICAgICAgICR0b29sdGlwLWJnICFkZWZhdWx0O1xcblxcbi8vIFBvcG92ZXJzXFxuLy8kcG9wb3Zlci1mb250LXNpemU6ICAgICAgICAgICAgICAgICAkZm9udC1zaXplLXNtICFkZWZhdWx0O1xcbi8vJHBvcG92ZXItYmc6ICAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbi8vJHBvcG92ZXItbWF4LXdpZHRoOiAgICAgICAgICAgICAgICAgMjc2cHggIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kcG9wb3Zlci1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcXG4kcG9wb3Zlci1ib3gtc2hhZG93OiBub25lO1xcblxcbiRwb3BvdmVyLWhlYWRlci1iZzogJGV4dHJhLWxpZ2h0LWdyYXk7XFxuLy8kcG9wb3Zlci1oZWFkZXItY29sb3I6ICAgICAgICAgICAgICAkaGVhZGluZ3MtY29sb3IgIWRlZmF1bHQ7XFxuJHBvcG92ZXItaGVhZGVyLXBhZGRpbmcteTogLjYyNXJlbTtcXG4kcG9wb3Zlci1oZWFkZXItcGFkZGluZy14OiAxLjI1cmVtO1xcblxcbi8vJHBvcG92ZXItYm9keS1jb2xvcjogICAgICAgICAgICAgICAgJGJvZHktY29sb3IgIWRlZmF1bHQ7XFxuJHBvcG92ZXItYm9keS1wYWRkaW5nLXk6IC42MjVyZW07XFxuJHBvcG92ZXItYm9keS1wYWRkaW5nLXg6IDEuMjVyZW07XFxuXFxuLy8kcG9wb3Zlci1hcnJvdy13aWR0aDogICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcbi8vJHBvcG92ZXItYXJyb3ctaGVpZ2h0OiAgICAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1hcnJvdy1jb2xvcjogICAgICAgICAgICAgICAkcG9wb3Zlci1iZyAhZGVmYXVsdDtcXG5cXG4vLyRwb3BvdmVyLWFycm93LW91dGVyLWNvbG9yOiAgICAgICAgIGZhZGUtaW4oJHBvcG92ZXItYm9yZGVyLWNvbG9yLCAuMDUpICFkZWZhdWx0O1xcblxcbi8vIEJhZGdlc1xcbiRiYWRnZS1mb250LXNpemU6IC42MjVyZW0gIWRlZmF1bHQ7XFxuJGJhZGdlLWZvbnQtd2VpZ2h0OiA1MDAgIWRlZmF1bHQ7XFxuJGJhZGdlLXBhZGRpbmcteTogLjI1cmVtO1xcbiRiYWRnZS1wYWRkaW5nLXg6IC41cmVtO1xcbi8vJGJhZGdlLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuXFxuLy8kYmFkZ2UtcGlsbC1wYWRkaW5nLXg6ICAgICAgICAgICAgICAuNmVtICFkZWZhdWx0O1xcbi8vJGJhZGdlLXBpbGwtYm9yZGVyLXJhZGl1czogICAgICAgICAgMTByZW0gIWRlZmF1bHQ7XFxuXFxuLy8gTW9kYWxzXFxuJG1vZGFsLWlubmVyLXBhZGRpbmc6IDEuODc1cmVtO1xcblxcbi8vJG1vZGFsLWRpYWxvZy1tYXJnaW46ICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuLy8kbW9kYWwtZGlhbG9nLW1hcmdpbi15LXNtLXVwOiAxLjc1cmVtICFkZWZhdWx0O1xcblxcbi8vJG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XFxuXFxuLy8kbW9kYWwtY29udGVudC1iZzogICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJG1vZGFsLWNvbnRlbnQtYm9yZGVyLWNvbG9yOiBub25lO1xcbi8vJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoOiAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXhzOiAwIDhweCAxNnB4IDAgcmdiYSgwLCAwLCAwLCAuMSk7XFxuJG1vZGFsLWNvbnRlbnQtYm94LXNoYWRvdy1zbS11cDogMCA4cHggMTZweCAwIHJnYmEoMCwgMCwgMCwgLjEpO1xcblxcbi8vJG1vZGFsLWJhY2tkcm9wLWJnOiAgICAgICAgICAgJGJsYWNrICFkZWZhdWx0O1xcbi8vJG1vZGFsLWJhY2tkcm9wLW9wYWNpdHk6ICAgICAgLjUgIWRlZmF1bHQ7XFxuJG1vZGFsLWhlYWRlci1ib3JkZXItY29sb3I6IG5vbmU7XFxuLy8kbW9kYWwtZm9vdGVyLWJvcmRlci1jb2xvcjogICAkbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4vLyRtb2RhbC1oZWFkZXItYm9yZGVyLXdpZHRoOiAgICRtb2RhbC1jb250ZW50LWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRtb2RhbC1mb290ZXItYm9yZGVyLXdpZHRoOiAgICRtb2RhbC1oZWFkZXItYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRtb2RhbC1oZWFkZXItcGFkZGluZzogJG1vZGFsLWlubmVyLXBhZGRpbmc7XFxuXFxuJG1vZGFsLWxnOiA5MDBweDtcXG4kbW9kYWwtbWQ6IDY4MHB4O1xcbiRtb2RhbC1zbTogNDAwcHg7XFxuXFxuLy8kbW9kYWwtdHJhbnNpdGlvbjogICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0gLjNzIGVhc2Utb3V0ICFkZWZhdWx0O1xcblxcbi8vIEFsZXJ0c1xcbiRhbGVydC1wYWRkaW5nLXk6IDFyZW0gIWRlZmF1bHQ7XFxuJGFsZXJ0LXBhZGRpbmcteDogMXJlbTtcXG4vLyRhbGVydC1tYXJnaW4tYm90dG9tOiAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kYWxlcnQtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRhbGVydC1saW5rLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xcbiRhbGVydC1ib3JkZXItd2lkdGg6IC4xMjVyZW07XFxuXFxuLy8kYWxlcnQtYmctbGV2ZWw6ICAgICAgICAgICAgICAgICAgICAtMTAgIWRlZmF1bHQ7XFxuLy8kYWxlcnQtYm9yZGVyLWxldmVsOiAgICAgICAgICAgICAgICAtOSAhZGVmYXVsdDtcXG4vLyRhbGVydC1jb2xvci1sZXZlbDogICAgICAgICAgICAgICAgIDYgIWRlZmF1bHQ7XFxuXFxuLy8gUHJvZ3Jlc3MgYmFyc1xcbi8vJHByb2dyZXNzLWhlaWdodDogICAgICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1mb250LXNpemU6ICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAuNzUpICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWJnOiAgICAgICAgICAgICAgICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYm94LXNoYWRvdzogICAgICAgICAgICAgICBpbnNldCAwIC4xcmVtIC4xcmVtIHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLWNvbG9yOiAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLWJnOiAgICAgICAgICAgICAgICAgICB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWJhci1hbmltYXRpb24tdGltaW5nOiAgICAgMXMgbGluZWFyIGluZmluaXRlICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWJhci10cmFuc2l0aW9uOiAgICAgICAgICAgd2lkdGggLjZzIGVhc2UgIWRlZmF1bHQ7XFxuXFxuLy8gTGlzdCBncm91cFxcbi8vJGxpc3QtZ3JvdXAtYmc6ICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kbGlzdC1ncm91cC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJGxpc3QtZ3JvdXAtYm9yZGVyLXJhZGl1czogICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuXFxuJGxpc3QtZ3JvdXAtaXRlbS1wYWRkaW5nLXk6ICRpbnB1dC1wYWRkaW5nLXk7XFxuJGxpc3QtZ3JvdXAtaXRlbS1wYWRkaW5nLXg6ICRpbnB1dC1wYWRkaW5nLXg7XFxuXFxuJGxpc3QtZ3JvdXAtaG92ZXItYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuLy8kbGlzdC1ncm91cC1hY3RpdmUtY29sb3I6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3RpdmUtYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuLy8kbGlzdC1ncm91cC1hY3RpdmUtYm9yZGVyLWNvbG9yOiAgICAkbGlzdC1ncm91cC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuXFxuJGxpc3QtZ3JvdXAtZGlzYWJsZWQtY29sb3I6ICRsaWdodC1ncmF5O1xcbi8vJGxpc3QtZ3JvdXAtZGlzYWJsZWQtYmc6ICAgICAgICAgICAgJGxpc3QtZ3JvdXAtYmcgIWRlZmF1bHQ7XFxuXFxuLy8kbGlzdC1ncm91cC1hY3Rpb24tY29sb3I6ICAgICAgICAgICAkZ3JheS03MDAgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYWN0aW9uLWhvdmVyLWNvbG9yOiAkd2hpdGU7XFxuXFxuJGxpc3QtZ3JvdXAtYWN0aW9uLWFjdGl2ZS1jb2xvcjogJGJvZHktY29sb3IgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYWN0aW9uLWFjdGl2ZS1iZzogJGdyYXktMjAwICFkZWZhdWx0O1xcblxcbi8vIEltYWdlIHRodW1ibmFpbHNcXG4kdGh1bWJuYWlsLXBhZGRpbmc6IDA7XFxuLy8kdGh1bWJuYWlsLWJnOiAgICAgICAgICAgICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcXG4vLyR0aHVtYm5haWwtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJHRodW1ibmFpbC1ib3JkZXItY29sb3I6ICRsaWdodC1ncmF5O1xcbi8vJHRodW1ibmFpbC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJHRodW1ibmFpbC1ib3gtc2hhZG93OiBub25lO1xcblxcbi8vIEZpZ3VyZXNcXG4vLyRmaWd1cmUtY2FwdGlvbi1mb250LXNpemU6ICAgICAgICAgIDkwJSAhZGVmYXVsdDtcXG4kZmlndXJlLWNhcHRpb24tY29sb3I6ICRtZWRpdW0tZ3JheTtcXG5cXG4vLyBCcmVhZGNydW1ic1xcbiRicmVhZGNydW1iLXBhZGRpbmcteTogLjMxMjVyZW07XFxuJGJyZWFkY3J1bWItcGFkZGluZy14OiAuMzEyNXJlbTtcXG4kYnJlYWRjcnVtYi1pdGVtLXBhZGRpbmc6IC4zcmVtO1xcblxcbiRicmVhZGNydW1iLW1hcmdpbi1ib3R0b206IDA7XFxuXFxuJGJyZWFkY3J1bWItYmc6IG5vbmU7XFxuJGJyZWFkY3J1bWItZGl2aWRlci1jb2xvcjogJGRhcmstZ3JheTtcXG4kYnJlYWRjcnVtYi1hY3RpdmUtY29sb3I6ICRleHRyYS1kYXJrLWdyYXk7XFxuJGJyZWFkY3J1bWItZGl2aWRlcjogXFxcIi9cXFwiO1xcblxcbi8vIENhcm91c2VsXFxuLy8kY2Fyb3VzZWwtY29udHJvbC1jb2xvcjogICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtY29udHJvbC13aWR0aDogICAgICAgICAgICAxNSUgIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtY29udHJvbC1vcGFjaXR5OiAgICAgICAgICAuNSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3Itd2lkdGg6ICAgICAgICAgIDMwcHggIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtaW5kaWNhdG9yLWhlaWdodDogICAgICAgICAzcHggIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtaW5kaWNhdG9yLXNwYWNlcjogICAgICAgICAzcHggIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtaW5kaWNhdG9yLWFjdGl2ZS1iZzogICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtY2FwdGlvbi13aWR0aDogICAgICAgICAgICA3MCUgIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtY2FwdGlvbi1jb2xvcjogICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtY29udHJvbC1pY29uLXdpZHRoOiAgICAgICAyMHB4ICFkZWZhdWx0O1xcblxcbi8vJGNhcm91c2VsLWNvbnRyb2wtcHJldi1pY29uLWJnOiAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGZpbGw9JyN7JGNhcm91c2VsLWNvbnRyb2wtY29sb3J9JyB2aWV3Qm94PScwIDAgOCA4JyUzRSUzQ3BhdGggZD0nTTUuMjUgMGwtNCA0IDQgNCAxLjUtMS41LTIuNS0yLjUgMi41LTIuNS0xLjUtMS41eicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jb250cm9sLW5leHQtaWNvbi1iZzogICAgIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBmaWxsPScjeyRjYXJvdXNlbC1jb250cm9sLWNvbG9yfScgdmlld0JveD0nMCAwIDggOCclM0UlM0NwYXRoIGQ9J00yLjc1IDBsLTEuNSAxLjUgMi41IDIuNS0yLjUgMi41IDEuNSAxLjUgNC00LTQtNHonLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtdHJhbnNpdGlvbjogICAgICAgICAgICAgICB0cmFuc2Zvcm0gLjZzIGVhc2UgIWRlZmF1bHQ7XFxuXFxuLy8gQ2xvc2VcXG4vLyRjbG9zZS1mb250LXNpemU6ICAgICAgICAgICAgICRmb250LXNpemUtYmFzZSAqIDEuNSAhZGVmYXVsdDtcXG4vLyRjbG9zZS1mb250LXdlaWdodDogICAgICAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xcbi8vJGNsb3NlLWNvbG9yOiAgICAgICAgICAgICAgICAgJGJsYWNrICFkZWZhdWx0O1xcbi8vJGNsb3NlLXRleHQtc2hhZG93OiAgICAgICAgICAgMCAxcHggMCAkd2hpdGUgIWRlZmF1bHQ7XFxuXFxuLy8gQ29kZVxcbi8vJGNvZGUtZm9udC1zaXplOiAgICAgICAgICAgICAgICAgICAgODcuNSUgIWRlZmF1bHQ7XFxuJGNvZGUtY29sb3I6ICRib2R5LWNvbG9yO1xcblxcbi8vJGtiZC1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgICAgICAgLjJyZW0gIWRlZmF1bHQ7XFxuLy8ka2JkLXBhZGRpbmcteDogICAgICAgICAgICAgICAgICAgICAuNHJlbSAhZGVmYXVsdDtcXG4vLyRrYmQtZm9udC1zaXplOiAgICAgICAgICAgICAgICAgICAgICRjb2RlLWZvbnQtc2l6ZSAhZGVmYXVsdDtcXG4ka2JkLWNvbG9yOiAkd2hpdGU7XFxuJGtiZC1iZzogJGV4dHJhLWRhcmstZ3JheTtcXG5cXG4kcHJlLWNvbG9yOiAkYm9keS1jb2xvcjtcXG4vLyRwcmUtc2Nyb2xsYWJsZS1tYXgtaGVpZ2h0OiAgICAgICAgIDM0MHB4ICFkZWZhdWx0O1xcblxcbi8vIFByaW50aW5nXFxuLy8kcHJpbnQtcGFnZS1zaXplOiAgICAgICAgICAgICAgICAgICBhMyAhZGVmYXVsdDtcXG4vLyRwcmludC1ib2R5LW1pbi13aWR0aDogICAgICAgICAgICAgIG1hcC1nZXQoJGdyaWQtYnJlYWtwb2ludHMsIFxcXCJsZ1xcXCIpICFkZWZhdWx0O1xcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5hbGlnbi1iYXNlbGluZXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZSAhaW1wb3J0YW50fS5hbGlnbi10b3B7dmVydGljYWwtYWxpZ246dG9wICFpbXBvcnRhbnR9LmFsaWduLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUgIWltcG9ydGFudH0uYWxpZ24tYm90dG9te3ZlcnRpY2FsLWFsaWduOmJvdHRvbSAhaW1wb3J0YW50fS5hbGlnbi10ZXh0LWJvdHRvbXt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbSAhaW1wb3J0YW50fS5hbGlnbi10ZXh0LXRvcHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcCAhaW1wb3J0YW50fS5iZy1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6IzI1YjlkNyAhaW1wb3J0YW50fWEuYmctcHJpbWFyeTpob3ZlcixhLmJnLXByaW1hcnk6Zm9jdXMsYnV0dG9uLmJnLXByaW1hcnk6aG92ZXIsYnV0dG9uLmJnLXByaW1hcnk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojMWU5NGFiICFpbXBvcnRhbnR9LmJnLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOiM2Yzg2OGUgIWltcG9ydGFudH1hLmJnLXNlY29uZGFyeTpob3ZlcixhLmJnLXNlY29uZGFyeTpmb2N1cyxidXR0b24uYmctc2Vjb25kYXJ5OmhvdmVyLGJ1dHRvbi5iZy1zZWNvbmRhcnk6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojNTY2YjcxICFpbXBvcnRhbnR9LmJnLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojNzBiNTgwICFpbXBvcnRhbnR9YS5iZy1zdWNjZXNzOmhvdmVyLGEuYmctc3VjY2Vzczpmb2N1cyxidXR0b24uYmctc3VjY2Vzczpob3ZlcixidXR0b24uYmctc3VjY2Vzczpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiM1MzlmNjQgIWltcG9ydGFudH0uYmctaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiMyNWI5ZDcgIWltcG9ydGFudH1hLmJnLWluZm86aG92ZXIsYS5iZy1pbmZvOmZvY3VzLGJ1dHRvbi5iZy1pbmZvOmhvdmVyLGJ1dHRvbi5iZy1pbmZvOmZvY3Vze2JhY2tncm91bmQtY29sb3I6IzFlOTRhYiAhaW1wb3J0YW50fS5iZy13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2ZhYjAwMCAhaW1wb3J0YW50fWEuYmctd2FybmluZzpob3ZlcixhLmJnLXdhcm5pbmc6Zm9jdXMsYnV0dG9uLmJnLXdhcm5pbmc6aG92ZXIsYnV0dG9uLmJnLXdhcm5pbmc6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojYzc4YzAwICFpbXBvcnRhbnR9LmJnLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNTRjM2UgIWltcG9ydGFudH1hLmJnLWRhbmdlcjpob3ZlcixhLmJnLWRhbmdlcjpmb2N1cyxidXR0b24uYmctZGFuZ2VyOmhvdmVyLGJ1dHRvbi5iZy1kYW5nZXI6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojZjIxZjBlICFpbXBvcnRhbnR9LmJnLWxpZ2h0e2JhY2tncm91bmQtY29sb3I6I2ZhZmJmYyAhaW1wb3J0YW50fWEuYmctbGlnaHQ6aG92ZXIsYS5iZy1saWdodDpmb2N1cyxidXR0b24uYmctbGlnaHQ6aG92ZXIsYnV0dG9uLmJnLWxpZ2h0OmZvY3Vze2JhY2tncm91bmQtY29sb3I6I2RhZTJlOSAhaW1wb3J0YW50fS5iZy1kYXJre2JhY2tncm91bmQtY29sb3I6IzM2M2E0MSAhaW1wb3J0YW50fWEuYmctZGFyazpob3ZlcixhLmJnLWRhcms6Zm9jdXMsYnV0dG9uLmJnLWRhcms6aG92ZXIsYnV0dG9uLmJnLWRhcms6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojMWYyMTI1ICFpbXBvcnRhbnR9LmJnLXdoaXRle2JhY2tncm91bmQtY29sb3I6I2ZmZiAhaW1wb3J0YW50fS5iZy10cmFuc3BhcmVudHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50ICFpbXBvcnRhbnR9LmJvcmRlcntib3JkZXI6MXB4IHNvbGlkICNiYmNkZDIgIWltcG9ydGFudH0uYm9yZGVyLXRvcHtib3JkZXItdG9wOjFweCBzb2xpZCAjYmJjZGQyICFpbXBvcnRhbnR9LmJvcmRlci1yaWdodHtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNiYmNkZDIgIWltcG9ydGFudH0uYm9yZGVyLWJvdHRvbXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjYmJjZGQyICFpbXBvcnRhbnR9LmJvcmRlci1sZWZ0e2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjYmJjZGQyICFpbXBvcnRhbnR9LmJvcmRlci0we2JvcmRlcjowICFpbXBvcnRhbnR9LmJvcmRlci10b3AtMHtib3JkZXItdG9wOjAgIWltcG9ydGFudH0uYm9yZGVyLXJpZ2h0LTB7Ym9yZGVyLXJpZ2h0OjAgIWltcG9ydGFudH0uYm9yZGVyLWJvdHRvbS0we2JvcmRlci1ib3R0b206MCAhaW1wb3J0YW50fS5ib3JkZXItbGVmdC0we2JvcmRlci1sZWZ0OjAgIWltcG9ydGFudH0uYm9yZGVyLXByaW1hcnl7Ym9yZGVyLWNvbG9yOiMyNWI5ZDcgIWltcG9ydGFudH0uYm9yZGVyLXNlY29uZGFyeXtib3JkZXItY29sb3I6IzZjODY4ZSAhaW1wb3J0YW50fS5ib3JkZXItc3VjY2Vzc3tib3JkZXItY29sb3I6IzcwYjU4MCAhaW1wb3J0YW50fS5ib3JkZXItaW5mb3tib3JkZXItY29sb3I6IzI1YjlkNyAhaW1wb3J0YW50fS5ib3JkZXItd2FybmluZ3tib3JkZXItY29sb3I6I2ZhYjAwMCAhaW1wb3J0YW50fS5ib3JkZXItZGFuZ2Vye2JvcmRlci1jb2xvcjojZjU0YzNlICFpbXBvcnRhbnR9LmJvcmRlci1saWdodHtib3JkZXItY29sb3I6I2ZhZmJmYyAhaW1wb3J0YW50fS5ib3JkZXItZGFya3tib3JkZXItY29sb3I6IzM2M2E0MSAhaW1wb3J0YW50fS5ib3JkZXItd2hpdGV7Ym9yZGVyLWNvbG9yOiNmZmYgIWltcG9ydGFudH0ucm91bmRlZHtib3JkZXItcmFkaXVzOjRweCAhaW1wb3J0YW50fS5yb3VuZGVkLXRvcHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweCAhaW1wb3J0YW50O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweCAhaW1wb3J0YW50fS5yb3VuZGVkLXJpZ2h0e2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweCAhaW1wb3J0YW50O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweCAhaW1wb3J0YW50fS5yb3VuZGVkLWJvdHRvbXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHggIWltcG9ydGFudDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweCAhaW1wb3J0YW50fS5yb3VuZGVkLWxlZnR7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHggIWltcG9ydGFudDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweCAhaW1wb3J0YW50fS5yb3VuZGVkLWNpcmNsZXtib3JkZXItcmFkaXVzOjUwJSAhaW1wb3J0YW50fS5yb3VuZGVkLTB7Ym9yZGVyLXJhZGl1czowICFpbXBvcnRhbnR9LmNsZWFyZml4OjphZnRlcntkaXNwbGF5OmJsb2NrO2NsZWFyOmJvdGg7Y29udGVudDpcXFwiXFxcIn0uZC1ub25le2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fS5kLWlubGluZXtkaXNwbGF5OmlubGluZSAhaW1wb3J0YW50fS5kLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayAhaW1wb3J0YW50fS5kLWJsb2Nre2Rpc3BsYXk6YmxvY2sgIWltcG9ydGFudH0uZC10YWJsZXtkaXNwbGF5OnRhYmxlICFpbXBvcnRhbnR9LmQtdGFibGUtcm93e2Rpc3BsYXk6dGFibGUtcm93ICFpbXBvcnRhbnR9LmQtdGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwgIWltcG9ydGFudH0uZC1mbGV4e2Rpc3BsYXk6ZmxleCAhaW1wb3J0YW50fS5kLWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXggIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDogNTQ0cHgpey5kLXNtLW5vbmV7ZGlzcGxheTpub25lICFpbXBvcnRhbnR9LmQtc20taW5saW5le2Rpc3BsYXk6aW5saW5lICFpbXBvcnRhbnR9LmQtc20taW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrICFpbXBvcnRhbnR9LmQtc20tYmxvY2t7ZGlzcGxheTpibG9jayAhaW1wb3J0YW50fS5kLXNtLXRhYmxle2Rpc3BsYXk6dGFibGUgIWltcG9ydGFudH0uZC1zbS10YWJsZS1yb3d7ZGlzcGxheTp0YWJsZS1yb3cgIWltcG9ydGFudH0uZC1zbS10YWJsZS1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbCAhaW1wb3J0YW50fS5kLXNtLWZsZXh7ZGlzcGxheTpmbGV4ICFpbXBvcnRhbnR9LmQtc20taW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpey5kLW1kLW5vbmV7ZGlzcGxheTpub25lICFpbXBvcnRhbnR9LmQtbWQtaW5saW5le2Rpc3BsYXk6aW5saW5lICFpbXBvcnRhbnR9LmQtbWQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrICFpbXBvcnRhbnR9LmQtbWQtYmxvY2t7ZGlzcGxheTpibG9jayAhaW1wb3J0YW50fS5kLW1kLXRhYmxle2Rpc3BsYXk6dGFibGUgIWltcG9ydGFudH0uZC1tZC10YWJsZS1yb3d7ZGlzcGxheTp0YWJsZS1yb3cgIWltcG9ydGFudH0uZC1tZC10YWJsZS1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbCAhaW1wb3J0YW50fS5kLW1kLWZsZXh7ZGlzcGxheTpmbGV4ICFpbXBvcnRhbnR9LmQtbWQtaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDogMTAyNHB4KXsuZC1sZy1ub25le2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fS5kLWxnLWlubGluZXtkaXNwbGF5OmlubGluZSAhaW1wb3J0YW50fS5kLWxnLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayAhaW1wb3J0YW50fS5kLWxnLWJsb2Nre2Rpc3BsYXk6YmxvY2sgIWltcG9ydGFudH0uZC1sZy10YWJsZXtkaXNwbGF5OnRhYmxlICFpbXBvcnRhbnR9LmQtbGctdGFibGUtcm93e2Rpc3BsYXk6dGFibGUtcm93ICFpbXBvcnRhbnR9LmQtbGctdGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwgIWltcG9ydGFudH0uZC1sZy1mbGV4e2Rpc3BsYXk6ZmxleCAhaW1wb3J0YW50fS5kLWxnLWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXggIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDEzMDBweCl7LmQteGwtbm9uZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0uZC14bC1pbmxpbmV7ZGlzcGxheTppbmxpbmUgIWltcG9ydGFudH0uZC14bC1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2sgIWltcG9ydGFudH0uZC14bC1ibG9ja3tkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnR9LmQteGwtdGFibGV7ZGlzcGxheTp0YWJsZSAhaW1wb3J0YW50fS5kLXhsLXRhYmxlLXJvd3tkaXNwbGF5OnRhYmxlLXJvdyAhaW1wb3J0YW50fS5kLXhsLXRhYmxlLWNlbGx7ZGlzcGxheTp0YWJsZS1jZWxsICFpbXBvcnRhbnR9LmQteGwtZmxleHtkaXNwbGF5OmZsZXggIWltcG9ydGFudH0uZC14bC1pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4ICFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOiAxNjAwcHgpey5kLXh4bC1ub25le2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fS5kLXh4bC1pbmxpbmV7ZGlzcGxheTppbmxpbmUgIWltcG9ydGFudH0uZC14eGwtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrICFpbXBvcnRhbnR9LmQteHhsLWJsb2Nre2Rpc3BsYXk6YmxvY2sgIWltcG9ydGFudH0uZC14eGwtdGFibGV7ZGlzcGxheTp0YWJsZSAhaW1wb3J0YW50fS5kLXh4bC10YWJsZS1yb3d7ZGlzcGxheTp0YWJsZS1yb3cgIWltcG9ydGFudH0uZC14eGwtdGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwgIWltcG9ydGFudH0uZC14eGwtZmxleHtkaXNwbGF5OmZsZXggIWltcG9ydGFudH0uZC14eGwtaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCAhaW1wb3J0YW50fX1AbWVkaWEgcHJpbnR7LmQtcHJpbnQtbm9uZXtkaXNwbGF5Om5vbmUgIWltcG9ydGFudH0uZC1wcmludC1pbmxpbmV7ZGlzcGxheTppbmxpbmUgIWltcG9ydGFudH0uZC1wcmludC1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2sgIWltcG9ydGFudH0uZC1wcmludC1ibG9ja3tkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnR9LmQtcHJpbnQtdGFibGV7ZGlzcGxheTp0YWJsZSAhaW1wb3J0YW50fS5kLXByaW50LXRhYmxlLXJvd3tkaXNwbGF5OnRhYmxlLXJvdyAhaW1wb3J0YW50fS5kLXByaW50LXRhYmxlLWNlbGx7ZGlzcGxheTp0YWJsZS1jZWxsICFpbXBvcnRhbnR9LmQtcHJpbnQtZmxleHtkaXNwbGF5OmZsZXggIWltcG9ydGFudH0uZC1wcmludC1pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4ICFpbXBvcnRhbnR9fS5lbWJlZC1yZXNwb25zaXZle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtwYWRkaW5nOjA7b3ZlcmZsb3c6aGlkZGVufS5lbWJlZC1yZXNwb25zaXZlOjpiZWZvcmV7ZGlzcGxheTpibG9jaztjb250ZW50OlxcXCJcXFwifS5lbWJlZC1yZXNwb25zaXZlIC5lbWJlZC1yZXNwb25zaXZlLWl0ZW0sLmVtYmVkLXJlc3BvbnNpdmUgaWZyYW1lLC5lbWJlZC1yZXNwb25zaXZlIGVtYmVkLC5lbWJlZC1yZXNwb25zaXZlIG9iamVjdCwuZW1iZWQtcmVzcG9uc2l2ZSB2aWRlb3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6MH0uZW1iZWQtcmVzcG9uc2l2ZS0yMWJ5OTo6YmVmb3Jle3BhZGRpbmctdG9wOjQyLjg1NzE0JX0uZW1iZWQtcmVzcG9uc2l2ZS0xNmJ5OTo6YmVmb3Jle3BhZGRpbmctdG9wOjU2LjI1JX0uZW1iZWQtcmVzcG9uc2l2ZS00YnkzOjpiZWZvcmV7cGFkZGluZy10b3A6NzUlfS5lbWJlZC1yZXNwb25zaXZlLTFieTE6OmJlZm9yZXtwYWRkaW5nLXRvcDoxMDAlfS5mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3cgIWltcG9ydGFudH0uZmxleC1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uICFpbXBvcnRhbnR9LmZsZXgtcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UgIWltcG9ydGFudH0uZmxleC1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50fS5mbGV4LXdyYXB7ZmxleC13cmFwOndyYXAgIWltcG9ydGFudH0uZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCAhaW1wb3J0YW50fS5mbGV4LXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZCAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4gIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0ICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1jZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoICFpbXBvcnRhbnR9LmFsaWduLXNlbGYtYXV0b3thbGlnbi1zZWxmOmF1dG8gIWltcG9ydGFudH0uYWxpZ24tc2VsZi1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24tc2VsZi1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUgIWltcG9ydGFudH0uYWxpZ24tc2VsZi1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCAhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOiA1NDRweCl7LmZsZXgtc20tcm93e2ZsZXgtZGlyZWN0aW9uOnJvdyAhaW1wb3J0YW50fS5mbGV4LXNtLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4gIWltcG9ydGFudH0uZmxleC1zbS1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSAhaW1wb3J0YW50fS5mbGV4LXNtLWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnR9LmZsZXgtc20td3JhcHtmbGV4LXdyYXA6d3JhcCAhaW1wb3J0YW50fS5mbGV4LXNtLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwICFpbXBvcnRhbnR9LmZsZXgtc20td3JhcC1yZXZlcnNle2ZsZXgtd3JhcDp3cmFwLXJldmVyc2UgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXNtLXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0ICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1zbS1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1zbS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlciAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtc20tYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtc20tYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtc20tc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1zbS1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtc20tY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1zbS1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1zbS1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ggIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1zbS1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1zbS1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXNtLWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXNtLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtc20tYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtc20tc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ggIWltcG9ydGFudH0uYWxpZ24tc2VsZi1zbS1hdXRve2FsaWduLXNlbGY6YXV0byAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLXNtLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLXNtLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kICFpbXBvcnRhbnR9LmFsaWduLXNlbGYtc20tY2VudGVye2FsaWduLXNlbGY6Y2VudGVyICFpbXBvcnRhbnR9LmFsaWduLXNlbGYtc20tYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLXNtLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoICFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOiA3NjhweCl7LmZsZXgtbWQtcm93e2ZsZXgtZGlyZWN0aW9uOnJvdyAhaW1wb3J0YW50fS5mbGV4LW1kLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4gIWltcG9ydGFudH0uZmxleC1tZC1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSAhaW1wb3J0YW50fS5mbGV4LW1kLWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlICFpbXBvcnRhbnR9LmZsZXgtbWQtd3JhcHtmbGV4LXdyYXA6d3JhcCAhaW1wb3J0YW50fS5mbGV4LW1kLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwICFpbXBvcnRhbnR9LmZsZXgtbWQtd3JhcC1yZXZlcnNle2ZsZXgtd3JhcDp3cmFwLXJldmVyc2UgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LW1kLXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0ICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1tZC1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1tZC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlciAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtbWQtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtbWQtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtbWQtc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1tZC1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtbWQtY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1tZC1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy1tZC1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ggIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1tZC1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1tZC1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LW1kLWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LW1kLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtbWQtYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtbWQtc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ggIWltcG9ydGFudH0uYWxpZ24tc2VsZi1tZC1hdXRve2FsaWduLXNlbGY6YXV0byAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLW1kLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLW1kLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kICFpbXBvcnRhbnR9LmFsaWduLXNlbGYtbWQtY2VudGVye2FsaWduLXNlbGY6Y2VudGVyICFpbXBvcnRhbnR9LmFsaWduLXNlbGYtbWQtYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLW1kLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoICFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpey5mbGV4LWxnLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3cgIWltcG9ydGFudH0uZmxleC1sZy1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uICFpbXBvcnRhbnR9LmZsZXgtbGctcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UgIWltcG9ydGFudH0uZmxleC1sZy1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50fS5mbGV4LWxnLXdyYXB7ZmxleC13cmFwOndyYXAgIWltcG9ydGFudH0uZmxleC1sZy1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCAhaW1wb3J0YW50fS5mbGV4LWxnLXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1sZy1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtbGctZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZCAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtbGctY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LWxnLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4gIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LWxnLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLWxnLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtbGctZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLWxnLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtbGctYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUgIWltcG9ydGFudH0uYWxpZ24taXRlbXMtbGctc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtbGctc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0ICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQtbGctZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1sZy1jZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC1sZy1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LWxnLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LWxnLXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoICFpbXBvcnRhbnR9LmFsaWduLXNlbGYtbGctYXV0b3thbGlnbi1zZWxmOmF1dG8gIWltcG9ydGFudH0uYWxpZ24tc2VsZi1sZy1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24tc2VsZi1sZy1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLWxnLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLWxnLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUgIWltcG9ydGFudH0uYWxpZ24tc2VsZi1sZy1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDogMTMwMHB4KXsuZmxleC14bC1yb3d7ZmxleC1kaXJlY3Rpb246cm93ICFpbXBvcnRhbnR9LmZsZXgteGwtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiAhaW1wb3J0YW50fS5mbGV4LXhsLXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlICFpbXBvcnRhbnR9LmZsZXgteGwtY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2UgIWltcG9ydGFudH0uZmxleC14bC13cmFwe2ZsZXgtd3JhcDp3cmFwICFpbXBvcnRhbnR9LmZsZXgteGwtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAgIWltcG9ydGFudH0uZmxleC14bC13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSAhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQteGwtc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXhsLWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXhsLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC14bC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC14bC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZCAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy14bC1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0ICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLXhsLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZCAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy14bC1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLXhsLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lICFpbXBvcnRhbnR9LmFsaWduLWl0ZW1zLXhsLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXhsLXN0YXJ0e2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXhsLWVuZHthbGlnbi1jb250ZW50OmZsZXgtZW5kICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQteGwtY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQteGwtYmV0d2VlbnthbGlnbi1jb250ZW50OnNwYWNlLWJldHdlZW4gIWltcG9ydGFudH0uYWxpZ24tY29udGVudC14bC1hcm91bmR7YWxpZ24tY29udGVudDpzcGFjZS1hcm91bmQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC14bC1zdHJldGNoe2FsaWduLWNvbnRlbnQ6c3RyZXRjaCAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLXhsLWF1dG97YWxpZ24tc2VsZjphdXRvICFpbXBvcnRhbnR9LmFsaWduLXNlbGYteGwtc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0ICFpbXBvcnRhbnR9LmFsaWduLXNlbGYteGwtZW5ke2FsaWduLXNlbGY6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24tc2VsZi14bC1jZW50ZXJ7YWxpZ24tc2VsZjpjZW50ZXIgIWltcG9ydGFudH0uYWxpZ24tc2VsZi14bC1iYXNlbGluZXthbGlnbi1zZWxmOmJhc2VsaW5lICFpbXBvcnRhbnR9LmFsaWduLXNlbGYteGwtc3RyZXRjaHthbGlnbi1zZWxmOnN0cmV0Y2ggIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDE2MDBweCl7LmZsZXgteHhsLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3cgIWltcG9ydGFudH0uZmxleC14eGwtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiAhaW1wb3J0YW50fS5mbGV4LXh4bC1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSAhaW1wb3J0YW50fS5mbGV4LXh4bC1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50fS5mbGV4LXh4bC13cmFwe2ZsZXgtd3JhcDp3cmFwICFpbXBvcnRhbnR9LmZsZXgteHhsLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwICFpbXBvcnRhbnR9LmZsZXgteHhsLXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC14eGwtc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXh4bC1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC14eGwtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIgIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXh4bC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC14eGwtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMteHhsLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24taXRlbXMteHhsLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZCAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy14eGwtY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciAhaW1wb3J0YW50fS5hbGlnbi1pdGVtcy14eGwtYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUgIWltcG9ydGFudH0uYWxpZ24taXRlbXMteHhsLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXh4bC1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC14eGwtZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24tY29udGVudC14eGwtY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQteHhsLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuICFpbXBvcnRhbnR9LmFsaWduLWNvbnRlbnQteHhsLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCAhaW1wb3J0YW50fS5hbGlnbi1jb250ZW50LXh4bC1zdHJldGNoe2FsaWduLWNvbnRlbnQ6c3RyZXRjaCAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLXh4bC1hdXRve2FsaWduLXNlbGY6YXV0byAhaW1wb3J0YW50fS5hbGlnbi1zZWxmLXh4bC1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQgIWltcG9ydGFudH0uYWxpZ24tc2VsZi14eGwtZW5ke2FsaWduLXNlbGY6ZmxleC1lbmQgIWltcG9ydGFudH0uYWxpZ24tc2VsZi14eGwtY2VudGVye2FsaWduLXNlbGY6Y2VudGVyICFpbXBvcnRhbnR9LmFsaWduLXNlbGYteHhsLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUgIWltcG9ydGFudH0uYWxpZ24tc2VsZi14eGwtc3RyZXRjaHthbGlnbi1zZWxmOnN0cmV0Y2ggIWltcG9ydGFudH19LmZsb2F0LWxlZnR7ZmxvYXQ6bGVmdCAhaW1wb3J0YW50fS5mbG9hdC1yaWdodHtmbG9hdDpyaWdodCAhaW1wb3J0YW50fS5mbG9hdC1ub25le2Zsb2F0Om5vbmUgIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDogNTQ0cHgpey5mbG9hdC1zbS1sZWZ0e2Zsb2F0OmxlZnQgIWltcG9ydGFudH0uZmxvYXQtc20tcmlnaHR7ZmxvYXQ6cmlnaHQgIWltcG9ydGFudH0uZmxvYXQtc20tbm9uZXtmbG9hdDpub25lICFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOiA3NjhweCl7LmZsb2F0LW1kLWxlZnR7ZmxvYXQ6bGVmdCAhaW1wb3J0YW50fS5mbG9hdC1tZC1yaWdodHtmbG9hdDpyaWdodCAhaW1wb3J0YW50fS5mbG9hdC1tZC1ub25le2Zsb2F0Om5vbmUgIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDEwMjRweCl7LmZsb2F0LWxnLWxlZnR7ZmxvYXQ6bGVmdCAhaW1wb3J0YW50fS5mbG9hdC1sZy1yaWdodHtmbG9hdDpyaWdodCAhaW1wb3J0YW50fS5mbG9hdC1sZy1ub25le2Zsb2F0Om5vbmUgIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDEzMDBweCl7LmZsb2F0LXhsLWxlZnR7ZmxvYXQ6bGVmdCAhaW1wb3J0YW50fS5mbG9hdC14bC1yaWdodHtmbG9hdDpyaWdodCAhaW1wb3J0YW50fS5mbG9hdC14bC1ub25le2Zsb2F0Om5vbmUgIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDE2MDBweCl7LmZsb2F0LXh4bC1sZWZ0e2Zsb2F0OmxlZnQgIWltcG9ydGFudH0uZmxvYXQteHhsLXJpZ2h0e2Zsb2F0OnJpZ2h0ICFpbXBvcnRhbnR9LmZsb2F0LXh4bC1ub25le2Zsb2F0Om5vbmUgIWltcG9ydGFudH19LnBvc2l0aW9uLXN0YXRpY3twb3NpdGlvbjpzdGF0aWMgIWltcG9ydGFudH0ucG9zaXRpb24tcmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmUgIWltcG9ydGFudH0ucG9zaXRpb24tYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGUgIWltcG9ydGFudH0ucG9zaXRpb24tZml4ZWR7cG9zaXRpb246Zml4ZWQgIWltcG9ydGFudH0ucG9zaXRpb24tc3RpY2t5e3Bvc2l0aW9uOnN0aWNreSAhaW1wb3J0YW50fS5maXhlZC10b3B7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6MDtsZWZ0OjA7ei1pbmRleDoxMDMwfS5maXhlZC1ib3R0b217cG9zaXRpb246Zml4ZWQ7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7ei1pbmRleDoxMDMwfUBzdXBwb3J0cyAocG9zaXRpb246IHN0aWNreSl7LnN0aWNreS10b3B7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MTAyMH19LnNyLW9ubHl7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O2hlaWdodDoxcHg7cGFkZGluZzowO292ZXJmbG93OmhpZGRlbjtjbGlwOnJlY3QoMCwgMCwgMCwgMCk7d2hpdGUtc3BhY2U6bm93cmFwO2NsaXAtcGF0aDppbnNldCg1MCUpO2JvcmRlcjowfS5zci1vbmx5LWZvY3VzYWJsZTphY3RpdmUsLnNyLW9ubHktZm9jdXNhYmxlOmZvY3Vze3Bvc2l0aW9uOnN0YXRpYzt3aWR0aDphdXRvO2hlaWdodDphdXRvO292ZXJmbG93OnZpc2libGU7Y2xpcDphdXRvO3doaXRlLXNwYWNlOm5vcm1hbDtjbGlwLXBhdGg6bm9uZX0udy0yNXt3aWR0aDoyNSUgIWltcG9ydGFudH0udy01MHt3aWR0aDo1MCUgIWltcG9ydGFudH0udy03NXt3aWR0aDo3NSUgIWltcG9ydGFudH0udy0xMDB7d2lkdGg6MTAwJSAhaW1wb3J0YW50fS5oLTI1e2hlaWdodDoyNSUgIWltcG9ydGFudH0uaC01MHtoZWlnaHQ6NTAlICFpbXBvcnRhbnR9LmgtNzV7aGVpZ2h0Ojc1JSAhaW1wb3J0YW50fS5oLTEwMHtoZWlnaHQ6MTAwJSAhaW1wb3J0YW50fS5tdy0xMDB7bWF4LXdpZHRoOjEwMCUgIWltcG9ydGFudH0ubWgtMTAwe21heC1oZWlnaHQ6MTAwJSAhaW1wb3J0YW50fS5tLTB7bWFyZ2luOjAgIWltcG9ydGFudH0ubXQtMCwubXktMHttYXJnaW4tdG9wOjAgIWltcG9ydGFudH0ubXItMCwubXgtMHttYXJnaW4tcmlnaHQ6MCAhaW1wb3J0YW50fS5tYi0wLC5teS0we21hcmdpbi1ib3R0b206MCAhaW1wb3J0YW50fS5tbC0wLC5teC0we21hcmdpbi1sZWZ0OjAgIWltcG9ydGFudH0ubS0xe21hcmdpbjouMzEyNXJlbSAhaW1wb3J0YW50fS5tdC0xLC5teS0xe21hcmdpbi10b3A6LjMxMjVyZW0gIWltcG9ydGFudH0ubXItMSwubXgtMXttYXJnaW4tcmlnaHQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubWItMSwubXktMXttYXJnaW4tYm90dG9tOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm1sLTEsLm14LTF7bWFyZ2luLWxlZnQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubS0ye21hcmdpbjouNjI1cmVtICFpbXBvcnRhbnR9Lm10LTIsLm15LTJ7bWFyZ2luLXRvcDouNjI1cmVtICFpbXBvcnRhbnR9Lm1yLTIsLm14LTJ7bWFyZ2luLXJpZ2h0Oi42MjVyZW0gIWltcG9ydGFudH0ubWItMiwubXktMnttYXJnaW4tYm90dG9tOi42MjVyZW0gIWltcG9ydGFudH0ubWwtMiwubXgtMnttYXJnaW4tbGVmdDouNjI1cmVtICFpbXBvcnRhbnR9Lm0tM3ttYXJnaW46LjkzNzVyZW0gIWltcG9ydGFudH0ubXQtMywubXktM3ttYXJnaW4tdG9wOi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1yLTMsLm14LTN7bWFyZ2luLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1iLTMsLm15LTN7bWFyZ2luLWJvdHRvbTouOTM3NXJlbSAhaW1wb3J0YW50fS5tbC0zLC5teC0ze21hcmdpbi1sZWZ0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm0tNHttYXJnaW46MS44NzVyZW0gIWltcG9ydGFudH0ubXQtNCwubXktNHttYXJnaW4tdG9wOjEuODc1cmVtICFpbXBvcnRhbnR9Lm1yLTQsLm14LTR7bWFyZ2luLXJpZ2h0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm1iLTQsLm15LTR7bWFyZ2luLWJvdHRvbToxLjg3NXJlbSAhaW1wb3J0YW50fS5tbC00LC5teC00e21hcmdpbi1sZWZ0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm0tNXttYXJnaW46My43NXJlbSAhaW1wb3J0YW50fS5tdC01LC5teS01e21hcmdpbi10b3A6My43NXJlbSAhaW1wb3J0YW50fS5tci01LC5teC01e21hcmdpbi1yaWdodDozLjc1cmVtICFpbXBvcnRhbnR9Lm1iLTUsLm15LTV7bWFyZ2luLWJvdHRvbTozLjc1cmVtICFpbXBvcnRhbnR9Lm1sLTUsLm14LTV7bWFyZ2luLWxlZnQ6My43NXJlbSAhaW1wb3J0YW50fS5wLTB7cGFkZGluZzowICFpbXBvcnRhbnR9LnB0LTAsLnB5LTB7cGFkZGluZy10b3A6MCAhaW1wb3J0YW50fS5wci0wLC5weC0we3BhZGRpbmctcmlnaHQ6MCAhaW1wb3J0YW50fS5wYi0wLC5weS0we3BhZGRpbmctYm90dG9tOjAgIWltcG9ydGFudH0ucGwtMCwucHgtMHtwYWRkaW5nLWxlZnQ6MCAhaW1wb3J0YW50fS5wLTF7cGFkZGluZzouMzEyNXJlbSAhaW1wb3J0YW50fS5wdC0xLC5weS0xe3BhZGRpbmctdG9wOi4zMTI1cmVtICFpbXBvcnRhbnR9LnByLTEsLnB4LTF7cGFkZGluZy1yaWdodDouMzEyNXJlbSAhaW1wb3J0YW50fS5wYi0xLC5weS0xe3BhZGRpbmctYm90dG9tOi4zMTI1cmVtICFpbXBvcnRhbnR9LnBsLTEsLnB4LTF7cGFkZGluZy1sZWZ0Oi4zMTI1cmVtICFpbXBvcnRhbnR9LnAtMntwYWRkaW5nOi42MjVyZW0gIWltcG9ydGFudH0ucHQtMiwucHktMntwYWRkaW5nLXRvcDouNjI1cmVtICFpbXBvcnRhbnR9LnByLTIsLnB4LTJ7cGFkZGluZy1yaWdodDouNjI1cmVtICFpbXBvcnRhbnR9LnBiLTIsLnB5LTJ7cGFkZGluZy1ib3R0b206LjYyNXJlbSAhaW1wb3J0YW50fS5wbC0yLC5weC0ye3BhZGRpbmctbGVmdDouNjI1cmVtICFpbXBvcnRhbnR9LnAtM3twYWRkaW5nOi45Mzc1cmVtICFpbXBvcnRhbnR9LnB0LTMsLnB5LTN7cGFkZGluZy10b3A6LjkzNzVyZW0gIWltcG9ydGFudH0ucHItMywucHgtM3twYWRkaW5nLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9LnBiLTMsLnB5LTN7cGFkZGluZy1ib3R0b206LjkzNzVyZW0gIWltcG9ydGFudH0ucGwtMywucHgtM3twYWRkaW5nLWxlZnQ6LjkzNzVyZW0gIWltcG9ydGFudH0ucC00e3BhZGRpbmc6MS44NzVyZW0gIWltcG9ydGFudH0ucHQtNCwucHktNHtwYWRkaW5nLXRvcDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wci00LC5weC00e3BhZGRpbmctcmlnaHQ6MS44NzVyZW0gIWltcG9ydGFudH0ucGItNCwucHktNHtwYWRkaW5nLWJvdHRvbToxLjg3NXJlbSAhaW1wb3J0YW50fS5wbC00LC5weC00e3BhZGRpbmctbGVmdDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wLTV7cGFkZGluZzozLjc1cmVtICFpbXBvcnRhbnR9LnB0LTUsLnB5LTV7cGFkZGluZy10b3A6My43NXJlbSAhaW1wb3J0YW50fS5wci01LC5weC01e3BhZGRpbmctcmlnaHQ6My43NXJlbSAhaW1wb3J0YW50fS5wYi01LC5weS01e3BhZGRpbmctYm90dG9tOjMuNzVyZW0gIWltcG9ydGFudH0ucGwtNSwucHgtNXtwYWRkaW5nLWxlZnQ6My43NXJlbSAhaW1wb3J0YW50fS5tLWF1dG97bWFyZ2luOmF1dG8gIWltcG9ydGFudH0ubXQtYXV0bywubXktYXV0b3ttYXJnaW4tdG9wOmF1dG8gIWltcG9ydGFudH0ubXItYXV0bywubXgtYXV0b3ttYXJnaW4tcmlnaHQ6YXV0byAhaW1wb3J0YW50fS5tYi1hdXRvLC5teS1hdXRve21hcmdpbi1ib3R0b206YXV0byAhaW1wb3J0YW50fS5tbC1hdXRvLC5teC1hdXRve21hcmdpbi1sZWZ0OmF1dG8gIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDogNTQ0cHgpey5tLXNtLTB7bWFyZ2luOjAgIWltcG9ydGFudH0ubXQtc20tMCwubXktc20tMHttYXJnaW4tdG9wOjAgIWltcG9ydGFudH0ubXItc20tMCwubXgtc20tMHttYXJnaW4tcmlnaHQ6MCAhaW1wb3J0YW50fS5tYi1zbS0wLC5teS1zbS0we21hcmdpbi1ib3R0b206MCAhaW1wb3J0YW50fS5tbC1zbS0wLC5teC1zbS0we21hcmdpbi1sZWZ0OjAgIWltcG9ydGFudH0ubS1zbS0xe21hcmdpbjouMzEyNXJlbSAhaW1wb3J0YW50fS5tdC1zbS0xLC5teS1zbS0xe21hcmdpbi10b3A6LjMxMjVyZW0gIWltcG9ydGFudH0ubXItc20tMSwubXgtc20tMXttYXJnaW4tcmlnaHQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubWItc20tMSwubXktc20tMXttYXJnaW4tYm90dG9tOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm1sLXNtLTEsLm14LXNtLTF7bWFyZ2luLWxlZnQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubS1zbS0ye21hcmdpbjouNjI1cmVtICFpbXBvcnRhbnR9Lm10LXNtLTIsLm15LXNtLTJ7bWFyZ2luLXRvcDouNjI1cmVtICFpbXBvcnRhbnR9Lm1yLXNtLTIsLm14LXNtLTJ7bWFyZ2luLXJpZ2h0Oi42MjVyZW0gIWltcG9ydGFudH0ubWItc20tMiwubXktc20tMnttYXJnaW4tYm90dG9tOi42MjVyZW0gIWltcG9ydGFudH0ubWwtc20tMiwubXgtc20tMnttYXJnaW4tbGVmdDouNjI1cmVtICFpbXBvcnRhbnR9Lm0tc20tM3ttYXJnaW46LjkzNzVyZW0gIWltcG9ydGFudH0ubXQtc20tMywubXktc20tM3ttYXJnaW4tdG9wOi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1yLXNtLTMsLm14LXNtLTN7bWFyZ2luLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1iLXNtLTMsLm15LXNtLTN7bWFyZ2luLWJvdHRvbTouOTM3NXJlbSAhaW1wb3J0YW50fS5tbC1zbS0zLC5teC1zbS0ze21hcmdpbi1sZWZ0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm0tc20tNHttYXJnaW46MS44NzVyZW0gIWltcG9ydGFudH0ubXQtc20tNCwubXktc20tNHttYXJnaW4tdG9wOjEuODc1cmVtICFpbXBvcnRhbnR9Lm1yLXNtLTQsLm14LXNtLTR7bWFyZ2luLXJpZ2h0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm1iLXNtLTQsLm15LXNtLTR7bWFyZ2luLWJvdHRvbToxLjg3NXJlbSAhaW1wb3J0YW50fS5tbC1zbS00LC5teC1zbS00e21hcmdpbi1sZWZ0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm0tc20tNXttYXJnaW46My43NXJlbSAhaW1wb3J0YW50fS5tdC1zbS01LC5teS1zbS01e21hcmdpbi10b3A6My43NXJlbSAhaW1wb3J0YW50fS5tci1zbS01LC5teC1zbS01e21hcmdpbi1yaWdodDozLjc1cmVtICFpbXBvcnRhbnR9Lm1iLXNtLTUsLm15LXNtLTV7bWFyZ2luLWJvdHRvbTozLjc1cmVtICFpbXBvcnRhbnR9Lm1sLXNtLTUsLm14LXNtLTV7bWFyZ2luLWxlZnQ6My43NXJlbSAhaW1wb3J0YW50fS5wLXNtLTB7cGFkZGluZzowICFpbXBvcnRhbnR9LnB0LXNtLTAsLnB5LXNtLTB7cGFkZGluZy10b3A6MCAhaW1wb3J0YW50fS5wci1zbS0wLC5weC1zbS0we3BhZGRpbmctcmlnaHQ6MCAhaW1wb3J0YW50fS5wYi1zbS0wLC5weS1zbS0we3BhZGRpbmctYm90dG9tOjAgIWltcG9ydGFudH0ucGwtc20tMCwucHgtc20tMHtwYWRkaW5nLWxlZnQ6MCAhaW1wb3J0YW50fS5wLXNtLTF7cGFkZGluZzouMzEyNXJlbSAhaW1wb3J0YW50fS5wdC1zbS0xLC5weS1zbS0xe3BhZGRpbmctdG9wOi4zMTI1cmVtICFpbXBvcnRhbnR9LnByLXNtLTEsLnB4LXNtLTF7cGFkZGluZy1yaWdodDouMzEyNXJlbSAhaW1wb3J0YW50fS5wYi1zbS0xLC5weS1zbS0xe3BhZGRpbmctYm90dG9tOi4zMTI1cmVtICFpbXBvcnRhbnR9LnBsLXNtLTEsLnB4LXNtLTF7cGFkZGluZy1sZWZ0Oi4zMTI1cmVtICFpbXBvcnRhbnR9LnAtc20tMntwYWRkaW5nOi42MjVyZW0gIWltcG9ydGFudH0ucHQtc20tMiwucHktc20tMntwYWRkaW5nLXRvcDouNjI1cmVtICFpbXBvcnRhbnR9LnByLXNtLTIsLnB4LXNtLTJ7cGFkZGluZy1yaWdodDouNjI1cmVtICFpbXBvcnRhbnR9LnBiLXNtLTIsLnB5LXNtLTJ7cGFkZGluZy1ib3R0b206LjYyNXJlbSAhaW1wb3J0YW50fS5wbC1zbS0yLC5weC1zbS0ye3BhZGRpbmctbGVmdDouNjI1cmVtICFpbXBvcnRhbnR9LnAtc20tM3twYWRkaW5nOi45Mzc1cmVtICFpbXBvcnRhbnR9LnB0LXNtLTMsLnB5LXNtLTN7cGFkZGluZy10b3A6LjkzNzVyZW0gIWltcG9ydGFudH0ucHItc20tMywucHgtc20tM3twYWRkaW5nLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9LnBiLXNtLTMsLnB5LXNtLTN7cGFkZGluZy1ib3R0b206LjkzNzVyZW0gIWltcG9ydGFudH0ucGwtc20tMywucHgtc20tM3twYWRkaW5nLWxlZnQ6LjkzNzVyZW0gIWltcG9ydGFudH0ucC1zbS00e3BhZGRpbmc6MS44NzVyZW0gIWltcG9ydGFudH0ucHQtc20tNCwucHktc20tNHtwYWRkaW5nLXRvcDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wci1zbS00LC5weC1zbS00e3BhZGRpbmctcmlnaHQ6MS44NzVyZW0gIWltcG9ydGFudH0ucGItc20tNCwucHktc20tNHtwYWRkaW5nLWJvdHRvbToxLjg3NXJlbSAhaW1wb3J0YW50fS5wbC1zbS00LC5weC1zbS00e3BhZGRpbmctbGVmdDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wLXNtLTV7cGFkZGluZzozLjc1cmVtICFpbXBvcnRhbnR9LnB0LXNtLTUsLnB5LXNtLTV7cGFkZGluZy10b3A6My43NXJlbSAhaW1wb3J0YW50fS5wci1zbS01LC5weC1zbS01e3BhZGRpbmctcmlnaHQ6My43NXJlbSAhaW1wb3J0YW50fS5wYi1zbS01LC5weS1zbS01e3BhZGRpbmctYm90dG9tOjMuNzVyZW0gIWltcG9ydGFudH0ucGwtc20tNSwucHgtc20tNXtwYWRkaW5nLWxlZnQ6My43NXJlbSAhaW1wb3J0YW50fS5tLXNtLWF1dG97bWFyZ2luOmF1dG8gIWltcG9ydGFudH0ubXQtc20tYXV0bywubXktc20tYXV0b3ttYXJnaW4tdG9wOmF1dG8gIWltcG9ydGFudH0ubXItc20tYXV0bywubXgtc20tYXV0b3ttYXJnaW4tcmlnaHQ6YXV0byAhaW1wb3J0YW50fS5tYi1zbS1hdXRvLC5teS1zbS1hdXRve21hcmdpbi1ib3R0b206YXV0byAhaW1wb3J0YW50fS5tbC1zbS1hdXRvLC5teC1zbS1hdXRve21hcmdpbi1sZWZ0OmF1dG8gIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KXsubS1tZC0we21hcmdpbjowICFpbXBvcnRhbnR9Lm10LW1kLTAsLm15LW1kLTB7bWFyZ2luLXRvcDowICFpbXBvcnRhbnR9Lm1yLW1kLTAsLm14LW1kLTB7bWFyZ2luLXJpZ2h0OjAgIWltcG9ydGFudH0ubWItbWQtMCwubXktbWQtMHttYXJnaW4tYm90dG9tOjAgIWltcG9ydGFudH0ubWwtbWQtMCwubXgtbWQtMHttYXJnaW4tbGVmdDowICFpbXBvcnRhbnR9Lm0tbWQtMXttYXJnaW46LjMxMjVyZW0gIWltcG9ydGFudH0ubXQtbWQtMSwubXktbWQtMXttYXJnaW4tdG9wOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm1yLW1kLTEsLm14LW1kLTF7bWFyZ2luLXJpZ2h0Oi4zMTI1cmVtICFpbXBvcnRhbnR9Lm1iLW1kLTEsLm15LW1kLTF7bWFyZ2luLWJvdHRvbTouMzEyNXJlbSAhaW1wb3J0YW50fS5tbC1tZC0xLC5teC1tZC0xe21hcmdpbi1sZWZ0Oi4zMTI1cmVtICFpbXBvcnRhbnR9Lm0tbWQtMnttYXJnaW46LjYyNXJlbSAhaW1wb3J0YW50fS5tdC1tZC0yLC5teS1tZC0ye21hcmdpbi10b3A6LjYyNXJlbSAhaW1wb3J0YW50fS5tci1tZC0yLC5teC1tZC0ye21hcmdpbi1yaWdodDouNjI1cmVtICFpbXBvcnRhbnR9Lm1iLW1kLTIsLm15LW1kLTJ7bWFyZ2luLWJvdHRvbTouNjI1cmVtICFpbXBvcnRhbnR9Lm1sLW1kLTIsLm14LW1kLTJ7bWFyZ2luLWxlZnQ6LjYyNXJlbSAhaW1wb3J0YW50fS5tLW1kLTN7bWFyZ2luOi45Mzc1cmVtICFpbXBvcnRhbnR9Lm10LW1kLTMsLm15LW1kLTN7bWFyZ2luLXRvcDouOTM3NXJlbSAhaW1wb3J0YW50fS5tci1tZC0zLC5teC1tZC0ze21hcmdpbi1yaWdodDouOTM3NXJlbSAhaW1wb3J0YW50fS5tYi1tZC0zLC5teS1tZC0ze21hcmdpbi1ib3R0b206LjkzNzVyZW0gIWltcG9ydGFudH0ubWwtbWQtMywubXgtbWQtM3ttYXJnaW4tbGVmdDouOTM3NXJlbSAhaW1wb3J0YW50fS5tLW1kLTR7bWFyZ2luOjEuODc1cmVtICFpbXBvcnRhbnR9Lm10LW1kLTQsLm15LW1kLTR7bWFyZ2luLXRvcDoxLjg3NXJlbSAhaW1wb3J0YW50fS5tci1tZC00LC5teC1tZC00e21hcmdpbi1yaWdodDoxLjg3NXJlbSAhaW1wb3J0YW50fS5tYi1tZC00LC5teS1tZC00e21hcmdpbi1ib3R0b206MS44NzVyZW0gIWltcG9ydGFudH0ubWwtbWQtNCwubXgtbWQtNHttYXJnaW4tbGVmdDoxLjg3NXJlbSAhaW1wb3J0YW50fS5tLW1kLTV7bWFyZ2luOjMuNzVyZW0gIWltcG9ydGFudH0ubXQtbWQtNSwubXktbWQtNXttYXJnaW4tdG9wOjMuNzVyZW0gIWltcG9ydGFudH0ubXItbWQtNSwubXgtbWQtNXttYXJnaW4tcmlnaHQ6My43NXJlbSAhaW1wb3J0YW50fS5tYi1tZC01LC5teS1tZC01e21hcmdpbi1ib3R0b206My43NXJlbSAhaW1wb3J0YW50fS5tbC1tZC01LC5teC1tZC01e21hcmdpbi1sZWZ0OjMuNzVyZW0gIWltcG9ydGFudH0ucC1tZC0we3BhZGRpbmc6MCAhaW1wb3J0YW50fS5wdC1tZC0wLC5weS1tZC0we3BhZGRpbmctdG9wOjAgIWltcG9ydGFudH0ucHItbWQtMCwucHgtbWQtMHtwYWRkaW5nLXJpZ2h0OjAgIWltcG9ydGFudH0ucGItbWQtMCwucHktbWQtMHtwYWRkaW5nLWJvdHRvbTowICFpbXBvcnRhbnR9LnBsLW1kLTAsLnB4LW1kLTB7cGFkZGluZy1sZWZ0OjAgIWltcG9ydGFudH0ucC1tZC0xe3BhZGRpbmc6LjMxMjVyZW0gIWltcG9ydGFudH0ucHQtbWQtMSwucHktbWQtMXtwYWRkaW5nLXRvcDouMzEyNXJlbSAhaW1wb3J0YW50fS5wci1tZC0xLC5weC1tZC0xe3BhZGRpbmctcmlnaHQ6LjMxMjVyZW0gIWltcG9ydGFudH0ucGItbWQtMSwucHktbWQtMXtwYWRkaW5nLWJvdHRvbTouMzEyNXJlbSAhaW1wb3J0YW50fS5wbC1tZC0xLC5weC1tZC0xe3BhZGRpbmctbGVmdDouMzEyNXJlbSAhaW1wb3J0YW50fS5wLW1kLTJ7cGFkZGluZzouNjI1cmVtICFpbXBvcnRhbnR9LnB0LW1kLTIsLnB5LW1kLTJ7cGFkZGluZy10b3A6LjYyNXJlbSAhaW1wb3J0YW50fS5wci1tZC0yLC5weC1tZC0ye3BhZGRpbmctcmlnaHQ6LjYyNXJlbSAhaW1wb3J0YW50fS5wYi1tZC0yLC5weS1tZC0ye3BhZGRpbmctYm90dG9tOi42MjVyZW0gIWltcG9ydGFudH0ucGwtbWQtMiwucHgtbWQtMntwYWRkaW5nLWxlZnQ6LjYyNXJlbSAhaW1wb3J0YW50fS5wLW1kLTN7cGFkZGluZzouOTM3NXJlbSAhaW1wb3J0YW50fS5wdC1tZC0zLC5weS1tZC0ze3BhZGRpbmctdG9wOi45Mzc1cmVtICFpbXBvcnRhbnR9LnByLW1kLTMsLnB4LW1kLTN7cGFkZGluZy1yaWdodDouOTM3NXJlbSAhaW1wb3J0YW50fS5wYi1tZC0zLC5weS1tZC0ze3BhZGRpbmctYm90dG9tOi45Mzc1cmVtICFpbXBvcnRhbnR9LnBsLW1kLTMsLnB4LW1kLTN7cGFkZGluZy1sZWZ0Oi45Mzc1cmVtICFpbXBvcnRhbnR9LnAtbWQtNHtwYWRkaW5nOjEuODc1cmVtICFpbXBvcnRhbnR9LnB0LW1kLTQsLnB5LW1kLTR7cGFkZGluZy10b3A6MS44NzVyZW0gIWltcG9ydGFudH0ucHItbWQtNCwucHgtbWQtNHtwYWRkaW5nLXJpZ2h0OjEuODc1cmVtICFpbXBvcnRhbnR9LnBiLW1kLTQsLnB5LW1kLTR7cGFkZGluZy1ib3R0b206MS44NzVyZW0gIWltcG9ydGFudH0ucGwtbWQtNCwucHgtbWQtNHtwYWRkaW5nLWxlZnQ6MS44NzVyZW0gIWltcG9ydGFudH0ucC1tZC01e3BhZGRpbmc6My43NXJlbSAhaW1wb3J0YW50fS5wdC1tZC01LC5weS1tZC01e3BhZGRpbmctdG9wOjMuNzVyZW0gIWltcG9ydGFudH0ucHItbWQtNSwucHgtbWQtNXtwYWRkaW5nLXJpZ2h0OjMuNzVyZW0gIWltcG9ydGFudH0ucGItbWQtNSwucHktbWQtNXtwYWRkaW5nLWJvdHRvbTozLjc1cmVtICFpbXBvcnRhbnR9LnBsLW1kLTUsLnB4LW1kLTV7cGFkZGluZy1sZWZ0OjMuNzVyZW0gIWltcG9ydGFudH0ubS1tZC1hdXRve21hcmdpbjphdXRvICFpbXBvcnRhbnR9Lm10LW1kLWF1dG8sLm15LW1kLWF1dG97bWFyZ2luLXRvcDphdXRvICFpbXBvcnRhbnR9Lm1yLW1kLWF1dG8sLm14LW1kLWF1dG97bWFyZ2luLXJpZ2h0OmF1dG8gIWltcG9ydGFudH0ubWItbWQtYXV0bywubXktbWQtYXV0b3ttYXJnaW4tYm90dG9tOmF1dG8gIWltcG9ydGFudH0ubWwtbWQtYXV0bywubXgtbWQtYXV0b3ttYXJnaW4tbGVmdDphdXRvICFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOiAxMDI0cHgpey5tLWxnLTB7bWFyZ2luOjAgIWltcG9ydGFudH0ubXQtbGctMCwubXktbGctMHttYXJnaW4tdG9wOjAgIWltcG9ydGFudH0ubXItbGctMCwubXgtbGctMHttYXJnaW4tcmlnaHQ6MCAhaW1wb3J0YW50fS5tYi1sZy0wLC5teS1sZy0we21hcmdpbi1ib3R0b206MCAhaW1wb3J0YW50fS5tbC1sZy0wLC5teC1sZy0we21hcmdpbi1sZWZ0OjAgIWltcG9ydGFudH0ubS1sZy0xe21hcmdpbjouMzEyNXJlbSAhaW1wb3J0YW50fS5tdC1sZy0xLC5teS1sZy0xe21hcmdpbi10b3A6LjMxMjVyZW0gIWltcG9ydGFudH0ubXItbGctMSwubXgtbGctMXttYXJnaW4tcmlnaHQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubWItbGctMSwubXktbGctMXttYXJnaW4tYm90dG9tOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm1sLWxnLTEsLm14LWxnLTF7bWFyZ2luLWxlZnQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubS1sZy0ye21hcmdpbjouNjI1cmVtICFpbXBvcnRhbnR9Lm10LWxnLTIsLm15LWxnLTJ7bWFyZ2luLXRvcDouNjI1cmVtICFpbXBvcnRhbnR9Lm1yLWxnLTIsLm14LWxnLTJ7bWFyZ2luLXJpZ2h0Oi42MjVyZW0gIWltcG9ydGFudH0ubWItbGctMiwubXktbGctMnttYXJnaW4tYm90dG9tOi42MjVyZW0gIWltcG9ydGFudH0ubWwtbGctMiwubXgtbGctMnttYXJnaW4tbGVmdDouNjI1cmVtICFpbXBvcnRhbnR9Lm0tbGctM3ttYXJnaW46LjkzNzVyZW0gIWltcG9ydGFudH0ubXQtbGctMywubXktbGctM3ttYXJnaW4tdG9wOi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1yLWxnLTMsLm14LWxnLTN7bWFyZ2luLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1iLWxnLTMsLm15LWxnLTN7bWFyZ2luLWJvdHRvbTouOTM3NXJlbSAhaW1wb3J0YW50fS5tbC1sZy0zLC5teC1sZy0ze21hcmdpbi1sZWZ0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm0tbGctNHttYXJnaW46MS44NzVyZW0gIWltcG9ydGFudH0ubXQtbGctNCwubXktbGctNHttYXJnaW4tdG9wOjEuODc1cmVtICFpbXBvcnRhbnR9Lm1yLWxnLTQsLm14LWxnLTR7bWFyZ2luLXJpZ2h0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm1iLWxnLTQsLm15LWxnLTR7bWFyZ2luLWJvdHRvbToxLjg3NXJlbSAhaW1wb3J0YW50fS5tbC1sZy00LC5teC1sZy00e21hcmdpbi1sZWZ0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm0tbGctNXttYXJnaW46My43NXJlbSAhaW1wb3J0YW50fS5tdC1sZy01LC5teS1sZy01e21hcmdpbi10b3A6My43NXJlbSAhaW1wb3J0YW50fS5tci1sZy01LC5teC1sZy01e21hcmdpbi1yaWdodDozLjc1cmVtICFpbXBvcnRhbnR9Lm1iLWxnLTUsLm15LWxnLTV7bWFyZ2luLWJvdHRvbTozLjc1cmVtICFpbXBvcnRhbnR9Lm1sLWxnLTUsLm14LWxnLTV7bWFyZ2luLWxlZnQ6My43NXJlbSAhaW1wb3J0YW50fS5wLWxnLTB7cGFkZGluZzowICFpbXBvcnRhbnR9LnB0LWxnLTAsLnB5LWxnLTB7cGFkZGluZy10b3A6MCAhaW1wb3J0YW50fS5wci1sZy0wLC5weC1sZy0we3BhZGRpbmctcmlnaHQ6MCAhaW1wb3J0YW50fS5wYi1sZy0wLC5weS1sZy0we3BhZGRpbmctYm90dG9tOjAgIWltcG9ydGFudH0ucGwtbGctMCwucHgtbGctMHtwYWRkaW5nLWxlZnQ6MCAhaW1wb3J0YW50fS5wLWxnLTF7cGFkZGluZzouMzEyNXJlbSAhaW1wb3J0YW50fS5wdC1sZy0xLC5weS1sZy0xe3BhZGRpbmctdG9wOi4zMTI1cmVtICFpbXBvcnRhbnR9LnByLWxnLTEsLnB4LWxnLTF7cGFkZGluZy1yaWdodDouMzEyNXJlbSAhaW1wb3J0YW50fS5wYi1sZy0xLC5weS1sZy0xe3BhZGRpbmctYm90dG9tOi4zMTI1cmVtICFpbXBvcnRhbnR9LnBsLWxnLTEsLnB4LWxnLTF7cGFkZGluZy1sZWZ0Oi4zMTI1cmVtICFpbXBvcnRhbnR9LnAtbGctMntwYWRkaW5nOi42MjVyZW0gIWltcG9ydGFudH0ucHQtbGctMiwucHktbGctMntwYWRkaW5nLXRvcDouNjI1cmVtICFpbXBvcnRhbnR9LnByLWxnLTIsLnB4LWxnLTJ7cGFkZGluZy1yaWdodDouNjI1cmVtICFpbXBvcnRhbnR9LnBiLWxnLTIsLnB5LWxnLTJ7cGFkZGluZy1ib3R0b206LjYyNXJlbSAhaW1wb3J0YW50fS5wbC1sZy0yLC5weC1sZy0ye3BhZGRpbmctbGVmdDouNjI1cmVtICFpbXBvcnRhbnR9LnAtbGctM3twYWRkaW5nOi45Mzc1cmVtICFpbXBvcnRhbnR9LnB0LWxnLTMsLnB5LWxnLTN7cGFkZGluZy10b3A6LjkzNzVyZW0gIWltcG9ydGFudH0ucHItbGctMywucHgtbGctM3twYWRkaW5nLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9LnBiLWxnLTMsLnB5LWxnLTN7cGFkZGluZy1ib3R0b206LjkzNzVyZW0gIWltcG9ydGFudH0ucGwtbGctMywucHgtbGctM3twYWRkaW5nLWxlZnQ6LjkzNzVyZW0gIWltcG9ydGFudH0ucC1sZy00e3BhZGRpbmc6MS44NzVyZW0gIWltcG9ydGFudH0ucHQtbGctNCwucHktbGctNHtwYWRkaW5nLXRvcDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wci1sZy00LC5weC1sZy00e3BhZGRpbmctcmlnaHQ6MS44NzVyZW0gIWltcG9ydGFudH0ucGItbGctNCwucHktbGctNHtwYWRkaW5nLWJvdHRvbToxLjg3NXJlbSAhaW1wb3J0YW50fS5wbC1sZy00LC5weC1sZy00e3BhZGRpbmctbGVmdDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wLWxnLTV7cGFkZGluZzozLjc1cmVtICFpbXBvcnRhbnR9LnB0LWxnLTUsLnB5LWxnLTV7cGFkZGluZy10b3A6My43NXJlbSAhaW1wb3J0YW50fS5wci1sZy01LC5weC1sZy01e3BhZGRpbmctcmlnaHQ6My43NXJlbSAhaW1wb3J0YW50fS5wYi1sZy01LC5weS1sZy01e3BhZGRpbmctYm90dG9tOjMuNzVyZW0gIWltcG9ydGFudH0ucGwtbGctNSwucHgtbGctNXtwYWRkaW5nLWxlZnQ6My43NXJlbSAhaW1wb3J0YW50fS5tLWxnLWF1dG97bWFyZ2luOmF1dG8gIWltcG9ydGFudH0ubXQtbGctYXV0bywubXktbGctYXV0b3ttYXJnaW4tdG9wOmF1dG8gIWltcG9ydGFudH0ubXItbGctYXV0bywubXgtbGctYXV0b3ttYXJnaW4tcmlnaHQ6YXV0byAhaW1wb3J0YW50fS5tYi1sZy1hdXRvLC5teS1sZy1hdXRve21hcmdpbi1ib3R0b206YXV0byAhaW1wb3J0YW50fS5tbC1sZy1hdXRvLC5teC1sZy1hdXRve21hcmdpbi1sZWZ0OmF1dG8gIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDEzMDBweCl7Lm0teGwtMHttYXJnaW46MCAhaW1wb3J0YW50fS5tdC14bC0wLC5teS14bC0we21hcmdpbi10b3A6MCAhaW1wb3J0YW50fS5tci14bC0wLC5teC14bC0we21hcmdpbi1yaWdodDowICFpbXBvcnRhbnR9Lm1iLXhsLTAsLm15LXhsLTB7bWFyZ2luLWJvdHRvbTowICFpbXBvcnRhbnR9Lm1sLXhsLTAsLm14LXhsLTB7bWFyZ2luLWxlZnQ6MCAhaW1wb3J0YW50fS5tLXhsLTF7bWFyZ2luOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm10LXhsLTEsLm15LXhsLTF7bWFyZ2luLXRvcDouMzEyNXJlbSAhaW1wb3J0YW50fS5tci14bC0xLC5teC14bC0xe21hcmdpbi1yaWdodDouMzEyNXJlbSAhaW1wb3J0YW50fS5tYi14bC0xLC5teS14bC0xe21hcmdpbi1ib3R0b206LjMxMjVyZW0gIWltcG9ydGFudH0ubWwteGwtMSwubXgteGwtMXttYXJnaW4tbGVmdDouMzEyNXJlbSAhaW1wb3J0YW50fS5tLXhsLTJ7bWFyZ2luOi42MjVyZW0gIWltcG9ydGFudH0ubXQteGwtMiwubXkteGwtMnttYXJnaW4tdG9wOi42MjVyZW0gIWltcG9ydGFudH0ubXIteGwtMiwubXgteGwtMnttYXJnaW4tcmlnaHQ6LjYyNXJlbSAhaW1wb3J0YW50fS5tYi14bC0yLC5teS14bC0ye21hcmdpbi1ib3R0b206LjYyNXJlbSAhaW1wb3J0YW50fS5tbC14bC0yLC5teC14bC0ye21hcmdpbi1sZWZ0Oi42MjVyZW0gIWltcG9ydGFudH0ubS14bC0ze21hcmdpbjouOTM3NXJlbSAhaW1wb3J0YW50fS5tdC14bC0zLC5teS14bC0ze21hcmdpbi10b3A6LjkzNzVyZW0gIWltcG9ydGFudH0ubXIteGwtMywubXgteGwtM3ttYXJnaW4tcmlnaHQ6LjkzNzVyZW0gIWltcG9ydGFudH0ubWIteGwtMywubXkteGwtM3ttYXJnaW4tYm90dG9tOi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1sLXhsLTMsLm14LXhsLTN7bWFyZ2luLWxlZnQ6LjkzNzVyZW0gIWltcG9ydGFudH0ubS14bC00e21hcmdpbjoxLjg3NXJlbSAhaW1wb3J0YW50fS5tdC14bC00LC5teS14bC00e21hcmdpbi10b3A6MS44NzVyZW0gIWltcG9ydGFudH0ubXIteGwtNCwubXgteGwtNHttYXJnaW4tcmlnaHQ6MS44NzVyZW0gIWltcG9ydGFudH0ubWIteGwtNCwubXkteGwtNHttYXJnaW4tYm90dG9tOjEuODc1cmVtICFpbXBvcnRhbnR9Lm1sLXhsLTQsLm14LXhsLTR7bWFyZ2luLWxlZnQ6MS44NzVyZW0gIWltcG9ydGFudH0ubS14bC01e21hcmdpbjozLjc1cmVtICFpbXBvcnRhbnR9Lm10LXhsLTUsLm15LXhsLTV7bWFyZ2luLXRvcDozLjc1cmVtICFpbXBvcnRhbnR9Lm1yLXhsLTUsLm14LXhsLTV7bWFyZ2luLXJpZ2h0OjMuNzVyZW0gIWltcG9ydGFudH0ubWIteGwtNSwubXkteGwtNXttYXJnaW4tYm90dG9tOjMuNzVyZW0gIWltcG9ydGFudH0ubWwteGwtNSwubXgteGwtNXttYXJnaW4tbGVmdDozLjc1cmVtICFpbXBvcnRhbnR9LnAteGwtMHtwYWRkaW5nOjAgIWltcG9ydGFudH0ucHQteGwtMCwucHkteGwtMHtwYWRkaW5nLXRvcDowICFpbXBvcnRhbnR9LnByLXhsLTAsLnB4LXhsLTB7cGFkZGluZy1yaWdodDowICFpbXBvcnRhbnR9LnBiLXhsLTAsLnB5LXhsLTB7cGFkZGluZy1ib3R0b206MCAhaW1wb3J0YW50fS5wbC14bC0wLC5weC14bC0we3BhZGRpbmctbGVmdDowICFpbXBvcnRhbnR9LnAteGwtMXtwYWRkaW5nOi4zMTI1cmVtICFpbXBvcnRhbnR9LnB0LXhsLTEsLnB5LXhsLTF7cGFkZGluZy10b3A6LjMxMjVyZW0gIWltcG9ydGFudH0ucHIteGwtMSwucHgteGwtMXtwYWRkaW5nLXJpZ2h0Oi4zMTI1cmVtICFpbXBvcnRhbnR9LnBiLXhsLTEsLnB5LXhsLTF7cGFkZGluZy1ib3R0b206LjMxMjVyZW0gIWltcG9ydGFudH0ucGwteGwtMSwucHgteGwtMXtwYWRkaW5nLWxlZnQ6LjMxMjVyZW0gIWltcG9ydGFudH0ucC14bC0ye3BhZGRpbmc6LjYyNXJlbSAhaW1wb3J0YW50fS5wdC14bC0yLC5weS14bC0ye3BhZGRpbmctdG9wOi42MjVyZW0gIWltcG9ydGFudH0ucHIteGwtMiwucHgteGwtMntwYWRkaW5nLXJpZ2h0Oi42MjVyZW0gIWltcG9ydGFudH0ucGIteGwtMiwucHkteGwtMntwYWRkaW5nLWJvdHRvbTouNjI1cmVtICFpbXBvcnRhbnR9LnBsLXhsLTIsLnB4LXhsLTJ7cGFkZGluZy1sZWZ0Oi42MjVyZW0gIWltcG9ydGFudH0ucC14bC0ze3BhZGRpbmc6LjkzNzVyZW0gIWltcG9ydGFudH0ucHQteGwtMywucHkteGwtM3twYWRkaW5nLXRvcDouOTM3NXJlbSAhaW1wb3J0YW50fS5wci14bC0zLC5weC14bC0ze3BhZGRpbmctcmlnaHQ6LjkzNzVyZW0gIWltcG9ydGFudH0ucGIteGwtMywucHkteGwtM3twYWRkaW5nLWJvdHRvbTouOTM3NXJlbSAhaW1wb3J0YW50fS5wbC14bC0zLC5weC14bC0ze3BhZGRpbmctbGVmdDouOTM3NXJlbSAhaW1wb3J0YW50fS5wLXhsLTR7cGFkZGluZzoxLjg3NXJlbSAhaW1wb3J0YW50fS5wdC14bC00LC5weS14bC00e3BhZGRpbmctdG9wOjEuODc1cmVtICFpbXBvcnRhbnR9LnByLXhsLTQsLnB4LXhsLTR7cGFkZGluZy1yaWdodDoxLjg3NXJlbSAhaW1wb3J0YW50fS5wYi14bC00LC5weS14bC00e3BhZGRpbmctYm90dG9tOjEuODc1cmVtICFpbXBvcnRhbnR9LnBsLXhsLTQsLnB4LXhsLTR7cGFkZGluZy1sZWZ0OjEuODc1cmVtICFpbXBvcnRhbnR9LnAteGwtNXtwYWRkaW5nOjMuNzVyZW0gIWltcG9ydGFudH0ucHQteGwtNSwucHkteGwtNXtwYWRkaW5nLXRvcDozLjc1cmVtICFpbXBvcnRhbnR9LnByLXhsLTUsLnB4LXhsLTV7cGFkZGluZy1yaWdodDozLjc1cmVtICFpbXBvcnRhbnR9LnBiLXhsLTUsLnB5LXhsLTV7cGFkZGluZy1ib3R0b206My43NXJlbSAhaW1wb3J0YW50fS5wbC14bC01LC5weC14bC01e3BhZGRpbmctbGVmdDozLjc1cmVtICFpbXBvcnRhbnR9Lm0teGwtYXV0b3ttYXJnaW46YXV0byAhaW1wb3J0YW50fS5tdC14bC1hdXRvLC5teS14bC1hdXRve21hcmdpbi10b3A6YXV0byAhaW1wb3J0YW50fS5tci14bC1hdXRvLC5teC14bC1hdXRve21hcmdpbi1yaWdodDphdXRvICFpbXBvcnRhbnR9Lm1iLXhsLWF1dG8sLm15LXhsLWF1dG97bWFyZ2luLWJvdHRvbTphdXRvICFpbXBvcnRhbnR9Lm1sLXhsLWF1dG8sLm14LXhsLWF1dG97bWFyZ2luLWxlZnQ6YXV0byAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDogMTYwMHB4KXsubS14eGwtMHttYXJnaW46MCAhaW1wb3J0YW50fS5tdC14eGwtMCwubXkteHhsLTB7bWFyZ2luLXRvcDowICFpbXBvcnRhbnR9Lm1yLXh4bC0wLC5teC14eGwtMHttYXJnaW4tcmlnaHQ6MCAhaW1wb3J0YW50fS5tYi14eGwtMCwubXkteHhsLTB7bWFyZ2luLWJvdHRvbTowICFpbXBvcnRhbnR9Lm1sLXh4bC0wLC5teC14eGwtMHttYXJnaW4tbGVmdDowICFpbXBvcnRhbnR9Lm0teHhsLTF7bWFyZ2luOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm10LXh4bC0xLC5teS14eGwtMXttYXJnaW4tdG9wOi4zMTI1cmVtICFpbXBvcnRhbnR9Lm1yLXh4bC0xLC5teC14eGwtMXttYXJnaW4tcmlnaHQ6LjMxMjVyZW0gIWltcG9ydGFudH0ubWIteHhsLTEsLm15LXh4bC0xe21hcmdpbi1ib3R0b206LjMxMjVyZW0gIWltcG9ydGFudH0ubWwteHhsLTEsLm14LXh4bC0xe21hcmdpbi1sZWZ0Oi4zMTI1cmVtICFpbXBvcnRhbnR9Lm0teHhsLTJ7bWFyZ2luOi42MjVyZW0gIWltcG9ydGFudH0ubXQteHhsLTIsLm15LXh4bC0ye21hcmdpbi10b3A6LjYyNXJlbSAhaW1wb3J0YW50fS5tci14eGwtMiwubXgteHhsLTJ7bWFyZ2luLXJpZ2h0Oi42MjVyZW0gIWltcG9ydGFudH0ubWIteHhsLTIsLm15LXh4bC0ye21hcmdpbi1ib3R0b206LjYyNXJlbSAhaW1wb3J0YW50fS5tbC14eGwtMiwubXgteHhsLTJ7bWFyZ2luLWxlZnQ6LjYyNXJlbSAhaW1wb3J0YW50fS5tLXh4bC0ze21hcmdpbjouOTM3NXJlbSAhaW1wb3J0YW50fS5tdC14eGwtMywubXkteHhsLTN7bWFyZ2luLXRvcDouOTM3NXJlbSAhaW1wb3J0YW50fS5tci14eGwtMywubXgteHhsLTN7bWFyZ2luLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1iLXh4bC0zLC5teS14eGwtM3ttYXJnaW4tYm90dG9tOi45Mzc1cmVtICFpbXBvcnRhbnR9Lm1sLXh4bC0zLC5teC14eGwtM3ttYXJnaW4tbGVmdDouOTM3NXJlbSAhaW1wb3J0YW50fS5tLXh4bC00e21hcmdpbjoxLjg3NXJlbSAhaW1wb3J0YW50fS5tdC14eGwtNCwubXkteHhsLTR7bWFyZ2luLXRvcDoxLjg3NXJlbSAhaW1wb3J0YW50fS5tci14eGwtNCwubXgteHhsLTR7bWFyZ2luLXJpZ2h0OjEuODc1cmVtICFpbXBvcnRhbnR9Lm1iLXh4bC00LC5teS14eGwtNHttYXJnaW4tYm90dG9tOjEuODc1cmVtICFpbXBvcnRhbnR9Lm1sLXh4bC00LC5teC14eGwtNHttYXJnaW4tbGVmdDoxLjg3NXJlbSAhaW1wb3J0YW50fS5tLXh4bC01e21hcmdpbjozLjc1cmVtICFpbXBvcnRhbnR9Lm10LXh4bC01LC5teS14eGwtNXttYXJnaW4tdG9wOjMuNzVyZW0gIWltcG9ydGFudH0ubXIteHhsLTUsLm14LXh4bC01e21hcmdpbi1yaWdodDozLjc1cmVtICFpbXBvcnRhbnR9Lm1iLXh4bC01LC5teS14eGwtNXttYXJnaW4tYm90dG9tOjMuNzVyZW0gIWltcG9ydGFudH0ubWwteHhsLTUsLm14LXh4bC01e21hcmdpbi1sZWZ0OjMuNzVyZW0gIWltcG9ydGFudH0ucC14eGwtMHtwYWRkaW5nOjAgIWltcG9ydGFudH0ucHQteHhsLTAsLnB5LXh4bC0we3BhZGRpbmctdG9wOjAgIWltcG9ydGFudH0ucHIteHhsLTAsLnB4LXh4bC0we3BhZGRpbmctcmlnaHQ6MCAhaW1wb3J0YW50fS5wYi14eGwtMCwucHkteHhsLTB7cGFkZGluZy1ib3R0b206MCAhaW1wb3J0YW50fS5wbC14eGwtMCwucHgteHhsLTB7cGFkZGluZy1sZWZ0OjAgIWltcG9ydGFudH0ucC14eGwtMXtwYWRkaW5nOi4zMTI1cmVtICFpbXBvcnRhbnR9LnB0LXh4bC0xLC5weS14eGwtMXtwYWRkaW5nLXRvcDouMzEyNXJlbSAhaW1wb3J0YW50fS5wci14eGwtMSwucHgteHhsLTF7cGFkZGluZy1yaWdodDouMzEyNXJlbSAhaW1wb3J0YW50fS5wYi14eGwtMSwucHkteHhsLTF7cGFkZGluZy1ib3R0b206LjMxMjVyZW0gIWltcG9ydGFudH0ucGwteHhsLTEsLnB4LXh4bC0xe3BhZGRpbmctbGVmdDouMzEyNXJlbSAhaW1wb3J0YW50fS5wLXh4bC0ye3BhZGRpbmc6LjYyNXJlbSAhaW1wb3J0YW50fS5wdC14eGwtMiwucHkteHhsLTJ7cGFkZGluZy10b3A6LjYyNXJlbSAhaW1wb3J0YW50fS5wci14eGwtMiwucHgteHhsLTJ7cGFkZGluZy1yaWdodDouNjI1cmVtICFpbXBvcnRhbnR9LnBiLXh4bC0yLC5weS14eGwtMntwYWRkaW5nLWJvdHRvbTouNjI1cmVtICFpbXBvcnRhbnR9LnBsLXh4bC0yLC5weC14eGwtMntwYWRkaW5nLWxlZnQ6LjYyNXJlbSAhaW1wb3J0YW50fS5wLXh4bC0ze3BhZGRpbmc6LjkzNzVyZW0gIWltcG9ydGFudH0ucHQteHhsLTMsLnB5LXh4bC0ze3BhZGRpbmctdG9wOi45Mzc1cmVtICFpbXBvcnRhbnR9LnByLXh4bC0zLC5weC14eGwtM3twYWRkaW5nLXJpZ2h0Oi45Mzc1cmVtICFpbXBvcnRhbnR9LnBiLXh4bC0zLC5weS14eGwtM3twYWRkaW5nLWJvdHRvbTouOTM3NXJlbSAhaW1wb3J0YW50fS5wbC14eGwtMywucHgteHhsLTN7cGFkZGluZy1sZWZ0Oi45Mzc1cmVtICFpbXBvcnRhbnR9LnAteHhsLTR7cGFkZGluZzoxLjg3NXJlbSAhaW1wb3J0YW50fS5wdC14eGwtNCwucHkteHhsLTR7cGFkZGluZy10b3A6MS44NzVyZW0gIWltcG9ydGFudH0ucHIteHhsLTQsLnB4LXh4bC00e3BhZGRpbmctcmlnaHQ6MS44NzVyZW0gIWltcG9ydGFudH0ucGIteHhsLTQsLnB5LXh4bC00e3BhZGRpbmctYm90dG9tOjEuODc1cmVtICFpbXBvcnRhbnR9LnBsLXh4bC00LC5weC14eGwtNHtwYWRkaW5nLWxlZnQ6MS44NzVyZW0gIWltcG9ydGFudH0ucC14eGwtNXtwYWRkaW5nOjMuNzVyZW0gIWltcG9ydGFudH0ucHQteHhsLTUsLnB5LXh4bC01e3BhZGRpbmctdG9wOjMuNzVyZW0gIWltcG9ydGFudH0ucHIteHhsLTUsLnB4LXh4bC01e3BhZGRpbmctcmlnaHQ6My43NXJlbSAhaW1wb3J0YW50fS5wYi14eGwtNSwucHkteHhsLTV7cGFkZGluZy1ib3R0b206My43NXJlbSAhaW1wb3J0YW50fS5wbC14eGwtNSwucHgteHhsLTV7cGFkZGluZy1sZWZ0OjMuNzVyZW0gIWltcG9ydGFudH0ubS14eGwtYXV0b3ttYXJnaW46YXV0byAhaW1wb3J0YW50fS5tdC14eGwtYXV0bywubXkteHhsLWF1dG97bWFyZ2luLXRvcDphdXRvICFpbXBvcnRhbnR9Lm1yLXh4bC1hdXRvLC5teC14eGwtYXV0b3ttYXJnaW4tcmlnaHQ6YXV0byAhaW1wb3J0YW50fS5tYi14eGwtYXV0bywubXkteHhsLWF1dG97bWFyZ2luLWJvdHRvbTphdXRvICFpbXBvcnRhbnR9Lm1sLXh4bC1hdXRvLC5teC14eGwtYXV0b3ttYXJnaW4tbGVmdDphdXRvICFpbXBvcnRhbnR9fS50ZXh0LWp1c3RpZnl7dGV4dC1hbGlnbjpqdXN0aWZ5ICFpbXBvcnRhbnR9LnRleHQtbm93cmFwe3doaXRlLXNwYWNlOm5vd3JhcCAhaW1wb3J0YW50fS50ZXh0LXRydW5jYXRle292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHQgIWltcG9ydGFudH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXIgIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDogNTQ0cHgpey50ZXh0LXNtLWxlZnR7dGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnR9LnRleHQtc20tcmlnaHR7dGV4dC1hbGlnbjpyaWdodCAhaW1wb3J0YW50fS50ZXh0LXNtLWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlciAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpey50ZXh0LW1kLWxlZnR7dGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnR9LnRleHQtbWQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodCAhaW1wb3J0YW50fS50ZXh0LW1kLWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlciAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDogMTAyNHB4KXsudGV4dC1sZy1sZWZ0e3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50fS50ZXh0LWxnLXJpZ2h0e3RleHQtYWxpZ246cmlnaHQgIWltcG9ydGFudH0udGV4dC1sZy1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXIgIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6IDEzMDBweCl7LnRleHQteGwtbGVmdHt0ZXh0LWFsaWduOmxlZnQgIWltcG9ydGFudH0udGV4dC14bC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0ICFpbXBvcnRhbnR9LnRleHQteGwtY2VudGVye3RleHQtYWxpZ246Y2VudGVyICFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOiAxNjAwcHgpey50ZXh0LXh4bC1sZWZ0e3RleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50fS50ZXh0LXh4bC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0ICFpbXBvcnRhbnR9LnRleHQteHhsLWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlciAhaW1wb3J0YW50fX0udGV4dC1sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlICFpbXBvcnRhbnR9LnRleHQtdXBwZXJjYXNle3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZSAhaW1wb3J0YW50fS50ZXh0LWNhcGl0YWxpemV7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZSAhaW1wb3J0YW50fS5mb250LXdlaWdodC1saWdodHtmb250LXdlaWdodDozMDAgIWltcG9ydGFudH0uZm9udC13ZWlnaHQtbm9ybWFse2ZvbnQtd2VpZ2h0OjQwMCAhaW1wb3J0YW50fS5mb250LXdlaWdodC1ib2xke2ZvbnQtd2VpZ2h0OjcwMCAhaW1wb3J0YW50fS5mb250LWl0YWxpY3tmb250LXN0eWxlOml0YWxpYyAhaW1wb3J0YW50fS50ZXh0LXdoaXRle2NvbG9yOiNmZmYgIWltcG9ydGFudH0udGV4dC1wcmltYXJ5e2NvbG9yOiMyNWI5ZDcgIWltcG9ydGFudH1hLnRleHQtcHJpbWFyeTpob3ZlcixhLnRleHQtcHJpbWFyeTpmb2N1c3tjb2xvcjojMWU5NGFiICFpbXBvcnRhbnR9LnRleHQtc2Vjb25kYXJ5e2NvbG9yOiM2Yzg2OGUgIWltcG9ydGFudH1hLnRleHQtc2Vjb25kYXJ5OmhvdmVyLGEudGV4dC1zZWNvbmRhcnk6Zm9jdXN7Y29sb3I6IzU2NmI3MSAhaW1wb3J0YW50fS50ZXh0LXN1Y2Nlc3N7Y29sb3I6IzcwYjU4MCAhaW1wb3J0YW50fWEudGV4dC1zdWNjZXNzOmhvdmVyLGEudGV4dC1zdWNjZXNzOmZvY3Vze2NvbG9yOiM1MzlmNjQgIWltcG9ydGFudH0udGV4dC1pbmZve2NvbG9yOiMyNWI5ZDcgIWltcG9ydGFudH1hLnRleHQtaW5mbzpob3ZlcixhLnRleHQtaW5mbzpmb2N1c3tjb2xvcjojMWU5NGFiICFpbXBvcnRhbnR9LnRleHQtd2FybmluZ3tjb2xvcjojZmFiMDAwICFpbXBvcnRhbnR9YS50ZXh0LXdhcm5pbmc6aG92ZXIsYS50ZXh0LXdhcm5pbmc6Zm9jdXN7Y29sb3I6I2M3OGMwMCAhaW1wb3J0YW50fS50ZXh0LWRhbmdlcntjb2xvcjojZjU0YzNlICFpbXBvcnRhbnR9YS50ZXh0LWRhbmdlcjpob3ZlcixhLnRleHQtZGFuZ2VyOmZvY3Vze2NvbG9yOiNmMjFmMGUgIWltcG9ydGFudH0udGV4dC1saWdodHtjb2xvcjojZmFmYmZjICFpbXBvcnRhbnR9YS50ZXh0LWxpZ2h0OmhvdmVyLGEudGV4dC1saWdodDpmb2N1c3tjb2xvcjojZGFlMmU5ICFpbXBvcnRhbnR9LnRleHQtZGFya3tjb2xvcjojMzYzYTQxICFpbXBvcnRhbnR9YS50ZXh0LWRhcms6aG92ZXIsYS50ZXh0LWRhcms6Zm9jdXN7Y29sb3I6IzFmMjEyNSAhaW1wb3J0YW50fS50ZXh0LW11dGVke2NvbG9yOiM2Yzg2OGUgIWltcG9ydGFudH0udGV4dC1oaWRle2ZvbnQ6MC8wIGE7Y29sb3I6dHJhbnNwYXJlbnQ7dGV4dC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjowfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZSAhaW1wb3J0YW50fS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW4gIWltcG9ydGFudH0uY29tYmluYXRpb25zLWZpbHRlcnMtZHJvcGRvd257bWFyZ2luOjAgMC4zNXJlbX1AbWVkaWEgKG1heC13aWR0aDogNTQzLjk4cHgpey5jb21iaW5hdGlvbnMtZmlsdGVycy1kcm9wZG93bnttYXJnaW4tYm90dG9tOi41cmVtfX0uY29tYmluYXRpb25zLWZpbHRlcnMtZHJvcGRvd24gLmRyb3Bkb3duLWl0ZW17cGFkZGluZzowLjQzOHJlbSAwLjkzOHJlbTtwYWRkaW5nLXJpZ2h0OjFyZW07bGluZS1oZWlnaHQ6bm9ybWFsO2NvbG9yOmluaGVyaXQ7Ym9yZGVyLWJvdHRvbTowfS5jb21iaW5hdGlvbnMtZmlsdGVycy1kcm9wZG93biAuZHJvcGRvd24taXRlbSAubWQtY2hlY2tib3gtY29udGFpbmVye3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmctbGVmdDoyOHB4fVxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy91dGlsaXRpZXMvX2FsaWduLnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2JhY2tncm91bmQtdmFyaWFudC5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19ob3Zlci5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL19iYWNrZ3JvdW5kLnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy91dGlsaXRpZXMvX2JvcmRlcnMuc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fY2xlYXJmaXguc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3V0aWxpdGllcy9fZGlzcGxheS5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19icmVha3BvaW50cy5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL19lbWJlZC5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL19mbGV4LnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy91dGlsaXRpZXMvX2Zsb2F0LnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2Zsb2F0LnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy91dGlsaXRpZXMvX3Bvc2l0aW9uLnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fdmFyaWFibGVzLnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy91dGlsaXRpZXMvX3NjcmVlbnJlYWRlcnMuc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fc2NyZWVuLXJlYWRlci5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL19zaXppbmcuc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3V0aWxpdGllcy9fc3BhY2luZy5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL190ZXh0LnNjc3NcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3RleHQtdHJ1bmNhdGUuc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fdGV4dC1lbXBoYXNpcy5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL190ZXh0LWhpZGUuc2Nzc1wiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fdmlzaWJpbGl0eS5zY3NzXCIsXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL192aXNpYmlsaXR5LnNjc3NcIixcIndlYnBhY2s6Ly8uL2pzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9maWx0ZXJzL0ZpbHRlckRyb3Bkb3duLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFFQSxnQkFBcUIsa0NBQW1DLENBQUksV0FDdkMsNkJBQThCLENBQUksY0FDbEMsZ0NBQWlDLENBQUksY0FDckMsZ0NBQWlDLENBQUksbUJBQ3JDLHFDQUFzQyxDQUFJLGdCQUMxQyxrQ0FBbUMsQ0NGdEQsWUFDRSxtQ0FBbUMsQ0NZckMsc0ZEUEksbUNBQWdELENDVW5ELGNEZkMsbUNBQW1DLENDWXJDLDhGRFBJLG1DQUFnRCxDQ1VuRCxZRGZDLG1DQUFtQyxDQ1lyQyxzRkRQSSxtQ0FBZ0QsQ0NVbkQsU0RmQyxtQ0FBbUMsQ0NZckMsMEVEUEksbUNBQWdELENDVW5ELFlEZkMsbUNBQW1DLENDWXJDLHNGRFBJLG1DQUFnRCxDQ1VuRCxXRGZDLG1DQUFtQyxDQ1lyQyxrRkRQSSxtQ0FBZ0QsQ0NVbkQsVURmQyxtQ0FBbUMsQ0NZckMsOEVEUEksbUNBQWdELENDVW5ELFNEZkMsbUNBQW1DLENDWXJDLDBFRFBJLG1DQUFnRCxDQ1VuRCxVQ1JELGdDQUFtQyxDQUNwQyxnQkFHQyx1Q0FBd0MsQ0FDekMsUUNaaUIsbUNBQW9ELENBQUksWUFDeEQsdUNBQXdELENBQUksY0FDNUQseUNBQTBELENBQUksZUFDOUQsMENBQTJELENBQUksYUFDL0Qsd0NBQXlELENBQUksVUFFNUQsbUJBQW9CLENBQUksY0FDeEIsdUJBQXdCLENBQUksZ0JBQzVCLHlCQUEwQixDQUFJLGlCQUM5QiwwQkFBMkIsQ0FBSSxlQUMvQix3QkFBeUIsQ0FBSSxnQkFJNUMsK0JBQStCLENBRGpDLGtCQUNF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QXFDLENsQld4Qyxja0JmQyx3QkFBd0IsQ2xCWTFCLDBDa0JSSSx3QkFBcUMsQ2xCV3hDLFdrQmZDLHdCQUF3QixDbEJZMUIsb0NrQlJJLHdCQUFxQyxDbEJXeEMsY2tCZkMsd0JBQXdCLENsQlkxQiwwQ2tCUkksd0JBQXFDLENsQld4Qyxha0JmQyx3QkFBd0IsQ2xCWTFCLHdDa0JSSSx3QkFBcUMsQ2xCV3hDLFlrQmZDLHdCQUF3QixDbEJZMUIsc0NrQlJJLHdCQUFxQyxDbEJXeEMsV2tCZkMsd0JBQXdCLENsQlkxQixvQ2tCUkksd0JBQXFDLENsQld4QyxZZ0J3Qlcsd0JBQTZCLENBQUksV0cxQzdDLFVBQVcsQ0FDWCxpQkFBa0IsQ0FDbEIsZ0JBQWlCLENBQ2pCLDRCQUE2QixDQUM3QixRQUFTLENINENWLFNJOUNDLDZCQUFrQyxDQ0NuQyxXRERDLDRCQUFrQyxDRThIcEMsK0JBQ0UsZ0JBQWlCLENBa0JsQiw2QkFuQkQsK0JBSUksbUJBQW9CLENBZXZCLENBbkJELDhDQVFJLHlCQUEwQixDQUMxQixrQkFBbUIsQ0FDbkIsa0JBQW1CLENBQ25CLGFBQWMsQ0FDZCxlQUFnQixDQVpwQixxRUFlTSxpQkFBa0IsQ0FDbEIsaUJBQWtCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi8vIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxcblxcbi5hbGlnbi1iYXNlbGluZSAgICB7IHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50OyB9IC8vIEJyb3dzZXIgZGVmYXVsdFxcbi5hbGlnbi10b3AgICAgICAgICB7IHZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDsgfVxcbi5hbGlnbi1taWRkbGUgICAgICB7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGUgIWltcG9ydGFudDsgfVxcbi5hbGlnbi1ib3R0b20gICAgICB7IHZlcnRpY2FsLWFsaWduOiBib3R0b20gIWltcG9ydGFudDsgfVxcbi5hbGlnbi10ZXh0LWJvdHRvbSB7IHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbSAhaW1wb3J0YW50OyB9XFxuLmFsaWduLXRleHQtdG9wICAgIHsgdmVydGljYWwtYWxpZ246IHRleHQtdG9wICFpbXBvcnRhbnQ7IH1cXG5cIixcIi8vIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxcblxcbi8vIENvbnRleHR1YWwgYmFja2dyb3VuZHNcXG5cXG5AbWl4aW4gYmctdmFyaWFudCgkcGFyZW50LCAkY29sb3IpIHtcXG4gICN7JHBhcmVudH0ge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3IgIWltcG9ydGFudDtcXG4gIH1cXG4gIGEjeyRwYXJlbnR9LFxcbiAgYnV0dG9uI3skcGFyZW50fSB7XFxuICAgIEBpbmNsdWRlIGhvdmVyLWZvY3VzIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCAxMCUpICFpbXBvcnRhbnQ7XFxuICAgIH1cXG4gIH1cXG59XFxuXFxuQG1peGluIGJnLWdyYWRpZW50LXZhcmlhbnQoJHBhcmVudCwgJGNvbG9yKSB7XFxuICAjeyRwYXJlbnR9IHtcXG4gICAgYmFja2dyb3VuZDogJGNvbG9yIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIG1peCgkYm9keS1iZywgJGNvbG9yLCAxNSUpLCAkY29sb3IpIHJlcGVhdC14ICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblwiLFwiLy8gc3R5bGVsaW50LWRpc2FibGUgaW5kZW50YXRpb25cXG5cXG4vLyBIb3ZlciBtaXhpbiBhbmQgYCRlbmFibGUtaG92ZXItbWVkaWEtcXVlcnlgIGFyZSBkZXByZWNhdGVkLlxcbi8vXFxuLy8gT3JpZ2FsbHkgYWRkZWQgZHVyaW5nIG91ciBhbHBoYXMgYW5kIG1haW50YWluZWQgZHVyaW5nIGJldGFzLCB0aGlzIG1peGluIHdhc1xcbi8vIGRlc2lnbmVkIHRvIHByZXZlbnQgYDpob3ZlcmAgc3RpY2tpbmVzcyBvbiBpT1PigJRhbiBpc3N1ZSB3aGVyZSBob3ZlciBzdHlsZXNcXG4vLyB3b3VsZCBwZXJzaXN0IGFmdGVyIGluaXRpYWwgdG91Y2guXFxuLy9cXG4vLyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgd2UndmUga2VwdCB0aGVzZSBtaXhpbnMgYW5kIHVwZGF0ZWQgdGhlbSB0b1xcbi8vIGFsd2F5cyByZXR1cm4gdGhlaXIgcmVndWxhciBwc3VlZG8tY2xhc3NlcyBpbnN0ZWFkIG9mIGEgc2hpbW1lZCBtZWRpYSBxdWVyeS5cXG4vL1xcbi8vIElzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzI1MTk1XFxuXFxuQG1peGluIGhvdmVyIHtcXG4gICY6aG92ZXIgeyBAY29udGVudDsgfVxcbn1cXG5cXG5AbWl4aW4gaG92ZXItZm9jdXMge1xcbiAgJjpob3ZlcixcXG4gICY6Zm9jdXMge1xcbiAgICBAY29udGVudDtcXG4gIH1cXG59XFxuXFxuQG1peGluIHBsYWluLWhvdmVyLWZvY3VzIHtcXG4gICYsXFxuICAmOmhvdmVyLFxcbiAgJjpmb2N1cyB7XFxuICAgIEBjb250ZW50O1xcbiAgfVxcbn1cXG5cXG5AbWl4aW4gaG92ZXItZm9jdXMtYWN0aXZlIHtcXG4gICY6aG92ZXIsXFxuICAmOmZvY3VzLFxcbiAgJjphY3RpdmUge1xcbiAgICBAY29udGVudDtcXG4gIH1cXG59XFxuXCIsXCIvLyBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnRcXG5cXG5AZWFjaCAkY29sb3IsICR2YWx1ZSBpbiAkdGhlbWUtY29sb3JzIHtcXG4gIEBpbmNsdWRlIGJnLXZhcmlhbnQoXFxcIi5iZy0jeyRjb2xvcn1cXFwiLCAkdmFsdWUpO1xcbn1cXG5cXG5AaWYgJGVuYWJsZS1ncmFkaWVudHMge1xcbiAgQGVhY2ggJGNvbG9yLCAkdmFsdWUgaW4gJHRoZW1lLWNvbG9ycyB7XFxuICAgIEBpbmNsdWRlIGJnLWdyYWRpZW50LXZhcmlhbnQoXFxcIi5iZy1ncmFkaWVudC0jeyRjb2xvcn1cXFwiLCAkdmFsdWUpO1xcbiAgfVxcbn1cXG5cXG4uYmctd2hpdGUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogJHdoaXRlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5iZy10cmFuc3BhcmVudCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbn1cXG5cIixcIi8vIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxcblxcbi8vXFxuLy8gQm9yZGVyXFxuLy9cXG5cXG4uYm9yZGVyICAgICAgICAgeyBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGJvcmRlci1jb2xvciAhaW1wb3J0YW50OyB9XFxuLmJvcmRlci10b3AgICAgIHsgYm9yZGVyLXRvcDogJGJvcmRlci13aWR0aCBzb2xpZCAkYm9yZGVyLWNvbG9yICFpbXBvcnRhbnQ7IH1cXG4uYm9yZGVyLXJpZ2h0ICAgeyBib3JkZXItcmlnaHQ6ICRib3JkZXItd2lkdGggc29saWQgJGJvcmRlci1jb2xvciAhaW1wb3J0YW50OyB9XFxuLmJvcmRlci1ib3R0b20gIHsgYm9yZGVyLWJvdHRvbTogJGJvcmRlci13aWR0aCBzb2xpZCAkYm9yZGVyLWNvbG9yICFpbXBvcnRhbnQ7IH1cXG4uYm9yZGVyLWxlZnQgICAgeyBib3JkZXItbGVmdDogJGJvcmRlci13aWR0aCBzb2xpZCAkYm9yZGVyLWNvbG9yICFpbXBvcnRhbnQ7IH1cXG5cXG4uYm9yZGVyLTAgICAgICAgIHsgYm9yZGVyOiAwICFpbXBvcnRhbnQ7IH1cXG4uYm9yZGVyLXRvcC0wICAgIHsgYm9yZGVyLXRvcDogMCAhaW1wb3J0YW50OyB9XFxuLmJvcmRlci1yaWdodC0wICB7IGJvcmRlci1yaWdodDogMCAhaW1wb3J0YW50OyB9XFxuLmJvcmRlci1ib3R0b20tMCB7IGJvcmRlci1ib3R0b206IDAgIWltcG9ydGFudDsgfVxcbi5ib3JkZXItbGVmdC0wICAgeyBib3JkZXItbGVmdDogMCAhaW1wb3J0YW50OyB9XFxuXFxuQGVhY2ggJGNvbG9yLCAkdmFsdWUgaW4gJHRoZW1lLWNvbG9ycyB7XFxuICAuYm9yZGVyLSN7JGNvbG9yfSB7XFxuICAgIGJvcmRlci1jb2xvcjogJHZhbHVlICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcblxcbi5ib3JkZXItd2hpdGUge1xcbiAgYm9yZGVyLWNvbG9yOiAkd2hpdGUgIWltcG9ydGFudDtcXG59XFxuXFxuLy9cXG4vLyBCb3JkZXItcmFkaXVzXFxuLy9cXG5cXG4ucm91bmRlZCB7XFxuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAhaW1wb3J0YW50O1xcbn1cXG4ucm91bmRlZC10b3Age1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgIWltcG9ydGFudDtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAhaW1wb3J0YW50O1xcbn1cXG4ucm91bmRlZC1yaWdodCB7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgIWltcG9ydGFudDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAhaW1wb3J0YW50O1xcbn1cXG4ucm91bmRlZC1ib3R0b20ge1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzICFpbXBvcnRhbnQ7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAhaW1wb3J0YW50O1xcbn1cXG4ucm91bmRlZC1sZWZ0IHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzICFpbXBvcnRhbnQ7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAhaW1wb3J0YW50O1xcbn1cXG5cXG4ucm91bmRlZC1jaXJjbGUge1xcbiAgYm9yZGVyLXJhZGl1czogNTAlICFpbXBvcnRhbnQ7XFxufVxcblxcbi5yb3VuZGVkLTAge1xcbiAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xcbn1cXG5cIixcIkBtaXhpbiBjbGVhcmZpeCgpIHtcXG4gICY6OmFmdGVyIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIGNsZWFyOiBib3RoO1xcbiAgICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIH1cXG59XFxuXCIsXCIvLyBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnRcXG5cXG4vL1xcbi8vIFV0aWxpdGllcyBmb3IgY29tbW9uIGBkaXNwbGF5YCB2YWx1ZXNcXG4vL1xcblxcbkBlYWNoICRicmVha3BvaW50IGluIG1hcC1rZXlzKCRncmlkLWJyZWFrcG9pbnRzKSB7XFxuICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCRicmVha3BvaW50KSB7XFxuICAgICRpbmZpeDogYnJlYWtwb2ludC1pbmZpeCgkYnJlYWtwb2ludCwgJGdyaWQtYnJlYWtwb2ludHMpO1xcblxcbiAgICAuZCN7JGluZml4fS1ub25lICAgICAgICAgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH1cXG4gICAgLmQjeyRpbmZpeH0taW5saW5lICAgICAgIHsgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7IH1cXG4gICAgLmQjeyRpbmZpeH0taW5saW5lLWJsb2NrIHsgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7IH1cXG4gICAgLmQjeyRpbmZpeH0tYmxvY2sgICAgICAgIHsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgfVxcbiAgICAuZCN7JGluZml4fS10YWJsZSAgICAgICAgeyBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50OyB9XFxuICAgIC5kI3skaW5maXh9LXRhYmxlLXJvdyAgICB7IGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50OyB9XFxuICAgIC5kI3skaW5maXh9LXRhYmxlLWNlbGwgICB7IGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsgfVxcbiAgICAuZCN7JGluZml4fS1mbGV4ICAgICAgICAgeyBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7IH1cXG4gICAgLmQjeyRpbmZpeH0taW5saW5lLWZsZXggIHsgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDsgfVxcbiAgfVxcbn1cXG5cXG5cXG4vL1xcbi8vIFV0aWxpdGllcyBmb3IgdG9nZ2xpbmcgYGRpc3BsYXlgIGluIHByaW50XFxuLy9cXG5cXG5AbWVkaWEgcHJpbnQge1xcbiAgLmQtcHJpbnQtbm9uZSAgICAgICAgIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9XFxuICAuZC1wcmludC1pbmxpbmUgICAgICAgeyBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsgfVxcbiAgLmQtcHJpbnQtaW5saW5lLWJsb2NrIHsgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7IH1cXG4gIC5kLXByaW50LWJsb2NrICAgICAgICB7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IH1cXG4gIC5kLXByaW50LXRhYmxlICAgICAgICB7IGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7IH1cXG4gIC5kLXByaW50LXRhYmxlLXJvdyAgICB7IGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50OyB9XFxuICAuZC1wcmludC10YWJsZS1jZWxsICAgeyBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7IH1cXG4gIC5kLXByaW50LWZsZXggICAgICAgICB7IGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsgfVxcbiAgLmQtcHJpbnQtaW5saW5lLWZsZXggIHsgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDsgfVxcbn1cXG5cIixcIi8vIEJyZWFrcG9pbnQgdmlld3BvcnQgc2l6ZXMgYW5kIG1lZGlhIHF1ZXJpZXMuXFxuLy9cXG4vLyBCcmVha3BvaW50cyBhcmUgZGVmaW5lZCBhcyBhIG1hcCBvZiAobmFtZTogbWluaW11bSB3aWR0aCksIG9yZGVyIGZyb20gc21hbGwgdG8gbGFyZ2U6XFxuLy9cXG4vLyAgICAoeHM6IDAsIHNtOiA1NzZweCwgbWQ6IDc2OHB4LCBsZzogOTkycHgsIHhsOiAxMjAwcHgpXFxuLy9cXG4vLyBUaGUgbWFwIGRlZmluZWQgaW4gdGhlIGAkZ3JpZC1icmVha3BvaW50c2AgZ2xvYmFsIHZhcmlhYmxlIGlzIHVzZWQgYXMgdGhlIGAkYnJlYWtwb2ludHNgIGFyZ3VtZW50IGJ5IGRlZmF1bHQuXFxuXFxuLy8gTmFtZSBvZiB0aGUgbmV4dCBicmVha3BvaW50LCBvciBudWxsIGZvciB0aGUgbGFzdCBicmVha3BvaW50Llxcbi8vXFxuLy8gICAgPj4gYnJlYWtwb2ludC1uZXh0KHNtKVxcbi8vICAgIG1kXFxuLy8gICAgPj4gYnJlYWtwb2ludC1uZXh0KHNtLCAoeHM6IDAsIHNtOiA1NzZweCwgbWQ6IDc2OHB4LCBsZzogOTkycHgsIHhsOiAxMjAwcHgpKVxcbi8vICAgIG1kXFxuLy8gICAgPj4gYnJlYWtwb2ludC1uZXh0KHNtLCAkYnJlYWtwb2ludC1uYW1lczogKHhzIHNtIG1kIGxnIHhsKSlcXG4vLyAgICBtZFxcbkBmdW5jdGlvbiBicmVha3BvaW50LW5leHQoJG5hbWUsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMsICRicmVha3BvaW50LW5hbWVzOiBtYXAta2V5cygkYnJlYWtwb2ludHMpKSB7XFxuICAkbjogaW5kZXgoJGJyZWFrcG9pbnQtbmFtZXMsICRuYW1lKTtcXG4gIEByZXR1cm4gaWYoJG4gPCBsZW5ndGgoJGJyZWFrcG9pbnQtbmFtZXMpLCBudGgoJGJyZWFrcG9pbnQtbmFtZXMsICRuICsgMSksIG51bGwpO1xcbn1cXG5cXG4vLyBNaW5pbXVtIGJyZWFrcG9pbnQgd2lkdGguIE51bGwgZm9yIHRoZSBzbWFsbGVzdCAoZmlyc3QpIGJyZWFrcG9pbnQuXFxuLy9cXG4vLyAgICA+PiBicmVha3BvaW50LW1pbihzbSwgKHhzOiAwLCBzbTogNTc2cHgsIG1kOiA3NjhweCwgbGc6IDk5MnB4LCB4bDogMTIwMHB4KSlcXG4vLyAgICA1NzZweFxcbkBmdW5jdGlvbiBicmVha3BvaW50LW1pbigkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xcbiAgJG1pbjogbWFwLWdldCgkYnJlYWtwb2ludHMsICRuYW1lKTtcXG4gIEByZXR1cm4gaWYoJG1pbiAhPSAwLCAkbWluLCBudWxsKTtcXG59XFxuXFxuLy8gTWF4aW11bSBicmVha3BvaW50IHdpZHRoLiBOdWxsIGZvciB0aGUgbGFyZ2VzdCAobGFzdCkgYnJlYWtwb2ludC5cXG4vLyBUaGUgbWF4aW11bSB2YWx1ZSBpcyBjYWxjdWxhdGVkIGFzIHRoZSBtaW5pbXVtIG9mIHRoZSBuZXh0IG9uZSBsZXNzIDAuMDJweFxcbi8vIHRvIHdvcmsgYXJvdW5kIHRoZSBsaW1pdGF0aW9ucyBvZiBgbWluLWAgYW5kIGBtYXgtYCBwcmVmaXhlcyBhbmQgdmlld3BvcnRzIHdpdGggZnJhY3Rpb25hbCB3aWR0aHMuXFxuLy8gU2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9tZWRpYXF1ZXJpZXMtNC8jbXEtbWluLW1heFxcbi8vIFVzZXMgMC4wMnB4IHJhdGhlciB0aGFuIDAuMDFweCB0byB3b3JrIGFyb3VuZCBhIGN1cnJlbnQgcm91bmRpbmcgYnVnIGluIFNhZmFyaS5cXG4vLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODI2MVxcbi8vXFxuLy8gICAgPj4gYnJlYWtwb2ludC1tYXgoc20sICh4czogMCwgc206IDU3NnB4LCBtZDogNzY4cHgsIGxnOiA5OTJweCwgeGw6IDEyMDBweCkpXFxuLy8gICAgNzY3Ljk4cHhcXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1tYXgoJG5hbWUsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcXG4gICRuZXh0OiBicmVha3BvaW50LW5leHQoJG5hbWUsICRicmVha3BvaW50cyk7XFxuICBAcmV0dXJuIGlmKCRuZXh0LCBicmVha3BvaW50LW1pbigkbmV4dCwgJGJyZWFrcG9pbnRzKSAtIC4wMnB4LCBudWxsKTtcXG59XFxuXFxuLy8gUmV0dXJucyBhIGJsYW5rIHN0cmluZyBpZiBzbWFsbGVzdCBicmVha3BvaW50LCBvdGhlcndpc2UgcmV0dXJucyB0aGUgbmFtZSB3aXRoIGEgZGFzaCBpbmZyb250Llxcbi8vIFVzZWZ1bCBmb3IgbWFraW5nIHJlc3BvbnNpdmUgdXRpbGl0aWVzLlxcbi8vXFxuLy8gICAgPj4gYnJlYWtwb2ludC1pbmZpeCh4cywgKHhzOiAwLCBzbTogNTc2cHgsIG1kOiA3NjhweCwgbGc6IDk5MnB4LCB4bDogMTIwMHB4KSlcXG4vLyAgICBcXFwiXFxcIiAgKFJldHVybnMgYSBibGFuayBzdHJpbmcpXFxuLy8gICAgPj4gYnJlYWtwb2ludC1pbmZpeChzbSwgKHhzOiAwLCBzbTogNTc2cHgsIG1kOiA3NjhweCwgbGc6IDk5MnB4LCB4bDogMTIwMHB4KSlcXG4vLyAgICBcXFwiLXNtXFxcIlxcbkBmdW5jdGlvbiBicmVha3BvaW50LWluZml4KCRuYW1lLCAkYnJlYWtwb2ludHM6ICRncmlkLWJyZWFrcG9pbnRzKSB7XFxuICBAcmV0dXJuIGlmKGJyZWFrcG9pbnQtbWluKCRuYW1lLCAkYnJlYWtwb2ludHMpID09IG51bGwsIFxcXCJcXFwiLCBcXFwiLSN7JG5hbWV9XFxcIik7XFxufVxcblxcbi8vIE1lZGlhIG9mIGF0IGxlYXN0IHRoZSBtaW5pbXVtIGJyZWFrcG9pbnQgd2lkdGguIE5vIHF1ZXJ5IGZvciB0aGUgc21hbGxlc3QgYnJlYWtwb2ludC5cXG4vLyBNYWtlcyB0aGUgQGNvbnRlbnQgYXBwbHkgdG8gdGhlIGdpdmVuIGJyZWFrcG9pbnQgYW5kIHdpZGVyLlxcbkBtaXhpbiBtZWRpYS1icmVha3BvaW50LXVwKCRuYW1lLCAkYnJlYWtwb2ludHM6ICRncmlkLWJyZWFrcG9pbnRzKSB7XFxuICAkbWluOiBicmVha3BvaW50LW1pbigkbmFtZSwgJGJyZWFrcG9pbnRzKTtcXG4gIEBpZiAkbWluIHtcXG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRtaW4pIHtcXG4gICAgICBAY29udGVudDtcXG4gICAgfVxcbiAgfSBAZWxzZSB7XFxuICAgIEBjb250ZW50O1xcbiAgfVxcbn1cXG5cXG4vLyBNZWRpYSBvZiBhdCBtb3N0IHRoZSBtYXhpbXVtIGJyZWFrcG9pbnQgd2lkdGguIE5vIHF1ZXJ5IGZvciB0aGUgbGFyZ2VzdCBicmVha3BvaW50Llxcbi8vIE1ha2VzIHRoZSBAY29udGVudCBhcHBseSB0byB0aGUgZ2l2ZW4gYnJlYWtwb2ludCBhbmQgbmFycm93ZXIuXFxuQG1peGluIG1lZGlhLWJyZWFrcG9pbnQtZG93bigkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xcbiAgJG1heDogYnJlYWtwb2ludC1tYXgoJG5hbWUsICRicmVha3BvaW50cyk7XFxuICBAaWYgJG1heCB7XFxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkbWF4KSB7XFxuICAgICAgQGNvbnRlbnQ7XFxuICAgIH1cXG4gIH0gQGVsc2Uge1xcbiAgICBAY29udGVudDtcXG4gIH1cXG59XFxuXFxuLy8gTWVkaWEgdGhhdCBzcGFucyBtdWx0aXBsZSBicmVha3BvaW50IHdpZHRocy5cXG4vLyBNYWtlcyB0aGUgQGNvbnRlbnQgYXBwbHkgYmV0d2VlbiB0aGUgbWluIGFuZCBtYXggYnJlYWtwb2ludHNcXG5AbWl4aW4gbWVkaWEtYnJlYWtwb2ludC1iZXR3ZWVuKCRsb3dlciwgJHVwcGVyLCAkYnJlYWtwb2ludHM6ICRncmlkLWJyZWFrcG9pbnRzKSB7XFxuICAkbWluOiBicmVha3BvaW50LW1pbigkbG93ZXIsICRicmVha3BvaW50cyk7XFxuICAkbWF4OiBicmVha3BvaW50LW1heCgkdXBwZXIsICRicmVha3BvaW50cyk7XFxuXFxuICBAaWYgJG1pbiAhPSBudWxsIGFuZCAkbWF4ICE9IG51bGwge1xcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJG1pbikgYW5kIChtYXgtd2lkdGg6ICRtYXgpIHtcXG4gICAgICBAY29udGVudDtcXG4gICAgfVxcbiAgfSBAZWxzZSBpZiAkbWF4ID09IG51bGwge1xcbiAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCRsb3dlciwgJGJyZWFrcG9pbnRzKSB7XFxuICAgICAgQGNvbnRlbnQ7XFxuICAgIH1cXG4gIH0gQGVsc2UgaWYgJG1pbiA9PSBudWxsIHtcXG4gICAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC1kb3duKCR1cHBlciwgJGJyZWFrcG9pbnRzKSB7XFxuICAgICAgQGNvbnRlbnQ7XFxuICAgIH1cXG4gIH1cXG59XFxuXFxuLy8gTWVkaWEgYmV0d2VlbiB0aGUgYnJlYWtwb2ludCdzIG1pbmltdW0gYW5kIG1heGltdW0gd2lkdGhzLlxcbi8vIE5vIG1pbmltdW0gZm9yIHRoZSBzbWFsbGVzdCBicmVha3BvaW50LCBhbmQgbm8gbWF4aW11bSBmb3IgdGhlIGxhcmdlc3Qgb25lLlxcbi8vIE1ha2VzIHRoZSBAY29udGVudCBhcHBseSBvbmx5IHRvIHRoZSBnaXZlbiBicmVha3BvaW50LCBub3Qgdmlld3BvcnRzIGFueSB3aWRlciBvciBuYXJyb3dlci5cXG5AbWl4aW4gbWVkaWEtYnJlYWtwb2ludC1vbmx5KCRuYW1lLCAkYnJlYWtwb2ludHM6ICRncmlkLWJyZWFrcG9pbnRzKSB7XFxuICAkbWluOiBicmVha3BvaW50LW1pbigkbmFtZSwgJGJyZWFrcG9pbnRzKTtcXG4gICRtYXg6IGJyZWFrcG9pbnQtbWF4KCRuYW1lLCAkYnJlYWtwb2ludHMpO1xcblxcbiAgQGlmICRtaW4gIT0gbnVsbCBhbmQgJG1heCAhPSBudWxsIHtcXG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XFxuICAgICAgQGNvbnRlbnQ7XFxuICAgIH1cXG4gIH0gQGVsc2UgaWYgJG1heCA9PSBudWxsIHtcXG4gICAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC11cCgkbmFtZSwgJGJyZWFrcG9pbnRzKSB7XFxuICAgICAgQGNvbnRlbnQ7XFxuICAgIH1cXG4gIH0gQGVsc2UgaWYgJG1pbiA9PSBudWxsIHtcXG4gICAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC1kb3duKCRuYW1lLCAkYnJlYWtwb2ludHMpIHtcXG4gICAgICBAY29udGVudDtcXG4gICAgfVxcbiAgfVxcbn1cXG5cIixcIi8vIENyZWRpdDogTmljb2xhcyBHYWxsYWdoZXIgYW5kIFNVSVQgQ1NTLlxcblxcbi5lbWJlZC1yZXNwb25zaXZlIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG5cXG4gICY6OmJlZm9yZSB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIH1cXG5cXG4gIC5lbWJlZC1yZXNwb25zaXZlLWl0ZW0sXFxuICBpZnJhbWUsXFxuICBlbWJlZCxcXG4gIG9iamVjdCxcXG4gIHZpZGVvIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB0b3A6IDA7XFxuICAgIGJvdHRvbTogMDtcXG4gICAgbGVmdDogMDtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgYm9yZGVyOiAwO1xcbiAgfVxcbn1cXG5cXG4uZW1iZWQtcmVzcG9uc2l2ZS0yMWJ5OSB7XFxuICAmOjpiZWZvcmUge1xcbiAgICBwYWRkaW5nLXRvcDogcGVyY2VudGFnZSg5IC8gMjEpO1xcbiAgfVxcbn1cXG5cXG4uZW1iZWQtcmVzcG9uc2l2ZS0xNmJ5OSB7XFxuICAmOjpiZWZvcmUge1xcbiAgICBwYWRkaW5nLXRvcDogcGVyY2VudGFnZSg5IC8gMTYpO1xcbiAgfVxcbn1cXG5cXG4uZW1iZWQtcmVzcG9uc2l2ZS00YnkzIHtcXG4gICY6OmJlZm9yZSB7XFxuICAgIHBhZGRpbmctdG9wOiBwZXJjZW50YWdlKDMgLyA0KTtcXG4gIH1cXG59XFxuXFxuLmVtYmVkLXJlc3BvbnNpdmUtMWJ5MSB7XFxuICAmOjpiZWZvcmUge1xcbiAgICBwYWRkaW5nLXRvcDogcGVyY2VudGFnZSgxIC8gMSk7XFxuICB9XFxufVxcblwiLFwiLy8gc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XFxuXFxuLy8gRmxleCB2YXJpYXRpb25cXG4vL1xcbi8vIEN1c3RvbSBzdHlsZXMgZm9yIGFkZGl0aW9uYWwgZmxleCBhbGlnbm1lbnQgb3B0aW9ucy5cXG5cXG5AZWFjaCAkYnJlYWtwb2ludCBpbiBtYXAta2V5cygkZ3JpZC1icmVha3BvaW50cykge1xcbiAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC11cCgkYnJlYWtwb2ludCkge1xcbiAgICAkaW5maXg6IGJyZWFrcG9pbnQtaW5maXgoJGJyZWFrcG9pbnQsICRncmlkLWJyZWFrcG9pbnRzKTtcXG5cXG4gICAgLmZsZXgjeyRpbmZpeH0tcm93ICAgICAgICAgICAgeyBmbGV4LWRpcmVjdGlvbjogcm93ICFpbXBvcnRhbnQ7IH1cXG4gICAgLmZsZXgjeyRpbmZpeH0tY29sdW1uICAgICAgICAgeyBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7IH1cXG4gICAgLmZsZXgjeyRpbmZpeH0tcm93LXJldmVyc2UgICAgeyBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2UgIWltcG9ydGFudDsgfVxcbiAgICAuZmxleCN7JGluZml4fS1jb2x1bW4tcmV2ZXJzZSB7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZSAhaW1wb3J0YW50OyB9XFxuXFxuICAgIC5mbGV4I3skaW5maXh9LXdyYXAgICAgICAgICB7IGZsZXgtd3JhcDogd3JhcCAhaW1wb3J0YW50OyB9XFxuICAgIC5mbGV4I3skaW5maXh9LW5vd3JhcCAgICAgICB7IGZsZXgtd3JhcDogbm93cmFwICFpbXBvcnRhbnQ7IH1cXG4gICAgLmZsZXgjeyRpbmZpeH0td3JhcC1yZXZlcnNlIHsgZmxleC13cmFwOiB3cmFwLXJldmVyc2UgIWltcG9ydGFudDsgfVxcblxcbiAgICAuanVzdGlmeS1jb250ZW50I3skaW5maXh9LXN0YXJ0ICAgeyBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDsgfVxcbiAgICAuanVzdGlmeS1jb250ZW50I3skaW5maXh9LWVuZCAgICAgeyBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kICFpbXBvcnRhbnQ7IH1cXG4gICAgLmp1c3RpZnktY29udGVudCN7JGluZml4fS1jZW50ZXIgIHsganVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDsgfVxcbiAgICAuanVzdGlmeS1jb250ZW50I3skaW5maXh9LWJldHdlZW4geyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDsgfVxcbiAgICAuanVzdGlmeS1jb250ZW50I3skaW5maXh9LWFyb3VuZCAgeyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZCAhaW1wb3J0YW50OyB9XFxuXFxuICAgIC5hbGlnbi1pdGVtcyN7JGluZml4fS1zdGFydCAgICB7IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0ICFpbXBvcnRhbnQ7IH1cXG4gICAgLmFsaWduLWl0ZW1zI3skaW5maXh9LWVuZCAgICAgIHsgYWxpZ24taXRlbXM6IGZsZXgtZW5kICFpbXBvcnRhbnQ7IH1cXG4gICAgLmFsaWduLWl0ZW1zI3skaW5maXh9LWNlbnRlciAgIHsgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50OyB9XFxuICAgIC5hbGlnbi1pdGVtcyN7JGluZml4fS1iYXNlbGluZSB7IGFsaWduLWl0ZW1zOiBiYXNlbGluZSAhaW1wb3J0YW50OyB9XFxuICAgIC5hbGlnbi1pdGVtcyN7JGluZml4fS1zdHJldGNoICB7IGFsaWduLWl0ZW1zOiBzdHJldGNoICFpbXBvcnRhbnQ7IH1cXG5cXG4gICAgLmFsaWduLWNvbnRlbnQjeyRpbmZpeH0tc3RhcnQgICB7IGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQgIWltcG9ydGFudDsgfVxcbiAgICAuYWxpZ24tY29udGVudCN7JGluZml4fS1lbmQgICAgIHsgYWxpZ24tY29udGVudDogZmxleC1lbmQgIWltcG9ydGFudDsgfVxcbiAgICAuYWxpZ24tY29udGVudCN7JGluZml4fS1jZW50ZXIgIHsgYWxpZ24tY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7IH1cXG4gICAgLmFsaWduLWNvbnRlbnQjeyRpbmZpeH0tYmV0d2VlbiB7IGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDsgfVxcbiAgICAuYWxpZ24tY29udGVudCN7JGluZml4fS1hcm91bmQgIHsgYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kICFpbXBvcnRhbnQ7IH1cXG4gICAgLmFsaWduLWNvbnRlbnQjeyRpbmZpeH0tc3RyZXRjaCB7IGFsaWduLWNvbnRlbnQ6IHN0cmV0Y2ggIWltcG9ydGFudDsgfVxcblxcbiAgICAuYWxpZ24tc2VsZiN7JGluZml4fS1hdXRvICAgICB7IGFsaWduLXNlbGY6IGF1dG8gIWltcG9ydGFudDsgfVxcbiAgICAuYWxpZ24tc2VsZiN7JGluZml4fS1zdGFydCAgICB7IGFsaWduLXNlbGY6IGZsZXgtc3RhcnQgIWltcG9ydGFudDsgfVxcbiAgICAuYWxpZ24tc2VsZiN7JGluZml4fS1lbmQgICAgICB7IGFsaWduLXNlbGY6IGZsZXgtZW5kICFpbXBvcnRhbnQ7IH1cXG4gICAgLmFsaWduLXNlbGYjeyRpbmZpeH0tY2VudGVyICAgeyBhbGlnbi1zZWxmOiBjZW50ZXIgIWltcG9ydGFudDsgfVxcbiAgICAuYWxpZ24tc2VsZiN7JGluZml4fS1iYXNlbGluZSB7IGFsaWduLXNlbGY6IGJhc2VsaW5lICFpbXBvcnRhbnQ7IH1cXG4gICAgLmFsaWduLXNlbGYjeyRpbmZpeH0tc3RyZXRjaCAgeyBhbGlnbi1zZWxmOiBzdHJldGNoICFpbXBvcnRhbnQ7IH1cXG4gIH1cXG59XFxuXCIsXCJAZWFjaCAkYnJlYWtwb2ludCBpbiBtYXAta2V5cygkZ3JpZC1icmVha3BvaW50cykge1xcbiAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC11cCgkYnJlYWtwb2ludCkge1xcbiAgICAkaW5maXg6IGJyZWFrcG9pbnQtaW5maXgoJGJyZWFrcG9pbnQsICRncmlkLWJyZWFrcG9pbnRzKTtcXG5cXG4gICAgLmZsb2F0I3skaW5maXh9LWxlZnQgIHsgQGluY2x1ZGUgZmxvYXQtbGVmdDsgfVxcbiAgICAuZmxvYXQjeyRpbmZpeH0tcmlnaHQgeyBAaW5jbHVkZSBmbG9hdC1yaWdodDsgfVxcbiAgICAuZmxvYXQjeyRpbmZpeH0tbm9uZSAgeyBAaW5jbHVkZSBmbG9hdC1ub25lOyB9XFxuICB9XFxufVxcblwiLFwiLy8gc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XFxuXFxuQG1peGluIGZsb2F0LWxlZnQge1xcbiAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDtcXG59XFxuQG1peGluIGZsb2F0LXJpZ2h0IHtcXG4gIGZsb2F0OiByaWdodCAhaW1wb3J0YW50O1xcbn1cXG5AbWl4aW4gZmxvYXQtbm9uZSB7XFxuICBmbG9hdDogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cIixcIi8vIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxcblxcbi8vIENvbW1vbiB2YWx1ZXNcXG5cXG4vLyBTYXNzIGxpc3Qgbm90IGluIHZhcmlhYmxlcyBzaW5jZSBpdCdzIG5vdCBpbnRlbmRlZCBmb3IgY3VzdG9taXphdGlvbi5cXG4kcG9zaXRpb25zOiBzdGF0aWMsIHJlbGF0aXZlLCBhYnNvbHV0ZSwgZml4ZWQsIHN0aWNreTtcXG5cXG5AZWFjaCAkcG9zaXRpb24gaW4gJHBvc2l0aW9ucyB7XFxuICAucG9zaXRpb24tI3skcG9zaXRpb259IHsgcG9zaXRpb246ICRwb3NpdGlvbiAhaW1wb3J0YW50OyB9XFxufVxcblxcbi8vIFNob3J0aGFuZFxcblxcbi5maXhlZC10b3Age1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBsZWZ0OiAwO1xcbiAgei1pbmRleDogJHppbmRleC1maXhlZDtcXG59XFxuXFxuLmZpeGVkLWJvdHRvbSB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICB6LWluZGV4OiAkemluZGV4LWZpeGVkO1xcbn1cXG5cXG4uc3RpY2t5LXRvcCB7XFxuICBAc3VwcG9ydHMgKHBvc2l0aW9uOiBzdGlja3kpIHtcXG4gICAgcG9zaXRpb246IHN0aWNreTtcXG4gICAgdG9wOiAwO1xcbiAgICB6LWluZGV4OiAkemluZGV4LXN0aWNreTtcXG4gIH1cXG59XFxuXCIsXCIvLyBWYXJpYWJsZXNcXG4vL1xcbi8vIFZhcmlhYmxlcyBzaG91bGQgZm9sbG93IHRoZSBgJGNvbXBvbmVudC1zdGF0ZS1wcm9wZXJ0eS1zaXplYCBmb3JtdWxhIGZvclxcbi8vIGNvbnNpc3RlbnQgbmFtaW5nLiBFeDogJG5hdi1saW5rLWRpc2FibGVkLWNvbG9yIGFuZCAkbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXhzLlxcblxcblxcbi8vXFxuLy8gQ29sb3Igc3lzdGVtXFxuLy9cXG5cXG4vLyBzdHlsZWxpbnQtZGlzYWJsZVxcbiR3aGl0ZTogICAgI2ZmZiAhZGVmYXVsdDtcXG4kZ3JheS0xMDA6ICNmOGY5ZmEgIWRlZmF1bHQ7XFxuJGdyYXktMjAwOiAjZTllY2VmICFkZWZhdWx0O1xcbiRncmF5LTMwMDogI2RlZTJlNiAhZGVmYXVsdDtcXG4kZ3JheS00MDA6ICNjZWQ0ZGEgIWRlZmF1bHQ7XFxuJGdyYXktNTAwOiAjYWRiNWJkICFkZWZhdWx0O1xcbiRncmF5LTYwMDogIzZjNzU3ZCAhZGVmYXVsdDtcXG4kZ3JheS03MDA6ICM0OTUwNTcgIWRlZmF1bHQ7XFxuJGdyYXktODAwOiAjMzQzYTQwICFkZWZhdWx0O1xcbiRncmF5LTkwMDogIzIxMjUyOSAhZGVmYXVsdDtcXG4kYmxhY2s6ICAgICMwMDAgIWRlZmF1bHQ7XFxuXFxuJGdyYXlzOiAoKSAhZGVmYXVsdDtcXG4kZ3JheXM6IG1hcC1tZXJnZSgoXFxuICBcXFwiMTAwXFxcIjogJGdyYXktMTAwLFxcbiAgXFxcIjIwMFxcXCI6ICRncmF5LTIwMCxcXG4gIFxcXCIzMDBcXFwiOiAkZ3JheS0zMDAsXFxuICBcXFwiNDAwXFxcIjogJGdyYXktNDAwLFxcbiAgXFxcIjUwMFxcXCI6ICRncmF5LTUwMCxcXG4gIFxcXCI2MDBcXFwiOiAkZ3JheS02MDAsXFxuICBcXFwiNzAwXFxcIjogJGdyYXktNzAwLFxcbiAgXFxcIjgwMFxcXCI6ICRncmF5LTgwMCxcXG4gIFxcXCI5MDBcXFwiOiAkZ3JheS05MDBcXG4pLCAkZ3JheXMpO1xcblxcbiRibHVlOiAgICAjMDA3YmZmICFkZWZhdWx0O1xcbiRpbmRpZ286ICAjNjYxMGYyICFkZWZhdWx0O1xcbiRwdXJwbGU6ICAjNmY0MmMxICFkZWZhdWx0O1xcbiRwaW5rOiAgICAjZTgzZThjICFkZWZhdWx0O1xcbiRyZWQ6ICAgICAjZGMzNTQ1ICFkZWZhdWx0O1xcbiRvcmFuZ2U6ICAjZmQ3ZTE0ICFkZWZhdWx0O1xcbiR5ZWxsb3c6ICAjZmZjMTA3ICFkZWZhdWx0O1xcbiRncmVlbjogICAjMjhhNzQ1ICFkZWZhdWx0O1xcbiR0ZWFsOiAgICAjMjBjOTk3ICFkZWZhdWx0O1xcbiRjeWFuOiAgICAjMTdhMmI4ICFkZWZhdWx0O1xcblxcbiRjb2xvcnM6ICgpICFkZWZhdWx0O1xcbiRjb2xvcnM6IG1hcC1tZXJnZSgoXFxuICBcXFwiYmx1ZVxcXCI6ICAgICAgICRibHVlLFxcbiAgXFxcImluZGlnb1xcXCI6ICAgICAkaW5kaWdvLFxcbiAgXFxcInB1cnBsZVxcXCI6ICAgICAkcHVycGxlLFxcbiAgXFxcInBpbmtcXFwiOiAgICAgICAkcGluayxcXG4gIFxcXCJyZWRcXFwiOiAgICAgICAgJHJlZCxcXG4gIFxcXCJvcmFuZ2VcXFwiOiAgICAgJG9yYW5nZSxcXG4gIFxcXCJ5ZWxsb3dcXFwiOiAgICAgJHllbGxvdyxcXG4gIFxcXCJncmVlblxcXCI6ICAgICAgJGdyZWVuLFxcbiAgXFxcInRlYWxcXFwiOiAgICAgICAkdGVhbCxcXG4gIFxcXCJjeWFuXFxcIjogICAgICAgJGN5YW4sXFxuICBcXFwid2hpdGVcXFwiOiAgICAgICR3aGl0ZSxcXG4gIFxcXCJncmF5XFxcIjogICAgICAgJGdyYXktNjAwLFxcbiAgXFxcImdyYXktZGFya1xcXCI6ICAkZ3JheS04MDBcXG4pLCAkY29sb3JzKTtcXG5cXG4kcHJpbWFyeTogICAgICAgJGJsdWUgIWRlZmF1bHQ7XFxuJHNlY29uZGFyeTogICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG4kc3VjY2VzczogICAgICAgJGdyZWVuICFkZWZhdWx0O1xcbiRpbmZvOiAgICAgICAgICAkY3lhbiAhZGVmYXVsdDtcXG4kd2FybmluZzogICAgICAgJHllbGxvdyAhZGVmYXVsdDtcXG4kZGFuZ2VyOiAgICAgICAgJHJlZCAhZGVmYXVsdDtcXG4kbGlnaHQ6ICAgICAgICAgJGdyYXktMTAwICFkZWZhdWx0O1xcbiRkYXJrOiAgICAgICAgICAkZ3JheS04MDAgIWRlZmF1bHQ7XFxuXFxuJHRoZW1lLWNvbG9yczogKCkgIWRlZmF1bHQ7XFxuJHRoZW1lLWNvbG9yczogbWFwLW1lcmdlKChcXG4gIFxcXCJwcmltYXJ5XFxcIjogICAgJHByaW1hcnksXFxuICBcXFwic2Vjb25kYXJ5XFxcIjogICRzZWNvbmRhcnksXFxuICBcXFwic3VjY2Vzc1xcXCI6ICAgICRzdWNjZXNzLFxcbiAgXFxcImluZm9cXFwiOiAgICAgICAkaW5mbyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogICAgJHdhcm5pbmcsXFxuICBcXFwiZGFuZ2VyXFxcIjogICAgICRkYW5nZXIsXFxuICBcXFwibGlnaHRcXFwiOiAgICAgICRsaWdodCxcXG4gIFxcXCJkYXJrXFxcIjogICAgICAgJGRhcmtcXG4pLCAkdGhlbWUtY29sb3JzKTtcXG4vLyBzdHlsZWxpbnQtZW5hYmxlXFxuXFxuLy8gU2V0IGEgc3BlY2lmaWMganVtcCBwb2ludCBmb3IgcmVxdWVzdGluZyBjb2xvciBqdW1wc1xcbiR0aGVtZS1jb2xvci1pbnRlcnZhbDogICAgICA4JSAhZGVmYXVsdDtcXG5cXG4vLyBUaGUgeWlxIGxpZ2h0bmVzcyB2YWx1ZSB0aGF0IGRldGVybWluZXMgd2hlbiB0aGUgbGlnaHRuZXNzIG9mIGNvbG9yIGNoYW5nZXMgZnJvbSBcXFwiZGFya1xcXCIgdG8gXFxcImxpZ2h0XFxcIi4gQWNjZXB0YWJsZSB2YWx1ZXMgYXJlIGJldHdlZW4gMCBhbmQgMjU1LlxcbiR5aXEtY29udHJhc3RlZC10aHJlc2hvbGQ6IDE1MCAhZGVmYXVsdDtcXG5cXG4vLyBDdXN0b21pemUgdGhlIGxpZ2h0IGFuZCBkYXJrIHRleHQgY29sb3JzIGZvciB1c2UgaW4gb3VyIFlJUSBjb2xvciBjb250cmFzdCBmdW5jdGlvbi5cXG4keWlxLXRleHQtZGFyazogJGdyYXktOTAwICFkZWZhdWx0O1xcbiR5aXEtdGV4dC1saWdodDogJHdoaXRlICFkZWZhdWx0O1xcblxcbi8vIE9wdGlvbnNcXG4vL1xcbi8vIFF1aWNrbHkgbW9kaWZ5IGdsb2JhbCBzdHlsaW5nIGJ5IGVuYWJsaW5nIG9yIGRpc2FibGluZyBvcHRpb25hbCBmZWF0dXJlcy5cXG5cXG4kZW5hYmxlLWNhcmV0OiAgICAgICAgICAgICAgdHJ1ZSAhZGVmYXVsdDtcXG4kZW5hYmxlLXJvdW5kZWQ6ICAgICAgICAgICAgdHJ1ZSAhZGVmYXVsdDtcXG4kZW5hYmxlLXNoYWRvd3M6ICAgICAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XFxuJGVuYWJsZS1ncmFkaWVudHM6ICAgICAgICAgIGZhbHNlICFkZWZhdWx0O1xcbiRlbmFibGUtdHJhbnNpdGlvbnM6ICAgICAgICB0cnVlICFkZWZhdWx0O1xcbiRlbmFibGUtaG92ZXItbWVkaWEtcXVlcnk6ICBmYWxzZSAhZGVmYXVsdDsgLy8gRGVwcmVjYXRlZCwgbm8gbG9uZ2VyIGFmZmVjdHMgYW55IGNvbXBpbGVkIENTU1xcbiRlbmFibGUtZ3JpZC1jbGFzc2VzOiAgICAgICB0cnVlICFkZWZhdWx0O1xcbiRlbmFibGUtcHJpbnQtc3R5bGVzOiAgICAgICB0cnVlICFkZWZhdWx0O1xcblxcblxcbi8vIFNwYWNpbmdcXG4vL1xcbi8vIENvbnRyb2wgdGhlIGRlZmF1bHQgc3R5bGluZyBvZiBtb3N0IEJvb3RzdHJhcCBlbGVtZW50cyBieSBtb2RpZnlpbmcgdGhlc2VcXG4vLyB2YXJpYWJsZXMuIE1vc3RseSBmb2N1c2VkIG9uIHNwYWNpbmcuXFxuLy8gWW91IGNhbiBhZGQgbW9yZSBlbnRyaWVzIHRvIHRoZSAkc3BhY2VycyBtYXAsIHNob3VsZCB5b3UgbmVlZCBtb3JlIHZhcmlhdGlvbi5cXG5cXG4vLyBzdHlsZWxpbnQtZGlzYWJsZVxcbiRzcGFjZXI6IDFyZW0gIWRlZmF1bHQ7XFxuJHNwYWNlcnM6ICgpICFkZWZhdWx0O1xcbiRzcGFjZXJzOiBtYXAtbWVyZ2UoKFxcbiAgMDogMCxcXG4gIDE6ICgkc3BhY2VyICogLjI1KSxcXG4gIDI6ICgkc3BhY2VyICogLjUpLFxcbiAgMzogJHNwYWNlcixcXG4gIDQ6ICgkc3BhY2VyICogMS41KSxcXG4gIDU6ICgkc3BhY2VyICogMylcXG4pLCAkc3BhY2Vycyk7XFxuXFxuLy8gVGhpcyB2YXJpYWJsZSBhZmZlY3RzIHRoZSBgLmgtKmAgYW5kIGAudy0qYCBjbGFzc2VzLlxcbiRzaXplczogKCkgIWRlZmF1bHQ7XFxuJHNpemVzOiBtYXAtbWVyZ2UoKFxcbiAgMjU6IDI1JSxcXG4gIDUwOiA1MCUsXFxuICA3NTogNzUlLFxcbiAgMTAwOiAxMDAlXFxuKSwgJHNpemVzKTtcXG4vLyBzdHlsZWxpbnQtZW5hYmxlXFxuXFxuLy8gQm9keVxcbi8vXFxuLy8gU2V0dGluZ3MgZm9yIHRoZSBgPGJvZHk+YCBlbGVtZW50LlxcblxcbiRib2R5LWJnOiAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGJvZHktY29sb3I6ICAgICAgICAgICAgICAgICRncmF5LTkwMCAhZGVmYXVsdDtcXG5cXG4vLyBMaW5rc1xcbi8vXFxuLy8gU3R5bGUgYW5jaG9yIGVsZW1lbnRzLlxcblxcbiRsaW5rLWNvbG9yOiAgICAgICAgICAgICAgICB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpICFkZWZhdWx0O1xcbiRsaW5rLWRlY29yYXRpb246ICAgICAgICAgICBub25lICFkZWZhdWx0O1xcbiRsaW5rLWhvdmVyLWNvbG9yOiAgICAgICAgICBkYXJrZW4oJGxpbmstY29sb3IsIDE1JSkgIWRlZmF1bHQ7XFxuJGxpbmstaG92ZXItZGVjb3JhdGlvbjogICAgIHVuZGVybGluZSAhZGVmYXVsdDtcXG5cXG4vLyBQYXJhZ3JhcGhzXFxuLy9cXG4vLyBTdHlsZSBwIGVsZW1lbnQuXFxuXFxuJHBhcmFncmFwaC1tYXJnaW4tYm90dG9tOiAgIDFyZW0gIWRlZmF1bHQ7XFxuXFxuXFxuLy8gR3JpZCBicmVha3BvaW50c1xcbi8vXFxuLy8gRGVmaW5lIHRoZSBtaW5pbXVtIGRpbWVuc2lvbnMgYXQgd2hpY2ggeW91ciBsYXlvdXQgd2lsbCBjaGFuZ2UsXFxuLy8gYWRhcHRpbmcgdG8gZGlmZmVyZW50IHNjcmVlbiBzaXplcywgZm9yIHVzZSBpbiBtZWRpYSBxdWVyaWVzLlxcblxcbiRncmlkLWJyZWFrcG9pbnRzOiAoXFxuICB4czogMCxcXG4gIHNtOiA1NzZweCxcXG4gIG1kOiA3NjhweCxcXG4gIGxnOiA5OTJweCxcXG4gIHhsOiAxMjAwcHhcXG4pICFkZWZhdWx0O1xcblxcbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRncmlkLWJyZWFrcG9pbnRzLCBcXFwiJGdyaWQtYnJlYWtwb2ludHNcXFwiKTtcXG5AaW5jbHVkZSBfYXNzZXJ0LXN0YXJ0cy1hdC16ZXJvKCRncmlkLWJyZWFrcG9pbnRzKTtcXG5cXG5cXG4vLyBHcmlkIGNvbnRhaW5lcnNcXG4vL1xcbi8vIERlZmluZSB0aGUgbWF4aW11bSB3aWR0aCBvZiBgLmNvbnRhaW5lcmAgZm9yIGRpZmZlcmVudCBzY3JlZW4gc2l6ZXMuXFxuXFxuJGNvbnRhaW5lci1tYXgtd2lkdGhzOiAoXFxuICBzbTogNTQwcHgsXFxuICBtZDogNzIwcHgsXFxuICBsZzogOTYwcHgsXFxuICB4bDogMTE0MHB4XFxuKSAhZGVmYXVsdDtcXG5cXG5AaW5jbHVkZSBfYXNzZXJ0LWFzY2VuZGluZygkY29udGFpbmVyLW1heC13aWR0aHMsIFxcXCIkY29udGFpbmVyLW1heC13aWR0aHNcXFwiKTtcXG5cXG5cXG4vLyBHcmlkIGNvbHVtbnNcXG4vL1xcbi8vIFNldCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgYW5kIHNwZWNpZnkgdGhlIHdpZHRoIG9mIHRoZSBndXR0ZXJzLlxcblxcbiRncmlkLWNvbHVtbnM6ICAgICAgICAgICAgICAgIDEyICFkZWZhdWx0O1xcbiRncmlkLWd1dHRlci13aWR0aDogICAgICAgICAgIDMwcHggIWRlZmF1bHQ7XFxuXFxuLy8gQ29tcG9uZW50c1xcbi8vXFxuLy8gRGVmaW5lIGNvbW1vbiBwYWRkaW5nIGFuZCBib3JkZXIgcmFkaXVzIHNpemVzIGFuZCBtb3JlLlxcblxcbiRsaW5lLWhlaWdodC1sZzogICAgICAgICAgICAgIDEuNSAhZGVmYXVsdDtcXG4kbGluZS1oZWlnaHQtc206ICAgICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XFxuXFxuJGJvcmRlci13aWR0aDogICAgICAgICAgICAgICAgMXB4ICFkZWZhdWx0O1xcbiRib3JkZXItY29sb3I6ICAgICAgICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcXG5cXG4kYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuJGJvcmRlci1yYWRpdXMtbGc6ICAgICAgICAgICAgLjNyZW0gIWRlZmF1bHQ7XFxuJGJvcmRlci1yYWRpdXMtc206ICAgICAgICAgICAgLjJyZW0gIWRlZmF1bHQ7XFxuXFxuJGNvbXBvbmVudC1hY3RpdmUtY29sb3I6ICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRjb21wb25lbnQtYWN0aXZlLWJnOiAgICAgICAgIHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIikgIWRlZmF1bHQ7XFxuXFxuJGNhcmV0LXdpZHRoOiAgICAgICAgICAgICAgICAgLjNlbSAhZGVmYXVsdDtcXG5cXG4kdHJhbnNpdGlvbi1iYXNlOiAgICAgICAgICAgICBhbGwgLjJzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xcbiR0cmFuc2l0aW9uLWZhZGU6ICAgICAgICAgICAgIG9wYWNpdHkgLjE1cyBsaW5lYXIgIWRlZmF1bHQ7XFxuJHRyYW5zaXRpb24tY29sbGFwc2U6ICAgICAgICAgaGVpZ2h0IC4zNXMgZWFzZSAhZGVmYXVsdDtcXG5cXG5cXG4vLyBGb250c1xcbi8vXFxuLy8gRm9udCwgbGluZS1oZWlnaHQsIGFuZCBjb2xvciBmb3IgYm9keSB0ZXh0LCBoZWFkaW5ncywgYW5kIG1vcmUuXFxuXFxuLy8gc3R5bGVsaW50LWRpc2FibGUgdmFsdWUta2V5d29yZC1jYXNlXFxuJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWY6ICAgICAgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsIEFyaWFsLCBzYW5zLXNlcmlmLCBcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIiAhZGVmYXVsdDtcXG4kZm9udC1mYW1pbHktbW9ub3NwYWNlOiAgICAgICBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFxcXCJMaWJlcmF0aW9uIE1vbm9cXFwiLCBcXFwiQ291cmllciBOZXdcXFwiLCBtb25vc3BhY2UgIWRlZmF1bHQ7XFxuJGZvbnQtZmFtaWx5LWJhc2U6ICAgICAgICAgICAgJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWYgIWRlZmF1bHQ7XFxuLy8gc3R5bGVsaW50LWVuYWJsZSB2YWx1ZS1rZXl3b3JkLWNhc2VcXG5cXG4kZm9udC1zaXplLWJhc2U6ICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0OyAvLyBBc3N1bWVzIHRoZSBicm93c2VyIGRlZmF1bHQsIHR5cGljYWxseSBgMTZweGBcXG4kZm9udC1zaXplLWxnOiAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogMS4yNSkgIWRlZmF1bHQ7XFxuJGZvbnQtc2l6ZS1zbTogICAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqIC44NzUpICFkZWZhdWx0O1xcblxcbiRmb250LXdlaWdodC1saWdodDogICAgICAgICAgIDMwMCAhZGVmYXVsdDtcXG4kZm9udC13ZWlnaHQtbm9ybWFsOiAgICAgICAgICA0MDAgIWRlZmF1bHQ7XFxuJGZvbnQtd2VpZ2h0LWJvbGQ6ICAgICAgICAgICAgNzAwICFkZWZhdWx0O1xcblxcbiRmb250LXdlaWdodC1iYXNlOiAgICAgICAgICAgICRmb250LXdlaWdodC1ub3JtYWwgIWRlZmF1bHQ7XFxuJGxpbmUtaGVpZ2h0LWJhc2U6ICAgICAgICAgICAgMS41ICFkZWZhdWx0O1xcblxcbiRoMS1mb250LXNpemU6ICAgICAgICAgICAgICAgICRmb250LXNpemUtYmFzZSAqIDIuNSAhZGVmYXVsdDtcXG4kaDItZm9udC1zaXplOiAgICAgICAgICAgICAgICAkZm9udC1zaXplLWJhc2UgKiAyICFkZWZhdWx0O1xcbiRoMy1mb250LXNpemU6ICAgICAgICAgICAgICAgICRmb250LXNpemUtYmFzZSAqIDEuNzUgIWRlZmF1bHQ7XFxuJGg0LWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMS41ICFkZWZhdWx0O1xcbiRoNS1mb250LXNpemU6ICAgICAgICAgICAgICAgICRmb250LXNpemUtYmFzZSAqIDEuMjUgIWRlZmF1bHQ7XFxuJGg2LWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICFkZWZhdWx0O1xcblxcbiRoZWFkaW5ncy1tYXJnaW4tYm90dG9tOiAgICAgICgkc3BhY2VyIC8gMikgIWRlZmF1bHQ7XFxuJGhlYWRpbmdzLWZvbnQtZmFtaWx5OiAgICAgICAgaW5oZXJpdCAhZGVmYXVsdDtcXG4kaGVhZGluZ3MtZm9udC13ZWlnaHQ6ICAgICAgICA1MDAgIWRlZmF1bHQ7XFxuJGhlYWRpbmdzLWxpbmUtaGVpZ2h0OiAgICAgICAgMS4yICFkZWZhdWx0O1xcbiRoZWFkaW5ncy1jb2xvcjogICAgICAgICAgICAgIGluaGVyaXQgIWRlZmF1bHQ7XFxuXFxuJGRpc3BsYXkxLXNpemU6ICAgICAgICAgICAgICAgNnJlbSAhZGVmYXVsdDtcXG4kZGlzcGxheTItc2l6ZTogICAgICAgICAgICAgICA1LjVyZW0gIWRlZmF1bHQ7XFxuJGRpc3BsYXkzLXNpemU6ICAgICAgICAgICAgICAgNC41cmVtICFkZWZhdWx0O1xcbiRkaXNwbGF5NC1zaXplOiAgICAgICAgICAgICAgIDMuNXJlbSAhZGVmYXVsdDtcXG5cXG4kZGlzcGxheTEtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuJGRpc3BsYXkyLXdlaWdodDogICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbiRkaXNwbGF5My13ZWlnaHQ6ICAgICAgICAgICAgIDMwMCAhZGVmYXVsdDtcXG4kZGlzcGxheTQtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuJGRpc3BsYXktbGluZS1oZWlnaHQ6ICAgICAgICAgJGhlYWRpbmdzLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcblxcbiRsZWFkLWZvbnQtc2l6ZTogICAgICAgICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAxLjI1KSAhZGVmYXVsdDtcXG4kbGVhZC1mb250LXdlaWdodDogICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuXFxuJHNtYWxsLWZvbnQtc2l6ZTogICAgICAgICAgICAgODAlICFkZWZhdWx0O1xcblxcbiR0ZXh0LW11dGVkOiAgICAgICAgICAgICAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG4kYmxvY2txdW90ZS1zbWFsbC1jb2xvcjogICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuJGJsb2NrcXVvdGUtZm9udC1zaXplOiAgICAgICAgKCRmb250LXNpemUtYmFzZSAqIDEuMjUpICFkZWZhdWx0O1xcblxcbiRoci1ib3JkZXItY29sb3I6ICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuJGhyLWJvcmRlci13aWR0aDogICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG5cXG4kbWFyay1wYWRkaW5nOiAgICAgICAgICAgICAgICAuMmVtICFkZWZhdWx0O1xcblxcbiRkdC1mb250LXdlaWdodDogICAgICAgICAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xcblxcbiRrYmQtYm94LXNoYWRvdzogICAgICAgICAgICAgIGluc2V0IDAgLS4xcmVtIDAgcmdiYSgkYmxhY2ssIC4yNSkgIWRlZmF1bHQ7XFxuJG5lc3RlZC1rYmQtZm9udC13ZWlnaHQ6ICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuXFxuJGxpc3QtaW5saW5lLXBhZGRpbmc6ICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuXFxuJG1hcmstYmc6ICAgICAgICAgICAgICAgICAgICAgI2ZjZjhlMyAhZGVmYXVsdDtcXG5cXG4kaHItbWFyZ2luLXk6ICAgICAgICAgICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xcblxcblxcbi8vIFRhYmxlc1xcbi8vXFxuLy8gQ3VzdG9taXplcyB0aGUgYC50YWJsZWAgY29tcG9uZW50IHdpdGggYmFzaWMgdmFsdWVzLCBlYWNoIHVzZWQgYWNyb3NzIGFsbCB0YWJsZSB2YXJpYXRpb25zLlxcblxcbiR0YWJsZS1jZWxsLXBhZGRpbmc6ICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4kdGFibGUtY2VsbC1wYWRkaW5nLXNtOiAgICAgICAuM3JlbSAhZGVmYXVsdDtcXG5cXG4kdGFibGUtYmc6ICAgICAgICAgICAgICAgICAgICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcXG4kdGFibGUtYWNjZW50LWJnOiAgICAgICAgICAgICByZ2JhKCRibGFjaywgLjA1KSAhZGVmYXVsdDtcXG4kdGFibGUtaG92ZXItYmc6ICAgICAgICAgICAgICByZ2JhKCRibGFjaywgLjA3NSkgIWRlZmF1bHQ7XFxuJHRhYmxlLWFjdGl2ZS1iZzogICAgICAgICAgICAgJHRhYmxlLWhvdmVyLWJnICFkZWZhdWx0O1xcblxcbiR0YWJsZS1ib3JkZXItd2lkdGg6ICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJHRhYmxlLWJvcmRlci1jb2xvcjogICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcblxcbiR0YWJsZS1oZWFkLWJnOiAgICAgICAgICAgICAgICRncmF5LTIwMCAhZGVmYXVsdDtcXG4kdGFibGUtaGVhZC1jb2xvcjogICAgICAgICAgICAkZ3JheS03MDAgIWRlZmF1bHQ7XFxuXFxuJHRhYmxlLWRhcmstYmc6ICAgICAgICAgICAgICAgJGdyYXktOTAwICFkZWZhdWx0O1xcbiR0YWJsZS1kYXJrLWFjY2VudC1iZzogICAgICAgIHJnYmEoJHdoaXRlLCAuMDUpICFkZWZhdWx0O1xcbiR0YWJsZS1kYXJrLWhvdmVyLWJnOiAgICAgICAgIHJnYmEoJHdoaXRlLCAuMDc1KSAhZGVmYXVsdDtcXG4kdGFibGUtZGFyay1ib3JkZXItY29sb3I6ICAgICBsaWdodGVuKCRncmF5LTkwMCwgNy41JSkgIWRlZmF1bHQ7XFxuJHRhYmxlLWRhcmstY29sb3I6ICAgICAgICAgICAgJGJvZHktYmcgIWRlZmF1bHQ7XFxuXFxuXFxuLy8gQnV0dG9ucyArIEZvcm1zXFxuLy9cXG4vLyBTaGFyZWQgdmFyaWFibGVzIHRoYXQgYXJlIHJlYXNzaWduZWQgdG8gYCRpbnB1dC1gIGFuZCBgJGJ0bi1gIHNwZWNpZmljIHZhcmlhYmxlcy5cXG5cXG4kaW5wdXQtYnRuLXBhZGRpbmcteTogICAgICAgICAuMzc1cmVtICFkZWZhdWx0O1xcbiRpbnB1dC1idG4tcGFkZGluZy14OiAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0OiAgICAgICAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYnRuLWZvY3VzLXdpZHRoOiAgICAgICAuMnJlbSAhZGVmYXVsdDtcXG4kaW5wdXQtYnRuLWZvY3VzLWNvbG9yOiAgICAgICByZ2JhKCRjb21wb25lbnQtYWN0aXZlLWJnLCAuMjUpICFkZWZhdWx0O1xcbiRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdzogIDAgMCAwICRpbnB1dC1idG4tZm9jdXMtd2lkdGggJGlucHV0LWJ0bi1mb2N1cy1jb2xvciAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYnRuLXBhZGRpbmcteS1zbTogICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXgtc206ICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbTogICAgJGxpbmUtaGVpZ2h0LXNtICFkZWZhdWx0O1xcblxcbiRpbnB1dC1idG4tcGFkZGluZy15LWxnOiAgICAgIC41cmVtICFkZWZhdWx0O1xcbiRpbnB1dC1idG4tcGFkZGluZy14LWxnOiAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZzogICAgJGxpbmUtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbiRpbnB1dC1idG4tYm9yZGVyLXdpZHRoOiAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuXFxuLy8gQnV0dG9uc1xcbi8vXFxuLy8gRm9yIGVhY2ggb2YgQm9vdHN0cmFwJ3MgYnV0dG9ucywgZGVmaW5lIHRleHQsIGJhY2tncm91bmQsIGFuZCBib3JkZXIgY29sb3IuXFxuXFxuJGJ0bi1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXkgIWRlZmF1bHQ7XFxuJGJ0bi1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXggIWRlZmF1bHQ7XFxuJGJ0bi1saW5lLWhlaWdodDogICAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodCAhZGVmYXVsdDtcXG5cXG4kYnRuLXBhZGRpbmcteS1zbTogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1zbSAhZGVmYXVsdDtcXG4kYnRuLXBhZGRpbmcteC1zbTogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1zbSAhZGVmYXVsdDtcXG4kYnRuLWxpbmUtaGVpZ2h0LXNtOiAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LXNtICFkZWZhdWx0O1xcblxcbiRidG4tcGFkZGluZy15LWxnOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LWxnICFkZWZhdWx0O1xcbiRidG4tcGFkZGluZy14LWxnOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LWxnICFkZWZhdWx0O1xcbiRidG4tbGluZS1oZWlnaHQtbGc6ICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQtbGcgIWRlZmF1bHQ7XFxuXFxuJGJ0bi1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuJGJ0bi1mb250LXdlaWdodDogICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LW5vcm1hbCAhZGVmYXVsdDtcXG4kYnRuLWJveC1zaGFkb3c6ICAgICAgICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoJHdoaXRlLCAuMTUpLCAwIDFweCAxcHggcmdiYSgkYmxhY2ssIC4wNzUpICFkZWZhdWx0O1xcbiRidG4tZm9jdXMtd2lkdGg6ICAgICAgICAgICAgICRpbnB1dC1idG4tZm9jdXMtd2lkdGggIWRlZmF1bHQ7XFxuJGJ0bi1mb2N1cy1ib3gtc2hhZG93OiAgICAgICAgJGlucHV0LWJ0bi1mb2N1cy1ib3gtc2hhZG93ICFkZWZhdWx0O1xcbiRidG4tZGlzYWJsZWQtb3BhY2l0eTogICAgICAgIC42NSAhZGVmYXVsdDtcXG4kYnRuLWFjdGl2ZS1ib3gtc2hhZG93OiAgICAgICBpbnNldCAwIDNweCA1cHggcmdiYSgkYmxhY2ssIC4xMjUpICFkZWZhdWx0O1xcblxcbiRidG4tbGluay1kaXNhYmxlZC1jb2xvcjogICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG4kYnRuLWJsb2NrLXNwYWNpbmcteTogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyBBbGxvd3MgZm9yIGN1c3RvbWl6aW5nIGJ1dHRvbiByYWRpdXMgaW5kZXBlbmRlbnRseSBmcm9tIGdsb2JhbCBib3JkZXIgcmFkaXVzXFxuJGJ0bi1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJGJ0bi1ib3JkZXItcmFkaXVzLWxnOiAgICAgICAgJGJvcmRlci1yYWRpdXMtbGcgIWRlZmF1bHQ7XFxuJGJ0bi1ib3JkZXItcmFkaXVzLXNtOiAgICAgICAgJGJvcmRlci1yYWRpdXMtc20gIWRlZmF1bHQ7XFxuXFxuJGJ0bi10cmFuc2l0aW9uOiAgICAgICAgICAgICAgY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYmFja2dyb3VuZC1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xcblxcblxcbi8vIEZvcm1zXFxuXFxuJGlucHV0LXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15ICFkZWZhdWx0O1xcbiRpbnB1dC1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteCAhZGVmYXVsdDtcXG4kaW5wdXQtbGluZS1oZWlnaHQ6ICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodCAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtcGFkZGluZy15LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktc20gIWRlZmF1bHQ7XFxuJGlucHV0LXBhZGRpbmcteC1zbTogICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LXNtICFkZWZhdWx0O1xcbiRpbnB1dC1saW5lLWhlaWdodC1zbTogICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LXNtICFkZWZhdWx0O1xcblxcbiRpbnB1dC1wYWRkaW5nLXktbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1sZyAhZGVmYXVsdDtcXG4kaW5wdXQtcGFkZGluZy14LWxnOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGcgIWRlZmF1bHQ7XFxuJGlucHV0LWxpbmUtaGVpZ2h0LWxnOiAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQtbGcgIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kaW5wdXQtZGlzYWJsZWQtYmc6ICAgICAgICAgICAgICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcblxcbiRpbnB1dC1jb2xvcjogICAgICAgICAgICAgICAgICAgICAgICAgICAkZ3JheS03MDAgIWRlZmF1bHQ7XFxuJGlucHV0LWJvcmRlci1jb2xvcjogICAgICAgICAgICAgICAgICAgICRncmF5LTQwMCAhZGVmYXVsdDtcXG4kaW5wdXQtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJGlucHV0LWJveC1zaGFkb3c6ICAgICAgICAgICAgICAgICAgICAgIGluc2V0IDAgMXB4IDFweCByZ2JhKCRibGFjaywgLjA3NSkgIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbiRpbnB1dC1ib3JkZXItcmFkaXVzLWxnOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcXG4kaW5wdXQtYm9yZGVyLXJhZGl1cy1zbTogICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMtc20gIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWZvY3VzLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1iZyAhZGVmYXVsdDtcXG4kaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgbGlnaHRlbigkY29tcG9uZW50LWFjdGl2ZS1iZywgMjUlKSAhZGVmYXVsdDtcXG4kaW5wdXQtZm9jdXMtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbiRpbnB1dC1mb2N1cy13aWR0aDogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWZvY3VzLXdpZHRoICFkZWZhdWx0O1xcbiRpbnB1dC1mb2N1cy1ib3gtc2hhZG93OiAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuXFxuJGlucHV0LXBsYWNlaG9sZGVyLWNvbG9yOiAgICAgICAgICAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtaGVpZ2h0LWJvcmRlcjogICAgICAgICAgICAgICAgICAgJGlucHV0LWJvcmRlci13aWR0aCAqIDIgIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWhlaWdodC1pbm5lcjogICAgICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0KSArICgkaW5wdXQtYnRuLXBhZGRpbmcteSAqIDIpICFkZWZhdWx0O1xcbiRpbnB1dC1oZWlnaHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjKCN7JGlucHV0LWhlaWdodC1pbm5lcn0gKyAjeyRpbnB1dC1oZWlnaHQtYm9yZGVyfSkgIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWhlaWdodC1pbm5lci1zbTogICAgICAgICAgICAgICAgICgkZm9udC1zaXplLXNtICogJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbSkgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXktc20gKiAyKSAhZGVmYXVsdDtcXG4kaW5wdXQtaGVpZ2h0LXNtOiAgICAgICAgICAgICAgICAgICAgICAgY2FsYygjeyRpbnB1dC1oZWlnaHQtaW5uZXItc219ICsgI3skaW5wdXQtaGVpZ2h0LWJvcmRlcn0pICFkZWZhdWx0O1xcblxcbiRpbnB1dC1oZWlnaHQtaW5uZXItbGc6ICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1sZyAqICRpbnB1dC1idG4tbGluZS1oZWlnaHQtbGcpICsgKCRpbnB1dC1idG4tcGFkZGluZy15LWxnICogMikgIWRlZmF1bHQ7XFxuJGlucHV0LWhlaWdodC1sZzogICAgICAgICAgICAgICAgICAgICAgIGNhbGMoI3skaW5wdXQtaGVpZ2h0LWlubmVyLWxnfSArICN7JGlucHV0LWhlaWdodC1ib3JkZXJ9KSAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtdHJhbnNpdGlvbjogICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgLjE1cyBlYXNlLWluLW91dCAhZGVmYXVsdDtcXG5cXG4kZm9ybS10ZXh0LW1hcmdpbi10b3A6ICAgICAgICAgICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xcblxcbiRmb3JtLWNoZWNrLWlucHV0LWd1dHRlcjogICAgICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcbiRmb3JtLWNoZWNrLWlucHV0LW1hcmdpbi15OiAgICAgICAgICAgICAuM3JlbSAhZGVmYXVsdDtcXG4kZm9ybS1jaGVjay1pbnB1dC1tYXJnaW4teDogICAgICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xcblxcbiRmb3JtLWNoZWNrLWlubGluZS1tYXJnaW4teDogICAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuJGZvcm0tY2hlY2staW5saW5lLWlucHV0LW1hcmdpbi14OiAgICAgIC4zMTI1cmVtICFkZWZhdWx0O1xcblxcbiRmb3JtLWdyb3VwLW1hcmdpbi1ib3R0b206ICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcblxcbiRpbnB1dC1ncm91cC1hZGRvbi1jb2xvcjogICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuJGlucHV0LWdyb3VwLWFkZG9uLWJnOiAgICAgICAgICAgICAgICAgICRncmF5LTIwMCAhZGVmYXVsdDtcXG4kaW5wdXQtZ3JvdXAtYWRkb24tYm9yZGVyLWNvbG9yOiAgICAgICAgJGlucHV0LWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG5cXG4kY3VzdG9tLWNvbnRyb2wtZ3V0dGVyOiAgICAgICAgICAgICAgICAgMS41cmVtICFkZWZhdWx0O1xcbiRjdXN0b20tY29udHJvbC1zcGFjZXIteDogICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcblxcbiRjdXN0b20tY29udHJvbC1pbmRpY2F0b3Itc2l6ZTogICAgICAgICAxcmVtICFkZWZhdWx0O1xcbiRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYmc6ICAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1iZy1zaXplOiAgICAgIDUwJSA1MCUgIWRlZmF1bHQ7XFxuJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1ib3gtc2hhZG93OiAgIGluc2V0IDAgLjI1cmVtIC4yNXJlbSByZ2JhKCRibGFjaywgLjEpICFkZWZhdWx0O1xcblxcbiRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItZGlzYWJsZWQtYmc6ICAgICAgICAgICRncmF5LTIwMCAhZGVmYXVsdDtcXG4kY3VzdG9tLWNvbnRyb2wtbGFiZWwtZGlzYWJsZWQtY29sb3I6ICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWNvbG9yOiAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWJnOiAgICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWRpc2FibGVkLWJnOiAgcmdiYSh0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpLCAuNSkgIWRlZmF1bHQ7XFxuJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWJveC1zaGFkb3c6ICAgbm9uZSAhZGVmYXVsdDtcXG5cXG4kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWZvY3VzLWJveC1zaGFkb3c6ICAgICAwIDAgMCAxcHggJGJvZHktYmcsICRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdyAhZGVmYXVsdDtcXG5cXG4kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1jb2xvcjogICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1iZzogICAgICAgICAgICBsaWdodGVuKCRjb21wb25lbnQtYWN0aXZlLWJnLCAzNSUpICFkZWZhdWx0O1xcbiRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYWN0aXZlLWJveC1zaGFkb3c6ICAgIG5vbmUgIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1czogICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaWNvbi1jaGVja2VkOiAgICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA4IDgnJTNFJTNDcGF0aCBmaWxsPScjeyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvcn0nIGQ9J002LjU2NC43NWwtMy41OSAzLjYxMi0xLjUzOC0xLjU1TDAgNC4yNiAyLjk3NCA3LjI1IDggMi4xOTN6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcblxcbiRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtYmc6ICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xcbiRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtY29sb3I6ICRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pY29uLWluZGV0ZXJtaW5hdGU6ICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDQgNCclM0UlM0NwYXRoIHN0cm9rZT0nI3skY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWNvbG9yfScgZD0nTTAgMmg0Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbiRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtYm94LXNoYWRvdzogbm9uZSAhZGVmYXVsdDtcXG5cXG4kY3VzdG9tLXJhZGlvLWluZGljYXRvci1ib3JkZXItcmFkaXVzOiAgICAgICAgICA1MCUgIWRlZmF1bHQ7XFxuJGN1c3RvbS1yYWRpby1pbmRpY2F0b3ItaWNvbi1jaGVja2VkOiAgICAgICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9Jy00IC00IDggOCclM0UlM0NjaXJjbGUgcj0nMycgZmlsbD0nI3skY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3J9Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcblxcbiRjdXN0b20tc2VsZWN0LXBhZGRpbmcteTogICAgICAgICAgIC4zNzVyZW0gIWRlZmF1bHQ7XFxuJGN1c3RvbS1zZWxlY3QtcGFkZGluZy14OiAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuJGN1c3RvbS1zZWxlY3QtaGVpZ2h0OiAgICAgICAgICAgICAgJGlucHV0LWhlaWdodCAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1pbmRpY2F0b3ItcGFkZGluZzogICAxcmVtICFkZWZhdWx0OyAvLyBFeHRyYSBwYWRkaW5nIHRvIGFjY291bnQgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgYmFja2dyb3VuZC1pbWFnZSBiYXNlZCBpbmRpY2F0b3JcXG4kY3VzdG9tLXNlbGVjdC1saW5lLWhlaWdodDogICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWNvbG9yOiAgICAgICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1kaXNhYmxlZC1jb2xvcjogICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuJGN1c3RvbS1zZWxlY3QtYmc6ICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWRpc2FibGVkLWJnOiAgICAgICAgICRncmF5LTIwMCAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1iZy1zaXplOiAgICAgICAgICAgICA4cHggMTBweCAhZGVmYXVsdDsgLy8gSW4gcGl4ZWxzIGJlY2F1c2UgaW1hZ2UgZGltZW5zaW9uc1xcbiRjdXN0b20tc2VsZWN0LWluZGljYXRvci1jb2xvcjogICAgICRncmF5LTgwMCAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1pbmRpY2F0b3I6ICAgICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDQgNSclM0UlM0NwYXRoIGZpbGw9JyN7JGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yLWNvbG9yfScgZD0nTTIgMEwwIDJoNHptMCA1TDAgM2g0eicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1ib3JkZXItd2lkdGg6ICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1ib3JkZXItY29sb3I6ICAgICAgICAkaW5wdXQtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWJvcmRlci1yYWRpdXM6ICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcblxcbiRjdXN0b20tc2VsZWN0LWZvY3VzLWJvcmRlci1jb2xvcjogICRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuJGN1c3RvbS1zZWxlY3QtZm9jdXMtYm94LXNoYWRvdzogICAgaW5zZXQgMCAxcHggMnB4IHJnYmEoJGJsYWNrLCAuMDc1KSwgMCAwIDVweCByZ2JhKCRjdXN0b20tc2VsZWN0LWZvY3VzLWJvcmRlci1jb2xvciwgLjUpICFkZWZhdWx0O1xcblxcbiRjdXN0b20tc2VsZWN0LWZvbnQtc2l6ZS1zbTogICAgICAgIDc1JSAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1oZWlnaHQtc206ICAgICAgICAgICAkaW5wdXQtaGVpZ2h0LXNtICFkZWZhdWx0O1xcblxcbiRjdXN0b20tc2VsZWN0LWZvbnQtc2l6ZS1sZzogICAgICAgIDEyNSUgIWRlZmF1bHQ7XFxuJGN1c3RvbS1zZWxlY3QtaGVpZ2h0LWxnOiAgICAgICAgICAgJGlucHV0LWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4kY3VzdG9tLWZpbGUtaGVpZ2h0OiAgICAgICAgICAgICAgICAkaW5wdXQtaGVpZ2h0ICFkZWZhdWx0O1xcbiRjdXN0b20tZmlsZS1mb2N1cy1ib3JkZXItY29sb3I6ICAgICRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLWZvY3VzLWJveC1zaGFkb3c6ICAgICAgJGlucHV0LWJ0bi1mb2N1cy1ib3gtc2hhZG93ICFkZWZhdWx0O1xcblxcbiRjdXN0b20tZmlsZS1wYWRkaW5nLXk6ICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15ICFkZWZhdWx0O1xcbiRjdXN0b20tZmlsZS1wYWRkaW5nLXg6ICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14ICFkZWZhdWx0O1xcbiRjdXN0b20tZmlsZS1saW5lLWhlaWdodDogICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLWNvbG9yOiAgICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbiRjdXN0b20tZmlsZS1iZzogICAgICAgICAgICAgICAgICAgICRpbnB1dC1iZyAhZGVmYXVsdDtcXG4kY3VzdG9tLWZpbGUtYm9yZGVyLXdpZHRoOiAgICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kY3VzdG9tLWZpbGUtYm9yZGVyLWNvbG9yOiAgICAgICAgICAkaW5wdXQtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcbiRjdXN0b20tZmlsZS1ib3JkZXItcmFkaXVzOiAgICAgICAgICRpbnB1dC1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbiRjdXN0b20tZmlsZS1ib3gtc2hhZG93OiAgICAgICAgICAgICRpbnB1dC1ib3gtc2hhZG93ICFkZWZhdWx0O1xcbiRjdXN0b20tZmlsZS1idXR0b24tY29sb3I6ICAgICAgICAgICRjdXN0b20tZmlsZS1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLWZpbGUtYnV0dG9uLWJnOiAgICAgICAgICAgICAkaW5wdXQtZ3JvdXAtYWRkb24tYmcgIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLXRleHQ6IChcXG4gIGVuOiBcXFwiQnJvd3NlXFxcIlxcbikgIWRlZmF1bHQ7XFxuXFxuXFxuLy8gRm9ybSB2YWxpZGF0aW9uXFxuJGZvcm0tZmVlZGJhY2stbWFyZ2luLXRvcDogICAgICAgICAgJGZvcm0tdGV4dC1tYXJnaW4tdG9wICFkZWZhdWx0O1xcbiRmb3JtLWZlZWRiYWNrLWZvbnQtc2l6ZTogICAgICAgICAgICRzbWFsbC1mb250LXNpemUgIWRlZmF1bHQ7XFxuJGZvcm0tZmVlZGJhY2stdmFsaWQtY29sb3I6ICAgICAgICAgdGhlbWUtY29sb3IoXFxcInN1Y2Nlc3NcXFwiKSAhZGVmYXVsdDtcXG4kZm9ybS1mZWVkYmFjay1pbnZhbGlkLWNvbG9yOiAgICAgICB0aGVtZS1jb2xvcihcXFwiZGFuZ2VyXFxcIikgIWRlZmF1bHQ7XFxuXFxuXFxuLy8gRHJvcGRvd25zXFxuLy9cXG4vLyBEcm9wZG93biBtZW51IGNvbnRhaW5lciBhbmQgY29udGVudHMuXFxuXFxuJGRyb3Bkb3duLW1pbi13aWR0aDogICAgICAgICAgICAgICAgMTByZW0gIWRlZmF1bHQ7XFxuJGRyb3Bkb3duLXBhZGRpbmcteTogICAgICAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuJGRyb3Bkb3duLXNwYWNlcjogICAgICAgICAgICAgICAgICAgLjEyNXJlbSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tYmc6ICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGRyb3Bkb3duLWJvcmRlci1jb2xvcjogICAgICAgICAgICAgcmdiYSgkYmxhY2ssIC4xNSkgIWRlZmF1bHQ7XFxuJGRyb3Bkb3duLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJGRyb3Bkb3duLWJvcmRlci13aWR0aDogICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kZHJvcGRvd24tZGl2aWRlci1iZzogICAgICAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuJGRyb3Bkb3duLWJveC1zaGFkb3c6ICAgICAgICAgICAgICAgMCAuNXJlbSAxcmVtIHJnYmEoJGJsYWNrLCAuMTc1KSAhZGVmYXVsdDtcXG5cXG4kZHJvcGRvd24tbGluay1jb2xvcjogICAgICAgICAgICAgICAkZ3JheS05MDAgIWRlZmF1bHQ7XFxuJGRyb3Bkb3duLWxpbmstaG92ZXItY29sb3I6ICAgICAgICAgZGFya2VuKCRncmF5LTkwMCwgNSUpICFkZWZhdWx0O1xcbiRkcm9wZG93bi1saW5rLWhvdmVyLWJnOiAgICAgICAgICAgICRncmF5LTEwMCAhZGVmYXVsdDtcXG5cXG4kZHJvcGRvd24tbGluay1hY3RpdmUtY29sb3I6ICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4kZHJvcGRvd24tbGluay1hY3RpdmUtYmc6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4kZHJvcGRvd24tbGluay1kaXNhYmxlZC1jb2xvcjogICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuJGRyb3Bkb3duLWl0ZW0tcGFkZGluZy15OiAgICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xcbiRkcm9wZG93bi1pdGVtLXBhZGRpbmcteDogICAgICAgICAgIDEuNXJlbSAhZGVmYXVsdDtcXG5cXG4kZHJvcGRvd24taGVhZGVyLWNvbG9yOiAgICAgICAgICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuXFxuLy8gWi1pbmRleCBtYXN0ZXIgbGlzdFxcbi8vXFxuLy8gV2FybmluZzogQXZvaWQgY3VzdG9taXppbmcgdGhlc2UgdmFsdWVzLiBUaGV5J3JlIHVzZWQgZm9yIGEgYmlyZCdzIGV5ZSB2aWV3XFxuLy8gb2YgY29tcG9uZW50cyBkZXBlbmRlbnQgb24gdGhlIHotYXhpcyBhbmQgYXJlIGRlc2lnbmVkIHRvIGFsbCB3b3JrIHRvZ2V0aGVyLlxcblxcbiR6aW5kZXgtZHJvcGRvd246ICAgICAgICAgICAgICAgICAgIDEwMDAgIWRlZmF1bHQ7XFxuJHppbmRleC1zdGlja3k6ICAgICAgICAgICAgICAgICAgICAgMTAyMCAhZGVmYXVsdDtcXG4kemluZGV4LWZpeGVkOiAgICAgICAgICAgICAgICAgICAgICAxMDMwICFkZWZhdWx0O1xcbiR6aW5kZXgtbW9kYWwtYmFja2Ryb3A6ICAgICAgICAgICAgIDEwNDAgIWRlZmF1bHQ7XFxuJHppbmRleC1tb2RhbDogICAgICAgICAgICAgICAgICAgICAgMTA1MCAhZGVmYXVsdDtcXG4kemluZGV4LXBvcG92ZXI6ICAgICAgICAgICAgICAgICAgICAxMDYwICFkZWZhdWx0O1xcbiR6aW5kZXgtdG9vbHRpcDogICAgICAgICAgICAgICAgICAgIDEwNzAgIWRlZmF1bHQ7XFxuXFxuLy8gTmF2c1xcblxcbiRuYXYtbGluay1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcbiRuYXYtbGluay1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuJG5hdi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgICAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcblxcbiRuYXYtdGFicy1ib3JkZXItY29sb3I6ICAgICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcXG4kbmF2LXRhYnMtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRuYXYtdGFicy1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbiRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjogICRncmF5LTIwMCAkZ3JheS0yMDAgJG5hdi10YWJzLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4kbmF2LXRhYnMtbGluay1hY3RpdmUtY29sb3I6ICAgICAgICAkZ3JheS03MDAgIWRlZmF1bHQ7XFxuJG5hdi10YWJzLWxpbmstYWN0aXZlLWJnOiAgICAgICAgICAgJGJvZHktYmcgIWRlZmF1bHQ7XFxuJG5hdi10YWJzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjogJGdyYXktMzAwICRncmF5LTMwMCAkbmF2LXRhYnMtbGluay1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuXFxuJG5hdi1waWxscy1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJG5hdi1waWxscy1saW5rLWFjdGl2ZS1jb2xvcjogICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuJG5hdi1waWxscy1saW5rLWFjdGl2ZS1iZzogICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuXFxuLy8gTmF2YmFyXFxuXFxuJG5hdmJhci1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgICAgKCRzcGFjZXIgLyAyKSAhZGVmYXVsdDtcXG4kbmF2YmFyLXBhZGRpbmcteDogICAgICAgICAgICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xcblxcbiRuYXZiYXItbmF2LWxpbmstcGFkZGluZy14OiAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcblxcbiRuYXZiYXItYnJhbmQtZm9udC1zaXplOiAgICAgICAgICAgICRmb250LXNpemUtbGcgIWRlZmF1bHQ7XFxuLy8gQ29tcHV0ZSB0aGUgbmF2YmFyLWJyYW5kIHBhZGRpbmcteSBzbyB0aGUgbmF2YmFyLWJyYW5kIHdpbGwgaGF2ZSB0aGUgc2FtZSBoZWlnaHQgYXMgbmF2YmFyLXRleHQgYW5kIG5hdi1saW5rXFxuJG5hdi1saW5rLWhlaWdodDogICAgICAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqICRsaW5lLWhlaWdodC1iYXNlICsgJG5hdi1saW5rLXBhZGRpbmcteSAqIDIpICFkZWZhdWx0O1xcbiRuYXZiYXItYnJhbmQtaGVpZ2h0OiAgICAgICAgICAgICAgICRuYXZiYXItYnJhbmQtZm9udC1zaXplICogJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XFxuJG5hdmJhci1icmFuZC1wYWRkaW5nLXk6ICAgICAgICAgICAgKCRuYXYtbGluay1oZWlnaHQgLSAkbmF2YmFyLWJyYW5kLWhlaWdodCkgLyAyICFkZWZhdWx0O1xcblxcbiRuYXZiYXItdG9nZ2xlci1wYWRkaW5nLXk6ICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG4kbmF2YmFyLXRvZ2dsZXItcGFkZGluZy14OiAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuJG5hdmJhci10b2dnbGVyLWZvbnQtc2l6ZTogICAgICAgICAgJGZvbnQtc2l6ZS1sZyAhZGVmYXVsdDtcXG4kbmF2YmFyLXRvZ2dsZXItYm9yZGVyLXJhZGl1czogICAgICAkYnRuLWJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuXFxuJG5hdmJhci1kYXJrLWNvbG9yOiAgICAgICAgICAgICAgICAgcmdiYSgkd2hpdGUsIC41KSAhZGVmYXVsdDtcXG4kbmF2YmFyLWRhcmstaG92ZXItY29sb3I6ICAgICAgICAgICByZ2JhKCR3aGl0ZSwgLjc1KSAhZGVmYXVsdDtcXG4kbmF2YmFyLWRhcmstYWN0aXZlLWNvbG9yOiAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJG5hdmJhci1kYXJrLWRpc2FibGVkLWNvbG9yOiAgICAgICAgcmdiYSgkd2hpdGUsIC4yNSkgIWRlZmF1bHQ7XFxuJG5hdmJhci1kYXJrLXRvZ2dsZXItaWNvbi1iZzogICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB2aWV3Qm94PScwIDAgMzAgMzAnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIHN0cm9rZT0nI3skbmF2YmFyLWRhcmstY29sb3J9JyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW1pdGVybGltaXQ9JzEwJyBkPSdNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4kbmF2YmFyLWRhcmstdG9nZ2xlci1ib3JkZXItY29sb3I6ICByZ2JhKCR3aGl0ZSwgLjEpICFkZWZhdWx0O1xcblxcbiRuYXZiYXItbGlnaHQtY29sb3I6ICAgICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuNSkgIWRlZmF1bHQ7XFxuJG5hdmJhci1saWdodC1ob3Zlci1jb2xvcjogICAgICAgICAgcmdiYSgkYmxhY2ssIC43KSAhZGVmYXVsdDtcXG4kbmF2YmFyLWxpZ2h0LWFjdGl2ZS1jb2xvcjogICAgICAgICByZ2JhKCRibGFjaywgLjkpICFkZWZhdWx0O1xcbiRuYXZiYXItbGlnaHQtZGlzYWJsZWQtY29sb3I6ICAgICAgIHJnYmEoJGJsYWNrLCAuMykgIWRlZmF1bHQ7XFxuJG5hdmJhci1saWdodC10b2dnbGVyLWljb24tYmc6ICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB2aWV3Qm94PScwIDAgMzAgMzAnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIHN0cm9rZT0nI3skbmF2YmFyLWxpZ2h0LWNvbG9yfScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1taXRlcmxpbWl0PScxMCcgZD0nTTQgN2gyMk00IDE1aDIyTTQgMjNoMjInLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuJG5hdmJhci1saWdodC10b2dnbGVyLWJvcmRlci1jb2xvcjogcmdiYSgkYmxhY2ssIC4xKSAhZGVmYXVsdDtcXG5cXG4vLyBQYWdpbmF0aW9uXFxuXFxuJHBhZ2luYXRpb24tcGFkZGluZy15OiAgICAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tcGFkZGluZy14OiAgICAgICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcbiRwYWdpbmF0aW9uLXBhZGRpbmcteS1zbTogICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1wYWRkaW5nLXgtc206ICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1wYWRkaW5nLXktbGc6ICAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tcGFkZGluZy14LWxnOiAgICAgICAgICAgMS41cmVtICFkZWZhdWx0O1xcbiRwYWdpbmF0aW9uLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgIDEuMjUgIWRlZmF1bHQ7XFxuXFxuJHBhZ2luYXRpb24tY29sb3I6ICAgICAgICAgICAgICAgICAgJGxpbmstY29sb3IgIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tYmc6ICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRwYWdpbmF0aW9uLWJvcmRlci13aWR0aDogICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yOiAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcblxcbiRwYWdpbmF0aW9uLWZvY3VzLWJveC1zaGFkb3c6ICAgICAgICRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdyAhZGVmYXVsdDtcXG5cXG4kcGFnaW5hdGlvbi1ob3Zlci1jb2xvcjogICAgICAgICAgICAkbGluay1ob3Zlci1jb2xvciAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1ob3Zlci1iZzogICAgICAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24taG92ZXItYm9yZGVyLWNvbG9yOiAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcblxcbiRwYWdpbmF0aW9uLWFjdGl2ZS1jb2xvcjogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbiRwYWdpbmF0aW9uLWFjdGl2ZS1iZzogICAgICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xcbiRwYWdpbmF0aW9uLWFjdGl2ZS1ib3JkZXItY29sb3I6ICAgICRwYWdpbmF0aW9uLWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1jb2xvcjogICAgICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tZGlzYWJsZWQtYmc6ICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRwYWdpbmF0aW9uLWRpc2FibGVkLWJvcmRlci1jb2xvcjogICRncmF5LTMwMCAhZGVmYXVsdDtcXG5cXG5cXG4vLyBKdW1ib3Ryb25cXG5cXG4kanVtYm90cm9uLXBhZGRpbmc6ICAgICAgICAgICAgICAgICAycmVtICFkZWZhdWx0O1xcbiRqdW1ib3Ryb24tYmc6ICAgICAgICAgICAgICAgICAgICAgICRncmF5LTIwMCAhZGVmYXVsdDtcXG5cXG5cXG4vLyBDYXJkc1xcblxcbiRjYXJkLXNwYWNlci15OiAgICAgICAgICAgICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4kY2FyZC1zcGFjZXIteDogICAgICAgICAgICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci13aWR0aDogICAgICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJGNhcmQtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJGNhcmQtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgICAgcmdiYSgkYmxhY2ssIC4xMjUpICFkZWZhdWx0O1xcbiRjYXJkLWlubmVyLWJvcmRlci1yYWRpdXM6ICAgICAgICAgIGNhbGMoI3skY2FyZC1ib3JkZXItcmFkaXVzfSAtICN7JGNhcmQtYm9yZGVyLXdpZHRofSkgIWRlZmF1bHQ7XFxuJGNhcmQtY2FwLWJnOiAgICAgICAgICAgICAgICAgICAgICAgcmdiYSgkYmxhY2ssIC4wMykgIWRlZmF1bHQ7XFxuJGNhcmQtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcblxcbiRjYXJkLWltZy1vdmVybGF5LXBhZGRpbmc6ICAgICAgICAgIDEuMjVyZW0gIWRlZmF1bHQ7XFxuXFxuJGNhcmQtZ3JvdXAtbWFyZ2luOiAgICAgICAgICAgICAgICAgKCRncmlkLWd1dHRlci13aWR0aCAvIDIpICFkZWZhdWx0O1xcbiRjYXJkLWRlY2stbWFyZ2luOiAgICAgICAgICAgICAgICAgICRjYXJkLWdyb3VwLW1hcmdpbiAhZGVmYXVsdDtcXG5cXG4kY2FyZC1jb2x1bW5zLWNvdW50OiAgICAgICAgICAgICAgICAzICFkZWZhdWx0O1xcbiRjYXJkLWNvbHVtbnMtZ2FwOiAgICAgICAgICAgICAgICAgIDEuMjVyZW0gIWRlZmF1bHQ7XFxuJGNhcmQtY29sdW1ucy1tYXJnaW46ICAgICAgICAgICAgICAgJGNhcmQtc3BhY2VyLXkgIWRlZmF1bHQ7XFxuXFxuXFxuLy8gVG9vbHRpcHNcXG5cXG4kdG9vbHRpcC1mb250LXNpemU6ICAgICAgICAgICAkZm9udC1zaXplLXNtICFkZWZhdWx0O1xcbiR0b29sdGlwLW1heC13aWR0aDogICAgICAgICAgIDIwMHB4ICFkZWZhdWx0O1xcbiR0b29sdGlwLWNvbG9yOiAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kdG9vbHRpcC1iZzogICAgICAgICAgICAgICAgICAkYmxhY2sgIWRlZmF1bHQ7XFxuJHRvb2x0aXAtYm9yZGVyLXJhZGl1czogICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbiR0b29sdGlwLW9wYWNpdHk6ICAgICAgICAgICAgIC45ICFkZWZhdWx0O1xcbiR0b29sdGlwLXBhZGRpbmcteTogICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG4kdG9vbHRpcC1wYWRkaW5nLXg6ICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4kdG9vbHRpcC1tYXJnaW46ICAgICAgICAgICAgICAwICFkZWZhdWx0O1xcblxcbiR0b29sdGlwLWFycm93LXdpZHRoOiAgICAgICAgIC44cmVtICFkZWZhdWx0O1xcbiR0b29sdGlwLWFycm93LWhlaWdodDogICAgICAgIC40cmVtICFkZWZhdWx0O1xcbiR0b29sdGlwLWFycm93LWNvbG9yOiAgICAgICAgICR0b29sdGlwLWJnICFkZWZhdWx0O1xcblxcblxcbi8vIFBvcG92ZXJzXFxuXFxuJHBvcG92ZXItZm9udC1zaXplOiAgICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1zbSAhZGVmYXVsdDtcXG4kcG9wb3Zlci1iZzogICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJHBvcG92ZXItbWF4LXdpZHRoOiAgICAgICAgICAgICAgICAgMjc2cHggIWRlZmF1bHQ7XFxuJHBvcG92ZXItYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kcG9wb3Zlci1ib3JkZXItY29sb3I6ICAgICAgICAgICAgICByZ2JhKCRibGFjaywgLjIpICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJveC1zaGFkb3c6ICAgICAgICAgICAgICAgIDAgLjI1cmVtIC41cmVtIHJnYmEoJGJsYWNrLCAuMikgIWRlZmF1bHQ7XFxuXFxuJHBvcG92ZXItaGVhZGVyLWJnOiAgICAgICAgICAgICAgICAgZGFya2VuKCRwb3BvdmVyLWJnLCAzJSkgIWRlZmF1bHQ7XFxuJHBvcG92ZXItaGVhZGVyLWNvbG9yOiAgICAgICAgICAgICAgJGhlYWRpbmdzLWNvbG9yICFkZWZhdWx0O1xcbiRwb3BvdmVyLWhlYWRlci1wYWRkaW5nLXk6ICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcbiRwb3BvdmVyLWhlYWRlci1wYWRkaW5nLXg6ICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG5cXG4kcG9wb3Zlci1ib2R5LWNvbG9yOiAgICAgICAgICAgICAgICAkYm9keS1jb2xvciAhZGVmYXVsdDtcXG4kcG9wb3Zlci1ib2R5LXBhZGRpbmcteTogICAgICAgICAgICAkcG9wb3Zlci1oZWFkZXItcGFkZGluZy15ICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJvZHktcGFkZGluZy14OiAgICAgICAgICAgICRwb3BvdmVyLWhlYWRlci1wYWRkaW5nLXggIWRlZmF1bHQ7XFxuXFxuJHBvcG92ZXItYXJyb3ctd2lkdGg6ICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG4kcG9wb3Zlci1hcnJvdy1oZWlnaHQ6ICAgICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4kcG9wb3Zlci1hcnJvdy1jb2xvcjogICAgICAgICAgICAgICAkcG9wb3Zlci1iZyAhZGVmYXVsdDtcXG5cXG4kcG9wb3Zlci1hcnJvdy1vdXRlci1jb2xvcjogICAgICAgICBmYWRlLWluKCRwb3BvdmVyLWJvcmRlci1jb2xvciwgLjA1KSAhZGVmYXVsdDtcXG5cXG5cXG4vLyBCYWRnZXNcXG5cXG4kYmFkZ2UtZm9udC1zaXplOiAgICAgICAgICAgICAgICAgICA3NSUgIWRlZmF1bHQ7XFxuJGJhZGdlLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuJGJhZGdlLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAgLjI1ZW0gIWRlZmF1bHQ7XFxuJGJhZGdlLXBhZGRpbmcteDogICAgICAgICAgICAgICAgICAgLjRlbSAhZGVmYXVsdDtcXG4kYmFkZ2UtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4kYmFkZ2UtcGlsbC1wYWRkaW5nLXg6ICAgICAgICAgICAgICAuNmVtICFkZWZhdWx0O1xcbi8vIFVzZSBhIGhpZ2hlciB0aGFuIG5vcm1hbCB2YWx1ZSB0byBlbnN1cmUgY29tcGxldGVseSByb3VuZGVkIGVkZ2VzIHdoZW5cXG4vLyBjdXN0b21pemluZyBwYWRkaW5nIG9yIGZvbnQtc2l6ZSBvbiBsYWJlbHMuXFxuJGJhZGdlLXBpbGwtYm9yZGVyLXJhZGl1czogICAgICAgICAgMTByZW0gIWRlZmF1bHQ7XFxuXFxuXFxuLy8gTW9kYWxzXFxuXFxuLy8gUGFkZGluZyBhcHBsaWVkIHRvIHRoZSBtb2RhbCBib2R5XFxuJG1vZGFsLWlubmVyLXBhZGRpbmc6ICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG5cXG4kbW9kYWwtZGlhbG9nLW1hcmdpbjogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4kbW9kYWwtZGlhbG9nLW1hcmdpbi15LXNtLXVwOiAxLjc1cmVtICFkZWZhdWx0O1xcblxcbiRtb2RhbC10aXRsZS1saW5lLWhlaWdodDogICAgICAgICAgICRsaW5lLWhlaWdodC1iYXNlICFkZWZhdWx0O1xcblxcbiRtb2RhbC1jb250ZW50LWJnOiAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kbW9kYWwtY29udGVudC1ib3JkZXItY29sb3I6ICAgICByZ2JhKCRibGFjaywgLjIpICFkZWZhdWx0O1xcbiRtb2RhbC1jb250ZW50LWJvcmRlci13aWR0aDogICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJG1vZGFsLWNvbnRlbnQtYm94LXNoYWRvdy14czogICAgMCAuMjVyZW0gLjVyZW0gcmdiYSgkYmxhY2ssIC41KSAhZGVmYXVsdDtcXG4kbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXNtLXVwOiAwIC41cmVtIDFyZW0gcmdiYSgkYmxhY2ssIC41KSAhZGVmYXVsdDtcXG5cXG4kbW9kYWwtYmFja2Ryb3AtYmc6ICAgICAgICAgICAkYmxhY2sgIWRlZmF1bHQ7XFxuJG1vZGFsLWJhY2tkcm9wLW9wYWNpdHk6ICAgICAgLjUgIWRlZmF1bHQ7XFxuJG1vZGFsLWhlYWRlci1ib3JkZXItY29sb3I6ICAgJGdyYXktMjAwICFkZWZhdWx0O1xcbiRtb2RhbC1mb290ZXItYm9yZGVyLWNvbG9yOiAgICRtb2RhbC1oZWFkZXItYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcbiRtb2RhbC1oZWFkZXItYm9yZGVyLXdpZHRoOiAgICRtb2RhbC1jb250ZW50LWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kbW9kYWwtZm9vdGVyLWJvcmRlci13aWR0aDogICAkbW9kYWwtaGVhZGVyLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kbW9kYWwtaGVhZGVyLXBhZGRpbmc6ICAgICAgICAxcmVtICFkZWZhdWx0O1xcblxcbiRtb2RhbC1sZzogICAgICAgICAgICAgICAgICAgICAgICAgIDgwMHB4ICFkZWZhdWx0O1xcbiRtb2RhbC1tZDogICAgICAgICAgICAgICAgICAgICAgICAgIDUwMHB4ICFkZWZhdWx0O1xcbiRtb2RhbC1zbTogICAgICAgICAgICAgICAgICAgICAgICAgIDMwMHB4ICFkZWZhdWx0O1xcblxcbiRtb2RhbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSAuM3MgZWFzZS1vdXQgIWRlZmF1bHQ7XFxuXFxuXFxuLy8gQWxlcnRzXFxuLy9cXG4vLyBEZWZpbmUgYWxlcnQgY29sb3JzLCBib3JkZXIgcmFkaXVzLCBhbmQgcGFkZGluZy5cXG5cXG4kYWxlcnQtcGFkZGluZy15OiAgICAgICAgICAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuJGFsZXJ0LXBhZGRpbmcteDogICAgICAgICAgICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG4kYWxlcnQtbWFyZ2luLWJvdHRvbTogICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcbiRhbGVydC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbiRhbGVydC1saW5rLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xcbiRhbGVydC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuJGFsZXJ0LWJnLWxldmVsOiAgICAgICAgICAgICAgICAgICAgLTEwICFkZWZhdWx0O1xcbiRhbGVydC1ib3JkZXItbGV2ZWw6ICAgICAgICAgICAgICAgIC05ICFkZWZhdWx0O1xcbiRhbGVydC1jb2xvci1sZXZlbDogICAgICAgICAgICAgICAgIDYgIWRlZmF1bHQ7XFxuXFxuXFxuLy8gUHJvZ3Jlc3MgYmFyc1xcblxcbiRwcm9ncmVzcy1oZWlnaHQ6ICAgICAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuJHByb2dyZXNzLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqIC43NSkgIWRlZmF1bHQ7XFxuJHByb2dyZXNzLWJnOiAgICAgICAgICAgICAgICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcbiRwcm9ncmVzcy1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbiRwcm9ncmVzcy1ib3gtc2hhZG93OiAgICAgICAgICAgICAgIGluc2V0IDAgLjFyZW0gLjFyZW0gcmdiYSgkYmxhY2ssIC4xKSAhZGVmYXVsdDtcXG4kcHJvZ3Jlc3MtYmFyLWNvbG9yOiAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJHByb2dyZXNzLWJhci1iZzogICAgICAgICAgICAgICAgICAgdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSAhZGVmYXVsdDtcXG4kcHJvZ3Jlc3MtYmFyLWFuaW1hdGlvbi10aW1pbmc6ICAgICAxcyBsaW5lYXIgaW5maW5pdGUgIWRlZmF1bHQ7XFxuJHByb2dyZXNzLWJhci10cmFuc2l0aW9uOiAgICAgICAgICAgd2lkdGggLjZzIGVhc2UgIWRlZmF1bHQ7XFxuXFxuLy8gTGlzdCBncm91cFxcblxcbiRsaXN0LWdyb3VwLWJnOiAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1ib3JkZXItY29sb3I6ICAgICAgICAgICByZ2JhKCRibGFjaywgLjEyNSkgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteTogICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtaXRlbS1wYWRkaW5nLXg6ICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG5cXG4kbGlzdC1ncm91cC1ob3Zlci1iZzogICAgICAgICAgICAgICAkZ3JheS0xMDAgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYWN0aXZlLWNvbG9yOiAgICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYWN0aXZlLWJnOiAgICAgICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYWN0aXZlLWJvcmRlci1jb2xvcjogICAgJGxpc3QtZ3JvdXAtYWN0aXZlLWJnICFkZWZhdWx0O1xcblxcbiRsaXN0LWdyb3VwLWRpc2FibGVkLWNvbG9yOiAgICAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1kaXNhYmxlZC1iZzogICAgICAgICAgICAkbGlzdC1ncm91cC1iZyAhZGVmYXVsdDtcXG5cXG4kbGlzdC1ncm91cC1hY3Rpb24tY29sb3I6ICAgICAgICAgICAkZ3JheS03MDAgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYWN0aW9uLWhvdmVyLWNvbG9yOiAgICAgJGxpc3QtZ3JvdXAtYWN0aW9uLWNvbG9yICFkZWZhdWx0O1xcblxcbiRsaXN0LWdyb3VwLWFjdGlvbi1hY3RpdmUtY29sb3I6ICAgICRib2R5LWNvbG9yICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWFjdGlvbi1hY3RpdmUtYmc6ICAgICAgICRncmF5LTIwMCAhZGVmYXVsdDtcXG5cXG5cXG4vLyBJbWFnZSB0aHVtYm5haWxzXFxuXFxuJHRodW1ibmFpbC1wYWRkaW5nOiAgICAgICAgICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xcbiR0aHVtYm5haWwtYmc6ICAgICAgICAgICAgICAgICAgICAgICRib2R5LWJnICFkZWZhdWx0O1xcbiR0aHVtYm5haWwtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJHRodW1ibmFpbC1ib3JkZXItY29sb3I6ICAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcbiR0aHVtYm5haWwtYm9yZGVyLXJhZGl1czogICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbiR0aHVtYm5haWwtYm94LXNoYWRvdzogICAgICAgICAgICAgIDAgMXB4IDJweCByZ2JhKCRibGFjaywgLjA3NSkgIWRlZmF1bHQ7XFxuXFxuXFxuLy8gRmlndXJlc1xcblxcbiRmaWd1cmUtY2FwdGlvbi1mb250LXNpemU6ICAgICAgICAgIDkwJSAhZGVmYXVsdDtcXG4kZmlndXJlLWNhcHRpb24tY29sb3I6ICAgICAgICAgICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuXFxuLy8gQnJlYWRjcnVtYnNcXG5cXG4kYnJlYWRjcnVtYi1wYWRkaW5nLXk6ICAgICAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuJGJyZWFkY3J1bWItcGFkZGluZy14OiAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG4kYnJlYWRjcnVtYi1pdGVtLXBhZGRpbmc6ICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4kYnJlYWRjcnVtYi1tYXJnaW4tYm90dG9tOiAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcblxcbiRicmVhZGNydW1iLWJnOiAgICAgICAgICAgICAgICAgICAgICRncmF5LTIwMCAhZGVmYXVsdDtcXG4kYnJlYWRjcnVtYi1kaXZpZGVyLWNvbG9yOiAgICAgICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuJGJyZWFkY3J1bWItYWN0aXZlLWNvbG9yOiAgICAgICAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcbiRicmVhZGNydW1iLWRpdmlkZXI6ICAgICAgICAgICAgICAgIFxcXCIvXFxcIiAhZGVmYXVsdDtcXG5cXG5cXG4vLyBDYXJvdXNlbFxcblxcbiRjYXJvdXNlbC1jb250cm9sLWNvbG9yOiAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kY2Fyb3VzZWwtY29udHJvbC13aWR0aDogICAgICAgICAgICAxNSUgIWRlZmF1bHQ7XFxuJGNhcm91c2VsLWNvbnRyb2wtb3BhY2l0eTogICAgICAgICAgLjUgIWRlZmF1bHQ7XFxuXFxuJGNhcm91c2VsLWluZGljYXRvci13aWR0aDogICAgICAgICAgMzBweCAhZGVmYXVsdDtcXG4kY2Fyb3VzZWwtaW5kaWNhdG9yLWhlaWdodDogICAgICAgICAzcHggIWRlZmF1bHQ7XFxuJGNhcm91c2VsLWluZGljYXRvci1zcGFjZXI6ICAgICAgICAgM3B4ICFkZWZhdWx0O1xcbiRjYXJvdXNlbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4kY2Fyb3VzZWwtY2FwdGlvbi13aWR0aDogICAgICAgICAgICA3MCUgIWRlZmF1bHQ7XFxuJGNhcm91c2VsLWNhcHRpb24tY29sb3I6ICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcblxcbiRjYXJvdXNlbC1jb250cm9sLWljb24td2lkdGg6ICAgICAgIDIwcHggIWRlZmF1bHQ7XFxuXFxuJGNhcm91c2VsLWNvbnRyb2wtcHJldi1pY29uLWJnOiAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGZpbGw9JyN7JGNhcm91c2VsLWNvbnRyb2wtY29sb3J9JyB2aWV3Qm94PScwIDAgOCA4JyUzRSUzQ3BhdGggZD0nTTUuMjUgMGwtNCA0IDQgNCAxLjUtMS41LTIuNS0yLjUgMi41LTIuNS0xLjUtMS41eicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4kY2Fyb3VzZWwtY29udHJvbC1uZXh0LWljb24tYmc6ICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nI3skY2Fyb3VzZWwtY29udHJvbC1jb2xvcn0nIHZpZXdCb3g9JzAgMCA4IDgnJTNFJTNDcGF0aCBkPSdNMi43NSAwbC0xLjUgMS41IDIuNSAyLjUtMi41IDIuNSAxLjUgMS41IDQtNC00LTR6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcblxcbiRjYXJvdXNlbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgIHRyYW5zZm9ybSAuNnMgZWFzZSAhZGVmYXVsdDtcXG5cXG5cXG4vLyBDbG9zZVxcblxcbiRjbG9zZS1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICRmb250LXNpemUtYmFzZSAqIDEuNSAhZGVmYXVsdDtcXG4kY2xvc2UtZm9udC13ZWlnaHQ6ICAgICAgICAgICAgICAgICAkZm9udC13ZWlnaHQtYm9sZCAhZGVmYXVsdDtcXG4kY2xvc2UtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgICAkYmxhY2sgIWRlZmF1bHQ7XFxuJGNsb3NlLXRleHQtc2hhZG93OiAgICAgICAgICAgICAgICAgMCAxcHggMCAkd2hpdGUgIWRlZmF1bHQ7XFxuXFxuLy8gQ29kZVxcblxcbiRjb2RlLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICAgIDg3LjUlICFkZWZhdWx0O1xcbiRjb2RlLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICAgICRwaW5rICFkZWZhdWx0O1xcblxcbiRrYmQtcGFkZGluZy15OiAgICAgICAgICAgICAgICAgICAgIC4ycmVtICFkZWZhdWx0O1xcbiRrYmQtcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICAgIC40cmVtICFkZWZhdWx0O1xcbiRrYmQtZm9udC1zaXplOiAgICAgICAgICAgICAgICAgICAgICRjb2RlLWZvbnQtc2l6ZSAhZGVmYXVsdDtcXG4ka2JkLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGtiZC1iZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdyYXktOTAwICFkZWZhdWx0O1xcblxcbiRwcmUtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgICAgICRncmF5LTkwMCAhZGVmYXVsdDtcXG4kcHJlLXNjcm9sbGFibGUtbWF4LWhlaWdodDogICAgICAgICAzNDBweCAhZGVmYXVsdDtcXG5cXG5cXG4vLyBQcmludGluZ1xcbiRwcmludC1wYWdlLXNpemU6ICAgICAgICAgICAgICAgICAgIGEzICFkZWZhdWx0O1xcbiRwcmludC1ib2R5LW1pbi13aWR0aDogICAgICAgICAgICAgIG1hcC1nZXQoJGdyaWQtYnJlYWtwb2ludHMsIFxcXCJsZ1xcXCIpICFkZWZhdWx0O1xcblwiLFwiLy9cXG4vLyBTY3JlZW5yZWFkZXJzXFxuLy9cXG5cXG4uc3Itb25seSB7XFxuICBAaW5jbHVkZSBzci1vbmx5KCk7XFxufVxcblxcbi5zci1vbmx5LWZvY3VzYWJsZSB7XFxuICBAaW5jbHVkZSBzci1vbmx5LWZvY3VzYWJsZSgpO1xcbn1cXG5cIixcIi8vIE9ubHkgZGlzcGxheSBjb250ZW50IHRvIHNjcmVlbiByZWFkZXJzXFxuLy9cXG4vLyBTZWU6IGh0dHA6Ly9hMTF5cHJvamVjdC5jb20vcG9zdHMvaG93LXRvLWhpZGUtY29udGVudC9cXG4vLyBTZWU6IGh0dHBzOi8vaHVnb2dpcmF1ZGVsLmNvbS8yMDE2LzEwLzEzL2Nzcy1oaWRlLWFuZC1zZWVrL1xcblxcbkBtaXhpbiBzci1vbmx5IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDFweDtcXG4gIHBhZGRpbmc6IDA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBjbGlwLXBhdGg6IGluc2V0KDUwJSk7XFxuICBib3JkZXI6IDA7XFxufVxcblxcbi8vIFVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIC5zci1vbmx5IHRvIG9ubHkgZGlzcGxheSBjb250ZW50IHdoZW4gaXQncyBmb2N1c2VkLlxcbi8vXFxuLy8gVXNlZnVsIGZvciBcXFwiU2tpcCB0byBtYWluIGNvbnRlbnRcXFwiIGxpbmtzOyBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMTMvTk9URS1XQ0FHMjAtVEVDSFMtMjAxMzA5MDUvRzFcXG4vL1xcbi8vIENyZWRpdDogSFRNTDUgQm9pbGVycGxhdGVcXG5cXG5AbWl4aW4gc3Itb25seS1mb2N1c2FibGUge1xcbiAgJjphY3RpdmUsXFxuICAmOmZvY3VzIHtcXG4gICAgcG9zaXRpb246IHN0YXRpYztcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICAgIGNsaXA6IGF1dG87XFxuICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxuICAgIGNsaXAtcGF0aDogbm9uZTtcXG4gIH1cXG59XFxuXCIsXCIvLyBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnRcXG5cXG4vLyBXaWR0aCBhbmQgaGVpZ2h0XFxuXFxuQGVhY2ggJHByb3AsICRhYmJyZXYgaW4gKHdpZHRoOiB3LCBoZWlnaHQ6IGgpIHtcXG4gIEBlYWNoICRzaXplLCAkbGVuZ3RoIGluICRzaXplcyB7XFxuICAgIC4jeyRhYmJyZXZ9LSN7JHNpemV9IHsgI3skcHJvcH06ICRsZW5ndGggIWltcG9ydGFudDsgfVxcbiAgfVxcbn1cXG5cXG4ubXctMTAwIHsgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IH1cXG4ubWgtMTAwIHsgbWF4LWhlaWdodDogMTAwJSAhaW1wb3J0YW50OyB9XFxuXCIsXCIvLyBzdHlsZWxpbnQtZGlzYWJsZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnRcXG5cXG4vLyBNYXJnaW4gYW5kIFBhZGRpbmdcXG5cXG5AZWFjaCAkYnJlYWtwb2ludCBpbiBtYXAta2V5cygkZ3JpZC1icmVha3BvaW50cykge1xcbiAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC11cCgkYnJlYWtwb2ludCkge1xcbiAgICAkaW5maXg6IGJyZWFrcG9pbnQtaW5maXgoJGJyZWFrcG9pbnQsICRncmlkLWJyZWFrcG9pbnRzKTtcXG5cXG4gICAgQGVhY2ggJHByb3AsICRhYmJyZXYgaW4gKG1hcmdpbjogbSwgcGFkZGluZzogcCkge1xcbiAgICAgIEBlYWNoICRzaXplLCAkbGVuZ3RoIGluICRzcGFjZXJzIHtcXG5cXG4gICAgICAgIC4jeyRhYmJyZXZ9I3skaW5maXh9LSN7JHNpemV9IHsgI3skcHJvcH06ICRsZW5ndGggIWltcG9ydGFudDsgfVxcbiAgICAgICAgLiN7JGFiYnJldn10I3skaW5maXh9LSN7JHNpemV9LFxcbiAgICAgICAgLiN7JGFiYnJldn15I3skaW5maXh9LSN7JHNpemV9IHtcXG4gICAgICAgICAgI3skcHJvcH0tdG9wOiAkbGVuZ3RoICFpbXBvcnRhbnQ7XFxuICAgICAgICB9XFxuICAgICAgICAuI3skYWJicmV2fXIjeyRpbmZpeH0tI3skc2l6ZX0sXFxuICAgICAgICAuI3skYWJicmV2fXgjeyRpbmZpeH0tI3skc2l6ZX0ge1xcbiAgICAgICAgICAjeyRwcm9wfS1yaWdodDogJGxlbmd0aCAhaW1wb3J0YW50O1xcbiAgICAgICAgfVxcbiAgICAgICAgLiN7JGFiYnJldn1iI3skaW5maXh9LSN7JHNpemV9LFxcbiAgICAgICAgLiN7JGFiYnJldn15I3skaW5maXh9LSN7JHNpemV9IHtcXG4gICAgICAgICAgI3skcHJvcH0tYm90dG9tOiAkbGVuZ3RoICFpbXBvcnRhbnQ7XFxuICAgICAgICB9XFxuICAgICAgICAuI3skYWJicmV2fWwjeyRpbmZpeH0tI3skc2l6ZX0sXFxuICAgICAgICAuI3skYWJicmV2fXgjeyRpbmZpeH0tI3skc2l6ZX0ge1xcbiAgICAgICAgICAjeyRwcm9wfS1sZWZ0OiAkbGVuZ3RoICFpbXBvcnRhbnQ7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIC8vIFNvbWUgc3BlY2lhbCBtYXJnaW4gdXRpbHNcXG4gICAgLm0jeyRpbmZpeH0tYXV0byB7IG1hcmdpbjogYXV0byAhaW1wb3J0YW50OyB9XFxuICAgIC5tdCN7JGluZml4fS1hdXRvLFxcbiAgICAubXkjeyRpbmZpeH0tYXV0byB7XFxuICAgICAgbWFyZ2luLXRvcDogYXV0byAhaW1wb3J0YW50O1xcbiAgICB9XFxuICAgIC5tciN7JGluZml4fS1hdXRvLFxcbiAgICAubXgjeyRpbmZpeH0tYXV0byB7XFxuICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XFxuICAgIH1cXG4gICAgLm1iI3skaW5maXh9LWF1dG8sXFxuICAgIC5teSN7JGluZml4fS1hdXRvIHtcXG4gICAgICBtYXJnaW4tYm90dG9tOiBhdXRvICFpbXBvcnRhbnQ7XFxuICAgIH1cXG4gICAgLm1sI3skaW5maXh9LWF1dG8sXFxuICAgIC5teCN7JGluZml4fS1hdXRvIHtcXG4gICAgICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50O1xcbiAgICB9XFxuICB9XFxufVxcblwiLFwiLy8gc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XFxuXFxuLy9cXG4vLyBUZXh0XFxuLy9cXG5cXG4vLyBBbGlnbm1lbnRcXG5cXG4udGV4dC1qdXN0aWZ5ICB7IHRleHQtYWxpZ246IGp1c3RpZnkgIWltcG9ydGFudDsgfVxcbi50ZXh0LW5vd3JhcCAgIHsgd2hpdGUtc3BhY2U6IG5vd3JhcCAhaW1wb3J0YW50OyB9XFxuLnRleHQtdHJ1bmNhdGUgeyBAaW5jbHVkZSB0ZXh0LXRydW5jYXRlOyB9XFxuXFxuLy8gUmVzcG9uc2l2ZSBhbGlnbm1lbnRcXG5cXG5AZWFjaCAkYnJlYWtwb2ludCBpbiBtYXAta2V5cygkZ3JpZC1icmVha3BvaW50cykge1xcbiAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC11cCgkYnJlYWtwb2ludCkge1xcbiAgICAkaW5maXg6IGJyZWFrcG9pbnQtaW5maXgoJGJyZWFrcG9pbnQsICRncmlkLWJyZWFrcG9pbnRzKTtcXG5cXG4gICAgLnRleHQjeyRpbmZpeH0tbGVmdCAgIHsgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50OyB9XFxuICAgIC50ZXh0I3skaW5maXh9LXJpZ2h0ICB7IHRleHQtYWxpZ246IHJpZ2h0ICFpbXBvcnRhbnQ7IH1cXG4gICAgLnRleHQjeyRpbmZpeH0tY2VudGVyIHsgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7IH1cXG4gIH1cXG59XFxuXFxuLy8gVHJhbnNmb3JtYXRpb25cXG5cXG4udGV4dC1sb3dlcmNhc2UgIHsgdGV4dC10cmFuc2Zvcm06IGxvd2VyY2FzZSAhaW1wb3J0YW50OyB9XFxuLnRleHQtdXBwZXJjYXNlICB7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2UgIWltcG9ydGFudDsgfVxcbi50ZXh0LWNhcGl0YWxpemUgeyB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZSAhaW1wb3J0YW50OyB9XFxuXFxuLy8gV2VpZ2h0IGFuZCBpdGFsaWNzXFxuXFxuLmZvbnQtd2VpZ2h0LWxpZ2h0ICB7IGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQtbGlnaHQgIWltcG9ydGFudDsgfVxcbi5mb250LXdlaWdodC1ub3JtYWwgeyBmb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LW5vcm1hbCAhaW1wb3J0YW50OyB9XFxuLmZvbnQtd2VpZ2h0LWJvbGQgICB7IGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQtYm9sZCAhaW1wb3J0YW50OyB9XFxuLmZvbnQtaXRhbGljICAgICAgICB7IGZvbnQtc3R5bGU6IGl0YWxpYyAhaW1wb3J0YW50OyB9XFxuXFxuLy8gQ29udGV4dHVhbCBjb2xvcnNcXG5cXG4udGV4dC13aGl0ZSB7IGNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7IH1cXG5cXG5AZWFjaCAkY29sb3IsICR2YWx1ZSBpbiAkdGhlbWUtY29sb3JzIHtcXG4gIEBpbmNsdWRlIHRleHQtZW1waGFzaXMtdmFyaWFudChcXFwiLnRleHQtI3skY29sb3J9XFxcIiwgJHZhbHVlKTtcXG59XFxuXFxuLnRleHQtbXV0ZWQgeyBjb2xvcjogJHRleHQtbXV0ZWQgIWltcG9ydGFudDsgfVxcblxcbi8vIE1pc2NcXG5cXG4udGV4dC1oaWRlIHtcXG4gIEBpbmNsdWRlIHRleHQtaGlkZSgpO1xcbn1cXG5cIixcIi8vIFRleHQgdHJ1bmNhdGVcXG4vLyBSZXF1aXJlcyBpbmxpbmUtYmxvY2sgb3IgYmxvY2sgZm9yIHByb3BlciBzdHlsaW5nXFxuXFxuQG1peGluIHRleHQtdHJ1bmNhdGUoKSB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG5cIixcIi8vIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxcblxcbi8vIFR5cG9ncmFwaHlcXG5cXG5AbWl4aW4gdGV4dC1lbXBoYXNpcy12YXJpYW50KCRwYXJlbnQsICRjb2xvcikge1xcbiAgI3skcGFyZW50fSB7XFxuICAgIGNvbG9yOiAkY29sb3IgIWltcG9ydGFudDtcXG4gIH1cXG4gIGEjeyRwYXJlbnR9IHtcXG4gICAgQGluY2x1ZGUgaG92ZXItZm9jdXMge1xcbiAgICAgIGNvbG9yOiBkYXJrZW4oJGNvbG9yLCAxMCUpICFpbXBvcnRhbnQ7XFxuICAgIH1cXG4gIH1cXG59XFxuXCIsXCIvLyBDU1MgaW1hZ2UgcmVwbGFjZW1lbnRcXG5AbWl4aW4gdGV4dC1oaWRlKCkge1xcbiAgLy8gc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGZvbnQtZmFtaWx5LW5vLW1pc3NpbmctZ2VuZXJpYy1mYW1pbHkta2V5d29yZFxcbiAgZm9udDogMC8wIGE7XFxuICBjb2xvcjogdHJhbnNwYXJlbnQ7XFxuICB0ZXh0LXNoYWRvdzogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiAwO1xcbn1cXG5cIixcIi8vIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxcblxcbi8vIFZpc2liaWxpdHlcXG5cXG5AbWl4aW4gaW52aXNpYmxlKCR2aXNpYmlsaXR5KSB7XFxuICB2aXNpYmlsaXR5OiAkdmlzaWJpbGl0eSAhaW1wb3J0YW50O1xcbn1cXG5cIixcIi8vXFxuLy8gVmlzaWJpbGl0eSB1dGlsaXRpZXNcXG4vL1xcblxcbi52aXNpYmxlIHtcXG4gIEBpbmNsdWRlIGludmlzaWJsZSh2aXNpYmxlKTtcXG59XFxuXFxuLmludmlzaWJsZSB7XFxuICBAaW5jbHVkZSBpbnZpc2libGUoaGlkZGVuKTtcXG59XFxuXCIsXCJcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5AaW1wb3J0IFxcXCJ+QHNjc3MvY29uZmlnL19zZXR0aW5ncy5zY3NzXFxcIjtcXG5AaW1wb3J0IFxcXCJ+QHNjc3MvY29uZmlnL19ib290c3RyYXAuc2Nzc1xcXCI7XFxuXFxuLmNvbWJpbmF0aW9ucy1maWx0ZXJzLWRyb3Bkb3duIHtcXG4gIG1hcmdpbjogMCAwLjM1cmVtO1xcblxcbiAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC1kb3duKHhzKSB7XFxuICAgIG1hcmdpbi1ib3R0b206IC41cmVtO1xcbiAgfVxcblxcbiAgLmRyb3Bkb3duLWl0ZW0ge1xcbiAgICBwYWRkaW5nOiAwLjQzOHJlbSAwLjkzOHJlbTtcXG4gICAgcGFkZGluZy1yaWdodDogMXJlbTtcXG4gICAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcXG4gICAgY29sb3I6IGluaGVyaXQ7XFxuICAgIGJvcmRlci1ib3R0b206IDA7XFxuXFxuICAgIC5tZC1jaGVja2JveC1jb250YWluZXIge1xcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgICBwYWRkaW5nLWxlZnQ6IDI4cHg7XFxuICAgIH1cXG4gIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLmNvbWJpbmF0aW9ucy1maWx0ZXJzIC5jb250cm9sLWxhYmVse2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojMDAwO21hcmdpbi1ib3R0b246MXJlbX0uY29tYmluYXRpb25zLWZpbHRlcnMtbGluZXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtmbGV4LXdyYXA6d3JhcDttYXJnaW46MCAtMC4zNXJlbX1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvZmlsdGVycy9GaWx0ZXJzLnZ1ZVwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFzSUEscUNBRUksZUFBZ0IsQ0FDaEIsVUFBVyxDQUNYLGtCQUFtQixDQUNwQiwyQkFHQyxZQUFhLENBQ2Isc0JBQXVCLENBQ3ZCLGNBQWUsQ0FDZixpQkFBa0JcIixcInNvdXJjZXNDb250ZW50XCI6W1wiXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuQGltcG9ydCBcXFwifkBzY3NzL2NvbmZpZy9fc2V0dGluZ3Muc2Nzc1xcXCI7XFxuXFxuLmNvbWJpbmF0aW9ucy1maWx0ZXJzIHtcXG4gIC5jb250cm9sLWxhYmVsIHtcXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gICAgY29sb3I6ICMwMDA7XFxuICAgIG1hcmdpbi1ib3R0b246IDFyZW07XFxuICB9XFxuXFxuICAmLWxpbmUge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG4gICAgZmxleC13cmFwOiB3cmFwO1xcbiAgICBtYXJnaW46IDAgLTAuMzVyZW07XFxuICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIiNwcm9kdWN0LWNvbWJpbmF0aW9ucy1nZW5lcmF0ZSAubW9kYWwgLnRhZ3MtaW5wdXR7bWFyZ2luLWJvdHRvbToxcmVtfSNwcm9kdWN0LWNvbWJpbmF0aW9ucy1nZW5lcmF0ZSAubW9kYWwgLnRhZ3MtaW5wdXQgLnRhZ3ttYXJnaW4tYm90dG9tOjAuMjVyZW19I3Byb2R1Y3QtY29tYmluYXRpb25zLWdlbmVyYXRlIC5tb2RhbCAjYXR0cmlidXRlcy1saXN0LXNlbGVjdG9ye21heC1oZWlnaHQ6NTB2aH0jcHJvZHVjdC1jb21iaW5hdGlvbnMtZ2VuZXJhdGUgLm1vZGFsICNhdHRyaWJ1dGVzLWxpc3Qtc2VsZWN0b3IgLmF0dHJpYnV0ZS1ncm91cHtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tYm90dG9tOjAuNzVyZW07b3ZlcmZsb3c6aGlkZGVuO2JvcmRlcjoxcHggc29saWQgI2JiY2RkMjtib3JkZXItcmFkaXVzOjRweH0jcHJvZHVjdC1jb21iaW5hdGlvbnMtZ2VuZXJhdGUgLm1vZGFsICNhdHRyaWJ1dGVzLWxpc3Qtc2VsZWN0b3IgLmF0dHJpYnV0ZS1ncm91cC1oZWFkZXJ7ZGlzcGxheTpmbGV4O2JhY2tncm91bmQtY29sb3I6I2ZhZmJmY30jcHJvZHVjdC1jb21iaW5hdGlvbnMtZ2VuZXJhdGUgLm1vZGFsICNhdHRyaWJ1dGVzLWxpc3Qtc2VsZWN0b3IgLmF0dHJpYnV0ZS1ncm91cC1jb250ZW50e2JvcmRlci10b3A6MXB4IHNvbGlkICNiYmNkZDJ9I3Byb2R1Y3QtY29tYmluYXRpb25zLWdlbmVyYXRlIC5tb2RhbCAjYXR0cmlidXRlcy1saXN0LXNlbGVjdG9yIC5hdHRyaWJ1dGUtZ3JvdXAtY2hlY2tib3h7cG9zaXRpb246YWJzb2x1dGU7dG9wOjAuNXJlbTtsZWZ0OjAuNXJlbX0jcHJvZHVjdC1jb21iaW5hdGlvbnMtZ2VuZXJhdGUgLm1vZGFsICNhdHRyaWJ1dGVzLWxpc3Qtc2VsZWN0b3IgLmF0dHJpYnV0ZS1ncm91cC1uYW1le3dpZHRoOjEwMCU7cGFkZGluZzowLjQzNzVyZW0gMC40Mzc1cmVtIDAuNDM3NXJlbSAyLjVyZW07Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMzNjNhNDF9I3Byb2R1Y3QtY29tYmluYXRpb25zLWdlbmVyYXRlIC5tb2RhbCAjYXR0cmlidXRlcy1saXN0LXNlbGVjdG9yIC5hdHRyaWJ1dGUtZ3JvdXAtbmFtZTpob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZX0jcHJvZHVjdC1jb21iaW5hdGlvbnMtZ2VuZXJhdGUgLm1vZGFsICNhdHRyaWJ1dGVzLWxpc3Qtc2VsZWN0b3IgLmF0dHJpYnV0ZS1ncm91cCAuYXR0cmlidXRlLWl0ZW17bWFyZ2luOjAuMjVyZW07Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyLXJhZGl1czozcHh9I3Byb2R1Y3QtY29tYmluYXRpb25zLWdlbmVyYXRlIC5tb2RhbCAjYXR0cmlidXRlcy1saXN0LXNlbGVjdG9yIC5hdHRyaWJ1dGUtZ3JvdXAgLmF0dHJpYnV0ZS1pdGVtLWNvbnRlbnR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAuNXJlbX0jcHJvZHVjdC1jb21iaW5hdGlvbnMtZ2VuZXJhdGUgLm1vZGFsICNhdHRyaWJ1dGVzLWxpc3Qtc2VsZWN0b3IgLmF0dHJpYnV0ZS1ncm91cCAuYXR0cmlidXRlLWl0ZW0uc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWFlYmVjfSNwcm9kdWN0LWNvbWJpbmF0aW9ucy1nZW5lcmF0ZSAubW9kYWwgI2F0dHJpYnV0ZXMtbGlzdC1zZWxlY3RvciAuYXR0cmlidXRlLWdyb3VwIC5hdHRyaWJ1dGUtaXRlbSBpbnB1dHtkaXNwbGF5Om5vbmV9I3Byb2R1Y3QtY29tYmluYXRpb25zLWdlbmVyYXRlIC5tb2RhbCAjYXR0cmlidXRlcy1saXN0LXNlbGVjdG9yIC5hdHRyaWJ1dGUtZ3JvdXAgLmF0dHJpYnV0ZS1pdGVtLWNvbG9ye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTVweDtoZWlnaHQ6MTVweDttYXJnaW4tcmlnaHQ6MC41cmVtO2JvcmRlci1yYWRpdXM6M3B4fSNwcm9kdWN0LWNvbWJpbmF0aW9ucy1nZW5lcmF0ZSAubW9kYWwgI2F0dHJpYnV0ZXMtbGlzdC1zZWxlY3RvciAuYXR0cmlidXRlc3toZWlnaHQ6YXV0bztwYWRkaW5nOjAuNDM3NXJlbX0jcHJvZHVjdC1jb21iaW5hdGlvbnMtZ2VuZXJhdGUgLm1vZGFsIC5wcm9kdWN0LWNvbWJpbmF0aW9ucy1tb2RhbC1jb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmctYm90dG9tOjAuNXJlbX1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9qcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvZ2VuZXJhdG9yL0F0dHJpYnV0ZXNTZWxlY3Rvci52dWVcIixcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9wcmVzdGFraXQvc2Nzcy9fdmFyaWFibGVzLnNjc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBdVRBLGtEQUdNLGtCQUFtQixDQUh6Qix1REFNUSxxQkFBc0IsQ0FOOUIsZ0VBV00sZUFBZ0IsQ0FYdEIsaUZBY1EsaUJBQWtCLENBQ2xCLHFCQUFzQixDQUN0QixlQUFnQixDQUNoQix3QkNoVVUsQ0RpVVYsaUJBQWtCLENBbEIxQix3RkFxQlUsWUFBYSxDQUNiLHdCQ3RVUSxDRGdUbEIseUZBMEJVLDRCQ3pVUSxDRCtTbEIsMEZBOEJVLGlCQUFrQixDQUNsQixVQUFXLENBQ1gsV0FBWSxDQWhDdEIsc0ZBb0NVLFVBQVcsQ0FDWCw0Q0FBNkMsQ0FDN0MsZUFBZ0IsQ0FDaEIsYUFBYyxDQXZDeEIsNEZBMENZLG9CQUFxQixDQTFDakMsaUdBK0NVLGNBQWUsQ0FDZixjQUFlLENBQ2YsaUJBQWtCLENBakQ1Qix5R0FvRFksWUFBYSxDQUNiLGtCQUFtQixDQUNuQixjQUFlLENBdEQzQiwwR0EwRFksd0JDN1dXLENEbVR2Qix1R0E4RFksWUFBYSxDQTlEekIsdUdBa0VZLGFBQWMsQ0FDZCxVQUFXLENBQ1gsV0FBWSxDQUNaLG1CQUFvQixDQUNwQixpQkFBa0IsQ0F0RTlCLDRFQTRFUSxXQUFZLENBQ1osaUJBQWtCLENBN0UxQiwwRUFrRk0saUJBQWtCLENBQ2xCLHFCQUFzQlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5AaW1wb3J0ICd+QHNjc3MvY29uZmlnL19zZXR0aW5ncy5zY3NzJztcXG5cXG4jcHJvZHVjdC1jb21iaW5hdGlvbnMtZ2VuZXJhdGUge1xcbiAgLm1vZGFsIHtcXG4gICAgLnRhZ3MtaW5wdXQge1xcbiAgICAgIG1hcmdpbi1ib3R0b206IDFyZW07XFxuXFxuICAgICAgLnRhZyB7XFxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjI1cmVtO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAjYXR0cmlidXRlcy1saXN0LXNlbGVjdG9yIHtcXG4gICAgICBtYXgtaGVpZ2h0OiA1MHZoO1xcblxcbiAgICAgIC5hdHRyaWJ1dGUtZ3JvdXAge1xcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC43NXJlbTtcXG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkZ3JheS0zMDA7XFxuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XFxuXFxuICAgICAgICAmLWhlYWRlciB7XFxuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRncmF5LTI1MDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgICYtY29udGVudCB7XFxuICAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAkZ3JheS0zMDA7XFxuICAgICAgICB9XFxuXFxuICAgICAgICAmLWNoZWNrYm94IHtcXG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgICB0b3A6IDAuNXJlbTtcXG4gICAgICAgICAgbGVmdDogMC41cmVtO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgJi1uYW1lIHtcXG4gICAgICAgICAgd2lkdGg6IDEwMCU7XFxuICAgICAgICAgIHBhZGRpbmc6IDAuNDM3NXJlbSAwLjQzNzVyZW0gMC40Mzc1cmVtIDIuNXJlbTtcXG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gICAgICAgICAgY29sb3I6ICMzNjNhNDE7XFxuXFxuICAgICAgICAgICY6aG92ZXIge1xcbiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgLmF0dHJpYnV0ZS1pdGVtIHtcXG4gICAgICAgICAgbWFyZ2luOiAwLjI1cmVtO1xcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcXG5cXG4gICAgICAgICAgJi1jb250ZW50IHtcXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgICAgICAgcGFkZGluZzogMC41cmVtO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgICYuc2VsZWN0ZWQge1xcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRncmF5LWRpc2FibGVkO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIGlucHV0IHtcXG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgICYtY29sb3Ige1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICAgICAgICAgIHdpZHRoOiAxNXB4O1xcbiAgICAgICAgICAgIGhlaWdodDogMTVweDtcXG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDAuNXJlbTtcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuXFxuICAgICAgLmF0dHJpYnV0ZXMge1xcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xcbiAgICAgICAgcGFkZGluZzogMC40Mzc1cmVtO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAucHJvZHVjdC1jb21iaW5hdGlvbnMtbW9kYWwtY29udGVudCB7XFxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XFxuICAgIH1cXG4gIH1cXG59XFxuXCIsXCIvKiBzdHlsZWxpbnQtZGlzYWJsZSAqL1xcblxcbi8vIENvbG9yIHN5c3RlbVxcbiR3aGl0ZTogI2ZmZjtcXG4kZ3JheS1kaXNhYmxlZDogI2VhZWJlYztcXG4kZ3JheS0xMDA6ICNmYWZiZmM7XFxuJGdyYXktMjAwOiAjZmFmYmZjO1xcbiRncmF5LTI1MDogI2ZhZmJmYztcXG4kZ3JheS0zMDA6ICNiYmNkZDI7XFxuJGdyYXktNDAwOiAjYmJjZGQyO1xcbiRncmF5LTQ1MDogI2IzYzdjZDtcXG4kZ3JheS01MDA6ICM2Yzg2OGU7XFxuJGdyYXktNTUwOiAjNzA4MDkwO1xcbiRncmF5LTYwMDogIzZjODY4ZTtcXG4kZ3JheS03MDA6ICMzNjNhNDE7XFxuJGdyYXktNzUwOiAjMzYzYTQxO1xcbiRncmF5LTgwMDogIzM2M2E0MTtcXG4kZ3JheS05MDA6ICMyODJiMzA7XFxuJGJsYWNrOiAjMDAwO1xcblxcbi8vIFBTIFZhcnNcXG4kZXh0cmEtbGlnaHQtZ3JheTogJGdyYXktMTAwO1xcbiRsaWdodC1ncmF5OiAkZ3JheS0zMDA7XFxuJG1lZGl1bS1ncmF5OiAkZ3JheS01MDA7XFxuJGRhcmstZ3JheTogJGdyYXktNzAwO1xcbiRleHRyYS1kYXJrLWdyYXk6ICRncmF5LTkwMDtcXG4kZ3JheS1saWdodDogJGxpZ2h0LWdyYXk7XFxuJGdyYXktbWVkaXVtOiAkbWVkaXVtLWdyYXk7XFxuJGdyYXktZGFyazogJGRhcmstZ3JheTtcXG4kZ3JheS1zb2Z0OiAkZ3JheS0yMDA7XFxuJGJhY2tncm91bmQtY29sb3I6ICNlZmYxZjI7XFxuJHByaW1hcnktbGlnaHRlbjogI2Y0ZmNmZDtcXG4kbG9jYWwtZm9udDogZmFsc2UgIWRlZmF1bHQ7XFxuXFxuJGJsdWU6ICMyNWI5ZDc7XFxuJGluZGlnbzogIzY2MTBmMiAhZGVmYXVsdDtcXG4kcHVycGxlOiAjNmY0MmMxICFkZWZhdWx0O1xcbiRwaW5rOiAjZTgzZThjICFkZWZhdWx0O1xcbiRyZWQ6ICNmNTRjM2U7XFxuJG9yYW5nZTogI2ZkN2UxNCAhZGVmYXVsdDtcXG4keWVsbG93OiAjZmFiMDAwO1xcbiRncmVlbjogIzcwYjU4MDtcXG4kb3JhbmdlOiAjZmQ3ZTE0ICFkZWZhdWx0O1xcbiR0ZWFsOiAjMjBjOTk3ICFkZWZhdWx0O1xcbiRjeWFuOiAkYmx1ZTtcXG4kbGlnaHQtYmx1ZTogI2Y0ZmNmZDtcXG5cXG4vLyBtYWluIGJ1dHRvbiBiYWNrZ3JvdW5kIGNvbG9yc1xcbiRwcmltYXJ5LWhvdmVyOiAjN2NkNWU3O1xcbiRwcmltYXJ5LWFjdGl2ZTogIzIxYTZjMTtcXG4kcHJpbWFyeS1kaXNhYmxlZDogI2QzZjFmNztcXG4kc2Vjb25kYXJ5LWhvdmVyOiAjYjdjZWQzO1xcbiRzZWNvbmRhcnktYWN0aXZlOiAjODg5ZGEyO1xcbiRkYW5nZXItaG92ZXI6ICNmZGUxZTE7XFxuJG5vdGljZTogI2RmZjVmOTtcXG5cXG4kcHJpbWFyeTogJGJsdWUgIWRlZmF1bHQ7XFxuJHNlY29uZGFyeTogJG1lZGl1bS1ncmF5O1xcbiRzdWNjZXNzOiAkZ3JlZW4gIWRlZmF1bHQ7XFxuJGluZm86ICRjeWFuICFkZWZhdWx0O1xcbiR3YXJuaW5nOiAkeWVsbG93ICFkZWZhdWx0O1xcbiRkYW5nZXI6ICRyZWQgIWRlZmF1bHQ7XFxuJGxpZ2h0OiAkZ3JheS0xMDAgIWRlZmF1bHQ7XFxuJGRhcms6ICRncmF5LTgwMCAhZGVmYXVsdDtcXG5cXG4kdG9hc3Qtc3VjY2VzczogIzUzZDU3MiAhZGVmYXVsdDtcXG4kdG9hc3Qtd2FybmluZzogI2ZhYjAwMCAhZGVmYXVsdDtcXG5cXG4kYnJhbmQtcHJpbWFyeTogJHByaW1hcnkgIWRlZmF1bHQ7XFxuJGJyYW5kLXNlY29uZGFyeTogJHNlY29uZGFyeSAhZGVmYXVsdDtcXG4kYnJhbmQtaW5mbzogIzViYzBkZSAhZGVmYXVsdDtcXG4kYnJhbmQtd2FybmluZzogI2YwYWQ0ZSAhZGVmYXVsdDtcXG4kYnJhbmQtc3VjY2VzczogJHN1Y2Nlc3MgIWRlZmF1bHQ7XFxuJGJyYW5kLWRhbmdlcjogJGRhbmdlciAhZGVmYXVsdDtcXG5cXG4kYnRuLXByaW1hcnktYmc6ICRwcmltYXJ5LWhvdmVyO1xcbiRidG4tc2Vjb25kYXJ5LWJvcmRlcjogIzAwMDtcXG4kYnRuLWluZm8tYmc6ICRicmFuZC1pbmZvICFkZWZhdWx0O1xcbiRidG4tc3VjY2Vzcy1iZzogJGJyYW5kLXN1Y2Nlc3MgIWRlZmF1bHQ7XFxuJGJ0bi13YXJuaW5nLWJnOiAkYnJhbmQtd2FybmluZyAhZGVmYXVsdDtcXG4kYnRuLWRhbmdlci1iZzogJGJyYW5kLWRhbmdlciAhZGVmYXVsdDtcXG5cXG4kdGhlbWUtY29sb3JzOiAoXFxuICBcXFwicHJpbWFyeVxcXCI6ICRwcmltYXJ5LFxcbiAgXFxcInNlY29uZGFyeVxcXCI6ICRzZWNvbmRhcnksXFxuICBcXFwic3VjY2Vzc1xcXCI6ICRzdWNjZXNzLFxcbiAgXFxcImluZm9cXFwiOiAkaW5mbyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogJHdhcm5pbmcsXFxuICBcXFwiZGFuZ2VyXFxcIjogJGRhbmdlcixcXG4gIFxcXCJsaWdodFxcXCI6ICRsaWdodCxcXG4gIFxcXCJkYXJrXFxcIjogJGRhcmtcXG4pO1xcblxcbiRhbGVydHMtYmFja2dyb3VuZC1jb2xvcnM6IChcXG4gIFxcXCJzdWNjZXNzXFxcIjogI2NiZjJkNCxcXG4gIFxcXCJpbmZvXFxcIjogI2JlZWFmMyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogI2ZmZmJkMyxcXG4gIFxcXCJkYW5nZXJcXFwiOiAjZmJjNmMzXFxuKTtcXG5cXG4kYWxlcnRzLXNlY29uZC1jb2xvcnM6IChcXG4gIFxcXCJzdWNjZXNzXFxcIjogIzUzZDU3MixcXG4gIFxcXCJpbmZvXFxcIjogIzI1YjlkNyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogI2ZhYjAwMCxcXG4gIFxcXCJkYW5nZXJcXFwiOiAjZjQ0MzM2XFxuKTtcXG5cXG4kdGhlbWUtYWxlcnRzLWljb25zOiAoXFxuICBzdWNjZXNzOiBcXFwiXFxcXEU1Q0FcXFwiLFxcbiAgaW5mbzogXFxcIlxcXFxlODhlXFxcIixcXG4gIHdhcm5pbmc6IFxcXCJcXFxcRTAwMlxcXCIsXFxuICBkYW5nZXI6IFxcXCJcXFxcZTAwMFxcXCJcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtaWNvbnM6IChcXG4gIFxcXCJwcmltYXJ5XFxcIjogJHByaW1hcnksXFxuICBcXFwic2Vjb25kYXJ5XFxcIjogJHNlY29uZGFyeSxcXG4gIFxcXCJzdWNjZXNzXFxcIjogJHN1Y2Nlc3MsXFxuICBcXFwiaW5mb1xcXCI6ICRpbmZvLFxcbiAgXFxcIndhcm5pbmdcXFwiOiAjZmFiMDAwLFxcbiAgXFxcImRhbmdlclxcXCI6ICRkYW5nZXIsXFxuICBcXFwibGlnaHRcXFwiOiAkbGlnaHRcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtaG92ZXI6IChcXG4gIHByaW1hcnk6ICRwcmltYXJ5LWhvdmVyLFxcbiAgc2Vjb25kYXJ5OiAkc2Vjb25kYXJ5LWhvdmVyLFxcbiAgc3VjY2VzczogIzliY2JhNixcXG4gIGluZm86ICRwcmltYXJ5LWhvdmVyLFxcbiAgd2FybmluZzogI2U2YjA0NSxcXG4gIGRhbmdlcjogI2U3NmQ3YSxcXG4gIGxpZ2h0OiAkZ3JheS04MDAsXFxuICBkYXJrOiAkZ3JheS0xMDAsXFxuICBkZWZhdWx0OiAkbGlnaHQtYmx1ZVxcbik7XFxuXFxuJHRoZW1lLWNvbG9ycy1hY3RpdmU6IChcXG4gIHByaW1hcnk6ICRwcmltYXJ5LWFjdGl2ZSxcXG4gIHNlY29uZGFyeTogJHNlY29uZGFyeS1hY3RpdmUsXFxuICBzdWNjZXNzOiAjNWE5MTY2LFxcbiAgaW5mbzogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcImluZm9cXFwiKSwgMTAlKSxcXG4gIHdhcm5pbmc6IGRhcmtlbihtYXAtZ2V0KCR0aGVtZS1jb2xvcnMsIFxcXCJ3YXJuaW5nXFxcIiksIDEwJSksXFxuICBkYW5nZXI6ICNjMzM2MmIsXFxuICBsaWdodDogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcImxpZ2h0XFxcIiksIDEwJSksXFxuICBkYXJrOiBkYXJrZW4obWFwLWdldCgkdGhlbWUtY29sb3JzLCBcXFwiZGFya1xcXCIpLCAxMCUpLFxcbiAgZGVmYXVsdDogJHByaW1hcnlcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtYmFja2dyb3VuZDogKFxcbiAgcHJpbWFyeTogI2RmZjVmOSxcXG4gIHNlY29uZGFyeTogJGJsYWNrLFxcbiAgc3VjY2VzczogI2Q2ZjBkOCxcXG4gIGluZm86ICNkZmY1ZjksXFxuICB3YXJuaW5nOiAjZmZmYmQzLFxcbiAgZGFuZ2VyOiAjZmRlMWUxLFxcbiAgbGlnaHQ6ICRncmF5LTIwMCxcXG4gIGRhcms6ICRncmF5LTcwMFxcbik7XFxuXFxuJHRoZW1lLWNvbG9ycy1zaGFkb3c6IChcXG4gIHByaW1hcnk6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIiksXFxuICBzZWNvbmRhcnk6ICRibGFjayxcXG4gIHN1Y2Nlc3M6IHRoZW1lLWNvbG9yKFxcXCJzdWNjZXNzXFxcIiksXFxuICBpbmZvOiB0aGVtZS1jb2xvcihcXFwiaW5mb1xcXCIpLFxcbiAgd2FybmluZzogdGhlbWUtY29sb3IoXFxcIndhcm5pbmdcXFwiKSxcXG4gIGRhbmdlcjogdGhlbWUtY29sb3IoXFxcImRhbmdlclxcXCIpLFxcbiAgbGlnaHQ6IHRoZW1lLWNvbG9yKFxcXCJsaWdodFxcXCIpLFxcbiAgZGFyazogdGhlbWUtY29sb3IoXFxcImRhcmtcXFwiKVxcbik7XFxuXFxuLy8gT3B0aW9uc1xcbiRlbmFibGUtY2FyZXQ6IHRydWUgIWRlZmF1bHQ7XFxuJGVuYWJsZS1yb3VuZGVkOiB0cnVlO1xcbiRlbmFibGUtc2hhZG93czogdHJ1ZTtcXG4kZW5hYmxlLWdyYWRpZW50czogZmFsc2UgIWRlZmF1bHQ7XFxuJGVuYWJsZS10cmFuc2l0aW9uczogdHJ1ZSAhZGVmYXVsdDtcXG4kZW5hYmxlLWdyaWQtY2xhc3NlczogdHJ1ZSAhZGVmYXVsdDtcXG4kZW5hYmxlLXByaW50LXN0eWxlczogdHJ1ZSAhZGVmYXVsdDtcXG5cXG4vLyBTcGFjaW5nXFxuJHNwYWNlcjogMS44NzVyZW07XFxuXFxuJHNwYWNlcnM6IChcXG4gIDA6IDAsXFxuICAxOiAoXFxuICAgICRzcGFjZXIgLyA2XFxuICApLFxcbiAgMjogKFxcbiAgICAkc3BhY2VyIC8gM1xcbiAgKSxcXG4gIDM6IChcXG4gICAgJHNwYWNlciAvIDJcXG4gICksXFxuICA0OiAkc3BhY2VyLFxcbiAgNTogKFxcbiAgICAkc3BhY2VyICogMlxcbiAgKVxcbik7XFxuXFxuLy8gQm9keVxcbiRib2R5LWJnOiAkd2hpdGUgIWRlZmF1bHQ7XFxuJGJvZHktY29sb3I6ICRkYXJrLWdyYXk7XFxuXFxuLy8gTGlua3NcXG4kbGluay1ob3Zlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSAhZGVmYXVsdDtcXG4kbGluay1ob3Zlci1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuXFxuLy8gUGFyYWdyYXBoc1xcbiRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTogMXJlbTtcXG5cXG4vLyBHcmlkIGJyZWFrcG9pbnRzXFxuJGdyaWQtYnJlYWtwb2ludHM6IChcXG4gIHhzOiAwLFxcbiAgc206IDU0NHB4LFxcbiAgbWQ6IDc2OHB4LFxcbiAgbGc6IDEwMjRweCxcXG4gIHhsOiAxMzAwcHgsXFxuICB4eGw6IDE2MDBweCAvLyBQUyBjdXN0b21cXG4pO1xcbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRncmlkLWJyZWFrcG9pbnRzLCBcXFwiJGdyaWQtYnJlYWtwb2ludHNcXFwiKTtcXG5AaW5jbHVkZSBfYXNzZXJ0LXN0YXJ0cy1hdC16ZXJvKCRncmlkLWJyZWFrcG9pbnRzKTtcXG5cXG4vLyBHcmlkIGNvbnRhaW5lcnNcXG4kY29udGFpbmVyLW1heC13aWR0aHM6IChcXG4gIHNtOiA1NzZweCxcXG4gIG1kOiA3MjBweCxcXG4gIGxnOiA5NzJweCxcXG4gIHhsOiAxMjQwcHhcXG4pO1xcbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRjb250YWluZXItbWF4LXdpZHRocywgXFxcIiRjb250YWluZXItbWF4LXdpZHRoc1xcXCIpO1xcblxcbi8vIEdyaWQgY29sdW1uc1xcbi8vJGdyaWQtY29sdW1uczogICAgICAgICAgICAgICAgMTIgIWRlZmF1bHQ7XFxuJGdyaWQtZ3V0dGVyLXdpZHRoOiAxLjg3NXJlbSAhZGVmYXVsdDtcXG5cXG4vLyBDb21wb25lbnRzXFxuLy8kbGluZS1oZWlnaHQtbGc6ICAgICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XFxuLy8kbGluZS1oZWlnaHQtc206ICAgICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XFxuXFxuLy8kYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgICAxcHggIWRlZmF1bHQ7XFxuLy8kYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuXFxuJGJvcmRlci1yYWRpdXM6IDRweCAhZGVmYXVsdDtcXG4vLyRib3JkZXItcmFkaXVzLWxnOiAgICAgICAgICAgIC4zcmVtICFkZWZhdWx0O1xcbi8vJGJvcmRlci1yYWRpdXMtc206ICAgICAgICAgICAgLjJyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kY29tcG9uZW50LWFjdGl2ZS1jb2xvcjogICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kY29tcG9uZW50LWFjdGl2ZS1iZzogICAgICAgICB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpICFkZWZhdWx0O1xcblxcbiRjYXJldC13aWR0aDogLjI1cmVtO1xcblxcbi8vJHRyYW5zaXRpb24tYmFzZTogICAgICAgICAgICAgYWxsIC4ycyBlYXNlLWluLW91dCAhZGVmYXVsdDtcXG4vLyR0cmFuc2l0aW9uLWZhZGU6ICAgICAgICAgICAgIG9wYWNpdHkgLjE1cyBsaW5lYXIgIWRlZmF1bHQ7XFxuLy8kdHJhbnNpdGlvbi1jb2xsYXBzZTogICAgICAgICBoZWlnaHQgLjM1cyBlYXNlICFkZWZhdWx0O1xcblxcbi8vIEZvbnRzXFxuJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWY6IFxcXCJPcGVuIFNhbnNcXFwiLCBoZWx2ZXRpY2EsIGFyaWFsLCBzYW5zLXNlcmlmO1xcbi8vJGZvbnQtZmFtaWx5LW1vbm9zcGFjZTogICAgICAgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCBcXFwiTGliZXJhdGlvbiBNb25vXFxcIiwgXFxcIkNvdXJpZXIgTmV3XFxcIiwgbW9ub3NwYWNlICFkZWZhdWx0O1xcbi8vJGZvbnQtZmFtaWx5LWJhc2U6ICAgICAgICAgICAgJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWYgIWRlZmF1bHQ7XFxuXFxuJGZvbnQtc2l6ZS1iYXNlOiAuODc1cmVtO1xcbiRmb250LXNpemUtbGc6IDFyZW07XFxuJGZvbnQtc2l6ZS1zbTogLjc1cmVtO1xcbiRmb250LXNpemUteHM6IC42MjVyZW07IC8vIFBTIGN1c3RvbVxcblxcbi8vJGZvbnQtd2VpZ2h0LWxpZ2h0OiAgICAgICAgICAgMzAwO1xcbi8vJGZvbnQtd2VpZ2h0LW5vcm1hbDogICAgICAgICAgNDAwO1xcbiRmb250LXdlaWdodC1zZW1pYm9sZDogNjAwO1xcbiRmb250LXdlaWdodC1ib2xkOiA3MDA7XFxuXFxuJGgxLWZvbnQtc2l6ZTogMS41cmVtO1xcbiRoMi1mb250LXNpemU6IDEuMjVyZW07XFxuJGgzLWZvbnQtc2l6ZTogMXJlbTtcXG4kaDQtZm9udC1zaXplOiAuODc1cmVtO1xcbiRoNS1mb250LXNpemU6IC43NXJlbTtcXG4kaDYtZm9udC1zaXplOiAuNjI1cmVtO1xcblxcbi8vJGhlYWRpbmdzLW1hcmdpbi1ib3R0b206ICAgICAgKCRzcGFjZXIgLyAyKSAhZGVmYXVsdDtcXG4kaGVhZGluZ3MtZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1zYW5zLXNlcmlmO1xcbiRoZWFkaW5ncy1mb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LWJvbGQ7XFxuJGhlYWRpbmdzLWNvbG9yOiAkYm9keS1jb2xvcjtcXG5cXG4vLyRkaXNwbGF5MS1zaXplOiAgICAgICAgICAgICAgIDZyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTItc2l6ZTogICAgICAgICAgICAgICA1LjVyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTMtc2l6ZTogICAgICAgICAgICAgICA0LjVyZW0gIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTQtc2l6ZTogICAgICAgICAgICAgICAzLjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZGlzcGxheTEtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTItd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTMtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheTQtd2VpZ2h0OiAgICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuLy8kZGlzcGxheS1saW5lLWhlaWdodDogICAgICAgICAkaGVhZGluZ3MtbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kbGVhZC1mb250LXNpemU6ICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogMS4yNSkgIWRlZmF1bHQ7XFxuLy8kbGVhZC1mb250LXdlaWdodDogICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XFxuXFxuLy8kc21hbGwtZm9udC1zaXplOiAgICAgICAgICAgICA4MCUgIWRlZmF1bHQ7XFxuXFxuJHRleHQtbXV0ZWQ6ICRtZWRpdW0tZ3JheTtcXG5cXG4vLyRibG9ja3F1b3RlLXNtYWxsLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG4vLyRibG9ja3F1b3RlLWZvbnQtc2l6ZTogICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAxLjI1KSAhZGVmYXVsdDtcXG5cXG4kaHItYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRoci1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuLy8kbWFyay1wYWRkaW5nOiAgICAgICAgICAgICAgICAuMmVtICFkZWZhdWx0O1xcblxcbi8vJGR0LWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuXFxuLy8ka2JkLWJveC1zaGFkb3c6ICAgICAgICAgICAgICBpbnNldCAwIC0uMXJlbSAwIHJnYmEoJGJsYWNrLCAuMjUpICFkZWZhdWx0O1xcbi8vJG5lc3RlZC1rYmQtZm9udC13ZWlnaHQ6ICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuXFxuLy8kbGlzdC1pbmxpbmUtcGFkZGluZzogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRtYXJrLWJnOiAgICAgICAgICAgICAgICAgICAgICNmY2Y4ZTMgIWRlZmF1bHQ7XFxuXFxuLy8kaHItbWFyZ2luLXk6ICAgICAgICAgICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xcblxcbi8vIFRhYmxlc1xcbiR0YWJsZS1jZWxsLXBhZGRpbmc6IC40cmVtO1xcbiR0YWJsZS1jZWxsLXBhZGRpbmctc206IC4yNXJlbTtcXG5cXG4vLyR0YWJsZS1iZzogICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xcbiR0YWJsZS1hY2NlbnQtYmc6ICRiYWNrZ3JvdW5kLWNvbG9yO1xcbiR0YWJsZS1ob3Zlci1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4kdGFibGUtYWN0aXZlLWJnOiB0aGVtZS1jb2xvci1ob3ZlcihcXFwicHJpbWFyeVxcXCIpO1xcblxcbi8vJHRhYmxlLWJvcmRlci13aWR0aDogICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyR0YWJsZS1ib3JkZXItY29sb3I6ICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcXG5cXG4kdGFibGUtaGVhZC1iZzogJGJhY2tncm91bmQtY29sb3I7XFxuJHRhYmxlLWhlYWQtY29sb3I6ICRib2R5LWNvbG9yO1xcblxcbiR0YWJsZS1kYXJrLWJnOiAkYm9keS1jb2xvcjtcXG4kdGFibGUtZGFyay1hY2NlbnQtYmc6ICRleHRyYS1kYXJrLWdyYXk7XFxuJHRhYmxlLWRhcmstaG92ZXItYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuJHRhYmxlLWRhcmstYm9yZGVyLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuLy8kdGFibGUtZGFyay1jb2xvcjogICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcXG5cXG4vLyBCdXR0b25zXFxuJGlucHV0LWJ0bi1wYWRkaW5nLXk6IC4zNzVyZW07XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXg6IC44MzhyZW07XFxuLy8kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0OiAgICAgICAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1idG4tZm9jdXMtd2lkdGg6ICAgICAgIC4ycmVtICFkZWZhdWx0O1xcbi8vJGlucHV0LWJ0bi1mb2N1cy1jb2xvcjogICAgICAgcmdiYSgkY29tcG9uZW50LWFjdGl2ZS1iZywgLjI1KSAhZGVmYXVsdDtcXG4vLyRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdzogIDAgMCAwICRpbnB1dC1idG4tZm9jdXMtd2lkdGggJGlucHV0LWJ0bi1mb2N1cy1jb2xvciAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYnRuLXBhZGRpbmcteS1zbTogLjMxM3JlbTtcXG4kaW5wdXQtYnRuLXBhZGRpbmcteC1zbTogLjYyNXJlbTtcXG4vLyRpbnB1dC1idG4tbGluZS1oZWlnaHQtc206ICAgICRsaW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4kaW5wdXQtYnRuLXBhZGRpbmcteS1sZzogLjQzOHJlbTtcXG4kaW5wdXQtYnRuLXBhZGRpbmcteC1sZzogLjgzOHJlbTtcXG4vLyRpbnB1dC1idG4tbGluZS1oZWlnaHQtbGc6ICAgICRsaW5lLWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1idG4tYm9yZGVyLXdpZHRoOiAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuLy8gQnV0dG9uc1xcbiRidG4tcGFkZGluZy15OiAuNXJlbSAhZGVmYXVsdDtcXG4kYnRuLXBhZGRpbmcteDogMXJlbSAhZGVmYXVsdDtcXG4vLyRidG4tbGluZS1oZWlnaHQ6ICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLXBhZGRpbmcteS1zbTogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1zbSAhZGVmYXVsdDtcXG4vLyRidG4tcGFkZGluZy14LXNtOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LXNtICFkZWZhdWx0O1xcbi8vJGJ0bi1saW5lLWhlaWdodC1zbTogICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4vLyRidG4tcGFkZGluZy15LWxnOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LWxnICFkZWZhdWx0O1xcbi8vJGJ0bi1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGcgIWRlZmF1bHQ7XFxuLy8kYnRuLWxpbmUtaGVpZ2h0LWxnOiAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGJ0bi1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuXFxuJGJ0bi1mb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LXNlbWlib2xkO1xcbiRidG4tYm94LXNoYWRvdzogbm9uZTtcXG4vLyRidG4tZm9jdXMtd2lkdGg6ICAgICAgICAgICAgICRpbnB1dC1idG4tZm9jdXMtd2lkdGggIWRlZmF1bHQ7XFxuJGJ0bi1mb2N1cy1ib3gtc2hhZG93OiBub25lO1xcbi8vJGJ0bi1kaXNhYmxlZC1vcGFjaXR5OiAgICAgICAgLjY1ICFkZWZhdWx0O1xcbiRidG4tYWN0aXZlLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuLy8kYnRuLWxpbmstZGlzYWJsZWQtY29sb3I6ICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLWJsb2NrLXNwYWNpbmcteTogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4kYnRuLWJvcmRlci1yYWRpdXM6IDRweDtcXG4vLyRidG4tYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xcbi8vJGJ0bi1ib3JkZXItcmFkaXVzLXNtOiAgICAgICAgJGJvcmRlci1yYWRpdXMtc20gIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLXRyYW5zaXRpb246ICAgICAgICAgICAgICBjb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XFxuXFxuLy8gRm9ybXNcXG4kaW5wdXQtcGFkZGluZy15OiAuMzc1cmVtO1xcbiRpbnB1dC1wYWRkaW5nLXg6IC40Mzc1cmVtO1xcbi8vJGlucHV0LWxpbmUtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtcGFkZGluZy15LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktc20gIWRlZmF1bHQ7XFxuLy8kaW5wdXQtcGFkZGluZy14LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtc20gIWRlZmF1bHQ7XFxuLy8kaW5wdXQtbGluZS1oZWlnaHQtc206ICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1wYWRkaW5nLXktbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1saW5lLWhlaWdodC1sZzogICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kaW5wdXQtZGlzYWJsZWQtYmc6ICNlY2VlZWY7XFxuXFxuJGlucHV0LWNvbG9yOiAkYm9keS1jb2xvcjtcXG4kaW5wdXQtYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRpbnB1dC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kaW5wdXQtYm94LXNoYWRvdzogbm9uZTtcXG5cXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzLWxnOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzLXNtOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1zbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1mb2N1cy1iZzogICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYmcgIWRlZmF1bHQ7XFxuJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvcjogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRpbnB1dC1mb2N1cy1jb2xvcjogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtZm9jdXMtd2lkdGg6ICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1mb2N1cy13aWR0aCAhZGVmYXVsdDtcXG4kaW5wdXQtZm9jdXMtYm94LXNoYWRvdzogbm9uZTtcXG5cXG4kaW5wdXQtcGxhY2Vob2xkZXItY29sb3I6ICRtZWRpdW0tZ3JheTtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtYm9yZGVyOiAgICAgICAgICAgICAgICAgICAkaW5wdXQtYm9yZGVyLXdpZHRoICogMiAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXI6ICAgICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogJGlucHV0LWJ0bi1saW5lLWhlaWdodCkgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXkgKiAyKSAhZGVmYXVsdDtcXG4kaW5wdXQtaGVpZ2h0OiAyLjE4OHJlbTtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXItc206ICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1zbSAqICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20pICsgKCRpbnB1dC1idG4tcGFkZGluZy15LXNtICogMikgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtaGVpZ2h0LXNtOiAgICAgICAgICAgICAgICAgICAgICAgY2FsYygjeyRpbnB1dC1oZWlnaHQtaW5uZXItc219ICsgI3skaW5wdXQtaGVpZ2h0LWJvcmRlcn0pICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LWhlaWdodC1pbm5lci1sZzogICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWxnICogJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZykgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXktbGcgKiAyKSAhZGVmYXVsdDtcXG4kaW5wdXQtaGVpZ2h0LWxnOiAyLjE4OHJlbTtcXG5cXG4vLyRpbnB1dC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xcblxcbi8vJGZvcm0tdGV4dC1tYXJnaW4tdG9wOiAgICAgICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLWNoZWNrLWlucHV0LWd1dHRlcjogICAgICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcbi8vJGZvcm0tY2hlY2staW5wdXQtbWFyZ2luLXk6ICAgICAgICAgICAgIC4zcmVtICFkZWZhdWx0O1xcbi8vJGZvcm0tY2hlY2staW5wdXQtbWFyZ2luLXg6ICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLWNoZWNrLWlubGluZS1tYXJnaW4teDogICAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kZm9ybS1jaGVjay1pbmxpbmUtaW5wdXQtbWFyZ2luLXg6ICAgICAgLjMxMjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZm9ybS1ncm91cC1tYXJnaW4tYm90dG9tOiAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1ncm91cC1hZGRvbi1jb2xvcjogICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuJGlucHV0LWdyb3VwLWFkZG9uLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG4vLyRpbnB1dC1ncm91cC1hZGRvbi1ib3JkZXItY29sb3I6ICAgICAgICAkaW5wdXQtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWd1dHRlcjogICAgICAgICAgICAgICAgIDEuNXJlbSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1zcGFjZXIteDogICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1zaXplOiAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJnOiAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1iZy1zaXplOiAgICAgIDUwJSA1MCUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJveC1zaGFkb3c6ICAgaW5zZXQgMCAuMjVyZW0gLjI1cmVtIHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWRpc2FibGVkLWJnOiAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtbGFiZWwtZGlzYWJsZWQtY29sb3I6ICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3I6ICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1iZzogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWRpc2FibGVkLWJnOiAgcmdiYSh0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpLCAuNSkgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtYm94LXNoYWRvdzogICBub25lICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1mb2N1cy1ib3gtc2hhZG93OiAgICAgMCAwIDAgMXB4ICRib2R5LWJnLCAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1jb2xvcjogICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICAgICAgIGxpZ2h0ZW4oJGNvbXBvbmVudC1hY3RpdmUtYmcsIDM1JSkgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1ib3gtc2hhZG93OiAgICBub25lICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1czogICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pY29uLWNoZWNrZWQ6ICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDggOCclM0UlM0NwYXRoIGZpbGw9JyN7JGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWNvbG9yfScgZD0nTTYuNTY0Ljc1bC0zLjU5IDMuNjEyLTEuNTM4LTEuNTVMMCA0LjI2IDIuOTc0IDcuMjUgOCAyLjE5M3onLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWJnOiAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtY29sb3I6ICRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWljb24taW5kZXRlcm1pbmF0ZTogIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA0JyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtY29sb3J9JyBkPSdNMCAyaDQnLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWJveC1zaGFkb3c6IG5vbmUgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLXJhZGlvLWluZGljYXRvci1ib3JkZXItcmFkaXVzOiAgICAgICAgICA1MCUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXJhZGlvLWluZGljYXRvci1pY29uLWNoZWNrZWQ6ICAgICAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nLTQgLTQgOCA4JyUzRSUzQ2NpcmNsZSByPSczJyBmaWxsPScjeyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvcn0nLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLXNlbGVjdC1wYWRkaW5nLXk6ICAgICAgICAgICAuMzc1cmVtICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtcGFkZGluZy14OiAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1oZWlnaHQ6ICAgICAgICAgICAgICAkaW5wdXQtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yLXBhZGRpbmc6ICAgMXJlbSAhZGVmYXVsdDsgLy8gRXh0cmEgcGFkZGluZyB0byBhY2NvdW50IGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIGJhY2tncm91bmQtaW1hZ2UgYmFzZWQgaW5kaWNhdG9yXFxuLy8kY3VzdG9tLXNlbGVjdC1saW5lLWhlaWdodDogICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtY29sb3I6ICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWRpc2FibGVkLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuLy8kY3VzdG9tLXNlbGVjdC1iZzogICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGN1c3RvbS1zZWxlY3QtZGlzYWJsZWQtYmc6ICRpbnB1dC1kaXNhYmxlZC1iZztcXG4kY3VzdG9tLXNlbGVjdC1iZy1zaXplOiA4cHggMTBweCAhZGVmYXVsdDsgLy8gSW4gcGl4ZWxzIGJlY2F1c2UgaW1hZ2UgZGltZW5zaW9uc1xcbiRjdXN0b20tc2VsZWN0LWluZGljYXRvci1jb2xvcjogJGlucHV0LWNvbG9yO1xcbi8vJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yOiAgICAgICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0IDUnJTNFJTNDcGF0aCBmaWxsPScjeyRjdXN0b20tc2VsZWN0LWluZGljYXRvci1jb2xvcn0nIGQ9J00yIDBMMCAyaDR6bTAgNUwwIDNoNHonLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1ib3JkZXItd2lkdGg6ICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWJvcmRlci1jb2xvcjogICAgICAgICRpbnB1dC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1ib3JkZXItcmFkaXVzOiAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4kY3VzdG9tLXNlbGVjdC1mb2N1cy1ib3JkZXItY29sb3I6ICRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3I7XFxuJGN1c3RvbS1zZWxlY3QtZm9jdXMtYm94LXNoYWRvdzogJGlucHV0LWZvY3VzLWJveC1zaGFkb3c7XFxuXFxuLy8kY3VzdG9tLXNlbGVjdC1mb250LXNpemUtc206ICAgICAgICA3NSUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1oZWlnaHQtc206ICAgICAgICAgICAkaW5wdXQtaGVpZ2h0LXNtICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1zZWxlY3QtZm9udC1zaXplLWxnOiAgICAgICAgMTI1JSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWhlaWdodC1sZzogICAgICAgICAgICRpbnB1dC1oZWlnaHQtbGcgIWRlZmF1bHQ7XFxuXFxuLy8kY3VzdG9tLWZpbGUtaGVpZ2h0OiAgICAgICAgICAgICAgICAkaW5wdXQtaGVpZ2h0ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWZvY3VzLWJvcmRlci1jb2xvcjogICAgJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLWZpbGUtZm9jdXMtYm94LXNoYWRvdzogJGlucHV0LWZvY3VzLWJveC1zaGFkb3c7XFxuXFxuLy8kY3VzdG9tLWZpbGUtcGFkZGluZy15OiAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1wYWRkaW5nLXg6ICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1jb2xvcjogICAgICAgICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1iZzogICAgICAgICAgICAgICAgICAgICRpbnB1dC1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItd2lkdGg6ICAgICAgICAgICRpbnB1dC1idG4tYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJvcmRlci1jb2xvcjogICAgICAgICAgJGlucHV0LWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItcmFkaXVzOiAgICAgICAgICRpbnB1dC1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJveC1zaGFkb3c6ICAgICAgICAgICAgJGlucHV0LWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYnV0dG9uLWNvbG9yOiAgICAgICAgICAkY3VzdG9tLWZpbGUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYnV0dG9uLWJnOiAgICAgICAgICAgICAkaW5wdXQtZ3JvdXAtYWRkb24tYmcgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtdGV4dDogKFxcbi8vICAgICAgICBlbjogXFxcIkJyb3dzZVxcXCJcXG4vLykgIWRlZmF1bHQ7XFxuXFxuJGN1cnNvci1kaXNhYmxlZDogbm90LWFsbG93ZWQ7IC8vIFBTIGN1c3RvbVxcblxcbi8vIEZvcm0gdmFsaWRhdGlvblxcbi8vJGZvcm0tZmVlZGJhY2stbWFyZ2luLXRvcDogICAgICAgICAgJGZvcm0tdGV4dC1tYXJnaW4tdG9wICFkZWZhdWx0O1xcbi8vJGZvcm0tZmVlZGJhY2stZm9udC1zaXplOiAgICAgICAgICAgJHNtYWxsLWZvbnQtc2l6ZSAhZGVmYXVsdDtcXG4kZm9ybS1mZWVkYmFjay12YWxpZC1jb2xvcjogdGhlbWUtY29sb3IoXFxcInN1Y2Nlc3NcXFwiKTtcXG4kZm9ybS1mZWVkYmFjay1pbnZhbGlkLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwiZGFuZ2VyXFxcIik7XFxuJGZvcm0tZmVlZGJhY2std2FybmluZy1jb2xvcjogdGhlbWUtY29sb3IoXFxcIndhcm5pbmdcXFwiKTsgLy8gUFMgY3VzdG9tXFxuXFxuLy8gRHJvcGRvd25zXFxuLy8kZHJvcGRvd24tbWluLXdpZHRoOiAgICAgICAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tcGFkZGluZy15OiAwO1xcbi8vJGRyb3Bkb3duLXBhZGRpbmcteTogICAgICAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tc3BhY2VyOiAgICAgICAgICAgICAgICAgICAuMTI1cmVtICFkZWZhdWx0O1xcbi8vJGRyb3Bkb3duLWJnOiAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRkcm9wZG93bi1ib3JkZXItY29sb3I6ICRsaWdodC1ncmF5O1xcbi8vJGRyb3Bkb3duLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRkcm9wZG93bi1kaXZpZGVyLWJnOiAkbGlnaHQtZ3JheTtcXG4vLyRkcm9wZG93bi1ib3gtc2hhZG93OiAgICAgICAgICAgICAgIDAgLjVyZW0gMXJlbSByZ2JhKCRibGFjaywgLjE3NSkgIWRlZmF1bHQ7XFxuXFxuJGRyb3Bkb3duLWxpbmstY29sb3I6ICRtZWRpdW0tZ3JheTtcXG4kZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG4kZHJvcGRvd24tbGluay1ob3Zlci1iZzogJHdoaXRlO1xcblxcbi8vJGRyb3Bkb3duLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kZHJvcGRvd24tbGluay1hY3RpdmUtYmc6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4vLyRkcm9wZG93bi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcXG5cXG4kZHJvcGRvd24taXRlbS1wYWRkaW5nLXg6IC4zMTI1cmVtO1xcbiRkcm9wZG93bi1pdGVtLXBhZGRpbmcteTogLjMxMjVyZW07XFxuXFxuLy8kZHJvcGRvd24taGVhZGVyLWNvbG9yOiAgICAgICAgICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuLy8gTmF2c1xcbiRuYXYtbGluay1wYWRkaW5nLXk6IC45Mzc1cmVtO1xcbiRuYXYtbGluay1wYWRkaW5nLXg6IDEuMjVyZW07XFxuJG5hdi1saW5rLWRpc2FibGVkLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG5cXG4kbmF2LXRhYnMtYm9yZGVyLWNvbG9yOiAkd2hpdGU7XFxuLy8kbmF2LXRhYnMtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJG5hdi10YWJzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpO1xcbiRuYXYtdGFicy1saW5rLWFjdGl2ZS1jb2xvcjogJGJvZHktY29sb3I7XFxuJG5hdi10YWJzLWxpbmstYWN0aXZlLWJnOiAkYm9keS1iZztcXG4kbmF2LXRhYnMtbGluay1hY3RpdmUtYm9yZGVyLWNvbG9yOiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpO1xcblxcbiRuYXYtcGlsbHMtbGluay1ob3Zlci1ib3JkZXItY29sb3I6ICRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWNvbG9yOiAkbmF2LXRhYnMtbGluay1hY3RpdmUtY29sb3I7XFxuJG5hdi1waWxscy1saW5rLWFjdGl2ZS1iZzogI2Y0ZjlmYjtcXG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjogJG5hdi10YWJzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjsgLy8gUFMgY3VzdG9tXFxuXFxuLy8kbmF2LXBpbGxzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRuYXYtcGlsbHMtbGluay1hY3RpdmUtY29sb3I6ICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbi8vJG5hdi1waWxscy1saW5rLWFjdGl2ZS1iZzogICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuXFxuLy8gTmF2YmFyXFxuLy8kbmF2YmFyLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAoJHNwYWNlciAvIDIpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItbmF2LWxpbmstcGFkZGluZy14OiAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci1icmFuZC1mb250LXNpemU6ICAgICAgICAgICAgJGZvbnQtc2l6ZS1sZyAhZGVmYXVsdDtcXG5cXG4vLyRuYXYtbGluay1oZWlnaHQ6ICAgICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAkbGluZS1oZWlnaHQtYmFzZSArICRuYXYtbGluay1wYWRkaW5nLXkgKiAyKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItYnJhbmQtaGVpZ2h0OiAgICAgICAgICAgICAgICRuYXZiYXItYnJhbmQtZm9udC1zaXplICogJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWJyYW5kLXBhZGRpbmcteTogICAgICAgICAgICAoJG5hdi1saW5rLWhlaWdodCAtICRuYXZiYXItYnJhbmQtaGVpZ2h0KSAvIDIgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2YmFyLXRvZ2dsZXItcGFkZGluZy15OiAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLXRvZ2dsZXItcGFkZGluZy14OiAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLXRvZ2dsZXItZm9udC1zaXplOiAgICAgICAgICAkZm9udC1zaXplLWxnICFkZWZhdWx0O1xcbi8vJG5hdmJhci10b2dnbGVyLWJvcmRlci1yYWRpdXM6ICAgICAgJGJ0bi1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci1kYXJrLWNvbG9yOiAgICAgICAgICAgICAgICAgcmdiYSgkd2hpdGUsIC41KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay1ob3Zlci1jb2xvcjogICAgICAgICAgIHJnYmEoJHdoaXRlLCAuNzUpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLWFjdGl2ZS1jb2xvcjogICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLWRpc2FibGVkLWNvbG9yOiAgICAgICAgcmdiYSgkd2hpdGUsIC4yNSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWRhcmstdG9nZ2xlci1pY29uLWJnOiAgICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItZGFyay1jb2xvcn0nIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLXRvZ2dsZXItYm9yZGVyLWNvbG9yOiAgcmdiYSgkd2hpdGUsIC4xKSAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItbGlnaHQtY29sb3I6ICAgICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuNSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LWhvdmVyLWNvbG9yOiAgICAgICAgICByZ2JhKCRibGFjaywgLjcpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1saWdodC1hY3RpdmUtY29sb3I6ICAgICAgICAgcmdiYSgkYmxhY2ssIC45KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtZGlzYWJsZWQtY29sb3I6ICAgICAgIHJnYmEoJGJsYWNrLCAuMykgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LXRvZ2dsZXItaWNvbi1iZzogICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItbGlnaHQtY29sb3J9JyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW1pdGVybGltaXQ9JzEwJyBkPSdNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtdG9nZ2xlci1ib3JkZXItY29sb3I6IHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuXFxuLy8gUGFnaW5hdGlvblxcbiRwYWdpbmF0aW9uLXBhZGRpbmcteTogLjY1cmVtO1xcbiRwYWdpbmF0aW9uLXBhZGRpbmcteDogLjVyZW07XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXktc206ICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXgtc206ICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLXBhZGRpbmcteS1sZzogICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLXBhZGRpbmcteC1sZzogICAgICAgICAgIDEuNXJlbSAhZGVmYXVsdDtcXG4vLyRwYWdpbmF0aW9uLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgIDEuMjUgIWRlZmF1bHQ7XFxuXFxuJHBhZ2luYXRpb24tY29sb3I6ICRtZWRpdW0tZ3JheTtcXG4kcGFnaW5hdGlvbi1iZzogJHdoaXRlO1xcbi8vJHBhZ2luYXRpb24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kcGFnaW5hdGlvbi1ib3JkZXItY29sb3I6ICR3aGl0ZTtcXG5cXG4vLyRwYWdpbmF0aW9uLWZvY3VzLWJveC1zaGFkb3c6ICAgICAgICRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdyAhZGVmYXVsdDtcXG5cXG4kcGFnaW5hdGlvbi1ob3Zlci1jb2xvcjogJHBhZ2luYXRpb24tY29sb3I7XFxuJHBhZ2luYXRpb24taG92ZXItYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWhvdmVyLWJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yO1xcblxcbiRwYWdpbmF0aW9uLWFjdGl2ZS1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG4kcGFnaW5hdGlvbi1hY3RpdmUtYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWFjdGl2ZS1ib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWJvcmRlci1jb2xvcjtcXG5cXG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuJHBhZ2luYXRpb24tZGlzYWJsZWQtYmc6ICRwYWdpbmF0aW9uLWJnO1xcbiRwYWdpbmF0aW9uLWRpc2FibGVkLWJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yO1xcblxcbi8vIEp1bWJvdHJvblxcbiRqdW1ib3Ryb24tcGFkZGluZzogMnJlbSAhZGVmYXVsdDtcXG4kanVtYm90cm9uLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG5cXG4vLyBDYXJkc1xcbiRjYXJkLXNwYWNlci14OiAuNjI1cmVtICFkZWZhdWx0O1xcbiRjYXJkLXNwYWNlci15OiAuNjI1cmVtICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci13aWR0aDogMXB4ICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci1yYWRpdXM6IDVweCAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItcmFkaXVzLWlubmVyOiAkY2FyZC1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbiRjYXJkLWNhcC1iZzogJGdyYXktMjAwICFkZWZhdWx0O1xcbiRjYXJkLWJnOiAjZmZmICFkZWZhdWx0O1xcbiRjYXJkLWxpbmstaG92ZXItY29sb3I6ICNmZmYgIWRlZmF1bHQ7XFxuJGNhcmQtYm9yZGVyLWNvbG9yOiAjZGJlNmU5ICFkZWZhdWx0O1xcbi8vJGNhcmQtaW5uZXItYm9yZGVyLXJhZGl1czogICAgICAgICAgY2FsYygjeyRjYXJkLWJvcmRlci1yYWRpdXN9IC0gI3skY2FyZC1ib3JkZXItd2lkdGh9KSAhZGVmYXVsdDtcXG4vLyRjYXJkLWNhcC1iZzogICAgICAgICAgICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMDMpICFkZWZhdWx0O1xcbi8vJGNhcmQtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcblxcbi8vJGNhcmQtaW1nLW92ZXJsYXktcGFkZGluZzogICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJkLWdyb3VwLW1hcmdpbjogICAgICAgICAgICAgICAgICgkZ3JpZC1ndXR0ZXItd2lkdGggLyAyKSAhZGVmYXVsdDtcXG4vLyRjYXJkLWRlY2stbWFyZ2luOiAgICAgICAgICAgICAgICAgICRjYXJkLWdyb3VwLW1hcmdpbiAhZGVmYXVsdDtcXG5cXG4vLyRjYXJkLWNvbHVtbnMtY291bnQ6ICAgICAgICAgICAgICAgIDMgIWRlZmF1bHQ7XFxuLy8kY2FyZC1jb2x1bW5zLWdhcDogICAgICAgICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xcbi8vJGNhcmQtY29sdW1ucy1tYXJnaW46ICAgICAgICAgICAgICAgJGNhcmQtc3BhY2VyLXkgIWRlZmF1bHQ7XFxuXFxuLy8gVG9vbHRpcHNcXG4vLyR0b29sdGlwLWZvbnQtc2l6ZTogICAgICAgICAgICRmb250LXNpemUtc20gIWRlZmF1bHQ7XFxuLy8kdG9vbHRpcC1tYXgtd2lkdGg6ICAgICAgICAgICAyMDBweCAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLWNvbG9yOiAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kdG9vbHRpcC1iZzogJG1lZGl1bS1ncmF5O1xcbi8vJHRvb2x0aXAtYm9yZGVyLXJhZGl1czogICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtb3BhY2l0eTogICAgICAgICAgICAgLjkgIWRlZmF1bHQ7XFxuJHRvb2x0aXAtcGFkZGluZy15OiAuNjI1cmVtO1xcbiR0b29sdGlwLXBhZGRpbmcteDogMS4yNXJlbTtcXG4vLyR0b29sdGlwLW1hcmdpbjogICAgICAgICAgICAgIDAgIWRlZmF1bHQ7XFxuXFxuLy8kdG9vbHRpcC1hcnJvdy13aWR0aDogICAgICAgICAuOHJlbSAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLWFycm93LWhlaWdodDogICAgICAgIC40cmVtICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtYXJyb3ctY29sb3I6ICAgICAgICAgJHRvb2x0aXAtYmcgIWRlZmF1bHQ7XFxuXFxuLy8gUG9wb3ZlcnNcXG4vLyRwb3BvdmVyLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICRmb250LXNpemUtc20gIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1iZzogICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1tYXgtd2lkdGg6ICAgICAgICAgICAgICAgICAyNzZweCAhZGVmYXVsdDtcXG4vLyRwb3BvdmVyLWJvcmRlci13aWR0aDogICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJHBvcG92ZXItYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRwb3BvdmVyLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuJHBvcG92ZXItaGVhZGVyLWJnOiAkZXh0cmEtbGlnaHQtZ3JheTtcXG4vLyRwb3BvdmVyLWhlYWRlci1jb2xvcjogICAgICAgICAgICAgICRoZWFkaW5ncy1jb2xvciAhZGVmYXVsdDtcXG4kcG9wb3Zlci1oZWFkZXItcGFkZGluZy15OiAuNjI1cmVtO1xcbiRwb3BvdmVyLWhlYWRlci1wYWRkaW5nLXg6IDEuMjVyZW07XFxuXFxuLy8kcG9wb3Zlci1ib2R5LWNvbG9yOiAgICAgICAgICAgICAgICAkYm9keS1jb2xvciAhZGVmYXVsdDtcXG4kcG9wb3Zlci1ib2R5LXBhZGRpbmcteTogLjYyNXJlbTtcXG4kcG9wb3Zlci1ib2R5LXBhZGRpbmcteDogMS4yNXJlbTtcXG5cXG4vLyRwb3BvdmVyLWFycm93LXdpZHRoOiAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1hcnJvdy1oZWlnaHQ6ICAgICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRwb3BvdmVyLWFycm93LWNvbG9yOiAgICAgICAgICAgICAgICRwb3BvdmVyLWJnICFkZWZhdWx0O1xcblxcbi8vJHBvcG92ZXItYXJyb3ctb3V0ZXItY29sb3I6ICAgICAgICAgZmFkZS1pbigkcG9wb3Zlci1ib3JkZXItY29sb3IsIC4wNSkgIWRlZmF1bHQ7XFxuXFxuLy8gQmFkZ2VzXFxuJGJhZGdlLWZvbnQtc2l6ZTogLjYyNXJlbSAhZGVmYXVsdDtcXG4kYmFkZ2UtZm9udC13ZWlnaHQ6IDUwMCAhZGVmYXVsdDtcXG4kYmFkZ2UtcGFkZGluZy15OiAuMjVyZW07XFxuJGJhZGdlLXBhZGRpbmcteDogLjVyZW07XFxuLy8kYmFkZ2UtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4vLyRiYWRnZS1waWxsLXBhZGRpbmcteDogICAgICAgICAgICAgIC42ZW0gIWRlZmF1bHQ7XFxuLy8kYmFkZ2UtcGlsbC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcXG5cXG4vLyBNb2RhbHNcXG4kbW9kYWwtaW5uZXItcGFkZGluZzogMS44NzVyZW07XFxuXFxuLy8kbW9kYWwtZGlhbG9nLW1hcmdpbjogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG4vLyRtb2RhbC1kaWFsb2ctbWFyZ2luLXktc20tdXA6IDEuNzVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQ6ICAgICAgICAgICAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcXG5cXG4vLyRtb2RhbC1jb250ZW50LWJnOiAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kbW9kYWwtY29udGVudC1ib3JkZXItY29sb3I6IG5vbmU7XFxuLy8kbW9kYWwtY29udGVudC1ib3JkZXItd2lkdGg6ICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRtb2RhbC1jb250ZW50LWJveC1zaGFkb3cteHM6IDAgOHB4IDE2cHggMCByZ2JhKDAsIDAsIDAsIC4xKTtcXG4kbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXNtLXVwOiAwIDhweCAxNnB4IDAgcmdiYSgwLCAwLCAwLCAuMSk7XFxuXFxuLy8kbW9kYWwtYmFja2Ryb3AtYmc6ICAgICAgICAgICAkYmxhY2sgIWRlZmF1bHQ7XFxuLy8kbW9kYWwtYmFja2Ryb3Atb3BhY2l0eTogICAgICAuNSAhZGVmYXVsdDtcXG4kbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcjogbm9uZTtcXG4vLyRtb2RhbC1mb290ZXItYm9yZGVyLWNvbG9yOiAgICRtb2RhbC1oZWFkZXItYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcbi8vJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGg6ICAgJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJG1vZGFsLWZvb3Rlci1ib3JkZXItd2lkdGg6ICAgJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJG1vZGFsLWhlYWRlci1wYWRkaW5nOiAkbW9kYWwtaW5uZXItcGFkZGluZztcXG5cXG4kbW9kYWwtbGc6IDkwMHB4O1xcbiRtb2RhbC1tZDogNjgwcHg7XFxuJG1vZGFsLXNtOiA0MDBweDtcXG5cXG4vLyRtb2RhbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSAuM3MgZWFzZS1vdXQgIWRlZmF1bHQ7XFxuXFxuLy8gQWxlcnRzXFxuJGFsZXJ0LXBhZGRpbmcteTogMXJlbSAhZGVmYXVsdDtcXG4kYWxlcnQtcGFkZGluZy14OiAxcmVtO1xcbi8vJGFsZXJ0LW1hcmdpbi1ib3R0b206ICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG4vLyRhbGVydC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGFsZXJ0LWxpbmstZm9udC13ZWlnaHQ6ICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuJGFsZXJ0LWJvcmRlci13aWR0aDogLjEyNXJlbTtcXG5cXG4vLyRhbGVydC1iZy1sZXZlbDogICAgICAgICAgICAgICAgICAgIC0xMCAhZGVmYXVsdDtcXG4vLyRhbGVydC1ib3JkZXItbGV2ZWw6ICAgICAgICAgICAgICAgIC05ICFkZWZhdWx0O1xcbi8vJGFsZXJ0LWNvbG9yLWxldmVsOiAgICAgICAgICAgICAgICAgNiAhZGVmYXVsdDtcXG5cXG4vLyBQcm9ncmVzcyBiYXJzXFxuLy8kcHJvZ3Jlc3MtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqIC43NSkgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmc6ICAgICAgICAgICAgICAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1ib3gtc2hhZG93OiAgICAgICAgICAgICAgIGluc2V0IDAgLjFyZW0gLjFyZW0gcmdiYSgkYmxhY2ssIC4xKSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1iYXItY29sb3I6ICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1iYXItYmc6ICAgICAgICAgICAgICAgICAgIHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIikgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLWFuaW1hdGlvbi10aW1pbmc6ICAgICAxcyBsaW5lYXIgaW5maW5pdGUgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLXRyYW5zaXRpb246ICAgICAgICAgICB3aWR0aCAuNnMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBMaXN0IGdyb3VwXFxuLy8kbGlzdC1ncm91cC1iZzogICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRsaXN0LWdyb3VwLWJvcmRlci13aWR0aDogICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuLy8kbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteTogJGlucHV0LXBhZGRpbmcteTtcXG4kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteDogJGlucHV0LXBhZGRpbmcteDtcXG5cXG4kbGlzdC1ncm91cC1ob3Zlci1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRsaXN0LWdyb3VwLWFjdGl2ZS1jb2xvcjogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWFjdGl2ZS1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG4vLyRsaXN0LWdyb3VwLWFjdGl2ZS1ib3JkZXItY29sb3I6ICAgICRsaXN0LWdyb3VwLWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG5cXG4kbGlzdC1ncm91cC1kaXNhYmxlZC1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kbGlzdC1ncm91cC1kaXNhYmxlZC1iZzogICAgICAgICAgICAkbGlzdC1ncm91cC1iZyAhZGVmYXVsdDtcXG5cXG4vLyRsaXN0LWdyb3VwLWFjdGlvbi1jb2xvcjogICAgICAgICAgICRncmF5LTcwMCAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3Rpb24taG92ZXItY29sb3I6ICR3aGl0ZTtcXG5cXG4kbGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWNvbG9yOiAkYm9keS1jb2xvciAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWJnOiAkZ3JheS0yMDAgIWRlZmF1bHQ7XFxuXFxuLy8gSW1hZ2UgdGh1bWJuYWlsc1xcbiR0aHVtYm5haWwtcGFkZGluZzogMDtcXG4vLyR0aHVtYm5haWwtYmc6ICAgICAgICAgICAgICAgICAgICAgICRib2R5LWJnICFkZWZhdWx0O1xcbi8vJHRodW1ibmFpbC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kdGh1bWJuYWlsLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kdGh1bWJuYWlsLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kdGh1bWJuYWlsLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuLy8gRmlndXJlc1xcbi8vJGZpZ3VyZS1jYXB0aW9uLWZvbnQtc2l6ZTogICAgICAgICAgOTAlICFkZWZhdWx0O1xcbiRmaWd1cmUtY2FwdGlvbi1jb2xvcjogJG1lZGl1bS1ncmF5O1xcblxcbi8vIEJyZWFkY3J1bWJzXFxuJGJyZWFkY3J1bWItcGFkZGluZy15OiAuMzEyNXJlbTtcXG4kYnJlYWRjcnVtYi1wYWRkaW5nLXg6IC4zMTI1cmVtO1xcbiRicmVhZGNydW1iLWl0ZW0tcGFkZGluZzogLjNyZW07XFxuXFxuJGJyZWFkY3J1bWItbWFyZ2luLWJvdHRvbTogMDtcXG5cXG4kYnJlYWRjcnVtYi1iZzogbm9uZTtcXG4kYnJlYWRjcnVtYi1kaXZpZGVyLWNvbG9yOiAkZGFyay1ncmF5O1xcbiRicmVhZGNydW1iLWFjdGl2ZS1jb2xvcjogJGV4dHJhLWRhcmstZ3JheTtcXG4kYnJlYWRjcnVtYi1kaXZpZGVyOiBcXFwiL1xcXCI7XFxuXFxuLy8gQ2Fyb3VzZWxcXG4vLyRjYXJvdXNlbC1jb250cm9sLWNvbG9yOiAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jb250cm9sLXdpZHRoOiAgICAgICAgICAgIDE1JSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jb250cm9sLW9wYWNpdHk6ICAgICAgICAgIC41ICFkZWZhdWx0O1xcblxcbi8vJGNhcm91c2VsLWluZGljYXRvci13aWR0aDogICAgICAgICAgMzBweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3ItaGVpZ2h0OiAgICAgICAgIDNweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3Itc3BhY2VyOiAgICAgICAgIDNweCAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1jYXB0aW9uLXdpZHRoOiAgICAgICAgICAgIDcwJSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jYXB0aW9uLWNvbG9yOiAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1jb250cm9sLWljb24td2lkdGg6ICAgICAgIDIwcHggIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb24tYmc6ICAgICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nI3skY2Fyb3VzZWwtY29udHJvbC1jb2xvcn0nIHZpZXdCb3g9JzAgMCA4IDgnJTNFJTNDcGF0aCBkPSdNNS4yNSAwbC00IDQgNCA0IDEuNS0xLjUtMi41LTIuNSAyLjUtMi41LTEuNS0xLjV6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJGNhcm91c2VsLWNvbnRyb2wtbmV4dC1pY29uLWJnOiAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGZpbGw9JyN7JGNhcm91c2VsLWNvbnRyb2wtY29sb3J9JyB2aWV3Qm94PScwIDAgOCA4JyUzRSUzQ3BhdGggZD0nTTIuNzUgMGwtMS41IDEuNSAyLjUgMi41LTIuNSAyLjUgMS41IDEuNSA0LTQtNC00eicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgIHRyYW5zZm9ybSAuNnMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBDbG9zZVxcbi8vJGNsb3NlLWZvbnQtc2l6ZTogICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMS41ICFkZWZhdWx0O1xcbi8vJGNsb3NlLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XFxuLy8kY2xvc2UtY29sb3I6ICAgICAgICAgICAgICAgICAkYmxhY2sgIWRlZmF1bHQ7XFxuLy8kY2xvc2UtdGV4dC1zaGFkb3c6ICAgICAgICAgICAwIDFweCAwICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyBDb2RlXFxuLy8kY29kZS1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICA4Ny41JSAhZGVmYXVsdDtcXG4kY29kZS1jb2xvcjogJGJvZHktY29sb3I7XFxuXFxuLy8ka2JkLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAgICAuMnJlbSAhZGVmYXVsdDtcXG4vLyRrYmQtcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICAgIC40cmVtICFkZWZhdWx0O1xcbi8vJGtiZC1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICAgJGNvZGUtZm9udC1zaXplICFkZWZhdWx0O1xcbiRrYmQtY29sb3I6ICR3aGl0ZTtcXG4ka2JkLWJnOiAkZXh0cmEtZGFyay1ncmF5O1xcblxcbiRwcmUtY29sb3I6ICRib2R5LWNvbG9yO1xcbi8vJHByZS1zY3JvbGxhYmxlLW1heC1oZWlnaHQ6ICAgICAgICAgMzQwcHggIWRlZmF1bHQ7XFxuXFxuLy8gUHJpbnRpbmdcXG4vLyRwcmludC1wYWdlLXNpemU6ICAgICAgICAgICAgICAgICAgIGEzICFkZWZhdWx0O1xcbi8vJHByaW50LWJvZHktbWluLXdpZHRoOiAgICAgICAgICAgICAgbWFwLWdldCgkZ3JpZC1icmVha3BvaW50cywgXFxcImxnXFxcIikgIWRlZmF1bHQ7XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLm1vZGFsLnNob3dbZGF0YS12LTRmNjc0MDI1XXtkaXNwbGF5OmJsb2NrfS5tb2RhbC1mYWRlLWVudGVyLWFjdGl2ZVtkYXRhLXYtNGY2NzQwMjVdLC5tb2RhbC1mYWRlLWxlYXZlLWFjdGl2ZVtkYXRhLXYtNGY2NzQwMjVde3RyYW5zaXRpb246b3BhY2l0eSAuNXN9Lm1vZGFsLWZhZGUtZW50ZXJbZGF0YS12LTRmNjc0MDI1XSwubW9kYWwtZmFkZS1sZWF2ZS10b1tkYXRhLXYtNGY2NzQwMjVde29wYWNpdHk6MH1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9qcy92dWUvY29tcG9uZW50cy9Nb2RhbC52dWVcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBa0tBLDZCQUNFLGFBQWMsQ0FDZixvRkFFQyxzQkFBdUIsQ0FDeEIseUVBRUMsU0FBVVwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4ubW9kYWwuc2hvdyB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuLm1vZGFsLWZhZGUtZW50ZXItYWN0aXZlLCAubW9kYWwtZmFkZS1sZWF2ZS1hY3RpdmUge1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAuNXM7XFxufVxcbi5tb2RhbC1mYWRlLWVudGVyLCAubW9kYWwtZmFkZS1sZWF2ZS10byAvKiAuZmFkZS1sZWF2ZS1hY3RpdmUgYmVsb3cgdmVyc2lvbiAyLjEuOCAqLyB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIucGFnaW5hdGlvbi1saXN0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjA7bWFyZ2luOjA7d2lkdGg6MTAwJX0ucGFnaW5hdGlvbi1pdGVte2xpc3Qtc3R5bGUtdHlwZTpub25lfS5wYWdpbmF0aW9uLWl0ZW0gYnV0dG9ue2ZvbnQtc2l6ZToxcmVtO3BhZGRpbmc6MC41cmVtO3RyYW5zaXRpb246MC4yNXMgZWFzZS1vdXQ7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzZjODY4ZTtib3JkZXI6MDtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXR9LnBhZ2luYXRpb24taXRlbSBidXR0b246ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkO29wYWNpdHk6MC41fS5wYWdpbmF0aW9uLWl0ZW0gYnV0dG9uOmhvdmVyOm5vdCg6ZGlzYWJsZWQpe2NvbG9yOiMyNWI5ZDd9LnBhZ2luYXRpb24taXRlbS5hY3RpdmUgYnV0dG9ue2NvbG9yOiMyNWI5ZDd9LnBhZ2luYXRpb24tcHJldmlvdXMsLnBhZ2luYXRpb24tbmV4dHtmb250LXNpemU6MS4yNXJlbX1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9qcy92dWUvY29tcG9uZW50cy9QYWdpbmF0aW9uLnZ1ZVwiLFwid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL3ByZXN0YWtpdC9zY3NzL192YXJpYWJsZXMuc2Nzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUEySUUsaUJBQ0UsWUFBYSxDQUNiLGtCQUFtQixDQUNuQixzQkFBdUIsQ0FDdkIsU0FBVSxDQUNWLFFBQVMsQ0FDVCxVQUFXLENBQ1osaUJBR0Msb0JBQXFCLENBRHRCLHdCQUlHLGNBQWUsQ0FDZixjQUFlLENBQ2YseUJBQTBCLENBQzFCLGNBQWUsQ0FDZixhQUFjLENBQ2QsUUFBUyxDQUNULHdCQUF5QixDQVY1QixpQ0FhSyxrQkFBbUIsQ0FDbkIsV0FBWSxDQWRqQiw2Q0FrQkssYUNwSU0sQ0RrSFgsK0JBd0JLLGFDMUlNLENEMklQLHNDQU1ILGlCQUFrQlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5AaW1wb3J0IFxcXCJ+QHNjc3MvY29uZmlnL19zZXR0aW5ncy5zY3NzXFxcIjtcXG5cXG4ucGFnaW5hdGlvbiB7XFxuICAmLWxpc3Qge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgcGFkZGluZzogMDtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG5cXG4gICYtaXRlbSB7XFxuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG5cXG4gICAgYnV0dG9uIHtcXG4gICAgICBmb250LXNpemU6IDFyZW07XFxuICAgICAgcGFkZGluZzogMC41cmVtO1xcbiAgICAgIHRyYW5zaXRpb246IDAuMjVzIGVhc2Utb3V0O1xcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgICBjb2xvcjogIzZjODY4ZTtcXG4gICAgICBib3JkZXI6IDA7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcXG5cXG4gICAgICAmOmRpc2FibGVkIHtcXG4gICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICAgICAgICBvcGFjaXR5OiAwLjU7XFxuICAgICAgfVxcblxcbiAgICAgICY6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xcbiAgICAgICAgY29sb3I6ICRwcmltYXJ5O1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAmLmFjdGl2ZSB7XFxuICAgICAgYnV0dG9uIHtcXG4gICAgICAgIGNvbG9yOiAkcHJpbWFyeTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cXG4gICYtcHJldmlvdXMsXFxuICAmLW5leHQge1xcbiAgICBmb250LXNpemU6IDEuMjVyZW07XFxuICB9XFxufVxcblwiLFwiLyogc3R5bGVsaW50LWRpc2FibGUgKi9cXG5cXG4vLyBDb2xvciBzeXN0ZW1cXG4kd2hpdGU6ICNmZmY7XFxuJGdyYXktZGlzYWJsZWQ6ICNlYWViZWM7XFxuJGdyYXktMTAwOiAjZmFmYmZjO1xcbiRncmF5LTIwMDogI2ZhZmJmYztcXG4kZ3JheS0yNTA6ICNmYWZiZmM7XFxuJGdyYXktMzAwOiAjYmJjZGQyO1xcbiRncmF5LTQwMDogI2JiY2RkMjtcXG4kZ3JheS00NTA6ICNiM2M3Y2Q7XFxuJGdyYXktNTAwOiAjNmM4NjhlO1xcbiRncmF5LTU1MDogIzcwODA5MDtcXG4kZ3JheS02MDA6ICM2Yzg2OGU7XFxuJGdyYXktNzAwOiAjMzYzYTQxO1xcbiRncmF5LTc1MDogIzM2M2E0MTtcXG4kZ3JheS04MDA6ICMzNjNhNDE7XFxuJGdyYXktOTAwOiAjMjgyYjMwO1xcbiRibGFjazogIzAwMDtcXG5cXG4vLyBQUyBWYXJzXFxuJGV4dHJhLWxpZ2h0LWdyYXk6ICRncmF5LTEwMDtcXG4kbGlnaHQtZ3JheTogJGdyYXktMzAwO1xcbiRtZWRpdW0tZ3JheTogJGdyYXktNTAwO1xcbiRkYXJrLWdyYXk6ICRncmF5LTcwMDtcXG4kZXh0cmEtZGFyay1ncmF5OiAkZ3JheS05MDA7XFxuJGdyYXktbGlnaHQ6ICRsaWdodC1ncmF5O1xcbiRncmF5LW1lZGl1bTogJG1lZGl1bS1ncmF5O1xcbiRncmF5LWRhcms6ICRkYXJrLWdyYXk7XFxuJGdyYXktc29mdDogJGdyYXktMjAwO1xcbiRiYWNrZ3JvdW5kLWNvbG9yOiAjZWZmMWYyO1xcbiRwcmltYXJ5LWxpZ2h0ZW46ICNmNGZjZmQ7XFxuJGxvY2FsLWZvbnQ6IGZhbHNlICFkZWZhdWx0O1xcblxcbiRibHVlOiAjMjViOWQ3O1xcbiRpbmRpZ286ICM2NjEwZjIgIWRlZmF1bHQ7XFxuJHB1cnBsZTogIzZmNDJjMSAhZGVmYXVsdDtcXG4kcGluazogI2U4M2U4YyAhZGVmYXVsdDtcXG4kcmVkOiAjZjU0YzNlO1xcbiRvcmFuZ2U6ICNmZDdlMTQgIWRlZmF1bHQ7XFxuJHllbGxvdzogI2ZhYjAwMDtcXG4kZ3JlZW46ICM3MGI1ODA7XFxuJG9yYW5nZTogI2ZkN2UxNCAhZGVmYXVsdDtcXG4kdGVhbDogIzIwYzk5NyAhZGVmYXVsdDtcXG4kY3lhbjogJGJsdWU7XFxuJGxpZ2h0LWJsdWU6ICNmNGZjZmQ7XFxuXFxuLy8gbWFpbiBidXR0b24gYmFja2dyb3VuZCBjb2xvcnNcXG4kcHJpbWFyeS1ob3ZlcjogIzdjZDVlNztcXG4kcHJpbWFyeS1hY3RpdmU6ICMyMWE2YzE7XFxuJHByaW1hcnktZGlzYWJsZWQ6ICNkM2YxZjc7XFxuJHNlY29uZGFyeS1ob3ZlcjogI2I3Y2VkMztcXG4kc2Vjb25kYXJ5LWFjdGl2ZTogIzg4OWRhMjtcXG4kZGFuZ2VyLWhvdmVyOiAjZmRlMWUxO1xcbiRub3RpY2U6ICNkZmY1Zjk7XFxuXFxuJHByaW1hcnk6ICRibHVlICFkZWZhdWx0O1xcbiRzZWNvbmRhcnk6ICRtZWRpdW0tZ3JheTtcXG4kc3VjY2VzczogJGdyZWVuICFkZWZhdWx0O1xcbiRpbmZvOiAkY3lhbiAhZGVmYXVsdDtcXG4kd2FybmluZzogJHllbGxvdyAhZGVmYXVsdDtcXG4kZGFuZ2VyOiAkcmVkICFkZWZhdWx0O1xcbiRsaWdodDogJGdyYXktMTAwICFkZWZhdWx0O1xcbiRkYXJrOiAkZ3JheS04MDAgIWRlZmF1bHQ7XFxuXFxuJHRvYXN0LXN1Y2Nlc3M6ICM1M2Q1NzIgIWRlZmF1bHQ7XFxuJHRvYXN0LXdhcm5pbmc6ICNmYWIwMDAgIWRlZmF1bHQ7XFxuXFxuJGJyYW5kLXByaW1hcnk6ICRwcmltYXJ5ICFkZWZhdWx0O1xcbiRicmFuZC1zZWNvbmRhcnk6ICRzZWNvbmRhcnkgIWRlZmF1bHQ7XFxuJGJyYW5kLWluZm86ICM1YmMwZGUgIWRlZmF1bHQ7XFxuJGJyYW5kLXdhcm5pbmc6ICNmMGFkNGUgIWRlZmF1bHQ7XFxuJGJyYW5kLXN1Y2Nlc3M6ICRzdWNjZXNzICFkZWZhdWx0O1xcbiRicmFuZC1kYW5nZXI6ICRkYW5nZXIgIWRlZmF1bHQ7XFxuXFxuJGJ0bi1wcmltYXJ5LWJnOiAkcHJpbWFyeS1ob3ZlcjtcXG4kYnRuLXNlY29uZGFyeS1ib3JkZXI6ICMwMDA7XFxuJGJ0bi1pbmZvLWJnOiAkYnJhbmQtaW5mbyAhZGVmYXVsdDtcXG4kYnRuLXN1Y2Nlc3MtYmc6ICRicmFuZC1zdWNjZXNzICFkZWZhdWx0O1xcbiRidG4td2FybmluZy1iZzogJGJyYW5kLXdhcm5pbmcgIWRlZmF1bHQ7XFxuJGJ0bi1kYW5nZXItYmc6ICRicmFuZC1kYW5nZXIgIWRlZmF1bHQ7XFxuXFxuJHRoZW1lLWNvbG9yczogKFxcbiAgXFxcInByaW1hcnlcXFwiOiAkcHJpbWFyeSxcXG4gIFxcXCJzZWNvbmRhcnlcXFwiOiAkc2Vjb25kYXJ5LFxcbiAgXFxcInN1Y2Nlc3NcXFwiOiAkc3VjY2VzcyxcXG4gIFxcXCJpbmZvXFxcIjogJGluZm8sXFxuICBcXFwid2FybmluZ1xcXCI6ICR3YXJuaW5nLFxcbiAgXFxcImRhbmdlclxcXCI6ICRkYW5nZXIsXFxuICBcXFwibGlnaHRcXFwiOiAkbGlnaHQsXFxuICBcXFwiZGFya1xcXCI6ICRkYXJrXFxuKTtcXG5cXG4kYWxlcnRzLWJhY2tncm91bmQtY29sb3JzOiAoXFxuICBcXFwic3VjY2Vzc1xcXCI6ICNjYmYyZDQsXFxuICBcXFwiaW5mb1xcXCI6ICNiZWVhZjMsXFxuICBcXFwid2FybmluZ1xcXCI6ICNmZmZiZDMsXFxuICBcXFwiZGFuZ2VyXFxcIjogI2ZiYzZjM1xcbik7XFxuXFxuJGFsZXJ0cy1zZWNvbmQtY29sb3JzOiAoXFxuICBcXFwic3VjY2Vzc1xcXCI6ICM1M2Q1NzIsXFxuICBcXFwiaW5mb1xcXCI6ICMyNWI5ZDcsXFxuICBcXFwid2FybmluZ1xcXCI6ICNmYWIwMDAsXFxuICBcXFwiZGFuZ2VyXFxcIjogI2Y0NDMzNlxcbik7XFxuXFxuJHRoZW1lLWFsZXJ0cy1pY29uczogKFxcbiAgc3VjY2VzczogXFxcIlxcXFxFNUNBXFxcIixcXG4gIGluZm86IFxcXCJcXFxcZTg4ZVxcXCIsXFxuICB3YXJuaW5nOiBcXFwiXFxcXEUwMDJcXFwiLFxcbiAgZGFuZ2VyOiBcXFwiXFxcXGUwMDBcXFwiXFxuKTtcXG5cXG4kdGhlbWUtY29sb3JzLWljb25zOiAoXFxuICBcXFwicHJpbWFyeVxcXCI6ICRwcmltYXJ5LFxcbiAgXFxcInNlY29uZGFyeVxcXCI6ICRzZWNvbmRhcnksXFxuICBcXFwic3VjY2Vzc1xcXCI6ICRzdWNjZXNzLFxcbiAgXFxcImluZm9cXFwiOiAkaW5mbyxcXG4gIFxcXCJ3YXJuaW5nXFxcIjogI2ZhYjAwMCxcXG4gIFxcXCJkYW5nZXJcXFwiOiAkZGFuZ2VyLFxcbiAgXFxcImxpZ2h0XFxcIjogJGxpZ2h0XFxuKTtcXG5cXG4kdGhlbWUtY29sb3JzLWhvdmVyOiAoXFxuICBwcmltYXJ5OiAkcHJpbWFyeS1ob3ZlcixcXG4gIHNlY29uZGFyeTogJHNlY29uZGFyeS1ob3ZlcixcXG4gIHN1Y2Nlc3M6ICM5YmNiYTYsXFxuICBpbmZvOiAkcHJpbWFyeS1ob3ZlcixcXG4gIHdhcm5pbmc6ICNlNmIwNDUsXFxuICBkYW5nZXI6ICNlNzZkN2EsXFxuICBsaWdodDogJGdyYXktODAwLFxcbiAgZGFyazogJGdyYXktMTAwLFxcbiAgZGVmYXVsdDogJGxpZ2h0LWJsdWVcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtYWN0aXZlOiAoXFxuICBwcmltYXJ5OiAkcHJpbWFyeS1hY3RpdmUsXFxuICBzZWNvbmRhcnk6ICRzZWNvbmRhcnktYWN0aXZlLFxcbiAgc3VjY2VzczogIzVhOTE2NixcXG4gIGluZm86IGRhcmtlbihtYXAtZ2V0KCR0aGVtZS1jb2xvcnMsIFxcXCJpbmZvXFxcIiksIDEwJSksXFxuICB3YXJuaW5nOiBkYXJrZW4obWFwLWdldCgkdGhlbWUtY29sb3JzLCBcXFwid2FybmluZ1xcXCIpLCAxMCUpLFxcbiAgZGFuZ2VyOiAjYzMzNjJiLFxcbiAgbGlnaHQ6IGRhcmtlbihtYXAtZ2V0KCR0aGVtZS1jb2xvcnMsIFxcXCJsaWdodFxcXCIpLCAxMCUpLFxcbiAgZGFyazogZGFya2VuKG1hcC1nZXQoJHRoZW1lLWNvbG9ycywgXFxcImRhcmtcXFwiKSwgMTAlKSxcXG4gIGRlZmF1bHQ6ICRwcmltYXJ5XFxuKTtcXG5cXG4kdGhlbWUtY29sb3JzLWJhY2tncm91bmQ6IChcXG4gIHByaW1hcnk6ICNkZmY1ZjksXFxuICBzZWNvbmRhcnk6ICRibGFjayxcXG4gIHN1Y2Nlc3M6ICNkNmYwZDgsXFxuICBpbmZvOiAjZGZmNWY5LFxcbiAgd2FybmluZzogI2ZmZmJkMyxcXG4gIGRhbmdlcjogI2ZkZTFlMSxcXG4gIGxpZ2h0OiAkZ3JheS0yMDAsXFxuICBkYXJrOiAkZ3JheS03MDBcXG4pO1xcblxcbiR0aGVtZS1jb2xvcnMtc2hhZG93OiAoXFxuICBwcmltYXJ5OiB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpLFxcbiAgc2Vjb25kYXJ5OiAkYmxhY2ssXFxuICBzdWNjZXNzOiB0aGVtZS1jb2xvcihcXFwic3VjY2Vzc1xcXCIpLFxcbiAgaW5mbzogdGhlbWUtY29sb3IoXFxcImluZm9cXFwiKSxcXG4gIHdhcm5pbmc6IHRoZW1lLWNvbG9yKFxcXCJ3YXJuaW5nXFxcIiksXFxuICBkYW5nZXI6IHRoZW1lLWNvbG9yKFxcXCJkYW5nZXJcXFwiKSxcXG4gIGxpZ2h0OiB0aGVtZS1jb2xvcihcXFwibGlnaHRcXFwiKSxcXG4gIGRhcms6IHRoZW1lLWNvbG9yKFxcXCJkYXJrXFxcIilcXG4pO1xcblxcbi8vIE9wdGlvbnNcXG4kZW5hYmxlLWNhcmV0OiB0cnVlICFkZWZhdWx0O1xcbiRlbmFibGUtcm91bmRlZDogdHJ1ZTtcXG4kZW5hYmxlLXNoYWRvd3M6IHRydWU7XFxuJGVuYWJsZS1ncmFkaWVudHM6IGZhbHNlICFkZWZhdWx0O1xcbiRlbmFibGUtdHJhbnNpdGlvbnM6IHRydWUgIWRlZmF1bHQ7XFxuJGVuYWJsZS1ncmlkLWNsYXNzZXM6IHRydWUgIWRlZmF1bHQ7XFxuJGVuYWJsZS1wcmludC1zdHlsZXM6IHRydWUgIWRlZmF1bHQ7XFxuXFxuLy8gU3BhY2luZ1xcbiRzcGFjZXI6IDEuODc1cmVtO1xcblxcbiRzcGFjZXJzOiAoXFxuICAwOiAwLFxcbiAgMTogKFxcbiAgICAkc3BhY2VyIC8gNlxcbiAgKSxcXG4gIDI6IChcXG4gICAgJHNwYWNlciAvIDNcXG4gICksXFxuICAzOiAoXFxuICAgICRzcGFjZXIgLyAyXFxuICApLFxcbiAgNDogJHNwYWNlcixcXG4gIDU6IChcXG4gICAgJHNwYWNlciAqIDJcXG4gIClcXG4pO1xcblxcbi8vIEJvZHlcXG4kYm9keS1iZzogJHdoaXRlICFkZWZhdWx0O1xcbiRib2R5LWNvbG9yOiAkZGFyay1ncmF5O1xcblxcbi8vIExpbmtzXFxuJGxpbmstaG92ZXItY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIikgIWRlZmF1bHQ7XFxuJGxpbmstaG92ZXItZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcblxcbi8vIFBhcmFncmFwaHNcXG4kcGFyYWdyYXBoLW1hcmdpbi1ib3R0b206IDFyZW07XFxuXFxuLy8gR3JpZCBicmVha3BvaW50c1xcbiRncmlkLWJyZWFrcG9pbnRzOiAoXFxuICB4czogMCxcXG4gIHNtOiA1NDRweCxcXG4gIG1kOiA3NjhweCxcXG4gIGxnOiAxMDI0cHgsXFxuICB4bDogMTMwMHB4LFxcbiAgeHhsOiAxNjAwcHggLy8gUFMgY3VzdG9tXFxuKTtcXG5AaW5jbHVkZSBfYXNzZXJ0LWFzY2VuZGluZygkZ3JpZC1icmVha3BvaW50cywgXFxcIiRncmlkLWJyZWFrcG9pbnRzXFxcIik7XFxuQGluY2x1ZGUgX2Fzc2VydC1zdGFydHMtYXQtemVybygkZ3JpZC1icmVha3BvaW50cyk7XFxuXFxuLy8gR3JpZCBjb250YWluZXJzXFxuJGNvbnRhaW5lci1tYXgtd2lkdGhzOiAoXFxuICBzbTogNTc2cHgsXFxuICBtZDogNzIwcHgsXFxuICBsZzogOTcycHgsXFxuICB4bDogMTI0MHB4XFxuKTtcXG5AaW5jbHVkZSBfYXNzZXJ0LWFzY2VuZGluZygkY29udGFpbmVyLW1heC13aWR0aHMsIFxcXCIkY29udGFpbmVyLW1heC13aWR0aHNcXFwiKTtcXG5cXG4vLyBHcmlkIGNvbHVtbnNcXG4vLyRncmlkLWNvbHVtbnM6ICAgICAgICAgICAgICAgIDEyICFkZWZhdWx0O1xcbiRncmlkLWd1dHRlci13aWR0aDogMS44NzVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8gQ29tcG9uZW50c1xcbi8vJGxpbmUtaGVpZ2h0LWxnOiAgICAgICAgICAgICAgMS41ICFkZWZhdWx0O1xcbi8vJGxpbmUtaGVpZ2h0LXNtOiAgICAgICAgICAgICAgMS41ICFkZWZhdWx0O1xcblxcbi8vJGJvcmRlci13aWR0aDogICAgICAgICAgICAgICAgMXB4ICFkZWZhdWx0O1xcbi8vJGJvcmRlci1jb2xvcjogICAgICAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xcblxcbiRib3JkZXItcmFkaXVzOiA0cHggIWRlZmF1bHQ7XFxuLy8kYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICAgICAuM3JlbSAhZGVmYXVsdDtcXG4vLyRib3JkZXItcmFkaXVzLXNtOiAgICAgICAgICAgIC4ycmVtICFkZWZhdWx0O1xcblxcbi8vJGNvbXBvbmVudC1hY3RpdmUtY29sb3I6ICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbi8vJGNvbXBvbmVudC1hY3RpdmUtYmc6ICAgICAgICAgdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSAhZGVmYXVsdDtcXG5cXG4kY2FyZXQtd2lkdGg6IC4yNXJlbTtcXG5cXG4vLyR0cmFuc2l0aW9uLWJhc2U6ICAgICAgICAgICAgIGFsbCAuMnMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XFxuLy8kdHJhbnNpdGlvbi1mYWRlOiAgICAgICAgICAgICBvcGFjaXR5IC4xNXMgbGluZWFyICFkZWZhdWx0O1xcbi8vJHRyYW5zaXRpb24tY29sbGFwc2U6ICAgICAgICAgaGVpZ2h0IC4zNXMgZWFzZSAhZGVmYXVsdDtcXG5cXG4vLyBGb250c1xcbiRmb250LWZhbWlseS1zYW5zLXNlcmlmOiBcXFwiT3BlbiBTYW5zXFxcIiwgaGVsdmV0aWNhLCBhcmlhbCwgc2Fucy1zZXJpZjtcXG4vLyRmb250LWZhbWlseS1tb25vc3BhY2U6ICAgICAgIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXFxcIkxpYmVyYXRpb24gTW9ub1xcXCIsIFxcXCJDb3VyaWVyIE5ld1xcXCIsIG1vbm9zcGFjZSAhZGVmYXVsdDtcXG4vLyRmb250LWZhbWlseS1iYXNlOiAgICAgICAgICAgICRmb250LWZhbWlseS1zYW5zLXNlcmlmICFkZWZhdWx0O1xcblxcbiRmb250LXNpemUtYmFzZTogLjg3NXJlbTtcXG4kZm9udC1zaXplLWxnOiAxcmVtO1xcbiRmb250LXNpemUtc206IC43NXJlbTtcXG4kZm9udC1zaXplLXhzOiAuNjI1cmVtOyAvLyBQUyBjdXN0b21cXG5cXG4vLyRmb250LXdlaWdodC1saWdodDogICAgICAgICAgIDMwMDtcXG4vLyRmb250LXdlaWdodC1ub3JtYWw6ICAgICAgICAgIDQwMDtcXG4kZm9udC13ZWlnaHQtc2VtaWJvbGQ6IDYwMDtcXG4kZm9udC13ZWlnaHQtYm9sZDogNzAwO1xcblxcbiRoMS1mb250LXNpemU6IDEuNXJlbTtcXG4kaDItZm9udC1zaXplOiAxLjI1cmVtO1xcbiRoMy1mb250LXNpemU6IDFyZW07XFxuJGg0LWZvbnQtc2l6ZTogLjg3NXJlbTtcXG4kaDUtZm9udC1zaXplOiAuNzVyZW07XFxuJGg2LWZvbnQtc2l6ZTogLjYyNXJlbTtcXG5cXG4vLyRoZWFkaW5ncy1tYXJnaW4tYm90dG9tOiAgICAgICgkc3BhY2VyIC8gMikgIWRlZmF1bHQ7XFxuJGhlYWRpbmdzLWZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktc2Fucy1zZXJpZjtcXG4kaGVhZGluZ3MtZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1ib2xkO1xcbiRoZWFkaW5ncy1jb2xvcjogJGJvZHktY29sb3I7XFxuXFxuLy8kZGlzcGxheTEtc2l6ZTogICAgICAgICAgICAgICA2cmVtICFkZWZhdWx0O1xcbi8vJGRpc3BsYXkyLXNpemU6ICAgICAgICAgICAgICAgNS41cmVtICFkZWZhdWx0O1xcbi8vJGRpc3BsYXkzLXNpemU6ICAgICAgICAgICAgICAgNC41cmVtICFkZWZhdWx0O1xcbi8vJGRpc3BsYXk0LXNpemU6ICAgICAgICAgICAgICAgMy41cmVtICFkZWZhdWx0O1xcblxcbi8vJGRpc3BsYXkxLXdlaWdodDogICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbi8vJGRpc3BsYXkyLXdlaWdodDogICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbi8vJGRpc3BsYXkzLXdlaWdodDogICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbi8vJGRpc3BsYXk0LXdlaWdodDogICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcbi8vJGRpc3BsYXktbGluZS1oZWlnaHQ6ICAgICAgICAgJGhlYWRpbmdzLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcblxcbi8vJGxlYWQtZm9udC1zaXplOiAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqIDEuMjUpICFkZWZhdWx0O1xcbi8vJGxlYWQtZm9udC13ZWlnaHQ6ICAgICAgICAgICAgMzAwICFkZWZhdWx0O1xcblxcbi8vJHNtYWxsLWZvbnQtc2l6ZTogICAgICAgICAgICAgODAlICFkZWZhdWx0O1xcblxcbiR0ZXh0LW11dGVkOiAkbWVkaXVtLWdyYXk7XFxuXFxuLy8kYmxvY2txdW90ZS1zbWFsbC1jb2xvcjogICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuLy8kYmxvY2txdW90ZS1mb250LXNpemU6ICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogMS4yNSkgIWRlZmF1bHQ7XFxuXFxuJGhyLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kaHItYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcblxcbi8vJG1hcmstcGFkZGluZzogICAgICAgICAgICAgICAgLjJlbSAhZGVmYXVsdDtcXG5cXG4vLyRkdC1mb250LXdlaWdodDogICAgICAgICAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xcblxcbi8vJGtiZC1ib3gtc2hhZG93OiAgICAgICAgICAgICAgaW5zZXQgMCAtLjFyZW0gMCByZ2JhKCRibGFjaywgLjI1KSAhZGVmYXVsdDtcXG4vLyRuZXN0ZWQta2JkLWZvbnQtd2VpZ2h0OiAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xcblxcbi8vJGxpc3QtaW5saW5lLXBhZGRpbmc6ICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kbWFyay1iZzogICAgICAgICAgICAgICAgICAgICAjZmNmOGUzICFkZWZhdWx0O1xcblxcbi8vJGhyLW1hcmdpbi15OiAgICAgICAgICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcXG5cXG4vLyBUYWJsZXNcXG4kdGFibGUtY2VsbC1wYWRkaW5nOiAuNHJlbTtcXG4kdGFibGUtY2VsbC1wYWRkaW5nLXNtOiAuMjVyZW07XFxuXFxuLy8kdGFibGUtYmc6ICAgICAgICAgICAgICAgICAgICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcXG4kdGFibGUtYWNjZW50LWJnOiAkYmFja2dyb3VuZC1jb2xvcjtcXG4kdGFibGUtaG92ZXItYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuJHRhYmxlLWFjdGl2ZS1iZzogdGhlbWUtY29sb3ItaG92ZXIoXFxcInByaW1hcnlcXFwiKTtcXG5cXG4vLyR0YWJsZS1ib3JkZXItd2lkdGg6ICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuLy8kdGFibGUtYm9yZGVyLWNvbG9yOiAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XFxuXFxuJHRhYmxlLWhlYWQtYmc6ICRiYWNrZ3JvdW5kLWNvbG9yO1xcbiR0YWJsZS1oZWFkLWNvbG9yOiAkYm9keS1jb2xvcjtcXG5cXG4kdGFibGUtZGFyay1iZzogJGJvZHktY29sb3I7XFxuJHRhYmxlLWRhcmstYWNjZW50LWJnOiAkZXh0cmEtZGFyay1ncmF5O1xcbiR0YWJsZS1kYXJrLWhvdmVyLWJnOiB0aGVtZS1jb2xvci1ob3ZlcihcXFwicHJpbWFyeVxcXCIpO1xcbiR0YWJsZS1kYXJrLWJvcmRlci1jb2xvcjogJG1lZGl1bS1ncmF5O1xcbi8vJHRhYmxlLWRhcmstY29sb3I6ICAgICAgICAgICAgJGJvZHktYmcgIWRlZmF1bHQ7XFxuXFxuLy8gQnV0dG9uc1xcbiRpbnB1dC1idG4tcGFkZGluZy15OiAuMzc1cmVtO1xcbiRpbnB1dC1idG4tcGFkZGluZy14OiAuODM4cmVtO1xcbi8vJGlucHV0LWJ0bi1saW5lLWhlaWdodDogICAgICAgJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtYnRuLWZvY3VzLXdpZHRoOiAgICAgICAuMnJlbSAhZGVmYXVsdDtcXG4vLyRpbnB1dC1idG4tZm9jdXMtY29sb3I6ICAgICAgIHJnYmEoJGNvbXBvbmVudC1hY3RpdmUtYmcsIC4yNSkgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3c6ICAwIDAgMCAkaW5wdXQtYnRuLWZvY3VzLXdpZHRoICRpbnB1dC1idG4tZm9jdXMtY29sb3IgIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWJ0bi1wYWRkaW5nLXktc206IC4zMTNyZW07XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXgtc206IC42MjVyZW07XFxuLy8kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LXNtOiAgICAkbGluZS1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuJGlucHV0LWJ0bi1wYWRkaW5nLXktbGc6IC40MzhyZW07XFxuJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGc6IC44MzhyZW07XFxuLy8kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnOiAgICAkbGluZS1oZWlnaHQtbGcgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtYnRuLWJvcmRlci13aWR0aDogICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcblxcbi8vIEJ1dHRvbnNcXG4kYnRuLXBhZGRpbmcteTogLjVyZW0gIWRlZmF1bHQ7XFxuJGJ0bi1wYWRkaW5nLXg6IDFyZW0gIWRlZmF1bHQ7XFxuLy8kYnRuLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcblxcbi8vJGJ0bi1wYWRkaW5nLXktc206ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktc20gIWRlZmF1bHQ7XFxuLy8kYnRuLXBhZGRpbmcteC1zbTogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1zbSAhZGVmYXVsdDtcXG4vLyRidG4tbGluZS1oZWlnaHQtc206ICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuLy8kYnRuLXBhZGRpbmcteS1sZzogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1sZyAhZGVmYXVsdDtcXG4vLyRidG4tcGFkZGluZy14LWxnOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LWxnICFkZWZhdWx0O1xcbi8vJGJ0bi1saW5lLWhlaWdodC1sZzogICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4vLyRidG4tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICRpbnB1dC1idG4tYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcblxcbiRidG4tZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1zZW1pYm9sZDtcXG4kYnRuLWJveC1zaGFkb3c6IG5vbmU7XFxuLy8kYnRuLWZvY3VzLXdpZHRoOiAgICAgICAgICAgICAkaW5wdXQtYnRuLWZvY3VzLXdpZHRoICFkZWZhdWx0O1xcbiRidG4tZm9jdXMtYm94LXNoYWRvdzogbm9uZTtcXG4vLyRidG4tZGlzYWJsZWQtb3BhY2l0eTogICAgICAgIC42NSAhZGVmYXVsdDtcXG4kYnRuLWFjdGl2ZS1ib3gtc2hhZG93OiBub25lO1xcblxcbi8vJGJ0bi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcblxcbi8vJGJ0bi1ibG9jay1zcGFjaW5nLXk6ICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuXFxuJGJ0bi1ib3JkZXItcmFkaXVzOiA0cHg7XFxuLy8kYnRuLWJvcmRlci1yYWRpdXMtbGc6ICAgICAgICAkYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcXG4vLyRidG4tYm9yZGVyLXJhZGl1cy1zbTogICAgICAgICRib3JkZXItcmFkaXVzLXNtICFkZWZhdWx0O1xcblxcbi8vJGJ0bi10cmFuc2l0aW9uOiAgICAgICAgICAgICAgY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYmFja2dyb3VuZC1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xcblxcbi8vIEZvcm1zXFxuJGlucHV0LXBhZGRpbmcteTogLjM3NXJlbTtcXG4kaW5wdXQtcGFkZGluZy14OiAuNDM3NXJlbTtcXG4vLyRpbnB1dC1saW5lLWhlaWdodDogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xcblxcbi8vJGlucHV0LXBhZGRpbmcteS1zbTogICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LXNtICFkZWZhdWx0O1xcbi8vJGlucHV0LXBhZGRpbmcteC1zbTogICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy14LXNtICFkZWZhdWx0O1xcbi8vJGlucHV0LWxpbmUtaGVpZ2h0LXNtOiAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20gIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtcGFkZGluZy15LWxnOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktbGcgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtcGFkZGluZy14LWxnOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtbGcgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtbGluZS1oZWlnaHQtbGc6ICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodC1sZyAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1iZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJGlucHV0LWRpc2FibGVkLWJnOiAjZWNlZWVmO1xcblxcbiRpbnB1dC1jb2xvcjogJGJvZHktY29sb3I7XFxuJGlucHV0LWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kaW5wdXQtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJGlucHV0LWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuLy8kaW5wdXQtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMtbGcgIWRlZmF1bHQ7XFxuLy8kaW5wdXQtYm9yZGVyLXJhZGl1cy1zbTogICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMtc20gIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtZm9jdXMtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJnICFkZWZhdWx0O1xcbiRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3I6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuLy8kaW5wdXQtZm9jdXMtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbi8vJGlucHV0LWZvY3VzLXdpZHRoOiAgICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tZm9jdXMtd2lkdGggIWRlZmF1bHQ7XFxuJGlucHV0LWZvY3VzLWJveC1zaGFkb3c6IG5vbmU7XFxuXFxuJGlucHV0LXBsYWNlaG9sZGVyLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuXFxuLy8kaW5wdXQtaGVpZ2h0LWJvcmRlcjogICAgICAgICAgICAgICAgICAgJGlucHV0LWJvcmRlci13aWR0aCAqIDIgIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtaGVpZ2h0LWlubmVyOiAgICAgICAgICAgICAgICAgICAgKCRmb250LXNpemUtYmFzZSAqICRpbnB1dC1idG4tbGluZS1oZWlnaHQpICsgKCRpbnB1dC1idG4tcGFkZGluZy15ICogMikgIWRlZmF1bHQ7XFxuJGlucHV0LWhlaWdodDogMi4xODhyZW07XFxuXFxuLy8kaW5wdXQtaGVpZ2h0LWlubmVyLXNtOiAgICAgICAgICAgICAgICAgKCRmb250LXNpemUtc20gKiAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LXNtKSArICgkaW5wdXQtYnRuLXBhZGRpbmcteS1zbSAqIDIpICFkZWZhdWx0O1xcbi8vJGlucHV0LWhlaWdodC1zbTogICAgICAgICAgICAgICAgICAgICAgIGNhbGMoI3skaW5wdXQtaGVpZ2h0LWlubmVyLXNtfSArICN7JGlucHV0LWhlaWdodC1ib3JkZXJ9KSAhZGVmYXVsdDtcXG5cXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXItbGc6ICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1sZyAqICRpbnB1dC1idG4tbGluZS1oZWlnaHQtbGcpICsgKCRpbnB1dC1idG4tcGFkZGluZy15LWxnICogMikgIWRlZmF1bHQ7XFxuJGlucHV0LWhlaWdodC1sZzogMi4xODhyZW07XFxuXFxuLy8kaW5wdXQtdHJhbnNpdGlvbjogICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsIGJveC1zaGFkb3cgLjE1cyBlYXNlLWluLW91dCAhZGVmYXVsdDtcXG5cXG4vLyRmb3JtLXRleHQtbWFyZ2luLXRvcDogICAgICAgICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZm9ybS1jaGVjay1pbnB1dC1ndXR0ZXI6ICAgICAgICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG4vLyRmb3JtLWNoZWNrLWlucHV0LW1hcmdpbi15OiAgICAgICAgICAgICAuM3JlbSAhZGVmYXVsdDtcXG4vLyRmb3JtLWNoZWNrLWlucHV0LW1hcmdpbi14OiAgICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kZm9ybS1jaGVjay1pbmxpbmUtbWFyZ2luLXg6ICAgICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcbi8vJGZvcm0tY2hlY2staW5saW5lLWlucHV0LW1hcmdpbi14OiAgICAgIC4zMTI1cmVtICFkZWZhdWx0O1xcblxcbi8vJGZvcm0tZ3JvdXAtbWFyZ2luLWJvdHRvbTogICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kaW5wdXQtZ3JvdXAtYWRkb24tY29sb3I6ICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xcbiRpbnB1dC1ncm91cC1hZGRvbi1iZzogJGV4dHJhLWxpZ2h0LWdyYXk7XFxuLy8kaW5wdXQtZ3JvdXAtYWRkb24tYm9yZGVyLWNvbG9yOiAgICAgICAgJGlucHV0LWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tY29udHJvbC1ndXR0ZXI6ICAgICAgICAgICAgICAgICAxLjVyZW0gIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtc3BhY2VyLXg6ICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3Itc2l6ZTogICAgICAgICAxcmVtICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1iZzogICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYmctc2l6ZTogICAgICA1MCUgNTAlICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1ib3gtc2hhZG93OiAgIGluc2V0IDAgLjI1cmVtIC4yNXJlbSByZ2JhKCRibGFjaywgLjEpICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1kaXNhYmxlZC1iZzogICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWxhYmVsLWRpc2FibGVkLWNvbG9yOiAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWNvbG9yOiAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtYmc6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1kaXNhYmxlZC1iZzogIHJnYmEodGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKSwgLjUpICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWJveC1zaGFkb3c6ICAgbm9uZSAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItZm9jdXMtYm94LXNoYWRvdzogICAgIDAgMCAwIDFweCAkYm9keS1iZywgJGlucHV0LWJ0bi1mb2N1cy1ib3gtc2hhZG93ICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1hY3RpdmUtY29sb3I6ICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWFjdGl2ZS1iZzogICAgICAgICAgICBsaWdodGVuKCRjb21wb25lbnQtYWN0aXZlLWJnLCAzNSUpICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1hY3RpdmUtYm94LXNoYWRvdzogICAgbm9uZSAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWJvcmRlci1yYWRpdXM6ICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaWNvbi1jaGVja2VkOiAgICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA4IDgnJTNFJTNDcGF0aCBmaWxsPScjeyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvcn0nIGQ9J002LjU2NC43NWwtMy41OSAzLjYxMi0xLjUzOC0xLjU1TDAgNC4yNiAyLjk3NCA3LjI1IDggMi4xOTN6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaW5kZXRlcm1pbmF0ZS1iZzogICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWNvbG9yOiAkY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pY29uLWluZGV0ZXJtaW5hdGU6ICBzdHItcmVwbGFjZSh1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDQgNCclM0UlM0NwYXRoIHN0cm9rZT0nI3skY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWNvbG9yfScgZD0nTTAgMmg0Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaW5kZXRlcm1pbmF0ZS1ib3gtc2hhZG93OiBub25lICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1yYWRpby1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1czogICAgICAgICAgNTAlICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1yYWRpby1pbmRpY2F0b3ItaWNvbi1jaGVja2VkOiAgICAgICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9Jy00IC00IDggOCclM0UlM0NjaXJjbGUgcj0nMycgZmlsbD0nI3skY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3J9Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1zZWxlY3QtcGFkZGluZy15OiAgICAgICAgICAgLjM3NXJlbSAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LXBhZGRpbmcteDogICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtaGVpZ2h0OiAgICAgICAgICAgICAgJGlucHV0LWhlaWdodCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWluZGljYXRvci1wYWRkaW5nOiAgIDFyZW0gIWRlZmF1bHQ7IC8vIEV4dHJhIHBhZGRpbmcgdG8gYWNjb3VudCBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBiYWNrZ3JvdW5kLWltYWdlIGJhc2VkIGluZGljYXRvclxcbi8vJGN1c3RvbS1zZWxlY3QtbGluZS1oZWlnaHQ6ICAgICAgICAgJGlucHV0LWJ0bi1saW5lLWhlaWdodCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tc2VsZWN0LWNvbG9yOiAgICAgICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcXG4kY3VzdG9tLXNlbGVjdC1kaXNhYmxlZC1jb2xvcjogJG1lZGl1bS1ncmF5O1xcbi8vJGN1c3RvbS1zZWxlY3QtYmc6ICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRjdXN0b20tc2VsZWN0LWRpc2FibGVkLWJnOiAkaW5wdXQtZGlzYWJsZWQtYmc7XFxuJGN1c3RvbS1zZWxlY3QtYmctc2l6ZTogOHB4IDEwcHggIWRlZmF1bHQ7IC8vIEluIHBpeGVscyBiZWNhdXNlIGltYWdlIGRpbWVuc2lvbnNcXG4kY3VzdG9tLXNlbGVjdC1pbmRpY2F0b3ItY29sb3I6ICRpbnB1dC1jb2xvcjtcXG4vLyRjdXN0b20tc2VsZWN0LWluZGljYXRvcjogICAgICAgICAgIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA1JyUzRSUzQ3BhdGggZmlsbD0nI3skY3VzdG9tLXNlbGVjdC1pbmRpY2F0b3ItY29sb3J9JyBkPSdNMiAwTDAgMmg0em0wIDVMMCAzaDR6Jy8lM0UlM0Mvc3ZnJTNFXFxcIiksIFxcXCIjXFxcIiwgXFxcIiUyM1xcXCIpICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtYm9yZGVyLXdpZHRoOiAgICAgICAgJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1ib3JkZXItY29sb3I6ICAgICAgICAkaW5wdXQtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtYm9yZGVyLXJhZGl1czogICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuXFxuJGN1c3RvbS1zZWxlY3QtZm9jdXMtYm9yZGVyLWNvbG9yOiAkaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yO1xcbiRjdXN0b20tc2VsZWN0LWZvY3VzLWJveC1zaGFkb3c6ICRpbnB1dC1mb2N1cy1ib3gtc2hhZG93O1xcblxcbi8vJGN1c3RvbS1zZWxlY3QtZm9udC1zaXplLXNtOiAgICAgICAgNzUlICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1zZWxlY3QtaGVpZ2h0LXNtOiAgICAgICAgICAgJGlucHV0LWhlaWdodC1zbSAhZGVmYXVsdDtcXG5cXG4vLyRjdXN0b20tc2VsZWN0LWZvbnQtc2l6ZS1sZzogICAgICAgIDEyNSUgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLXNlbGVjdC1oZWlnaHQtbGc6ICAgICAgICAgICAkaW5wdXQtaGVpZ2h0LWxnICFkZWZhdWx0O1xcblxcbi8vJGN1c3RvbS1maWxlLWhlaWdodDogICAgICAgICAgICAgICAgJGlucHV0LWhlaWdodCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1mb2N1cy1ib3JkZXItY29sb3I6ICAgICRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuJGN1c3RvbS1maWxlLWZvY3VzLWJveC1zaGFkb3c6ICRpbnB1dC1mb2N1cy1ib3gtc2hhZG93O1xcblxcbi8vJGN1c3RvbS1maWxlLXBhZGRpbmcteTogICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXkgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtcGFkZGluZy14OiAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1saW5lLWhlaWdodDogICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtY29sb3I6ICAgICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYmc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYmcgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYm9yZGVyLXdpZHRoOiAgICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItY29sb3I6ICAgICAgICAgICRpbnB1dC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XFxuLy8kY3VzdG9tLWZpbGUtYm9yZGVyLXJhZGl1czogICAgICAgICAkaW5wdXQtYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRjdXN0b20tZmlsZS1ib3gtc2hhZG93OiAgICAgICAgICAgICRpbnB1dC1ib3gtc2hhZG93ICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJ1dHRvbi1jb2xvcjogICAgICAgICAgJGN1c3RvbS1maWxlLWNvbG9yICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLWJ1dHRvbi1iZzogICAgICAgICAgICAgJGlucHV0LWdyb3VwLWFkZG9uLWJnICFkZWZhdWx0O1xcbi8vJGN1c3RvbS1maWxlLXRleHQ6IChcXG4vLyAgICAgICAgZW46IFxcXCJCcm93c2VcXFwiXFxuLy8pICFkZWZhdWx0O1xcblxcbiRjdXJzb3ItZGlzYWJsZWQ6IG5vdC1hbGxvd2VkOyAvLyBQUyBjdXN0b21cXG5cXG4vLyBGb3JtIHZhbGlkYXRpb25cXG4vLyRmb3JtLWZlZWRiYWNrLW1hcmdpbi10b3A6ICAgICAgICAgICRmb3JtLXRleHQtbWFyZ2luLXRvcCAhZGVmYXVsdDtcXG4vLyRmb3JtLWZlZWRiYWNrLWZvbnQtc2l6ZTogICAgICAgICAgICRzbWFsbC1mb250LXNpemUgIWRlZmF1bHQ7XFxuJGZvcm0tZmVlZGJhY2stdmFsaWQtY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJzdWNjZXNzXFxcIik7XFxuJGZvcm0tZmVlZGJhY2staW52YWxpZC1jb2xvcjogdGhlbWUtY29sb3IoXFxcImRhbmdlclxcXCIpO1xcbiRmb3JtLWZlZWRiYWNrLXdhcm5pbmctY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJ3YXJuaW5nXFxcIik7IC8vIFBTIGN1c3RvbVxcblxcbi8vIERyb3Bkb3duc1xcbi8vJGRyb3Bkb3duLW1pbi13aWR0aDogICAgICAgICAgICAgICAgMTByZW0gIWRlZmF1bHQ7XFxuJGRyb3Bkb3duLXBhZGRpbmcteTogMDtcXG4vLyRkcm9wZG93bi1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xcbi8vJGRyb3Bkb3duLXNwYWNlcjogICAgICAgICAgICAgICAgICAgLjEyNXJlbSAhZGVmYXVsdDtcXG4vLyRkcm9wZG93bi1iZzogICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4kZHJvcGRvd24tYm9yZGVyLWNvbG9yOiAkbGlnaHQtZ3JheTtcXG4vLyRkcm9wZG93bi1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbi8vJGRyb3Bkb3duLWJvcmRlci13aWR0aDogICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kZHJvcGRvd24tZGl2aWRlci1iZzogJGxpZ2h0LWdyYXk7XFxuLy8kZHJvcGRvd24tYm94LXNoYWRvdzogICAgICAgICAgICAgICAwIC41cmVtIDFyZW0gcmdiYSgkYmxhY2ssIC4xNzUpICFkZWZhdWx0O1xcblxcbiRkcm9wZG93bi1saW5rLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuJGRyb3Bkb3duLWxpbmstaG92ZXItY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIik7XFxuJGRyb3Bkb3duLWxpbmstaG92ZXItYmc6ICR3aGl0ZTtcXG5cXG4vLyRkcm9wZG93bi1saW5rLWFjdGl2ZS1jb2xvcjogICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xcbi8vJGRyb3Bkb3duLWxpbmstYWN0aXZlLWJnOiAgICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuXFxuLy8kZHJvcGRvd24tbGluay1kaXNhYmxlZC1jb2xvcjogICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XFxuXFxuJGRyb3Bkb3duLWl0ZW0tcGFkZGluZy14OiAuMzEyNXJlbTtcXG4kZHJvcGRvd24taXRlbS1wYWRkaW5nLXk6IC4zMTI1cmVtO1xcblxcbi8vJGRyb3Bkb3duLWhlYWRlci1jb2xvcjogICAgICAgICAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xcblxcbi8vIE5hdnNcXG4kbmF2LWxpbmstcGFkZGluZy15OiAuOTM3NXJlbTtcXG4kbmF2LWxpbmstcGFkZGluZy14OiAxLjI1cmVtO1xcbiRuYXYtbGluay1kaXNhYmxlZC1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuXFxuJG5hdi10YWJzLWJvcmRlci1jb2xvcjogJHdoaXRlO1xcbi8vJG5hdi10YWJzLWJvcmRlci13aWR0aDogICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRuYXYtdGFicy1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xcbiRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG4kbmF2LXRhYnMtbGluay1hY3RpdmUtY29sb3I6ICRib2R5LWNvbG9yO1xcbiRuYXYtdGFicy1saW5rLWFjdGl2ZS1iZzogJGJvZHktYmc7XFxuJG5hdi10YWJzLWxpbmstYWN0aXZlLWJvcmRlci1jb2xvcjogdGhlbWUtY29sb3IoXFxcInByaW1hcnlcXFwiKTtcXG5cXG4kbmF2LXBpbGxzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiAkbmF2LXRhYnMtbGluay1ob3Zlci1ib3JkZXItY29sb3I7XFxuJG5hdi1waWxscy1saW5rLWFjdGl2ZS1jb2xvcjogJG5hdi10YWJzLWxpbmstYWN0aXZlLWNvbG9yO1xcbiRuYXYtcGlsbHMtbGluay1hY3RpdmUtYmc6ICNmNGY5ZmI7XFxuJG5hdi1waWxscy1saW5rLWFjdGl2ZS1ib3JkZXItY29sb3I6ICRuYXYtdGFicy1saW5rLWFjdGl2ZS1ib3JkZXItY29sb3I7IC8vIFBTIGN1c3RvbVxcblxcbi8vJG5hdi1waWxscy1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4vLyRuYXYtcGlsbHMtbGluay1hY3RpdmUtYmc6ICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xcblxcbi8vIE5hdmJhclxcbi8vJG5hdmJhci1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgICAgKCRzcGFjZXIgLyAyKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICRzcGFjZXIgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2YmFyLW5hdi1saW5rLXBhZGRpbmcteDogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItYnJhbmQtZm9udC1zaXplOiAgICAgICAgICAgICRmb250LXNpemUtbGcgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2LWxpbmstaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAoJGZvbnQtc2l6ZS1iYXNlICogJGxpbmUtaGVpZ2h0LWJhc2UgKyAkbmF2LWxpbmstcGFkZGluZy15ICogMikgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWJyYW5kLWhlaWdodDogICAgICAgICAgICAgICAkbmF2YmFyLWJyYW5kLWZvbnQtc2l6ZSAqICRsaW5lLWhlaWdodC1iYXNlICFkZWZhdWx0O1xcbi8vJG5hdmJhci1icmFuZC1wYWRkaW5nLXk6ICAgICAgICAgICAgKCRuYXYtbGluay1oZWlnaHQgLSAkbmF2YmFyLWJyYW5kLWhlaWdodCkgLyAyICFkZWZhdWx0O1xcblxcbi8vJG5hdmJhci10b2dnbGVyLXBhZGRpbmcteTogICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xcbi8vJG5hdmJhci10b2dnbGVyLXBhZGRpbmcteDogICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xcbi8vJG5hdmJhci10b2dnbGVyLWZvbnQtc2l6ZTogICAgICAgICAgJGZvbnQtc2l6ZS1sZyAhZGVmYXVsdDtcXG4vLyRuYXZiYXItdG9nZ2xlci1ib3JkZXItcmFkaXVzOiAgICAgICRidG4tYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG5cXG4vLyRuYXZiYXItZGFyay1jb2xvcjogICAgICAgICAgICAgICAgIHJnYmEoJHdoaXRlLCAuNSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWRhcmstaG92ZXItY29sb3I6ICAgICAgICAgICByZ2JhKCR3aGl0ZSwgLjc1KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay1hY3RpdmUtY29sb3I6ICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay1kaXNhYmxlZC1jb2xvcjogICAgICAgIHJnYmEoJHdoaXRlLCAuMjUpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1kYXJrLXRvZ2dsZXItaWNvbi1iZzogICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB2aWV3Qm94PScwIDAgMzAgMzAnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIHN0cm9rZT0nI3skbmF2YmFyLWRhcmstY29sb3J9JyBzdHJva2Utd2lkdGg9JzInIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW1pdGVybGltaXQ9JzEwJyBkPSdNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItZGFyay10b2dnbGVyLWJvcmRlci1jb2xvcjogIHJnYmEoJHdoaXRlLCAuMSkgIWRlZmF1bHQ7XFxuXFxuLy8kbmF2YmFyLWxpZ2h0LWNvbG9yOiAgICAgICAgICAgICAgICByZ2JhKCRibGFjaywgLjUpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1saWdodC1ob3Zlci1jb2xvcjogICAgICAgICAgcmdiYSgkYmxhY2ssIC43KSAhZGVmYXVsdDtcXG4vLyRuYXZiYXItbGlnaHQtYWN0aXZlLWNvbG9yOiAgICAgICAgIHJnYmEoJGJsYWNrLCAuOSkgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LWRpc2FibGVkLWNvbG9yOiAgICAgICByZ2JhKCRibGFjaywgLjMpICFkZWZhdWx0O1xcbi8vJG5hdmJhci1saWdodC10b2dnbGVyLWljb24tYmc6ICAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB2aWV3Qm94PScwIDAgMzAgMzAnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIHN0cm9rZT0nI3skbmF2YmFyLWxpZ2h0LWNvbG9yfScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1taXRlcmxpbWl0PScxMCcgZD0nTTQgN2gyMk00IDE1aDIyTTQgMjNoMjInLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuLy8kbmF2YmFyLWxpZ2h0LXRvZ2dsZXItYm9yZGVyLWNvbG9yOiByZ2JhKCRibGFjaywgLjEpICFkZWZhdWx0O1xcblxcbi8vIFBhZ2luYXRpb25cXG4kcGFnaW5hdGlvbi1wYWRkaW5nLXk6IC42NXJlbTtcXG4kcGFnaW5hdGlvbi1wYWRkaW5nLXg6IC41cmVtO1xcbi8vJHBhZ2luYXRpb24tcGFkZGluZy15LXNtOiAgICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xcbi8vJHBhZ2luYXRpb24tcGFkZGluZy14LXNtOiAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXktbGc6ICAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XFxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAxLjVyZW0gIWRlZmF1bHQ7XFxuLy8kcGFnaW5hdGlvbi1saW5lLWhlaWdodDogICAgICAgICAgICAxLjI1ICFkZWZhdWx0O1xcblxcbiRwYWdpbmF0aW9uLWNvbG9yOiAkbWVkaXVtLWdyYXk7XFxuJHBhZ2luYXRpb24tYmc6ICR3aGl0ZTtcXG4vLyRwYWdpbmF0aW9uLWJvcmRlci13aWR0aDogICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yOiAkd2hpdGU7XFxuXFxuLy8kcGFnaW5hdGlvbi1mb2N1cy1ib3gtc2hhZG93OiAgICAgICAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XFxuXFxuJHBhZ2luYXRpb24taG92ZXItY29sb3I6ICRwYWdpbmF0aW9uLWNvbG9yO1xcbiRwYWdpbmF0aW9uLWhvdmVyLWJnOiAkcGFnaW5hdGlvbi1iZztcXG4kcGFnaW5hdGlvbi1ob3Zlci1ib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWJvcmRlci1jb2xvcjtcXG5cXG4kcGFnaW5hdGlvbi1hY3RpdmUtY29sb3I6IHRoZW1lLWNvbG9yKFxcXCJwcmltYXJ5XFxcIik7XFxuJHBhZ2luYXRpb24tYWN0aXZlLWJnOiAkcGFnaW5hdGlvbi1iZztcXG4kcGFnaW5hdGlvbi1hY3RpdmUtYm9yZGVyLWNvbG9yOiAkcGFnaW5hdGlvbi1ib3JkZXItY29sb3I7XFxuXFxuJHBhZ2luYXRpb24tZGlzYWJsZWQtY29sb3I6ICRsaWdodC1ncmF5O1xcbiRwYWdpbmF0aW9uLWRpc2FibGVkLWJnOiAkcGFnaW5hdGlvbi1iZztcXG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1ib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWJvcmRlci1jb2xvcjtcXG5cXG4vLyBKdW1ib3Ryb25cXG4kanVtYm90cm9uLXBhZGRpbmc6IDJyZW0gIWRlZmF1bHQ7XFxuJGp1bWJvdHJvbi1iZzogJGV4dHJhLWxpZ2h0LWdyYXk7XFxuXFxuLy8gQ2FyZHNcXG4kY2FyZC1zcGFjZXIteDogLjYyNXJlbSAhZGVmYXVsdDtcXG4kY2FyZC1zcGFjZXIteTogLjYyNXJlbSAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItd2lkdGg6IDFweCAhZGVmYXVsdDtcXG4kY2FyZC1ib3JkZXItcmFkaXVzOiA1cHggIWRlZmF1bHQ7XFxuJGNhcmQtYm9yZGVyLXJhZGl1cy1pbm5lcjogJGNhcmQtYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4kY2FyZC1jYXAtYmc6ICRncmF5LTIwMCAhZGVmYXVsdDtcXG4kY2FyZC1iZzogI2ZmZiAhZGVmYXVsdDtcXG4kY2FyZC1saW5rLWhvdmVyLWNvbG9yOiAjZmZmICFkZWZhdWx0O1xcbiRjYXJkLWJvcmRlci1jb2xvcjogI2RiZTZlOSAhZGVmYXVsdDtcXG4vLyRjYXJkLWlubmVyLWJvcmRlci1yYWRpdXM6ICAgICAgICAgIGNhbGMoI3skY2FyZC1ib3JkZXItcmFkaXVzfSAtICN7JGNhcmQtYm9yZGVyLXdpZHRofSkgIWRlZmF1bHQ7XFxuLy8kY2FyZC1jYXAtYmc6ICAgICAgICAgICAgICAgICAgICAgICByZ2JhKCRibGFjaywgLjAzKSAhZGVmYXVsdDtcXG4vLyRjYXJkLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJkLWltZy1vdmVybGF5LXBhZGRpbmc6ICAgICAgICAgIDEuMjVyZW0gIWRlZmF1bHQ7XFxuXFxuLy8kY2FyZC1ncm91cC1tYXJnaW46ICAgICAgICAgICAgICAgICAoJGdyaWQtZ3V0dGVyLXdpZHRoIC8gMikgIWRlZmF1bHQ7XFxuLy8kY2FyZC1kZWNrLW1hcmdpbjogICAgICAgICAgICAgICAgICAkY2FyZC1ncm91cC1tYXJnaW4gIWRlZmF1bHQ7XFxuXFxuLy8kY2FyZC1jb2x1bW5zLWNvdW50OiAgICAgICAgICAgICAgICAzICFkZWZhdWx0O1xcbi8vJGNhcmQtY29sdW1ucy1nYXA6ICAgICAgICAgICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcXG4vLyRjYXJkLWNvbHVtbnMtbWFyZ2luOiAgICAgICAgICAgICAgICRjYXJkLXNwYWNlci15ICFkZWZhdWx0O1xcblxcbi8vIFRvb2x0aXBzXFxuLy8kdG9vbHRpcC1mb250LXNpemU6ICAgICAgICAgICAkZm9udC1zaXplLXNtICFkZWZhdWx0O1xcbi8vJHRvb2x0aXAtbWF4LXdpZHRoOiAgICAgICAgICAgMjAwcHggIWRlZmF1bHQ7XFxuLy8kdG9vbHRpcC1jb2xvcjogICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJHRvb2x0aXAtYmc6ICRtZWRpdW0tZ3JheTtcXG4vLyR0b29sdGlwLWJvcmRlci1yYWRpdXM6ICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLW9wYWNpdHk6ICAgICAgICAgICAgIC45ICFkZWZhdWx0O1xcbiR0b29sdGlwLXBhZGRpbmcteTogLjYyNXJlbTtcXG4kdG9vbHRpcC1wYWRkaW5nLXg6IDEuMjVyZW07XFxuLy8kdG9vbHRpcC1tYXJnaW46ICAgICAgICAgICAgICAwICFkZWZhdWx0O1xcblxcbi8vJHRvb2x0aXAtYXJyb3ctd2lkdGg6ICAgICAgICAgLjhyZW0gIWRlZmF1bHQ7XFxuLy8kdG9vbHRpcC1hcnJvdy1oZWlnaHQ6ICAgICAgICAuNHJlbSAhZGVmYXVsdDtcXG4vLyR0b29sdGlwLWFycm93LWNvbG9yOiAgICAgICAgICR0b29sdGlwLWJnICFkZWZhdWx0O1xcblxcbi8vIFBvcG92ZXJzXFxuLy8kcG9wb3Zlci1mb250LXNpemU6ICAgICAgICAgICAgICAgICAkZm9udC1zaXplLXNtICFkZWZhdWx0O1xcbi8vJHBvcG92ZXItYmc6ICAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbi8vJHBvcG92ZXItbWF4LXdpZHRoOiAgICAgICAgICAgICAgICAgMjc2cHggIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRwb3BvdmVyLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kcG9wb3Zlci1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcXG4kcG9wb3Zlci1ib3gtc2hhZG93OiBub25lO1xcblxcbiRwb3BvdmVyLWhlYWRlci1iZzogJGV4dHJhLWxpZ2h0LWdyYXk7XFxuLy8kcG9wb3Zlci1oZWFkZXItY29sb3I6ICAgICAgICAgICAgICAkaGVhZGluZ3MtY29sb3IgIWRlZmF1bHQ7XFxuJHBvcG92ZXItaGVhZGVyLXBhZGRpbmcteTogLjYyNXJlbTtcXG4kcG9wb3Zlci1oZWFkZXItcGFkZGluZy14OiAxLjI1cmVtO1xcblxcbi8vJHBvcG92ZXItYm9keS1jb2xvcjogICAgICAgICAgICAgICAgJGJvZHktY29sb3IgIWRlZmF1bHQ7XFxuJHBvcG92ZXItYm9keS1wYWRkaW5nLXk6IC42MjVyZW07XFxuJHBvcG92ZXItYm9keS1wYWRkaW5nLXg6IDEuMjVyZW07XFxuXFxuLy8kcG9wb3Zlci1hcnJvdy13aWR0aDogICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xcbi8vJHBvcG92ZXItYXJyb3ctaGVpZ2h0OiAgICAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuLy8kcG9wb3Zlci1hcnJvdy1jb2xvcjogICAgICAgICAgICAgICAkcG9wb3Zlci1iZyAhZGVmYXVsdDtcXG5cXG4vLyRwb3BvdmVyLWFycm93LW91dGVyLWNvbG9yOiAgICAgICAgIGZhZGUtaW4oJHBvcG92ZXItYm9yZGVyLWNvbG9yLCAuMDUpICFkZWZhdWx0O1xcblxcbi8vIEJhZGdlc1xcbiRiYWRnZS1mb250LXNpemU6IC42MjVyZW0gIWRlZmF1bHQ7XFxuJGJhZGdlLWZvbnQtd2VpZ2h0OiA1MDAgIWRlZmF1bHQ7XFxuJGJhZGdlLXBhZGRpbmcteTogLjI1cmVtO1xcbiRiYWRnZS1wYWRkaW5nLXg6IC41cmVtO1xcbi8vJGJhZGdlLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuXFxuLy8kYmFkZ2UtcGlsbC1wYWRkaW5nLXg6ICAgICAgICAgICAgICAuNmVtICFkZWZhdWx0O1xcbi8vJGJhZGdlLXBpbGwtYm9yZGVyLXJhZGl1czogICAgICAgICAgMTByZW0gIWRlZmF1bHQ7XFxuXFxuLy8gTW9kYWxzXFxuJG1vZGFsLWlubmVyLXBhZGRpbmc6IDEuODc1cmVtO1xcblxcbi8vJG1vZGFsLWRpYWxvZy1tYXJnaW46ICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XFxuLy8kbW9kYWwtZGlhbG9nLW1hcmdpbi15LXNtLXVwOiAxLjc1cmVtICFkZWZhdWx0O1xcblxcbi8vJG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XFxuXFxuLy8kbW9kYWwtY29udGVudC1iZzogICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuJG1vZGFsLWNvbnRlbnQtYm9yZGVyLWNvbG9yOiBub25lO1xcbi8vJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoOiAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4kbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXhzOiAwIDhweCAxNnB4IDAgcmdiYSgwLCAwLCAwLCAuMSk7XFxuJG1vZGFsLWNvbnRlbnQtYm94LXNoYWRvdy1zbS11cDogMCA4cHggMTZweCAwIHJnYmEoMCwgMCwgMCwgLjEpO1xcblxcbi8vJG1vZGFsLWJhY2tkcm9wLWJnOiAgICAgICAgICAgJGJsYWNrICFkZWZhdWx0O1xcbi8vJG1vZGFsLWJhY2tkcm9wLW9wYWNpdHk6ICAgICAgLjUgIWRlZmF1bHQ7XFxuJG1vZGFsLWhlYWRlci1ib3JkZXItY29sb3I6IG5vbmU7XFxuLy8kbW9kYWwtZm9vdGVyLWJvcmRlci1jb2xvcjogICAkbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcXG4vLyRtb2RhbC1oZWFkZXItYm9yZGVyLXdpZHRoOiAgICRtb2RhbC1jb250ZW50LWJvcmRlci13aWR0aCAhZGVmYXVsdDtcXG4vLyRtb2RhbC1mb290ZXItYm9yZGVyLXdpZHRoOiAgICRtb2RhbC1oZWFkZXItYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbiRtb2RhbC1oZWFkZXItcGFkZGluZzogJG1vZGFsLWlubmVyLXBhZGRpbmc7XFxuXFxuJG1vZGFsLWxnOiA5MDBweDtcXG4kbW9kYWwtbWQ6IDY4MHB4O1xcbiRtb2RhbC1zbTogNDAwcHg7XFxuXFxuLy8kbW9kYWwtdHJhbnNpdGlvbjogICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0gLjNzIGVhc2Utb3V0ICFkZWZhdWx0O1xcblxcbi8vIEFsZXJ0c1xcbiRhbGVydC1wYWRkaW5nLXk6IDFyZW0gIWRlZmF1bHQ7XFxuJGFsZXJ0LXBhZGRpbmcteDogMXJlbTtcXG4vLyRhbGVydC1tYXJnaW4tYm90dG9tOiAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XFxuLy8kYWxlcnQtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcXG4vLyRhbGVydC1saW5rLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xcbiRhbGVydC1ib3JkZXItd2lkdGg6IC4xMjVyZW07XFxuXFxuLy8kYWxlcnQtYmctbGV2ZWw6ICAgICAgICAgICAgICAgICAgICAtMTAgIWRlZmF1bHQ7XFxuLy8kYWxlcnQtYm9yZGVyLWxldmVsOiAgICAgICAgICAgICAgICAtOSAhZGVmYXVsdDtcXG4vLyRhbGVydC1jb2xvci1sZXZlbDogICAgICAgICAgICAgICAgIDYgIWRlZmF1bHQ7XFxuXFxuLy8gUHJvZ3Jlc3MgYmFyc1xcbi8vJHByb2dyZXNzLWhlaWdodDogICAgICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcXG4vLyRwcm9ncmVzcy1mb250LXNpemU6ICAgICAgICAgICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAuNzUpICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWJnOiAgICAgICAgICAgICAgICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYm94LXNoYWRvdzogICAgICAgICAgICAgICBpbnNldCAwIC4xcmVtIC4xcmVtIHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLWNvbG9yOiAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kcHJvZ3Jlc3MtYmFyLWJnOiAgICAgICAgICAgICAgICAgICB0aGVtZS1jb2xvcihcXFwicHJpbWFyeVxcXCIpICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWJhci1hbmltYXRpb24tdGltaW5nOiAgICAgMXMgbGluZWFyIGluZmluaXRlICFkZWZhdWx0O1xcbi8vJHByb2dyZXNzLWJhci10cmFuc2l0aW9uOiAgICAgICAgICAgd2lkdGggLjZzIGVhc2UgIWRlZmF1bHQ7XFxuXFxuLy8gTGlzdCBncm91cFxcbi8vJGxpc3QtZ3JvdXAtYmc6ICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xcbiRsaXN0LWdyb3VwLWJvcmRlci1jb2xvcjogJGxpZ2h0LWdyYXk7XFxuLy8kbGlzdC1ncm91cC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xcbi8vJGxpc3QtZ3JvdXAtYm9yZGVyLXJhZGl1czogICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuXFxuJGxpc3QtZ3JvdXAtaXRlbS1wYWRkaW5nLXk6ICRpbnB1dC1wYWRkaW5nLXk7XFxuJGxpc3QtZ3JvdXAtaXRlbS1wYWRkaW5nLXg6ICRpbnB1dC1wYWRkaW5nLXg7XFxuXFxuJGxpc3QtZ3JvdXAtaG92ZXItYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuLy8kbGlzdC1ncm91cC1hY3RpdmUtY29sb3I6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcXG4kbGlzdC1ncm91cC1hY3RpdmUtYmc6IHRoZW1lLWNvbG9yLWhvdmVyKFxcXCJwcmltYXJ5XFxcIik7XFxuLy8kbGlzdC1ncm91cC1hY3RpdmUtYm9yZGVyLWNvbG9yOiAgICAkbGlzdC1ncm91cC1hY3RpdmUtYmcgIWRlZmF1bHQ7XFxuXFxuJGxpc3QtZ3JvdXAtZGlzYWJsZWQtY29sb3I6ICRsaWdodC1ncmF5O1xcbi8vJGxpc3QtZ3JvdXAtZGlzYWJsZWQtYmc6ICAgICAgICAgICAgJGxpc3QtZ3JvdXAtYmcgIWRlZmF1bHQ7XFxuXFxuLy8kbGlzdC1ncm91cC1hY3Rpb24tY29sb3I6ICAgICAgICAgICAkZ3JheS03MDAgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYWN0aW9uLWhvdmVyLWNvbG9yOiAkd2hpdGU7XFxuXFxuJGxpc3QtZ3JvdXAtYWN0aW9uLWFjdGl2ZS1jb2xvcjogJGJvZHktY29sb3IgIWRlZmF1bHQ7XFxuJGxpc3QtZ3JvdXAtYWN0aW9uLWFjdGl2ZS1iZzogJGdyYXktMjAwICFkZWZhdWx0O1xcblxcbi8vIEltYWdlIHRodW1ibmFpbHNcXG4kdGh1bWJuYWlsLXBhZGRpbmc6IDA7XFxuLy8kdGh1bWJuYWlsLWJnOiAgICAgICAgICAgICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcXG4vLyR0aHVtYm5haWwtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XFxuJHRodW1ibmFpbC1ib3JkZXItY29sb3I6ICRsaWdodC1ncmF5O1xcbi8vJHRodW1ibmFpbC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XFxuJHRodW1ibmFpbC1ib3gtc2hhZG93OiBub25lO1xcblxcbi8vIEZpZ3VyZXNcXG4vLyRmaWd1cmUtY2FwdGlvbi1mb250LXNpemU6ICAgICAgICAgIDkwJSAhZGVmYXVsdDtcXG4kZmlndXJlLWNhcHRpb24tY29sb3I6ICRtZWRpdW0tZ3JheTtcXG5cXG4vLyBCcmVhZGNydW1ic1xcbiRicmVhZGNydW1iLXBhZGRpbmcteTogLjMxMjVyZW07XFxuJGJyZWFkY3J1bWItcGFkZGluZy14OiAuMzEyNXJlbTtcXG4kYnJlYWRjcnVtYi1pdGVtLXBhZGRpbmc6IC4zcmVtO1xcblxcbiRicmVhZGNydW1iLW1hcmdpbi1ib3R0b206IDA7XFxuXFxuJGJyZWFkY3J1bWItYmc6IG5vbmU7XFxuJGJyZWFkY3J1bWItZGl2aWRlci1jb2xvcjogJGRhcmstZ3JheTtcXG4kYnJlYWRjcnVtYi1hY3RpdmUtY29sb3I6ICRleHRyYS1kYXJrLWdyYXk7XFxuJGJyZWFkY3J1bWItZGl2aWRlcjogXFxcIi9cXFwiO1xcblxcbi8vIENhcm91c2VsXFxuLy8kY2Fyb3VzZWwtY29udHJvbC1jb2xvcjogICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtY29udHJvbC13aWR0aDogICAgICAgICAgICAxNSUgIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtY29udHJvbC1vcGFjaXR5OiAgICAgICAgICAuNSAhZGVmYXVsdDtcXG5cXG4vLyRjYXJvdXNlbC1pbmRpY2F0b3Itd2lkdGg6ICAgICAgICAgIDMwcHggIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtaW5kaWNhdG9yLWhlaWdodDogICAgICAgICAzcHggIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtaW5kaWNhdG9yLXNwYWNlcjogICAgICAgICAzcHggIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtaW5kaWNhdG9yLWFjdGl2ZS1iZzogICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtY2FwdGlvbi13aWR0aDogICAgICAgICAgICA3MCUgIWRlZmF1bHQ7XFxuLy8kY2Fyb3VzZWwtY2FwdGlvbi1jb2xvcjogICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtY29udHJvbC1pY29uLXdpZHRoOiAgICAgICAyMHB4ICFkZWZhdWx0O1xcblxcbi8vJGNhcm91c2VsLWNvbnRyb2wtcHJldi1pY29uLWJnOiAgICAgc3RyLXJlcGxhY2UodXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGZpbGw9JyN7JGNhcm91c2VsLWNvbnRyb2wtY29sb3J9JyB2aWV3Qm94PScwIDAgOCA4JyUzRSUzQ3BhdGggZD0nTTUuMjUgMGwtNCA0IDQgNCAxLjUtMS41LTIuNS0yLjUgMi41LTIuNS0xLjUtMS41eicvJTNFJTNDL3N2ZyUzRVxcXCIpLCBcXFwiI1xcXCIsIFxcXCIlMjNcXFwiKSAhZGVmYXVsdDtcXG4vLyRjYXJvdXNlbC1jb250cm9sLW5leHQtaWNvbi1iZzogICAgIHN0ci1yZXBsYWNlKHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBmaWxsPScjeyRjYXJvdXNlbC1jb250cm9sLWNvbG9yfScgdmlld0JveD0nMCAwIDggOCclM0UlM0NwYXRoIGQ9J00yLjc1IDBsLTEuNSAxLjUgMi41IDIuNS0yLjUgMi41IDEuNSAxLjUgNC00LTQtNHonLyUzRSUzQy9zdmclM0VcXFwiKSwgXFxcIiNcXFwiLCBcXFwiJTIzXFxcIikgIWRlZmF1bHQ7XFxuXFxuLy8kY2Fyb3VzZWwtdHJhbnNpdGlvbjogICAgICAgICAgICAgICB0cmFuc2Zvcm0gLjZzIGVhc2UgIWRlZmF1bHQ7XFxuXFxuLy8gQ2xvc2VcXG4vLyRjbG9zZS1mb250LXNpemU6ICAgICAgICAgICAgICRmb250LXNpemUtYmFzZSAqIDEuNSAhZGVmYXVsdDtcXG4vLyRjbG9zZS1mb250LXdlaWdodDogICAgICAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xcbi8vJGNsb3NlLWNvbG9yOiAgICAgICAgICAgICAgICAgJGJsYWNrICFkZWZhdWx0O1xcbi8vJGNsb3NlLXRleHQtc2hhZG93OiAgICAgICAgICAgMCAxcHggMCAkd2hpdGUgIWRlZmF1bHQ7XFxuXFxuLy8gQ29kZVxcbi8vJGNvZGUtZm9udC1zaXplOiAgICAgICAgICAgICAgICAgICAgODcuNSUgIWRlZmF1bHQ7XFxuJGNvZGUtY29sb3I6ICRib2R5LWNvbG9yO1xcblxcbi8vJGtiZC1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgICAgICAgLjJyZW0gIWRlZmF1bHQ7XFxuLy8ka2JkLXBhZGRpbmcteDogICAgICAgICAgICAgICAgICAgICAuNHJlbSAhZGVmYXVsdDtcXG4vLyRrYmQtZm9udC1zaXplOiAgICAgICAgICAgICAgICAgICAgICRjb2RlLWZvbnQtc2l6ZSAhZGVmYXVsdDtcXG4ka2JkLWNvbG9yOiAkd2hpdGU7XFxuJGtiZC1iZzogJGV4dHJhLWRhcmstZ3JheTtcXG5cXG4kcHJlLWNvbG9yOiAkYm9keS1jb2xvcjtcXG4vLyRwcmUtc2Nyb2xsYWJsZS1tYXgtaGVpZ2h0OiAgICAgICAgIDM0MHB4ICFkZWZhdWx0O1xcblxcbi8vIFByaW50aW5nXFxuLy8kcHJpbnQtcGFnZS1zaXplOiAgICAgICAgICAgICAgICAgICBhMyAhZGVmYXVsdDtcXG4vLyRwcmludC1ib2R5LW1pbi13aWR0aDogICAgICAgICAgICAgIG1hcC1nZXQoJGdyaWQtYnJlYWtwb2ludHMsIFxcXCJsZ1xcXCIpICFkZWZhdWx0O1xcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbi8vIGNzcyBiYXNlIGNvZGUsIGluamVjdGVkIGJ5IHRoZSBjc3MtbG9hZGVyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzV2l0aE1hcHBpbmdUb1N0cmluZykge1xuICB2YXIgbGlzdCA9IFtdOyAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG5cbiAgbGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICByZXR1cm4gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGNvbnRlbnQsIFwifVwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTsgLy8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3RcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblxuXG4gIGxpc3QuaSA9IGZ1bmN0aW9uIChtb2R1bGVzLCBtZWRpYVF1ZXJ5LCBkZWR1cGUpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgXCJcIl1dO1xuICAgIH1cblxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgIHZhciBpZCA9IHRoaXNbaV1bMF07XG5cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbW9kdWxlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBpdGVtID0gW10uY29uY2F0KG1vZHVsZXNbX2ldKTtcblxuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250aW51ZVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1lZGlhUXVlcnkpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhUXVlcnk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsyXSA9IFwiXCIuY29uY2F0KG1lZGlhUXVlcnksIFwiIGFuZCBcIikuY29uY2F0KGl0ZW1bMl0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGxpc3Q7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSkge1xuICB2YXIgX2l0ZW0gPSBfc2xpY2VkVG9BcnJheShpdGVtLCA0KSxcbiAgICAgIGNvbnRlbnQgPSBfaXRlbVsxXSxcbiAgICAgIGNzc01hcHBpbmcgPSBfaXRlbVszXTtcblxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCB8fCBcIlwiKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuZnVuY3Rpb24gY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcikge1xuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gX2dldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gX2dldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9IF9nZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgaWYgKCF0aGlzLmZpcmVkKSB7XG4gICAgdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLCB0aGlzLndyYXBGbik7XG4gICAgdGhpcy5maXJlZCA9IHRydWU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCwgYXJndW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfb25jZVdyYXAodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgc3RhdGUgPSB7IGZpcmVkOiBmYWxzZSwgd3JhcEZuOiB1bmRlZmluZWQsIHRhcmdldDogdGFyZ2V0LCB0eXBlOiB0eXBlLCBsaXN0ZW5lcjogbGlzdGVuZXIgfTtcbiAgdmFyIHdyYXBwZWQgPSBvbmNlV3JhcHBlci5iaW5kKHN0YXRlKTtcbiAgd3JhcHBlZC5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICBzdGF0ZS53cmFwRm4gPSB3cmFwcGVkO1xuICByZXR1cm4gd3JhcHBlZDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSh0eXBlLCBsaXN0ZW5lcikge1xuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgdGhpcy5vbih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRPbmNlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgdGhpcy5wcmVwZW5kTGlzdGVuZXIodHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4vLyBFbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0LCBldmVudHMsIHBvc2l0aW9uLCBpLCBvcmlnaW5hbExpc3RlbmVyO1xuXG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbiIsIid1c2Ugc3RyaWN0Jzt2YXIgX2V4dGVuZHM9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWZvcih2YXIgZCBpbiBiPWFyZ3VtZW50c1tjXSxiKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLGQpJiYoYVtkXT1iW2RdKTtyZXR1cm4gYX0sX3R5cGVvZj0nZnVuY3Rpb24nPT10eXBlb2YgU3ltYm9sJiYnc3ltYm9sJz09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGF9OmZ1bmN0aW9uKGEpe3JldHVybiBhJiYnZnVuY3Rpb24nPT10eXBlb2YgU3ltYm9sJiZhLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZhIT09U3ltYm9sLnByb3RvdHlwZT8nc3ltYm9sJzp0eXBlb2YgYX07ZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsYil7aWYoIShhIGluc3RhbmNlb2YgYikpdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uJyl9dmFyIFJvdXRpbmc9ZnVuY3Rpb24gYSgpe3ZhciBiPXRoaXM7X2NsYXNzQ2FsbENoZWNrKHRoaXMsYSksdGhpcy5zZXRSb3V0ZXM9ZnVuY3Rpb24oYSl7Yi5yb3V0ZXNSb3V0aW5nPWF8fFtdfSx0aGlzLmdldFJvdXRlcz1mdW5jdGlvbigpe3JldHVybiBiLnJvdXRlc1JvdXRpbmd9LHRoaXMuc2V0QmFzZVVybD1mdW5jdGlvbihhKXtiLmNvbnRleHRSb3V0aW5nLmJhc2VfdXJsPWF9LHRoaXMuZ2V0QmFzZVVybD1mdW5jdGlvbigpe3JldHVybiBiLmNvbnRleHRSb3V0aW5nLmJhc2VfdXJsfSx0aGlzLnNldFByZWZpeD1mdW5jdGlvbihhKXtiLmNvbnRleHRSb3V0aW5nLnByZWZpeD1hfSx0aGlzLnNldFNjaGVtZT1mdW5jdGlvbihhKXtiLmNvbnRleHRSb3V0aW5nLnNjaGVtZT1hfSx0aGlzLmdldFNjaGVtZT1mdW5jdGlvbigpe3JldHVybiBiLmNvbnRleHRSb3V0aW5nLnNjaGVtZX0sdGhpcy5zZXRIb3N0PWZ1bmN0aW9uKGEpe2IuY29udGV4dFJvdXRpbmcuaG9zdD1hfSx0aGlzLmdldEhvc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYi5jb250ZXh0Um91dGluZy5ob3N0fSx0aGlzLmJ1aWxkUXVlcnlQYXJhbXM9ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPW5ldyBSZWdFeHAoL1xcW10kLyk7YyBpbnN0YW5jZW9mIEFycmF5P2MuZm9yRWFjaChmdW5jdGlvbihjLGYpe2UudGVzdChhKT9kKGEsYyk6Yi5idWlsZFF1ZXJ5UGFyYW1zKGErJ1snKygnb2JqZWN0Jz09PSgndW5kZWZpbmVkJz09dHlwZW9mIGM/J3VuZGVmaW5lZCc6X3R5cGVvZihjKSk/ZjonJykrJ10nLGMsZCl9KTonb2JqZWN0Jz09PSgndW5kZWZpbmVkJz09dHlwZW9mIGM/J3VuZGVmaW5lZCc6X3R5cGVvZihjKSk/T2JqZWN0LmtleXMoYykuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gYi5idWlsZFF1ZXJ5UGFyYW1zKGErJ1snK2UrJ10nLGNbZV0sZCl9KTpkKGEsYyl9LHRoaXMuZ2V0Um91dGU9ZnVuY3Rpb24oYSl7dmFyIGM9Yi5jb250ZXh0Um91dGluZy5wcmVmaXgrYTtpZighIWIucm91dGVzUm91dGluZ1tjXSlyZXR1cm4gYi5yb3V0ZXNSb3V0aW5nW2NdO2Vsc2UgaWYoIWIucm91dGVzUm91dGluZ1thXSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSByb3V0ZSBcIicrYSsnXCIgZG9lcyBub3QgZXhpc3QuJyk7cmV0dXJuIGIucm91dGVzUm91dGluZ1thXX0sdGhpcy5nZW5lcmF0ZT1mdW5jdGlvbihhLGMsZCl7dmFyIGU9Yi5nZXRSb3V0ZShhKSxmPWN8fHt9LGc9X2V4dGVuZHMoe30sZiksaD0nX3NjaGVtZScsaT0nJyxqPSEwLGs9Jyc7aWYoKGUudG9rZW5zfHxbXSkuZm9yRWFjaChmdW5jdGlvbihiKXtpZigndGV4dCc9PT1iWzBdKXJldHVybiBpPWJbMV0raSx2b2lkKGo9ITEpO2lmKCd2YXJpYWJsZSc9PT1iWzBdKXt2YXIgYz0oZS5kZWZhdWx0c3x8e30pW2JbM11dO2lmKCExPT1qfHwhY3x8KGZ8fHt9KVtiWzNdXSYmZltiWzNdXSE9PWUuZGVmYXVsdHNbYlszXV0pe3ZhciBkO2lmKChmfHx7fSlbYlszXV0pZD1mW2JbM11dLGRlbGV0ZSBnW2JbM11dO2Vsc2UgaWYoYylkPWUuZGVmYXVsdHNbYlszXV07ZWxzZXtpZihqKXJldHVybjt0aHJvdyBuZXcgRXJyb3IoJ1RoZSByb3V0ZSBcIicrYSsnXCIgcmVxdWlyZXMgdGhlIHBhcmFtZXRlciBcIicrYlszXSsnXCIuJyl9dmFyIGg9ITA9PT1kfHwhMT09PWR8fCcnPT09ZDtpZighaHx8IWope3ZhciBrPWVuY29kZVVSSUNvbXBvbmVudChkKS5yZXBsYWNlKC8lMkYvZywnLycpOydudWxsJz09PWsmJm51bGw9PT1kJiYoaz0nJyksaT1iWzFdK2sraX1qPSExfWVsc2UgYyYmZGVsZXRlIGdbYlszXV07cmV0dXJufXRocm93IG5ldyBFcnJvcignVGhlIHRva2VuIHR5cGUgXCInK2JbMF0rJ1wiIGlzIG5vdCBzdXBwb3J0ZWQuJyl9KSwnJz09aSYmKGk9Jy8nKSwoZS5ob3N0dG9rZW5zfHxbXSkuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4ndGV4dCc9PT1hWzBdP3ZvaWQoaz1hWzFdK2spOnZvaWQoJ3ZhcmlhYmxlJz09PWFbMF0mJigoZnx8e30pW2FbM11dPyhiPWZbYVszXV0sZGVsZXRlIGdbYVszXV0pOmUuZGVmYXVsdHNbYVszXV0mJihiPWUuZGVmYXVsdHNbYVszXV0pLGs9YVsxXStiK2spKX0pLGk9Yi5jb250ZXh0Um91dGluZy5iYXNlX3VybCtpLGUucmVxdWlyZW1lbnRzW2hdJiZiLmdldFNjaGVtZSgpIT09ZS5yZXF1aXJlbWVudHNbaF0/aT1lLnJlcXVpcmVtZW50c1toXSsnOi8vJysoa3x8Yi5nZXRIb3N0KCkpK2k6ayYmYi5nZXRIb3N0KCkhPT1rP2k9Yi5nZXRTY2hlbWUoKSsnOi8vJytrK2k6ITA9PT1kJiYoaT1iLmdldFNjaGVtZSgpKyc6Ly8nK2IuZ2V0SG9zdCgpK2kpLDA8T2JqZWN0LmtleXMoZykubGVuZ3RoKXt2YXIgbD1bXSxtPWZ1bmN0aW9uKGEsYil7dmFyIGM9YjtjPSdmdW5jdGlvbic9PXR5cGVvZiBjP2MoKTpjLGM9bnVsbD09PWM/Jyc6YyxsLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGEpKyc9JytlbmNvZGVVUklDb21wb25lbnQoYykpfTtPYmplY3Qua2V5cyhnKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBiLmJ1aWxkUXVlcnlQYXJhbXMoYSxnW2FdLG0pfSksaT1pKyc/JytsLmpvaW4oJyYnKS5yZXBsYWNlKC8lMjAvZywnKycpfXJldHVybiBpfSx0aGlzLnNldERhdGE9ZnVuY3Rpb24oYSl7Yi5zZXRCYXNlVXJsKGEuYmFzZV91cmwpLGIuc2V0Um91dGVzKGEucm91dGVzKSwncHJlZml4J2luIGEmJmIuc2V0UHJlZml4KGEucHJlZml4KSxiLnNldEhvc3QoYS5ob3N0KSxiLnNldFNjaGVtZShhLnNjaGVtZSl9LHRoaXMuY29udGV4dFJvdXRpbmc9e2Jhc2VfdXJsOicnLHByZWZpeDonJyxob3N0OicnLHNjaGVtZTonJ319O21vZHVsZS5leHBvcnRzPW5ldyBSb3V0aW5nOyIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIExvZGFzaCA8aHR0cHM6Ly9sb2Rhc2guY29tLz5cbiAqIENvcHlyaWdodCBPcGVuSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIDxodHRwczovL29wZW5qc2Yub3JnLz5cbiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqL1xuOyhmdW5jdGlvbigpIHtcblxuICAvKiogVXNlZCBhcyBhIHNhZmUgcmVmZXJlbmNlIGZvciBgdW5kZWZpbmVkYCBpbiBwcmUtRVM1IGVudmlyb25tZW50cy4gKi9cbiAgdmFyIHVuZGVmaW5lZDtcblxuICAvKiogVXNlZCBhcyB0aGUgc2VtYW50aWMgdmVyc2lvbiBudW1iZXIuICovXG4gIHZhciBWRVJTSU9OID0gJzQuMTcuMjEnO1xuXG4gIC8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xuICB2YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuICAvKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG4gIHZhciBDT1JFX0VSUk9SX1RFWFQgPSAnVW5zdXBwb3J0ZWQgY29yZS1qcyB1c2UuIFRyeSBodHRwczovL25wbXMuaW8vc2VhcmNoP3E9cG9ueWZpbGwuJyxcbiAgICAgIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJyxcbiAgICAgIElOVkFMSURfVEVNUExfVkFSX0VSUk9SX1RFWFQgPSAnSW52YWxpZCBgdmFyaWFibGVgIG9wdGlvbiBwYXNzZWQgaW50byBgXy50ZW1wbGF0ZWAnO1xuXG4gIC8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbiAgdmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4gIC8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cbiAgdmFyIE1BWF9NRU1PSVpFX1NJWkUgPSA1MDA7XG5cbiAgLyoqIFVzZWQgYXMgdGhlIGludGVybmFsIGFyZ3VtZW50IHBsYWNlaG9sZGVyLiAqL1xuICB2YXIgUExBQ0VIT0xERVIgPSAnX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyc7XG5cbiAgLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbiAgdmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDtcblxuICAvKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbiAgdmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4gIC8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xuICB2YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICAgIFdSQVBfQ1VSUllfQk9VTkRfRkxBRyA9IDQsXG4gICAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgICAgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgPSA2NCxcbiAgICAgIFdSQVBfQVJZX0ZMQUcgPSAxMjgsXG4gICAgICBXUkFQX1JFQVJHX0ZMQUcgPSAyNTYsXG4gICAgICBXUkFQX0ZMSVBfRkxBRyA9IDUxMjtcblxuICAvKiogVXNlZCBhcyBkZWZhdWx0IG9wdGlvbnMgZm9yIGBfLnRydW5jYXRlYC4gKi9cbiAgdmFyIERFRkFVTFRfVFJVTkNfTEVOR1RIID0gMzAsXG4gICAgICBERUZBVUxUX1RSVU5DX09NSVNTSU9OID0gJy4uLic7XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xuICB2YXIgSE9UX0NPVU5UID0gODAwLFxuICAgICAgSE9UX1NQQU4gPSAxNjtcblxuICAvKiogVXNlZCB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBsYXp5IGl0ZXJhdGVlcy4gKi9cbiAgdmFyIExBWllfRklMVEVSX0ZMQUcgPSAxLFxuICAgICAgTEFaWV9NQVBfRkxBRyA9IDIsXG4gICAgICBMQVpZX1dISUxFX0ZMQUcgPSAzO1xuXG4gIC8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xuICB2YXIgSU5GSU5JVFkgPSAxIC8gMCxcbiAgICAgIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxLFxuICAgICAgTUFYX0lOVEVHRVIgPSAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCxcbiAgICAgIE5BTiA9IDAgLyAwO1xuXG4gIC8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHRoZSBtYXhpbXVtIGxlbmd0aCBhbmQgaW5kZXggb2YgYW4gYXJyYXkuICovXG4gIHZhciBNQVhfQVJSQVlfTEVOR1RIID0gNDI5NDk2NzI5NSxcbiAgICAgIE1BWF9BUlJBWV9JTkRFWCA9IE1BWF9BUlJBWV9MRU5HVEggLSAxLFxuICAgICAgSEFMRl9NQVhfQVJSQVlfTEVOR1RIID0gTUFYX0FSUkFZX0xFTkdUSCA+Pj4gMTtcblxuICAvKiogVXNlZCB0byBhc3NvY2lhdGUgd3JhcCBtZXRob2RzIHdpdGggdGhlaXIgYml0IGZsYWdzLiAqL1xuICB2YXIgd3JhcEZsYWdzID0gW1xuICAgIFsnYXJ5JywgV1JBUF9BUllfRkxBR10sXG4gICAgWydiaW5kJywgV1JBUF9CSU5EX0ZMQUddLFxuICAgIFsnYmluZEtleScsIFdSQVBfQklORF9LRVlfRkxBR10sXG4gICAgWydjdXJyeScsIFdSQVBfQ1VSUllfRkxBR10sXG4gICAgWydjdXJyeVJpZ2h0JywgV1JBUF9DVVJSWV9SSUdIVF9GTEFHXSxcbiAgICBbJ2ZsaXAnLCBXUkFQX0ZMSVBfRkxBR10sXG4gICAgWydwYXJ0aWFsJywgV1JBUF9QQVJUSUFMX0ZMQUddLFxuICAgIFsncGFydGlhbFJpZ2h0JywgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUddLFxuICAgIFsncmVhcmcnLCBXUkFQX1JFQVJHX0ZMQUddXG4gIF07XG5cbiAgLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xuICB2YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgICAgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICAgIGRvbUV4Y1RhZyA9ICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nLFxuICAgICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICAgIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XScsXG4gICAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJyxcbiAgICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nLFxuICAgICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJyxcbiAgICAgIHdlYWtTZXRUYWcgPSAnW29iamVjdCBXZWFrU2V0XSc7XG5cbiAgdmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuICAvKiogVXNlZCB0byBtYXRjaCBlbXB0eSBzdHJpbmcgbGl0ZXJhbHMgaW4gY29tcGlsZWQgdGVtcGxhdGUgc291cmNlLiAqL1xuICB2YXIgcmVFbXB0eVN0cmluZ0xlYWRpbmcgPSAvXFxiX19wIFxcKz0gJyc7L2csXG4gICAgICByZUVtcHR5U3RyaW5nTWlkZGxlID0gL1xcYihfX3AgXFwrPSkgJycgXFwrL2csXG4gICAgICByZUVtcHR5U3RyaW5nVHJhaWxpbmcgPSAvKF9fZVxcKC4qP1xcKXxcXGJfX3RcXCkpIFxcK1xcbicnOy9nO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIEhUTUwgZW50aXRpZXMgYW5kIEhUTUwgY2hhcmFjdGVycy4gKi9cbiAgdmFyIHJlRXNjYXBlZEh0bWwgPSAvJig/OmFtcHxsdHxndHxxdW90fCMzOSk7L2csXG4gICAgICByZVVuZXNjYXBlZEh0bWwgPSAvWyY8PlwiJ10vZyxcbiAgICAgIHJlSGFzRXNjYXBlZEh0bWwgPSBSZWdFeHAocmVFc2NhcGVkSHRtbC5zb3VyY2UpLFxuICAgICAgcmVIYXNVbmVzY2FwZWRIdG1sID0gUmVnRXhwKHJlVW5lc2NhcGVkSHRtbC5zb3VyY2UpO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG4gIHZhciByZUVzY2FwZSA9IC88JS0oW1xcc1xcU10rPyklPi9nLFxuICAgICAgcmVFdmFsdWF0ZSA9IC88JShbXFxzXFxTXSs/KSU+L2csXG4gICAgICByZUludGVycG9sYXRlID0gLzwlPShbXFxzXFxTXSs/KSU+L2c7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xuICB2YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICAgIHJlSXNQbGFpblByb3AgPSAvXlxcdyokLyxcbiAgICAgIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAgICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gICAqL1xuICB2YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nLFxuICAgICAgcmVIYXNSZWdFeHBDaGFyID0gUmVnRXhwKHJlUmVnRXhwQ2hhci5zb3VyY2UpO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgd2hpdGVzcGFjZS4gKi9cbiAgdmFyIHJlVHJpbVN0YXJ0ID0gL15cXHMrLztcblxuICAvKiogVXNlZCB0byBtYXRjaCBhIHNpbmdsZSB3aGl0ZXNwYWNlIGNoYXJhY3Rlci4gKi9cbiAgdmFyIHJlV2hpdGVzcGFjZSA9IC9cXHMvO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIHdyYXAgZGV0YWlsIGNvbW1lbnRzLiAqL1xuICB2YXIgcmVXcmFwQ29tbWVudCA9IC9cXHsoPzpcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoIC4rXFxdIFxcKlxcLyk/XFxuPy8sXG4gICAgICByZVdyYXBEZXRhaWxzID0gL1xce1xcblxcL1xcKiBcXFt3cmFwcGVkIHdpdGggKC4rKVxcXSBcXCovLFxuICAgICAgcmVTcGxpdERldGFpbHMgPSAvLD8gJiAvO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIHdvcmRzIGNvbXBvc2VkIG9mIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLiAqL1xuICB2YXIgcmVBc2NpaVdvcmQgPSAvW15cXHgwMC1cXHgyZlxceDNhLVxceDQwXFx4NWItXFx4NjBcXHg3Yi1cXHg3Zl0rL2c7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gdmFsaWRhdGUgdGhlIGB2YWxpZGF0ZWAgb3B0aW9uIGluIGBfLnRlbXBsYXRlYCB2YXJpYWJsZS5cbiAgICpcbiAgICogRm9yYmlkcyBjaGFyYWN0ZXJzIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgZnVuY3Rpb24gYXJndW1lbnQgZGVmaW5pdGlvbjpcbiAgICogLSBcIigpLFwiIChtb2RpZmljYXRpb24gb2YgZnVuY3Rpb24gcGFyYW1ldGVycylcbiAgICogLSBcIj1cIiAoZGVmYXVsdCB2YWx1ZSlcbiAgICogLSBcIltde31cIiAoZGVzdHJ1Y3R1cmluZyBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzKVxuICAgKiAtIFwiL1wiIChiZWdpbm5pbmcgb2YgYSBjb21tZW50KVxuICAgKiAtIHdoaXRlc3BhY2VcbiAgICovXG4gIHZhciByZUZvcmJpZGRlbklkZW50aWZpZXJDaGFycyA9IC9bKCk9LHt9XFxbXFxdXFwvXFxzXS87XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG4gIHZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZztcblxuICAvKipcbiAgICogVXNlZCB0byBtYXRjaFxuICAgKiBbRVMgdGVtcGxhdGUgZGVsaW1pdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdGVtcGxhdGUtbGl0ZXJhbC1sZXhpY2FsLWNvbXBvbmVudHMpLlxuICAgKi9cbiAgdmFyIHJlRXNUZW1wbGF0ZSA9IC9cXCRcXHsoW15cXFxcfV0qKD86XFxcXC5bXlxcXFx9XSopKilcXH0vZztcblxuICAvKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbiAgdmFyIHJlRmxhZ3MgPSAvXFx3KiQvO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBiYWQgc2lnbmVkIGhleGFkZWNpbWFsIHN0cmluZyB2YWx1ZXMuICovXG4gIHZhciByZUlzQmFkSGV4ID0gL15bLStdMHhbMC05YS1mXSskL2k7XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xuICB2YXIgcmVJc0JpbmFyeSA9IC9eMGJbMDFdKyQvaTtcblxuICAvKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG4gIHZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xuICB2YXIgcmVJc09jdGFsID0gL14wb1swLTddKyQvaTtcblxuICAvKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG4gIHZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggTGF0aW4gVW5pY29kZSBsZXR0ZXJzIChleGNsdWRpbmcgbWF0aGVtYXRpY2FsIG9wZXJhdG9ycykuICovXG4gIHZhciByZUxhdGluID0gL1tcXHhjMC1cXHhkNlxceGQ4LVxceGY2XFx4ZjgtXFx4ZmZcXHUwMTAwLVxcdTAxN2ZdL2c7XG5cbiAgLyoqIFVzZWQgdG8gZW5zdXJlIGNhcHR1cmluZyBvcmRlciBvZiB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xuICB2YXIgcmVOb01hdGNoID0gLygkXikvO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIHVuZXNjYXBlZCBjaGFyYWN0ZXJzIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi9cbiAgdmFyIHJlVW5lc2NhcGVkU3RyaW5nID0gL1snXFxuXFxyXFx1MjAyOFxcdTIwMjlcXFxcXS9nO1xuXG4gIC8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbiAgdmFyIHJzQXN0cmFsUmFuZ2UgPSAnXFxcXHVkODAwLVxcXFx1ZGZmZicsXG4gICAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICAgIHJzQ29tYm9TeW1ib2xzUmFuZ2UgPSAnXFxcXHUyMGQwLVxcXFx1MjBmZicsXG4gICAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgICByc0RpbmdiYXRSYW5nZSA9ICdcXFxcdTI3MDAtXFxcXHUyN2JmJyxcbiAgICAgIHJzTG93ZXJSYW5nZSA9ICdhLXpcXFxceGRmLVxcXFx4ZjZcXFxceGY4LVxcXFx4ZmYnLFxuICAgICAgcnNNYXRoT3BSYW5nZSA9ICdcXFxceGFjXFxcXHhiMVxcXFx4ZDdcXFxceGY3JyxcbiAgICAgIHJzTm9uQ2hhclJhbmdlID0gJ1xcXFx4MDAtXFxcXHgyZlxcXFx4M2EtXFxcXHg0MFxcXFx4NWItXFxcXHg2MFxcXFx4N2ItXFxcXHhiZicsXG4gICAgICByc1B1bmN0dWF0aW9uUmFuZ2UgPSAnXFxcXHUyMDAwLVxcXFx1MjA2ZicsXG4gICAgICByc1NwYWNlUmFuZ2UgPSAnIFxcXFx0XFxcXHgwYlxcXFxmXFxcXHhhMFxcXFx1ZmVmZlxcXFxuXFxcXHJcXFxcdTIwMjhcXFxcdTIwMjlcXFxcdTE2ODBcXFxcdTE4MGVcXFxcdTIwMDBcXFxcdTIwMDFcXFxcdTIwMDJcXFxcdTIwMDNcXFxcdTIwMDRcXFxcdTIwMDVcXFxcdTIwMDZcXFxcdTIwMDdcXFxcdTIwMDhcXFxcdTIwMDlcXFxcdTIwMGFcXFxcdTIwMmZcXFxcdTIwNWZcXFxcdTMwMDAnLFxuICAgICAgcnNVcHBlclJhbmdlID0gJ0EtWlxcXFx4YzAtXFxcXHhkNlxcXFx4ZDgtXFxcXHhkZScsXG4gICAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZicsXG4gICAgICByc0JyZWFrUmFuZ2UgPSByc01hdGhPcFJhbmdlICsgcnNOb25DaGFyUmFuZ2UgKyByc1B1bmN0dWF0aW9uUmFuZ2UgKyByc1NwYWNlUmFuZ2U7XG5cbiAgLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNhcHR1cmUgZ3JvdXBzLiAqL1xuICB2YXIgcnNBcG9zID0gXCJbJ1xcdTIwMTldXCIsXG4gICAgICByc0FzdHJhbCA9ICdbJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgICByc0JyZWFrID0gJ1snICsgcnNCcmVha1JhbmdlICsgJ10nLFxuICAgICAgcnNDb21ibyA9ICdbJyArIHJzQ29tYm9SYW5nZSArICddJyxcbiAgICAgIHJzRGlnaXRzID0gJ1xcXFxkKycsXG4gICAgICByc0RpbmdiYXQgPSAnWycgKyByc0RpbmdiYXRSYW5nZSArICddJyxcbiAgICAgIHJzTG93ZXIgPSAnWycgKyByc0xvd2VyUmFuZ2UgKyAnXScsXG4gICAgICByc01pc2MgPSAnW14nICsgcnNBc3RyYWxSYW5nZSArIHJzQnJlYWtSYW5nZSArIHJzRGlnaXRzICsgcnNEaW5nYmF0UmFuZ2UgKyByc0xvd2VyUmFuZ2UgKyByc1VwcGVyUmFuZ2UgKyAnXScsXG4gICAgICByc0ZpdHogPSAnXFxcXHVkODNjW1xcXFx1ZGZmYi1cXFxcdWRmZmZdJyxcbiAgICAgIHJzTW9kaWZpZXIgPSAnKD86JyArIHJzQ29tYm8gKyAnfCcgKyByc0ZpdHogKyAnKScsXG4gICAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgICAgcnNSZWdpb25hbCA9ICcoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9JyxcbiAgICAgIHJzU3VyclBhaXIgPSAnW1xcXFx1ZDgwMC1cXFxcdWRiZmZdW1xcXFx1ZGMwMC1cXFxcdWRmZmZdJyxcbiAgICAgIHJzVXBwZXIgPSAnWycgKyByc1VwcGVyUmFuZ2UgKyAnXScsXG4gICAgICByc1pXSiA9ICdcXFxcdTIwMGQnO1xuXG4gIC8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xuICB2YXIgcnNNaXNjTG93ZXIgPSAnKD86JyArIHJzTG93ZXIgKyAnfCcgKyByc01pc2MgKyAnKScsXG4gICAgICByc01pc2NVcHBlciA9ICcoPzonICsgcnNVcHBlciArICd8JyArIHJzTWlzYyArICcpJyxcbiAgICAgIHJzT3B0Q29udHJMb3dlciA9ICcoPzonICsgcnNBcG9zICsgJyg/OmR8bGx8bXxyZXxzfHR8dmUpKT8nLFxuICAgICAgcnNPcHRDb250clVwcGVyID0gJyg/OicgKyByc0Fwb3MgKyAnKD86RHxMTHxNfFJFfFN8VHxWRSkpPycsXG4gICAgICByZU9wdE1vZCA9IHJzTW9kaWZpZXIgKyAnPycsXG4gICAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgICAgcnNPcHRKb2luID0gJyg/OicgKyByc1pXSiArICcoPzonICsgW3JzTm9uQXN0cmFsLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyXS5qb2luKCd8JykgKyAnKScgKyByc09wdFZhciArIHJlT3B0TW9kICsgJykqJyxcbiAgICAgIHJzT3JkTG93ZXIgPSAnXFxcXGQqKD86MXN0fDJuZHwzcmR8KD8hWzEyM10pXFxcXGR0aCkoPz1cXFxcYnxbQS1aX10pJyxcbiAgICAgIHJzT3JkVXBwZXIgPSAnXFxcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10pXFxcXGRUSCkoPz1cXFxcYnxbYS16X10pJyxcbiAgICAgIHJzU2VxID0gcnNPcHRWYXIgKyByZU9wdE1vZCArIHJzT3B0Sm9pbixcbiAgICAgIHJzRW1vamkgPSAnKD86JyArIFtyc0RpbmdiYXQsIHJzUmVnaW9uYWwsIHJzU3VyclBhaXJdLmpvaW4oJ3wnKSArICcpJyArIHJzU2VxLFxuICAgICAgcnNTeW1ib2wgPSAnKD86JyArIFtyc05vbkFzdHJhbCArIHJzQ29tYm8gKyAnPycsIHJzQ29tYm8sIHJzUmVnaW9uYWwsIHJzU3VyclBhaXIsIHJzQXN0cmFsXS5qb2luKCd8JykgKyAnKSc7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggYXBvc3Ryb3BoZXMuICovXG4gIHZhciByZUFwb3MgPSBSZWdFeHAocnNBcG9zLCAnZycpO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIG1hdGNoIFtjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3NdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbWJpbmluZ19EaWFjcml0aWNhbF9NYXJrcykgYW5kXG4gICAqIFtjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3MgZm9yIHN5bWJvbHNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbWJpbmluZ19EaWFjcml0aWNhbF9NYXJrc19mb3JfU3ltYm9scykuXG4gICAqL1xuICB2YXIgcmVDb21ib01hcmsgPSBSZWdFeHAocnNDb21ibywgJ2cnKTtcblxuICAvKiogVXNlZCB0byBtYXRjaCBbc3RyaW5nIHN5bWJvbHNdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUpLiAqL1xuICB2YXIgcmVVbmljb2RlID0gUmVnRXhwKHJzRml0eiArICcoPz0nICsgcnNGaXR6ICsgJyl8JyArIHJzU3ltYm9sICsgcnNTZXEsICdnJyk7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggY29tcGxleCBvciBjb21wb3VuZCB3b3Jkcy4gKi9cbiAgdmFyIHJlVW5pY29kZVdvcmQgPSBSZWdFeHAoW1xuICAgIHJzVXBwZXIgKyAnPycgKyByc0xvd2VyICsgJysnICsgcnNPcHRDb250ckxvd2VyICsgJyg/PScgKyBbcnNCcmVhaywgcnNVcHBlciwgJyQnXS5qb2luKCd8JykgKyAnKScsXG4gICAgcnNNaXNjVXBwZXIgKyAnKycgKyByc09wdENvbnRyVXBwZXIgKyAnKD89JyArIFtyc0JyZWFrLCByc1VwcGVyICsgcnNNaXNjTG93ZXIsICckJ10uam9pbignfCcpICsgJyknLFxuICAgIHJzVXBwZXIgKyAnPycgKyByc01pc2NMb3dlciArICcrJyArIHJzT3B0Q29udHJMb3dlcixcbiAgICByc1VwcGVyICsgJysnICsgcnNPcHRDb250clVwcGVyLFxuICAgIHJzT3JkVXBwZXIsXG4gICAgcnNPcmRMb3dlcixcbiAgICByc0RpZ2l0cyxcbiAgICByc0Vtb2ppXG4gIF0uam9pbignfCcpLCAnZycpO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBzdHJpbmdzIHdpdGggW3plcm8td2lkdGggam9pbmVycyBvciBjb2RlIHBvaW50cyBmcm9tIHRoZSBhc3RyYWwgcGxhbmVzXShodHRwOi8vZWV2LmVlL2Jsb2cvMjAxNS8wOS8xMi9kYXJrLWNvcm5lcnMtb2YtdW5pY29kZS8pLiAqL1xuICB2YXIgcmVIYXNVbmljb2RlID0gUmVnRXhwKCdbJyArIHJzWldKICsgcnNBc3RyYWxSYW5nZSAgKyByc0NvbWJvUmFuZ2UgKyByc1ZhclJhbmdlICsgJ10nKTtcblxuICAvKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB0aGF0IG5lZWQgYSBtb3JlIHJvYnVzdCByZWdleHAgdG8gbWF0Y2ggd29yZHMuICovXG4gIHZhciByZUhhc1VuaWNvZGVXb3JkID0gL1thLXpdW0EtWl18W0EtWl17Mn1bYS16XXxbMC05XVthLXpBLVpdfFthLXpBLVpdWzAtOV18W15hLXpBLVowLTkgXS87XG5cbiAgLyoqIFVzZWQgdG8gYXNzaWduIGRlZmF1bHQgYGNvbnRleHRgIG9iamVjdCBwcm9wZXJ0aWVzLiAqL1xuICB2YXIgY29udGV4dFByb3BzID0gW1xuICAgICdBcnJheScsICdCdWZmZXInLCAnRGF0YVZpZXcnLCAnRGF0ZScsICdFcnJvcicsICdGbG9hdDMyQXJyYXknLCAnRmxvYXQ2NEFycmF5JyxcbiAgICAnRnVuY3Rpb24nLCAnSW50OEFycmF5JywgJ0ludDE2QXJyYXknLCAnSW50MzJBcnJheScsICdNYXAnLCAnTWF0aCcsICdPYmplY3QnLFxuICAgICdQcm9taXNlJywgJ1JlZ0V4cCcsICdTZXQnLCAnU3RyaW5nJywgJ1N5bWJvbCcsICdUeXBlRXJyb3InLCAnVWludDhBcnJheScsXG4gICAgJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ1VpbnQxNkFycmF5JywgJ1VpbnQzMkFycmF5JywgJ1dlYWtNYXAnLFxuICAgICdfJywgJ2NsZWFyVGltZW91dCcsICdpc0Zpbml0ZScsICdwYXJzZUludCcsICdzZXRUaW1lb3V0J1xuICBdO1xuXG4gIC8qKiBVc2VkIHRvIG1ha2UgdGVtcGxhdGUgc291cmNlVVJMcyBlYXNpZXIgdG8gaWRlbnRpZnkuICovXG4gIHZhciB0ZW1wbGF0ZUNvdW50ZXIgPSAtMTtcblxuICAvKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG4gIHZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xuICB0eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xuICB0eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbiAgdHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbiAgLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgc3VwcG9ydGVkIGJ5IGBfLmNsb25lYC4gKi9cbiAgdmFyIGNsb25lYWJsZVRhZ3MgPSB7fTtcbiAgY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID1cbiAgY2xvbmVhYmxlVGFnc1thcnJheUJ1ZmZlclRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGFWaWV3VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbYm9vbFRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGVUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPVxuICBjbG9uZWFibGVUYWdzW2ludDhUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQxNlRhZ10gPVxuICBjbG9uZWFibGVUYWdzW2ludDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbbWFwVGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbcmVnZXhwVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc2V0VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3ltYm9sVGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID1cbiAgY2xvbmVhYmxlVGFnc1t1aW50MTZUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbiAgY2xvbmVhYmxlVGFnc1tlcnJvclRhZ10gPSBjbG9uZWFibGVUYWdzW2Z1bmNUYWddID1cbiAgY2xvbmVhYmxlVGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4gIC8qKiBVc2VkIHRvIG1hcCBMYXRpbiBVbmljb2RlIGxldHRlcnMgdG8gYmFzaWMgTGF0aW4gbGV0dGVycy4gKi9cbiAgdmFyIGRlYnVycmVkTGV0dGVycyA9IHtcbiAgICAvLyBMYXRpbi0xIFN1cHBsZW1lbnQgYmxvY2suXG4gICAgJ1xceGMwJzogJ0EnLCAgJ1xceGMxJzogJ0EnLCAnXFx4YzInOiAnQScsICdcXHhjMyc6ICdBJywgJ1xceGM0JzogJ0EnLCAnXFx4YzUnOiAnQScsXG4gICAgJ1xceGUwJzogJ2EnLCAgJ1xceGUxJzogJ2EnLCAnXFx4ZTInOiAnYScsICdcXHhlMyc6ICdhJywgJ1xceGU0JzogJ2EnLCAnXFx4ZTUnOiAnYScsXG4gICAgJ1xceGM3JzogJ0MnLCAgJ1xceGU3JzogJ2MnLFxuICAgICdcXHhkMCc6ICdEJywgICdcXHhmMCc6ICdkJyxcbiAgICAnXFx4YzgnOiAnRScsICAnXFx4YzknOiAnRScsICdcXHhjYSc6ICdFJywgJ1xceGNiJzogJ0UnLFxuICAgICdcXHhlOCc6ICdlJywgICdcXHhlOSc6ICdlJywgJ1xceGVhJzogJ2UnLCAnXFx4ZWInOiAnZScsXG4gICAgJ1xceGNjJzogJ0knLCAgJ1xceGNkJzogJ0knLCAnXFx4Y2UnOiAnSScsICdcXHhjZic6ICdJJyxcbiAgICAnXFx4ZWMnOiAnaScsICAnXFx4ZWQnOiAnaScsICdcXHhlZSc6ICdpJywgJ1xceGVmJzogJ2knLFxuICAgICdcXHhkMSc6ICdOJywgICdcXHhmMSc6ICduJyxcbiAgICAnXFx4ZDInOiAnTycsICAnXFx4ZDMnOiAnTycsICdcXHhkNCc6ICdPJywgJ1xceGQ1JzogJ08nLCAnXFx4ZDYnOiAnTycsICdcXHhkOCc6ICdPJyxcbiAgICAnXFx4ZjInOiAnbycsICAnXFx4ZjMnOiAnbycsICdcXHhmNCc6ICdvJywgJ1xceGY1JzogJ28nLCAnXFx4ZjYnOiAnbycsICdcXHhmOCc6ICdvJyxcbiAgICAnXFx4ZDknOiAnVScsICAnXFx4ZGEnOiAnVScsICdcXHhkYic6ICdVJywgJ1xceGRjJzogJ1UnLFxuICAgICdcXHhmOSc6ICd1JywgICdcXHhmYSc6ICd1JywgJ1xceGZiJzogJ3UnLCAnXFx4ZmMnOiAndScsXG4gICAgJ1xceGRkJzogJ1knLCAgJ1xceGZkJzogJ3knLCAnXFx4ZmYnOiAneScsXG4gICAgJ1xceGM2JzogJ0FlJywgJ1xceGU2JzogJ2FlJyxcbiAgICAnXFx4ZGUnOiAnVGgnLCAnXFx4ZmUnOiAndGgnLFxuICAgICdcXHhkZic6ICdzcycsXG4gICAgLy8gTGF0aW4gRXh0ZW5kZWQtQSBibG9jay5cbiAgICAnXFx1MDEwMCc6ICdBJywgICdcXHUwMTAyJzogJ0EnLCAnXFx1MDEwNCc6ICdBJyxcbiAgICAnXFx1MDEwMSc6ICdhJywgICdcXHUwMTAzJzogJ2EnLCAnXFx1MDEwNSc6ICdhJyxcbiAgICAnXFx1MDEwNic6ICdDJywgICdcXHUwMTA4JzogJ0MnLCAnXFx1MDEwYSc6ICdDJywgJ1xcdTAxMGMnOiAnQycsXG4gICAgJ1xcdTAxMDcnOiAnYycsICAnXFx1MDEwOSc6ICdjJywgJ1xcdTAxMGInOiAnYycsICdcXHUwMTBkJzogJ2MnLFxuICAgICdcXHUwMTBlJzogJ0QnLCAgJ1xcdTAxMTAnOiAnRCcsICdcXHUwMTBmJzogJ2QnLCAnXFx1MDExMSc6ICdkJyxcbiAgICAnXFx1MDExMic6ICdFJywgICdcXHUwMTE0JzogJ0UnLCAnXFx1MDExNic6ICdFJywgJ1xcdTAxMTgnOiAnRScsICdcXHUwMTFhJzogJ0UnLFxuICAgICdcXHUwMTEzJzogJ2UnLCAgJ1xcdTAxMTUnOiAnZScsICdcXHUwMTE3JzogJ2UnLCAnXFx1MDExOSc6ICdlJywgJ1xcdTAxMWInOiAnZScsXG4gICAgJ1xcdTAxMWMnOiAnRycsICAnXFx1MDExZSc6ICdHJywgJ1xcdTAxMjAnOiAnRycsICdcXHUwMTIyJzogJ0cnLFxuICAgICdcXHUwMTFkJzogJ2cnLCAgJ1xcdTAxMWYnOiAnZycsICdcXHUwMTIxJzogJ2cnLCAnXFx1MDEyMyc6ICdnJyxcbiAgICAnXFx1MDEyNCc6ICdIJywgICdcXHUwMTI2JzogJ0gnLCAnXFx1MDEyNSc6ICdoJywgJ1xcdTAxMjcnOiAnaCcsXG4gICAgJ1xcdTAxMjgnOiAnSScsICAnXFx1MDEyYSc6ICdJJywgJ1xcdTAxMmMnOiAnSScsICdcXHUwMTJlJzogJ0knLCAnXFx1MDEzMCc6ICdJJyxcbiAgICAnXFx1MDEyOSc6ICdpJywgICdcXHUwMTJiJzogJ2knLCAnXFx1MDEyZCc6ICdpJywgJ1xcdTAxMmYnOiAnaScsICdcXHUwMTMxJzogJ2knLFxuICAgICdcXHUwMTM0JzogJ0onLCAgJ1xcdTAxMzUnOiAnaicsXG4gICAgJ1xcdTAxMzYnOiAnSycsICAnXFx1MDEzNyc6ICdrJywgJ1xcdTAxMzgnOiAnaycsXG4gICAgJ1xcdTAxMzknOiAnTCcsICAnXFx1MDEzYic6ICdMJywgJ1xcdTAxM2QnOiAnTCcsICdcXHUwMTNmJzogJ0wnLCAnXFx1MDE0MSc6ICdMJyxcbiAgICAnXFx1MDEzYSc6ICdsJywgICdcXHUwMTNjJzogJ2wnLCAnXFx1MDEzZSc6ICdsJywgJ1xcdTAxNDAnOiAnbCcsICdcXHUwMTQyJzogJ2wnLFxuICAgICdcXHUwMTQzJzogJ04nLCAgJ1xcdTAxNDUnOiAnTicsICdcXHUwMTQ3JzogJ04nLCAnXFx1MDE0YSc6ICdOJyxcbiAgICAnXFx1MDE0NCc6ICduJywgICdcXHUwMTQ2JzogJ24nLCAnXFx1MDE0OCc6ICduJywgJ1xcdTAxNGInOiAnbicsXG4gICAgJ1xcdTAxNGMnOiAnTycsICAnXFx1MDE0ZSc6ICdPJywgJ1xcdTAxNTAnOiAnTycsXG4gICAgJ1xcdTAxNGQnOiAnbycsICAnXFx1MDE0Zic6ICdvJywgJ1xcdTAxNTEnOiAnbycsXG4gICAgJ1xcdTAxNTQnOiAnUicsICAnXFx1MDE1Nic6ICdSJywgJ1xcdTAxNTgnOiAnUicsXG4gICAgJ1xcdTAxNTUnOiAncicsICAnXFx1MDE1Nyc6ICdyJywgJ1xcdTAxNTknOiAncicsXG4gICAgJ1xcdTAxNWEnOiAnUycsICAnXFx1MDE1Yyc6ICdTJywgJ1xcdTAxNWUnOiAnUycsICdcXHUwMTYwJzogJ1MnLFxuICAgICdcXHUwMTViJzogJ3MnLCAgJ1xcdTAxNWQnOiAncycsICdcXHUwMTVmJzogJ3MnLCAnXFx1MDE2MSc6ICdzJyxcbiAgICAnXFx1MDE2Mic6ICdUJywgICdcXHUwMTY0JzogJ1QnLCAnXFx1MDE2Nic6ICdUJyxcbiAgICAnXFx1MDE2Myc6ICd0JywgICdcXHUwMTY1JzogJ3QnLCAnXFx1MDE2Nyc6ICd0JyxcbiAgICAnXFx1MDE2OCc6ICdVJywgICdcXHUwMTZhJzogJ1UnLCAnXFx1MDE2Yyc6ICdVJywgJ1xcdTAxNmUnOiAnVScsICdcXHUwMTcwJzogJ1UnLCAnXFx1MDE3Mic6ICdVJyxcbiAgICAnXFx1MDE2OSc6ICd1JywgICdcXHUwMTZiJzogJ3UnLCAnXFx1MDE2ZCc6ICd1JywgJ1xcdTAxNmYnOiAndScsICdcXHUwMTcxJzogJ3UnLCAnXFx1MDE3Myc6ICd1JyxcbiAgICAnXFx1MDE3NCc6ICdXJywgICdcXHUwMTc1JzogJ3cnLFxuICAgICdcXHUwMTc2JzogJ1knLCAgJ1xcdTAxNzcnOiAneScsICdcXHUwMTc4JzogJ1knLFxuICAgICdcXHUwMTc5JzogJ1onLCAgJ1xcdTAxN2InOiAnWicsICdcXHUwMTdkJzogJ1onLFxuICAgICdcXHUwMTdhJzogJ3onLCAgJ1xcdTAxN2MnOiAneicsICdcXHUwMTdlJzogJ3onLFxuICAgICdcXHUwMTMyJzogJ0lKJywgJ1xcdTAxMzMnOiAnaWonLFxuICAgICdcXHUwMTUyJzogJ09lJywgJ1xcdTAxNTMnOiAnb2UnLFxuICAgICdcXHUwMTQ5JzogXCInblwiLCAnXFx1MDE3Zic6ICdzJ1xuICB9O1xuXG4gIC8qKiBVc2VkIHRvIG1hcCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuICovXG4gIHZhciBodG1sRXNjYXBlcyA9IHtcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0OycsXG4gICAgJ1wiJzogJyZxdW90OycsXG4gICAgXCInXCI6ICcmIzM5OydcbiAgfTtcblxuICAvKiogVXNlZCB0byBtYXAgSFRNTCBlbnRpdGllcyB0byBjaGFyYWN0ZXJzLiAqL1xuICB2YXIgaHRtbFVuZXNjYXBlcyA9IHtcbiAgICAnJmFtcDsnOiAnJicsXG4gICAgJyZsdDsnOiAnPCcsXG4gICAgJyZndDsnOiAnPicsXG4gICAgJyZxdW90Oyc6ICdcIicsXG4gICAgJyYjMzk7JzogXCInXCJcbiAgfTtcblxuICAvKiogVXNlZCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi9cbiAgdmFyIHN0cmluZ0VzY2FwZXMgPSB7XG4gICAgJ1xcXFwnOiAnXFxcXCcsXG4gICAgXCInXCI6IFwiJ1wiLFxuICAgICdcXG4nOiAnbicsXG4gICAgJ1xccic6ICdyJyxcbiAgICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICAgJ1xcdTIwMjknOiAndTIwMjknXG4gIH07XG5cbiAgLyoqIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHdpdGhvdXQgYSBkZXBlbmRlbmN5IG9uIGByb290YC4gKi9cbiAgdmFyIGZyZWVQYXJzZUZsb2F0ID0gcGFyc2VGbG9hdCxcbiAgICAgIGZyZWVQYXJzZUludCA9IHBhcnNlSW50O1xuXG4gIC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG4gIHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxuICAvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xuICB2YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuICAvKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbiAgdmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbiAgLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbiAgdmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4gIC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbiAgdmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuICAvKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xuICB2YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuICAvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbiAgdmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbiAgLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG4gIHZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgICAgaWYgKHR5cGVzKSB7XG4gICAgICAgIHJldHVybiB0eXBlcztcbiAgICAgIH1cblxuICAgICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9KCkpO1xuXG4gIC8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG4gIHZhciBub2RlSXNBcnJheUJ1ZmZlciA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzQXJyYXlCdWZmZXIsXG4gICAgICBub2RlSXNEYXRlID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNEYXRlLFxuICAgICAgbm9kZUlzTWFwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNNYXAsXG4gICAgICBub2RlSXNSZWdFeHAgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1JlZ0V4cCxcbiAgICAgIG5vZGVJc1NldCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzU2V0LFxuICAgICAgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAvKipcbiAgICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICAgKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gICAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUFnZ3JlZ2F0b3JgIGZvciBhcnJheXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFjY3VtdWxhdG9yIFRoZSBpbml0aWFsIGFnZ3JlZ2F0ZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5QWdncmVnYXRvcihhcnJheSwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgc2V0dGVyKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaXRlcmF0ZWUodmFsdWUpLCBhcnJheSk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheUVhY2goYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZvckVhY2hSaWdodGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheUVhY2hSaWdodChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIGlmIChpdGVyYXRlZShhcnJheVtsZW5ndGhdLCBsZW5ndGgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZXZlcnlgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIHBhc3MgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICogIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5RXZlcnkoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAoIXByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgICByZXNJbmRleCA9IDAsXG4gICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluY2x1ZGVzYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogc3BlY2lmeWluZyBhbiBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHsqfSB0YXJnZXQgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlJbmNsdWRlcyhhcnJheSwgdmFsdWUpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgcmV0dXJuICEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgMCkgPiAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFycmF5SW5jbHVkZXNgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBjb21wYXJhdG9yLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHRhcmdldGAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5SW5jbHVkZXNXaXRoKGFycmF5LCB2YWx1ZSwgY29tcGFyYXRvcikge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgYXJyYXlbaW5kZXhdKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICAgKiBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5yZWR1Y2VgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbaW5pdEFjY3VtXSBTcGVjaWZ5IHVzaW5nIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAgYXNcbiAgICogIHRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheVJlZHVjZShhcnJheSwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0pIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgICBpZiAoaW5pdEFjY3VtICYmIGxlbmd0aCkge1xuICAgICAgYWNjdW11bGF0b3IgPSBhcnJheVsrK2luZGV4XTtcbiAgICB9XG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5yZWR1Y2VSaWdodGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbml0QWNjdW1dIFNwZWNpZnkgdXNpbmcgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgIGFzXG4gICAqICB0aGUgaW5pdGlhbCB2YWx1ZS5cbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlSZWR1Y2VSaWdodChhcnJheSwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0pIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgaWYgKGluaXRBY2N1bSAmJiBsZW5ndGgpIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gYXJyYXlbLS1sZW5ndGhdO1xuICAgIH1cbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIGFycmF5W2xlbmd0aF0sIGxlbmd0aCwgYXJyYXkpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICAgKiBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAqICBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNpemUgb2YgYW4gQVNDSUkgYHN0cmluZ2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdHJpbmcgc2l6ZS5cbiAgICovXG4gIHZhciBhc2NpaVNpemUgPSBiYXNlUHJvcGVydHkoJ2xlbmd0aCcpO1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBBU0NJSSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gYXNjaWlUb0FycmF5KHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcuc3BsaXQoJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0cyBhbiBBU0NJSSBgc3RyaW5nYCBpbnRvIGFuIGFycmF5IG9mIGl0cyB3b3Jkcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3b3JkcyBvZiBgc3RyaW5nYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFzY2lpV29yZHMoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5tYXRjaChyZUFzY2lpV29yZCkgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLmZpbmRLZXlgIGFuZCBgXy5maW5kTGFzdEtleWAsXG4gICAqIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcywgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgY29sbGVjdGlvbmBcbiAgICogdXNpbmcgYGVhY2hGdW5jYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhY2hGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYGNvbGxlY3Rpb25gLlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZm91bmQgZWxlbWVudCBvciBpdHMga2V5LCBlbHNlIGB1bmRlZmluZWRgLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZUZpbmRLZXkoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBlYWNoRnVuYykge1xuICAgIHZhciByZXN1bHQ7XG4gICAgZWFjaEZ1bmMoY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSkge1xuICAgICAgICByZXN1bHQgPSBrZXk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgIHdpdGhvdXRcbiAgICogc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlRmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCwgZnJvbVJpZ2h0KSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMSA6IC0xKTtcblxuICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pbmRleE9mYCB3aXRob3V0IGBmcm9tSW5kZXhgIGJvdW5kcyBjaGVja3MuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZVxuICAgICAgPyBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KVxuICAgICAgOiBiYXNlRmluZEluZGV4KGFycmF5LCBiYXNlSXNOYU4sIGZyb21JbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBiYXNlSW5kZXhPZmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIGNvbXBhcmF0b3IuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZUluZGV4T2ZXaXRoKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4LCBjb21wYXJhdG9yKSB7XG4gICAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFycmF5W2luZGV4XSwgdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmFOYCB3aXRob3V0IHN1cHBvcnQgZm9yIG51bWJlciBvYmplY3RzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VJc05hTih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVhbmAgYW5kIGBfLm1lYW5CeWAgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBtZWFuLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZU1lYW4oYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgIHJldHVybiBsZW5ndGggPyAoYmFzZVN1bShhcnJheSwgaXRlcmF0ZWUpIC8gbGVuZ3RoKSA6IE5BTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eWAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlUHJvcGVydHkoa2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eU9mYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlUHJvcGVydHlPZihvYmplY3QpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlZHVjZWAgYW5kIGBfLnJlZHVjZVJpZ2h0YCwgd2l0aG91dCBzdXBwb3J0XG4gICAqIGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLCB3aGljaCBpdGVyYXRlcyBvdmVyIGBjb2xsZWN0aW9uYCB1c2luZyBgZWFjaEZ1bmNgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEBwYXJhbSB7Kn0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgdmFsdWUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5pdEFjY3VtIFNwZWNpZnkgdXNpbmcgdGhlIGZpcnN0IG9yIGxhc3QgZWxlbWVudCBvZlxuICAgKiAgYGNvbGxlY3Rpb25gIGFzIHRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYWNoRnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGBjb2xsZWN0aW9uYC5cbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVJlZHVjZShjb2xsZWN0aW9uLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSwgZWFjaEZ1bmMpIHtcbiAgICBlYWNoRnVuYyhjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gaW5pdEFjY3VtXG4gICAgICAgID8gKGluaXRBY2N1bSA9IGZhbHNlLCB2YWx1ZSlcbiAgICAgICAgOiBpdGVyYXRlZShhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydEJ5YCB3aGljaCB1c2VzIGBjb21wYXJlcmAgdG8gZGVmaW5lIHRoZVxuICAgKiBzb3J0IG9yZGVyIG9mIGBhcnJheWAgYW5kIHJlcGxhY2VzIGNyaXRlcmlhIG9iamVjdHMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nXG4gICAqIHZhbHVlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNvcnQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmVyIFRoZSBmdW5jdGlvbiB0byBkZWZpbmUgc29ydCBvcmRlci5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlU29ydEJ5KGFycmF5LCBjb21wYXJlcikge1xuICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICBhcnJheS5zb3J0KGNvbXBhcmVyKTtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIGFycmF5W2xlbmd0aF0gPSBhcnJheVtsZW5ndGhdLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc3VtYCBhbmQgYF8uc3VtQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3VtLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVN1bShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgcmVzdWx0LFxuICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIGN1cnJlbnQgPSBpdGVyYXRlZShhcnJheVtpbmRleF0pO1xuICAgICAgaWYgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGN1cnJlbnQgOiAocmVzdWx0ICsgY3VycmVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICAgKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvUGFpcnNgIGFuZCBgXy50b1BhaXJzSW5gIHdoaWNoIGNyZWF0ZXMgYW4gYXJyYXlcbiAgICogb2Yga2V5LXZhbHVlIHBhaXJzIGZvciBgb2JqZWN0YCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eSBuYW1lcyBvZiBgcHJvcHNgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBnZXQgdmFsdWVzIGZvci5cbiAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVRvUGFpcnMob2JqZWN0LCBwcm9wcykge1xuICAgIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gW2tleSwgb2JqZWN0W2tleV1dO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRyaW1gLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlVHJpbShzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nXG4gICAgICA/IHN0cmluZy5zbGljZSgwLCB0cmltbWVkRW5kSW5kZXgoc3RyaW5nKSArIDEpLnJlcGxhY2UocmVUcmltU3RhcnQsICcnKVxuICAgICAgOiBzdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICAgKiBhcnJheSBvZiBgb2JqZWN0YCBwcm9wZXJ0eSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkgbmFtZXNcbiAgICogb2YgYHByb3BzYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICAgIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gb2JqZWN0W2tleV07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICAgIHJldHVybiBjYWNoZS5oYXMoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltU3RhcnRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHN0cmluZyBzeW1ib2xcbiAgICogdGhhdCBpcyBub3QgZm91bmQgaW4gdGhlIGNoYXJhY3RlciBzeW1ib2xzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBzdHJTeW1ib2xzIFRoZSBzdHJpbmcgc3ltYm9scyB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0ge0FycmF5fSBjaHJTeW1ib2xzIFRoZSBjaGFyYWN0ZXIgc3ltYm9scyB0byBmaW5kLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgdW5tYXRjaGVkIHN0cmluZyBzeW1ib2wuXG4gICAqL1xuICBmdW5jdGlvbiBjaGFyc1N0YXJ0SW5kZXgoc3RyU3ltYm9scywgY2hyU3ltYm9scykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBzdHJTeW1ib2xzLmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoICYmIGJhc2VJbmRleE9mKGNoclN5bWJvbHMsIHN0clN5bWJvbHNbaW5kZXhdLCAwKSA+IC0xKSB7fVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltRW5kYCB0byBnZXQgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHN0cmluZyBzeW1ib2xcbiAgICogdGhhdCBpcyBub3QgZm91bmQgaW4gdGhlIGNoYXJhY3RlciBzeW1ib2xzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBzdHJTeW1ib2xzIFRoZSBzdHJpbmcgc3ltYm9scyB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0ge0FycmF5fSBjaHJTeW1ib2xzIFRoZSBjaGFyYWN0ZXIgc3ltYm9scyB0byBmaW5kLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCB1bm1hdGNoZWQgc3RyaW5nIHN5bWJvbC5cbiAgICovXG4gIGZ1bmN0aW9uIGNoYXJzRW5kSW5kZXgoc3RyU3ltYm9scywgY2hyU3ltYm9scykge1xuICAgIHZhciBpbmRleCA9IHN0clN5bWJvbHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGluZGV4LS0gJiYgYmFzZUluZGV4T2YoY2hyU3ltYm9scywgc3RyU3ltYm9sc1tpbmRleF0sIDApID4gLTEpIHt9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG51bWJlciBvZiBgcGxhY2Vob2xkZXJgIG9jY3VycmVuY2VzIGluIGBhcnJheWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB0byBzZWFyY2ggZm9yLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciBjb3VudC5cbiAgICovXG4gIGZ1bmN0aW9uIGNvdW50SG9sZGVycyhhcnJheSwgcGxhY2Vob2xkZXIpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICByZXN1bHQgPSAwO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICBpZiAoYXJyYXlbbGVuZ3RoXSA9PT0gcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgKytyZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy5kZWJ1cnJgIHRvIGNvbnZlcnQgTGF0aW4tMSBTdXBwbGVtZW50IGFuZCBMYXRpbiBFeHRlbmRlZC1BXG4gICAqIGxldHRlcnMgdG8gYmFzaWMgTGF0aW4gbGV0dGVycy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxldHRlciBUaGUgbWF0Y2hlZCBsZXR0ZXIgdG8gZGVidXJyLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBkZWJ1cnJlZCBsZXR0ZXIuXG4gICAqL1xuICB2YXIgZGVidXJyTGV0dGVyID0gYmFzZVByb3BlcnR5T2YoZGVidXJyZWRMZXR0ZXJzKTtcblxuICAvKipcbiAgICogVXNlZCBieSBgXy5lc2NhcGVgIHRvIGNvbnZlcnQgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgKi9cbiAgdmFyIGVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbEVzY2FwZXMpO1xuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLnRlbXBsYXRlYCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNociBUaGUgbWF0Y2hlZCBjaGFyYWN0ZXIgdG8gZXNjYXBlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICovXG4gIGZ1bmN0aW9uIGVzY2FwZVN0cmluZ0NoYXIoY2hyKSB7XG4gICAgcmV0dXJuICdcXFxcJyArIHN0cmluZ0VzY2FwZXNbY2hyXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBVbmljb2RlIHN5bWJvbHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSBzeW1ib2wgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGhhc1VuaWNvZGUoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHJlSGFzVW5pY29kZS50ZXN0KHN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGBzdHJpbmdgIGNvbnRhaW5zIGEgd29yZCBjb21wb3NlZCBvZiBVbmljb2RlIHN5bWJvbHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSB3b3JkIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBoYXNVbmljb2RlV29yZChzdHJpbmcpIHtcbiAgICByZXR1cm4gcmVIYXNVbmljb2RlV29yZC50ZXN0KHN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYGl0ZXJhdG9yYCB0byBhbiBhcnJheS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IGl0ZXJhdG9yIFRoZSBpdGVyYXRvciB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIGl0ZXJhdG9yVG9BcnJheShpdGVyYXRvcikge1xuICAgIHZhciBkYXRhLFxuICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgIHdoaWxlICghKGRhdGEgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGRhdGEudmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAgICovXG4gIGZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICAgIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAqL1xuICBmdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBgcGxhY2Vob2xkZXJgIGVsZW1lbnRzIGluIGBhcnJheWAgd2l0aCBhbiBpbnRlcm5hbCBwbGFjZWhvbGRlclxuICAgKiBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB0aGVpciBpbmRleGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB0byByZXBsYWNlLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVwbGFjZUhvbGRlcnMoYXJyYXksIHBsYWNlaG9sZGVyKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgICBpZiAodmFsdWUgPT09IHBsYWNlaG9sZGVyIHx8IHZhbHVlID09PSBQTEFDRUhPTERFUikge1xuICAgICAgICBhcnJheVtpbmRleF0gPSBQTEFDRUhPTERFUjtcbiAgICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICAgKi9cbiAgZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xuXG4gICAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYHNldGAgdG8gaXRzIHZhbHVlLXZhbHVlIHBhaXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZS12YWx1ZSBwYWlycy5cbiAgICovXG4gIGZ1bmN0aW9uIHNldFRvUGFpcnMoc2V0KSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICAgIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXN1bHRbKytpbmRleF0gPSBbdmFsdWUsIHZhbHVlXTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5pbmRleE9mYCB3aGljaCBwZXJmb3JtcyBzdHJpY3QgZXF1YWxpdHlcbiAgICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAqL1xuICBmdW5jdGlvbiBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gICAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5sYXN0SW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gICAqIGNvbXBhcmlzb25zIG9mIHZhbHVlcywgaS5lLiBgPT09YC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgKi9cbiAgZnVuY3Rpb24gc3RyaWN0TGFzdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgaW5kZXggPSBmcm9tSW5kZXggKyAxO1xuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBudW1iZXIgb2Ygc3ltYm9scyBpbiBgc3RyaW5nYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICAgKi9cbiAgZnVuY3Rpb24gc3RyaW5nU2l6ZShzdHJpbmcpIHtcbiAgICByZXR1cm4gaGFzVW5pY29kZShzdHJpbmcpXG4gICAgICA/IHVuaWNvZGVTaXplKHN0cmluZylcbiAgICAgIDogYXNjaWlTaXplKHN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYHN0cmluZ2AgdG8gYW4gYXJyYXkuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIHN0cmluZ1RvQXJyYXkoc3RyaW5nKSB7XG4gICAgcmV0dXJuIGhhc1VuaWNvZGUoc3RyaW5nKVxuICAgICAgPyB1bmljb2RlVG9BcnJheShzdHJpbmcpXG4gICAgICA6IGFzY2lpVG9BcnJheShzdHJpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1FbmRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2VcbiAgICogY2hhcmFjdGVyIG9mIGBzdHJpbmdgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyLlxuICAgKi9cbiAgZnVuY3Rpb24gdHJpbW1lZEVuZEluZGV4KHN0cmluZykge1xuICAgIHZhciBpbmRleCA9IHN0cmluZy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaW5kZXgtLSAmJiByZVdoaXRlc3BhY2UudGVzdChzdHJpbmcuY2hhckF0KGluZGV4KSkpIHt9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgYF8udW5lc2NhcGVgIHRvIGNvbnZlcnQgSFRNTCBlbnRpdGllcyB0byBjaGFyYWN0ZXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byB1bmVzY2FwZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdW5lc2NhcGVkIGNoYXJhY3Rlci5cbiAgICovXG4gIHZhciB1bmVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbFVuZXNjYXBlcyk7XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNpemUgb2YgYSBVbmljb2RlIGBzdHJpbmdgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgaW5zcGVjdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3RyaW5nIHNpemUuXG4gICAqL1xuICBmdW5jdGlvbiB1bmljb2RlU2l6ZShzdHJpbmcpIHtcbiAgICB2YXIgcmVzdWx0ID0gcmVVbmljb2RlLmxhc3RJbmRleCA9IDA7XG4gICAgd2hpbGUgKHJlVW5pY29kZS50ZXN0KHN0cmluZykpIHtcbiAgICAgICsrcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgVW5pY29kZSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gdW5pY29kZVRvQXJyYXkoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGUpIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0cyBhIFVuaWNvZGUgYHN0cmluZ2AgaW50byBhbiBhcnJheSBvZiBpdHMgd29yZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd29yZHMgb2YgYHN0cmluZ2AuXG4gICAqL1xuICBmdW5jdGlvbiB1bmljb2RlV29yZHMoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGVXb3JkKSB8fCBbXTtcbiAgfVxuXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgcHJpc3RpbmUgYGxvZGFzaGAgZnVuY3Rpb24gdXNpbmcgdGhlIGBjb250ZXh0YCBvYmplY3QuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICogQG1lbWJlck9mIF9cbiAgICogQHNpbmNlIDEuMS4wXG4gICAqIEBjYXRlZ29yeSBVdGlsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dD1yb290XSBUaGUgY29udGV4dCBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBhIG5ldyBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogXy5taXhpbih7ICdmb28nOiBfLmNvbnN0YW50KCdmb28nKSB9KTtcbiAgICpcbiAgICogdmFyIGxvZGFzaCA9IF8ucnVuSW5Db250ZXh0KCk7XG4gICAqIGxvZGFzaC5taXhpbih7ICdiYXInOiBsb2Rhc2guY29uc3RhbnQoJ2JhcicpIH0pO1xuICAgKlxuICAgKiBfLmlzRnVuY3Rpb24oXy5mb28pO1xuICAgKiAvLyA9PiB0cnVlXG4gICAqIF8uaXNGdW5jdGlvbihfLmJhcik7XG4gICAqIC8vID0+IGZhbHNlXG4gICAqXG4gICAqIGxvZGFzaC5pc0Z1bmN0aW9uKGxvZGFzaC5mb28pO1xuICAgKiAvLyA9PiBmYWxzZVxuICAgKiBsb2Rhc2guaXNGdW5jdGlvbihsb2Rhc2guYmFyKTtcbiAgICogLy8gPT4gdHJ1ZVxuICAgKlxuICAgKiAvLyBDcmVhdGUgYSBzdXBlZC11cCBgZGVmZXJgIGluIE5vZGUuanMuXG4gICAqIHZhciBkZWZlciA9IF8ucnVuSW5Db250ZXh0KHsgJ3NldFRpbWVvdXQnOiBzZXRJbW1lZGlhdGUgfSkuZGVmZXI7XG4gICAqL1xuICB2YXIgcnVuSW5Db250ZXh0ID0gKGZ1bmN0aW9uIHJ1bkluQ29udGV4dChjb250ZXh0KSB7XG4gICAgY29udGV4dCA9IGNvbnRleHQgPT0gbnVsbCA/IHJvb3QgOiBfLmRlZmF1bHRzKHJvb3QuT2JqZWN0KCksIGNvbnRleHQsIF8ucGljayhyb290LCBjb250ZXh0UHJvcHMpKTtcblxuICAgIC8qKiBCdWlsdC1pbiBjb25zdHJ1Y3RvciByZWZlcmVuY2VzLiAqL1xuICAgIHZhciBBcnJheSA9IGNvbnRleHQuQXJyYXksXG4gICAgICAgIERhdGUgPSBjb250ZXh0LkRhdGUsXG4gICAgICAgIEVycm9yID0gY29udGV4dC5FcnJvcixcbiAgICAgICAgRnVuY3Rpb24gPSBjb250ZXh0LkZ1bmN0aW9uLFxuICAgICAgICBNYXRoID0gY29udGV4dC5NYXRoLFxuICAgICAgICBPYmplY3QgPSBjb250ZXh0Lk9iamVjdCxcbiAgICAgICAgUmVnRXhwID0gY29udGV4dC5SZWdFeHAsXG4gICAgICAgIFN0cmluZyA9IGNvbnRleHQuU3RyaW5nLFxuICAgICAgICBUeXBlRXJyb3IgPSBjb250ZXh0LlR5cGVFcnJvcjtcblxuICAgIC8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbiAgICB2YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSxcbiAgICAgICAgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgICAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbiAgICAvKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG4gICAgdmFyIGNvcmVKc0RhdGEgPSBjb250ZXh0WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxuICAgIC8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbiAgICB2YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4gICAgLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG4gICAgdmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbiAgICAvKiogVXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgSURzLiAqL1xuICAgIHZhciBpZENvdW50ZXIgPSAwO1xuXG4gICAgLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbiAgICB2YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgICAgIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gICAgICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG4gICAgfSgpKTtcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAgICAgKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAgICAgKiBvZiB2YWx1ZXMuXG4gICAgICovXG4gICAgdmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbiAgICAvKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG4gICAgdmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4gICAgLyoqIFVzZWQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYF9gIHJlZmVyZW5jZSBpbiBgXy5ub0NvbmZsaWN0YC4gKi9cbiAgICB2YXIgb2xkRGFzaCA9IHJvb3QuXztcblxuICAgIC8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG4gICAgdmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgICAgIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gICAgICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbiAgICApO1xuXG4gICAgLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG4gICAgdmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyBjb250ZXh0LkJ1ZmZlciA6IHVuZGVmaW5lZCxcbiAgICAgICAgU3ltYm9sID0gY29udGV4dC5TeW1ib2wsXG4gICAgICAgIFVpbnQ4QXJyYXkgPSBjb250ZXh0LlVpbnQ4QXJyYXksXG4gICAgICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkLFxuICAgICAgICBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KSxcbiAgICAgICAgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZSxcbiAgICAgICAgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZSxcbiAgICAgICAgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2UsXG4gICAgICAgIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkLFxuICAgICAgICBzeW1JdGVyYXRvciA9IFN5bWJvbCA/IFN5bWJvbC5pdGVyYXRvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbiAgICB2YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgICAgICBmdW5jKHt9LCAnJywge30pO1xuICAgICAgICByZXR1cm4gZnVuYztcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfSgpKTtcblxuICAgIC8qKiBNb2NrZWQgYnVpbHQtaW5zLiAqL1xuICAgIHZhciBjdHhDbGVhclRpbWVvdXQgPSBjb250ZXh0LmNsZWFyVGltZW91dCAhPT0gcm9vdC5jbGVhclRpbWVvdXQgJiYgY29udGV4dC5jbGVhclRpbWVvdXQsXG4gICAgICAgIGN0eE5vdyA9IERhdGUgJiYgRGF0ZS5ub3cgIT09IHJvb3QuRGF0ZS5ub3cgJiYgRGF0ZS5ub3csXG4gICAgICAgIGN0eFNldFRpbWVvdXQgPSBjb250ZXh0LnNldFRpbWVvdXQgIT09IHJvb3Quc2V0VGltZW91dCAmJiBjb250ZXh0LnNldFRpbWVvdXQ7XG5cbiAgICAvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG4gICAgdmFyIG5hdGl2ZUNlaWwgPSBNYXRoLmNlaWwsXG4gICAgICAgIG5hdGl2ZUZsb29yID0gTWF0aC5mbG9vcixcbiAgICAgICAgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsXG4gICAgICAgIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgICAgICBuYXRpdmVJc0Zpbml0ZSA9IGNvbnRleHQuaXNGaW5pdGUsXG4gICAgICAgIG5hdGl2ZUpvaW4gPSBhcnJheVByb3RvLmpvaW4sXG4gICAgICAgIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpLFxuICAgICAgICBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICAgICAgbmF0aXZlTWluID0gTWF0aC5taW4sXG4gICAgICAgIG5hdGl2ZU5vdyA9IERhdGUubm93LFxuICAgICAgICBuYXRpdmVQYXJzZUludCA9IGNvbnRleHQucGFyc2VJbnQsXG4gICAgICAgIG5hdGl2ZVJhbmRvbSA9IE1hdGgucmFuZG9tLFxuICAgICAgICBuYXRpdmVSZXZlcnNlID0gYXJyYXlQcm90by5yZXZlcnNlO1xuXG4gICAgLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xuICAgIHZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShjb250ZXh0LCAnRGF0YVZpZXcnKSxcbiAgICAgICAgTWFwID0gZ2V0TmF0aXZlKGNvbnRleHQsICdNYXAnKSxcbiAgICAgICAgUHJvbWlzZSA9IGdldE5hdGl2ZShjb250ZXh0LCAnUHJvbWlzZScpLFxuICAgICAgICBTZXQgPSBnZXROYXRpdmUoY29udGV4dCwgJ1NldCcpLFxuICAgICAgICBXZWFrTWFwID0gZ2V0TmF0aXZlKGNvbnRleHQsICdXZWFrTWFwJyksXG4gICAgICAgIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxuICAgIC8qKiBVc2VkIHRvIHN0b3JlIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xuICAgIHZhciBtZXRhTWFwID0gV2Vha01hcCAmJiBuZXcgV2Vha01hcDtcblxuICAgIC8qKiBVc2VkIHRvIGxvb2t1cCB1bm1pbmlmaWVkIGZ1bmN0aW9uIG5hbWVzLiAqL1xuICAgIHZhciByZWFsTmFtZXMgPSB7fTtcblxuICAgIC8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG4gICAgdmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICAgICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgICAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4gICAgLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG4gICAgdmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZCxcbiAgICAgICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBsb2Rhc2hgIG9iamVjdCB3aGljaCB3cmFwcyBgdmFsdWVgIHRvIGVuYWJsZSBpbXBsaWNpdCBtZXRob2RcbiAgICAgKiBjaGFpbiBzZXF1ZW5jZXMuIE1ldGhvZHMgdGhhdCBvcGVyYXRlIG9uIGFuZCByZXR1cm4gYXJyYXlzLCBjb2xsZWN0aW9ucyxcbiAgICAgKiBhbmQgZnVuY3Rpb25zIGNhbiBiZSBjaGFpbmVkIHRvZ2V0aGVyLiBNZXRob2RzIHRoYXQgcmV0cmlldmUgYSBzaW5nbGUgdmFsdWVcbiAgICAgKiBvciBtYXkgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBlbmQgdGhlIGNoYWluIHNlcXVlbmNlXG4gICAgICogYW5kIHJldHVybiB0aGUgdW53cmFwcGVkIHZhbHVlLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBtdXN0IGJlIHVud3JhcHBlZFxuICAgICAqIHdpdGggYF8jdmFsdWVgLlxuICAgICAqXG4gICAgICogRXhwbGljaXQgY2hhaW4gc2VxdWVuY2VzLCB3aGljaCBtdXN0IGJlIHVud3JhcHBlZCB3aXRoIGBfI3ZhbHVlYCwgbWF5IGJlXG4gICAgICogZW5hYmxlZCB1c2luZyBgXy5jaGFpbmAuXG4gICAgICpcbiAgICAgKiBUaGUgZXhlY3V0aW9uIG9mIGNoYWluZWQgbWV0aG9kcyBpcyBsYXp5LCB0aGF0IGlzLCBpdCdzIGRlZmVycmVkIHVudGlsXG4gICAgICogYF8jdmFsdWVgIGlzIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBjYWxsZWQuXG4gICAgICpcbiAgICAgKiBMYXp5IGV2YWx1YXRpb24gYWxsb3dzIHNldmVyYWwgbWV0aG9kcyB0byBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbi5cbiAgICAgKiBTaG9ydGN1dCBmdXNpb24gaXMgYW4gb3B0aW1pemF0aW9uIHRvIG1lcmdlIGl0ZXJhdGVlIGNhbGxzOyB0aGlzIGF2b2lkc1xuICAgICAqIHRoZSBjcmVhdGlvbiBvZiBpbnRlcm1lZGlhdGUgYXJyYXlzIGFuZCBjYW4gZ3JlYXRseSByZWR1Y2UgdGhlIG51bWJlciBvZlxuICAgICAqIGl0ZXJhdGVlIGV4ZWN1dGlvbnMuIFNlY3Rpb25zIG9mIGEgY2hhaW4gc2VxdWVuY2UgcXVhbGlmeSBmb3Igc2hvcnRjdXRcbiAgICAgKiBmdXNpb24gaWYgdGhlIHNlY3Rpb24gaXMgYXBwbGllZCB0byBhbiBhcnJheSBhbmQgaXRlcmF0ZWVzIGFjY2VwdCBvbmx5XG4gICAgICogb25lIGFyZ3VtZW50LiBUaGUgaGV1cmlzdGljIGZvciB3aGV0aGVyIGEgc2VjdGlvbiBxdWFsaWZpZXMgZm9yIHNob3J0Y3V0XG4gICAgICogZnVzaW9uIGlzIHN1YmplY3QgdG8gY2hhbmdlLlxuICAgICAqXG4gICAgICogQ2hhaW5pbmcgaXMgc3VwcG9ydGVkIGluIGN1c3RvbSBidWlsZHMgYXMgbG9uZyBhcyB0aGUgYF8jdmFsdWVgIG1ldGhvZCBpc1xuICAgICAqIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLlxuICAgICAqXG4gICAgICogSW4gYWRkaXRpb24gdG8gbG9kYXNoIG1ldGhvZHMsIHdyYXBwZXJzIGhhdmUgYEFycmF5YCBhbmQgYFN0cmluZ2AgbWV0aG9kcy5cbiAgICAgKlxuICAgICAqIFRoZSB3cmFwcGVyIGBBcnJheWAgbWV0aG9kcyBhcmU6XG4gICAgICogYGNvbmNhdGAsIGBqb2luYCwgYHBvcGAsIGBwdXNoYCwgYHNoaWZ0YCwgYHNvcnRgLCBgc3BsaWNlYCwgYW5kIGB1bnNoaWZ0YFxuICAgICAqXG4gICAgICogVGhlIHdyYXBwZXIgYFN0cmluZ2AgbWV0aG9kcyBhcmU6XG4gICAgICogYHJlcGxhY2VgIGFuZCBgc3BsaXRgXG4gICAgICpcbiAgICAgKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24gYXJlOlxuICAgICAqIGBhdGAsIGBjb21wYWN0YCwgYGRyb3BgLCBgZHJvcFJpZ2h0YCwgYGRyb3BXaGlsZWAsIGBmaWx0ZXJgLCBgZmluZGAsXG4gICAgICogYGZpbmRMYXN0YCwgYGhlYWRgLCBgaW5pdGlhbGAsIGBsYXN0YCwgYG1hcGAsIGByZWplY3RgLCBgcmV2ZXJzZWAsIGBzbGljZWAsXG4gICAgICogYHRhaWxgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLCBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYW5kIGB0b0FycmF5YFxuICAgICAqXG4gICAgICogVGhlIGNoYWluYWJsZSB3cmFwcGVyIG1ldGhvZHMgYXJlOlxuICAgICAqIGBhZnRlcmAsIGBhcnlgLCBgYXNzaWduYCwgYGFzc2lnbkluYCwgYGFzc2lnbkluV2l0aGAsIGBhc3NpZ25XaXRoYCwgYGF0YCxcbiAgICAgKiBgYmVmb3JlYCwgYGJpbmRgLCBgYmluZEFsbGAsIGBiaW5kS2V5YCwgYGNhc3RBcnJheWAsIGBjaGFpbmAsIGBjaHVua2AsXG4gICAgICogYGNvbW1pdGAsIGBjb21wYWN0YCwgYGNvbmNhdGAsIGBjb25mb3Jtc2AsIGBjb25zdGFudGAsIGBjb3VudEJ5YCwgYGNyZWF0ZWAsXG4gICAgICogYGN1cnJ5YCwgYGRlYm91bmNlYCwgYGRlZmF1bHRzYCwgYGRlZmF1bHRzRGVlcGAsIGBkZWZlcmAsIGBkZWxheWAsXG4gICAgICogYGRpZmZlcmVuY2VgLCBgZGlmZmVyZW5jZUJ5YCwgYGRpZmZlcmVuY2VXaXRoYCwgYGRyb3BgLCBgZHJvcFJpZ2h0YCxcbiAgICAgKiBgZHJvcFJpZ2h0V2hpbGVgLCBgZHJvcFdoaWxlYCwgYGV4dGVuZGAsIGBleHRlbmRXaXRoYCwgYGZpbGxgLCBgZmlsdGVyYCxcbiAgICAgKiBgZmxhdE1hcGAsIGBmbGF0TWFwRGVlcGAsIGBmbGF0TWFwRGVwdGhgLCBgZmxhdHRlbmAsIGBmbGF0dGVuRGVlcGAsXG4gICAgICogYGZsYXR0ZW5EZXB0aGAsIGBmbGlwYCwgYGZsb3dgLCBgZmxvd1JpZ2h0YCwgYGZyb21QYWlyc2AsIGBmdW5jdGlvbnNgLFxuICAgICAqIGBmdW5jdGlvbnNJbmAsIGBncm91cEJ5YCwgYGluaXRpYWxgLCBgaW50ZXJzZWN0aW9uYCwgYGludGVyc2VjdGlvbkJ5YCxcbiAgICAgKiBgaW50ZXJzZWN0aW9uV2l0aGAsIGBpbnZlcnRgLCBgaW52ZXJ0QnlgLCBgaW52b2tlTWFwYCwgYGl0ZXJhdGVlYCwgYGtleUJ5YCxcbiAgICAgKiBga2V5c2AsIGBrZXlzSW5gLCBgbWFwYCwgYG1hcEtleXNgLCBgbWFwVmFsdWVzYCwgYG1hdGNoZXNgLCBgbWF0Y2hlc1Byb3BlcnR5YCxcbiAgICAgKiBgbWVtb2l6ZWAsIGBtZXJnZWAsIGBtZXJnZVdpdGhgLCBgbWV0aG9kYCwgYG1ldGhvZE9mYCwgYG1peGluYCwgYG5lZ2F0ZWAsXG4gICAgICogYG50aEFyZ2AsIGBvbWl0YCwgYG9taXRCeWAsIGBvbmNlYCwgYG9yZGVyQnlgLCBgb3ZlcmAsIGBvdmVyQXJnc2AsXG4gICAgICogYG92ZXJFdmVyeWAsIGBvdmVyU29tZWAsIGBwYXJ0aWFsYCwgYHBhcnRpYWxSaWdodGAsIGBwYXJ0aXRpb25gLCBgcGlja2AsXG4gICAgICogYHBpY2tCeWAsIGBwbGFudGAsIGBwcm9wZXJ0eWAsIGBwcm9wZXJ0eU9mYCwgYHB1bGxgLCBgcHVsbEFsbGAsIGBwdWxsQWxsQnlgLFxuICAgICAqIGBwdWxsQWxsV2l0aGAsIGBwdWxsQXRgLCBgcHVzaGAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlYXJnYCwgYHJlamVjdGAsXG4gICAgICogYHJlbW92ZWAsIGByZXN0YCwgYHJldmVyc2VgLCBgc2FtcGxlU2l6ZWAsIGBzZXRgLCBgc2V0V2l0aGAsIGBzaHVmZmxlYCxcbiAgICAgKiBgc2xpY2VgLCBgc29ydGAsIGBzb3J0QnlgLCBgc3BsaWNlYCwgYHNwcmVhZGAsIGB0YWlsYCwgYHRha2VgLCBgdGFrZVJpZ2h0YCxcbiAgICAgKiBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYHRhcGAsIGB0aHJvdHRsZWAsIGB0aHJ1YCwgYHRvQXJyYXlgLFxuICAgICAqIGB0b1BhaXJzYCwgYHRvUGFpcnNJbmAsIGB0b1BhdGhgLCBgdG9QbGFpbk9iamVjdGAsIGB0cmFuc2Zvcm1gLCBgdW5hcnlgLFxuICAgICAqIGB1bmlvbmAsIGB1bmlvbkJ5YCwgYHVuaW9uV2l0aGAsIGB1bmlxYCwgYHVuaXFCeWAsIGB1bmlxV2l0aGAsIGB1bnNldGAsXG4gICAgICogYHVuc2hpZnRgLCBgdW56aXBgLCBgdW56aXBXaXRoYCwgYHVwZGF0ZWAsIGB1cGRhdGVXaXRoYCwgYHZhbHVlc2AsXG4gICAgICogYHZhbHVlc0luYCwgYHdpdGhvdXRgLCBgd3JhcGAsIGB4b3JgLCBgeG9yQnlgLCBgeG9yV2l0aGAsIGB6aXBgLFxuICAgICAqIGB6aXBPYmplY3RgLCBgemlwT2JqZWN0RGVlcGAsIGFuZCBgemlwV2l0aGBcbiAgICAgKlxuICAgICAqIFRoZSB3cmFwcGVyIG1ldGhvZHMgdGhhdCBhcmUgKipub3QqKiBjaGFpbmFibGUgYnkgZGVmYXVsdCBhcmU6XG4gICAgICogYGFkZGAsIGBhdHRlbXB0YCwgYGNhbWVsQ2FzZWAsIGBjYXBpdGFsaXplYCwgYGNlaWxgLCBgY2xhbXBgLCBgY2xvbmVgLFxuICAgICAqIGBjbG9uZURlZXBgLCBgY2xvbmVEZWVwV2l0aGAsIGBjbG9uZVdpdGhgLCBgY29uZm9ybXNUb2AsIGBkZWJ1cnJgLFxuICAgICAqIGBkZWZhdWx0VG9gLCBgZGl2aWRlYCwgYGVhY2hgLCBgZWFjaFJpZ2h0YCwgYGVuZHNXaXRoYCwgYGVxYCwgYGVzY2FwZWAsXG4gICAgICogYGVzY2FwZVJlZ0V4cGAsIGBldmVyeWAsIGBmaW5kYCwgYGZpbmRJbmRleGAsIGBmaW5kS2V5YCwgYGZpbmRMYXN0YCxcbiAgICAgKiBgZmluZExhc3RJbmRleGAsIGBmaW5kTGFzdEtleWAsIGBmaXJzdGAsIGBmbG9vcmAsIGBmb3JFYWNoYCwgYGZvckVhY2hSaWdodGAsXG4gICAgICogYGZvckluYCwgYGZvckluUmlnaHRgLCBgZm9yT3duYCwgYGZvck93blJpZ2h0YCwgYGdldGAsIGBndGAsIGBndGVgLCBgaGFzYCxcbiAgICAgKiBgaGFzSW5gLCBgaGVhZGAsIGBpZGVudGl0eWAsIGBpbmNsdWRlc2AsIGBpbmRleE9mYCwgYGluUmFuZ2VgLCBgaW52b2tlYCxcbiAgICAgKiBgaXNBcmd1bWVudHNgLCBgaXNBcnJheWAsIGBpc0FycmF5QnVmZmVyYCwgYGlzQXJyYXlMaWtlYCwgYGlzQXJyYXlMaWtlT2JqZWN0YCxcbiAgICAgKiBgaXNCb29sZWFuYCwgYGlzQnVmZmVyYCwgYGlzRGF0ZWAsIGBpc0VsZW1lbnRgLCBgaXNFbXB0eWAsIGBpc0VxdWFsYCxcbiAgICAgKiBgaXNFcXVhbFdpdGhgLCBgaXNFcnJvcmAsIGBpc0Zpbml0ZWAsIGBpc0Z1bmN0aW9uYCwgYGlzSW50ZWdlcmAsIGBpc0xlbmd0aGAsXG4gICAgICogYGlzTWFwYCwgYGlzTWF0Y2hgLCBgaXNNYXRjaFdpdGhgLCBgaXNOYU5gLCBgaXNOYXRpdmVgLCBgaXNOaWxgLCBgaXNOdWxsYCxcbiAgICAgKiBgaXNOdW1iZXJgLCBgaXNPYmplY3RgLCBgaXNPYmplY3RMaWtlYCwgYGlzUGxhaW5PYmplY3RgLCBgaXNSZWdFeHBgLFxuICAgICAqIGBpc1NhZmVJbnRlZ2VyYCwgYGlzU2V0YCwgYGlzU3RyaW5nYCwgYGlzVW5kZWZpbmVkYCwgYGlzVHlwZWRBcnJheWAsXG4gICAgICogYGlzV2Vha01hcGAsIGBpc1dlYWtTZXRgLCBgam9pbmAsIGBrZWJhYkNhc2VgLCBgbGFzdGAsIGBsYXN0SW5kZXhPZmAsXG4gICAgICogYGxvd2VyQ2FzZWAsIGBsb3dlckZpcnN0YCwgYGx0YCwgYGx0ZWAsIGBtYXhgLCBgbWF4QnlgLCBgbWVhbmAsIGBtZWFuQnlgLFxuICAgICAqIGBtaW5gLCBgbWluQnlgLCBgbXVsdGlwbHlgLCBgbm9Db25mbGljdGAsIGBub29wYCwgYG5vd2AsIGBudGhgLCBgcGFkYCxcbiAgICAgKiBgcGFkRW5kYCwgYHBhZFN0YXJ0YCwgYHBhcnNlSW50YCwgYHBvcGAsIGByYW5kb21gLCBgcmVkdWNlYCwgYHJlZHVjZVJpZ2h0YCxcbiAgICAgKiBgcmVwZWF0YCwgYHJlc3VsdGAsIGByb3VuZGAsIGBydW5JbkNvbnRleHRgLCBgc2FtcGxlYCwgYHNoaWZ0YCwgYHNpemVgLFxuICAgICAqIGBzbmFrZUNhc2VgLCBgc29tZWAsIGBzb3J0ZWRJbmRleGAsIGBzb3J0ZWRJbmRleEJ5YCwgYHNvcnRlZExhc3RJbmRleGAsXG4gICAgICogYHNvcnRlZExhc3RJbmRleEJ5YCwgYHN0YXJ0Q2FzZWAsIGBzdGFydHNXaXRoYCwgYHN0dWJBcnJheWAsIGBzdHViRmFsc2VgLFxuICAgICAqIGBzdHViT2JqZWN0YCwgYHN0dWJTdHJpbmdgLCBgc3R1YlRydWVgLCBgc3VidHJhY3RgLCBgc3VtYCwgYHN1bUJ5YCxcbiAgICAgKiBgdGVtcGxhdGVgLCBgdGltZXNgLCBgdG9GaW5pdGVgLCBgdG9JbnRlZ2VyYCwgYHRvSlNPTmAsIGB0b0xlbmd0aGAsXG4gICAgICogYHRvTG93ZXJgLCBgdG9OdW1iZXJgLCBgdG9TYWZlSW50ZWdlcmAsIGB0b1N0cmluZ2AsIGB0b1VwcGVyYCwgYHRyaW1gLFxuICAgICAqIGB0cmltRW5kYCwgYHRyaW1TdGFydGAsIGB0cnVuY2F0ZWAsIGB1bmVzY2FwZWAsIGB1bmlxdWVJZGAsIGB1cHBlckNhc2VgLFxuICAgICAqIGB1cHBlckZpcnN0YCwgYHZhbHVlYCwgYW5kIGB3b3Jkc2BcbiAgICAgKlxuICAgICAqIEBuYW1lIF9cbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcCBpbiBhIGBsb2Rhc2hgIGluc3RhbmNlLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICAgICAqICAgcmV0dXJuIG4gKiBuO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciB3cmFwcGVkID0gXyhbMSwgMiwgM10pO1xuICAgICAqXG4gICAgICogLy8gUmV0dXJucyBhbiB1bndyYXBwZWQgdmFsdWUuXG4gICAgICogd3JhcHBlZC5yZWR1Y2UoXy5hZGQpO1xuICAgICAqIC8vID0+IDZcbiAgICAgKlxuICAgICAqIC8vIFJldHVybnMgYSB3cmFwcGVkIHZhbHVlLlxuICAgICAqIHZhciBzcXVhcmVzID0gd3JhcHBlZC5tYXAoc3F1YXJlKTtcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheShzcXVhcmVzKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KHNxdWFyZXMudmFsdWUoKSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxvZGFzaCh2YWx1ZSkge1xuICAgICAgaWYgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzQXJyYXkodmFsdWUpICYmICEodmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikpIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTG9kYXNoV3JhcHBlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ19fd3JhcHBlZF9fJykpIHtcbiAgICAgICAgICByZXR1cm4gd3JhcHBlckNsb25lKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gICAgICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqL1xuICAgIHZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkge1xuICAgICAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgICAgIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KHByb3RvKSkge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgICAgIH1cbiAgICAgICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICAgICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgfSgpKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBmdW5jdGlvbiB3aG9zZSBwcm90b3R5cGUgY2hhaW4gc2VxdWVuY2Ugd3JhcHBlcnMgaW5oZXJpdCBmcm9tLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTG9kYXNoKCkge1xuICAgICAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBjb25zdHJ1Y3RvciBmb3IgY3JlYXRpbmcgYGxvZGFzaGAgd3JhcHBlciBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoYWluQWxsXSBFbmFibGUgZXhwbGljaXQgbWV0aG9kIGNoYWluIHNlcXVlbmNlcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBMb2Rhc2hXcmFwcGVyKHZhbHVlLCBjaGFpbkFsbCkge1xuICAgICAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICAgICAgdGhpcy5fX2FjdGlvbnNfXyA9IFtdO1xuICAgICAgdGhpcy5fX2NoYWluX18gPSAhIWNoYWluQWxsO1xuICAgICAgdGhpcy5fX2luZGV4X18gPSAwO1xuICAgICAgdGhpcy5fX3ZhbHVlc19fID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzIHVzZWQgYnkgbG9kYXNoIGFyZSBsaWtlIHRob3NlIGluXG4gICAgICogZW1iZWRkZWQgUnVieSAoRVJCKSBhcyB3ZWxsIGFzIEVTMjAxNSB0ZW1wbGF0ZSBzdHJpbmdzLiBDaGFuZ2UgdGhlXG4gICAgICogZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKi9cbiAgICBsb2Rhc2gudGVtcGxhdGVTZXR0aW5ncyA9IHtcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGJlIEhUTUwtZXNjYXBlZC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgICAgICovXG4gICAgICAnZXNjYXBlJzogcmVFc2NhcGUsXG5cbiAgICAgIC8qKlxuICAgICAgICogVXNlZCB0byBkZXRlY3QgY29kZSB0byBiZSBldmFsdWF0ZWQuXG4gICAgICAgKlxuICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgICAgICogQHR5cGUge1JlZ0V4cH1cbiAgICAgICAqL1xuICAgICAgJ2V2YWx1YXRlJzogcmVFdmFsdWF0ZSxcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGluamVjdC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgICAgICovXG4gICAgICAnaW50ZXJwb2xhdGUnOiByZUludGVycG9sYXRlLFxuXG4gICAgICAvKipcbiAgICAgICAqIFVzZWQgdG8gcmVmZXJlbmNlIHRoZSBkYXRhIG9iamVjdCBpbiB0aGUgdGVtcGxhdGUgdGV4dC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICovXG4gICAgICAndmFyaWFibGUnOiAnJyxcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGltcG9ydCB2YXJpYWJsZXMgaW50byB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gICAgICAgKlxuICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAqL1xuICAgICAgJ2ltcG9ydHMnOiB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXG4gICAgICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgICAgICovXG4gICAgICAgICdfJzogbG9kYXNoXG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIEVuc3VyZSB3cmFwcGVycyBhcmUgaW5zdGFuY2VzIG9mIGBiYXNlTG9kYXNoYC5cbiAgICBsb2Rhc2gucHJvdG90eXBlID0gYmFzZUxvZGFzaC5wcm90b3R5cGU7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGxvZGFzaDtcblxuICAgIExvZGFzaFdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG4gICAgTG9kYXNoV3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2Rhc2hXcmFwcGVyO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGxhenkgd3JhcHBlciBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgbGF6eSBldmFsdWF0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIExhenlXcmFwcGVyKHZhbHVlKSB7XG4gICAgICB0aGlzLl9fd3JhcHBlZF9fID0gdmFsdWU7XG4gICAgICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gICAgICB0aGlzLl9fZGlyX18gPSAxO1xuICAgICAgdGhpcy5fX2ZpbHRlcmVkX18gPSBmYWxzZTtcbiAgICAgIHRoaXMuX19pdGVyYXRlZXNfXyA9IFtdO1xuICAgICAgdGhpcy5fX3Rha2VDb3VudF9fID0gTUFYX0FSUkFZX0xFTkdUSDtcbiAgICAgIHRoaXMuX192aWV3c19fID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBsYXp5IHdyYXBwZXIgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBjbG9uZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBgTGF6eVdyYXBwZXJgIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXp5Q2xvbmUoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IExhenlXcmFwcGVyKHRoaXMuX193cmFwcGVkX18pO1xuICAgICAgcmVzdWx0Ll9fYWN0aW9uc19fID0gY29weUFycmF5KHRoaXMuX19hY3Rpb25zX18pO1xuICAgICAgcmVzdWx0Ll9fZGlyX18gPSB0aGlzLl9fZGlyX187XG4gICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gdGhpcy5fX2ZpbHRlcmVkX187XG4gICAgICByZXN1bHQuX19pdGVyYXRlZXNfXyA9IGNvcHlBcnJheSh0aGlzLl9faXRlcmF0ZWVzX18pO1xuICAgICAgcmVzdWx0Ll9fdGFrZUNvdW50X18gPSB0aGlzLl9fdGFrZUNvdW50X187XG4gICAgICByZXN1bHQuX192aWV3c19fID0gY29weUFycmF5KHRoaXMuX192aWV3c19fKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV2ZXJzZXMgdGhlIGRpcmVjdGlvbiBvZiBsYXp5IGl0ZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgcmV2ZXJzZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyByZXZlcnNlZCBgTGF6eVdyYXBwZXJgIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXp5UmV2ZXJzZSgpIHtcbiAgICAgIGlmICh0aGlzLl9fZmlsdGVyZWRfXykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgICByZXN1bHQuX19kaXJfXyA9IC0xO1xuICAgICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0Ll9fZGlyX18gKj0gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dHJhY3RzIHRoZSB1bndyYXBwZWQgdmFsdWUgZnJvbSBpdHMgbGF6eSB3cmFwcGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSB2YWx1ZVxuICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bndyYXBwZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGF6eVZhbHVlKCkge1xuICAgICAgdmFyIGFycmF5ID0gdGhpcy5fX3dyYXBwZWRfXy52YWx1ZSgpLFxuICAgICAgICAgIGRpciA9IHRoaXMuX19kaXJfXyxcbiAgICAgICAgICBpc0FyciA9IGlzQXJyYXkoYXJyYXkpLFxuICAgICAgICAgIGlzUmlnaHQgPSBkaXIgPCAwLFxuICAgICAgICAgIGFyckxlbmd0aCA9IGlzQXJyID8gYXJyYXkubGVuZ3RoIDogMCxcbiAgICAgICAgICB2aWV3ID0gZ2V0VmlldygwLCBhcnJMZW5ndGgsIHRoaXMuX192aWV3c19fKSxcbiAgICAgICAgICBzdGFydCA9IHZpZXcuc3RhcnQsXG4gICAgICAgICAgZW5kID0gdmlldy5lbmQsXG4gICAgICAgICAgbGVuZ3RoID0gZW5kIC0gc3RhcnQsXG4gICAgICAgICAgaW5kZXggPSBpc1JpZ2h0ID8gZW5kIDogKHN0YXJ0IC0gMSksXG4gICAgICAgICAgaXRlcmF0ZWVzID0gdGhpcy5fX2l0ZXJhdGVlc19fLFxuICAgICAgICAgIGl0ZXJMZW5ndGggPSBpdGVyYXRlZXMubGVuZ3RoLFxuICAgICAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgICAgICB0YWtlQ291bnQgPSBuYXRpdmVNaW4obGVuZ3RoLCB0aGlzLl9fdGFrZUNvdW50X18pO1xuXG4gICAgICBpZiAoIWlzQXJyIHx8ICghaXNSaWdodCAmJiBhcnJMZW5ndGggPT0gbGVuZ3RoICYmIHRha2VDb3VudCA9PSBsZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBiYXNlV3JhcHBlclZhbHVlKGFycmF5LCB0aGlzLl9fYWN0aW9uc19fKTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgb3V0ZXI6XG4gICAgICB3aGlsZSAobGVuZ3RoLS0gJiYgcmVzSW5kZXggPCB0YWtlQ291bnQpIHtcbiAgICAgICAgaW5kZXggKz0gZGlyO1xuXG4gICAgICAgIHZhciBpdGVySW5kZXggPSAtMSxcbiAgICAgICAgICAgIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgICAgIHdoaWxlICgrK2l0ZXJJbmRleCA8IGl0ZXJMZW5ndGgpIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IGl0ZXJhdGVlc1tpdGVySW5kZXhdLFxuICAgICAgICAgICAgICBpdGVyYXRlZSA9IGRhdGEuaXRlcmF0ZWUsXG4gICAgICAgICAgICAgIHR5cGUgPSBkYXRhLnR5cGUsXG4gICAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgICAgICAgaWYgKHR5cGUgPT0gTEFaWV9NQVBfRkxBRykge1xuICAgICAgICAgICAgdmFsdWUgPSBjb21wdXRlZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFjb21wdXRlZCkge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT0gTEFaWV9GSUxURVJfRkxBRykge1xuICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIGBMYXp5V3JhcHBlcmAgaXMgYW4gaW5zdGFuY2Ugb2YgYGJhc2VMb2Rhc2hgLlxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpO1xuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExhenlXcmFwcGVyO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgY2xlYXJcbiAgICAgKiBAbWVtYmVyT2YgSGFzaFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgICAgIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGRlbGV0ZVxuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgICAgIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGdldFxuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gICAgICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGhhc1xuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gICAgICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNldFxuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gICAgICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICAgICAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG4gICAgSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG4gICAgSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbiAgICBIYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuICAgIEhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG4gICAgSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgICAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGNsZWFyXG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICAgICAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICAgICAgdGhpcy5zaXplID0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZGVsZXRlXG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICAgICAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgICAgICBkYXRhLnBvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgLS10aGlzLnNpemU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZ2V0XG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICAgICAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgaGFzXG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gICAgICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNldFxuICAgICAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgKyt0aGlzLnNpemU7XG4gICAgICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuICAgIExpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICAgICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGNsZWFyXG4gICAgICogQG1lbWJlck9mIE1hcENhY2hlXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICAgICAnbWFwJzogbmV3IChNYXAgfHwgTGlzdENhY2hlKSxcbiAgICAgICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGRlbGV0ZVxuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgICAgIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGdldFxuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgICAgIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGhhc1xuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgICAgIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNldFxuICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICAgICAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG4gICAgTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbiAgICBNYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG4gICAgTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuICAgIE1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbiAgICBNYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gICAgICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgYWRkXG4gICAgICogQG1lbWJlck9mIFNldENhY2hlXG4gICAgICogQGFsaWFzIHB1c2hcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICAgICAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgaGFzXG4gICAgICogQG1lbWJlck9mIFNldENhY2hlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cbiAgICBTZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcbiAgICBTZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgICAgIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgY2xlYXJcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFja0NsZWFyKCkge1xuICAgICAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gICAgICB0aGlzLnNpemUgPSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZGVsZXRlXG4gICAgICogQG1lbWJlck9mIFN0YWNrXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgICAgIHJlc3VsdCA9IGRhdGFbJ2RlbGV0ZSddKGtleSk7XG5cbiAgICAgIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBnZXRcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBoYXNcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBzZXRcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgc3RhY2sgY2FjaGUgaW5zdGFuY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICAgICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICAgICAgaWYgKCFNYXAgfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xuICAgICAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gICAgICB9XG4gICAgICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgICAgIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG4gICAgU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcbiAgICBTdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG4gICAgU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuICAgIFN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcbiAgICBTdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICAgICAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSksXG4gICAgICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkodmFsdWUpLFxuICAgICAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxuICAgICAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cbiAgICAgICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XG4gICAgICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICAgICAgKSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zYW1wbGVgIGZvciBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzYW1wbGUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFycmF5U2FtcGxlKGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2Jhc2VSYW5kb20oMCwgbGVuZ3RoIC0gMSldIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zYW1wbGVTaXplYCBmb3IgYXJyYXlzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2FtcGxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gc2FtcGxlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFycmF5U2FtcGxlU2l6ZShhcnJheSwgbikge1xuICAgICAgcmV0dXJuIHNodWZmbGVTZWxmKGNvcHlBcnJheShhcnJheSksIGJhc2VDbGFtcChuLCAwLCBhcnJheS5sZW5ndGgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc2h1ZmZsZWAgZm9yIGFycmF5cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNodWZmbGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc2h1ZmZsZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlTaHVmZmxlKGFycmF5KSB7XG4gICAgICByZXR1cm4gc2h1ZmZsZVNlbGYoY29weUFycmF5KGFycmF5KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhc3NpZ25WYWx1ZWAgZXhjZXB0IHRoYXQgaXQgZG9lc24ndCBhc3NpZ25cbiAgICAgKiBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gICAgICBpZiAoKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWVxKG9iamVjdFtrZXldLCB2YWx1ZSkpIHx8XG4gICAgICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICAgICAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICAgICAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFnZ3JlZ2F0ZXMgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIG9uIGBhY2N1bXVsYXRvcmAgd2l0aCBrZXlzIHRyYW5zZm9ybWVkXG4gICAgICogYnkgYGl0ZXJhdGVlYCBhbmQgdmFsdWVzIHNldCBieSBgc2V0dGVyYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGBhY2N1bXVsYXRvcmAgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBhY2N1bXVsYXRvcmAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUFnZ3JlZ2F0b3IoY29sbGVjdGlvbiwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgc2V0dGVyKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaXRlcmF0ZWUodmFsdWUpLCBjb2xsZWN0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gICAgICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICAgICAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUFzc2lnbkluKG9iamVjdCwgc291cmNlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXNzaWduVmFsdWVgIGFuZCBgYXNzaWduTWVyZ2VWYWx1ZWAgd2l0aG91dFxuICAgICAqIHZhbHVlIGNoZWNrcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGtleSA9PSAnX19wcm90b19fJyAmJiBkZWZpbmVQcm9wZXJ0eSkge1xuICAgICAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSxcbiAgICAgICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hdGAgd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsIHBhdGhzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcGlja2VkIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VBdChvYmplY3QsIHBhdGhzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYXRocy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgICBza2lwID0gb2JqZWN0ID09IG51bGw7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSBza2lwID8gdW5kZWZpbmVkIDogZ2V0KG9iamVjdCwgcGF0aHNbaW5kZXhdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY2xhbXBgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNsYW1wLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbG93ZXJdIFRoZSBsb3dlciBib3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdXBwZXIgVGhlIHVwcGVyIGJvdW5kLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNsYW1wZWQgbnVtYmVyLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VDbGFtcChudW1iZXIsIGxvd2VyLCB1cHBlcikge1xuICAgICAgaWYgKG51bWJlciA9PT0gbnVtYmVyKSB7XG4gICAgICAgIGlmICh1cHBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbnVtYmVyID0gbnVtYmVyIDw9IHVwcGVyID8gbnVtYmVyIDogdXBwZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPj0gbG93ZXIgPyBudW1iZXIgOiBsb3dlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jbG9uZWAgYW5kIGBfLmNsb25lRGVlcGAgd2hpY2ggdHJhY2tzXG4gICAgICogdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAgICAgKiAgMSAtIERlZXAgY2xvbmVcbiAgICAgKiAgMiAtIEZsYXR0ZW4gaW5oZXJpdGVkIHByb3BlcnRpZXNcbiAgICAgKiAgNCAtIENsb25lIHN5bWJvbHNcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjbG9uaW5nLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSBUaGUga2V5IG9mIGB2YWx1ZWAuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGB2YWx1ZWAuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGFuZCB0aGVpciBjbG9uZSBjb3VudGVycGFydHMuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQ2xvbmUodmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgb2JqZWN0LCBzdGFjaykge1xuICAgICAgdmFyIHJlc3VsdCxcbiAgICAgICAgICBpc0RlZXAgPSBiaXRtYXNrICYgQ0xPTkVfREVFUF9GTEFHLFxuICAgICAgICAgIGlzRmxhdCA9IGJpdG1hc2sgJiBDTE9ORV9GTEFUX0ZMQUcsXG4gICAgICAgICAgaXNGdWxsID0gYml0bWFzayAmIENMT05FX1NZTUJPTFNfRkxBRztcblxuICAgICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgICAgcmVzdWx0ID0gb2JqZWN0ID8gY3VzdG9taXplcih2YWx1ZSwga2V5LCBvYmplY3QsIHN0YWNrKSA6IGN1c3RvbWl6ZXIodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcbiAgICAgIGlmIChpc0Fycikge1xuICAgICAgICByZXN1bHQgPSBpbml0Q2xvbmVBcnJheSh2YWx1ZSk7XG4gICAgICAgIGlmICghaXNEZWVwKSB7XG4gICAgICAgICAgcmV0dXJuIGNvcHlBcnJheSh2YWx1ZSwgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICAgICAgICBpc0Z1bmMgPSB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnO1xuXG4gICAgICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gY2xvbmVCdWZmZXIodmFsdWUsIGlzRGVlcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xuICAgICAgICAgIHJlc3VsdCA9IChpc0ZsYXQgfHwgaXNGdW5jKSA/IHt9IDogaW5pdENsb25lT2JqZWN0KHZhbHVlKTtcbiAgICAgICAgICBpZiAoIWlzRGVlcCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzRmxhdFxuICAgICAgICAgICAgICA/IGNvcHlTeW1ib2xzSW4odmFsdWUsIGJhc2VBc3NpZ25JbihyZXN1bHQsIHZhbHVlKSlcbiAgICAgICAgICAgICAgOiBjb3B5U3ltYm9scyh2YWx1ZSwgYmFzZUFzc2lnbihyZXN1bHQsIHZhbHVlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghY2xvbmVhYmxlVGFnc1t0YWddKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUgOiB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0ID0gaW5pdENsb25lQnlUYWcodmFsdWUsIHRhZywgaXNEZWVwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQ2hlY2sgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgYW5kIHJldHVybiBpdHMgY29ycmVzcG9uZGluZyBjbG9uZS5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldCh2YWx1ZSk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZDtcbiAgICAgIH1cbiAgICAgIHN0YWNrLnNldCh2YWx1ZSwgcmVzdWx0KTtcblxuICAgICAgaWYgKGlzU2V0KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlKSB7XG4gICAgICAgICAgcmVzdWx0LmFkZChiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN1YlZhbHVlLCB2YWx1ZSwgc3RhY2spKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGlzTWFwKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHN1YlZhbHVlLCBrZXkpIHtcbiAgICAgICAgICByZXN1bHQuc2V0KGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGtleXNGdW5jID0gaXNGdWxsXG4gICAgICAgID8gKGlzRmxhdCA/IGdldEFsbEtleXNJbiA6IGdldEFsbEtleXMpXG4gICAgICAgIDogKGlzRmxhdCA/IGtleXNJbiA6IGtleXMpO1xuXG4gICAgICB2YXIgcHJvcHMgPSBpc0FyciA/IHVuZGVmaW5lZCA6IGtleXNGdW5jKHZhbHVlKTtcbiAgICAgIGFycmF5RWFjaChwcm9wcyB8fCB2YWx1ZSwgZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgICAgICBpZiAocHJvcHMpIHtcbiAgICAgICAgICBrZXkgPSBzdWJWYWx1ZTtcbiAgICAgICAgICBzdWJWYWx1ZSA9IHZhbHVlW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgcG9wdWxhdGUgY2xvbmUgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYXNzaWduVmFsdWUocmVzdWx0LCBrZXksIGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2spKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jb25mb3Jtc2Agd2hpY2ggZG9lc24ndCBjbG9uZSBgc291cmNlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHByZWRpY2F0ZXMgdG8gY29uZm9ybSB0by5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VDb25mb3Jtcyhzb3VyY2UpIHtcbiAgICAgIHZhciBwcm9wcyA9IGtleXMoc291cmNlKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VDb25mb3Jtc1RvKG9iamVjdCwgc291cmNlLCBwcm9wcyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNvbmZvcm1zVG9gIHdoaWNoIGFjY2VwdHMgYHByb3BzYCB0byBjaGVjay5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHByZWRpY2F0ZXMgdG8gY29uZm9ybSB0by5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgY29uZm9ybXMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQ29uZm9ybXNUbyhvYmplY3QsIHNvdXJjZSwgcHJvcHMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG4gICAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICFsZW5ndGg7XG4gICAgICB9XG4gICAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICB2YXIga2V5ID0gcHJvcHNbbGVuZ3RoXSxcbiAgICAgICAgICAgIHByZWRpY2F0ZSA9IHNvdXJjZVtrZXldLFxuICAgICAgICAgICAgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgICAgICBpZiAoKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkgfHwgIXByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmRlbGF5YCBhbmQgYF8uZGVmZXJgIHdoaWNoIGFjY2VwdHMgYGFyZ3NgXG4gICAgICogdG8gcHJvdmlkZSB0byBgZnVuY2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlbGF5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3YWl0IFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5IGludm9jYXRpb24uXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIHByb3ZpZGUgdG8gYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ8T2JqZWN0fSBSZXR1cm5zIHRoZSB0aW1lciBpZCBvciB0aW1lb3V0IG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRGVsYXkoZnVuYywgd2FpdCwgYXJncykge1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTsgfSwgd2FpdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLmRpZmZlcmVuY2VgIHdpdGhvdXQgc3VwcG9ydFxuICAgICAqIGZvciBleGNsdWRpbmcgbXVsdGlwbGUgYXJyYXlzIG9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgICAgIHZhbHVlc0xlbmd0aCA9IHZhbHVlcy5sZW5ndGg7XG5cbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgdmFsdWVzID0gYXJyYXlNYXAodmFsdWVzLCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTtcbiAgICAgIH1cbiAgICAgIGlmIChjb21wYXJhdG9yKSB7XG4gICAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh2YWx1ZXMubGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICAgICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzID0gbmV3IFNldENhY2hlKHZhbHVlcyk7XG4gICAgICB9XG4gICAgICBvdXRlcjpcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPT0gbnVsbCA/IHZhbHVlIDogaXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgICAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgdmFyIHZhbHVlc0luZGV4ID0gdmFsdWVzTGVuZ3RoO1xuICAgICAgICAgIHdoaWxlICh2YWx1ZXNJbmRleC0tKSB7XG4gICAgICAgICAgICBpZiAodmFsdWVzW3ZhbHVlc0luZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghaW5jbHVkZXModmFsdWVzLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yRWFjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZUVhY2ggPSBjcmVhdGVCYXNlRWFjaChiYXNlRm9yT3duKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvckVhY2hSaWdodGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZUVhY2hSaWdodCA9IGNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd25SaWdodCwgdHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5ldmVyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFsbCBlbGVtZW50cyBwYXNzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAgICogIGVsc2UgYGZhbHNlYFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VFdmVyeShjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgICAgIHZhciByZXN1bHQgPSB0cnVlO1xuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJlc3VsdCA9ICEhcHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLm1heGAgYW5kIGBfLm1pbmAgd2hpY2ggYWNjZXB0cyBhXG4gICAgICogYGNvbXBhcmF0b3JgIHRvIGRldGVybWluZSB0aGUgZXh0cmVtdW0gdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGV4dHJlbXVtIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VFeHRyZW11bShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgICAgY3VycmVudCA9IGl0ZXJhdGVlKHZhbHVlKTtcblxuICAgICAgICBpZiAoY3VycmVudCAhPSBudWxsICYmIChjb21wdXRlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gKGN1cnJlbnQgPT09IGN1cnJlbnQgJiYgIWlzU3ltYm9sKGN1cnJlbnQpKVxuICAgICAgICAgICAgICA6IGNvbXBhcmF0b3IoY3VycmVudCwgY29tcHV0ZWQpXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgdmFyIGNvbXB1dGVkID0gY3VycmVudCxcbiAgICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmlsbGAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBmaWxsIGBhcnJheWAgd2l0aC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZpbGwoYXJyYXksIHZhbHVlLCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICBzdGFydCA9IHRvSW50ZWdlcihzdGFydCk7XG4gICAgICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gICAgICB9XG4gICAgICBlbmQgPSAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gbGVuZ3RoKSA/IGxlbmd0aCA6IHRvSW50ZWdlcihlbmQpO1xuICAgICAgaWYgKGVuZCA8IDApIHtcbiAgICAgICAgZW5kICs9IGxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGVuZCA9IHN0YXJ0ID4gZW5kID8gMCA6IHRvTGVuZ3RoKGVuZCk7XG4gICAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHtcbiAgICAgICAgYXJyYXlbc3RhcnQrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maWx0ZXJgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGaWx0ZXIoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGVwdGggVGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0PVtdXSBUaGUgaW5pdGlhbCByZXN1bHQgdmFsdWUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGbGF0dGVuKGFycmF5LCBkZXB0aCwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIHByZWRpY2F0ZSB8fCAocHJlZGljYXRlID0gaXNGbGF0dGVuYWJsZSk7XG4gICAgICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBmbGF0dGVuIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyYXlQdXNoKHJlc3VsdCwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghaXNTdHJpY3QpIHtcbiAgICAgICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgb2JqZWN0YFxuICAgICAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICAgICAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYmFzZUZvcmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBwcm9wZXJ0aWVzXG4gICAgICogaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIHZhciBiYXNlRm9yUmlnaHQgPSBjcmVhdGVCYXNlRm9yKHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yT3duYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCAmJiBiYXNlRm9yKG9iamVjdCwgaXRlcmF0ZWUsIGtleXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvck93blJpZ2h0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGb3JPd25SaWdodChvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3JSaWdodChvYmplY3QsIGl0ZXJhdGVlLCBrZXlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mdW5jdGlvbnNgIHdoaWNoIGNyZWF0ZXMgYW4gYXJyYXkgb2ZcbiAgICAgKiBgb2JqZWN0YCBmdW5jdGlvbiBwcm9wZXJ0eSBuYW1lcyBmaWx0ZXJlZCBmcm9tIGBwcm9wc2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBmaWx0ZXIuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBuYW1lcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRnVuY3Rpb25zKG9iamVjdCwgcHJvcHMpIHtcbiAgICAgIHJldHVybiBhcnJheUZpbHRlcihwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG9iamVjdFtrZXldKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LCBwYXRoKSB7XG4gICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICAgICAgdmFyIGluZGV4ID0gMCxcbiAgICAgICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gICAgICB9XG4gICAgICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gICAgICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gICAgICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gICAgICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcbiAgICAgIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgICAgIH1cbiAgICAgIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICAgICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmd0YCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gYG90aGVyYCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VHdCh2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA+IG90aGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc2Agd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VIYXMob2JqZWN0LCBrZXkpIHtcbiAgICAgIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNJbmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xuICAgICAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pblJhbmdlYCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgbnVtYmVyYCBpcyBpbiB0aGUgcmFuZ2UsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSW5SYW5nZShudW1iZXIsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHJldHVybiBudW1iZXIgPj0gbmF0aXZlTWluKHN0YXJ0LCBlbmQpICYmIG51bWJlciA8IG5hdGl2ZU1heChzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uaW50ZXJzZWN0aW9uYCwgd2l0aG91dCBzdXBwb3J0XG4gICAgICogZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMsIHRoYXQgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlzIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHNoYXJlZCB2YWx1ZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUludGVyc2VjdGlvbihhcnJheXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gICAgICB2YXIgaW5jbHVkZXMgPSBjb21wYXJhdG9yID8gYXJyYXlJbmNsdWRlc1dpdGggOiBhcnJheUluY2x1ZGVzLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5c1swXS5sZW5ndGgsXG4gICAgICAgICAgb3RoTGVuZ3RoID0gYXJyYXlzLmxlbmd0aCxcbiAgICAgICAgICBvdGhJbmRleCA9IG90aExlbmd0aCxcbiAgICAgICAgICBjYWNoZXMgPSBBcnJheShvdGhMZW5ndGgpLFxuICAgICAgICAgIG1heExlbmd0aCA9IEluZmluaXR5LFxuICAgICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgICB3aGlsZSAob3RoSW5kZXgtLSkge1xuICAgICAgICB2YXIgYXJyYXkgPSBhcnJheXNbb3RoSW5kZXhdO1xuICAgICAgICBpZiAob3RoSW5kZXggJiYgaXRlcmF0ZWUpIHtcbiAgICAgICAgICBhcnJheSA9IGFycmF5TWFwKGFycmF5LCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTtcbiAgICAgICAgfVxuICAgICAgICBtYXhMZW5ndGggPSBuYXRpdmVNaW4oYXJyYXkubGVuZ3RoLCBtYXhMZW5ndGgpO1xuICAgICAgICBjYWNoZXNbb3RoSW5kZXhdID0gIWNvbXBhcmF0b3IgJiYgKGl0ZXJhdGVlIHx8IChsZW5ndGggPj0gMTIwICYmIGFycmF5Lmxlbmd0aCA+PSAxMjApKVxuICAgICAgICAgID8gbmV3IFNldENhY2hlKG90aEluZGV4ICYmIGFycmF5KVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgYXJyYXkgPSBhcnJheXNbMF07XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIHNlZW4gPSBjYWNoZXNbMF07XG5cbiAgICAgIG91dGVyOlxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGggJiYgcmVzdWx0Lmxlbmd0aCA8IG1heExlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICAgICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgICAgIGlmICghKHNlZW5cbiAgICAgICAgICAgICAgPyBjYWNoZUhhcyhzZWVuLCBjb21wdXRlZClcbiAgICAgICAgICAgICAgOiBpbmNsdWRlcyhyZXN1bHQsIGNvbXB1dGVkLCBjb21wYXJhdG9yKVxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgIG90aEluZGV4ID0gb3RoTGVuZ3RoO1xuICAgICAgICAgIHdoaWxlICgtLW90aEluZGV4KSB7XG4gICAgICAgICAgICB2YXIgY2FjaGUgPSBjYWNoZXNbb3RoSW5kZXhdO1xuICAgICAgICAgICAgaWYgKCEoY2FjaGVcbiAgICAgICAgICAgICAgICAgID8gY2FjaGVIYXMoY2FjaGUsIGNvbXB1dGVkKVxuICAgICAgICAgICAgICAgICAgOiBpbmNsdWRlcyhhcnJheXNbb3RoSW5kZXhdLCBjb21wdXRlZCwgY29tcGFyYXRvcikpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2Vlbikge1xuICAgICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmludmVydGAgYW5kIGBfLmludmVydEJ5YCB3aGljaCBpbnZlcnRzXG4gICAgICogYG9iamVjdGAgd2l0aCB2YWx1ZXMgdHJhbnNmb3JtZWQgYnkgYGl0ZXJhdGVlYCBhbmQgc2V0IGJ5IGBzZXR0ZXJgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGBhY2N1bXVsYXRvcmAgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0gdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCBpbnZlcnRlZCBvYmplY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBhY2N1bXVsYXRvcmAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUludmVydGVyKG9iamVjdCwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgICAgIGJhc2VGb3JPd24ob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICAgICAgc2V0dGVyKGFjY3VtdWxhdG9yLCBpdGVyYXRlZSh2YWx1ZSksIGtleSwgb2JqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmludm9rZWAgd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsXG4gICAgICogbWV0aG9kIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIG1ldGhvZCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGludm9rZWQgbWV0aG9kLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJbnZva2Uob2JqZWN0LCBwYXRoLCBhcmdzKSB7XG4gICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgICAgIG9iamVjdCA9IHBhcmVudChvYmplY3QsIHBhdGgpO1xuICAgICAgdmFyIGZ1bmMgPSBvYmplY3QgPT0gbnVsbCA/IG9iamVjdCA6IG9iamVjdFt0b0tleShsYXN0KHBhdGgpKV07XG4gICAgICByZXR1cm4gZnVuYyA9PSBudWxsID8gdW5kZWZpbmVkIDogYXBwbHkoZnVuYywgb2JqZWN0LCBhcmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcnJheUJ1ZmZlcmAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5IGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc0FycmF5QnVmZmVyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcnJheUJ1ZmZlclRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0RhdGVgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGRhdGUgb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzRGF0ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gZGF0ZVRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gICAgICogYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAgICAgKiAgMSAtIFVub3JkZXJlZCBjb21wYXJpc29uXG4gICAgICogIDIgLSBQYXJ0aWFsIGNvbXBhcmlzb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGB2YWx1ZWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsIHx8ICghaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNPYmplY3RMaWtlKG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgYmFzZUlzRXF1YWwsIHN0YWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gICAgICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICAgICAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgICAgIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLFxuICAgICAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob2JqZWN0KSxcbiAgICAgICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICAgICAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XG4gICAgICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcblxuICAgICAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsXG4gICAgICAgICAgaXNTYW1lVGFnID0gb2JqVGFnID09IG90aFRhZztcblxuICAgICAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIG9iaklzQXJyID0gdHJ1ZTtcbiAgICAgICAgb2JqSXNPYmogPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7XG4gICAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxuICAgICAgICAgIDogZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICAgICAgfVxuICAgICAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xuICAgICAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxuICAgICAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICAgICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgICAgICB2YXIgb2JqVW53cmFwcGVkID0gb2JqSXNXcmFwcGVkID8gb2JqZWN0LnZhbHVlKCkgOiBvYmplY3QsXG4gICAgICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICAgICAgcmV0dXJuIGVxdWFsRnVuYyhvYmpVbndyYXBwZWQsIG90aFVud3JhcHBlZCwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWlzU2FtZVRhZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hcGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzTWFwKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IG1hcFRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hdGNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHBhcmFtIHtBcnJheX0gbWF0Y2hEYXRhIFRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyB0byBtYXRjaC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgaXMgYSBtYXRjaCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBpbmRleCA9IG1hdGNoRGF0YS5sZW5ndGgsXG4gICAgICAgICAgbGVuZ3RoID0gaW5kZXgsXG4gICAgICAgICAgbm9DdXN0b21pemVyID0gIWN1c3RvbWl6ZXI7XG5cbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gIWxlbmd0aDtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgdmFyIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgICAgICBpZiAoKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKVxuICAgICAgICAgICAgICA/IGRhdGFbMV0gIT09IG9iamVjdFtkYXRhWzBdXVxuICAgICAgICAgICAgICA6ICEoZGF0YVswXSBpbiBvYmplY3QpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgICAgICB2YXIga2V5ID0gZGF0YVswXSxcbiAgICAgICAgICAgIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgICAgICBzcmNWYWx1ZSA9IGRhdGFbMV07XG5cbiAgICAgICAgaWYgKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKSB7XG4gICAgICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgc3RhY2sgPSBuZXcgU3RhY2s7XG4gICAgICAgICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIShyZXN1bHQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgICAgIDogcmVzdWx0XG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgICAgIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1JlZ0V4cGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcmVnZXhwLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzUmVnRXhwKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSByZWdleHBUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNTZXRgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc1NldCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBzZXRUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGl0ZXJhdGVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xuICAgICAgLy8gRG9uJ3Qgc3RvcmUgdGhlIGB0eXBlb2ZgIHJlc3VsdCBpbiBhIHZhcmlhYmxlIHRvIGF2b2lkIGEgSklUIGJ1ZyBpbiBTYWZhcmkgOS5cbiAgICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICA/IGJhc2VNYXRjaGVzUHJvcGVydHkodmFsdWVbMF0sIHZhbHVlWzFdKVxuICAgICAgICAgIDogYmFzZU1hdGNoZXModmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICAgICAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcbiAgICAgIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gICAgICB9XG4gICAgICB2YXIgaXNQcm90byA9IGlzUHJvdG90eXBlKG9iamVjdCksXG4gICAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgaWYgKCEoa2V5ID09ICdjb25zdHJ1Y3RvcicgJiYgKGlzUHJvdG8gfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmx0YCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gYG90aGVyYCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VMdCh2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA8IG90aGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hcGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgcmVzdWx0ID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBBcnJheShjb2xsZWN0aW9uLmxlbmd0aCkgOiBbXTtcblxuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgICAgICByZXN1bHRbKytpbmRleF0gPSBpdGVyYXRlZSh2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzYCB3aGljaCBkb2Vzbid0IGNsb25lIGBzb3VyY2VgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1hdGNoZXMoc291cmNlKSB7XG4gICAgICB2YXIgbWF0Y2hEYXRhID0gZ2V0TWF0Y2hEYXRhKHNvdXJjZSk7XG4gICAgICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkge1xuICAgICAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUobWF0Y2hEYXRhWzBdWzBdLCBtYXRjaERhdGFbMF1bMV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID09PSBzb3VyY2UgfHwgYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNQcm9wZXJ0eWAgd2hpY2ggZG9lc24ndCBjbG9uZSBgc3JjVmFsdWVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkge1xuICAgICAgaWYgKGlzS2V5KHBhdGgpICYmIGlzU3RyaWN0Q29tcGFyYWJsZShzcmNWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKHRvS2V5KHBhdGgpLCBzcmNWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIHZhciBvYmpWYWx1ZSA9IGdldChvYmplY3QsIHBhdGgpO1xuICAgICAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxuICAgICAgICAgID8gaGFzSW4ob2JqZWN0LCBwYXRoKVxuICAgICAgICAgIDogYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tZXJnZWAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3JjSW5kZXggVGhlIGluZGV4IG9mIGBzb3VyY2VgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIG1lcmdlZCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAgICAgKiAgY291bnRlcnBhcnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gICAgICBpZiAob2JqZWN0ID09PSBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYmFzZUZvcihzb3VyY2UsIGZ1bmN0aW9uKHNyY1ZhbHVlLCBrZXkpIHtcbiAgICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgICAgaWYgKGlzT2JqZWN0KHNyY1ZhbHVlKSkge1xuICAgICAgICAgIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIGJhc2VNZXJnZSwgY3VzdG9taXplciwgc3RhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgICAgICAgID8gY3VzdG9taXplcihzYWZlR2V0KG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSwga2V5c0luKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VNZXJnZWAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICAgICAqIGRlZXAgbWVyZ2VzIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gICAgICogcmVmZXJlbmNlcyB0byBiZSBtZXJnZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gbWVyZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXJnZUZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1lcmdlIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAgICAgKiAgY291bnRlcnBhcnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIG1lcmdlRnVuYywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgICAgIHZhciBvYmpWYWx1ZSA9IHNhZmVHZXQob2JqZWN0LCBrZXkpLFxuICAgICAgICAgIHNyY1ZhbHVlID0gc2FmZUdldChzb3VyY2UsIGtleSksXG4gICAgICAgICAgc3RhY2tlZCA9IHN0YWNrLmdldChzcmNWYWx1ZSk7XG5cbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIHN0YWNrZWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICAgID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHZhciBpc0NvbW1vbiA9IG5ld1ZhbHVlID09PSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChpc0NvbW1vbikge1xuICAgICAgICB2YXIgaXNBcnIgPSBpc0FycmF5KHNyY1ZhbHVlKSxcbiAgICAgICAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiBpc0J1ZmZlcihzcmNWYWx1ZSksXG4gICAgICAgICAgICBpc1R5cGVkID0gIWlzQXJyICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHNyY1ZhbHVlKTtcblxuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgICAgICBpZiAoaXNBcnIgfHwgaXNCdWZmIHx8IGlzVHlwZWQpIHtcbiAgICAgICAgICBpZiAoaXNBcnJheShvYmpWYWx1ZSkpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KG9ialZhbHVlKSkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBjb3B5QXJyYXkob2JqVmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChpc0J1ZmYpIHtcbiAgICAgICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGNsb25lQnVmZmVyKHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoaXNUeXBlZCkge1xuICAgICAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gY2xvbmVUeXBlZEFycmF5KHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSB8fCBpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IG9ialZhbHVlO1xuICAgICAgICAgIGlmIChpc0FyZ3VtZW50cyhvYmpWYWx1ZSkpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdG9QbGFpbk9iamVjdChvYmpWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKCFpc09iamVjdChvYmpWYWx1ZSkgfHwgaXNGdW5jdGlvbihvYmpWYWx1ZSkpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gaW5pdENsb25lT2JqZWN0KHNyY1ZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzQ29tbW9uKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IG1lcmdlIG9iamVjdHMgYW5kIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgICAgbWVyZ2VGdW5jKG5ld1ZhbHVlLCBzcmNWYWx1ZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICAgICAgc3RhY2tbJ2RlbGV0ZSddKHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5udGhgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCB0byByZXR1cm4uXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG50aCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU50aChhcnJheSwgbikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG4gKz0gbiA8IDAgPyBsZW5ndGggOiAwO1xuICAgICAgcmV0dXJuIGlzSW5kZXgobiwgbGVuZ3RoKSA/IGFycmF5W25dIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm9yZGVyQnlgIHdpdGhvdXQgcGFyYW0gZ3VhcmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbltdfE9iamVjdFtdfHN0cmluZ1tdfSBpdGVyYXRlZXMgVGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IG9yZGVycyBUaGUgc29ydCBvcmRlcnMgb2YgYGl0ZXJhdGVlc2AuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc29ydGVkIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VPcmRlckJ5KGNvbGxlY3Rpb24sIGl0ZXJhdGVlcywgb3JkZXJzKSB7XG4gICAgICBpZiAoaXRlcmF0ZWVzLmxlbmd0aCkge1xuICAgICAgICBpdGVyYXRlZXMgPSBhcnJheU1hcChpdGVyYXRlZXMsIGZ1bmN0aW9uKGl0ZXJhdGVlKSB7XG4gICAgICAgICAgaWYgKGlzQXJyYXkoaXRlcmF0ZWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGJhc2VHZXQodmFsdWUsIGl0ZXJhdGVlLmxlbmd0aCA9PT0gMSA/IGl0ZXJhdGVlWzBdIDogaXRlcmF0ZWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaXRlcmF0ZWU7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlcmF0ZWVzID0gW2lkZW50aXR5XTtcbiAgICAgIH1cblxuICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICBpdGVyYXRlZXMgPSBhcnJheU1hcChpdGVyYXRlZXMsIGJhc2VVbmFyeShnZXRJdGVyYXRlZSgpKSk7XG5cbiAgICAgIHZhciByZXN1bHQgPSBiYXNlTWFwKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNyaXRlcmlhID0gYXJyYXlNYXAoaXRlcmF0ZWVzLCBmdW5jdGlvbihpdGVyYXRlZSkge1xuICAgICAgICAgIHJldHVybiBpdGVyYXRlZSh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyAnY3JpdGVyaWEnOiBjcml0ZXJpYSwgJ2luZGV4JzogKytpbmRleCwgJ3ZhbHVlJzogdmFsdWUgfTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gYmFzZVNvcnRCeShyZXN1bHQsIGZ1bmN0aW9uKG9iamVjdCwgb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVNdWx0aXBsZShvYmplY3QsIG90aGVyLCBvcmRlcnMpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucGlja2Agd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsXG4gICAgICogcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aHMgVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUGljayhvYmplY3QsIHBhdGhzKSB7XG4gICAgICByZXR1cm4gYmFzZVBpY2tCeShvYmplY3QsIHBhdGhzLCBmdW5jdGlvbih2YWx1ZSwgcGF0aCkge1xuICAgICAgICByZXR1cm4gaGFzSW4ob2JqZWN0LCBwYXRoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mICBgXy5waWNrQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIHByb3BlcnR5LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVBpY2tCeShvYmplY3QsIHBhdGhzLCBwcmVkaWNhdGUpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHBhdGhzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHBhdGggPSBwYXRoc1tpbmRleF0sXG4gICAgICAgICAgICB2YWx1ZSA9IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcblxuICAgICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBwYXRoKSkge1xuICAgICAgICAgIGJhc2VTZXQocmVzdWx0LCBjYXN0UGF0aChwYXRoLCBvYmplY3QpLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnB1bGxBbGxCeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICAgICAqIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVB1bGxBbGwoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgICAgIHZhciBpbmRleE9mID0gY29tcGFyYXRvciA/IGJhc2VJbmRleE9mV2l0aCA6IGJhc2VJbmRleE9mLFxuICAgICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgICAgICBzZWVuID0gYXJyYXk7XG5cbiAgICAgIGlmIChhcnJheSA9PT0gdmFsdWVzKSB7XG4gICAgICAgIHZhbHVlcyA9IGNvcHlBcnJheSh2YWx1ZXMpO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgIHNlZW4gPSBhcnJheU1hcChhcnJheSwgYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7XG4gICAgICB9XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgZnJvbUluZGV4ID0gMCxcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWVzW2luZGV4XSxcbiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgICAgICB3aGlsZSAoKGZyb21JbmRleCA9IGluZGV4T2Yoc2VlbiwgY29tcHV0ZWQsIGZyb21JbmRleCwgY29tcGFyYXRvcikpID4gLTEpIHtcbiAgICAgICAgICBpZiAoc2VlbiAhPT0gYXJyYXkpIHtcbiAgICAgICAgICAgIHNwbGljZS5jYWxsKHNlZW4sIGZyb21JbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNwbGljZS5jYWxsKGFycmF5LCBmcm9tSW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHVsbEF0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGluZGl2aWR1YWxcbiAgICAgKiBpbmRleGVzIG9yIGNhcHR1cmluZyB0aGUgcmVtb3ZlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcltdfSBpbmRleGVzIFRoZSBpbmRleGVzIG9mIGVsZW1lbnRzIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUHVsbEF0KGFycmF5LCBpbmRleGVzKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBpbmRleGVzLmxlbmd0aCA6IDAsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGluZGV4ZXNbbGVuZ3RoXTtcbiAgICAgICAgaWYgKGxlbmd0aCA9PSBsYXN0SW5kZXggfHwgaW5kZXggIT09IHByZXZpb3VzKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzID0gaW5kZXg7XG4gICAgICAgICAgaWYgKGlzSW5kZXgoaW5kZXgpKSB7XG4gICAgICAgICAgICBzcGxpY2UuY2FsbChhcnJheSwgaW5kZXgsIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiYXNlVW5zZXQoYXJyYXksIGluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yYW5kb21gIHdpdGhvdXQgc3VwcG9ydCBmb3IgcmV0dXJuaW5nXG4gICAgICogZmxvYXRpbmctcG9pbnQgbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxvd2VyIFRoZSBsb3dlciBib3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdXBwZXIgVGhlIHVwcGVyIGJvdW5kLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJhbmRvbSBudW1iZXIuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVJhbmRvbShsb3dlciwgdXBwZXIpIHtcbiAgICAgIHJldHVybiBsb3dlciArIG5hdGl2ZUZsb29yKG5hdGl2ZVJhbmRvbSgpICogKHVwcGVyIC0gbG93ZXIgKyAxKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmFuZ2VgIGFuZCBgXy5yYW5nZVJpZ2h0YCB3aGljaCBkb2Vzbid0XG4gICAgICogY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RlcCBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmdlIG9mIG51bWJlcnMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXAsIGZyb21SaWdodCkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KG5hdGl2ZUNlaWwoKGVuZCAtIHN0YXJ0KSAvIChzdGVwIHx8IDEpKSwgMCksXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHJlc3VsdFtmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XSA9IHN0YXJ0O1xuICAgICAgICBzdGFydCArPSBzdGVwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXBlYXRgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIHJlcGVhdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgc3RyaW5nLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJlcGVhdGVkIHN0cmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUmVwZWF0KHN0cmluZywgbikge1xuICAgICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgICAgaWYgKCFzdHJpbmcgfHwgbiA8IDEgfHwgbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIC8vIExldmVyYWdlIHRoZSBleHBvbmVudGlhdGlvbiBieSBzcXVhcmluZyBhbGdvcml0aG0gZm9yIGEgZmFzdGVyIHJlcGVhdC5cbiAgICAgIC8vIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHBvbmVudGlhdGlvbl9ieV9zcXVhcmluZyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgZG8ge1xuICAgICAgICBpZiAobiAlIDIpIHtcbiAgICAgICAgICByZXN1bHQgKz0gc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIG4gPSBuYXRpdmVGbG9vcihuIC8gMik7XG4gICAgICAgIGlmIChuKSB7XG4gICAgICAgICAgc3RyaW5nICs9IHN0cmluZztcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAobik7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICAgICAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2FtcGxlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2FtcGxlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU2FtcGxlKGNvbGxlY3Rpb24pIHtcbiAgICAgIHJldHVybiBhcnJheVNhbXBsZSh2YWx1ZXMoY29sbGVjdGlvbikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNhbXBsZVNpemVgIHdpdGhvdXQgcGFyYW0gZ3VhcmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBzYW1wbGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBzYW1wbGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNhbXBsZVNpemUoY29sbGVjdGlvbiwgbikge1xuICAgICAgdmFyIGFycmF5ID0gdmFsdWVzKGNvbGxlY3Rpb24pO1xuICAgICAgcmV0dXJuIHNodWZmbGVTZWxmKGFycmF5LCBiYXNlQ2xhbXAobiwgMCwgYXJyYXkubGVuZ3RoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2V0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBwYXRoIGNyZWF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNldChvYmplY3QsIHBhdGgsIHZhbHVlLCBjdXN0b21pemVyKSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH1cbiAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgICAgICBsYXN0SW5kZXggPSBsZW5ndGggLSAxLFxuICAgICAgICAgIG5lc3RlZCA9IG9iamVjdDtcblxuICAgICAgd2hpbGUgKG5lc3RlZCAhPSBudWxsICYmICsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKSxcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycgfHwga2V5ID09PSAnY29uc3RydWN0b3InIHx8IGtleSA9PT0gJ3Byb3RvdHlwZScpIHtcbiAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IGxhc3RJbmRleCkge1xuICAgICAgICAgIHZhciBvYmpWYWx1ZSA9IG5lc3RlZFtrZXldO1xuICAgICAgICAgIG5ld1ZhbHVlID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIGtleSwgbmVzdGVkKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBpc09iamVjdChvYmpWYWx1ZSlcbiAgICAgICAgICAgICAgPyBvYmpWYWx1ZVxuICAgICAgICAgICAgICA6IChpc0luZGV4KHBhdGhbaW5kZXggKyAxXSkgPyBbXSA6IHt9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXNzaWduVmFsdWUobmVzdGVkLCBrZXksIG5ld1ZhbHVlKTtcbiAgICAgICAgbmVzdGVkID0gbmVzdGVkW2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXREYXRhYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAgICAgKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1ldGFkYXRhLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gICAgICovXG4gICAgdmFyIGJhc2VTZXREYXRhID0gIW1ldGFNYXAgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIGRhdGEpIHtcbiAgICAgIG1ldGFNYXAuc2V0KGZ1bmMsIGRhdGEpO1xuICAgICAgcmV0dXJuIGZ1bmM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jLCAndG9TdHJpbmcnLCB7XG4gICAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICAgICAndmFsdWUnOiBjb25zdGFudChzdHJpbmcpLFxuICAgICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2h1ZmZsZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNodWZmbGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc2h1ZmZsZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNodWZmbGUoY29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIHNodWZmbGVTZWxmKHZhbHVlcyhjb2xsZWN0aW9uKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2xpY2VgIHdpdGhvdXQgYW4gaXRlcmF0ZWUgY2FsbCBndWFyZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNsaWNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgc3RhcnQgPSAtc3RhcnQgPiBsZW5ndGggPyAwIDogKGxlbmd0aCArIHN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIGVuZCA9IGVuZCA+IGxlbmd0aCA/IGxlbmd0aCA6IGVuZDtcbiAgICAgIGlmIChlbmQgPCAwKSB7XG4gICAgICAgIGVuZCArPSBsZW5ndGg7XG4gICAgICB9XG4gICAgICBsZW5ndGggPSBzdGFydCA+IGVuZCA/IDAgOiAoKGVuZCAtIHN0YXJ0KSA+Pj4gMCk7XG4gICAgICBzdGFydCA+Pj49IDA7XG5cbiAgICAgIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb21lYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU29tZShjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgICAgIHZhciByZXN1bHQ7XG5cbiAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXN1bHQgPSBwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuICFyZXN1bHQ7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAhIXJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb3J0ZWRJbmRleGAgYW5kIGBfLnNvcnRlZExhc3RJbmRleGAgd2hpY2hcbiAgICAgKiBwZXJmb3JtcyBhIGJpbmFyeSBzZWFyY2ggb2YgYGFycmF5YCB0byBkZXRlcm1pbmUgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWBcbiAgICAgKiBzaG91bGQgYmUgaW5zZXJ0ZWQgaW50byBgYXJyYXlgIGluIG9yZGVyIHRvIG1haW50YWluIGl0cyBzb3J0IG9yZGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmV0SGlnaGVzdF0gU3BlY2lmeSByZXR1cm5pbmcgdGhlIGhpZ2hlc3QgcXVhbGlmaWVkIGluZGV4LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICogIGludG8gYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU29ydGVkSW5kZXgoYXJyYXksIHZhbHVlLCByZXRIaWdoZXN0KSB7XG4gICAgICB2YXIgbG93ID0gMCxcbiAgICAgICAgICBoaWdoID0gYXJyYXkgPT0gbnVsbCA/IGxvdyA6IGFycmF5Lmxlbmd0aDtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiB2YWx1ZSA9PT0gdmFsdWUgJiYgaGlnaCA8PSBIQUxGX01BWF9BUlJBWV9MRU5HVEgpIHtcbiAgICAgICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgICAgICB2YXIgbWlkID0gKGxvdyArIGhpZ2gpID4+PiAxLFxuICAgICAgICAgICAgICBjb21wdXRlZCA9IGFycmF5W21pZF07XG5cbiAgICAgICAgICBpZiAoY29tcHV0ZWQgIT09IG51bGwgJiYgIWlzU3ltYm9sKGNvbXB1dGVkKSAmJlxuICAgICAgICAgICAgICAocmV0SGlnaGVzdCA/IChjb21wdXRlZCA8PSB2YWx1ZSkgOiAoY29tcHV0ZWQgPCB2YWx1ZSkpKSB7XG4gICAgICAgICAgICBsb3cgPSBtaWQgKyAxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoaWdoID0gbWlkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGlnaDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlU29ydGVkSW5kZXhCeShhcnJheSwgdmFsdWUsIGlkZW50aXR5LCByZXRIaWdoZXN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb3J0ZWRJbmRleEJ5YCBhbmQgYF8uc29ydGVkTGFzdEluZGV4QnlgXG4gICAgICogd2hpY2ggaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBgdmFsdWVgIGFuZCBlYWNoIGVsZW1lbnQgb2YgYGFycmF5YCB0byBjb21wdXRlXG4gICAgICogdGhlaXIgc29ydCByYW5raW5nLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDsgKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldEhpZ2hlc3RdIFNwZWNpZnkgcmV0dXJuaW5nIHRoZSBoaWdoZXN0IHF1YWxpZmllZCBpbmRleC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICAgICAqICBpbnRvIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBpdGVyYXRlZSwgcmV0SGlnaGVzdCkge1xuICAgICAgdmFyIGxvdyA9IDAsXG4gICAgICAgICAgaGlnaCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKGhpZ2ggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIHZhbHVlID0gaXRlcmF0ZWUodmFsdWUpO1xuICAgICAgdmFyIHZhbElzTmFOID0gdmFsdWUgIT09IHZhbHVlLFxuICAgICAgICAgIHZhbElzTnVsbCA9IHZhbHVlID09PSBudWxsLFxuICAgICAgICAgIHZhbElzU3ltYm9sID0gaXNTeW1ib2wodmFsdWUpLFxuICAgICAgICAgIHZhbElzVW5kZWZpbmVkID0gdmFsdWUgPT09IHVuZGVmaW5lZDtcblxuICAgICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgICAgdmFyIG1pZCA9IG5hdGl2ZUZsb29yKChsb3cgKyBoaWdoKSAvIDIpLFxuICAgICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZShhcnJheVttaWRdKSxcbiAgICAgICAgICAgIG90aElzRGVmaW5lZCA9IGNvbXB1dGVkICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgICBvdGhJc051bGwgPSBjb21wdXRlZCA9PT0gbnVsbCxcbiAgICAgICAgICAgIG90aElzUmVmbGV4aXZlID0gY29tcHV0ZWQgPT09IGNvbXB1dGVkLFxuICAgICAgICAgICAgb3RoSXNTeW1ib2wgPSBpc1N5bWJvbChjb21wdXRlZCk7XG5cbiAgICAgICAgaWYgKHZhbElzTmFOKSB7XG4gICAgICAgICAgdmFyIHNldExvdyA9IHJldEhpZ2hlc3QgfHwgb3RoSXNSZWZsZXhpdmU7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsSXNVbmRlZmluZWQpIHtcbiAgICAgICAgICBzZXRMb3cgPSBvdGhJc1JlZmxleGl2ZSAmJiAocmV0SGlnaGVzdCB8fCBvdGhJc0RlZmluZWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbElzTnVsbCkge1xuICAgICAgICAgIHNldExvdyA9IG90aElzUmVmbGV4aXZlICYmIG90aElzRGVmaW5lZCAmJiAocmV0SGlnaGVzdCB8fCAhb3RoSXNOdWxsKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWxJc1N5bWJvbCkge1xuICAgICAgICAgIHNldExvdyA9IG90aElzUmVmbGV4aXZlICYmIG90aElzRGVmaW5lZCAmJiAhb3RoSXNOdWxsICYmIChyZXRIaWdoZXN0IHx8ICFvdGhJc1N5bWJvbCk7XG4gICAgICAgIH0gZWxzZSBpZiAob3RoSXNOdWxsIHx8IG90aElzU3ltYm9sKSB7XG4gICAgICAgICAgc2V0TG93ID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0TG93ID0gcmV0SGlnaGVzdCA/IChjb21wdXRlZCA8PSB2YWx1ZSkgOiAoY29tcHV0ZWQgPCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNldExvdykge1xuICAgICAgICAgIGxvdyA9IG1pZCArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGlnaCA9IG1pZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5hdGl2ZU1pbihoaWdoLCBNQVhfQVJSQVlfSU5ERVgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNvcnRlZFVuaXFgIGFuZCBgXy5zb3J0ZWRVbmlxQnlgIHdpdGhvdXRcbiAgICAgKiBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTb3J0ZWRVbmlxKGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgICAgIGlmICghaW5kZXggfHwgIWVxKGNvbXB1dGVkLCBzZWVuKSkge1xuICAgICAgICAgIHZhciBzZWVuID0gY29tcHV0ZWQ7XG4gICAgICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9OdW1iZXJgIHdoaWNoIGRvZXNuJ3QgZW5zdXJlIGNvcnJlY3RcbiAgICAgKiBjb252ZXJzaW9ucyBvZiBiaW5hcnksIGhleGFkZWNpbWFsLCBvciBvY3RhbCBzdHJpbmcgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlVG9OdW1iZXIodmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gTkFOO1xuICAgICAgfVxuICAgICAgcmV0dXJuICt2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAgICAgKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gICAgICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XG4gICAgICB9XG4gICAgICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xUb1N0cmluZyA/IHN5bWJvbFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICAgICAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuaXFCeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VVbmlxKGFycmF5LCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICAgICAgcmVzdWx0ID0gW10sXG4gICAgICAgICAgc2VlbiA9IHJlc3VsdDtcblxuICAgICAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgICAgIHZhciBzZXQgPSBpdGVyYXRlZSA/IG51bGwgOiBjcmVhdGVTZXQoYXJyYXkpO1xuICAgICAgICBpZiAoc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNldFRvQXJyYXkoc2V0KTtcbiAgICAgICAgfVxuICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICBpbmNsdWRlcyA9IGNhY2hlSGFzO1xuICAgICAgICBzZWVuID0gbmV3IFNldENhY2hlO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHNlZW4gPSBpdGVyYXRlZSA/IFtdIDogcmVzdWx0O1xuICAgICAgfVxuICAgICAgb3V0ZXI6XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICAgICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICB2YXIgc2VlbkluZGV4ID0gc2Vlbi5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKHNlZW5JbmRleC0tKSB7XG4gICAgICAgICAgICBpZiAoc2VlbltzZWVuSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWluY2x1ZGVzKHNlZW4sIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgICAgIGlmIChzZWVuICE9PSByZXN1bHQpIHtcbiAgICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bnNldGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHByb3BlcnR5IHBhdGggdG8gdW5zZXQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBkZWxldGVkLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVVuc2V0KG9iamVjdCwgcGF0aCkge1xuICAgICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gICAgICBvYmplY3QgPSBwYXJlbnQob2JqZWN0LCBwYXRoKTtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCB8fCBkZWxldGUgb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51cGRhdGVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byB1cGRhdGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdXBkYXRlciBUaGUgZnVuY3Rpb24gdG8gcHJvZHVjZSB0aGUgdXBkYXRlZCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBwYXRoIGNyZWF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVVwZGF0ZShvYmplY3QsIHBhdGgsIHVwZGF0ZXIsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIHJldHVybiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdXBkYXRlcihiYXNlR2V0KG9iamVjdCwgcGF0aCkpLCBjdXN0b21pemVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uZHJvcFdoaWxlYCBhbmQgYF8udGFrZVdoaWxlYFxuICAgICAqIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRHJvcF0gU3BlY2lmeSBkcm9wcGluZyBlbGVtZW50cyBpbnN0ZWFkIG9mIHRha2luZyB0aGVtLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlV2hpbGUoYXJyYXksIHByZWRpY2F0ZSwgaXNEcm9wLCBmcm9tUmlnaHQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMTtcblxuICAgICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkgJiZcbiAgICAgICAgcHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge31cblxuICAgICAgcmV0dXJuIGlzRHJvcFxuICAgICAgICA/IGJhc2VTbGljZShhcnJheSwgKGZyb21SaWdodCA/IDAgOiBpbmRleCksIChmcm9tUmlnaHQgPyBpbmRleCArIDEgOiBsZW5ndGgpKVxuICAgICAgICA6IGJhc2VTbGljZShhcnJheSwgKGZyb21SaWdodCA/IGluZGV4ICsgMSA6IDApLCAoZnJvbVJpZ2h0ID8gbGVuZ3RoIDogaW5kZXgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgd3JhcHBlclZhbHVlYCB3aGljaCByZXR1cm5zIHRoZSByZXN1bHQgb2ZcbiAgICAgKiBwZXJmb3JtaW5nIGEgc2VxdWVuY2Ugb2YgYWN0aW9ucyBvbiB0aGUgdW53cmFwcGVkIGB2YWx1ZWAsIHdoZXJlIGVhY2hcbiAgICAgKiBzdWNjZXNzaXZlIGFjdGlvbiBpcyBzdXBwbGllZCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwcmV2aW91cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdW53cmFwcGVkIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFjdGlvbnMgQWN0aW9ucyB0byBwZXJmb3JtIHRvIHJlc29sdmUgdGhlIHVud3JhcHBlZCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVdyYXBwZXJWYWx1ZSh2YWx1ZSwgYWN0aW9ucykge1xuICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC52YWx1ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5UmVkdWNlKGFjdGlvbnMsIGZ1bmN0aW9uKHJlc3VsdCwgYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBhY3Rpb24uZnVuYy5hcHBseShhY3Rpb24udGhpc0FyZywgYXJyYXlQdXNoKFtyZXN1bHRdLCBhY3Rpb24uYXJncykpO1xuICAgICAgfSwgcmVzdWx0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8ueG9yYCwgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMsIHRoYXQgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlzIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHZhbHVlcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlWG9yKGFycmF5cywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheXMubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VVbmlxKGFycmF5c1swXSkgOiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBhcnJheSA9IGFycmF5c1tpbmRleF0sXG4gICAgICAgICAgICBvdGhJbmRleCA9IC0xO1xuXG4gICAgICAgIHdoaWxlICgrK290aEluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKG90aEluZGV4ICE9IGluZGV4KSB7XG4gICAgICAgICAgICByZXN1bHRbaW5kZXhdID0gYmFzZURpZmZlcmVuY2UocmVzdWx0W2luZGV4XSB8fCBhcnJheSwgYXJyYXlzW290aEluZGV4XSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKHJlc3VsdCwgMSksIGl0ZXJhdGVlLCBjb21wYXJhdG9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uemlwT2JqZWN0YCB3aGljaCBhc3NpZ25zIHZhbHVlcyB1c2luZyBgYXNzaWduRnVuY2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25GdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVppcE9iamVjdChwcm9wcywgdmFsdWVzLCBhc3NpZ25GdW5jKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGgsXG4gICAgICAgICAgdmFsc0xlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0ge307XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGluZGV4IDwgdmFsc0xlbmd0aCA/IHZhbHVlc1tpbmRleF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIGFzc2lnbkZ1bmMocmVzdWx0LCBwcm9wc1tpbmRleF0sIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdHMgYHZhbHVlYCB0byBhbiBlbXB0eSBhcnJheSBpZiBpdCdzIG5vdCBhbiBhcnJheSBsaWtlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIHRoZSBjYXN0IGFycmF5LWxpa2Ugb2JqZWN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhc3RBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkgPyB2YWx1ZSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3RzIGB2YWx1ZWAgdG8gYGlkZW50aXR5YCBpZiBpdCdzIG5vdCBhIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBjYXN0IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhc3RGdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nID8gdmFsdWUgOiBpZGVudGl0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3QgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzS2V5KHZhbHVlLCBvYmplY3QpID8gW3ZhbHVlXSA6IHN0cmluZ1RvUGF0aCh0b1N0cmluZyh2YWx1ZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgYGJhc2VSZXN0YCBhbGlhcyB3aGljaCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBgaWRlbnRpdHlgIGJ5IG1vZHVsZVxuICAgICAqIHJlcGxhY2VtZW50IHBsdWdpbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHZhciBjYXN0UmVzdCA9IGJhc2VSZXN0O1xuXG4gICAgLyoqXG4gICAgICogQ2FzdHMgYGFycmF5YCB0byBhIHNsaWNlIGlmIGl0J3MgbmVlZGVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3Qgc2xpY2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FzdFNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQ7XG4gICAgICByZXR1cm4gKCFzdGFydCAmJiBlbmQgPj0gbGVuZ3RoKSA/IGFycmF5IDogYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCB0aGUgZ2xvYmFsIFtgY2xlYXJUaW1lb3V0YF0oaHR0cHM6Ly9tZG4uaW8vY2xlYXJUaW1lb3V0KS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ8T2JqZWN0fSBpZCBUaGUgdGltZXIgaWQgb3IgdGltZW91dCBvYmplY3Qgb2YgdGhlIHRpbWVyIHRvIGNsZWFyLlxuICAgICAqL1xuICAgIHZhciBjbGVhclRpbWVvdXQgPSBjdHhDbGVhclRpbWVvdXQgfHwgZnVuY3Rpb24oaWQpIHtcbiAgICAgIHJldHVybiByb290LmNsZWFyVGltZW91dChpZCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyLCBpc0RlZXApIHtcbiAgICAgIGlmIChpc0RlZXApIHtcbiAgICAgICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gICAgICBidWZmZXIuY29weShyZXN1bHQpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xuICAgICAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgICAgIG5ldyBVaW50OEFycmF5KHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgZGF0YVZpZXdgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVZpZXcgVGhlIGRhdGEgdmlldyB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBkYXRhIHZpZXcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVEYXRhVmlldyhkYXRhVmlldywgaXNEZWVwKSB7XG4gICAgICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcihkYXRhVmlldy5idWZmZXIpIDogZGF0YVZpZXcuYnVmZmVyO1xuICAgICAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgcmVnZXhwYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHJlZ2V4cCBUaGUgcmVnZXhwIHRvIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCByZWdleHAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVSZWdFeHAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7XG4gICAgICByZXN1bHQubGFzdEluZGV4ID0gcmVnZXhwLmxhc3RJbmRleDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBgc3ltYm9sYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzeW1ib2wgVGhlIHN5bWJvbCBvYmplY3QgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHN5bWJvbCBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVTeW1ib2woc3ltYm9sKSB7XG4gICAgICByZXR1cm4gc3ltYm9sVmFsdWVPZiA/IE9iamVjdChzeW1ib2xWYWx1ZU9mLmNhbGwoc3ltYm9sKSkgOiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xuICAgICAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpIDogdHlwZWRBcnJheS5idWZmZXI7XG4gICAgICByZXR1cm4gbmV3IHR5cGVkQXJyYXkuY29uc3RydWN0b3IoYnVmZmVyLCB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsIHR5cGVkQXJyYXkubGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlcyB2YWx1ZXMgdG8gc29ydCB0aGVtIGluIGFzY2VuZGluZyBvcmRlci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHNvcnQgb3JkZXIgaW5kaWNhdG9yIGZvciBgdmFsdWVgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVBc2NlbmRpbmcodmFsdWUsIG90aGVyKSB7XG4gICAgICBpZiAodmFsdWUgIT09IG90aGVyKSB7XG4gICAgICAgIHZhciB2YWxJc0RlZmluZWQgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgdmFsSXNOdWxsID0gdmFsdWUgPT09IG51bGwsXG4gICAgICAgICAgICB2YWxJc1JlZmxleGl2ZSA9IHZhbHVlID09PSB2YWx1ZSxcbiAgICAgICAgICAgIHZhbElzU3ltYm9sID0gaXNTeW1ib2wodmFsdWUpO1xuXG4gICAgICAgIHZhciBvdGhJc0RlZmluZWQgPSBvdGhlciAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgb3RoSXNOdWxsID0gb3RoZXIgPT09IG51bGwsXG4gICAgICAgICAgICBvdGhJc1JlZmxleGl2ZSA9IG90aGVyID09PSBvdGhlcixcbiAgICAgICAgICAgIG90aElzU3ltYm9sID0gaXNTeW1ib2wob3RoZXIpO1xuXG4gICAgICAgIGlmICgoIW90aElzTnVsbCAmJiAhb3RoSXNTeW1ib2wgJiYgIXZhbElzU3ltYm9sICYmIHZhbHVlID4gb3RoZXIpIHx8XG4gICAgICAgICAgICAodmFsSXNTeW1ib2wgJiYgb3RoSXNEZWZpbmVkICYmIG90aElzUmVmbGV4aXZlICYmICFvdGhJc051bGwgJiYgIW90aElzU3ltYm9sKSB8fFxuICAgICAgICAgICAgKHZhbElzTnVsbCAmJiBvdGhJc0RlZmluZWQgJiYgb3RoSXNSZWZsZXhpdmUpIHx8XG4gICAgICAgICAgICAoIXZhbElzRGVmaW5lZCAmJiBvdGhJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgICAgICF2YWxJc1JlZmxleGl2ZSkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoIXZhbElzTnVsbCAmJiAhdmFsSXNTeW1ib2wgJiYgIW90aElzU3ltYm9sICYmIHZhbHVlIDwgb3RoZXIpIHx8XG4gICAgICAgICAgICAob3RoSXNTeW1ib2wgJiYgdmFsSXNEZWZpbmVkICYmIHZhbElzUmVmbGV4aXZlICYmICF2YWxJc051bGwgJiYgIXZhbElzU3ltYm9sKSB8fFxuICAgICAgICAgICAgKG90aElzTnVsbCAmJiB2YWxJc0RlZmluZWQgJiYgdmFsSXNSZWZsZXhpdmUpIHx8XG4gICAgICAgICAgICAoIW90aElzRGVmaW5lZCAmJiB2YWxJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgICAgICFvdGhJc1JlZmxleGl2ZSkge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlZCBieSBgXy5vcmRlckJ5YCB0byBjb21wYXJlIG11bHRpcGxlIHByb3BlcnRpZXMgb2YgYSB2YWx1ZSB0byBhbm90aGVyXG4gICAgICogYW5kIHN0YWJsZSBzb3J0IHRoZW0uXG4gICAgICpcbiAgICAgKiBJZiBgb3JkZXJzYCBpcyB1bnNwZWNpZmllZCwgYWxsIHZhbHVlcyBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlci4gT3RoZXJ3aXNlLFxuICAgICAqIHNwZWNpZnkgYW4gb3JkZXIgb2YgXCJkZXNjXCIgZm9yIGRlc2NlbmRpbmcgb3IgXCJhc2NcIiBmb3IgYXNjZW5kaW5nIHNvcnQgb3JkZXJcbiAgICAgKiBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW5bXXxzdHJpbmdbXX0gb3JkZXJzIFRoZSBvcmRlciB0byBzb3J0IGJ5IGZvciBlYWNoIHByb3BlcnR5LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHNvcnQgb3JkZXIgaW5kaWNhdG9yIGZvciBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21wYXJlTXVsdGlwbGUob2JqZWN0LCBvdGhlciwgb3JkZXJzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBvYmpDcml0ZXJpYSA9IG9iamVjdC5jcml0ZXJpYSxcbiAgICAgICAgICBvdGhDcml0ZXJpYSA9IG90aGVyLmNyaXRlcmlhLFxuICAgICAgICAgIGxlbmd0aCA9IG9iakNyaXRlcmlhLmxlbmd0aCxcbiAgICAgICAgICBvcmRlcnNMZW5ndGggPSBvcmRlcnMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gY29tcGFyZUFzY2VuZGluZyhvYmpDcml0ZXJpYVtpbmRleF0sIG90aENyaXRlcmlhW2luZGV4XSk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBpZiAoaW5kZXggPj0gb3JkZXJzTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgb3JkZXIgPSBvcmRlcnNbaW5kZXhdO1xuICAgICAgICAgIHJldHVybiByZXN1bHQgKiAob3JkZXIgPT0gJ2Rlc2MnID8gLTEgOiAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gRml4ZXMgYW4gYEFycmF5I3NvcnRgIGJ1ZyBpbiB0aGUgSlMgZW5naW5lIGVtYmVkZGVkIGluIEFkb2JlIGFwcGxpY2F0aW9uc1xuICAgICAgLy8gdGhhdCBjYXVzZXMgaXQsIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcywgdG8gcHJvdmlkZSB0aGUgc2FtZSB2YWx1ZSBmb3JcbiAgICAgIC8vIGBvYmplY3RgIGFuZCBgb3RoZXJgLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL3B1bGwvMTI0N1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIC8vXG4gICAgICAvLyBUaGlzIGFsc28gZW5zdXJlcyBhIHN0YWJsZSBzb3J0IGluIFY4IGFuZCBvdGhlciBlbmdpbmVzLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTkwIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0LmluZGV4IC0gb3RoZXIuaW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMsXG4gICAgICogcGxhY2Vob2xkZXJzLCBhbmQgcHJvdmlkZWQgYXJndW1lbnRzIGludG8gYSBzaW5nbGUgYXJyYXkgb2YgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGhvbGRlcnMgVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcGFyYW1zIHtib29sZWFufSBbaXNDdXJyaWVkXSBTcGVjaWZ5IGNvbXBvc2luZyBmb3IgYSBjdXJyaWVkIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbXBvc2VkIGFyZ3VtZW50cy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21wb3NlQXJncyhhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKSB7XG4gICAgICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgICAgIGhvbGRlcnNMZW5ndGggPSBob2xkZXJzLmxlbmd0aCxcbiAgICAgICAgICBsZWZ0SW5kZXggPSAtMSxcbiAgICAgICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICAgIHJhbmdlTGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3NMZW5ndGggLSBob2xkZXJzTGVuZ3RoLCAwKSxcbiAgICAgICAgICByZXN1bHQgPSBBcnJheShsZWZ0TGVuZ3RoICsgcmFuZ2VMZW5ndGgpLFxuICAgICAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICAgICAgd2hpbGUgKCsrbGVmdEluZGV4IDwgbGVmdExlbmd0aCkge1xuICAgICAgICByZXN1bHRbbGVmdEluZGV4XSA9IHBhcnRpYWxzW2xlZnRJbmRleF07XG4gICAgICB9XG4gICAgICB3aGlsZSAoKythcmdzSW5kZXggPCBob2xkZXJzTGVuZ3RoKSB7XG4gICAgICAgIGlmIChpc1VuY3VycmllZCB8fCBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoKSB7XG4gICAgICAgICAgcmVzdWx0W2hvbGRlcnNbYXJnc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdoaWxlIChyYW5nZUxlbmd0aC0tKSB7XG4gICAgICAgIHJlc3VsdFtsZWZ0SW5kZXgrK10gPSBhcmdzW2FyZ3NJbmRleCsrXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBjb21wb3NlQXJnc2AgZXhjZXB0IHRoYXQgdGhlIGFyZ3VtZW50cyBjb21wb3NpdGlvblxuICAgICAqIGlzIHRhaWxvcmVkIGZvciBgXy5wYXJ0aWFsUmlnaHRgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAqIEBwYXJhbXMge2Jvb2xlYW59IFtpc0N1cnJpZWRdIFNwZWNpZnkgY29tcG9zaW5nIGZvciBhIGN1cnJpZWQgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tcG9zZWQgYXJndW1lbnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBvc2VBcmdzUmlnaHQoYXJncywgcGFydGlhbHMsIGhvbGRlcnMsIGlzQ3VycmllZCkge1xuICAgICAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgICAgIGFyZ3NMZW5ndGggPSBhcmdzLmxlbmd0aCxcbiAgICAgICAgICBob2xkZXJzSW5kZXggPSAtMSxcbiAgICAgICAgICBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsXG4gICAgICAgICAgcmlnaHRJbmRleCA9IC0xLFxuICAgICAgICAgIHJpZ2h0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICAgIHJhbmdlTGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3NMZW5ndGggLSBob2xkZXJzTGVuZ3RoLCAwKSxcbiAgICAgICAgICByZXN1bHQgPSBBcnJheShyYW5nZUxlbmd0aCArIHJpZ2h0TGVuZ3RoKSxcbiAgICAgICAgICBpc1VuY3VycmllZCA9ICFpc0N1cnJpZWQ7XG5cbiAgICAgIHdoaWxlICgrK2FyZ3NJbmRleCA8IHJhbmdlTGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFthcmdzSW5kZXhdID0gYXJnc1thcmdzSW5kZXhdO1xuICAgICAgfVxuICAgICAgdmFyIG9mZnNldCA9IGFyZ3NJbmRleDtcbiAgICAgIHdoaWxlICgrK3JpZ2h0SW5kZXggPCByaWdodExlbmd0aCkge1xuICAgICAgICByZXN1bHRbb2Zmc2V0ICsgcmlnaHRJbmRleF0gPSBwYXJ0aWFsc1tyaWdodEluZGV4XTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2hvbGRlcnNJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICAgICAgaWYgKGlzVW5jdXJyaWVkIHx8IGFyZ3NJbmRleCA8IGFyZ3NMZW5ndGgpIHtcbiAgICAgICAgICByZXN1bHRbb2Zmc2V0ICsgaG9sZGVyc1tob2xkZXJzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcblxuICAgICAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcGllcyBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20uXG4gICAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvcGllZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb3B5T2JqZWN0KHNvdXJjZSwgcHJvcHMsIG9iamVjdCwgY3VzdG9taXplcikge1xuICAgICAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgICAgIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XG5cbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc05ldykge1xuICAgICAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIG93biBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29weVN5bWJvbHMoc291cmNlLCBvYmplY3QpIHtcbiAgICAgIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9scyhzb3VyY2UpLCBvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcGllcyBvd24gYW5kIGluaGVyaXRlZCBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIHRvLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29weVN5bWJvbHNJbihzb3VyY2UsIG9iamVjdCkge1xuICAgICAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzSW4oc291cmNlKSwgb2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5ncm91cEJ5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYWNjdW11bGF0b3IgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpbml0aWFsaXplcl0gVGhlIGFjY3VtdWxhdG9yIG9iamVjdCBpbml0aWFsaXplci5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhZ2dyZWdhdG9yIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUFnZ3JlZ2F0b3Ioc2V0dGVyLCBpbml0aWFsaXplcikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5QWdncmVnYXRvciA6IGJhc2VBZ2dyZWdhdG9yLFxuICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBpbml0aWFsaXplciA/IGluaXRpYWxpemVyKCkgOiB7fTtcblxuICAgICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBzZXR0ZXIsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYWNjdW11bGF0b3IpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5hc3NpZ25gLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25lciBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhc3NpZ25lciBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikge1xuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA+IDEgPyBzb3VyY2VzW2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiBjdXN0b21pemVyO1xuICAgICAgICAgIGxlbmd0aCA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgICAgIGFzc2lnbmVyKG9iamVjdCwgc291cmNlLCBpbmRleCwgY3VzdG9taXplcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYGJhc2VFYWNoYCBvciBgYmFzZUVhY2hSaWdodGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhY2hGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYSBjb2xsZWN0aW9uLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQmFzZUVhY2goZWFjaEZ1bmMsIGZyb21SaWdodCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgcmV0dXJuIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGgsXG4gICAgICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xLFxuICAgICAgICAgICAgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG5cbiAgICAgICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICAgICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVbaW5kZXhdLCBpbmRleCwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYmFzZSBmdW5jdGlvbiBmb3IgbWV0aG9kcyBsaWtlIGBfLmZvckluYCBhbmQgYF8uZm9yT3duYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVCYXNlRm9yKGZyb21SaWdodCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgaXRlcmFibGUgPSBPYmplY3Qob2JqZWN0KSxcbiAgICAgICAgICAgIHByb3BzID0ga2V5c0Z1bmMob2JqZWN0KSxcbiAgICAgICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XG4gICAgICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgb3B0aW9uYWwgYHRoaXNgXG4gICAgICogYmluZGluZyBvZiBgdGhpc0FyZ2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQmluZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnKSB7XG4gICAgICB2YXIgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgICAgIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gICAgICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgICAgICB2YXIgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkoaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5sb3dlckZpcnN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBTdHJpbmdgIGNhc2UgbWV0aG9kIHRvIHVzZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXNlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUNhc2VGaXJzdChtZXRob2ROYW1lKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG5cbiAgICAgICAgdmFyIHN0clN5bWJvbHMgPSBoYXNVbmljb2RlKHN0cmluZylcbiAgICAgICAgICA/IHN0cmluZ1RvQXJyYXkoc3RyaW5nKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIHZhciBjaHIgPSBzdHJTeW1ib2xzXG4gICAgICAgICAgPyBzdHJTeW1ib2xzWzBdXG4gICAgICAgICAgOiBzdHJpbmcuY2hhckF0KDApO1xuXG4gICAgICAgIHZhciB0cmFpbGluZyA9IHN0clN5bWJvbHNcbiAgICAgICAgICA/IGNhc3RTbGljZShzdHJTeW1ib2xzLCAxKS5qb2luKCcnKVxuICAgICAgICAgIDogc3RyaW5nLnNsaWNlKDEpO1xuXG4gICAgICAgIHJldHVybiBjaHJbbWV0aG9kTmFtZV0oKSArIHRyYWlsaW5nO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5jYW1lbENhc2VgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdG8gY29tYmluZSBlYWNoIHdvcmQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29tcG91bmRlciBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVDb21wb3VuZGVyKGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBhcnJheVJlZHVjZSh3b3JkcyhkZWJ1cnIoc3RyaW5nKS5yZXBsYWNlKHJlQXBvcywgJycpKSwgY2FsbGJhY2ssICcnKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgYW4gaW5zdGFuY2Ugb2YgYEN0b3JgIHJlZ2FyZGxlc3Mgb2ZcbiAgICAgKiB3aGV0aGVyIGl0IHdhcyBpbnZva2VkIGFzIHBhcnQgb2YgYSBgbmV3YCBleHByZXNzaW9uIG9yIGJ5IGBjYWxsYCBvciBgYXBwbHlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBDdG9yIFRoZSBjb25zdHJ1Y3RvciB0byB3cmFwLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQ3RvcihDdG9yKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIFVzZSBhIGBzd2l0Y2hgIHN0YXRlbWVudCB0byB3b3JrIHdpdGggY2xhc3MgY29uc3RydWN0b3JzLiBTZWVcbiAgICAgICAgLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1mdW5jdGlvbi1vYmplY3RzLWNhbGwtdGhpc2FyZ3VtZW50LWFyZ3VtZW50c2xpc3RcbiAgICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgQ3RvcjtcbiAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdKTtcbiAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdKTtcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdKTtcbiAgICAgICAgICBjYXNlIDc6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdLCBhcmdzWzZdKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGhpc0JpbmRpbmcgPSBiYXNlQ3JlYXRlKEN0b3IucHJvdG90eXBlKSxcbiAgICAgICAgICAgIHJlc3VsdCA9IEN0b3IuYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuXG4gICAgICAgIC8vIE1pbWljIHRoZSBjb25zdHJ1Y3RvcidzIGByZXR1cm5gIGJlaGF2aW9yLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4MTMuMi4yIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogdGhpc0JpbmRpbmc7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBlbmFibGUgY3VycnlpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYXJpdHkgVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUN1cnJ5KGZ1bmMsIGJpdG1hc2ssIGFyaXR5KSB7XG4gICAgICB2YXIgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgICAgICBpbmRleCA9IGxlbmd0aCxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyID0gZ2V0SG9sZGVyKHdyYXBwZXIpO1xuXG4gICAgICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHZhciBob2xkZXJzID0gKGxlbmd0aCA8IDMgJiYgYXJnc1swXSAhPT0gcGxhY2Vob2xkZXIgJiYgYXJnc1tsZW5ndGggLSAxXSAhPT0gcGxhY2Vob2xkZXIpXG4gICAgICAgICAgPyBbXVxuICAgICAgICAgIDogcmVwbGFjZUhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuXG4gICAgICAgIGxlbmd0aCAtPSBob2xkZXJzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8IGFyaXR5KSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlY3VycnkoXG4gICAgICAgICAgICBmdW5jLCBiaXRtYXNrLCBjcmVhdGVIeWJyaWQsIHdyYXBwZXIucGxhY2Vob2xkZXIsIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFyZ3MsIGhvbGRlcnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhcml0eSAtIGxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICAgICAgcmV0dXJuIGFwcGx5KGZuLCB0aGlzLCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgXy5maW5kYCBvciBgXy5maW5kTGFzdGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZpbmRJbmRleEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGNvbGxlY3Rpb24gaW5kZXguXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmluZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVGaW5kKGZpbmRJbmRleEZ1bmMpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGZyb21JbmRleCkge1xuICAgICAgICB2YXIgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG4gICAgICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgICAgICB2YXIgaXRlcmF0ZWUgPSBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpO1xuICAgICAgICAgIGNvbGxlY3Rpb24gPSBrZXlzKGNvbGxlY3Rpb24pO1xuICAgICAgICAgIHByZWRpY2F0ZSA9IGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSk7IH07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGluZGV4ID0gZmluZEluZGV4RnVuYyhjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGZyb21JbmRleCk7XG4gICAgICAgIHJldHVybiBpbmRleCA+IC0xID8gaXRlcmFibGVbaXRlcmF0ZWUgPyBjb2xsZWN0aW9uW2luZGV4XSA6IGluZGV4XSA6IHVuZGVmaW5lZDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLmZsb3dgIG9yIGBfLmZsb3dSaWdodGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZsb3cgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRmxvdyhmcm9tUmlnaHQpIHtcbiAgICAgIHJldHVybiBmbGF0UmVzdChmdW5jdGlvbihmdW5jcykge1xuICAgICAgICB2YXIgbGVuZ3RoID0gZnVuY3MubGVuZ3RoLFxuICAgICAgICAgICAgaW5kZXggPSBsZW5ndGgsXG4gICAgICAgICAgICBwcmVyZXEgPSBMb2Rhc2hXcmFwcGVyLnByb3RvdHlwZS50aHJ1O1xuXG4gICAgICAgIGlmIChmcm9tUmlnaHQpIHtcbiAgICAgICAgICBmdW5jcy5yZXZlcnNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgICB2YXIgZnVuYyA9IGZ1bmNzW2luZGV4XTtcbiAgICAgICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocHJlcmVxICYmICF3cmFwcGVyICYmIGdldEZ1bmNOYW1lKGZ1bmMpID09ICd3cmFwcGVyJykge1xuICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBuZXcgTG9kYXNoV3JhcHBlcihbXSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluZGV4ID0gd3JhcHBlciA/IGluZGV4IDogbGVuZ3RoO1xuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgIGZ1bmMgPSBmdW5jc1tpbmRleF07XG5cbiAgICAgICAgICB2YXIgZnVuY05hbWUgPSBnZXRGdW5jTmFtZShmdW5jKSxcbiAgICAgICAgICAgICAgZGF0YSA9IGZ1bmNOYW1lID09ICd3cmFwcGVyJyA/IGdldERhdGEoZnVuYykgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAoZGF0YSAmJiBpc0xhemlhYmxlKGRhdGFbMF0pICYmXG4gICAgICAgICAgICAgICAgZGF0YVsxXSA9PSAoV1JBUF9BUllfRkxBRyB8IFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfUEFSVElBTF9GTEFHIHwgV1JBUF9SRUFSR19GTEFHKSAmJlxuICAgICAgICAgICAgICAgICFkYXRhWzRdLmxlbmd0aCAmJiBkYXRhWzldID09IDFcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICB3cmFwcGVyID0gd3JhcHBlcltnZXRGdW5jTmFtZShkYXRhWzBdKV0uYXBwbHkod3JhcHBlciwgZGF0YVszXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdyYXBwZXIgPSAoZnVuYy5sZW5ndGggPT0gMSAmJiBpc0xhemlhYmxlKGZ1bmMpKVxuICAgICAgICAgICAgICA/IHdyYXBwZXJbZnVuY05hbWVdKClcbiAgICAgICAgICAgICAgOiB3cmFwcGVyLnRocnUoZnVuYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgICAgICAgdmFsdWUgPSBhcmdzWzBdO1xuXG4gICAgICAgICAgaWYgKHdyYXBwZXIgJiYgYXJncy5sZW5ndGggPT0gMSAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXIucGxhbnQodmFsdWUpLnZhbHVlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBpbmRleCA9IDAsXG4gICAgICAgICAgICAgIHJlc3VsdCA9IGxlbmd0aCA/IGZ1bmNzW2luZGV4XS5hcHBseSh0aGlzLCBhcmdzKSA6IHZhbHVlO1xuXG4gICAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmNzW2luZGV4XS5jYWxsKHRoaXMsIHJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggb3B0aW9uYWwgYHRoaXNgXG4gICAgICogYmluZGluZyBvZiBgdGhpc0FyZ2AsIHBhcnRpYWwgYXBwbGljYXRpb24sIGFuZCBjdXJyeWluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxzdHJpbmd9IGZ1bmMgVGhlIGZ1bmN0aW9uIG9yIG1ldGhvZCBuYW1lIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gICAgICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzUmlnaHRdIFRoZSBhcmd1bWVudHMgdG8gYXBwZW5kIHRvIHRob3NlIHByb3ZpZGVkXG4gICAgICogIHRvIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNSaWdodF0gVGhlIGBwYXJ0aWFsc1JpZ2h0YCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUh5YnJpZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgICAgIHZhciBpc0FyeSA9IGJpdG1hc2sgJiBXUkFQX0FSWV9GTEFHLFxuICAgICAgICAgIGlzQmluZCA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyxcbiAgICAgICAgICBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHLFxuICAgICAgICAgIGlzQ3VycmllZCA9IGJpdG1hc2sgJiAoV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSxcbiAgICAgICAgICBpc0ZsaXAgPSBiaXRtYXNrICYgV1JBUF9GTElQX0ZMQUcsXG4gICAgICAgICAgQ3RvciA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgICAgICBpbmRleCA9IGxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNDdXJyaWVkKSB7XG4gICAgICAgICAgdmFyIHBsYWNlaG9sZGVyID0gZ2V0SG9sZGVyKHdyYXBwZXIpLFxuICAgICAgICAgICAgICBob2xkZXJzQ291bnQgPSBjb3VudEhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0aWFscykge1xuICAgICAgICAgIGFyZ3MgPSBjb21wb3NlQXJncyhhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFydGlhbHNSaWdodCkge1xuICAgICAgICAgIGFyZ3MgPSBjb21wb3NlQXJnc1JpZ2h0KGFyZ3MsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCwgaXNDdXJyaWVkKTtcbiAgICAgICAgfVxuICAgICAgICBsZW5ndGggLT0gaG9sZGVyc0NvdW50O1xuICAgICAgICBpZiAoaXNDdXJyaWVkICYmIGxlbmd0aCA8IGFyaXR5KSB7XG4gICAgICAgICAgdmFyIG5ld0hvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlY3VycnkoXG4gICAgICAgICAgICBmdW5jLCBiaXRtYXNrLCBjcmVhdGVIeWJyaWQsIHdyYXBwZXIucGxhY2Vob2xkZXIsIHRoaXNBcmcsXG4gICAgICAgICAgICBhcmdzLCBuZXdIb2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkgLSBsZW5ndGhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0aGlzQmluZGluZyA9IGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLFxuICAgICAgICAgICAgZm4gPSBpc0JpbmRLZXkgPyB0aGlzQmluZGluZ1tmdW5jXSA6IGZ1bmM7XG5cbiAgICAgICAgbGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gICAgICAgIGlmIChhcmdQb3MpIHtcbiAgICAgICAgICBhcmdzID0gcmVvcmRlcihhcmdzLCBhcmdQb3MpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRmxpcCAmJiBsZW5ndGggPiAxKSB7XG4gICAgICAgICAgYXJncy5yZXZlcnNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJ5ICYmIGFyeSA8IGxlbmd0aCkge1xuICAgICAgICAgIGFyZ3MubGVuZ3RoID0gYXJ5O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpIHtcbiAgICAgICAgICBmbiA9IEN0b3IgfHwgY3JlYXRlQ3Rvcihmbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNCaW5kaW5nLCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmludmVydEJ5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYWNjdW11bGF0b3IgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHRvSXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgaXRlcmF0ZWVzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGludmVydGVyIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUludmVydGVyKHNldHRlciwgdG9JdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VJbnZlcnRlcihvYmplY3QsIHNldHRlciwgdG9JdGVyYXRlZShpdGVyYXRlZSksIHt9KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYSBtYXRoZW1hdGljYWwgb3BlcmF0aW9uIG9uIHR3byB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9wZXJhdG9yIFRoZSBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSB1c2VkIGZvciBgdW5kZWZpbmVkYCBhcmd1bWVudHMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbiBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVNYXRoT3BlcmF0aW9uKG9wZXJhdG9yLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgb3RoZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3RoZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG90aGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiBvdGhlciA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFsdWUgPSBiYXNlVG9TdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgb3RoZXIgPSBiYXNlVG9TdHJpbmcob3RoZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGJhc2VUb051bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICBvdGhlciA9IGJhc2VUb051bWJlcihvdGhlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdCA9IG9wZXJhdG9yKHZhbHVlLCBvdGhlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8ub3ZlcmAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFycmF5RnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGl0ZXJhdGVlcy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBvdmVyIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZU92ZXIoYXJyYXlGdW5jKSB7XG4gICAgICByZXR1cm4gZmxhdFJlc3QoZnVuY3Rpb24oaXRlcmF0ZWVzKSB7XG4gICAgICAgIGl0ZXJhdGVlcyA9IGFycmF5TWFwKGl0ZXJhdGVlcywgYmFzZVVuYXJ5KGdldEl0ZXJhdGVlKCkpKTtcbiAgICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgICAgICB2YXIgdGhpc0FyZyA9IHRoaXM7XG4gICAgICAgICAgcmV0dXJuIGFycmF5RnVuYyhpdGVyYXRlZXMsIGZ1bmN0aW9uKGl0ZXJhdGVlKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwbHkoaXRlcmF0ZWUsIHRoaXNBcmcsIGFyZ3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGhlIHBhZGRpbmcgZm9yIGBzdHJpbmdgIGJhc2VkIG9uIGBsZW5ndGhgLiBUaGUgYGNoYXJzYCBzdHJpbmdcbiAgICAgKiBpcyB0cnVuY2F0ZWQgaWYgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGV4Y2VlZHMgYGxlbmd0aGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9JyAnXSBUaGUgc3RyaW5nIHVzZWQgYXMgcGFkZGluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBwYWRkaW5nIGZvciBgc3RyaW5nYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVQYWRkaW5nKGxlbmd0aCwgY2hhcnMpIHtcbiAgICAgIGNoYXJzID0gY2hhcnMgPT09IHVuZGVmaW5lZCA/ICcgJyA6IGJhc2VUb1N0cmluZyhjaGFycyk7XG5cbiAgICAgIHZhciBjaGFyc0xlbmd0aCA9IGNoYXJzLmxlbmd0aDtcbiAgICAgIGlmIChjaGFyc0xlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIGNoYXJzTGVuZ3RoID8gYmFzZVJlcGVhdChjaGFycywgbGVuZ3RoKSA6IGNoYXJzO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IGJhc2VSZXBlYXQoY2hhcnMsIG5hdGl2ZUNlaWwobGVuZ3RoIC8gc3RyaW5nU2l6ZShjaGFycykpKTtcbiAgICAgIHJldHVybiBoYXNVbmljb2RlKGNoYXJzKVxuICAgICAgICA/IGNhc3RTbGljZShzdHJpbmdUb0FycmF5KHJlc3VsdCksIDAsIGxlbmd0aCkuam9pbignJylcbiAgICAgICAgOiByZXN1bHQuc2xpY2UoMCwgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nXG4gICAgICogb2YgYHRoaXNBcmdgIGFuZCBgcGFydGlhbHNgIHByZXBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gICAgICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgICAgIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gICAgICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgICAgICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICAgICAgICBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgICAgIGxlZnRJbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVmdExlbmd0aCA9IHBhcnRpYWxzLmxlbmd0aCxcbiAgICAgICAgICAgIGFyZ3MgPSBBcnJheShsZWZ0TGVuZ3RoICsgYXJnc0xlbmd0aCksXG4gICAgICAgICAgICBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG5cbiAgICAgICAgd2hpbGUgKCsrbGVmdEluZGV4IDwgbGVmdExlbmd0aCkge1xuICAgICAgICAgIGFyZ3NbbGVmdEluZGV4XSA9IHBhcnRpYWxzW2xlZnRJbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGFyZ3NMZW5ndGgtLSkge1xuICAgICAgICAgIGFyZ3NbbGVmdEluZGV4KytdID0gYXJndW1lbnRzWysrYXJnc0luZGV4XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBwbHkoZm4sIGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgXy5yYW5nZWAgb3IgYF8ucmFuZ2VSaWdodGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJhbmdlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVJhbmdlKGZyb21SaWdodCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICAgICAgaWYgKHN0ZXAgJiYgdHlwZW9mIHN0ZXAgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoc3RhcnQsIGVuZCwgc3RlcCkpIHtcbiAgICAgICAgICBlbmQgPSBzdGVwID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVuc3VyZSB0aGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAgICAgICAgc3RhcnQgPSB0b0Zpbml0ZShzdGFydCk7XG4gICAgICAgIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGVuZCA9IHN0YXJ0O1xuICAgICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbmQgPSB0b0Zpbml0ZShlbmQpO1xuICAgICAgICB9XG4gICAgICAgIHN0ZXAgPSBzdGVwID09PSB1bmRlZmluZWQgPyAoc3RhcnQgPCBlbmQgPyAxIDogLTEpIDogdG9GaW5pdGUoc3RlcCk7XG4gICAgICAgIHJldHVybiBiYXNlUmFuZ2Uoc3RhcnQsIGVuZCwgc3RlcCwgZnJvbVJpZ2h0KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYSByZWxhdGlvbmFsIG9wZXJhdGlvbiBvbiB0d28gdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcGVyYXRvciBUaGUgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJlbGF0aW9uYWwgb3BlcmF0aW9uIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24ob3BlcmF0b3IpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICAgICAgaWYgKCEodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnICYmIHR5cGVvZiBvdGhlciA9PSAnc3RyaW5nJykpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRvTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICBvdGhlciA9IHRvTnVtYmVyKG90aGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3BlcmF0b3IodmFsdWUsIG90aGVyKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGNvbnRpbnVlIGN1cnJ5aW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gd3JhcEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgYGZ1bmNgIHdyYXBwZXIuXG4gICAgICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdmFsdWUuXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICAgICAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVJlY3VycnkoZnVuYywgYml0bWFzaywgd3JhcEZ1bmMsIHBsYWNlaG9sZGVyLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gICAgICB2YXIgaXNDdXJyeSA9IGJpdG1hc2sgJiBXUkFQX0NVUlJZX0ZMQUcsXG4gICAgICAgICAgbmV3SG9sZGVycyA9IGlzQ3VycnkgPyBob2xkZXJzIDogdW5kZWZpbmVkLFxuICAgICAgICAgIG5ld0hvbGRlcnNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBob2xkZXJzLFxuICAgICAgICAgIG5ld1BhcnRpYWxzID0gaXNDdXJyeSA/IHBhcnRpYWxzIDogdW5kZWZpbmVkLFxuICAgICAgICAgIG5ld1BhcnRpYWxzUmlnaHQgPSBpc0N1cnJ5ID8gdW5kZWZpbmVkIDogcGFydGlhbHM7XG5cbiAgICAgIGJpdG1hc2sgfD0gKGlzQ3VycnkgPyBXUkFQX1BBUlRJQUxfRkxBRyA6IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKTtcbiAgICAgIGJpdG1hc2sgJj0gfihpc0N1cnJ5ID8gV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgOiBXUkFQX1BBUlRJQUxfRkxBRyk7XG5cbiAgICAgIGlmICghKGJpdG1hc2sgJiBXUkFQX0NVUlJZX0JPVU5EX0ZMQUcpKSB7XG4gICAgICAgIGJpdG1hc2sgJj0gfihXUkFQX0JJTkRfRkxBRyB8IFdSQVBfQklORF9LRVlfRkxBRyk7XG4gICAgICB9XG4gICAgICB2YXIgbmV3RGF0YSA9IFtcbiAgICAgICAgZnVuYywgYml0bWFzaywgdGhpc0FyZywgbmV3UGFydGlhbHMsIG5ld0hvbGRlcnMsIG5ld1BhcnRpYWxzUmlnaHQsXG4gICAgICAgIG5ld0hvbGRlcnNSaWdodCwgYXJnUG9zLCBhcnksIGFyaXR5XG4gICAgICBdO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gd3JhcEZ1bmMuYXBwbHkodW5kZWZpbmVkLCBuZXdEYXRhKTtcbiAgICAgIGlmIChpc0xhemlhYmxlKGZ1bmMpKSB7XG4gICAgICAgIHNldERhdGEocmVzdWx0LCBuZXdEYXRhKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICAgICAgcmV0dXJuIHNldFdyYXBUb1N0cmluZyhyZXN1bHQsIGZ1bmMsIGJpdG1hc2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLnJvdW5kYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBNYXRoYCBtZXRob2QgdG8gdXNlIHdoZW4gcm91bmRpbmcuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcm91bmQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUm91bmQobWV0aG9kTmFtZSkge1xuICAgICAgdmFyIGZ1bmMgPSBNYXRoW21ldGhvZE5hbWVdO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG51bWJlciwgcHJlY2lzaW9uKSB7XG4gICAgICAgIG51bWJlciA9IHRvTnVtYmVyKG51bWJlcik7XG4gICAgICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbiA9PSBudWxsID8gMCA6IG5hdGl2ZU1pbih0b0ludGVnZXIocHJlY2lzaW9uKSwgMjkyKTtcbiAgICAgICAgaWYgKHByZWNpc2lvbiAmJiBuYXRpdmVJc0Zpbml0ZShudW1iZXIpKSB7XG4gICAgICAgICAgLy8gU2hpZnQgd2l0aCBleHBvbmVudGlhbCBub3RhdGlvbiB0byBhdm9pZCBmbG9hdGluZy1wb2ludCBpc3N1ZXMuXG4gICAgICAgICAgLy8gU2VlIFtNRE5dKGh0dHBzOi8vbWRuLmlvL3JvdW5kI0V4YW1wbGVzKSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgICAgIHZhciBwYWlyID0gKHRvU3RyaW5nKG51bWJlcikgKyAnZScpLnNwbGl0KCdlJyksXG4gICAgICAgICAgICAgIHZhbHVlID0gZnVuYyhwYWlyWzBdICsgJ2UnICsgKCtwYWlyWzFdICsgcHJlY2lzaW9uKSk7XG5cbiAgICAgICAgICBwYWlyID0gKHRvU3RyaW5nKHZhbHVlKSArICdlJykuc3BsaXQoJ2UnKTtcbiAgICAgICAgICByZXR1cm4gKyhwYWlyWzBdICsgJ2UnICsgKCtwYWlyWzFdIC0gcHJlY2lzaW9uKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmMobnVtYmVyKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNldCBvYmplY3Qgb2YgYHZhbHVlc2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFkZCB0byB0aGUgc2V0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBzZXQuXG4gICAgICovXG4gICAgdmFyIGNyZWF0ZVNldCA9ICEoU2V0ICYmICgxIC8gc2V0VG9BcnJheShuZXcgU2V0KFssLTBdKSlbMV0pID09IElORklOSVRZKSA/IG5vb3AgOiBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgICAgIHJldHVybiBuZXcgU2V0KHZhbHVlcyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgXy50b1BhaXJzYCBvciBgXy50b1BhaXJzSW5gIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhaXJzIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVRvUGFpcnMoa2V5c0Z1bmMpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgdmFyIHRhZyA9IGdldFRhZyhvYmplY3QpO1xuICAgICAgICBpZiAodGFnID09IG1hcFRhZykge1xuICAgICAgICAgIHJldHVybiBtYXBUb0FycmF5KG9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhZyA9PSBzZXRUYWcpIHtcbiAgICAgICAgICByZXR1cm4gc2V0VG9QYWlycyhvYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiYXNlVG9QYWlycyhvYmplY3QsIGtleXNGdW5jKG9iamVjdCkpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBlaXRoZXIgY3VycmllcyBvciBpbnZva2VzIGBmdW5jYCB3aXRoIG9wdGlvbmFsXG4gICAgICogYHRoaXNgIGJpbmRpbmcgYW5kIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxzdHJpbmd9IGZ1bmMgVGhlIGZ1bmN0aW9uIG9yIG1ldGhvZCBuYW1lIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gICAgICogICAgMSAtIGBfLmJpbmRgXG4gICAgICogICAgMiAtIGBfLmJpbmRLZXlgXG4gICAgICogICAgNCAtIGBfLmN1cnJ5YCBvciBgXy5jdXJyeVJpZ2h0YCBvZiBhIGJvdW5kIGZ1bmN0aW9uXG4gICAgICogICAgOCAtIGBfLmN1cnJ5YFxuICAgICAqICAgMTYgLSBgXy5jdXJyeVJpZ2h0YFxuICAgICAqICAgMzIgLSBgXy5wYXJ0aWFsYFxuICAgICAqICAgNjQgLSBgXy5wYXJ0aWFsUmlnaHRgXG4gICAgICogIDEyOCAtIGBfLnJlYXJnYFxuICAgICAqICAyNTYgLSBgXy5hcnlgXG4gICAgICogIDUxMiAtIGBfLmZsaXBgXG4gICAgICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlV3JhcChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gICAgICB2YXIgaXNCaW5kS2V5ID0gYml0bWFzayAmIFdSQVBfQklORF9LRVlfRkxBRztcbiAgICAgIGlmICghaXNCaW5kS2V5ICYmIHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IHBhcnRpYWxzID8gcGFydGlhbHMubGVuZ3RoIDogMDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIGJpdG1hc2sgJj0gfihXUkFQX1BBUlRJQUxfRkxBRyB8IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKTtcbiAgICAgICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgYXJ5ID0gYXJ5ID09PSB1bmRlZmluZWQgPyBhcnkgOiBuYXRpdmVNYXgodG9JbnRlZ2VyKGFyeSksIDApO1xuICAgICAgYXJpdHkgPSBhcml0eSA9PT0gdW5kZWZpbmVkID8gYXJpdHkgOiB0b0ludGVnZXIoYXJpdHkpO1xuICAgICAgbGVuZ3RoIC09IGhvbGRlcnMgPyBob2xkZXJzLmxlbmd0aCA6IDA7XG5cbiAgICAgIGlmIChiaXRtYXNrICYgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxzUmlnaHQgPSBwYXJ0aWFscyxcbiAgICAgICAgICAgIGhvbGRlcnNSaWdodCA9IGhvbGRlcnM7XG5cbiAgICAgICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdmFyIGRhdGEgPSBpc0JpbmRLZXkgPyB1bmRlZmluZWQgOiBnZXREYXRhKGZ1bmMpO1xuXG4gICAgICB2YXIgbmV3RGF0YSA9IFtcbiAgICAgICAgZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCxcbiAgICAgICAgYXJnUG9zLCBhcnksIGFyaXR5XG4gICAgICBdO1xuXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBtZXJnZURhdGEobmV3RGF0YSwgZGF0YSk7XG4gICAgICB9XG4gICAgICBmdW5jID0gbmV3RGF0YVswXTtcbiAgICAgIGJpdG1hc2sgPSBuZXdEYXRhWzFdO1xuICAgICAgdGhpc0FyZyA9IG5ld0RhdGFbMl07XG4gICAgICBwYXJ0aWFscyA9IG5ld0RhdGFbM107XG4gICAgICBob2xkZXJzID0gbmV3RGF0YVs0XTtcbiAgICAgIGFyaXR5ID0gbmV3RGF0YVs5XSA9IG5ld0RhdGFbOV0gPT09IHVuZGVmaW5lZFxuICAgICAgICA/IChpc0JpbmRLZXkgPyAwIDogZnVuYy5sZW5ndGgpXG4gICAgICAgIDogbmF0aXZlTWF4KG5ld0RhdGFbOV0gLSBsZW5ndGgsIDApO1xuXG4gICAgICBpZiAoIWFyaXR5ICYmIGJpdG1hc2sgJiAoV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSkge1xuICAgICAgICBiaXRtYXNrICY9IH4oV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKTtcbiAgICAgIH1cbiAgICAgIGlmICghYml0bWFzayB8fCBiaXRtYXNrID09IFdSQVBfQklORF9GTEFHKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpO1xuICAgICAgfSBlbHNlIGlmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRyB8fCBiaXRtYXNrID09IFdSQVBfQ1VSUllfUklHSFRfRkxBRykge1xuICAgICAgICByZXN1bHQgPSBjcmVhdGVDdXJyeShmdW5jLCBiaXRtYXNrLCBhcml0eSk7XG4gICAgICB9IGVsc2UgaWYgKChiaXRtYXNrID09IFdSQVBfUEFSVElBTF9GTEFHIHx8IGJpdG1hc2sgPT0gKFdSQVBfQklORF9GTEFHIHwgV1JBUF9QQVJUSUFMX0ZMQUcpKSAmJiAhaG9sZGVycy5sZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0ID0gY3JlYXRlUGFydGlhbChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBjcmVhdGVIeWJyaWQuYXBwbHkodW5kZWZpbmVkLCBuZXdEYXRhKTtcbiAgICAgIH1cbiAgICAgIHZhciBzZXR0ZXIgPSBkYXRhID8gYmFzZVNldERhdGEgOiBzZXREYXRhO1xuICAgICAgcmV0dXJuIHNldFdyYXBUb1N0cmluZyhzZXR0ZXIocmVzdWx0LCBuZXdEYXRhKSwgZnVuYywgYml0bWFzayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlZCBieSBgXy5kZWZhdWx0c2AgdG8gY3VzdG9taXplIGl0cyBgXy5hc3NpZ25JbmAgdXNlIHRvIGFzc2lnbiBwcm9wZXJ0aWVzXG4gICAgICogb2Ygc291cmNlIG9iamVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCBmb3IgYWxsIGRlc3RpbmF0aW9uIHByb3BlcnRpZXNcbiAgICAgKiB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gb2JqVmFsdWUgVGhlIGRlc3RpbmF0aW9uIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHNvdXJjZSB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBwYXJlbnQgb2JqZWN0IG9mIGBvYmpWYWx1ZWAuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICAgIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgKGVxKG9ialZhbHVlLCBvYmplY3RQcm90b1trZXldKSAmJiAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSB7XG4gICAgICAgIHJldHVybiBzcmNWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmpWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGJ5IGBfLmRlZmF1bHRzRGVlcGAgdG8gY3VzdG9taXplIGl0cyBgXy5tZXJnZWAgdXNlIHRvIG1lcmdlIHNvdXJjZVxuICAgICAqIG9iamVjdHMgaW50byBkZXN0aW5hdGlvbiBvYmplY3RzIHRoYXQgYXJlIHBhc3NlZCB0aHJ1LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IG9ialZhbHVlIFRoZSBkZXN0aW5hdGlvbiB2YWx1ZS5cbiAgICAgKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSBzb3VyY2UgdmFsdWUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBtZXJnZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBwYXJlbnQgb2JqZWN0IG9mIGBvYmpWYWx1ZWAuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgcGFyZW50IG9iamVjdCBvZiBgc3JjVmFsdWVgLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXG4gICAgICogIGNvdW50ZXJwYXJ0cy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgdG8gYXNzaWduLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGN1c3RvbURlZmF1bHRzTWVyZ2Uob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjaykge1xuICAgICAgaWYgKGlzT2JqZWN0KG9ialZhbHVlKSAmJiBpc09iamVjdChzcmNWYWx1ZSkpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIHN0YWNrLnNldChzcmNWYWx1ZSwgb2JqVmFsdWUpO1xuICAgICAgICBiYXNlTWVyZ2Uob2JqVmFsdWUsIHNyY1ZhbHVlLCB1bmRlZmluZWQsIGN1c3RvbURlZmF1bHRzTWVyZ2UsIHN0YWNrKTtcbiAgICAgICAgc3RhY2tbJ2RlbGV0ZSddKHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmpWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGJ5IGBfLm9taXRgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uY2xvbmVEZWVwYCB1c2UgdG8gb25seSBjbG9uZSBwbGFpblxuICAgICAqIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bmNsb25lZCB2YWx1ZSBvciBgdW5kZWZpbmVkYCB0byBkZWZlciBjbG9uaW5nIHRvIGBfLmNsb25lRGVlcGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3VzdG9tT21pdENsb25lKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gICAgICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gICAgICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICB2YXIgYXJyU3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gICAgICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gICAgICBpZiAoYXJyU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBhcnJTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gYXJyYXk7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IFNldENhY2hlIDogdW5kZWZpbmVkO1xuXG4gICAgICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcbiAgICAgIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gICAgICAvLyBJZ25vcmUgbm9uLWluZGV4IHByb3BlcnRpZXMuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGFyckxlbmd0aCkge1xuICAgICAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2luZGV4XTtcblxuICAgICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBhcnJWYWx1ZSwgaW5kZXgsIG90aGVyLCBhcnJheSwgc3RhY2spXG4gICAgICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbXBhcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBpZiAoc2Vlbikge1xuICAgICAgICAgIGlmICghYXJyYXlTb21lKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNhY2hlSGFzKHNlZW4sIG90aEluZGV4KSAmJlxuICAgICAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBzZWVuLnB1c2gob3RoSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCEoXG4gICAgICAgICAgICAgIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fFxuICAgICAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICAgICAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gICAgICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgICAgIChvYmplY3QuYnl0ZU9mZnNldCAhPSBvdGhlci5ieXRlT2Zmc2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvYmplY3QgPSBvYmplY3QuYnVmZmVyO1xuICAgICAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgY2FzZSBib29sVGFnOlxuICAgICAgICBjYXNlIGRhdGVUYWc6XG4gICAgICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAgICAgLy8gSW52YWxpZCBkYXRlcyBhcmUgY29lcmNlZCB0byBgTmFOYC5cbiAgICAgICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgICAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgICAgIHJldHVybiBvYmplY3QubmFtZSA9PSBvdGhlci5uYW1lICYmIG9iamVjdC5tZXNzYWdlID09IG90aGVyLm1lc3NhZ2U7XG5cbiAgICAgICAgY2FzZSByZWdleHBUYWc6XG4gICAgICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgICAgIC8vIENvZXJjZSByZWdleGVzIHRvIHN0cmluZ3MgYW5kIHRyZWF0IHN0cmluZ3MsIHByaW1pdGl2ZXMgYW5kIG9iamVjdHMsXG4gICAgICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAgICAgcmV0dXJuIG9iamVjdCA9PSAob3RoZXIgKyAnJyk7XG5cbiAgICAgICAgY2FzZSBtYXBUYWc6XG4gICAgICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICAgICAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgICAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xuICAgICAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXG4gICAgICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgICAgICBvYmpQcm9wcyA9IGdldEFsbEtleXMob2JqZWN0KSxcbiAgICAgICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXG4gICAgICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgICAgICBvdGhMZW5ndGggPSBvdGhQcm9wcy5sZW5ndGg7XG5cbiAgICAgIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICAgICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICB2YXIgb2JqU3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICAgICAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICAgICAgaWYgKG9ialN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gb2JqU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IG9iamVjdDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSB0cnVlO1xuICAgICAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICAgICAgc3RhY2suc2V0KG90aGVyLCBvYmplY3QpO1xuXG4gICAgICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkge1xuICAgICAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldO1xuXG4gICAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxuICAgICAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcbiAgICAgICAgICAgICAgOiBjb21wYXJlZFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XG4gICAgICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xuXG4gICAgICAgIC8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLlxuICAgICAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmXG4gICAgICAgICAgICAoJ2NvbnN0cnVjdG9yJyBpbiBvYmplY3QgJiYgJ2NvbnN0cnVjdG9yJyBpbiBvdGhlcikgJiZcbiAgICAgICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJlxuICAgICAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkge1xuICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIGZsYXR0ZW5zIHRoZSByZXN0IGFycmF5LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXRSZXN0KGZ1bmMpIHtcbiAgICAgIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCB1bmRlZmluZWQsIGZsYXR0ZW4pLCBmdW5jICsgJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XG4gICAgICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzLCBnZXRTeW1ib2xzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gICAgICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0QWxsS2V5c0luKG9iamVjdCkge1xuICAgICAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0luLCBnZXRTeW1ib2xzSW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gICAgICovXG4gICAgdmFyIGdldERhdGEgPSAhbWV0YU1hcCA/IG5vb3AgOiBmdW5jdGlvbihmdW5jKSB7XG4gICAgICByZXR1cm4gbWV0YU1hcC5nZXQoZnVuYyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5hbWUgb2YgYGZ1bmNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBuYW1lLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEZ1bmNOYW1lKGZ1bmMpIHtcbiAgICAgIHZhciByZXN1bHQgPSAoZnVuYy5uYW1lICsgJycpLFxuICAgICAgICAgIGFycmF5ID0gcmVhbE5hbWVzW3Jlc3VsdF0sXG4gICAgICAgICAgbGVuZ3RoID0gaGFzT3duUHJvcGVydHkuY2FsbChyZWFsTmFtZXMsIHJlc3VsdCkgPyBhcnJheS5sZW5ndGggOiAwO1xuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgdmFyIGRhdGEgPSBhcnJheVtsZW5ndGhdLFxuICAgICAgICAgICAgb3RoZXJGdW5jID0gZGF0YS5mdW5jO1xuICAgICAgICBpZiAob3RoZXJGdW5jID09IG51bGwgfHwgb3RoZXJGdW5jID09IGZ1bmMpIHtcbiAgICAgICAgICByZXR1cm4gZGF0YS5uYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGFyZ3VtZW50IHBsYWNlaG9sZGVyIHZhbHVlIGZvciBgZnVuY2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHBsYWNlaG9sZGVyIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEhvbGRlcihmdW5jKSB7XG4gICAgICB2YXIgb2JqZWN0ID0gaGFzT3duUHJvcGVydHkuY2FsbChsb2Rhc2gsICdwbGFjZWhvbGRlcicpID8gbG9kYXNoIDogZnVuYztcbiAgICAgIHJldHVybiBvYmplY3QucGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYXBwcm9wcmlhdGUgXCJpdGVyYXRlZVwiIGZ1bmN0aW9uLiBJZiBgXy5pdGVyYXRlZWAgaXMgY3VzdG9taXplZCxcbiAgICAgKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGN1c3RvbSBtZXRob2QsIG90aGVyd2lzZSBpdCByZXR1cm5zIGBiYXNlSXRlcmF0ZWVgLlxuICAgICAqIElmIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQsIHRoZSBjaG9zZW4gZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRoZW0gYW5kXG4gICAgICogaXRzIHJlc3VsdCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSBbdmFsdWVdIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGFuIGl0ZXJhdGVlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiB0aGUgY3JlYXRlZCBpdGVyYXRlZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNob3NlbiBmdW5jdGlvbiBvciBpdHMgcmVzdWx0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEl0ZXJhdGVlKCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGxvZGFzaC5pdGVyYXRlZSB8fCBpdGVyYXRlZTtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCA9PT0gaXRlcmF0ZWUgPyBiYXNlSXRlcmF0ZWUgOiByZXN1bHQ7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IHJlc3VsdChhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSkgOiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgICAgIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgICAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgICAgICA6IGRhdGEubWFwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBtYXRjaCBkYXRhIG9mIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldE1hdGNoRGF0YShvYmplY3QpIHtcbiAgICAgIHZhciByZXN1bHQgPSBrZXlzKG9iamVjdCksXG4gICAgICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHZhciBrZXkgPSByZXN1bHRbbGVuZ3RoXSxcbiAgICAgICAgICAgIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICAgICAgcmVzdWx0W2xlbmd0aF0gPSBba2V5LCB2YWx1ZSwgaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKV07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gICAgICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gICAgICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICAgICAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgICAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICAgICAgfSBjYXRjaCAoZSkge31cblxuICAgICAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgICAgaWYgKHVubWFza2VkKSB7XG4gICAgICAgIGlmIChpc093bikge1xuICAgICAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gICAgICovXG4gICAgdmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgICAgcmV0dXJuIGFycmF5RmlsdGVyKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gICAgICovXG4gICAgdmFyIGdldFN5bWJvbHNJbiA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICB3aGlsZSAob2JqZWN0KSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIGdldFN5bWJvbHMob2JqZWN0KSk7XG4gICAgICAgIG9iamVjdCA9IGdldFByb3RvdHlwZShvYmplY3QpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICAgICAqL1xuICAgIHZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4gICAgLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxuICAgIGlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAgICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgICAgICAoUHJvbWlzZSAmJiBnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XG4gICAgICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAgICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICAgICAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gdG9Tb3VyY2UoQ3RvcikgOiAnJztcblxuICAgICAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6IHJldHVybiBkYXRhVmlld1RhZztcbiAgICAgICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOiByZXR1cm4gc2V0VGFnO1xuICAgICAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHZpZXcsIGFwcGx5aW5nIGFueSBgdHJhbnNmb3Jtc2AgdG8gdGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBvZiB0aGUgdmlldy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHZpZXcuXG4gICAgICogQHBhcmFtIHtBcnJheX0gdHJhbnNmb3JtcyBUaGUgdHJhbnNmb3JtYXRpb25zIHRvIGFwcGx5IHRvIHRoZSB2aWV3LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGBzdGFydGAgYW5kIGBlbmRgXG4gICAgICogIHBvc2l0aW9ucyBvZiB0aGUgdmlldy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRWaWV3KHN0YXJ0LCBlbmQsIHRyYW5zZm9ybXMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHRyYW5zZm9ybXMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgZGF0YSA9IHRyYW5zZm9ybXNbaW5kZXhdLFxuICAgICAgICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICAgICAgICBzd2l0Y2ggKGRhdGEudHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2Ryb3AnOiAgICAgIHN0YXJ0ICs9IHNpemU7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2Ryb3BSaWdodCc6IGVuZCAtPSBzaXplOyBicmVhaztcbiAgICAgICAgICBjYXNlICd0YWtlJzogICAgICBlbmQgPSBuYXRpdmVNaW4oZW5kLCBzdGFydCArIHNpemUpOyBicmVhaztcbiAgICAgICAgICBjYXNlICd0YWtlUmlnaHQnOiBzdGFydCA9IG5hdGl2ZU1heChzdGFydCwgZW5kIC0gc2l6ZSk7IGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geyAnc3RhcnQnOiBzdGFydCwgJ2VuZCc6IGVuZCB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dHJhY3RzIHdyYXBwZXIgZGV0YWlscyBmcm9tIHRoZSBgc291cmNlYCBib2R5IGNvbW1lbnQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd3JhcHBlciBkZXRhaWxzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFdyYXBEZXRhaWxzKHNvdXJjZSkge1xuICAgICAgdmFyIG1hdGNoID0gc291cmNlLm1hdGNoKHJlV3JhcERldGFpbHMpO1xuICAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0uc3BsaXQocmVTcGxpdERldGFpbHMpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBwYXRoYCBleGlzdHMgb24gYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYXNGdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjayBwcm9wZXJ0aWVzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzUGF0aChvYmplY3QsIHBhdGgsIGhhc0Z1bmMpIHtcbiAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKTtcbiAgICAgICAgaWYgKCEocmVzdWx0ID0gb2JqZWN0ICE9IG51bGwgJiYgaGFzRnVuYyhvYmplY3QsIGtleSkpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgb2JqZWN0ID0gb2JqZWN0W2tleV07XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0IHx8ICsraW5kZXggIT0gbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBsZW5ndGggPSBvYmplY3QgPT0gbnVsbCA/IDAgOiBvYmplY3QubGVuZ3RoO1xuICAgICAgcmV0dXJuICEhbGVuZ3RoICYmIGlzTGVuZ3RoKGxlbmd0aCkgJiYgaXNJbmRleChrZXksIGxlbmd0aCkgJiZcbiAgICAgICAgKGlzQXJyYXkob2JqZWN0KSB8fCBpc0FyZ3VtZW50cyhvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyBhbiBhcnJheSBjbG9uZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gbmV3IGFycmF5LmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgICAgIC8vIEFkZCBwcm9wZXJ0aWVzIGFzc2lnbmVkIGJ5IGBSZWdFeHAjZXhlY2AuXG4gICAgICBpZiAobGVuZ3RoICYmIHR5cGVvZiBhcnJheVswXSA9PSAnc3RyaW5nJyAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGFycmF5LCAnaW5kZXgnKSkge1xuICAgICAgICByZXN1bHQuaW5kZXggPSBhcnJheS5pbmRleDtcbiAgICAgICAgcmVzdWx0LmlucHV0ID0gYXJyYXkuaW5wdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluaXRDbG9uZU9iamVjdChvYmplY3QpIHtcbiAgICAgIHJldHVybiAodHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmICFpc1Byb3RvdHlwZShvYmplY3QpKVxuICAgICAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgICAgIDoge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lIGJhc2VkIG9uIGl0cyBgdG9TdHJpbmdUYWdgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjbG9uaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAgICAgKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE1hcGAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgYFNldGAsIG9yIGBTdHJpbmdgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0IHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5pdENsb25lQnlUYWcob2JqZWN0LCB0YWcsIGlzRGVlcCkge1xuICAgICAgdmFyIEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgICAgIHJldHVybiBjbG9uZUFycmF5QnVmZmVyKG9iamVjdCk7XG5cbiAgICAgICAgY2FzZSBib29sVGFnOlxuICAgICAgICBjYXNlIGRhdGVUYWc6XG4gICAgICAgICAgcmV0dXJuIG5ldyBDdG9yKCtvYmplY3QpO1xuXG4gICAgICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICAgICAgcmV0dXJuIGNsb25lRGF0YVZpZXcob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgICAgIGNhc2UgZmxvYXQzMlRhZzogY2FzZSBmbG9hdDY0VGFnOlxuICAgICAgICBjYXNlIGludDhUYWc6IGNhc2UgaW50MTZUYWc6IGNhc2UgaW50MzJUYWc6XG4gICAgICAgIGNhc2UgdWludDhUYWc6IGNhc2UgdWludDhDbGFtcGVkVGFnOiBjYXNlIHVpbnQxNlRhZzogY2FzZSB1aW50MzJUYWc6XG4gICAgICAgICAgcmV0dXJuIGNsb25lVHlwZWRBcnJheShvYmplY3QsIGlzRGVlcCk7XG5cbiAgICAgICAgY2FzZSBtYXBUYWc6XG4gICAgICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgICAgICByZXR1cm4gbmV3IEN0b3Iob2JqZWN0KTtcblxuICAgICAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICAgICAgICByZXR1cm4gY2xvbmVSZWdFeHAob2JqZWN0KTtcblxuICAgICAgICBjYXNlIHNldFRhZzpcbiAgICAgICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICAgICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICAgICAgcmV0dXJuIGNsb25lU3ltYm9sKG9iamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5zZXJ0cyB3cmFwcGVyIGBkZXRhaWxzYCBpbiBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgYHNvdXJjZWAgYm9keS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc291cmNlIHRvIG1vZGlmeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IGRldGFpbHMgVGhlIGRldGFpbHMgdG8gaW5zZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIG1vZGlmaWVkIHNvdXJjZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnNlcnRXcmFwRGV0YWlscyhzb3VyY2UsIGRldGFpbHMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBkZXRhaWxzLmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICB9XG4gICAgICB2YXIgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgICAgIGRldGFpbHNbbGFzdEluZGV4XSA9IChsZW5ndGggPiAxID8gJyYgJyA6ICcnKSArIGRldGFpbHNbbGFzdEluZGV4XTtcbiAgICAgIGRldGFpbHMgPSBkZXRhaWxzLmpvaW4obGVuZ3RoID4gMiA/ICcsICcgOiAnICcpO1xuICAgICAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKHJlV3JhcENvbW1lbnQsICd7XFxuLyogW3dyYXBwZWQgd2l0aCAnICsgZGV0YWlscyArICddICovXFxuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBmbGF0dGVuYWJsZSBgYXJndW1lbnRzYCBvYmplY3Qgb3IgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZsYXR0ZW5hYmxlLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNGbGF0dGVuYWJsZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSB8fFxuICAgICAgICAhIShzcHJlYWRhYmxlU3ltYm9sICYmIHZhbHVlICYmIHZhbHVlW3NwcmVhZGFibGVTeW1ib2xdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICAgICAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAgICAgKiBAcGFyYW0geyp9IGluZGV4IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgaW5kZXggb3Iga2V5IGFyZ3VtZW50LlxuICAgICAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICAgICAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIGluZGV4O1xuICAgICAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgICAgICA6ICh0eXBlID09ICdzdHJpbmcnICYmIGluZGV4IGluIG9iamVjdClcbiAgICAgICAgICApIHtcbiAgICAgICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUgYW5kIG5vdCBhIHByb3BlcnR5IHBhdGguXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICAgICAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxuICAgICAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgICAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICAgICAgOiAodmFsdWUgPT09IG51bGwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGEgbGF6eSBjb3VudGVycGFydC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNMYXppYWJsZShmdW5jKSB7XG4gICAgICB2YXIgZnVuY05hbWUgPSBnZXRGdW5jTmFtZShmdW5jKSxcbiAgICAgICAgICBvdGhlciA9IGxvZGFzaFtmdW5jTmFtZV07XG5cbiAgICAgIGlmICh0eXBlb2Ygb3RoZXIgIT0gJ2Z1bmN0aW9uJyB8fCAhKGZ1bmNOYW1lIGluIExhenlXcmFwcGVyLnByb3RvdHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGZ1bmMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIGRhdGEgPSBnZXREYXRhKG90aGVyKTtcbiAgICAgIHJldHVybiAhIWRhdGEgJiYgZnVuYyA9PT0gZGF0YVswXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gICAgICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgZnVuY2AgaXMgY2FwYWJsZSBvZiBiZWluZyBtYXNrZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2FibGUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICB2YXIgaXNNYXNrYWJsZSA9IGNvcmVKc0RhdGEgPyBpc0Z1bmN0aW9uIDogc3R1YkZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICAgICAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICAgICAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpZiBzdWl0YWJsZSBmb3Igc3RyaWN0XG4gICAgICogIGVxdWFsaXR5IGNvbXBhcmlzb25zLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlICYmICFpc09iamVjdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBtYXRjaGVzUHJvcGVydHlgIGZvciBzb3VyY2UgdmFsdWVzIHN1aXRhYmxlXG4gICAgICogZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShrZXksIHNyY1ZhbHVlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHNyY1ZhbHVlICYmXG4gICAgICAgICAgKHNyY1ZhbHVlICE9PSB1bmRlZmluZWQgfHwgKGtleSBpbiBPYmplY3Qob2JqZWN0KSkpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gICAgICogY2FjaGUgd2hlbiBpdCBleGNlZWRzIGBNQVhfTUVNT0laRV9TSVpFYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYykge1xuICAgICAgdmFyIHJlc3VsdCA9IG1lbW9pemUoZnVuYywgZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICAgICAgY2FjaGUuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgfSk7XG5cbiAgICAgIHZhciBjYWNoZSA9IHJlc3VsdC5jYWNoZTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWVyZ2VzIHRoZSBmdW5jdGlvbiBtZXRhZGF0YSBvZiBgc291cmNlYCBpbnRvIGBkYXRhYC5cbiAgICAgKlxuICAgICAqIE1lcmdpbmcgbWV0YWRhdGEgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIHdyYXBwZXJzIHVzZWQgdG8gaW52b2tlIGEgZnVuY3Rpb24uXG4gICAgICogVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIG1ldGhvZHMgbGlrZSBgXy5iaW5kYCwgYF8uY3VycnlgLCBhbmQgYF8ucGFydGlhbGBcbiAgICAgKiBtYXkgYmUgYXBwbGllZCByZWdhcmRsZXNzIG9mIGV4ZWN1dGlvbiBvcmRlci4gTWV0aG9kcyBsaWtlIGBfLmFyeWAgYW5kXG4gICAgICogYF8ucmVhcmdgIG1vZGlmeSBmdW5jdGlvbiBhcmd1bWVudHMsIG1ha2luZyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmVcbiAgICAgKiBleGVjdXRlZCBpbXBvcnRhbnQsIHByZXZlbnRpbmcgdGhlIG1lcmdpbmcgb2YgbWV0YWRhdGEuIEhvd2V2ZXIsIHdlIG1ha2VcbiAgICAgKiBhbiBleGNlcHRpb24gZm9yIGEgc2FmZSBjb21iaW5lZCBjYXNlIHdoZXJlIGN1cnJpZWQgZnVuY3Rpb25zIGhhdmUgYF8uYXJ5YFxuICAgICAqIGFuZCBvciBgXy5yZWFyZ2AgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gZGF0YSBUaGUgZGVzdGluYXRpb24gbWV0YWRhdGEuXG4gICAgICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBzb3VyY2UgbWV0YWRhdGEuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBkYXRhYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtZXJnZURhdGEoZGF0YSwgc291cmNlKSB7XG4gICAgICB2YXIgYml0bWFzayA9IGRhdGFbMV0sXG4gICAgICAgICAgc3JjQml0bWFzayA9IHNvdXJjZVsxXSxcbiAgICAgICAgICBuZXdCaXRtYXNrID0gYml0bWFzayB8IHNyY0JpdG1hc2ssXG4gICAgICAgICAgaXNDb21tb24gPSBuZXdCaXRtYXNrIDwgKFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHIHwgV1JBUF9BUllfRkxBRyk7XG5cbiAgICAgIHZhciBpc0NvbWJvID1cbiAgICAgICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRykpIHx8XG4gICAgICAgICgoc3JjQml0bWFzayA9PSBXUkFQX0FSWV9GTEFHKSAmJiAoYml0bWFzayA9PSBXUkFQX1JFQVJHX0ZMQUcpICYmIChkYXRhWzddLmxlbmd0aCA8PSBzb3VyY2VbOF0pKSB8fFxuICAgICAgICAoKHNyY0JpdG1hc2sgPT0gKFdSQVBfQVJZX0ZMQUcgfCBXUkFQX1JFQVJHX0ZMQUcpKSAmJiAoc291cmNlWzddLmxlbmd0aCA8PSBzb3VyY2VbOF0pICYmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRykpO1xuXG4gICAgICAvLyBFeGl0IGVhcmx5IGlmIG1ldGFkYXRhIGNhbid0IGJlIG1lcmdlZC5cbiAgICAgIGlmICghKGlzQ29tbW9uIHx8IGlzQ29tYm8pKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgICAgLy8gVXNlIHNvdXJjZSBgdGhpc0FyZ2AgaWYgYXZhaWxhYmxlLlxuICAgICAgaWYgKHNyY0JpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRykge1xuICAgICAgICBkYXRhWzJdID0gc291cmNlWzJdO1xuICAgICAgICAvLyBTZXQgd2hlbiBjdXJyeWluZyBhIGJvdW5kIGZ1bmN0aW9uLlxuICAgICAgICBuZXdCaXRtYXNrIHw9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyA/IDAgOiBXUkFQX0NVUlJZX0JPVU5EX0ZMQUc7XG4gICAgICB9XG4gICAgICAvLyBDb21wb3NlIHBhcnRpYWwgYXJndW1lbnRzLlxuICAgICAgdmFyIHZhbHVlID0gc291cmNlWzNdO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFscyA9IGRhdGFbM107XG4gICAgICAgIGRhdGFbM10gPSBwYXJ0aWFscyA/IGNvbXBvc2VBcmdzKHBhcnRpYWxzLCB2YWx1ZSwgc291cmNlWzRdKSA6IHZhbHVlO1xuICAgICAgICBkYXRhWzRdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzNdLCBQTEFDRUhPTERFUikgOiBzb3VyY2VbNF07XG4gICAgICB9XG4gICAgICAvLyBDb21wb3NlIHBhcnRpYWwgcmlnaHQgYXJndW1lbnRzLlxuICAgICAgdmFsdWUgPSBzb3VyY2VbNV07XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgcGFydGlhbHMgPSBkYXRhWzVdO1xuICAgICAgICBkYXRhWzVdID0gcGFydGlhbHMgPyBjb21wb3NlQXJnc1JpZ2h0KHBhcnRpYWxzLCB2YWx1ZSwgc291cmNlWzZdKSA6IHZhbHVlO1xuICAgICAgICBkYXRhWzZdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzVdLCBQTEFDRUhPTERFUikgOiBzb3VyY2VbNl07XG4gICAgICB9XG4gICAgICAvLyBVc2Ugc291cmNlIGBhcmdQb3NgIGlmIGF2YWlsYWJsZS5cbiAgICAgIHZhbHVlID0gc291cmNlWzddO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGRhdGFbN10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIC8vIFVzZSBzb3VyY2UgYGFyeWAgaWYgaXQncyBzbWFsbGVyLlxuICAgICAgaWYgKHNyY0JpdG1hc2sgJiBXUkFQX0FSWV9GTEFHKSB7XG4gICAgICAgIGRhdGFbOF0gPSBkYXRhWzhdID09IG51bGwgPyBzb3VyY2VbOF0gOiBuYXRpdmVNaW4oZGF0YVs4XSwgc291cmNlWzhdKTtcbiAgICAgIH1cbiAgICAgIC8vIFVzZSBzb3VyY2UgYGFyaXR5YCBpZiBvbmUgaXMgbm90IHByb3ZpZGVkLlxuICAgICAgaWYgKGRhdGFbOV0gPT0gbnVsbCkge1xuICAgICAgICBkYXRhWzldID0gc291cmNlWzldO1xuICAgICAgfVxuICAgICAgLy8gVXNlIHNvdXJjZSBgZnVuY2AgYW5kIG1lcmdlIGJpdG1hc2tzLlxuICAgICAgZGF0YVswXSA9IHNvdXJjZVswXTtcbiAgICAgIGRhdGFbMV0gPSBuZXdCaXRtYXNrO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcbiAgICAgKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gICAgICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICAgICAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICAgICAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXG4gICAgICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICBhcnJheVtpbmRleF0gPSBhcmdzW3N0YXJ0ICsgaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIGluZGV4ID0gLTE7XG4gICAgICAgIHZhciBvdGhlckFyZ3MgPSBBcnJheShzdGFydCArIDEpO1xuICAgICAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICAgICAgb3RoZXJBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgICAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcGFyZW50IHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgdmFsdWUgb2YuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHBhcmVudCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYXJlbnQob2JqZWN0LCBwYXRoKSB7XG4gICAgICByZXR1cm4gcGF0aC5sZW5ndGggPCAyID8gb2JqZWN0IDogYmFzZUdldChvYmplY3QsIGJhc2VTbGljZShwYXRoLCAwLCAtMSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlb3JkZXIgYGFycmF5YCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBpbmRleGVzIHdoZXJlIHRoZSBlbGVtZW50IGF0XG4gICAgICogdGhlIGZpcnN0IGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgZWxlbWVudCBhdFxuICAgICAqIHRoZSBzZWNvbmQgaW5kZXggaXMgYXNzaWduZWQgYXMgdGhlIHNlY29uZCBlbGVtZW50LCBhbmQgc28gb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byByZW9yZGVyLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGluZGV4ZXMgVGhlIGFycmFuZ2VkIGFycmF5IGluZGV4ZXMuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVvcmRlcihhcnJheSwgaW5kZXhlcykge1xuICAgICAgdmFyIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNaW4oaW5kZXhlcy5sZW5ndGgsIGFyckxlbmd0aCksXG4gICAgICAgICAgb2xkQXJyYXkgPSBjb3B5QXJyYXkoYXJyYXkpO1xuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgdmFyIGluZGV4ID0gaW5kZXhlc1tsZW5ndGhdO1xuICAgICAgICBhcnJheVtsZW5ndGhdID0gaXNJbmRleChpbmRleCwgYXJyTGVuZ3RoKSA/IG9sZEFycmF5W2luZGV4XSA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCwgdW5sZXNzIGBrZXlgIGlzIFwiX19wcm90b19fXCIgb3IgXCJjb25zdHJ1Y3RvclwiLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNhZmVHZXQob2JqZWN0LCBrZXkpIHtcbiAgICAgIGlmIChrZXkgPT09ICdjb25zdHJ1Y3RvcicgJiYgdHlwZW9mIG9iamVjdFtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleSA9PSAnX19wcm90b19fJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSWYgdGhpcyBmdW5jdGlvbiBiZWNvbWVzIGhvdCwgaS5lLiBpcyBpbnZva2VkIGEgbG90IGluIGEgc2hvcnRcbiAgICAgKiBwZXJpb2Qgb2YgdGltZSwgaXQgd2lsbCB0cmlwIGl0cyBicmVha2VyIGFuZCB0cmFuc2l0aW9uIHRvIGFuIGlkZW50aXR5XG4gICAgICogZnVuY3Rpb24gdG8gYXZvaWQgZ2FyYmFnZSBjb2xsZWN0aW9uIHBhdXNlcyBpbiBWOC4gU2VlXG4gICAgICogW1Y4IGlzc3VlIDIwNzBdKGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTIwNzApXG4gICAgICogZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIG1ldGFkYXRhIHdpdGguXG4gICAgICogQHBhcmFtIHsqfSBkYXRhIFRoZSBtZXRhZGF0YS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICAgICAqL1xuICAgIHZhciBzZXREYXRhID0gc2hvcnRPdXQoYmFzZVNldERhdGEpO1xuXG4gICAgLyoqXG4gICAgICogQSBzaW1wbGUgd3JhcHBlciBhcm91bmQgdGhlIGdsb2JhbCBbYHNldFRpbWVvdXRgXShodHRwczovL21kbi5pby9zZXRUaW1lb3V0KS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVsYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdhaXQgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkgaW52b2NhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfE9iamVjdH0gUmV0dXJucyB0aGUgdGltZXIgaWQgb3IgdGltZW91dCBvYmplY3QuXG4gICAgICovXG4gICAgdmFyIHNldFRpbWVvdXQgPSBjdHhTZXRUaW1lb3V0IHx8IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHtcbiAgICAgIHJldHVybiByb290LnNldFRpbWVvdXQoZnVuYywgd2FpdCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gICAgICovXG4gICAgdmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGB3cmFwcGVyYCB0byBtaW1pYyB0aGUgc291cmNlIG9mIGByZWZlcmVuY2VgXG4gICAgICogd2l0aCB3cmFwcGVyIGRldGFpbHMgaW4gYSBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSBib2R5LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cmFwcGVyIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVmZXJlbmNlIFRoZSByZWZlcmVuY2UgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYHdyYXBwZXJgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldFdyYXBUb1N0cmluZyh3cmFwcGVyLCByZWZlcmVuY2UsIGJpdG1hc2spIHtcbiAgICAgIHZhciBzb3VyY2UgPSAocmVmZXJlbmNlICsgJycpO1xuICAgICAgcmV0dXJuIHNldFRvU3RyaW5nKHdyYXBwZXIsIGluc2VydFdyYXBEZXRhaWxzKHNvdXJjZSwgdXBkYXRlV3JhcERldGFpbHMoZ2V0V3JhcERldGFpbHMoc291cmNlKSwgYml0bWFzaykpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAgICAgKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAgICAgKiBtaWxsaXNlY29uZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gICAgICB2YXIgY291bnQgPSAwLFxuICAgICAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgICAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb3VudCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc2h1ZmZsZWAgd2hpY2ggbXV0YXRlcyBhbmQgc2V0cyB0aGUgc2l6ZSBvZiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2h1ZmZsZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NpemU9YXJyYXkubGVuZ3RoXSBUaGUgc2l6ZSBvZiBgYXJyYXlgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNodWZmbGVTZWxmKGFycmF5LCBzaXplKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgICAgc2l6ZSA9IHNpemUgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHNpemU7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IHNpemUpIHtcbiAgICAgICAgdmFyIHJhbmQgPSBiYXNlUmFuZG9tKGluZGV4LCBsYXN0SW5kZXgpLFxuICAgICAgICAgICAgdmFsdWUgPSBhcnJheVtyYW5kXTtcblxuICAgICAgICBhcnJheVtyYW5kXSA9IGFycmF5W2luZGV4XTtcbiAgICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWU7XG4gICAgICB9XG4gICAgICBhcnJheS5sZW5ndGggPSBzaXplO1xuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICAgICAqL1xuICAgIHZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgICAgIH1cbiAgICAgIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gICAgICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gICAgICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHdyYXBwZXIgYGRldGFpbHNgIGJhc2VkIG9uIGBiaXRtYXNrYCBmbGFncy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHJldHVybnMge0FycmF5fSBkZXRhaWxzIFRoZSBkZXRhaWxzIHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgZGV0YWlsc2AuXG4gICAgICovXG4gICAgZnVuY3Rpb24gdXBkYXRlV3JhcERldGFpbHMoZGV0YWlscywgYml0bWFzaykge1xuICAgICAgYXJyYXlFYWNoKHdyYXBGbGFncywgZnVuY3Rpb24ocGFpcikge1xuICAgICAgICB2YXIgdmFsdWUgPSAnXy4nICsgcGFpclswXTtcbiAgICAgICAgaWYgKChiaXRtYXNrICYgcGFpclsxXSkgJiYgIWFycmF5SW5jbHVkZXMoZGV0YWlscywgdmFsdWUpKSB7XG4gICAgICAgICAgZGV0YWlscy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGV0YWlscy5zb3J0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIGB3cmFwcGVyYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHdyYXBwZXIgVGhlIHdyYXBwZXIgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHdyYXBwZXIuXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlckNsb25lKHdyYXBwZXIpIHtcbiAgICAgIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIHdyYXBwZXIuY2xvbmUoKTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSBuZXcgTG9kYXNoV3JhcHBlcih3cmFwcGVyLl9fd3JhcHBlZF9fLCB3cmFwcGVyLl9fY2hhaW5fXyk7XG4gICAgICByZXN1bHQuX19hY3Rpb25zX18gPSBjb3B5QXJyYXkod3JhcHBlci5fX2FjdGlvbnNfXyk7XG4gICAgICByZXN1bHQuX19pbmRleF9fICA9IHdyYXBwZXIuX19pbmRleF9fO1xuICAgICAgcmVzdWx0Ll9fdmFsdWVzX18gPSB3cmFwcGVyLl9fdmFsdWVzX187XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZWxlbWVudHMgc3BsaXQgaW50byBncm91cHMgdGhlIGxlbmd0aCBvZiBgc2l6ZWAuXG4gICAgICogSWYgYGFycmF5YCBjYW4ndCBiZSBzcGxpdCBldmVubHksIHRoZSBmaW5hbCBjaHVuayB3aWxsIGJlIHRoZSByZW1haW5pbmdcbiAgICAgKiBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBwcm9jZXNzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc2l6ZT0xXSBUaGUgbGVuZ3RoIG9mIGVhY2ggY2h1bmtcbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNodW5rcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jaHVuayhbJ2EnLCAnYicsICdjJywgJ2QnXSwgMik7XG4gICAgICogLy8gPT4gW1snYScsICdiJ10sIFsnYycsICdkJ11dXG4gICAgICpcbiAgICAgKiBfLmNodW5rKFsnYScsICdiJywgJ2MnLCAnZCddLCAzKTtcbiAgICAgKiAvLyA9PiBbWydhJywgJ2InLCAnYyddLCBbJ2QnXV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjaHVuayhhcnJheSwgc2l6ZSwgZ3VhcmQpIHtcbiAgICAgIGlmICgoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgc2l6ZSwgZ3VhcmQpIDogc2l6ZSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICBzaXplID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpemUgPSBuYXRpdmVNYXgodG9JbnRlZ2VyKHNpemUpLCAwKTtcbiAgICAgIH1cbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoIHx8IHNpemUgPCAxKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IDAsXG4gICAgICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KG5hdGl2ZUNlaWwobGVuZ3RoIC8gc2l6ZSkpO1xuXG4gICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gYmFzZVNsaWNlKGFycmF5LCBpbmRleCwgKGluZGV4ICs9IHNpemUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSB3aXRoIGFsbCBmYWxzZXkgdmFsdWVzIHJlbW92ZWQuIFRoZSB2YWx1ZXMgYGZhbHNlYCwgYG51bGxgLFxuICAgICAqIGAwYCwgYFwiXCJgLCBgdW5kZWZpbmVkYCwgYW5kIGBOYU5gIGFyZSBmYWxzZXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY29tcGFjdChbMCwgMSwgZmFsc2UsIDIsICcnLCAzXSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcGFjdChhcnJheSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgYXJyYXkgY29uY2F0ZW5hdGluZyBgYXJyYXlgIHdpdGggYW55IGFkZGl0aW9uYWwgYXJyYXlzXG4gICAgICogYW5kL29yIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb25jYXRlbmF0ZS5cbiAgICAgKiBAcGFyYW0gey4uLip9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY29uY2F0ZW5hdGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgY29uY2F0ZW5hdGVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMV07XG4gICAgICogdmFyIG90aGVyID0gXy5jb25jYXQoYXJyYXksIDIsIFszXSwgW1s0XV0pO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob3RoZXIpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzLCBbNF1dXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzFdXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uY2F0KCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB2YXIgYXJncyA9IEFycmF5KGxlbmd0aCAtIDEpLFxuICAgICAgICAgIGFycmF5ID0gYXJndW1lbnRzWzBdLFxuICAgICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICBhcmdzW2luZGV4IC0gMV0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5UHVzaChpc0FycmF5KGFycmF5KSA/IGNvcHlBcnJheShhcnJheSkgOiBbYXJyYXldLCBiYXNlRmxhdHRlbihhcmdzLCAxKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBgYXJyYXlgIHZhbHVlcyBub3QgaW5jbHVkZWQgaW4gdGhlIG90aGVyIGdpdmVuIGFycmF5c1xuICAgICAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmVcbiAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbEFsbGAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBzZWUgXy53aXRob3V0LCBfLnhvclxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRpZmZlcmVuY2UoWzIsIDFdLCBbMiwgM10pO1xuICAgICAqIC8vID0+IFsxXVxuICAgICAqL1xuICAgIHZhciBkaWZmZXJlbmNlID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXksIHZhbHVlcykge1xuICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KVxuICAgICAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSlcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZGlmZmVyZW5jZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAgYW5kIGB2YWx1ZXNgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb25cbiAgICAgKiBieSB3aGljaCB0aGV5J3JlIGNvbXBhcmVkLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmVcbiAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6XG4gICAgICogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbEFsbEJ5YCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRpZmZlcmVuY2VCeShbMi4xLCAxLjJdLCBbMi4zLCAzLjRdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiBbMS4yXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5kaWZmZXJlbmNlQnkoW3sgJ3gnOiAyIH0sIHsgJ3gnOiAxIH1dLCBbeyAneCc6IDEgfV0sICd4Jyk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAyIH1dXG4gICAgICovXG4gICAgdmFyIGRpZmZlcmVuY2VCeSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgICAgIHZhciBpdGVyYXRlZSA9IGxhc3QodmFsdWVzKTtcbiAgICAgIGlmIChpc0FycmF5TGlrZU9iamVjdChpdGVyYXRlZSkpIHtcbiAgICAgICAgaXRlcmF0ZWUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpXG4gICAgICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIGJhc2VGbGF0dGVuKHZhbHVlcywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpXG4gICAgICAgIDogW107XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmRpZmZlcmVuY2VgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgXG4gICAgICogd2hpY2ggaXMgaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheWAgdG8gYHZhbHVlc2AuIFRoZSBvcmRlciBhbmRcbiAgICAgKiByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LiBUaGUgY29tcGFyYXRvclxuICAgICAqIGlzIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5wdWxsQWxsV2l0aGAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfV07XG4gICAgICpcbiAgICAgKiBfLmRpZmZlcmVuY2VXaXRoKG9iamVjdHMsIFt7ICd4JzogMSwgJ3knOiAyIH1dLCBfLmlzRXF1YWwpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMiwgJ3knOiAxIH1dXG4gICAgICovXG4gICAgdmFyIGRpZmZlcmVuY2VXaXRoID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXksIHZhbHVlcykge1xuICAgICAgdmFyIGNvbXBhcmF0b3IgPSBsYXN0KHZhbHVlcyk7XG4gICAgICBpZiAoaXNBcnJheUxpa2VPYmplY3QoY29tcGFyYXRvcikpIHtcbiAgICAgICAgY29tcGFyYXRvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICAgICAgPyBiYXNlRGlmZmVyZW5jZShhcnJheSwgYmFzZUZsYXR0ZW4odmFsdWVzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSksIHVuZGVmaW5lZCwgY29tcGFyYXRvcilcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggYG5gIGVsZW1lbnRzIGRyb3BwZWQgZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGRyb3AuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZHJvcChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFsyLCAzXVxuICAgICAqXG4gICAgICogXy5kcm9wKFsxLCAyLCAzXSwgMik7XG4gICAgICogLy8gPT4gWzNdXG4gICAgICpcbiAgICAgKiBfLmRyb3AoWzEsIDIsIDNdLCA1KTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqXG4gICAgICogXy5kcm9wKFsxLCAyLCAzXSwgMCk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZHJvcChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIG4gPSAoZ3VhcmQgfHwgbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiB0b0ludGVnZXIobik7XG4gICAgICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCBuIDwgMCA/IDAgOiBuLCBsZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggYG5gIGVsZW1lbnRzIGRyb3BwZWQgZnJvbSB0aGUgZW5kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGRyb3AuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZHJvcFJpZ2h0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiBfLmRyb3BSaWdodChbMSwgMiwgM10sIDIpO1xuICAgICAqIC8vID0+IFsxXVxuICAgICAqXG4gICAgICogXy5kcm9wUmlnaHQoWzEsIDIsIDNdLCA1KTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqXG4gICAgICogXy5kcm9wUmlnaHQoWzEsIDIsIDNdLCAwKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkcm9wUmlnaHQoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBuID0gKGd1YXJkIHx8IG4gPT09IHVuZGVmaW5lZCkgPyAxIDogdG9JbnRlZ2VyKG4pO1xuICAgICAgbiA9IGxlbmd0aCAtIG47XG4gICAgICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCAwLCBuIDwgMCA/IDAgOiBuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCBleGNsdWRpbmcgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBlbmQuXG4gICAgICogRWxlbWVudHMgYXJlIGRyb3BwZWQgdW50aWwgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5kcm9wUmlnaHRXaGlsZSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZHJvcFJpZ2h0V2hpbGUodXNlcnMsIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leScsICdmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmRyb3BSaWdodFdoaWxlKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5kcm9wUmlnaHRXaGlsZSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnLCAncGViYmxlcyddXG4gICAgICovXG4gICAgZnVuY3Rpb24gZHJvcFJpZ2h0V2hpbGUoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVdoaWxlKGFycmF5LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCB0cnVlLCB0cnVlKVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIGV4Y2x1ZGluZyBlbGVtZW50cyBkcm9wcGVkIGZyb20gdGhlIGJlZ2lubmluZy5cbiAgICAgKiBFbGVtZW50cyBhcmUgZHJvcHBlZCB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpc1xuICAgICAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmRyb3BXaGlsZSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmRyb3BXaGlsZSh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZHJvcFdoaWxlKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydwZWJibGVzJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZHJvcFdoaWxlKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknLCAnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkcm9wV2hpbGUoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVdoaWxlKGFycmF5LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCB0cnVlKVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbGxzIGVsZW1lbnRzIG9mIGBhcnJheWAgd2l0aCBgdmFsdWVgIGZyb20gYHN0YXJ0YCB1cCB0bywgYnV0IG5vdFxuICAgICAqIGluY2x1ZGluZywgYGVuZGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMi4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZpbGwuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZmlsbCBgYXJyYXlgIHdpdGguXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMiwgM107XG4gICAgICpcbiAgICAgKiBfLmZpbGwoYXJyYXksICdhJyk7XG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsnYScsICdhJywgJ2EnXVxuICAgICAqXG4gICAgICogXy5maWxsKEFycmF5KDMpLCAyKTtcbiAgICAgKiAvLyA9PiBbMiwgMiwgMl1cbiAgICAgKlxuICAgICAqIF8uZmlsbChbNCwgNiwgOCwgMTBdLCAnKicsIDEsIDMpO1xuICAgICAqIC8vID0+IFs0LCAnKicsICcqJywgMTBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlsbChhcnJheSwgdmFsdWUsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydCAmJiB0eXBlb2Ygc3RhcnQgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoYXJyYXksIHZhbHVlLCBzdGFydCkpIHtcbiAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgICBlbmQgPSBsZW5ndGg7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUZpbGwoYXJyYXksIHZhbHVlLCBzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdFxuICAgICAqIGVsZW1lbnQgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yIGluc3RlYWQgb2YgdGhlIGVsZW1lbnQgaXRzZWxmLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgZWxlbWVudCwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmZpbmRJbmRleCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby51c2VyID09ICdiYXJuZXknOyB9KTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZEluZGV4KHVzZXJzLCB7ICd1c2VyJzogJ2ZyZWQnLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZEluZGV4KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gMFxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kSW5kZXgodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiAyXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gZnJvbUluZGV4ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIGluZGV4ID0gbmF0aXZlTWF4KGxlbmd0aCArIGluZGV4LCAwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlRmluZEluZGV4KGFycmF5LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBpbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kSW5kZXhgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHNcbiAgICAgKiBvZiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PWFycmF5Lmxlbmd0aC0xXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIGVsZW1lbnQsIGVsc2UgYC0xYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maW5kTGFzdEluZGV4KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLnVzZXIgPT0gJ3BlYmJsZXMnOyB9KTtcbiAgICAgKiAvLyA9PiAyXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZExhc3RJbmRleCh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kTGFzdEluZGV4KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kTGFzdEluZGV4KHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRMYXN0SW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSBsZW5ndGggLSAxO1xuICAgICAgaWYgKGZyb21JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGluZGV4ID0gdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gICAgICAgIGluZGV4ID0gZnJvbUluZGV4IDwgMFxuICAgICAgICAgID8gbmF0aXZlTWF4KGxlbmd0aCArIGluZGV4LCAwKVxuICAgICAgICAgIDogbmF0aXZlTWluKGluZGV4LCBsZW5ndGggLSAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlRmluZEluZGV4KGFycmF5LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBpbmRleCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmxhdHRlbnMgYGFycmF5YCBhIHNpbmdsZSBsZXZlbCBkZWVwLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmZsYXR0ZW4oWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgWzMsIFs0XV0sIDVdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCAxKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlY3Vyc2l2ZWx5IGZsYXR0ZW5zIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZmxhdHRlbkRlZXAoWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgMywgNCwgNV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGF0dGVuRGVlcChhcnJheSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCBJTkZJTklUWSkgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWN1cnNpdmVseSBmbGF0dGVuIGBhcnJheWAgdXAgdG8gYGRlcHRoYCB0aW1lcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjQuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVwdGg9MV0gVGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIFsyLCBbMywgWzRdXSwgNV1dO1xuICAgICAqXG4gICAgICogXy5mbGF0dGVuRGVwdGgoYXJyYXksIDEpO1xuICAgICAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAgICAgKlxuICAgICAqIF8uZmxhdHRlbkRlcHRoKGFycmF5LCAyKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgMywgWzRdLCA1XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXR0ZW5EZXB0aChhcnJheSwgZGVwdGgpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGRlcHRoID0gZGVwdGggPT09IHVuZGVmaW5lZCA/IDEgOiB0b0ludGVnZXIoZGVwdGgpO1xuICAgICAgcmV0dXJuIGJhc2VGbGF0dGVuKGFycmF5LCBkZXB0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGludmVyc2Ugb2YgYF8udG9QYWlyc2A7IHRoaXMgbWV0aG9kIHJldHVybnMgYW4gb2JqZWN0IGNvbXBvc2VkXG4gICAgICogZnJvbSBrZXktdmFsdWUgYHBhaXJzYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHBhaXJzIFRoZSBrZXktdmFsdWUgcGFpcnMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5mcm9tUGFpcnMoW1snYScsIDFdLCBbJ2InLCAyXV0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZyb21QYWlycyhwYWlycykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcGFpcnMgPT0gbnVsbCA/IDAgOiBwYWlycy5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0ge307XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBwYWlyID0gcGFpcnNbaW5kZXhdO1xuICAgICAgICByZXN1bHRbcGFpclswXV0gPSBwYWlyWzFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAYWxpYXMgZmlyc3RcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5oZWFkKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogXy5oZWFkKFtdKTtcbiAgICAgKiAvLyA9PiB1bmRlZmluZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoZWFkKGFycmF5KSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkgPyBhcnJheVswXSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBgdmFsdWVgIGlzIGZvdW5kIGluIGBhcnJheWBcbiAgICAgKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gSWYgYGZyb21JbmRleGAgaXMgbmVnYXRpdmUsIGl0J3MgdXNlZCBhcyB0aGVcbiAgICAgKiBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmluZGV4T2YoWzEsIDIsIDEsIDJdLCAyKTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICpcbiAgICAgKiAvLyBTZWFyY2ggZnJvbSB0aGUgYGZyb21JbmRleGAuXG4gICAgICogXy5pbmRleE9mKFsxLCAyLCAxLCAyXSwgMiwgMik7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IGZyb21JbmRleCA9PSBudWxsID8gMCA6IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICBpbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCBpbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgYnV0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW5pdGlhbChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluaXRpYWwoYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIHJldHVybiBsZW5ndGggPyBiYXNlU2xpY2UoYXJyYXksIDAsIC0xKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiBhbGwgZ2l2ZW4gYXJyYXlzXG4gICAgICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZVxuICAgICAqIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGludGVyc2VjdGluZyB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW50ZXJzZWN0aW9uKFsyLCAxXSwgWzIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMl1cbiAgICAgKi9cbiAgICB2YXIgaW50ZXJzZWN0aW9uID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgbWFwcGVkID0gYXJyYXlNYXAoYXJyYXlzLCBjYXN0QXJyYXlMaWtlT2JqZWN0KTtcbiAgICAgIHJldHVybiAobWFwcGVkLmxlbmd0aCAmJiBtYXBwZWRbMF0gPT09IGFycmF5c1swXSlcbiAgICAgICAgPyBiYXNlSW50ZXJzZWN0aW9uKG1hcHBlZClcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaW50ZXJzZWN0aW9uYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWBcbiAgICAgKiB3aGljaCBpcyBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgZWFjaCBgYXJyYXlzYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uXG4gICAgICogYnkgd2hpY2ggdGhleSdyZSBjb21wYXJlZC4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gICAgICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OlxuICAgICAqICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGludGVyc2VjdGluZyB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW50ZXJzZWN0aW9uQnkoWzIuMSwgMS4yXSwgWzIuMywgMy40XSwgTWF0aC5mbG9vcik7XG4gICAgICogLy8gPT4gWzIuMV1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uaW50ZXJzZWN0aW9uQnkoW3sgJ3gnOiAxIH1dLCBbeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAxIH1dXG4gICAgICovXG4gICAgdmFyIGludGVyc2VjdGlvbkJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgaXRlcmF0ZWUgPSBsYXN0KGFycmF5cyksXG4gICAgICAgICAgbWFwcGVkID0gYXJyYXlNYXAoYXJyYXlzLCBjYXN0QXJyYXlMaWtlT2JqZWN0KTtcblxuICAgICAgaWYgKGl0ZXJhdGVlID09PSBsYXN0KG1hcHBlZCkpIHtcbiAgICAgICAgaXRlcmF0ZWUgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYXBwZWQucG9wKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKG1hcHBlZC5sZW5ndGggJiYgbWFwcGVkWzBdID09PSBhcnJheXNbMF0pXG4gICAgICAgID8gYmFzZUludGVyc2VjdGlvbihtYXBwZWQsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSlcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaW50ZXJzZWN0aW9uYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYFxuICAgICAqIHdoaWNoIGlzIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlzYC4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzXG4gICAgICogb2YgcmVzdWx0IHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuIFRoZSBjb21wYXJhdG9yIGlzXG4gICAgICogaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgaW50ZXJzZWN0aW5nIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dO1xuICAgICAqIHZhciBvdGhlcnMgPSBbeyAneCc6IDEsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1dO1xuICAgICAqXG4gICAgICogXy5pbnRlcnNlY3Rpb25XaXRoKG9iamVjdHMsIG90aGVycywgXy5pc0VxdWFsKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEsICd5JzogMiB9XVxuICAgICAqL1xuICAgIHZhciBpbnRlcnNlY3Rpb25XaXRoID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IGxhc3QoYXJyYXlzKSxcbiAgICAgICAgICBtYXBwZWQgPSBhcnJheU1hcChhcnJheXMsIGNhc3RBcnJheUxpa2VPYmplY3QpO1xuXG4gICAgICBjb21wYXJhdG9yID0gdHlwZW9mIGNvbXBhcmF0b3IgPT0gJ2Z1bmN0aW9uJyA/IGNvbXBhcmF0b3IgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoY29tcGFyYXRvcikge1xuICAgICAgICBtYXBwZWQucG9wKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKG1hcHBlZC5sZW5ndGggJiYgbWFwcGVkWzBdID09PSBhcnJheXNbMF0pXG4gICAgICAgID8gYmFzZUludGVyc2VjdGlvbihtYXBwZWQsIHVuZGVmaW5lZCwgY29tcGFyYXRvcilcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGFsbCBlbGVtZW50cyBpbiBgYXJyYXlgIGludG8gYSBzdHJpbmcgc2VwYXJhdGVkIGJ5IGBzZXBhcmF0b3JgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbnZlcnQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZXBhcmF0b3I9JywnXSBUaGUgZWxlbWVudCBzZXBhcmF0b3IuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgam9pbmVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5qb2luKFsnYScsICdiJywgJ2MnXSwgJ34nKTtcbiAgICAgKiAvLyA9PiAnYX5ifmMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gam9pbihhcnJheSwgc2VwYXJhdG9yKSB7XG4gICAgICByZXR1cm4gYXJyYXkgPT0gbnVsbCA/ICcnIDogbmF0aXZlSm9pbi5jYWxsKGFycmF5LCBzZXBhcmF0b3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5sYXN0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxhc3QoYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIHJldHVybiBsZW5ndGggPyBhcnJheVtsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmluZGV4T2ZgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2ZcbiAgICAgKiBgYXJyYXlgIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9YXJyYXkubGVuZ3RoLTFdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmxhc3RJbmRleE9mKFsxLCAyLCAxLCAyXSwgMik7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogLy8gU2VhcmNoIGZyb20gdGhlIGBmcm9tSW5kZXhgLlxuICAgICAqIF8ubGFzdEluZGV4T2YoWzEsIDIsIDEsIDJdLCAyLCAyKTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGFzdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IGxlbmd0aDtcbiAgICAgIGlmIChmcm9tSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpbmRleCA9IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICAgICAgICBpbmRleCA9IGluZGV4IDwgMCA/IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCkgOiBuYXRpdmVNaW4oaW5kZXgsIGxlbmd0aCAtIDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZVxuICAgICAgICA/IHN0cmljdExhc3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgaW5kZXgpXG4gICAgICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUlzTmFOLCBpbmRleCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZWxlbWVudCBhdCBpbmRleCBgbmAgb2YgYGFycmF5YC4gSWYgYG5gIGlzIG5lZ2F0aXZlLCB0aGUgbnRoXG4gICAgICogZWxlbWVudCBmcm9tIHRoZSBlbmQgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0wXSBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gcmV0dXJuLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBudGggZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbJ2EnLCAnYicsICdjJywgJ2QnXTtcbiAgICAgKlxuICAgICAqIF8ubnRoKGFycmF5LCAxKTtcbiAgICAgKiAvLyA9PiAnYidcbiAgICAgKlxuICAgICAqIF8ubnRoKGFycmF5LCAtMik7XG4gICAgICogLy8gPT4gJ2MnO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG50aChhcnJheSwgbikge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYmFzZU50aChhcnJheSwgdG9JbnRlZ2VyKG4pKSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCBnaXZlbiB2YWx1ZXMgZnJvbSBgYXJyYXlgIHVzaW5nXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLndpdGhvdXRgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuIFVzZSBgXy5yZW1vdmVgXG4gICAgICogdG8gcmVtb3ZlIGVsZW1lbnRzIGZyb20gYW4gYXJyYXkgYnkgcHJlZGljYXRlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0gey4uLip9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbJ2EnLCAnYicsICdjJywgJ2EnLCAnYicsICdjJ107XG4gICAgICpcbiAgICAgKiBfLnB1bGwoYXJyYXksICdhJywgJ2MnKTtcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWydiJywgJ2InXVxuICAgICAqL1xuICAgIHZhciBwdWxsID0gYmFzZVJlc3QocHVsbEFsbCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnB1bGxgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYW4gYXJyYXkgb2YgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uZGlmZmVyZW5jZWAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbJ2EnLCAnYicsICdjJywgJ2EnLCAnYicsICdjJ107XG4gICAgICpcbiAgICAgKiBfLnB1bGxBbGwoYXJyYXksIFsnYScsICdjJ10pO1xuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbJ2InLCAnYiddXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHVsbEFsbChhcnJheSwgdmFsdWVzKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCAmJiB2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aClcbiAgICAgICAgPyBiYXNlUHVsbEFsbChhcnJheSwgdmFsdWVzKVxuICAgICAgICA6IGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucHVsbEFsbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAgYW5kIGB2YWx1ZXNgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb25cbiAgICAgKiBieSB3aGljaCB0aGV5J3JlIGNvbXBhcmVkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uZGlmZmVyZW5jZUJ5YCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byByZW1vdmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbeyAneCc6IDEgfSwgeyAneCc6IDIgfSwgeyAneCc6IDMgfSwgeyAneCc6IDEgfV07XG4gICAgICpcbiAgICAgKiBfLnB1bGxBbGxCeShhcnJheSwgW3sgJ3gnOiAxIH0sIHsgJ3gnOiAzIH1dLCAneCcpO1xuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDIgfV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwdWxsQWxsQnkoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoICYmIHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoKVxuICAgICAgICA/IGJhc2VQdWxsQWxsKGFycmF5LCB2YWx1ZXMsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSlcbiAgICAgICAgOiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnB1bGxBbGxgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheWAgdG8gYHZhbHVlc2AuIFRoZSBjb21wYXJhdG9yIGlzXG4gICAgICogaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLmRpZmZlcmVuY2VXaXRoYCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNi4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byByZW1vdmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAzLCAneSc6IDQgfSwgeyAneCc6IDUsICd5JzogNiB9XTtcbiAgICAgKlxuICAgICAqIF8ucHVsbEFsbFdpdGgoYXJyYXksIFt7ICd4JzogMywgJ3knOiA0IH1dLCBfLmlzRXF1YWwpO1xuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogNSwgJ3knOiA2IH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHVsbEFsbFdpdGgoYXJyYXksIHZhbHVlcywgY29tcGFyYXRvcikge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGggJiYgdmFsdWVzICYmIHZhbHVlcy5sZW5ndGgpXG4gICAgICAgID8gYmFzZVB1bGxBbGwoYXJyYXksIHZhbHVlcywgdW5kZWZpbmVkLCBjb21wYXJhdG9yKVxuICAgICAgICA6IGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgZWxlbWVudHMgZnJvbSBgYXJyYXlgIGNvcnJlc3BvbmRpbmcgdG8gYGluZGV4ZXNgIGFuZCByZXR1cm5zIGFuXG4gICAgICogYXJyYXkgb2YgcmVtb3ZlZCBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uYXRgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7Li4uKG51bWJlcnxudW1iZXJbXSl9IFtpbmRleGVzXSBUaGUgaW5kZXhlcyBvZiBlbGVtZW50cyB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVtb3ZlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWydhJywgJ2InLCAnYycsICdkJ107XG4gICAgICogdmFyIHB1bGxlZCA9IF8ucHVsbEF0KGFycmF5LCBbMSwgM10pO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsnYScsICdjJ11cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKHB1bGxlZCk7XG4gICAgICogLy8gPT4gWydiJywgJ2QnXVxuICAgICAqL1xuICAgIHZhciBwdWxsQXQgPSBmbGF0UmVzdChmdW5jdGlvbihhcnJheSwgaW5kZXhlcykge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IGJhc2VBdChhcnJheSwgaW5kZXhlcyk7XG5cbiAgICAgIGJhc2VQdWxsQXQoYXJyYXksIGFycmF5TWFwKGluZGV4ZXMsIGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICAgIHJldHVybiBpc0luZGV4KGluZGV4LCBsZW5ndGgpID8gK2luZGV4IDogaW5kZXg7XG4gICAgICB9KS5zb3J0KGNvbXBhcmVBc2NlbmRpbmcpKTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIGVsZW1lbnRzIGZyb20gYGFycmF5YCB0aGF0IGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvclxuICAgICAqIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSByZW1vdmVkIGVsZW1lbnRzLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5maWx0ZXJgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuIFVzZSBgXy5wdWxsYFxuICAgICAqIHRvIHB1bGwgZWxlbWVudHMgZnJvbSBhbiBhcnJheSBieSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHJlbW92ZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyLCAzLCA0XTtcbiAgICAgKiB2YXIgZXZlbnMgPSBfLnJlbW92ZShhcnJheSwgZnVuY3Rpb24obikge1xuICAgICAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzEsIDNdXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhldmVucyk7XG4gICAgICogLy8gPT4gWzIsIDRdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVtb3ZlKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGlmICghKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGluZGV4ZXMgPSBbXSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIHByZWRpY2F0ZSA9IGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyk7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgaW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYmFzZVB1bGxBdChhcnJheSwgaW5kZXhlcyk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldmVyc2VzIGBhcnJheWAgc28gdGhhdCB0aGUgZmlyc3QgZWxlbWVudCBiZWNvbWVzIHRoZSBsYXN0LCB0aGUgc2Vjb25kXG4gICAgICogZWxlbWVudCBiZWNvbWVzIHRoZSBzZWNvbmQgdG8gbGFzdCwgYW5kIHNvIG9uLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YCBhbmQgaXMgYmFzZWQgb25cbiAgICAgKiBbYEFycmF5I3JldmVyc2VgXShodHRwczovL21kbi5pby9BcnJheS9yZXZlcnNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyLCAzXTtcbiAgICAgKlxuICAgICAqIF8ucmV2ZXJzZShhcnJheSk7XG4gICAgICogLy8gPT4gWzMsIDIsIDFdXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzMsIDIsIDFdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmV2ZXJzZShhcnJheSkge1xuICAgICAgcmV0dXJuIGFycmF5ID09IG51bGwgPyBhcnJheSA6IG5hdGl2ZVJldmVyc2UuY2FsbChhcnJheSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgZnJvbSBgc3RhcnRgIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgdXNlZCBpbnN0ZWFkIG9mXG4gICAgICogW2BBcnJheSNzbGljZWBdKGh0dHBzOi8vbWRuLmlvL0FycmF5L3NsaWNlKSB0byBlbnN1cmUgZGVuc2UgYXJyYXlzIGFyZVxuICAgICAqIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNsaWNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgJiYgdHlwZW9mIGVuZCAhPSAnbnVtYmVyJyAmJiBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgc3RhcnQsIGVuZCkpIHtcbiAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgICBlbmQgPSBsZW5ndGg7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc3RhcnQgPSBzdGFydCA9PSBudWxsID8gMCA6IHRvSW50ZWdlcihzdGFydCk7XG4gICAgICAgIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9JbnRlZ2VyKGVuZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VzIGEgYmluYXJ5IHNlYXJjaCB0byBkZXRlcm1pbmUgdGhlIGxvd2VzdCBpbmRleCBhdCB3aGljaCBgdmFsdWVgXG4gICAgICogc2hvdWxkIGJlIGluc2VydGVkIGludG8gYGFycmF5YCBpbiBvcmRlciB0byBtYWludGFpbiBpdHMgc29ydCBvcmRlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICAgICAqICBpbnRvIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc29ydGVkSW5kZXgoWzMwLCA1MF0sIDQwKTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkSW5kZXgoYXJyYXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zb3J0ZWRJbmRleGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgXG4gICAgICogd2hpY2ggaXMgaW52b2tlZCBmb3IgYHZhbHVlYCBhbmQgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAgdG8gY29tcHV0ZSB0aGVpclxuICAgICAqIHNvcnQgcmFua2luZy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICogIGludG8gYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDQgfSwgeyAneCc6IDUgfV07XG4gICAgICpcbiAgICAgKiBfLnNvcnRlZEluZGV4Qnkob2JqZWN0cywgeyAneCc6IDQgfSwgZnVuY3Rpb24obykgeyByZXR1cm4gby54OyB9KTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnNvcnRlZEluZGV4Qnkob2JqZWN0cywgeyAneCc6IDQgfSwgJ3gnKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkSW5kZXhCeShhcnJheSwgdmFsdWUsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaW5kZXhPZmAgZXhjZXB0IHRoYXQgaXQgcGVyZm9ybXMgYSBiaW5hcnlcbiAgICAgKiBzZWFyY2ggb24gYSBzb3J0ZWQgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb3J0ZWRJbmRleE9mKFs0LCA1LCA1LCA1LCA2XSwgNSk7XG4gICAgICogLy8gPT4gMVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvcnRlZEluZGV4T2YoYXJyYXksIHZhbHVlKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGJhc2VTb3J0ZWRJbmRleChhcnJheSwgdmFsdWUpO1xuICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgZXEoYXJyYXlbaW5kZXhdLCB2YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRlZEluZGV4YCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSBoaWdoZXN0XG4gICAgICogaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWQgaW50byBgYXJyYXlgIGluIG9yZGVyIHRvXG4gICAgICogbWFpbnRhaW4gaXRzIHNvcnQgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgKiAgaW50byBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvcnRlZExhc3RJbmRleChbNCwgNSwgNSwgNSwgNl0sIDUpO1xuICAgICAqIC8vID0+IDRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRMYXN0SW5kZXgoYXJyYXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zb3J0ZWRMYXN0SW5kZXhgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYFxuICAgICAqIHdoaWNoIGlzIGludm9rZWQgZm9yIGB2YWx1ZWAgYW5kIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIHRvIGNvbXB1dGUgdGhlaXJcbiAgICAgKiBzb3J0IHJhbmtpbmcuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICAgICAqICBpbnRvIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiA0IH0sIHsgJ3gnOiA1IH1dO1xuICAgICAqXG4gICAgICogXy5zb3J0ZWRMYXN0SW5kZXhCeShvYmplY3RzLCB7ICd4JzogNCB9LCBmdW5jdGlvbihvKSB7IHJldHVybiBvLng7IH0pO1xuICAgICAqIC8vID0+IDFcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uc29ydGVkTGFzdEluZGV4Qnkob2JqZWN0cywgeyAneCc6IDQgfSwgJ3gnKTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkTGFzdEluZGV4QnkoYXJyYXksIHZhbHVlLCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGJhc2VTb3J0ZWRJbmRleEJ5KGFycmF5LCB2YWx1ZSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmxhc3RJbmRleE9mYCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcyBhIGJpbmFyeVxuICAgICAqIHNlYXJjaCBvbiBhIHNvcnRlZCBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvcnRlZExhc3RJbmRleE9mKFs0LCA1LCA1LCA1LCA2XSwgNSk7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvcnRlZExhc3RJbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCkge1xuICAgICAgICB2YXIgaW5kZXggPSBiYXNlU29ydGVkSW5kZXgoYXJyYXksIHZhbHVlLCB0cnVlKSAtIDE7XG4gICAgICAgIGlmIChlcShhcnJheVtpbmRleF0sIHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pcWAgZXhjZXB0IHRoYXQgaXQncyBkZXNpZ25lZCBhbmQgb3B0aW1pemVkXG4gICAgICogZm9yIHNvcnRlZCBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb3J0ZWRVbmlxKFsxLCAxLCAyXSk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkVW5pcShhcnJheSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVNvcnRlZFVuaXEoYXJyYXkpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlxQnlgIGV4Y2VwdCB0aGF0IGl0J3MgZGVzaWduZWQgYW5kIG9wdGltaXplZFxuICAgICAqIGZvciBzb3J0ZWQgYXJyYXlzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb3J0ZWRVbmlxQnkoWzEuMSwgMS4yLCAyLjMsIDIuNF0sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IFsxLjEsIDIuM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRVbmlxQnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlU29ydGVkVW5pcShhcnJheSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIGJ1dCB0aGUgZmlyc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50YWlsKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gWzIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGFpbChhcnJheSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VTbGljZShhcnJheSwgMSwgbGVuZ3RoKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggYG5gIGVsZW1lbnRzIHRha2VuIGZyb20gdGhlIGJlZ2lubmluZy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byB0YWtlLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRha2UoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMV1cbiAgICAgKlxuICAgICAqIF8udGFrZShbMSwgMiwgM10sIDIpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqXG4gICAgICogXy50YWtlKFsxLCAyLCAzXSwgNSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBfLnRha2UoWzEsIDIsIDNdLCAwKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRha2UoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgICBpZiAoIShhcnJheSAmJiBhcnJheS5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIG4gPSAoZ3VhcmQgfHwgbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiB0b0ludGVnZXIobik7XG4gICAgICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCAwLCBuIDwgMCA/IDAgOiBuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGBuYCBlbGVtZW50cyB0YWtlbiBmcm9tIHRoZSBlbmQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gdGFrZS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50YWtlUmlnaHQoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbM11cbiAgICAgKlxuICAgICAqIF8udGFrZVJpZ2h0KFsxLCAyLCAzXSwgMik7XG4gICAgICogLy8gPT4gWzIsIDNdXG4gICAgICpcbiAgICAgKiBfLnRha2VSaWdodChbMSwgMiwgM10sIDUpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogXy50YWtlUmlnaHQoWzEsIDIsIDNdLCAwKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRha2VSaWdodChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIG4gPSAoZ3VhcmQgfHwgbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiB0b0ludGVnZXIobik7XG4gICAgICBuID0gbGVuZ3RoIC0gbjtcbiAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIG4gPCAwID8gMCA6IG4sIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBlbGVtZW50cyB0YWtlbiBmcm9tIHRoZSBlbmQuIEVsZW1lbnRzIGFyZVxuICAgICAqIHRha2VuIHVudGlsIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aFxuICAgICAqIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8udGFrZVJpZ2h0V2hpbGUodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnRha2VSaWdodFdoaWxlKHVzZXJzLCB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydwZWJibGVzJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnRha2VSaWdodFdoaWxlKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy50YWtlUmlnaHRXaGlsZSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IFtdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGFrZVJpZ2h0V2hpbGUoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVdoaWxlKGFycmF5LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBmYWxzZSwgdHJ1ZSlcbiAgICAgICAgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGVsZW1lbnRzIHRha2VuIGZyb20gdGhlIGJlZ2lubmluZy4gRWxlbWVudHNcbiAgICAgKiBhcmUgdGFrZW4gdW50aWwgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoXG4gICAgICogdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiB0cnVlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy50YWtlV2hpbGUodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknLCAnZnJlZCddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udGFrZVdoaWxlKHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy50YWtlV2hpbGUodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leScsICdmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udGFrZVdoaWxlKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YWtlV2hpbGUoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVdoaWxlKGFycmF5LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpKVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcywgaW4gb3JkZXIsIGZyb20gYWxsIGdpdmVuIGFycmF5cyB1c2luZ1xuICAgICAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51bmlvbihbMl0sIFsxLCAyXSk7XG4gICAgICogLy8gPT4gWzIsIDFdXG4gICAgICovXG4gICAgdmFyIHVuaW9uID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4oYXJyYXlzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSkpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlvbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGVhY2ggYGFycmF5c2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvbiBieVxuICAgICAqIHdoaWNoIHVuaXF1ZW5lc3MgaXMgY29tcHV0ZWQuIFJlc3VsdCB2YWx1ZXMgYXJlIGNob3NlbiBmcm9tIHRoZSBmaXJzdFxuICAgICAqIGFycmF5IGluIHdoaWNoIHRoZSB2YWx1ZSBvY2N1cnMuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OlxuICAgICAqICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51bmlvbkJ5KFsyLjFdLCBbMS4yLCAyLjNdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiBbMi4xLCAxLjJdXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnVuaW9uQnkoW3sgJ3gnOiAxIH1dLCBbeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAxIH0sIHsgJ3gnOiAyIH1dXG4gICAgICovXG4gICAgdmFyIHVuaW9uQnkgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBpdGVyYXRlZSA9IGxhc3QoYXJyYXlzKTtcbiAgICAgIGlmIChpc0FycmF5TGlrZU9iamVjdChpdGVyYXRlZSkpIHtcbiAgICAgICAgaXRlcmF0ZWUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4oYXJyYXlzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaW9uYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYCB3aGljaFxuICAgICAqIGlzIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlzYC4gUmVzdWx0IHZhbHVlcyBhcmUgY2hvc2VuIGZyb21cbiAgICAgKiB0aGUgZmlyc3QgYXJyYXkgaW4gd2hpY2ggdGhlIHZhbHVlIG9jY3Vycy4gVGhlIGNvbXBhcmF0b3IgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21iaW5lZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTtcbiAgICAgKiB2YXIgb3RoZXJzID0gW3sgJ3gnOiAxLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMiB9XTtcbiAgICAgKlxuICAgICAqIF8udW5pb25XaXRoKG9iamVjdHMsIG90aGVycywgXy5pc0VxdWFsKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH0sIHsgJ3gnOiAxLCAneSc6IDEgfV1cbiAgICAgKi9cbiAgICB2YXIgdW5pb25XaXRoID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IGxhc3QoYXJyYXlzKTtcbiAgICAgIGNvbXBhcmF0b3IgPSB0eXBlb2YgY29tcGFyYXRvciA9PSAnZnVuY3Rpb24nID8gY29tcGFyYXRvciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIGFuIGFycmF5LCB1c2luZ1xuICAgICAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpbiB3aGljaCBvbmx5IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGVhY2ggZWxlbWVudFxuICAgICAqIGlzIGtlcHQuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXJcbiAgICAgKiBpbiB0aGUgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51bmlxKFsyLCAxLCAyXSk7XG4gICAgICogLy8gPT4gWzIsIDFdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5pcShhcnJheSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYmFzZVVuaXEoYXJyYXkpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlxYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5IHdoaWNoXG4gICAgICogdW5pcXVlbmVzcyBpcyBjb21wdXRlZC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGVcbiAgICAgKiBvcmRlciB0aGV5IG9jY3VyIGluIHRoZSBhcnJheS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6XG4gICAgICogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51bmlxQnkoWzIuMSwgMS4yLCAyLjNdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiBbMi4xLCAxLjJdXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnVuaXFCeShbeyAneCc6IDEgfSwgeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAxIH0sIHsgJ3gnOiAyIH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5pcUJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYmFzZVVuaXEoYXJyYXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSkgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaXFgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheWAuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzXG4gICAgICogZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXIgdGhleSBvY2N1ciBpbiB0aGUgYXJyYXkuVGhlIGNvbXBhcmF0b3IgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMiB9XTtcbiAgICAgKlxuICAgICAqIF8udW5pcVdpdGgob2JqZWN0cywgXy5pc0VxdWFsKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5pcVdpdGgoYXJyYXksIGNvbXBhcmF0b3IpIHtcbiAgICAgIGNvbXBhcmF0b3IgPSB0eXBlb2YgY29tcGFyYXRvciA9PSAnZnVuY3Rpb24nID8gY29tcGFyYXRvciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGJhc2VVbmlxKGFycmF5LCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy56aXBgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYW4gYXJyYXkgb2YgZ3JvdXBlZFxuICAgICAqIGVsZW1lbnRzIGFuZCBjcmVhdGVzIGFuIGFycmF5IHJlZ3JvdXBpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZWlyIHByZS16aXBcbiAgICAgKiBjb25maWd1cmF0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMi4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiByZWdyb3VwZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB6aXBwZWQgPSBfLnppcChbJ2EnLCAnYiddLCBbMSwgMl0sIFt0cnVlLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IFtbJ2EnLCAxLCB0cnVlXSwgWydiJywgMiwgZmFsc2VdXVxuICAgICAqXG4gICAgICogXy51bnppcCh6aXBwZWQpO1xuICAgICAqIC8vID0+IFtbJ2EnLCAnYiddLCBbMSwgMl0sIFt0cnVlLCBmYWxzZV1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW56aXAoYXJyYXkpIHtcbiAgICAgIGlmICghKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IDA7XG4gICAgICBhcnJheSA9IGFycmF5RmlsdGVyKGFycmF5LCBmdW5jdGlvbihncm91cCkge1xuICAgICAgICBpZiAoaXNBcnJheUxpa2VPYmplY3QoZ3JvdXApKSB7XG4gICAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGdyb3VwLmxlbmd0aCwgbGVuZ3RoKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gYmFzZVRpbWVzKGxlbmd0aCwgZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGFycmF5TWFwKGFycmF5LCBiYXNlUHJvcGVydHkoaW5kZXgpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW56aXBgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB0byBzcGVjaWZ5XG4gICAgICogaG93IHJlZ3JvdXBlZCB2YWx1ZXMgc2hvdWxkIGJlIGNvbWJpbmVkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRoZVxuICAgICAqIGVsZW1lbnRzIG9mIGVhY2ggZ3JvdXA6ICguLi5ncm91cCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy44LjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cyB0byBwcm9jZXNzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gdG8gY29tYmluZVxuICAgICAqICByZWdyb3VwZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHJlZ3JvdXBlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHppcHBlZCA9IF8uemlwKFsxLCAyXSwgWzEwLCAyMF0sIFsxMDAsIDIwMF0pO1xuICAgICAqIC8vID0+IFtbMSwgMTAsIDEwMF0sIFsyLCAyMCwgMjAwXV1cbiAgICAgKlxuICAgICAqIF8udW56aXBXaXRoKHppcHBlZCwgXy5hZGQpO1xuICAgICAqIC8vID0+IFszLCAzMCwgMzAwXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuemlwV2l0aChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICAgIGlmICghKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IHVuemlwKGFycmF5KTtcbiAgICAgIGlmIChpdGVyYXRlZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXlNYXAocmVzdWx0LCBmdW5jdGlvbihncm91cCkge1xuICAgICAgICByZXR1cm4gYXBwbHkoaXRlcmF0ZWUsIHVuZGVmaW5lZCwgZ3JvdXApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBleGNsdWRpbmcgYWxsIGdpdmVuIHZhbHVlcyB1c2luZ1xuICAgICAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5wdWxsYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKiBAc2VlIF8uZGlmZmVyZW5jZSwgXy54b3JcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy53aXRob3V0KFsyLCAxLCAyLCAzXSwgMSwgMik7XG4gICAgICogLy8gPT4gWzNdXG4gICAgICovXG4gICAgdmFyIHdpdGhvdXQgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gICAgICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpXG4gICAgICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcylcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcyB0aGF0IGlzIHRoZVxuICAgICAqIFtzeW1tZXRyaWMgZGlmZmVyZW5jZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3ltbWV0cmljX2RpZmZlcmVuY2UpXG4gICAgICogb2YgdGhlIGdpdmVuIGFycmF5cy4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXJcbiAgICAgKiB0aGV5IG9jY3VyIGluIHRoZSBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi40LjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBzZWUgXy5kaWZmZXJlbmNlLCBfLndpdGhvdXRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy54b3IoWzIsIDFdLCBbMiwgM10pO1xuICAgICAqIC8vID0+IFsxLCAzXVxuICAgICAqL1xuICAgIHZhciB4b3IgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHJldHVybiBiYXNlWG9yKGFycmF5RmlsdGVyKGFycmF5cywgaXNBcnJheUxpa2VPYmplY3QpKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ueG9yYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgZWFjaCBgYXJyYXlzYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5XG4gICAgICogd2hpY2ggYnkgd2hpY2ggdGhleSdyZSBjb21wYXJlZC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZFxuICAgICAqIGJ5IHRoZSBvcmRlciB0aGV5IG9jY3VyIGluIHRoZSBhcnJheXMuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lXG4gICAgICogYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy54b3JCeShbMi4xLCAxLjJdLCBbMi4zLCAzLjRdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiBbMS4yLCAzLjRdXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnhvckJ5KFt7ICd4JzogMSB9XSwgW3sgJ3gnOiAyIH0sIHsgJ3gnOiAxIH1dLCAneCcpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMiB9XVxuICAgICAqL1xuICAgIHZhciB4b3JCeSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIGl0ZXJhdGVlID0gbGFzdChhcnJheXMpO1xuICAgICAgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KGl0ZXJhdGVlKSkge1xuICAgICAgICBpdGVyYXRlZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlWG9yKGFycmF5RmlsdGVyKGFycmF5cywgaXNBcnJheUxpa2VPYmplY3QpLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy54b3JgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheXNgLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpc1xuICAgICAqIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5cy4gVGhlIGNvbXBhcmF0b3IgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTtcbiAgICAgKiB2YXIgb3RoZXJzID0gW3sgJ3gnOiAxLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMiB9XTtcbiAgICAgKlxuICAgICAqIF8ueG9yV2l0aChvYmplY3RzLCBvdGhlcnMsIF8uaXNFcXVhbCk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAyLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMSB9XVxuICAgICAqL1xuICAgIHZhciB4b3JXaXRoID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IGxhc3QoYXJyYXlzKTtcbiAgICAgIGNvbXBhcmF0b3IgPSB0eXBlb2YgY29tcGFyYXRvciA9PSAnZnVuY3Rpb24nID8gY29tcGFyYXRvciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBiYXNlWG9yKGFycmF5RmlsdGVyKGFycmF5cywgaXNBcnJheUxpa2VPYmplY3QpLCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzLCB0aGUgZmlyc3Qgb2Ygd2hpY2ggY29udGFpbnMgdGhlXG4gICAgICogZmlyc3QgZWxlbWVudHMgb2YgdGhlIGdpdmVuIGFycmF5cywgdGhlIHNlY29uZCBvZiB3aGljaCBjb250YWlucyB0aGVcbiAgICAgKiBzZWNvbmQgZWxlbWVudHMgb2YgdGhlIGdpdmVuIGFycmF5cywgYW5kIHNvIG9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uemlwKFsnYScsICdiJ10sIFsxLCAyXSwgW3RydWUsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gW1snYScsIDEsIHRydWVdLCBbJ2InLCAyLCBmYWxzZV1dXG4gICAgICovXG4gICAgdmFyIHppcCA9IGJhc2VSZXN0KHVuemlwKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZnJvbVBhaXJzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIHR3byBhcnJheXMsXG4gICAgICogb25lIG9mIHByb3BlcnR5IGlkZW50aWZpZXJzIGFuZCBvbmUgb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC40LjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcHJvcHM9W11dIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzPVtdXSBUaGUgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uemlwT2JqZWN0KFsnYScsICdiJ10sIFsxLCAyXSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gemlwT2JqZWN0KHByb3BzLCB2YWx1ZXMpIHtcbiAgICAgIHJldHVybiBiYXNlWmlwT2JqZWN0KHByb3BzIHx8IFtdLCB2YWx1ZXMgfHwgW10sIGFzc2lnblZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnppcE9iamVjdGAgZXhjZXB0IHRoYXQgaXQgc3VwcG9ydHMgcHJvcGVydHkgcGF0aHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcHJvcHM9W11dIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzPVtdXSBUaGUgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uemlwT2JqZWN0RGVlcChbJ2EuYlswXS5jJywgJ2EuYlsxXS5kJ10sIFsxLCAyXSk7XG4gICAgICogLy8gPT4geyAnYSc6IHsgJ2InOiBbeyAnYyc6IDEgfSwgeyAnZCc6IDIgfV0gfSB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gemlwT2JqZWN0RGVlcChwcm9wcywgdmFsdWVzKSB7XG4gICAgICByZXR1cm4gYmFzZVppcE9iamVjdChwcm9wcyB8fCBbXSwgdmFsdWVzIHx8IFtdLCBiYXNlU2V0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnppcGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHRvIHNwZWNpZnlcbiAgICAgKiBob3cgZ3JvdXBlZCB2YWx1ZXMgc2hvdWxkIGJlIGNvbWJpbmVkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRoZVxuICAgICAqIGVsZW1lbnRzIG9mIGVhY2ggZ3JvdXA6ICguLi5ncm91cCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy44LjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIHByb2Nlc3MuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiB0byBjb21iaW5lXG4gICAgICogIGdyb3VwZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uemlwV2l0aChbMSwgMl0sIFsxMCwgMjBdLCBbMTAwLCAyMDBdLCBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICogICByZXR1cm4gYSArIGIgKyBjO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IFsxMTEsIDIyMl1cbiAgICAgKi9cbiAgICB2YXIgemlwV2l0aCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5cy5sZW5ndGgsXG4gICAgICAgICAgaXRlcmF0ZWUgPSBsZW5ndGggPiAxID8gYXJyYXlzW2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpdGVyYXRlZSA9IHR5cGVvZiBpdGVyYXRlZSA9PSAnZnVuY3Rpb24nID8gKGFycmF5cy5wb3AoKSwgaXRlcmF0ZWUpIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHVuemlwV2l0aChhcnJheXMsIGl0ZXJhdGVlKTtcbiAgICB9KTtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlIHRoYXQgd3JhcHMgYHZhbHVlYCB3aXRoIGV4cGxpY2l0IG1ldGhvZFxuICAgICAqIGNoYWluIHNlcXVlbmNlcyBlbmFibGVkLiBUaGUgcmVzdWx0IG9mIHN1Y2ggc2VxdWVuY2VzIG11c3QgYmUgdW53cmFwcGVkXG4gICAgICogd2l0aCBgXyN2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2IH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogdmFyIHlvdW5nZXN0ID0gX1xuICAgICAqICAgLmNoYWluKHVzZXJzKVxuICAgICAqICAgLnNvcnRCeSgnYWdlJylcbiAgICAgKiAgIC5tYXAoZnVuY3Rpb24obykge1xuICAgICAqICAgICByZXR1cm4gby51c2VyICsgJyBpcyAnICsgby5hZ2U7XG4gICAgICogICB9KVxuICAgICAqICAgLmhlYWQoKVxuICAgICAqICAgLnZhbHVlKCk7XG4gICAgICogLy8gPT4gJ3BlYmJsZXMgaXMgMSdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjaGFpbih2YWx1ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IGxvZGFzaCh2YWx1ZSk7XG4gICAgICByZXN1bHQuX19jaGFpbl9fID0gdHJ1ZTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaW52b2tlcyBgaW50ZXJjZXB0b3JgIGFuZCByZXR1cm5zIGB2YWx1ZWAuIFRoZSBpbnRlcmNlcHRvclxuICAgICAqIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ7ICh2YWx1ZSkuIFRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvXG4gICAgICogXCJ0YXAgaW50b1wiIGEgbWV0aG9kIGNoYWluIHNlcXVlbmNlIGluIG9yZGVyIHRvIG1vZGlmeSBpbnRlcm1lZGlhdGUgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm92aWRlIHRvIGBpbnRlcmNlcHRvcmAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaW50ZXJjZXB0b3IgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfKFsxLCAyLCAzXSlcbiAgICAgKiAgLnRhcChmdW5jdGlvbihhcnJheSkge1xuICAgICAqICAgIC8vIE11dGF0ZSBpbnB1dCBhcnJheS5cbiAgICAgKiAgICBhcnJheS5wb3AoKTtcbiAgICAgKiAgfSlcbiAgICAgKiAgLnJldmVyc2UoKVxuICAgICAqICAudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YXAodmFsdWUsIGludGVyY2VwdG9yKSB7XG4gICAgICBpbnRlcmNlcHRvcih2YWx1ZSk7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy50YXBgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIHJlc3VsdCBvZiBgaW50ZXJjZXB0b3JgLlxuICAgICAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwicGFzcyB0aHJ1XCIgdmFsdWVzIHJlcGxhY2luZyBpbnRlcm1lZGlhdGVcbiAgICAgKiByZXN1bHRzIGluIGEgbWV0aG9kIGNoYWluIHNlcXVlbmNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb3ZpZGUgdG8gYGludGVyY2VwdG9yYC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpbnRlcmNlcHRvciBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGludGVyY2VwdG9yYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXygnICBhYmMgICcpXG4gICAgICogIC5jaGFpbigpXG4gICAgICogIC50cmltKClcbiAgICAgKiAgLnRocnUoZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgKiAgICByZXR1cm4gW3ZhbHVlXTtcbiAgICAgKiAgfSlcbiAgICAgKiAgLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWydhYmMnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRocnUodmFsdWUsIGludGVyY2VwdG9yKSB7XG4gICAgICByZXR1cm4gaW50ZXJjZXB0b3IodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHRoZSB3cmFwcGVyIHZlcnNpb24gb2YgYF8uYXRgLlxuICAgICAqXG4gICAgICogQG5hbWUgYXRcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBbcGF0aHNdIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9LCA0XSB9O1xuICAgICAqXG4gICAgICogXyhvYmplY3QpLmF0KFsnYVswXS5iLmMnLCAnYVsxXSddKS52YWx1ZSgpO1xuICAgICAqIC8vID0+IFszLCA0XVxuICAgICAqL1xuICAgIHZhciB3cmFwcGVyQXQgPSBmbGF0UmVzdChmdW5jdGlvbihwYXRocykge1xuICAgICAgdmFyIGxlbmd0aCA9IHBhdGhzLmxlbmd0aCxcbiAgICAgICAgICBzdGFydCA9IGxlbmd0aCA/IHBhdGhzWzBdIDogMCxcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuX193cmFwcGVkX18sXG4gICAgICAgICAgaW50ZXJjZXB0b3IgPSBmdW5jdGlvbihvYmplY3QpIHsgcmV0dXJuIGJhc2VBdChvYmplY3QsIHBhdGhzKTsgfTtcblxuICAgICAgaWYgKGxlbmd0aCA+IDEgfHwgdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGggfHxcbiAgICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHx8ICFpc0luZGV4KHN0YXJ0KSkge1xuICAgICAgICByZXR1cm4gdGhpcy50aHJ1KGludGVyY2VwdG9yKTtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2Uoc3RhcnQsICtzdGFydCArIChsZW5ndGggPyAxIDogMCkpO1xuICAgICAgdmFsdWUuX19hY3Rpb25zX18ucHVzaCh7XG4gICAgICAgICdmdW5jJzogdGhydSxcbiAgICAgICAgJ2FyZ3MnOiBbaW50ZXJjZXB0b3JdLFxuICAgICAgICAndGhpc0FyZyc6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodmFsdWUsIHRoaXMuX19jaGFpbl9fKS50aHJ1KGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgICAgIGlmIChsZW5ndGggJiYgIWFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgIGFycmF5LnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlIHdpdGggZXhwbGljaXQgbWV0aG9kIGNoYWluIHNlcXVlbmNlcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQG5hbWUgY2hhaW5cbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gQSBzZXF1ZW5jZSB3aXRob3V0IGV4cGxpY2l0IGNoYWluaW5nLlxuICAgICAqIF8odXNlcnMpLmhlYWQoKTtcbiAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9XG4gICAgICpcbiAgICAgKiAvLyBBIHNlcXVlbmNlIHdpdGggZXhwbGljaXQgY2hhaW5pbmcuXG4gICAgICogXyh1c2VycylcbiAgICAgKiAgIC5jaGFpbigpXG4gICAgICogICAuaGVhZCgpXG4gICAgICogICAucGljaygndXNlcicpXG4gICAgICogICAudmFsdWUoKTtcbiAgICAgKiAvLyA9PiB7ICd1c2VyJzogJ2Jhcm5leScgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJDaGFpbigpIHtcbiAgICAgIHJldHVybiBjaGFpbih0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyB0aGUgY2hhaW4gc2VxdWVuY2UgYW5kIHJldHVybnMgdGhlIHdyYXBwZWQgcmVzdWx0LlxuICAgICAqXG4gICAgICogQG5hbWUgY29tbWl0XG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4yLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyXTtcbiAgICAgKiB2YXIgd3JhcHBlZCA9IF8oYXJyYXkpLnB1c2goMyk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiB3cmFwcGVkID0gd3JhcHBlZC5jb21taXQoKTtcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiB3cmFwcGVkLmxhc3QoKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlckNvbW1pdCgpIHtcbiAgICAgIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcih0aGlzLnZhbHVlKCksIHRoaXMuX19jaGFpbl9fKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHZhbHVlIG9uIGEgd3JhcHBlZCBvYmplY3QgZm9sbG93aW5nIHRoZVxuICAgICAqIFtpdGVyYXRvciBwcm90b2NvbF0oaHR0cHM6Ly9tZG4uaW8vaXRlcmF0aW9uX3Byb3RvY29scyNpdGVyYXRvcikuXG4gICAgICpcbiAgICAgKiBAbmFtZSBuZXh0XG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV4dCBpdGVyYXRvciB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyXSk7XG4gICAgICpcbiAgICAgKiB3cmFwcGVkLm5leHQoKTtcbiAgICAgKiAvLyA9PiB7ICdkb25lJzogZmFsc2UsICd2YWx1ZSc6IDEgfVxuICAgICAqXG4gICAgICogd3JhcHBlZC5uZXh0KCk7XG4gICAgICogLy8gPT4geyAnZG9uZSc6IGZhbHNlLCAndmFsdWUnOiAyIH1cbiAgICAgKlxuICAgICAqIHdyYXBwZWQubmV4dCgpO1xuICAgICAqIC8vID0+IHsgJ2RvbmUnOiB0cnVlLCAndmFsdWUnOiB1bmRlZmluZWQgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJOZXh0KCkge1xuICAgICAgaWYgKHRoaXMuX192YWx1ZXNfXyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX192YWx1ZXNfXyA9IHRvQXJyYXkodGhpcy52YWx1ZSgpKTtcbiAgICAgIH1cbiAgICAgIHZhciBkb25lID0gdGhpcy5fX2luZGV4X18gPj0gdGhpcy5fX3ZhbHVlc19fLmxlbmd0aCxcbiAgICAgICAgICB2YWx1ZSA9IGRvbmUgPyB1bmRlZmluZWQgOiB0aGlzLl9fdmFsdWVzX19bdGhpcy5fX2luZGV4X18rK107XG5cbiAgICAgIHJldHVybiB7ICdkb25lJzogZG9uZSwgJ3ZhbHVlJzogdmFsdWUgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHRoZSB3cmFwcGVyIHRvIGJlIGl0ZXJhYmxlLlxuICAgICAqXG4gICAgICogQG5hbWUgU3ltYm9sLml0ZXJhdG9yXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgd3JhcHBlciBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB3cmFwcGVkID0gXyhbMSwgMl0pO1xuICAgICAqXG4gICAgICogd3JhcHBlZFtTeW1ib2wuaXRlcmF0b3JdKCkgPT09IHdyYXBwZWQ7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogQXJyYXkuZnJvbSh3cmFwcGVkKTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyVG9JdGVyYXRvcigpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGUgY2hhaW4gc2VxdWVuY2UgcGxhbnRpbmcgYHZhbHVlYCBhcyB0aGUgd3JhcHBlZCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHBsYW50XG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4yLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcGxhbnQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gICAgICogICByZXR1cm4gbiAqIG47XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyXSkubWFwKHNxdWFyZSk7XG4gICAgICogdmFyIG90aGVyID0gd3JhcHBlZC5wbGFudChbMywgNF0pO1xuICAgICAqXG4gICAgICogb3RoZXIudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbOSwgMTZdXG4gICAgICpcbiAgICAgKiB3cmFwcGVkLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWzEsIDRdXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlclBsYW50KHZhbHVlKSB7XG4gICAgICB2YXIgcmVzdWx0LFxuICAgICAgICAgIHBhcmVudCA9IHRoaXM7XG5cbiAgICAgIHdoaWxlIChwYXJlbnQgaW5zdGFuY2VvZiBiYXNlTG9kYXNoKSB7XG4gICAgICAgIHZhciBjbG9uZSA9IHdyYXBwZXJDbG9uZShwYXJlbnQpO1xuICAgICAgICBjbG9uZS5fX2luZGV4X18gPSAwO1xuICAgICAgICBjbG9uZS5fX3ZhbHVlc19fID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgcHJldmlvdXMuX193cmFwcGVkX18gPSBjbG9uZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBjbG9uZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJldmlvdXMgPSBjbG9uZTtcbiAgICAgICAgcGFyZW50ID0gcGFyZW50Ll9fd3JhcHBlZF9fO1xuICAgICAgfVxuICAgICAgcHJldmlvdXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdGhlIHdyYXBwZXIgdmVyc2lvbiBvZiBgXy5yZXZlcnNlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIHRoZSB3cmFwcGVkIGFycmF5LlxuICAgICAqXG4gICAgICogQG5hbWUgcmV2ZXJzZVxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMiwgM107XG4gICAgICpcbiAgICAgKiBfKGFycmF5KS5yZXZlcnNlKCkudmFsdWUoKVxuICAgICAqIC8vID0+IFszLCAyLCAxXVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFszLCAyLCAxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJSZXZlcnNlKCkge1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5fX3dyYXBwZWRfXztcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7XG4gICAgICAgIHZhciB3cmFwcGVkID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCkge1xuICAgICAgICAgIHdyYXBwZWQgPSBuZXcgTGF6eVdyYXBwZXIodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgd3JhcHBlZCA9IHdyYXBwZWQucmV2ZXJzZSgpO1xuICAgICAgICB3cmFwcGVkLl9fYWN0aW9uc19fLnB1c2goe1xuICAgICAgICAgICdmdW5jJzogdGhydSxcbiAgICAgICAgICAnYXJncyc6IFtyZXZlcnNlXSxcbiAgICAgICAgICAndGhpc0FyZyc6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHdyYXBwZWQsIHRoaXMuX19jaGFpbl9fKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnRocnUocmV2ZXJzZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIGNoYWluIHNlcXVlbmNlIHRvIHJlc29sdmUgdGhlIHVud3JhcHBlZCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHZhbHVlXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAYWxpYXMgdG9KU09OLCB2YWx1ZU9mXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB1bndyYXBwZWQgdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8oWzEsIDIsIDNdKS52YWx1ZSgpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJWYWx1ZSgpIHtcbiAgICAgIHJldHVybiBiYXNlV3JhcHBlclZhbHVlKHRoaXMuX193cmFwcGVkX18sIHRoaXMuX19hY3Rpb25zX18pO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIGtleXMgZ2VuZXJhdGVkIGZyb20gdGhlIHJlc3VsdHMgb2YgcnVubmluZ1xuICAgICAqIGVhY2ggZWxlbWVudCBvZiBgY29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLiBUaGUgY29ycmVzcG9uZGluZyB2YWx1ZSBvZlxuICAgICAqIGVhY2gga2V5IGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGtleSB3YXMgcmV0dXJuZWQgYnkgYGl0ZXJhdGVlYC4gVGhlXG4gICAgICogaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjUuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29tcG9zZWQgYWdncmVnYXRlIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jb3VudEJ5KFs2LjEsIDQuMiwgNi4zXSwgTWF0aC5mbG9vcik7XG4gICAgICogLy8gPT4geyAnNCc6IDEsICc2JzogMiB9XG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmNvdW50QnkoWydvbmUnLCAndHdvJywgJ3RocmVlJ10sICdsZW5ndGgnKTtcbiAgICAgKiAvLyA9PiB7ICczJzogMiwgJzUnOiAxIH1cbiAgICAgKi9cbiAgICB2YXIgY291bnRCeSA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsIGtleSkpIHtcbiAgICAgICAgKytyZXN1bHRba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgMSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yICoqYWxsKiogZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLlxuICAgICAqIEl0ZXJhdGlvbiBpcyBzdG9wcGVkIG9uY2UgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgcmV0dXJucyBgdHJ1ZWAgZm9yXG4gICAgICogW2VtcHR5IGNvbGxlY3Rpb25zXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FbXB0eV9zZXQpIGJlY2F1c2VcbiAgICAgKiBbZXZlcnl0aGluZyBpcyB0cnVlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9WYWN1b3VzX3RydXRoKSBvZlxuICAgICAqIGVsZW1lbnRzIG9mIGVtcHR5IGNvbGxlY3Rpb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFsbCBlbGVtZW50cyBwYXNzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5ldmVyeShbdHJ1ZSwgMSwgbnVsbCwgJ3llcyddLCBCb29sZWFuKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5ldmVyeSh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmV2ZXJ5KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5ldmVyeSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXZlcnkoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBndWFyZCkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlFdmVyeSA6IGJhc2VFdmVyeTtcbiAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGd1YXJkKSkge1xuICAgICAgICBwcmVkaWNhdGUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nIGFuIGFycmF5IG9mIGFsbCBlbGVtZW50c1xuICAgICAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICAgKiBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ucmVtb3ZlYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAgICAgKiBAc2VlIF8ucmVqZWN0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZmlsdGVyKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmlsdGVyKHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmlsdGVyKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmlsdGVyKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICAgICAqXG4gICAgICogLy8gQ29tYmluaW5nIHNldmVyYWwgcHJlZGljYXRlcyB1c2luZyBgXy5vdmVyRXZlcnlgIG9yIGBfLm92ZXJTb21lYC5cbiAgICAgKiBfLmZpbHRlcih1c2VycywgXy5vdmVyU29tZShbeyAnYWdlJzogMzYgfSwgWydhZ2UnLCA0MF1dKSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ2Jhcm5leSddXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlGaWx0ZXIgOiBiYXNlRmlsdGVyO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAsIHJldHVybmluZyB0aGUgZmlyc3QgZWxlbWVudFxuICAgICAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICAgKiBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXRjaGVkIGVsZW1lbnQsIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSwgICdhY3RpdmUnOiB0cnVlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maW5kKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZSA8IDQwOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3QgZm9yICdiYXJuZXknXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZCh1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0IGZvciAncGViYmxlcydcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmQodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3QgZm9yICdmcmVkJ1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gb2JqZWN0IGZvciAnYmFybmV5J1xuICAgICAqL1xuICAgIHZhciBmaW5kID0gY3JlYXRlRmluZChmaW5kSW5kZXgpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gICAgICogYGNvbGxlY3Rpb25gIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9Y29sbGVjdGlvbi5sZW5ndGgtMV0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXRjaGVkIGVsZW1lbnQsIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZmluZExhc3QoWzEsIDIsIDMsIDRdLCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiAlIDIgPT0gMTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgdmFyIGZpbmRMYXN0ID0gY3JlYXRlRmluZChmaW5kTGFzdEluZGV4KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmbGF0dGVuZWQgYXJyYXkgb2YgdmFsdWVzIGJ5IHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYFxuICAgICAqIHRocnUgYGl0ZXJhdGVlYCBhbmQgZmxhdHRlbmluZyB0aGUgbWFwcGVkIHJlc3VsdHMuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZHVwbGljYXRlKG4pIHtcbiAgICAgKiAgIHJldHVybiBbbiwgbl07XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5mbGF0TWFwKFsxLCAyXSwgZHVwbGljYXRlKTtcbiAgICAgKiAvLyA9PiBbMSwgMSwgMiwgMl1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGF0TWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gYmFzZUZsYXR0ZW4obWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSwgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mbGF0TWFwYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBmbGF0dGVucyB0aGVcbiAgICAgKiBtYXBwZWQgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjcuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZHVwbGljYXRlKG4pIHtcbiAgICAgKiAgIHJldHVybiBbW1tuLCBuXV1dO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8uZmxhdE1hcERlZXAoWzEsIDJdLCBkdXBsaWNhdGUpO1xuICAgICAqIC8vID0+IFsxLCAxLCAyLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXRNYXBEZWVwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gYmFzZUZsYXR0ZW4obWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSwgSU5GSU5JVFkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmxhdE1hcGAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgZmxhdHRlbnMgdGhlXG4gICAgICogbWFwcGVkIHJlc3VsdHMgdXAgdG8gYGRlcHRoYCB0aW1lcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjcuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVwdGg9MV0gVGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZHVwbGljYXRlKG4pIHtcbiAgICAgKiAgIHJldHVybiBbW1tuLCBuXV1dO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8uZmxhdE1hcERlcHRoKFsxLCAyXSwgZHVwbGljYXRlLCAyKTtcbiAgICAgKiAvLyA9PiBbWzEsIDFdLCBbMiwgMl1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdE1hcERlcHRoKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBkZXB0aCkge1xuICAgICAgZGVwdGggPSBkZXB0aCA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aCk7XG4gICAgICByZXR1cm4gYmFzZUZsYXR0ZW4obWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSwgZGVwdGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggZWxlbWVudC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBBcyB3aXRoIG90aGVyIFwiQ29sbGVjdGlvbnNcIiBtZXRob2RzLCBvYmplY3RzIHdpdGggYSBcImxlbmd0aFwiXG4gICAgICogcHJvcGVydHkgYXJlIGl0ZXJhdGVkIGxpa2UgYXJyYXlzLiBUbyBhdm9pZCB0aGlzIGJlaGF2aW9yIHVzZSBgXy5mb3JJbmBcbiAgICAgKiBvciBgXy5mb3JPd25gIGZvciBvYmplY3QgaXRlcmF0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGFsaWFzIGVhY2hcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAgICAgKiBAc2VlIF8uZm9yRWFjaFJpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZm9yRWFjaChbMSwgMl0sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICogICBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gTG9ncyBgMWAgdGhlbiBgMmAuXG4gICAgICpcbiAgICAgKiBfLmZvckVhY2goeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvckVhY2goY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RWFjaCA6IGJhc2VFYWNoO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZvckVhY2hgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2ZcbiAgICAgKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGFsaWFzIGVhY2hSaWdodFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICAgICAqIEBzZWUgXy5mb3JFYWNoXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZm9yRWFjaFJpZ2h0KFsxLCAyXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzIGAyYCB0aGVuIGAxYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JFYWNoUmlnaHQoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RWFjaFJpZ2h0IDogYmFzZUVhY2hSaWdodDtcbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2Yga2V5cyBnZW5lcmF0ZWQgZnJvbSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nXG4gICAgICogZWFjaCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCB0aHJ1IGBpdGVyYXRlZWAuIFRoZSBvcmRlciBvZiBncm91cGVkIHZhbHVlc1xuICAgICAqIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gYGNvbGxlY3Rpb25gLiBUaGUgY29ycmVzcG9uZGluZ1xuICAgICAqIHZhbHVlIG9mIGVhY2gga2V5IGlzIGFuIGFycmF5IG9mIGVsZW1lbnRzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZVxuICAgICAqIGtleS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZ3JvdXBCeShbNi4xLCA0LjIsIDYuM10sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IHsgJzQnOiBbNC4yXSwgJzYnOiBbNi4xLCA2LjNdIH1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZ3JvdXBCeShbJ29uZScsICd0d28nLCAndGhyZWUnXSwgJ2xlbmd0aCcpO1xuICAgICAqIC8vID0+IHsgJzMnOiBbJ29uZScsICd0d28nXSwgJzUnOiBbJ3RocmVlJ10gfVxuICAgICAqL1xuICAgIHZhciBncm91cEJ5ID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwga2V5KSkge1xuICAgICAgICByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgW3ZhbHVlXSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiBgY29sbGVjdGlvbmAuIElmIGBjb2xsZWN0aW9uYCBpcyBhIHN0cmluZywgaXQnc1xuICAgICAqIGNoZWNrZWQgZm9yIGEgc3Vic3RyaW5nIG9mIGB2YWx1ZWAsIG90aGVyd2lzZVxuICAgICAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogaXMgdXNlZCBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIElmIGBmcm9tSW5kZXhgIGlzIG5lZ2F0aXZlLCBpdCdzIHVzZWQgYXNcbiAgICAgKiB0aGUgb2Zmc2V0IGZyb20gdGhlIGVuZCBvZiBgY29sbGVjdGlvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLnJlZHVjZWAuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pbmNsdWRlcyhbMSwgMiwgM10sIDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaW5jbHVkZXMoWzEsIDIsIDNdLCAxLCAyKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pbmNsdWRlcyh7ICdhJzogMSwgJ2InOiAyIH0sIDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaW5jbHVkZXMoJ2FiY2QnLCAnYmMnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5jbHVkZXMoY29sbGVjdGlvbiwgdmFsdWUsIGZyb21JbmRleCwgZ3VhcmQpIHtcbiAgICAgIGNvbGxlY3Rpb24gPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IGNvbGxlY3Rpb24gOiB2YWx1ZXMoY29sbGVjdGlvbik7XG4gICAgICBmcm9tSW5kZXggPSAoZnJvbUluZGV4ICYmICFndWFyZCkgPyB0b0ludGVnZXIoZnJvbUluZGV4KSA6IDA7XG5cbiAgICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcbiAgICAgIGlmIChmcm9tSW5kZXggPCAwKSB7XG4gICAgICAgIGZyb21JbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBmcm9tSW5kZXgsIDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pXG4gICAgICAgID8gKGZyb21JbmRleCA8PSBsZW5ndGggJiYgY29sbGVjdGlvbi5pbmRleE9mKHZhbHVlLCBmcm9tSW5kZXgpID4gLTEpXG4gICAgICAgIDogKCEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGNvbGxlY3Rpb24sIHZhbHVlLCBmcm9tSW5kZXgpID4gLTEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEludm9rZXMgdGhlIG1ldGhvZCBhdCBgcGF0aGAgb2YgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nXG4gICAgICogYW4gYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgZWFjaCBpbnZva2VkIG1ldGhvZC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAgICogYXJlIHByb3ZpZGVkIHRvIGVhY2ggaW52b2tlZCBtZXRob2QuIElmIGBwYXRoYCBpcyBhIGZ1bmN0aW9uLCBpdCdzIGludm9rZWRcbiAgICAgKiBmb3IsIGFuZCBgdGhpc2AgYm91bmQgdG8sIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgbWV0aG9kIHRvIGludm9rZSBvclxuICAgICAqICB0aGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGVhY2ggbWV0aG9kIHdpdGguXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmludm9rZU1hcChbWzUsIDEsIDddLCBbMywgMiwgMV1dLCAnc29ydCcpO1xuICAgICAqIC8vID0+IFtbMSwgNSwgN10sIFsxLCAyLCAzXV1cbiAgICAgKlxuICAgICAqIF8uaW52b2tlTWFwKFsxMjMsIDQ1Nl0sIFN0cmluZy5wcm90b3R5cGUuc3BsaXQsICcnKTtcbiAgICAgKiAvLyA9PiBbWycxJywgJzInLCAnMyddLCBbJzQnLCAnNScsICc2J11dXG4gICAgICovXG4gICAgdmFyIGludm9rZU1hcCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHBhdGgsIGFyZ3MpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGlzRnVuYyA9IHR5cGVvZiBwYXRoID09ICdmdW5jdGlvbicsXG4gICAgICAgICAgcmVzdWx0ID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBBcnJheShjb2xsZWN0aW9uLmxlbmd0aCkgOiBbXTtcblxuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmVzdWx0WysraW5kZXhdID0gaXNGdW5jID8gYXBwbHkocGF0aCwgdmFsdWUsIGFyZ3MpIDogYmFzZUludm9rZSh2YWx1ZSwgcGF0aCwgYXJncyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiBrZXlzIGdlbmVyYXRlZCBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmdcbiAgICAgKiBlYWNoIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIHRocnUgYGl0ZXJhdGVlYC4gVGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgb2ZcbiAgICAgKiBlYWNoIGtleSBpcyB0aGUgbGFzdCBlbGVtZW50IHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBrZXkuIFRoZVxuICAgICAqIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFtcbiAgICAgKiAgIHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LFxuICAgICAqICAgeyAnZGlyJzogJ3JpZ2h0JywgJ2NvZGUnOiAxMDAgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmtleUJ5KGFycmF5LCBmdW5jdGlvbihvKSB7XG4gICAgICogICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShvLmNvZGUpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiB7ICdkaXInOiAnbGVmdCcsICdjb2RlJzogOTcgfSwgJ2QnOiB7ICdkaXInOiAncmlnaHQnLCAnY29kZSc6IDEwMCB9IH1cbiAgICAgKlxuICAgICAqIF8ua2V5QnkoYXJyYXksICdkaXInKTtcbiAgICAgKiAvLyA9PiB7ICdsZWZ0JzogeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sICdyaWdodCc6IHsgJ2Rpcic6ICdyaWdodCcsICdjb2RlJzogMTAwIH0gfVxuICAgICAqL1xuICAgIHZhciBrZXlCeSA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICBiYXNlQXNzaWduVmFsdWUocmVzdWx0LCBrZXksIHZhbHVlKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdmFsdWVzIGJ5IHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCB0aHJ1XG4gICAgICogYGl0ZXJhdGVlYC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XG4gICAgICogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogTWFueSBsb2Rhc2ggbWV0aG9kcyBhcmUgZ3VhcmRlZCB0byB3b3JrIGFzIGl0ZXJhdGVlcyBmb3IgbWV0aG9kcyBsaWtlXG4gICAgICogYF8uZXZlcnlgLCBgXy5maWx0ZXJgLCBgXy5tYXBgLCBgXy5tYXBWYWx1ZXNgLCBgXy5yZWplY3RgLCBhbmQgYF8uc29tZWAuXG4gICAgICpcbiAgICAgKiBUaGUgZ3VhcmRlZCBtZXRob2RzIGFyZTpcbiAgICAgKiBgYXJ5YCwgYGNodW5rYCwgYGN1cnJ5YCwgYGN1cnJ5UmlnaHRgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZXZlcnlgLFxuICAgICAqIGBmaWxsYCwgYGludmVydGAsIGBwYXJzZUludGAsIGByYW5kb21gLCBgcmFuZ2VgLCBgcmFuZ2VSaWdodGAsIGByZXBlYXRgLFxuICAgICAqIGBzYW1wbGVTaXplYCwgYHNsaWNlYCwgYHNvbWVgLCBgc29ydEJ5YCwgYHNwbGl0YCwgYHRha2VgLCBgdGFrZVJpZ2h0YCxcbiAgICAgKiBgdGVtcGxhdGVgLCBgdHJpbWAsIGB0cmltRW5kYCwgYHRyaW1TdGFydGAsIGFuZCBgd29yZHNgXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gICAgICogICByZXR1cm4gbiAqIG47XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5tYXAoWzQsIDhdLCBzcXVhcmUpO1xuICAgICAqIC8vID0+IFsxNiwgNjRdXG4gICAgICpcbiAgICAgKiBfLm1hcCh7ICdhJzogNCwgJ2InOiA4IH0sIHNxdWFyZSk7XG4gICAgICogLy8gPT4gWzE2LCA2NF0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JyB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJyB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWFwKHVzZXJzLCAndXNlcicpO1xuICAgICAqIC8vID0+IFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlNYXAgOiBiYXNlTWFwO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRCeWAgZXhjZXB0IHRoYXQgaXQgYWxsb3dzIHNwZWNpZnlpbmcgdGhlIHNvcnRcbiAgICAgKiBvcmRlcnMgb2YgdGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LiBJZiBgb3JkZXJzYCBpcyB1bnNwZWNpZmllZCwgYWxsIHZhbHVlc1xuICAgICAqIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyLiBPdGhlcndpc2UsIHNwZWNpZnkgYW4gb3JkZXIgb2YgXCJkZXNjXCIgZm9yXG4gICAgICogZGVzY2VuZGluZyBvciBcImFzY1wiIGZvciBhc2NlbmRpbmcgc29ydCBvcmRlciBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXJyYXlbXXxGdW5jdGlvbltdfE9iamVjdFtdfHN0cmluZ1tdfSBbaXRlcmF0ZWVzPVtfLmlkZW50aXR5XV1cbiAgICAgKiAgVGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IFtvcmRlcnNdIFRoZSBzb3J0IG9yZGVycyBvZiBgaXRlcmF0ZWVzYC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5yZWR1Y2VgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNvcnRlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDggfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM0IH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCB9LFxuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiAvLyBTb3J0IGJ5IGB1c2VyYCBpbiBhc2NlbmRpbmcgb3JkZXIgYW5kIGJ5IGBhZ2VgIGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAgICogXy5vcmRlckJ5KHVzZXJzLCBbJ3VzZXInLCAnYWdlJ10sIFsnYXNjJywgJ2Rlc2MnXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgW1snYmFybmV5JywgMzZdLCBbJ2Jhcm5leScsIDM0XSwgWydmcmVkJywgNDhdLCBbJ2ZyZWQnLCA0MF1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gb3JkZXJCeShjb2xsZWN0aW9uLCBpdGVyYXRlZXMsIG9yZGVycywgZ3VhcmQpIHtcbiAgICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0FycmF5KGl0ZXJhdGVlcykpIHtcbiAgICAgICAgaXRlcmF0ZWVzID0gaXRlcmF0ZWVzID09IG51bGwgPyBbXSA6IFtpdGVyYXRlZXNdO1xuICAgICAgfVxuICAgICAgb3JkZXJzID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBvcmRlcnM7XG4gICAgICBpZiAoIWlzQXJyYXkob3JkZXJzKSkge1xuICAgICAgICBvcmRlcnMgPSBvcmRlcnMgPT0gbnVsbCA/IFtdIDogW29yZGVyc107XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZU9yZGVyQnkoY29sbGVjdGlvbiwgaXRlcmF0ZWVzLCBvcmRlcnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZWxlbWVudHMgc3BsaXQgaW50byB0d28gZ3JvdXBzLCB0aGUgZmlyc3Qgb2Ygd2hpY2hcbiAgICAgKiBjb250YWlucyBlbGVtZW50cyBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IsIHRoZSBzZWNvbmQgb2Ygd2hpY2hcbiAgICAgKiBjb250YWlucyBlbGVtZW50cyBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleSBmb3IuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2LCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5wYXJ0aXRpb24odXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydmcmVkJ10sIFsnYmFybmV5JywgJ3BlYmJsZXMnXV1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5wYXJ0aXRpb24odXNlcnMsIHsgJ2FnZSc6IDEsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydwZWJibGVzJ10sIFsnYmFybmV5JywgJ2ZyZWQnXV1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnBhcnRpdGlvbih1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2Jhcm5leScsICdwZWJibGVzJ10sIFsnZnJlZCddXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5wYXJ0aXRpb24odXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydmcmVkJ10sIFsnYmFybmV5JywgJ3BlYmJsZXMnXV1cbiAgICAgKi9cbiAgICB2YXIgcGFydGl0aW9uID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgIHJlc3VsdFtrZXkgPyAwIDogMV0ucHVzaCh2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24oKSB7IHJldHVybiBbW10sIFtdXTsgfSk7XG5cbiAgICAvKipcbiAgICAgKiBSZWR1Y2VzIGBjb2xsZWN0aW9uYCB0byBhIHZhbHVlIHdoaWNoIGlzIHRoZSBhY2N1bXVsYXRlZCByZXN1bHQgb2YgcnVubmluZ1xuICAgICAqIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLCB3aGVyZSBlYWNoIHN1Y2Nlc3NpdmVcbiAgICAgKiBpbnZvY2F0aW9uIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzLiBJZiBgYWNjdW11bGF0b3JgXG4gICAgICogaXMgbm90IGdpdmVuLCB0aGUgZmlyc3QgZWxlbWVudCBvZiBgY29sbGVjdGlvbmAgaXMgdXNlZCBhcyB0aGUgaW5pdGlhbFxuICAgICAqIHZhbHVlLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIGZvdXIgYXJndW1lbnRzOlxuICAgICAqIChhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBNYW55IGxvZGFzaCBtZXRob2RzIGFyZSBndWFyZGVkIHRvIHdvcmsgYXMgaXRlcmF0ZWVzIGZvciBtZXRob2RzIGxpa2VcbiAgICAgKiBgXy5yZWR1Y2VgLCBgXy5yZWR1Y2VSaWdodGAsIGFuZCBgXy50cmFuc2Zvcm1gLlxuICAgICAqXG4gICAgICogVGhlIGd1YXJkZWQgbWV0aG9kcyBhcmU6XG4gICAgICogYGFzc2lnbmAsIGBkZWZhdWx0c2AsIGBkZWZhdWx0c0RlZXBgLCBgaW5jbHVkZXNgLCBgbWVyZ2VgLCBgb3JkZXJCeWAsXG4gICAgICogYW5kIGBzb3J0QnlgXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgICAqIEBzZWUgXy5yZWR1Y2VSaWdodFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJlZHVjZShbMSwgMl0sIGZ1bmN0aW9uKHN1bSwgbikge1xuICAgICAqICAgcmV0dXJuIHN1bSArIG47XG4gICAgICogfSwgMCk7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy5yZWR1Y2UoeyAnYSc6IDEsICdiJzogMiwgJ2MnOiAxIH0sIGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAqICAgKHJlc3VsdFt2YWx1ZV0gfHwgKHJlc3VsdFt2YWx1ZV0gPSBbXSkpLnB1c2goa2V5KTtcbiAgICAgKiAgIHJldHVybiByZXN1bHQ7XG4gICAgICogfSwge30pO1xuICAgICAqIC8vID0+IHsgJzEnOiBbJ2EnLCAnYyddLCAnMic6IFsnYiddIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWR1Y2UoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVJlZHVjZSA6IGJhc2VSZWR1Y2UsXG4gICAgICAgICAgaW5pdEFjY3VtID0gYXJndW1lbnRzLmxlbmd0aCA8IDM7XG5cbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCA0KSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSwgYmFzZUVhY2gpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucmVkdWNlYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gICAgICogYGNvbGxlY3Rpb25gIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAgICogQHNlZSBfLnJlZHVjZVxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbWzAsIDFdLCBbMiwgM10sIFs0LCA1XV07XG4gICAgICpcbiAgICAgKiBfLnJlZHVjZVJpZ2h0KGFycmF5LCBmdW5jdGlvbihmbGF0dGVuZWQsIG90aGVyKSB7XG4gICAgICogICByZXR1cm4gZmxhdHRlbmVkLmNvbmNhdChvdGhlcik7XG4gICAgICogfSwgW10pO1xuICAgICAqIC8vID0+IFs0LCA1LCAyLCAzLCAwLCAxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlSZWR1Y2VSaWdodCA6IGJhc2VSZWR1Y2UsXG4gICAgICAgICAgaW5pdEFjY3VtID0gYXJndW1lbnRzLmxlbmd0aCA8IDM7XG5cbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCA0KSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSwgYmFzZUVhY2hSaWdodCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLmZpbHRlcmA7IHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYFxuICAgICAqIHRoYXQgYHByZWRpY2F0ZWAgZG9lcyAqKm5vdCoqIHJldHVybiB0cnV0aHkgZm9yLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICAgICAqIEBzZWUgXy5maWx0ZXJcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiB0cnVlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5yZWplY3QodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5yZWplY3QodXNlcnMsIHsgJ2FnZSc6IDQwLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5yZWplY3QodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5yZWplY3QodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVqZWN0KGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlGaWx0ZXIgOiBiYXNlRmlsdGVyO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgbmVnYXRlKGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgcmFuZG9tIGVsZW1lbnQgZnJvbSBgY29sbGVjdGlvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNhbXBsZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc2FtcGxlKFsxLCAyLCAzLCA0XSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNhbXBsZShjb2xsZWN0aW9uKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNhbXBsZSA6IGJhc2VTYW1wbGU7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGBuYCByYW5kb20gZWxlbWVudHMgYXQgdW5pcXVlIGtleXMgZnJvbSBgY29sbGVjdGlvbmAgdXAgdG8gdGhlXG4gICAgICogc2l6ZSBvZiBgY29sbGVjdGlvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNhbXBsZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBzYW1wbGUuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zYW1wbGVTaXplKFsxLCAyLCAzXSwgMik7XG4gICAgICogLy8gPT4gWzMsIDFdXG4gICAgICpcbiAgICAgKiBfLnNhbXBsZVNpemUoWzEsIDIsIDNdLCA0KTtcbiAgICAgKiAvLyA9PiBbMiwgMywgMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzYW1wbGVTaXplKGNvbGxlY3Rpb24sIG4sIGd1YXJkKSB7XG4gICAgICBpZiAoKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgbiwgZ3VhcmQpIDogbiA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICBuID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG4gPSB0b0ludGVnZXIobik7XG4gICAgICB9XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNhbXBsZVNpemUgOiBiYXNlU2FtcGxlU2l6ZTtcbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIG4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygc2h1ZmZsZWQgdmFsdWVzLCB1c2luZyBhIHZlcnNpb24gb2YgdGhlXG4gICAgICogW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXItWWF0ZXNfc2h1ZmZsZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNodWZmbGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc2h1ZmZsZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc2h1ZmZsZShbMSwgMiwgMywgNF0pO1xuICAgICAqIC8vID0+IFs0LCAxLCAzLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNodWZmbGUoY29sbGVjdGlvbikge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlTaHVmZmxlIDogYmFzZVNodWZmbGU7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzaXplIG9mIGBjb2xsZWN0aW9uYCBieSByZXR1cm5pbmcgaXRzIGxlbmd0aCBmb3IgYXJyYXktbGlrZVxuICAgICAqIHZhbHVlcyBvciB0aGUgbnVtYmVyIG9mIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIGZvciBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb2xsZWN0aW9uIHNpemUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc2l6ZShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8uc2l6ZSh7ICdhJzogMSwgJ2InOiAyIH0pO1xuICAgICAqIC8vID0+IDJcbiAgICAgKlxuICAgICAqIF8uc2l6ZSgncGViYmxlcycpO1xuICAgICAqIC8vID0+IDdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzaXplKGNvbGxlY3Rpb24pIHtcbiAgICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgICBpZiAoaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pID8gc3RyaW5nU2l6ZShjb2xsZWN0aW9uKSA6IGNvbGxlY3Rpb24ubGVuZ3RoO1xuICAgICAgfVxuICAgICAgdmFyIHRhZyA9IGdldFRhZyhjb2xsZWN0aW9uKTtcbiAgICAgIGlmICh0YWcgPT0gbWFwVGFnIHx8IHRhZyA9PSBzZXRUYWcpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb24uc2l6ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlS2V5cyhjb2xsZWN0aW9uKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciAqKmFueSoqIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gLlxuICAgICAqIEl0ZXJhdGlvbiBpcyBzdG9wcGVkIG9uY2UgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkuIFRoZSBwcmVkaWNhdGUgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb21lKFtudWxsLCAwLCAneWVzJywgZmFsc2VdLCBCb29sZWFuKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhY3RpdmUnOiBmYWxzZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5zb21lKHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uc29tZSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uc29tZSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb21lKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZ3VhcmQpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5U29tZSA6IGJhc2VTb21lO1xuICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZ3VhcmQpKSB7XG4gICAgICAgIHByZWRpY2F0ZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZWxlbWVudHMsIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIgYnkgdGhlIHJlc3VsdHMgb2ZcbiAgICAgKiBydW5uaW5nIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24gdGhydSBlYWNoIGl0ZXJhdGVlLiBUaGlzIG1ldGhvZFxuICAgICAqIHBlcmZvcm1zIGEgc3RhYmxlIHNvcnQsIHRoYXQgaXMsIGl0IHByZXNlcnZlcyB0aGUgb3JpZ2luYWwgc29ydCBvcmRlciBvZlxuICAgICAqIGVxdWFsIGVsZW1lbnRzLiBUaGUgaXRlcmF0ZWVzIGFyZSBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtpdGVyYXRlZXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc29ydGVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0OCB9LFxuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDMwIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNCB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uc29ydEJ5KHVzZXJzLCBbZnVuY3Rpb24obykgeyByZXR1cm4gby51c2VyOyB9XSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgW1snYmFybmV5JywgMzZdLCBbJ2Jhcm5leScsIDM0XSwgWydmcmVkJywgNDhdLCBbJ2ZyZWQnLCAzMF1dXG4gICAgICpcbiAgICAgKiBfLnNvcnRCeSh1c2VycywgWyd1c2VyJywgJ2FnZSddKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAzNF0sIFsnYmFybmV5JywgMzZdLCBbJ2ZyZWQnLCAzMF0sIFsnZnJlZCcsIDQ4XV1cbiAgICAgKi9cbiAgICB2YXIgc29ydEJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWVzKSB7XG4gICAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciBsZW5ndGggPSBpdGVyYXRlZXMubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCA+IDEgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgaXRlcmF0ZWVzWzBdLCBpdGVyYXRlZXNbMV0pKSB7XG4gICAgICAgIGl0ZXJhdGVlcyA9IFtdO1xuICAgICAgfSBlbHNlIGlmIChsZW5ndGggPiAyICYmIGlzSXRlcmF0ZWVDYWxsKGl0ZXJhdGVlc1swXSwgaXRlcmF0ZWVzWzFdLCBpdGVyYXRlZXNbMl0pKSB7XG4gICAgICAgIGl0ZXJhdGVlcyA9IFtpdGVyYXRlZXNbMF1dO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VPcmRlckJ5KGNvbGxlY3Rpb24sIGJhc2VGbGF0dGVuKGl0ZXJhdGVlcywgMSksIFtdKTtcbiAgICB9KTtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGF0IGhhdmUgZWxhcHNlZCBzaW5jZVxuICAgICAqIHRoZSBVbml4IGVwb2NoICgxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuNC4wXG4gICAgICogQGNhdGVnb3J5IERhdGVcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lc3RhbXAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVmZXIoZnVuY3Rpb24oc3RhbXApIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKF8ubm93KCkgLSBzdGFtcCk7XG4gICAgICogfSwgXy5ub3coKSk7XG4gICAgICogLy8gPT4gTG9ncyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0b29rIGZvciB0aGUgZGVmZXJyZWQgaW52b2NhdGlvbi5cbiAgICAgKi9cbiAgICB2YXIgbm93ID0gY3R4Tm93IHx8IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHJvb3QuRGF0ZS5ub3coKTtcbiAgICB9O1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLmJlZm9yZWA7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXNcbiAgICAgKiBgZnVuY2Agb25jZSBpdCdzIGNhbGxlZCBgbmAgb3IgbW9yZSB0aW1lcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgY2FsbHMgYmVmb3JlIGBmdW5jYCBpcyBpbnZva2VkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJlc3RyaWN0ZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBzYXZlcyA9IFsncHJvZmlsZScsICdzZXR0aW5ncyddO1xuICAgICAqXG4gICAgICogdmFyIGRvbmUgPSBfLmFmdGVyKHNhdmVzLmxlbmd0aCwgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnZG9uZSBzYXZpbmchJyk7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBfLmZvckVhY2goc2F2ZXMsIGZ1bmN0aW9uKHR5cGUpIHtcbiAgICAgKiAgIGFzeW5jU2F2ZSh7ICd0eXBlJzogdHlwZSwgJ2NvbXBsZXRlJzogZG9uZSB9KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzICdkb25lIHNhdmluZyEnIGFmdGVyIHRoZSB0d28gYXN5bmMgc2F2ZXMgaGF2ZSBjb21wbGV0ZWQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYWZ0ZXIobiwgZnVuYykge1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgbiA9IHRvSW50ZWdlcihuKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKC0tbiA8IDEpIHtcbiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgLCB3aXRoIHVwIHRvIGBuYCBhcmd1bWVudHMsXG4gICAgICogaWdub3JpbmcgYW55IGFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPWZ1bmMubGVuZ3RoXSBUaGUgYXJpdHkgY2FwLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1hcChbJzYnLCAnOCcsICcxMCddLCBfLmFyeShwYXJzZUludCwgMSkpO1xuICAgICAqIC8vID0+IFs2LCA4LCAxMF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcnkoZnVuYywgbiwgZ3VhcmQpIHtcbiAgICAgIG4gPSBndWFyZCA/IHVuZGVmaW5lZCA6IG47XG4gICAgICBuID0gKGZ1bmMgJiYgbiA9PSBudWxsKSA/IGZ1bmMubGVuZ3RoIDogbjtcbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfQVJZX0ZMQUcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2AsIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHNcbiAgICAgKiBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbiwgd2hpbGUgaXQncyBjYWxsZWQgbGVzcyB0aGFuIGBuYCB0aW1lcy4gU3Vic2VxdWVudFxuICAgICAqIGNhbGxzIHRvIHRoZSBjcmVhdGVkIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYCBpbnZvY2F0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBjYWxscyBhdCB3aGljaCBgZnVuY2AgaXMgbm8gbG9uZ2VyIGludm9rZWQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVzdHJpY3RlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIF8uYmVmb3JlKDUsIGFkZENvbnRhY3RUb0xpc3QpKTtcbiAgICAgKiAvLyA9PiBBbGxvd3MgYWRkaW5nIHVwIHRvIDQgY29udGFjdHMgdG8gdGhlIGxpc3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmVmb3JlKG4sIGZ1bmMpIHtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICBuID0gdG9JbnRlZ2VyKG4pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoLS1uID4gMCkge1xuICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobiA8PSAxKSB7XG4gICAgICAgICAgZnVuYyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2BcbiAgICAgKiBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAgICAgKlxuICAgICAqIFRoZSBgXy5iaW5kLnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWMgYnVpbGRzLFxuICAgICAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgbmF0aXZlIGBGdW5jdGlvbiNiaW5kYCwgdGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCJcbiAgICAgKiBwcm9wZXJ0eSBvZiBib3VuZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBiaW5kLlxuICAgICAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJvdW5kIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBncmVldChncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAgICAgKiAgIHJldHVybiBncmVldGluZyArICcgJyArIHRoaXMudXNlciArIHB1bmN0dWF0aW9uO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICd1c2VyJzogJ2ZyZWQnIH07XG4gICAgICpcbiAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgJ2hpJyk7XG4gICAgICogYm91bmQoJyEnKTtcbiAgICAgKiAvLyA9PiAnaGkgZnJlZCEnXG4gICAgICpcbiAgICAgKiAvLyBCb3VuZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgXywgJyEnKTtcbiAgICAgKiBib3VuZCgnaGknKTtcbiAgICAgKiAvLyA9PiAnaGkgZnJlZCEnXG4gICAgICovXG4gICAgdmFyIGJpbmQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCB0aGlzQXJnLCBwYXJ0aWFscykge1xuICAgICAgdmFyIGJpdG1hc2sgPSBXUkFQX0JJTkRfRkxBRztcbiAgICAgIGlmIChwYXJ0aWFscy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKGJpbmQpKTtcbiAgICAgICAgYml0bWFzayB8PSBXUkFQX1BBUlRJQUxfRkxBRztcbiAgICAgIH1cbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIG1ldGhvZCBhdCBgb2JqZWN0W2tleV1gIHdpdGggYHBhcnRpYWxzYFxuICAgICAqIHByZXBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgZGlmZmVycyBmcm9tIGBfLmJpbmRgIGJ5IGFsbG93aW5nIGJvdW5kIGZ1bmN0aW9ucyB0byByZWZlcmVuY2VcbiAgICAgKiBtZXRob2RzIHRoYXQgbWF5IGJlIHJlZGVmaW5lZCBvciBkb24ndCB5ZXQgZXhpc3QuIFNlZVxuICAgICAqIFtQZXRlciBNaWNoYXV4J3MgYXJ0aWNsZV0oaHR0cDovL3BldGVyLm1pY2hhdXguY2EvYXJ0aWNsZXMvbGF6eS1mdW5jdGlvbi1kZWZpbml0aW9uLXBhdHRlcm4pXG4gICAgICogZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKlxuICAgICAqIFRoZSBgXy5iaW5kS2V5LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAgICAgKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEwLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW52b2tlIHRoZSBtZXRob2Qgb24uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYm91bmQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7XG4gICAgICogICAndXNlcic6ICdmcmVkJyxcbiAgICAgKiAgICdncmVldCc6IGZ1bmN0aW9uKGdyZWV0aW5nLCBwdW5jdHVhdGlvbikge1xuICAgICAqICAgICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyB0aGlzLnVzZXIgKyBwdW5jdHVhdGlvbjtcbiAgICAgKiAgIH1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIGJvdW5kID0gXy5iaW5kS2V5KG9iamVjdCwgJ2dyZWV0JywgJ2hpJyk7XG4gICAgICogYm91bmQoJyEnKTtcbiAgICAgKiAvLyA9PiAnaGkgZnJlZCEnXG4gICAgICpcbiAgICAgKiBvYmplY3QuZ3JlZXQgPSBmdW5jdGlvbihncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAgICAgKiAgIHJldHVybiBncmVldGluZyArICd5YSAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIGJvdW5kKCchJyk7XG4gICAgICogLy8gPT4gJ2hpeWEgZnJlZCEnXG4gICAgICpcbiAgICAgKiAvLyBCb3VuZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmRLZXkob2JqZWN0LCAnZ3JlZXQnLCBfLCAnIScpO1xuICAgICAqIGJvdW5kKCdoaScpO1xuICAgICAqIC8vID0+ICdoaXlhIGZyZWQhJ1xuICAgICAqL1xuICAgIHZhciBiaW5kS2V5ID0gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBrZXksIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgYml0bWFzayA9IFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHO1xuICAgICAgaWYgKHBhcnRpYWxzLmxlbmd0aCkge1xuICAgICAgICB2YXIgaG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLCBnZXRIb2xkZXIoYmluZEtleSkpO1xuICAgICAgICBiaXRtYXNrIHw9IFdSQVBfUEFSVElBTF9GTEFHO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoa2V5LCBiaXRtYXNrLCBvYmplY3QsIHBhcnRpYWxzLCBob2xkZXJzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYXJndW1lbnRzIG9mIGBmdW5jYCBhbmQgZWl0aGVyIGludm9rZXNcbiAgICAgKiBgZnVuY2AgcmV0dXJuaW5nIGl0cyByZXN1bHQsIGlmIGF0IGxlYXN0IGBhcml0eWAgbnVtYmVyIG9mIGFyZ3VtZW50cyBoYXZlXG4gICAgICogYmVlbiBwcm92aWRlZCwgb3IgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgcmVtYWluaW5nIGBmdW5jYFxuICAgICAqIGFyZ3VtZW50cywgYW5kIHNvIG9uLiBUaGUgYXJpdHkgb2YgYGZ1bmNgIG1heSBiZSBzcGVjaWZpZWQgaWYgYGZ1bmMubGVuZ3RoYFxuICAgICAqIGlzIG5vdCBzdWZmaWNpZW50LlxuICAgICAqXG4gICAgICogVGhlIGBfLmN1cnJ5LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWMgYnVpbGRzLFxuICAgICAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBjdXJyaWVkIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGN1cnJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHk9ZnVuYy5sZW5ndGhdIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjdXJyaWVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYWJjID0gZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAqICAgcmV0dXJuIFthLCBiLCBjXTtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIGN1cnJpZWQgPSBfLmN1cnJ5KGFiYyk7XG4gICAgICpcbiAgICAgKiBjdXJyaWVkKDEpKDIpKDMpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogY3VycmllZCgxLCAyKSgzKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIGN1cnJpZWQoMSwgMiwgMyk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiAvLyBDdXJyaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICAgICAqIGN1cnJpZWQoMSkoXywgMykoMik7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3VycnkoZnVuYywgYXJpdHksIGd1YXJkKSB7XG4gICAgICBhcml0eSA9IGd1YXJkID8gdW5kZWZpbmVkIDogYXJpdHk7XG4gICAgICB2YXIgcmVzdWx0ID0gY3JlYXRlV3JhcChmdW5jLCBXUkFQX0NVUlJZX0ZMQUcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhcml0eSk7XG4gICAgICByZXN1bHQucGxhY2Vob2xkZXIgPSBjdXJyeS5wbGFjZWhvbGRlcjtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5jdXJyeWAgZXhjZXB0IHRoYXQgYXJndW1lbnRzIGFyZSBhcHBsaWVkIHRvIGBmdW5jYFxuICAgICAqIGluIHRoZSBtYW5uZXIgb2YgYF8ucGFydGlhbFJpZ2h0YCBpbnN0ZWFkIG9mIGBfLnBhcnRpYWxgLlxuICAgICAqXG4gICAgICogVGhlIGBfLmN1cnJ5UmlnaHQucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpY1xuICAgICAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcHJvdmlkZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIGN1cnJpZWQgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eT1mdW5jLmxlbmd0aF0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGN1cnJpZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhYmMgPSBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICogICByZXR1cm4gW2EsIGIsIGNdO1xuICAgICAqIH07XG4gICAgICpcbiAgICAgKiB2YXIgY3VycmllZCA9IF8uY3VycnlSaWdodChhYmMpO1xuICAgICAqXG4gICAgICogY3VycmllZCgzKSgyKSgxKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIGN1cnJpZWQoMiwgMykoMSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBjdXJyaWVkKDEsIDIsIDMpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogLy8gQ3VycmllZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgKiBjdXJyaWVkKDMpKDEsIF8pKDIpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGN1cnJ5UmlnaHQoZnVuYywgYXJpdHksIGd1YXJkKSB7XG4gICAgICBhcml0eSA9IGd1YXJkID8gdW5kZWZpbmVkIDogYXJpdHk7XG4gICAgICB2YXIgcmVzdWx0ID0gY3JlYXRlV3JhcChmdW5jLCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhcml0eSk7XG4gICAgICByZXN1bHQucGxhY2Vob2xkZXIgPSBjdXJyeVJpZ2h0LnBsYWNlaG9sZGVyO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZGVib3VuY2VkIGZ1bmN0aW9uIHRoYXQgZGVsYXlzIGludm9raW5nIGBmdW5jYCB1bnRpbCBhZnRlciBgd2FpdGBcbiAgICAgKiBtaWxsaXNlY29uZHMgaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIGRlYm91bmNlZCBmdW5jdGlvbiB3YXNcbiAgICAgKiBpbnZva2VkLiBUaGUgZGVib3VuY2VkIGZ1bmN0aW9uIGNvbWVzIHdpdGggYSBgY2FuY2VsYCBtZXRob2QgdG8gY2FuY2VsXG4gICAgICogZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG8gaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uXG4gICAgICogUHJvdmlkZSBgb3B0aW9uc2AgdG8gaW5kaWNhdGUgd2hldGhlciBgZnVuY2Agc2hvdWxkIGJlIGludm9rZWQgb24gdGhlXG4gICAgICogbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYHdhaXRgIHRpbWVvdXQuIFRoZSBgZnVuY2AgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnRcbiAgICAgKiBjYWxscyB0byB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYFxuICAgICAqIGludm9jYXRpb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSWYgYGxlYWRpbmdgIGFuZCBgdHJhaWxpbmdgIG9wdGlvbnMgYXJlIGB0cnVlYCwgYGZ1bmNgIGlzXG4gICAgICogaW52b2tlZCBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb25cbiAgICAgKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gICAgICpcbiAgICAgKiBJZiBgd2FpdGAgaXMgYDBgIGFuZCBgbGVhZGluZ2AgaXMgYGZhbHNlYCwgYGZ1bmNgIGludm9jYXRpb24gaXMgZGVmZXJyZWRcbiAgICAgKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gICAgICpcbiAgICAgKiBTZWUgW0RhdmlkIENvcmJhY2hvJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9kZWJvdW5jaW5nLXRocm90dGxpbmctZXhwbGFpbmVkLWV4YW1wbGVzLylcbiAgICAgKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLmRlYm91bmNlYCBhbmQgYF8udGhyb3R0bGVgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVib3VuY2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3YWl0PTBdIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV1cbiAgICAgKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhXYWl0XVxuICAgICAqICBUaGUgbWF4aW11bSB0aW1lIGBmdW5jYCBpcyBhbGxvd2VkIHRvIGJlIGRlbGF5ZWQgYmVmb3JlIGl0J3MgaW52b2tlZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWlsaW5nPXRydWVdXG4gICAgICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVib3VuY2VkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBBdm9pZCBjb3N0bHkgY2FsY3VsYXRpb25zIHdoaWxlIHRoZSB3aW5kb3cgc2l6ZSBpcyBpbiBmbHV4LlxuICAgICAqIGpRdWVyeSh3aW5kb3cpLm9uKCdyZXNpemUnLCBfLmRlYm91bmNlKGNhbGN1bGF0ZUxheW91dCwgMTUwKSk7XG4gICAgICpcbiAgICAgKiAvLyBJbnZva2UgYHNlbmRNYWlsYCB3aGVuIGNsaWNrZWQsIGRlYm91bmNpbmcgc3Vic2VxdWVudCBjYWxscy5cbiAgICAgKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgXy5kZWJvdW5jZShzZW5kTWFpbCwgMzAwLCB7XG4gICAgICogICAnbGVhZGluZyc6IHRydWUsXG4gICAgICogICAndHJhaWxpbmcnOiBmYWxzZVxuICAgICAqIH0pKTtcbiAgICAgKlxuICAgICAqIC8vIEVuc3VyZSBgYmF0Y2hMb2dgIGlzIGludm9rZWQgb25jZSBhZnRlciAxIHNlY29uZCBvZiBkZWJvdW5jZWQgY2FsbHMuXG4gICAgICogdmFyIGRlYm91bmNlZCA9IF8uZGVib3VuY2UoYmF0Y2hMb2csIDI1MCwgeyAnbWF4V2FpdCc6IDEwMDAgfSk7XG4gICAgICogdmFyIHNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZSgnL3N0cmVhbScpO1xuICAgICAqIGpRdWVyeShzb3VyY2UpLm9uKCdtZXNzYWdlJywgZGVib3VuY2VkKTtcbiAgICAgKlxuICAgICAqIC8vIENhbmNlbCB0aGUgdHJhaWxpbmcgZGVib3VuY2VkIGludm9jYXRpb24uXG4gICAgICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgZGVib3VuY2VkLmNhbmNlbCk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICAgICAgdmFyIGxhc3RBcmdzLFxuICAgICAgICAgIGxhc3RUaGlzLFxuICAgICAgICAgIG1heFdhaXQsXG4gICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgIHRpbWVySWQsXG4gICAgICAgICAgbGFzdENhbGxUaW1lLFxuICAgICAgICAgIGxhc3RJbnZva2VUaW1lID0gMCxcbiAgICAgICAgICBsZWFkaW5nID0gZmFsc2UsXG4gICAgICAgICAgbWF4aW5nID0gZmFsc2UsXG4gICAgICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICB3YWl0ID0gdG9OdW1iZXIod2FpdCkgfHwgMDtcbiAgICAgIGlmIChpc09iamVjdChvcHRpb25zKSkge1xuICAgICAgICBsZWFkaW5nID0gISFvcHRpb25zLmxlYWRpbmc7XG4gICAgICAgIG1heGluZyA9ICdtYXhXYWl0JyBpbiBvcHRpb25zO1xuICAgICAgICBtYXhXYWl0ID0gbWF4aW5nID8gbmF0aXZlTWF4KHRvTnVtYmVyKG9wdGlvbnMubWF4V2FpdCkgfHwgMCwgd2FpdCkgOiBtYXhXYWl0O1xuICAgICAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBpbnZva2VGdW5jKHRpbWUpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgICAgIHRoaXNBcmcgPSBsYXN0VGhpcztcblxuICAgICAgICBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICAgICAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGxlYWRpbmdFZGdlKHRpbWUpIHtcbiAgICAgICAgLy8gUmVzZXQgYW55IGBtYXhXYWl0YCB0aW1lci5cbiAgICAgICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgICAgICAvLyBTdGFydCB0aGUgdGltZXIgZm9yIHRoZSB0cmFpbGluZyBlZGdlLlxuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS5cbiAgICAgICAgcmV0dXJuIGxlYWRpbmcgPyBpbnZva2VGdW5jKHRpbWUpIDogcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICAgICAgdmFyIHRpbWVTaW5jZUxhc3RDYWxsID0gdGltZSAtIGxhc3RDYWxsVGltZSxcbiAgICAgICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWUsXG4gICAgICAgICAgICB0aW1lV2FpdGluZyA9IHdhaXQgLSB0aW1lU2luY2VMYXN0Q2FsbDtcblxuICAgICAgICByZXR1cm4gbWF4aW5nXG4gICAgICAgICAgPyBuYXRpdmVNaW4odGltZVdhaXRpbmcsIG1heFdhaXQgLSB0aW1lU2luY2VMYXN0SW52b2tlKVxuICAgICAgICAgIDogdGltZVdhaXRpbmc7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNob3VsZEludm9rZSh0aW1lKSB7XG4gICAgICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lO1xuXG4gICAgICAgIC8vIEVpdGhlciB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsLCBhY3Rpdml0eSBoYXMgc3RvcHBlZCBhbmQgd2UncmUgYXQgdGhlXG4gICAgICAgIC8vIHRyYWlsaW5nIGVkZ2UsIHRoZSBzeXN0ZW0gdGltZSBoYXMgZ29uZSBiYWNrd2FyZHMgYW5kIHdlJ3JlIHRyZWF0aW5nXG4gICAgICAgIC8vIGl0IGFzIHRoZSB0cmFpbGluZyBlZGdlLCBvciB3ZSd2ZSBoaXQgdGhlIGBtYXhXYWl0YCBsaW1pdC5cbiAgICAgICAgcmV0dXJuIChsYXN0Q2FsbFRpbWUgPT09IHVuZGVmaW5lZCB8fCAodGltZVNpbmNlTGFzdENhbGwgPj0gd2FpdCkgfHxcbiAgICAgICAgICAodGltZVNpbmNlTGFzdENhbGwgPCAwKSB8fCAobWF4aW5nICYmIHRpbWVTaW5jZUxhc3RJbnZva2UgPj0gbWF4V2FpdCkpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB0aW1lckV4cGlyZWQoKSB7XG4gICAgICAgIHZhciB0aW1lID0gbm93KCk7XG4gICAgICAgIGlmIChzaG91bGRJbnZva2UodGltZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJhaWxpbmdFZGdlKHRpbWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlc3RhcnQgdGhlIHRpbWVyLlxuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHJlbWFpbmluZ1dhaXQodGltZSkpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB0cmFpbGluZ0VkZ2UodGltZSkge1xuICAgICAgICB0aW1lcklkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIE9ubHkgaW52b2tlIGlmIHdlIGhhdmUgYGxhc3RBcmdzYCB3aGljaCBtZWFucyBgZnVuY2AgaGFzIGJlZW5cbiAgICAgICAgLy8gZGVib3VuY2VkIGF0IGxlYXN0IG9uY2UuXG4gICAgICAgIGlmICh0cmFpbGluZyAmJiBsYXN0QXJncykge1xuICAgICAgICAgIHJldHVybiBpbnZva2VGdW5jKHRpbWUpO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICAgICAgaWYgKHRpbWVySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0SW52b2tlVGltZSA9IDA7XG4gICAgICAgIGxhc3RBcmdzID0gbGFzdENhbGxUaW1lID0gbGFzdFRoaXMgPSB0aW1lcklkID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRpbWVySWQgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IHRyYWlsaW5nRWRnZShub3coKSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGRlYm91bmNlZCgpIHtcbiAgICAgICAgdmFyIHRpbWUgPSBub3coKSxcbiAgICAgICAgICAgIGlzSW52b2tpbmcgPSBzaG91bGRJbnZva2UodGltZSk7XG5cbiAgICAgICAgbGFzdEFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIGxhc3RUaGlzID0gdGhpcztcbiAgICAgICAgbGFzdENhbGxUaW1lID0gdGltZTtcblxuICAgICAgICBpZiAoaXNJbnZva2luZykge1xuICAgICAgICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBsZWFkaW5nRWRnZShsYXN0Q2FsbFRpbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobWF4aW5nKSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgaW52b2NhdGlvbnMgaW4gYSB0aWdodCBsb29wLlxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAgICAgICAgIHJldHVybiBpbnZva2VGdW5jKGxhc3RDYWxsVGltZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBkZWJvdW5jZWQuY2FuY2VsID0gY2FuY2VsO1xuICAgICAgZGVib3VuY2VkLmZsdXNoID0gZmx1c2g7XG4gICAgICByZXR1cm4gZGVib3VuY2VkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmVycyBpbnZva2luZyB0aGUgYGZ1bmNgIHVudGlsIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzIGNsZWFyZWQuIEFueVxuICAgICAqIGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCdzIGludm9rZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWZlci5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lciBpZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWZlcihmdW5jdGlvbih0ZXh0KSB7XG4gICAgICogICBjb25zb2xlLmxvZyh0ZXh0KTtcbiAgICAgKiB9LCAnZGVmZXJyZWQnKTtcbiAgICAgKiAvLyA9PiBMb2dzICdkZWZlcnJlZCcgYWZ0ZXIgb25lIG1pbGxpc2Vjb25kLlxuICAgICAqL1xuICAgIHZhciBkZWZlciA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIGFyZ3MpIHtcbiAgICAgIHJldHVybiBiYXNlRGVsYXkoZnVuYywgMSwgYXJncyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VzIGBmdW5jYCBhZnRlciBgd2FpdGAgbWlsbGlzZWNvbmRzLiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlXG4gICAgICogcHJvdmlkZWQgdG8gYGZ1bmNgIHdoZW4gaXQncyBpbnZva2VkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVsYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdhaXQgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkgaW52b2NhdGlvbi5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lciBpZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWxheShmdW5jdGlvbih0ZXh0KSB7XG4gICAgICogICBjb25zb2xlLmxvZyh0ZXh0KTtcbiAgICAgKiB9LCAxMDAwLCAnbGF0ZXInKTtcbiAgICAgKiAvLyA9PiBMb2dzICdsYXRlcicgYWZ0ZXIgb25lIHNlY29uZC5cbiAgICAgKi9cbiAgICB2YXIgZGVsYXkgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCB3YWl0LCBhcmdzKSB7XG4gICAgICByZXR1cm4gYmFzZURlbGF5KGZ1bmMsIHRvTnVtYmVyKHdhaXQpIHx8IDAsIGFyZ3MpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBhcmd1bWVudHMgcmV2ZXJzZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBmbGlwIGFyZ3VtZW50cyBmb3IuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmxpcHBlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZsaXBwZWQgPSBfLmZsaXAoZnVuY3Rpb24oKSB7XG4gICAgICogICByZXR1cm4gXy50b0FycmF5KGFyZ3VtZW50cyk7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBmbGlwcGVkKCdhJywgJ2InLCAnYycsICdkJyk7XG4gICAgICogLy8gPT4gWydkJywgJ2MnLCAnYicsICdhJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGlwKGZ1bmMpIHtcbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfRkxJUF9GTEFHKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICAgICAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAgICAgKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAgICAgKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICAgICAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICAgICAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICAgICAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gICAgICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAgICAgKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gICAgICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICAgICAqXG4gICAgICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gICAgICogdmFsdWVzKG9iamVjdCk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiB2YWx1ZXMob3RoZXIpO1xuICAgICAqIC8vID0+IFszLCA0XVxuICAgICAqXG4gICAgICogb2JqZWN0LmEgPSAyO1xuICAgICAqIHZhbHVlcyhvYmplY3QpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqXG4gICAgICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gICAgICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICAgICAqIHZhbHVlcyhvYmplY3QpO1xuICAgICAqIC8vID0+IFsnYScsICdiJ11cbiAgICAgKlxuICAgICAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gICAgICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICAgIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgICAgIHJldHVybiBtZW1vaXplZDtcbiAgICB9XG5cbiAgICAvLyBFeHBvc2UgYE1hcENhY2hlYC5cbiAgICBtZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBuZWdhdGVzIHRoZSByZXN1bHQgb2YgdGhlIHByZWRpY2F0ZSBgZnVuY2AuIFRoZVxuICAgICAqIGBmdW5jYCBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBhbmQgYXJndW1lbnRzIG9mIHRoZVxuICAgICAqIGNyZWF0ZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIHByZWRpY2F0ZSB0byBuZWdhdGUuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbmVnYXRlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gaXNFdmVuKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICUgMiA9PSAwO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8uZmlsdGVyKFsxLCAyLCAzLCA0LCA1LCA2XSwgXy5uZWdhdGUoaXNFdmVuKSk7XG4gICAgICogLy8gPT4gWzEsIDMsIDVdXG4gICAgICovXG4gICAgZnVuY3Rpb24gbmVnYXRlKHByZWRpY2F0ZSkge1xuICAgICAgaWYgKHR5cGVvZiBwcmVkaWNhdGUgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgY2FzZSAwOiByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMpO1xuICAgICAgICAgIGNhc2UgMTogcmV0dXJuICFwcmVkaWNhdGUuY2FsbCh0aGlzLCBhcmdzWzBdKTtcbiAgICAgICAgICBjYXNlIDI6IHJldHVybiAhcHJlZGljYXRlLmNhbGwodGhpcywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpcyByZXN0cmljdGVkIHRvIGludm9raW5nIGBmdW5jYCBvbmNlLiBSZXBlYXQgY2FsbHNcbiAgICAgKiB0byB0aGUgZnVuY3Rpb24gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgaW52b2NhdGlvbi4gVGhlIGBmdW5jYCBpc1xuICAgICAqIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgYW5kIGFyZ3VtZW50cyBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJlc3RyaWN0ZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBpbml0aWFsaXplID0gXy5vbmNlKGNyZWF0ZUFwcGxpY2F0aW9uKTtcbiAgICAgKiBpbml0aWFsaXplKCk7XG4gICAgICogaW5pdGlhbGl6ZSgpO1xuICAgICAqIC8vID0+IGBjcmVhdGVBcHBsaWNhdGlvbmAgaXMgaW52b2tlZCBvbmNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gb25jZShmdW5jKSB7XG4gICAgICByZXR1cm4gYmVmb3JlKDIsIGZ1bmMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50cyB0cmFuc2Zvcm1lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFt0cmFuc2Zvcm1zPVtfLmlkZW50aXR5XV1cbiAgICAgKiAgVGhlIGFyZ3VtZW50IHRyYW5zZm9ybXMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGRvdWJsZWQobikge1xuICAgICAqICAgcmV0dXJuIG4gKiAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gICAgICogICByZXR1cm4gbiAqIG47XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm92ZXJBcmdzKGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgKiAgIHJldHVybiBbeCwgeV07XG4gICAgICogfSwgW3NxdWFyZSwgZG91YmxlZF0pO1xuICAgICAqXG4gICAgICogZnVuYyg5LCAzKTtcbiAgICAgKiAvLyA9PiBbODEsIDZdXG4gICAgICpcbiAgICAgKiBmdW5jKDEwLCA1KTtcbiAgICAgKiAvLyA9PiBbMTAwLCAxMF1cbiAgICAgKi9cbiAgICB2YXIgb3ZlckFyZ3MgPSBjYXN0UmVzdChmdW5jdGlvbihmdW5jLCB0cmFuc2Zvcm1zKSB7XG4gICAgICB0cmFuc2Zvcm1zID0gKHRyYW5zZm9ybXMubGVuZ3RoID09IDEgJiYgaXNBcnJheSh0cmFuc2Zvcm1zWzBdKSlcbiAgICAgICAgPyBhcnJheU1hcCh0cmFuc2Zvcm1zWzBdLCBiYXNlVW5hcnkoZ2V0SXRlcmF0ZWUoKSkpXG4gICAgICAgIDogYXJyYXlNYXAoYmFzZUZsYXR0ZW4odHJhbnNmb3JtcywgMSksIGJhc2VVbmFyeShnZXRJdGVyYXRlZSgpKSk7XG5cbiAgICAgIHZhciBmdW5jc0xlbmd0aCA9IHRyYW5zZm9ybXMubGVuZ3RoO1xuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNaW4oYXJncy5sZW5ndGgsIGZ1bmNzTGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgIGFyZ3NbaW5kZXhdID0gdHJhbnNmb3Jtc1tpbmRleF0uY2FsbCh0aGlzLCBhcmdzW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZVxuICAgICAqIGFyZ3VtZW50cyBpdCByZWNlaXZlcy4gVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5iaW5kYCBleGNlcHQgaXQgZG9lcyAqKm5vdCoqXG4gICAgICogYWx0ZXIgdGhlIGB0aGlzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogVGhlIGBfLnBhcnRpYWwucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpY1xuICAgICAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIHBhcnRpYWxseVxuICAgICAqIGFwcGxpZWQgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMi4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5IGFyZ3VtZW50cyB0by5cbiAgICAgKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBwYXJ0aWFsbHkgYXBwbGllZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZ3JlZXQoZ3JlZXRpbmcsIG5hbWUpIHtcbiAgICAgKiAgIHJldHVybiBncmVldGluZyArICcgJyArIG5hbWU7XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIHNheUhlbGxvVG8gPSBfLnBhcnRpYWwoZ3JlZXQsICdoZWxsbycpO1xuICAgICAqIHNheUhlbGxvVG8oJ2ZyZWQnKTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gZnJlZCdcbiAgICAgKlxuICAgICAqIC8vIFBhcnRpYWxseSBhcHBsaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICAgICAqIHZhciBncmVldEZyZWQgPSBfLnBhcnRpYWwoZ3JlZXQsIF8sICdmcmVkJyk7XG4gICAgICogZ3JlZXRGcmVkKCdoaScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkJ1xuICAgICAqL1xuICAgIHZhciBwYXJ0aWFsID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgcGFydGlhbHMpIHtcbiAgICAgIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIGdldEhvbGRlcihwYXJ0aWFsKSk7XG4gICAgICByZXR1cm4gY3JlYXRlV3JhcChmdW5jLCBXUkFQX1BBUlRJQUxfRkxBRywgdW5kZWZpbmVkLCBwYXJ0aWFscywgaG9sZGVycyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnBhcnRpYWxgIGV4Y2VwdCB0aGF0IHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50c1xuICAgICAqIGFyZSBhcHBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICAgICAqXG4gICAgICogVGhlIGBfLnBhcnRpYWxSaWdodC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gICAgICogYnVpbGRzLCBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgcGFydGlhbGx5XG4gICAgICogYXBwbGllZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkgYXJndW1lbnRzIHRvLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhcnRpYWxseSBhcHBsaWVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBncmVldChncmVldGluZywgbmFtZSkge1xuICAgICAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgbmFtZTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgZ3JlZXRGcmVkID0gXy5wYXJ0aWFsUmlnaHQoZ3JlZXQsICdmcmVkJyk7XG4gICAgICogZ3JlZXRGcmVkKCdoaScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkJ1xuICAgICAqXG4gICAgICogLy8gUGFydGlhbGx5IGFwcGxpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gICAgICogdmFyIHNheUhlbGxvVG8gPSBfLnBhcnRpYWxSaWdodChncmVldCwgJ2hlbGxvJywgXyk7XG4gICAgICogc2F5SGVsbG9UbygnZnJlZCcpO1xuICAgICAqIC8vID0+ICdoZWxsbyBmcmVkJ1xuICAgICAqL1xuICAgIHZhciBwYXJ0aWFsUmlnaHQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCBwYXJ0aWFscykge1xuICAgICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKHBhcnRpYWxSaWdodCkpO1xuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcsIHVuZGVmaW5lZCwgcGFydGlhbHMsIGhvbGRlcnMpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBhcmd1bWVudHMgYXJyYW5nZWQgYWNjb3JkaW5nXG4gICAgICogdG8gdGhlIHNwZWNpZmllZCBgaW5kZXhlc2Agd2hlcmUgdGhlIGFyZ3VtZW50IHZhbHVlIGF0IHRoZSBmaXJzdCBpbmRleCBpc1xuICAgICAqIHByb3ZpZGVkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCwgdGhlIGFyZ3VtZW50IHZhbHVlIGF0IHRoZSBzZWNvbmQgaW5kZXggaXNcbiAgICAgKiBwcm92aWRlZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LCBhbmQgc28gb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZWFycmFuZ2UgYXJndW1lbnRzIGZvci5cbiAgICAgKiBAcGFyYW0gey4uLihudW1iZXJ8bnVtYmVyW10pfSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcmd1bWVudCBpbmRleGVzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgcmVhcmdlZCA9IF8ucmVhcmcoZnVuY3Rpb24oYSwgYiwgYykge1xuICAgICAqICAgcmV0dXJuIFthLCBiLCBjXTtcbiAgICAgKiB9LCBbMiwgMCwgMV0pO1xuICAgICAqXG4gICAgICogcmVhcmdlZCgnYicsICdjJywgJ2EnKVxuICAgICAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxuICAgICAqL1xuICAgIHZhciByZWFyZyA9IGZsYXRSZXN0KGZ1bmN0aW9uKGZ1bmMsIGluZGV4ZXMpIHtcbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfUkVBUkdfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaW5kZXhlcyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGVcbiAgICAgKiBjcmVhdGVkIGZ1bmN0aW9uIGFuZCBhcmd1bWVudHMgZnJvbSBgc3RhcnRgIGFuZCBiZXlvbmQgcHJvdmlkZWQgYXNcbiAgICAgKiBhbiBhcnJheS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGVcbiAgICAgKiBbcmVzdCBwYXJhbWV0ZXJdKGh0dHBzOi8vbWRuLmlvL3Jlc3RfcGFyYW1ldGVycykuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHNheSA9IF8ucmVzdChmdW5jdGlvbih3aGF0LCBuYW1lcykge1xuICAgICAqICAgcmV0dXJuIHdoYXQgKyAnICcgKyBfLmluaXRpYWwobmFtZXMpLmpvaW4oJywgJykgK1xuICAgICAqICAgICAoXy5zaXplKG5hbWVzKSA+IDEgPyAnLCAmICcgOiAnJykgKyBfLmxhc3QobmFtZXMpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogc2F5KCdoZWxsbycsICdmcmVkJywgJ2Jhcm5leScsICdwZWJibGVzJyk7XG4gICAgICogLy8gPT4gJ2hlbGxvIGZyZWQsIGJhcm5leSwgJiBwZWJibGVzJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc3QoZnVuYywgc3RhcnQpIHtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHN0YXJ0ID0gc3RhcnQgPT09IHVuZGVmaW5lZCA/IHN0YXJ0IDogdG9JbnRlZ2VyKHN0YXJ0KTtcbiAgICAgIHJldHVybiBiYXNlUmVzdChmdW5jLCBzdGFydCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlXG4gICAgICogY3JlYXRlIGZ1bmN0aW9uIGFuZCBhbiBhcnJheSBvZiBhcmd1bWVudHMgbXVjaCBsaWtlXG4gICAgICogW2BGdW5jdGlvbiNhcHBseWBdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZVxuICAgICAqIFtzcHJlYWQgb3BlcmF0b3JdKGh0dHBzOi8vbWRuLmlvL3NwcmVhZF9vcGVyYXRvcikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4yLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBzcHJlYWQgYXJndW1lbnRzIG92ZXIuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHNwcmVhZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHNheSA9IF8uc3ByZWFkKGZ1bmN0aW9uKHdobywgd2hhdCkge1xuICAgICAqICAgcmV0dXJuIHdobyArICcgc2F5cyAnICsgd2hhdDtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIHNheShbJ2ZyZWQnLCAnaGVsbG8nXSk7XG4gICAgICogLy8gPT4gJ2ZyZWQgc2F5cyBoZWxsbydcbiAgICAgKlxuICAgICAqIHZhciBudW1iZXJzID0gUHJvbWlzZS5hbGwoW1xuICAgICAqICAgUHJvbWlzZS5yZXNvbHZlKDQwKSxcbiAgICAgKiAgIFByb21pc2UucmVzb2x2ZSgzNilcbiAgICAgKiBdKTtcbiAgICAgKlxuICAgICAqIG51bWJlcnMudGhlbihfLnNwcmVhZChmdW5jdGlvbih4LCB5KSB7XG4gICAgICogICByZXR1cm4geCArIHk7XG4gICAgICogfSkpO1xuICAgICAqIC8vID0+IGEgUHJvbWlzZSBvZiA3NlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNwcmVhZChmdW5jLCBzdGFydCkge1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgc3RhcnQgPSBzdGFydCA9PSBudWxsID8gMCA6IG5hdGl2ZU1heCh0b0ludGVnZXIoc3RhcnQpLCAwKTtcbiAgICAgIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihhcmdzKSB7XG4gICAgICAgIHZhciBhcnJheSA9IGFyZ3Nbc3RhcnRdLFxuICAgICAgICAgICAgb3RoZXJBcmdzID0gY2FzdFNsaWNlKGFyZ3MsIDAsIHN0YXJ0KTtcblxuICAgICAgICBpZiAoYXJyYXkpIHtcbiAgICAgICAgICBhcnJheVB1c2gob3RoZXJBcmdzLCBhcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgdGhyb3R0bGVkIGZ1bmN0aW9uIHRoYXQgb25seSBpbnZva2VzIGBmdW5jYCBhdCBtb3N0IG9uY2UgcGVyXG4gICAgICogZXZlcnkgYHdhaXRgIG1pbGxpc2Vjb25kcy4gVGhlIHRocm90dGxlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGBcbiAgICAgKiBtZXRob2QgdG8gY2FuY2VsIGRlbGF5ZWQgYGZ1bmNgIGludm9jYXRpb25zIGFuZCBhIGBmbHVzaGAgbWV0aG9kIHRvXG4gICAgICogaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uIFByb3ZpZGUgYG9wdGlvbnNgIHRvIGluZGljYXRlIHdoZXRoZXIgYGZ1bmNgXG4gICAgICogc2hvdWxkIGJlIGludm9rZWQgb24gdGhlIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YFxuICAgICAqIHRpbWVvdXQuIFRoZSBgZnVuY2AgaXMgaW52b2tlZCB3aXRoIHRoZSBsYXN0IGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGVcbiAgICAgKiB0aHJvdHRsZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnQgY2FsbHMgdG8gdGhlIHRocm90dGxlZCBmdW5jdGlvbiByZXR1cm4gdGhlXG4gICAgICogcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYCBpbnZvY2F0aW9uLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIElmIGBsZWFkaW5nYCBhbmQgYHRyYWlsaW5nYCBvcHRpb25zIGFyZSBgdHJ1ZWAsIGBmdW5jYCBpc1xuICAgICAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uXG4gICAgICogaXMgaW52b2tlZCBtb3JlIHRoYW4gb25jZSBkdXJpbmcgdGhlIGB3YWl0YCB0aW1lb3V0LlxuICAgICAqXG4gICAgICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gICAgICogdW50aWwgdG8gdGhlIG5leHQgdGljaywgc2ltaWxhciB0byBgc2V0VGltZW91dGAgd2l0aCBhIHRpbWVvdXQgb2YgYDBgLlxuICAgICAqXG4gICAgICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gICAgICogZm9yIGRldGFpbHMgb3ZlciB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgXy50aHJvdHRsZWAgYW5kIGBfLmRlYm91bmNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHRocm90dGxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2FpdD0wXSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aHJvdHRsZSBpbnZvY2F0aW9ucyB0by5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9dHJ1ZV1cbiAgICAgKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAgICAgKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB0aHJvdHRsZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIEF2b2lkIGV4Y2Vzc2l2ZWx5IHVwZGF0aW5nIHRoZSBwb3NpdGlvbiB3aGlsZSBzY3JvbGxpbmcuXG4gICAgICogalF1ZXJ5KHdpbmRvdykub24oJ3Njcm9sbCcsIF8udGhyb3R0bGUodXBkYXRlUG9zaXRpb24sIDEwMCkpO1xuICAgICAqXG4gICAgICogLy8gSW52b2tlIGByZW5ld1Rva2VuYCB3aGVuIHRoZSBjbGljayBldmVudCBpcyBmaXJlZCwgYnV0IG5vdCBtb3JlIHRoYW4gb25jZSBldmVyeSA1IG1pbnV0ZXMuXG4gICAgICogdmFyIHRocm90dGxlZCA9IF8udGhyb3R0bGUocmVuZXdUb2tlbiwgMzAwMDAwLCB7ICd0cmFpbGluZyc6IGZhbHNlIH0pO1xuICAgICAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCB0aHJvdHRsZWQpO1xuICAgICAqXG4gICAgICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyB0aHJvdHRsZWQgaW52b2NhdGlvbi5cbiAgICAgKiBqUXVlcnkod2luZG93KS5vbigncG9wc3RhdGUnLCB0aHJvdHRsZWQuY2FuY2VsKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0aHJvdHRsZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gICAgICB2YXIgbGVhZGluZyA9IHRydWUsXG4gICAgICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICAgICAgbGVhZGluZyA9ICdsZWFkaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLmxlYWRpbmcgOiBsZWFkaW5nO1xuICAgICAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlYm91bmNlKGZ1bmMsIHdhaXQsIHtcbiAgICAgICAgJ2xlYWRpbmcnOiBsZWFkaW5nLFxuICAgICAgICAnbWF4V2FpdCc6IHdhaXQsXG4gICAgICAgICd0cmFpbGluZyc6IHRyYWlsaW5nXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHVwIHRvIG9uZSBhcmd1bWVudCwgaWdub3JpbmcgYW55XG4gICAgICogYWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWFwKFsnNicsICc4JywgJzEwJ10sIF8udW5hcnkocGFyc2VJbnQpKTtcbiAgICAgKiAvLyA9PiBbNiwgOCwgMTBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5hcnkoZnVuYykge1xuICAgICAgcmV0dXJuIGFyeShmdW5jLCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwcm92aWRlcyBgdmFsdWVgIHRvIGB3cmFwcGVyYCBhcyBpdHMgZmlyc3RcbiAgICAgKiBhcmd1bWVudC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBmdW5jdGlvbiBhcmUgYXBwZW5kZWRcbiAgICAgKiB0byB0aG9zZSBwcm92aWRlZCB0byB0aGUgYHdyYXBwZXJgLiBUaGUgd3JhcHBlciBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYFxuICAgICAqIGJpbmRpbmcgb2YgdGhlIGNyZWF0ZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFt3cmFwcGVyPWlkZW50aXR5XSBUaGUgd3JhcHBlciBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHAgPSBfLndyYXAoXy5lc2NhcGUsIGZ1bmN0aW9uKGZ1bmMsIHRleHQpIHtcbiAgICAgKiAgIHJldHVybiAnPHA+JyArIGZ1bmModGV4dCkgKyAnPC9wPic7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBwKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycpO1xuICAgICAqIC8vID0+ICc8cD5mcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXM8L3A+J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXAodmFsdWUsIHdyYXBwZXIpIHtcbiAgICAgIHJldHVybiBwYXJ0aWFsKGNhc3RGdW5jdGlvbih3cmFwcGVyKSwgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENhc3RzIGB2YWx1ZWAgYXMgYW4gYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jYXN0QXJyYXkoMSk7XG4gICAgICogLy8gPT4gWzFdXG4gICAgICpcbiAgICAgKiBfLmNhc3RBcnJheSh7ICdhJzogMSB9KTtcbiAgICAgKiAvLyA9PiBbeyAnYSc6IDEgfV1cbiAgICAgKlxuICAgICAqIF8uY2FzdEFycmF5KCdhYmMnKTtcbiAgICAgKiAvLyA9PiBbJ2FiYyddXG4gICAgICpcbiAgICAgKiBfLmNhc3RBcnJheShudWxsKTtcbiAgICAgKiAvLyA9PiBbbnVsbF1cbiAgICAgKlxuICAgICAqIF8uY2FzdEFycmF5KHVuZGVmaW5lZCk7XG4gICAgICogLy8gPT4gW3VuZGVmaW5lZF1cbiAgICAgKlxuICAgICAqIF8uY2FzdEFycmF5KCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyLCAzXTtcbiAgICAgKiBjb25zb2xlLmxvZyhfLmNhc3RBcnJheShhcnJheSkgPT09IGFycmF5KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FzdEFycmF5KCkge1xuICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgIHJldHVybiBpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2hhbGxvdyBjbG9uZSBvZiBgdmFsdWVgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlXG4gICAgICogW3N0cnVjdHVyZWQgY2xvbmUgYWxnb3JpdGhtXShodHRwczovL21kbi5pby9TdHJ1Y3R1cmVkX2Nsb25lX2FsZ29yaXRobSlcbiAgICAgKiBhbmQgc3VwcG9ydHMgY2xvbmluZyBhcnJheXMsIGFycmF5IGJ1ZmZlcnMsIGJvb2xlYW5zLCBkYXRlIG9iamVjdHMsIG1hcHMsXG4gICAgICogbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcywgc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkXG4gICAgICogYXJyYXlzLiBUaGUgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBgYXJndW1lbnRzYCBvYmplY3RzIGFyZSBjbG9uZWRcbiAgICAgKiBhcyBwbGFpbiBvYmplY3RzLiBBbiBlbXB0eSBvYmplY3QgaXMgcmV0dXJuZWQgZm9yIHVuY2xvbmVhYmxlIHZhbHVlcyBzdWNoXG4gICAgICogYXMgZXJyb3Igb2JqZWN0cywgZnVuY3Rpb25zLCBET00gbm9kZXMsIGFuZCBXZWFrTWFwcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAgICAgKiBAc2VlIF8uY2xvbmVEZWVwXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ2EnOiAxIH0sIHsgJ2InOiAyIH1dO1xuICAgICAqXG4gICAgICogdmFyIHNoYWxsb3cgPSBfLmNsb25lKG9iamVjdHMpO1xuICAgICAqIGNvbnNvbGUubG9nKHNoYWxsb3dbMF0gPT09IG9iamVjdHNbMF0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfU1lNQk9MU19GTEFHKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmNsb25lYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYCB3aGljaFxuICAgICAqIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgY2xvbmVkIHZhbHVlLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCxcbiAgICAgKiBjbG9uaW5nIGlzIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWQgd2l0aFxuICAgICAqIHVwIHRvIGZvdXIgYXJndW1lbnRzOyAodmFsdWUgWywgaW5kZXh8a2V5LCBvYmplY3QsIHN0YWNrXSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGNsb25lZCB2YWx1ZS5cbiAgICAgKiBAc2VlIF8uY2xvbmVEZWVwV2l0aFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKHZhbHVlKSB7XG4gICAgICogICBpZiAoXy5pc0VsZW1lbnQodmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiB2YWx1ZS5jbG9uZU5vZGUoZmFsc2UpO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBlbCA9IF8uY2xvbmVXaXRoKGRvY3VtZW50LmJvZHksIGN1c3RvbWl6ZXIpO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coZWwgPT09IGRvY3VtZW50LmJvZHkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICogY29uc29sZS5sb2coZWwubm9kZU5hbWUpO1xuICAgICAqIC8vID0+ICdCT0RZJ1xuICAgICAqIGNvbnNvbGUubG9nKGVsLmNoaWxkTm9kZXMubGVuZ3RoKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoKHZhbHVlLCBjdXN0b21pemVyKSB7XG4gICAgICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9TWU1CT0xTX0ZMQUcsIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVgIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IGNsb25lcyBgdmFsdWVgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZWN1cnNpdmVseSBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZGVlcCBjbG9uZWQgdmFsdWUuXG4gICAgICogQHNlZSBfLmNsb25lXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ2EnOiAxIH0sIHsgJ2InOiAyIH1dO1xuICAgICAqXG4gICAgICogdmFyIGRlZXAgPSBfLmNsb25lRGVlcChvYmplY3RzKTtcbiAgICAgKiBjb25zb2xlLmxvZyhkZWVwWzBdID09PSBvYmplY3RzWzBdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lRGVlcCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmNsb25lV2l0aGAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgY2xvbmVzIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJlY3Vyc2l2ZWx5IGNsb25lLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGRlZXAgY2xvbmVkIHZhbHVlLlxuICAgICAqIEBzZWUgXy5jbG9uZVdpdGhcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gY3VzdG9taXplcih2YWx1ZSkge1xuICAgICAqICAgaWYgKF8uaXNFbGVtZW50KHZhbHVlKSkge1xuICAgICAqICAgICByZXR1cm4gdmFsdWUuY2xvbmVOb2RlKHRydWUpO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBlbCA9IF8uY2xvbmVEZWVwV2l0aChkb2N1bWVudC5ib2R5LCBjdXN0b21pemVyKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGVsID09PSBkb2N1bWVudC5ib2R5KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqIGNvbnNvbGUubG9nKGVsLm5vZGVOYW1lKTtcbiAgICAgKiAvLyA9PiAnQk9EWSdcbiAgICAgKiBjb25zb2xlLmxvZyhlbC5jaGlsZE5vZGVzLmxlbmd0aCk7XG4gICAgICogLy8gPT4gMjBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZURlZXBXaXRoKHZhbHVlLCBjdXN0b21pemVyKSB7XG4gICAgICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcsIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgb2JqZWN0YCBjb25mb3JtcyB0byBgc291cmNlYCBieSBpbnZva2luZyB0aGUgcHJlZGljYXRlXG4gICAgICogcHJvcGVydGllcyBvZiBgc291cmNlYCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIGBfLmNvbmZvcm1zYCB3aGVuIGBzb3VyY2VgIGlzXG4gICAgICogcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xNC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgcHJlZGljYXRlcyB0byBjb25mb3JtIHRvLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBjb25mb3JtcywgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICAgICAqXG4gICAgICogXy5jb25mb3Jtc1RvKG9iamVjdCwgeyAnYic6IGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gPiAxOyB9IH0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uY29uZm9ybXNUbyhvYmplY3QsIHsgJ2InOiBmdW5jdGlvbihuKSB7IHJldHVybiBuID4gMjsgfSB9KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmZvcm1zVG8ob2JqZWN0LCBzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2UgPT0gbnVsbCB8fCBiYXNlQ29uZm9ybXNUbyhvYmplY3QsIHNvdXJjZSwga2V5cyhzb3VyY2UpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyBhXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICAgICAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gICAgICpcbiAgICAgKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmVxKCdhJywgJ2EnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmVxKE5hTiwgTmFOKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gYG90aGVyYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjkuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBgb3RoZXJgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQHNlZSBfLmx0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZ3QoMywgMSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5ndCgzLCAzKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5ndCgxLCAzKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBndCA9IGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oYmFzZUd0KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgb3RoZXJgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuOS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvXG4gICAgICogIGBvdGhlcmAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAc2VlIF8ubHRlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZ3RlKDMsIDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZ3RlKDMsIDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZ3RlKDEsIDMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGd0ZSA9IGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPj0gb3RoZXI7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMgOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KCdhYmMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KF8ubm9vcCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheUJ1ZmZlcmAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMy4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5QnVmZmVyKG5ldyBBcnJheUJ1ZmZlcigyKSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5QnVmZmVyKG5ldyBBcnJheSgyKSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNBcnJheUJ1ZmZlciA9IG5vZGVJc0FycmF5QnVmZmVyID8gYmFzZVVuYXJ5KG5vZGVJc0FycmF5QnVmZmVyKSA6IGJhc2VJc0FycmF5QnVmZmVyO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICAgICAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAgICAgKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXG4gICAgICogaXMgYW4gb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYm9vbGVhbiBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJvb2xlYW4sIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0Jvb2xlYW4oZmFsc2UpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNCb29sZWFuKG51bGwpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IGZhbHNlIHx8XG4gICAgICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGJvb2xUYWcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMy4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBEYXRlYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZGF0ZSBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0RhdGUobmV3IERhdGUpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNEYXRlKCdNb24gQXByaWwgMjMgMjAxMicpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzRGF0ZSA9IG5vZGVJc0RhdGUgPyBiYXNlVW5hcnkobm9kZUlzRGF0ZSkgOiBiYXNlSXNEYXRlO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgRE9NIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgRE9NIGVsZW1lbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0VsZW1lbnQoZG9jdW1lbnQuYm9keSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0VsZW1lbnQoJzxib2R5PicpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNFbGVtZW50KHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiB2YWx1ZS5ub2RlVHlwZSA9PT0gMSAmJiAhaXNQbGFpbk9iamVjdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gZW1wdHkgb2JqZWN0LCBjb2xsZWN0aW9uLCBtYXAsIG9yIHNldC5cbiAgICAgKlxuICAgICAqIE9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIG5vIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZFxuICAgICAqIHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBBcnJheS1saWtlIHZhbHVlcyBzdWNoIGFzIGBhcmd1bWVudHNgIG9iamVjdHMsIGFycmF5cywgYnVmZmVycywgc3RyaW5ncywgb3JcbiAgICAgKiBqUXVlcnktbGlrZSBjb2xsZWN0aW9ucyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgbGVuZ3RoYCBvZiBgMGAuXG4gICAgICogU2ltaWxhcmx5LCBtYXBzIGFuZCBzZXRzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBzaXplYCBvZiBgMGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGVtcHR5LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNFbXB0eShudWxsKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRW1wdHkodHJ1ZSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0VtcHR5KDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNFbXB0eShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzRW1wdHkoeyAnYSc6IDEgfSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgICAgICAoaXNBcnJheSh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZS5zcGxpY2UgPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICAgICAgaXNCdWZmZXIodmFsdWUpIHx8IGlzVHlwZWRBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gIXZhbHVlLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpO1xuICAgICAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNldFRhZykge1xuICAgICAgICByZXR1cm4gIXZhbHVlLnNpemU7XG4gICAgICB9XG4gICAgICBpZiAoaXNQcm90b3R5cGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiAhYmFzZUtleXModmFsdWUpLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZVxuICAgICAqIGVxdWl2YWxlbnQuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2Qgc3VwcG9ydHMgY29tcGFyaW5nIGFycmF5cywgYXJyYXkgYnVmZmVycywgYm9vbGVhbnMsXG4gICAgICogZGF0ZSBvYmplY3RzLCBlcnJvciBvYmplY3RzLCBtYXBzLCBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLFxuICAgICAqIHNldHMsIHN0cmluZ3MsIHN5bWJvbHMsIGFuZCB0eXBlZCBhcnJheXMuIGBPYmplY3RgIG9iamVjdHMgYXJlIGNvbXBhcmVkXG4gICAgICogYnkgdGhlaXIgb3duLCBub3QgaW5oZXJpdGVkLCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuIEZ1bmN0aW9ucyBhbmQgRE9NXG4gICAgICogbm9kZXMgYXJlIGNvbXBhcmVkIGJ5IHN0cmljdCBlcXVhbGl0eSwgaS5lLiBgPT09YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICAgICAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gICAgICpcbiAgICAgKiBfLmlzRXF1YWwob2JqZWN0LCBvdGhlcik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogb2JqZWN0ID09PSBvdGhlcjtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRXF1YWwodmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzRXF1YWxgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBjb21wYXJlIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAsIGNvbXBhcmlzb25zXG4gICAgICogYXJlIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWQgd2l0aCB1cCB0b1xuICAgICAqIHNpeCBhcmd1bWVudHM6IChvYmpWYWx1ZSwgb3RoVmFsdWUgWywgaW5kZXh8a2V5LCBvYmplY3QsIG90aGVyLCBzdGFja10pLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gaXNHcmVldGluZyh2YWx1ZSkge1xuICAgICAqICAgcmV0dXJuIC9eaCg/Oml8ZWxsbykkLy50ZXN0KHZhbHVlKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSkge1xuICAgICAqICAgaWYgKGlzR3JlZXRpbmcob2JqVmFsdWUpICYmIGlzR3JlZXRpbmcob3RoVmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiB0cnVlO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsnaGVsbG8nLCAnZ29vZGJ5ZSddO1xuICAgICAqIHZhciBvdGhlciA9IFsnaGknLCAnZ29vZGJ5ZSddO1xuICAgICAqXG4gICAgICogXy5pc0VxdWFsV2l0aChhcnJheSwgb3RoZXIsIGN1c3RvbWl6ZXIpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0VxdWFsV2l0aCh2YWx1ZSwgb3RoZXIsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyID8gY3VzdG9taXplcih2YWx1ZSwgb3RoZXIpIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCB1bmRlZmluZWQsIGN1c3RvbWl6ZXIpIDogISFyZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gYEVycm9yYCwgYEV2YWxFcnJvcmAsIGBSYW5nZUVycm9yYCwgYFJlZmVyZW5jZUVycm9yYCxcbiAgICAgKiBgU3ludGF4RXJyb3JgLCBgVHlwZUVycm9yYCwgb3IgYFVSSUVycm9yYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGVycm9yIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzRXJyb3IobmV3IEVycm9yKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRXJyb3IoRXJyb3IpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSkge1xuICAgICAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgICAgIHJldHVybiB0YWcgPT0gZXJyb3JUYWcgfHwgdGFnID09IGRvbUV4Y1RhZyB8fFxuICAgICAgICAodHlwZW9mIHZhbHVlLm1lc3NhZ2UgPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlLm5hbWUgPT0gJ3N0cmluZycgJiYgIWlzUGxhaW5PYmplY3QodmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGZpbml0ZSBwcmltaXRpdmUgbnVtYmVyLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICogW2BOdW1iZXIuaXNGaW5pdGVgXShodHRwczovL21kbi5pby9OdW1iZXIvaXNGaW5pdGUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZpbml0ZSBudW1iZXIsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0Zpbml0ZSgzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRmluaXRlKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNGaW5pdGUoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzRmluaXRlKCczJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0Zpbml0ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiBuYXRpdmVJc0Zpbml0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNGdW5jdGlvbihfKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgICAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gICAgICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgICAgIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgICAgIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gaW50ZWdlci5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICAgICAqIFtgTnVtYmVyLmlzSW50ZWdlcmBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc0ludGVnZXIpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBpbnRlZ2VyLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNJbnRlZ2VyKDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNJbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzSW50ZWdlcihJbmZpbml0eSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNJbnRlZ2VyKCczJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiYgdmFsdWUgPT0gdG9JbnRlZ2VyKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAgICAgKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTGVuZ3RoKDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzTGVuZ3RoKCczJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgICAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gICAgICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICAgICAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3Qoe30pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdChudWxsKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gICAgICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgTWFwYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNNYXAobmV3IE1hcCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc01hcChuZXcgV2Vha01hcCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNNYXAgPSBub2RlSXNNYXAgPyBiYXNlVW5hcnkobm9kZUlzTWFwKSA6IGJhc2VJc01hcDtcblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgcGFydGlhbCBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiBgb2JqZWN0YCBhbmQgYHNvdXJjZWAgdG9cbiAgICAgKiBkZXRlcm1pbmUgaWYgYG9iamVjdGAgY29udGFpbnMgZXF1aXZhbGVudCBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBgXy5tYXRjaGVzYCB3aGVuIGBzb3VyY2VgIGlzXG4gICAgICogcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICpcbiAgICAgKiBQYXJ0aWFsIGNvbXBhcmlzb25zIHdpbGwgbWF0Y2ggZW1wdHkgYXJyYXkgYW5kIGVtcHR5IG9iamVjdCBgc291cmNlYFxuICAgICAqIHZhbHVlcyBhZ2FpbnN0IGFueSBhcnJheSBvciBvYmplY3QgdmFsdWUsIHJlc3BlY3RpdmVseS4gU2VlIGBfLmlzRXF1YWxgXG4gICAgICogZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgdmFsdWUgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAgICAgKlxuICAgICAqIF8uaXNNYXRjaChvYmplY3QsIHsgJ2InOiAyIH0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNNYXRjaChvYmplY3QsIHsgJ2InOiAxIH0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNNYXRjaChvYmplY3QsIHNvdXJjZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBnZXRNYXRjaERhdGEoc291cmNlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc01hdGNoYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYCB3aGljaFxuICAgICAqIGlzIGludm9rZWQgdG8gY29tcGFyZSB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgLCBjb21wYXJpc29uc1xuICAgICAqIGFyZSBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkIHdpdGggZml2ZVxuICAgICAqIGFyZ3VtZW50czogKG9ialZhbHVlLCBzcmNWYWx1ZSwgaW5kZXh8a2V5LCBvYmplY3QsIHNvdXJjZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gaXNHcmVldGluZyh2YWx1ZSkge1xuICAgICAqICAgcmV0dXJuIC9eaCg/Oml8ZWxsbykkLy50ZXN0KHZhbHVlKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICAgICAqICAgaWYgKGlzR3JlZXRpbmcob2JqVmFsdWUpICYmIGlzR3JlZXRpbmcoc3JjVmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiB0cnVlO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdncmVldGluZyc6ICdoZWxsbycgfTtcbiAgICAgKiB2YXIgc291cmNlID0geyAnZ3JlZXRpbmcnOiAnaGknIH07XG4gICAgICpcbiAgICAgKiBfLmlzTWF0Y2hXaXRoKG9iamVjdCwgc291cmNlLCBjdXN0b21pemVyKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNNYXRjaFdpdGgob2JqZWN0LCBzb3VyY2UsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgZ2V0TWF0Y2hEYXRhKHNvdXJjZSksIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGBOYU5gLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICogW2BOdW1iZXIuaXNOYU5gXShodHRwczovL21kbi5pby9OdW1iZXIvaXNOYU4pIGFuZCBpcyBub3QgdGhlIHNhbWUgYXNcbiAgICAgKiBnbG9iYWwgW2Bpc05hTmBdKGh0dHBzOi8vbWRuLmlvL2lzTmFOKSB3aGljaCByZXR1cm5zIGB0cnVlYCBmb3JcbiAgICAgKiBgdW5kZWZpbmVkYCBhbmQgb3RoZXIgbm9uLW51bWJlciB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNOYU4oTmFOKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTmFOKG5ldyBOdW1iZXIoTmFOKSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogaXNOYU4odW5kZWZpbmVkKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTmFOKHVuZGVmaW5lZCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc05hTih2YWx1ZSkge1xuICAgICAgLy8gQW4gYE5hTmAgcHJpbWl0aXZlIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi5cbiAgICAgIC8vIFBlcmZvcm0gdGhlIGB0b1N0cmluZ1RhZ2AgY2hlY2sgZmlyc3QgdG8gYXZvaWQgZXJyb3JzIHdpdGggc29tZVxuICAgICAgLy8gQWN0aXZlWCBvYmplY3RzIGluIElFLlxuICAgICAgcmV0dXJuIGlzTnVtYmVyKHZhbHVlKSAmJiB2YWx1ZSAhPSArdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcmlzdGluZSBuYXRpdmUgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgY2FuJ3QgcmVsaWFibHkgZGV0ZWN0IG5hdGl2ZSBmdW5jdGlvbnMgaW4gdGhlIHByZXNlbmNlXG4gICAgICogb2YgdGhlIGNvcmUtanMgcGFja2FnZSBiZWNhdXNlIGNvcmUtanMgY2lyY3VtdmVudHMgdGhpcyBraW5kIG9mIGRldGVjdGlvbi5cbiAgICAgKiBEZXNwaXRlIG11bHRpcGxlIHJlcXVlc3RzLCB0aGUgY29yZS1qcyBtYWludGFpbmVyIGhhcyBtYWRlIGl0IGNsZWFyOiBhbnlcbiAgICAgKiBhdHRlbXB0IHRvIGZpeCB0aGUgZGV0ZWN0aW9uIHdpbGwgYmUgb2JzdHJ1Y3RlZC4gQXMgYSByZXN1bHQsIHdlJ3JlIGxlZnRcbiAgICAgKiB3aXRoIGxpdHRsZSBjaG9pY2UgYnV0IHRvIHRocm93IGFuIGVycm9yLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGFsc28gYWZmZWN0c1xuICAgICAqIHBhY2thZ2VzLCBsaWtlIFtiYWJlbC1wb2x5ZmlsbF0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmFiZWwtcG9seWZpbGwpLFxuICAgICAqIHdoaWNoIHJlbHkgb24gY29yZS1qcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc05hdGl2ZShBcnJheS5wcm90b3R5cGUucHVzaCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc05hdGl2ZShfKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTmF0aXZlKHZhbHVlKSB7XG4gICAgICBpZiAoaXNNYXNrYWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKENPUkVfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgbnVsbGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBudWxsYCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTnVsbChudWxsKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTnVsbCh2b2lkIDApO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNOdWxsKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYG51bGxgIG9yIGB1bmRlZmluZWRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBudWxsaXNoLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNOaWwobnVsbCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc05pbCh2b2lkIDApO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOaWwoTmFOKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTmlsKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYE51bWJlcmAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUbyBleGNsdWRlIGBJbmZpbml0eWAsIGAtSW5maW5pdHlgLCBhbmQgYE5hTmAsIHdoaWNoIGFyZVxuICAgICAqIGNsYXNzaWZpZWQgYXMgbnVtYmVycywgdXNlIHRoZSBgXy5pc0Zpbml0ZWAgbWV0aG9kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG51bWJlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTnVtYmVyKDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc051bWJlcihJbmZpbml0eSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc051bWJlcignMycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgfHxcbiAgICAgICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gbnVtYmVyVGFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gICAgICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuOC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICAgICAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICAgICAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgICAgIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBSZWdFeHBgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSByZWdleHAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1JlZ0V4cCgvYWJjLyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1JlZ0V4cCgnL2FiYy8nKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc1JlZ0V4cCA9IG5vZGVJc1JlZ0V4cCA/IGJhc2VVbmFyeShub2RlSXNSZWdFeHApIDogYmFzZUlzUmVnRXhwO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBzYWZlIGludGVnZXIuIEFuIGludGVnZXIgaXMgc2FmZSBpZiBpdCdzIGFuIElFRUUtNzU0XG4gICAgICogZG91YmxlIHByZWNpc2lvbiBudW1iZXIgd2hpY2ggaXNuJ3QgdGhlIHJlc3VsdCBvZiBhIHJvdW5kZWQgdW5zYWZlIGludGVnZXIuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgKiBbYE51bWJlci5pc1NhZmVJbnRlZ2VyYF0oaHR0cHM6Ly9tZG4uaW8vTnVtYmVyL2lzU2FmZUludGVnZXIpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNhZmUgaW50ZWdlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzU2FmZUludGVnZXIoMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1NhZmVJbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzU2FmZUludGVnZXIoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzU2FmZUludGVnZXIoJzMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzU2FmZUludGVnZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc0ludGVnZXIodmFsdWUpICYmIHZhbHVlID49IC1NQVhfU0FGRV9JTlRFR0VSICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTZXRgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjMuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1NldChuZXcgU2V0KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzU2V0KG5ldyBXZWFrU2V0KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc1NldCA9IG5vZGVJc1NldCA/IGJhc2VVbmFyeShub2RlSXNTZXQpIDogYmFzZUlzU2V0O1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3RyaW5nLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNTdHJpbmcoJ2FiYycpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNTdHJpbmcoMSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fFxuICAgICAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAgICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGB1bmRlZmluZWRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgdW5kZWZpbmVkYCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzVW5kZWZpbmVkKHZvaWQgMCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1VuZGVmaW5lZChudWxsKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFdlYWtNYXBgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjMuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB3ZWFrIG1hcCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzV2Vha01hcChuZXcgV2Vha01hcCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1dlYWtNYXAobmV3IE1hcCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1dlYWtNYXAodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gd2Vha01hcFRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFdlYWtTZXRgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjMuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB3ZWFrIHNldCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzV2Vha1NldChuZXcgV2Vha1NldCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1dlYWtTZXQobmV3IFNldCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1dlYWtTZXQodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHdlYWtTZXRUYWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIGBvdGhlcmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy45LjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gYG90aGVyYCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBzZWUgXy5ndFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmx0KDEsIDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8ubHQoMywgMyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8ubHQoMywgMSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgbHQgPSBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGJhc2VMdCk7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYG90aGVyYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjkuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0b1xuICAgICAqICBgb3RoZXJgLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQHNlZSBfLmd0ZVxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmx0ZSgxLCAzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmx0ZSgzLCAzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmx0ZSgzLCAxKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBsdGUgPSBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAgcmV0dXJuIHZhbHVlIDw9IG90aGVyO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b0FycmF5KHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiBfLnRvQXJyYXkoJ2FiYycpO1xuICAgICAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxuICAgICAqXG4gICAgICogXy50b0FycmF5KDEpO1xuICAgICAqIC8vID0+IFtdXG4gICAgICpcbiAgICAgKiBfLnRvQXJyYXkobnVsbCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSA/IHN0cmluZ1RvQXJyYXkodmFsdWUpIDogY29weUFycmF5KHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzeW1JdGVyYXRvciAmJiB2YWx1ZVtzeW1JdGVyYXRvcl0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yVG9BcnJheSh2YWx1ZVtzeW1JdGVyYXRvcl0oKSk7XG4gICAgICB9XG4gICAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgICAgICBmdW5jID0gdGFnID09IG1hcFRhZyA/IG1hcFRvQXJyYXkgOiAodGFnID09IHNldFRhZyA/IHNldFRvQXJyYXkgOiB2YWx1ZXMpO1xuXG4gICAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIGZpbml0ZSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xMi4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBudW1iZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9GaW5pdGUoMy4yKTtcbiAgICAgKiAvLyA9PiAzLjJcbiAgICAgKlxuICAgICAqIF8udG9GaW5pdGUoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gNWUtMzI0XG4gICAgICpcbiAgICAgKiBfLnRvRmluaXRlKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICAgICAqXG4gICAgICogXy50b0Zpbml0ZSgnMy4yJyk7XG4gICAgICogLy8gPT4gMy4yXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9GaW5pdGUodmFsdWUpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiAwO1xuICAgICAgfVxuICAgICAgdmFsdWUgPSB0b051bWJlcih2YWx1ZSk7XG4gICAgICBpZiAodmFsdWUgPT09IElORklOSVRZIHx8IHZhbHVlID09PSAtSU5GSU5JVFkpIHtcbiAgICAgICAgdmFyIHNpZ24gPSAodmFsdWUgPCAwID8gLTEgOiAxKTtcbiAgICAgICAgcmV0dXJuIHNpZ24gKiBNQVhfSU5URUdFUjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPyB2YWx1ZSA6IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBpbnRlZ2VyLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAgICAgKiBbYFRvSW50ZWdlcmBdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2ludGVnZXIpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBpbnRlZ2VyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvSW50ZWdlcigzLjIpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8udG9JbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIF8udG9JbnRlZ2VyKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICAgICAqXG4gICAgICogXy50b0ludGVnZXIoJzMuMicpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0ludGVnZXIodmFsdWUpIHtcbiAgICAgIHZhciByZXN1bHQgPSB0b0Zpbml0ZSh2YWx1ZSksXG4gICAgICAgICAgcmVtYWluZGVyID0gcmVzdWx0ICUgMTtcblxuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gcmVzdWx0ID8gKHJlbWFpbmRlciA/IHJlc3VsdCAtIHJlbWFpbmRlciA6IHJlc3VsdCkgOiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gaW50ZWdlciBzdWl0YWJsZSBmb3IgdXNlIGFzIHRoZSBsZW5ndGggb2YgYW5cbiAgICAgKiBhcnJheS1saWtlIG9iamVjdC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICAgICAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9MZW5ndGgoMy4yKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLnRvTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIF8udG9MZW5ndGgoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IDQyOTQ5NjcyOTVcbiAgICAgKlxuICAgICAqIF8udG9MZW5ndGgoJzMuMicpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0xlbmd0aCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID8gYmFzZUNsYW1wKHRvSW50ZWdlcih2YWx1ZSksIDAsIE1BWF9BUlJBWV9MRU5HVEgpIDogMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG51bWJlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b051bWJlcigzLjIpO1xuICAgICAqIC8vID0+IDMuMlxuICAgICAqXG4gICAgICogXy50b051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgKiAvLyA9PiA1ZS0zMjRcbiAgICAgKlxuICAgICAqIF8udG9OdW1iZXIoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IEluZmluaXR5XG4gICAgICpcbiAgICAgKiBfLnRvTnVtYmVyKCczLjInKTtcbiAgICAgKiAvLyA9PiAzLjJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b051bWJlcih2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBOQU47XG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICAgICAgdmFsdWUgPSBpc09iamVjdChvdGhlcikgPyAob3RoZXIgKyAnJykgOiBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiArdmFsdWU7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IGJhc2VUcmltKHZhbHVlKTtcbiAgICAgIHZhciBpc0JpbmFyeSA9IHJlSXNCaW5hcnkudGVzdCh2YWx1ZSk7XG4gICAgICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICAgICAgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpXG4gICAgICAgIDogKHJlSXNCYWRIZXgudGVzdCh2YWx1ZSkgPyBOQU4gOiArdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwbGFpbiBvYmplY3QgZmxhdHRlbmluZyBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmdcbiAgICAgKiBrZXllZCBwcm9wZXJ0aWVzIG9mIGB2YWx1ZWAgdG8gb3duIHByb3BlcnRpZXMgb2YgdGhlIHBsYWluIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgcGxhaW4gb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLmFzc2lnbih7ICdhJzogMSB9LCBuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAgICAgKlxuICAgICAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIF8udG9QbGFpbk9iamVjdChuZXcgRm9vKSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gICAgICByZXR1cm4gY29weU9iamVjdCh2YWx1ZSwga2V5c0luKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHNhZmUgaW50ZWdlci4gQSBzYWZlIGludGVnZXIgY2FuIGJlIGNvbXBhcmVkIGFuZFxuICAgICAqIHJlcHJlc2VudGVkIGNvcnJlY3RseS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b1NhZmVJbnRlZ2VyKDMuMik7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy50b1NhZmVJbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIF8udG9TYWZlSW50ZWdlcihJbmZpbml0eSk7XG4gICAgICogLy8gPT4gOTAwNzE5OTI1NDc0MDk5MVxuICAgICAqXG4gICAgICogXy50b1NhZmVJbnRlZ2VyKCczLjInKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9TYWZlSW50ZWdlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgID8gYmFzZUNsYW1wKHRvSW50ZWdlcih2YWx1ZSksIC1NQVhfU0FGRV9JTlRFR0VSLCBNQVhfU0FGRV9JTlRFR0VSKVxuICAgICAgICA6ICh2YWx1ZSA9PT0gMCA/IHZhbHVlIDogMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAgICAgKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvU3RyaW5nKG51bGwpO1xuICAgICAqIC8vID0+ICcnXG4gICAgICpcbiAgICAgKiBfLnRvU3RyaW5nKC0wKTtcbiAgICAgKiAvLyA9PiAnLTAnXG4gICAgICpcbiAgICAgKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gJzEsMiwzJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBBc3NpZ25zIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIHRvIHRoZVxuICAgICAqIGRlc3RpbmF0aW9uIG9iamVjdC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICAgICAqIFN1YnNlcXVlbnQgc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgIGFuZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gICAgICogW2BPYmplY3QuYXNzaWduYF0oaHR0cHM6Ly9tZG4uaW8vT2JqZWN0L2Fzc2lnbikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5hc3NpZ25JblxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEJhcigpIHtcbiAgICAgKiAgIHRoaXMuYyA9IDM7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5iID0gMjtcbiAgICAgKiBCYXIucHJvdG90eXBlLmQgPSA0O1xuICAgICAqXG4gICAgICogXy5hc3NpZ24oeyAnYSc6IDAgfSwgbmV3IEZvbywgbmV3IEJhcik7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gICAgICovXG4gICAgdmFyIGFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlKSB7XG4gICAgICBpZiAoaXNQcm90b3R5cGUoc291cmNlKSB8fCBpc0FycmF5TGlrZShzb3VyY2UpKSB7XG4gICAgICAgIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgb3duIGFuZFxuICAgICAqIGluaGVyaXRlZCBzb3VyY2UgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGFsaWFzIGV4dGVuZFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uYXNzaWduXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogfVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gQmFyKCkge1xuICAgICAqICAgdGhpcy5jID0gMztcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmIgPSAyO1xuICAgICAqIEJhci5wcm90b3R5cGUuZCA9IDQ7XG4gICAgICpcbiAgICAgKiBfLmFzc2lnbkluKHsgJ2EnOiAwIH0sIG5ldyBGb28sIG5ldyBCYXIpO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMywgJ2QnOiA0IH1cbiAgICAgKi9cbiAgICB2YXIgYXNzaWduSW4gPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSkge1xuICAgICAgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25JbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmBcbiAgICAgKiB3aGljaCBpcyBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIGFzc2lnbmVkIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnNcbiAgICAgKiBgdW5kZWZpbmVkYCwgYXNzaWdubWVudCBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYFxuICAgICAqIGlzIGludm9rZWQgd2l0aCBmaXZlIGFyZ3VtZW50czogKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBhbGlhcyBleHRlbmRXaXRoXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gc291cmNlcyBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmFzc2lnbldpdGhcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUpIHtcbiAgICAgKiAgIHJldHVybiBfLmlzVW5kZWZpbmVkKG9ialZhbHVlKSA/IHNyY1ZhbHVlIDogb2JqVmFsdWU7XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGRlZmF1bHRzID0gXy5wYXJ0aWFsUmlnaHQoXy5hc3NpZ25JbldpdGgsIGN1c3RvbWl6ZXIpO1xuICAgICAqXG4gICAgICogZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICovXG4gICAgdmFyIGFzc2lnbkluV2l0aCA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcikge1xuICAgICAgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QsIGN1c3RvbWl6ZXIpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgXG4gICAgICogd2hpY2ggaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBhc3NpZ25lZCB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zXG4gICAgICogYHVuZGVmaW5lZGAsIGFzc2lnbm1lbnQgaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmBcbiAgICAgKiBpcyBpbnZva2VkIHdpdGggZml2ZSBhcmd1bWVudHM6IChvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzb3VyY2VzIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uYXNzaWduSW5XaXRoXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gICAgICogICByZXR1cm4gXy5pc1VuZGVmaW5lZChvYmpWYWx1ZSkgPyBzcmNWYWx1ZSA6IG9ialZhbHVlO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBkZWZhdWx0cyA9IF8ucGFydGlhbFJpZ2h0KF8uYXNzaWduV2l0aCwgY3VzdG9taXplcik7XG4gICAgICpcbiAgICAgKiBkZWZhdWx0cyh7ICdhJzogMSB9LCB7ICdiJzogMiB9LCB7ICdhJzogMyB9KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAgICAgKi9cbiAgICB2YXIgYXNzaWduV2l0aCA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcikge1xuICAgICAgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0LCBjdXN0b21pemVyKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gYHBhdGhzYCBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwaWNrZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9LCA0XSB9O1xuICAgICAqXG4gICAgICogXy5hdChvYmplY3QsIFsnYVswXS5iLmMnLCAnYVsxXSddKTtcbiAgICAgKiAvLyA9PiBbMywgNF1cbiAgICAgKi9cbiAgICB2YXIgYXQgPSBmbGF0UmVzdChiYXNlQXQpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBgcHJvdG90eXBlYCBvYmplY3QuIElmIGFcbiAgICAgKiBgcHJvcGVydGllc2Agb2JqZWN0IGlzIGdpdmVuLCBpdHMgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXNcbiAgICAgKiBhcmUgYXNzaWduZWQgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm90b3R5cGUgVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzXSBUaGUgcHJvcGVydGllcyB0byBhc3NpZ24gdG8gdGhlIG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBTaGFwZSgpIHtcbiAgICAgKiAgIHRoaXMueCA9IDA7XG4gICAgICogICB0aGlzLnkgPSAwO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIENpcmNsZSgpIHtcbiAgICAgKiAgIFNoYXBlLmNhbGwodGhpcyk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogQ2lyY2xlLnByb3RvdHlwZSA9IF8uY3JlYXRlKFNoYXBlLnByb3RvdHlwZSwge1xuICAgICAqICAgJ2NvbnN0cnVjdG9yJzogQ2lyY2xlXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiB2YXIgY2lyY2xlID0gbmV3IENpcmNsZTtcbiAgICAgKiBjaXJjbGUgaW5zdGFuY2VvZiBDaXJjbGU7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogY2lyY2xlIGluc3RhbmNlb2YgU2hhcGU7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShwcm90b3R5cGUsIHByb3BlcnRpZXMpIHtcbiAgICAgIHZhciByZXN1bHQgPSBiYXNlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgICByZXR1cm4gcHJvcGVydGllcyA9PSBudWxsID8gcmVzdWx0IDogYmFzZUFzc2lnbihyZXN1bHQsIHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFzc2lnbnMgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2VcbiAgICAgKiBvYmplY3RzIHRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QgZm9yIGFsbCBkZXN0aW5hdGlvbiBwcm9wZXJ0aWVzIHRoYXRcbiAgICAgKiByZXNvbHZlIHRvIGB1bmRlZmluZWRgLiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuXG4gICAgICogT25jZSBhIHByb3BlcnR5IGlzIHNldCwgYWRkaXRpb25hbCB2YWx1ZXMgb2YgdGhlIHNhbWUgcHJvcGVydHkgYXJlIGlnbm9yZWQuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uZGVmYXVsdHNEZWVwXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICovXG4gICAgdmFyIGRlZmF1bHRzID0gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcblxuICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICB2YXIgbGVuZ3RoID0gc291cmNlcy5sZW5ndGg7XG4gICAgICB2YXIgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkge1xuICAgICAgICBsZW5ndGggPSAxO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICAgIHZhciBwcm9wcyA9IGtleXNJbihzb3VyY2UpO1xuICAgICAgICB2YXIgcHJvcHNJbmRleCA9IC0xO1xuICAgICAgICB2YXIgcHJvcHNMZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgICAgICAgd2hpbGUgKCsrcHJvcHNJbmRleCA8IHByb3BzTGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGtleSA9IHByb3BzW3Byb3BzSW5kZXhdO1xuICAgICAgICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgKGVxKHZhbHVlLCBvYmplY3RQcm90b1trZXldKSAmJiAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSB7XG4gICAgICAgICAgICBvYmplY3Rba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5kZWZhdWx0c2AgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgYXNzaWduc1xuICAgICAqIGRlZmF1bHQgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMTAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uZGVmYXVsdHNcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWZhdWx0c0RlZXAoeyAnYSc6IHsgJ2InOiAyIH0gfSwgeyAnYSc6IHsgJ2InOiAxLCAnYyc6IDMgfSB9KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogeyAnYic6IDIsICdjJzogMyB9IH1cbiAgICAgKi9cbiAgICB2YXIgZGVmYXVsdHNEZWVwID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykge1xuICAgICAgYXJncy5wdXNoKHVuZGVmaW5lZCwgY3VzdG9tRGVmYXVsdHNNZXJnZSk7XG4gICAgICByZXR1cm4gYXBwbHkobWVyZ2VXaXRoLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSBrZXkgb2YgdGhlIGZpcnN0XG4gICAgICogZWxlbWVudCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgaW5zdGVhZCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBrZXkgb2YgdGhlIG1hdGNoZWQgZWxlbWVudCxcbiAgICAgKiAgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0ge1xuICAgICAqICAgJ2Jhcm5leSc6ICB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgICdmcmVkJzogICAgeyAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgJ3BlYmJsZXMnOiB7ICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBfLmZpbmRLZXkodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICAgICAqIC8vID0+ICdiYXJuZXknIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZEtleSh1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gICAgICogLy8gPT4gJ3BlYmJsZXMnXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kS2V5KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gJ2ZyZWQnXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRLZXkodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiAnYmFybmV5J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRLZXkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiBiYXNlRmluZEtleShvYmplY3QsIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIGJhc2VGb3JPd24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZEtleWAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZlxuICAgICAqIGEgY29sbGVjdGlvbiBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBrZXkgb2YgdGhlIG1hdGNoZWQgZWxlbWVudCxcbiAgICAgKiAgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0ge1xuICAgICAqICAgJ2Jhcm5leSc6ICB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgICdmcmVkJzogICAgeyAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgJ3BlYmJsZXMnOiB7ICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBfLmZpbmRMYXN0S2V5KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZSA8IDQwOyB9KTtcbiAgICAgKiAvLyA9PiByZXR1cm5zICdwZWJibGVzJyBhc3N1bWluZyBgXy5maW5kS2V5YCByZXR1cm5zICdiYXJuZXknXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZExhc3RLZXkodXNlcnMsIHsgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiAnYmFybmV5J1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZExhc3RLZXkodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiAnZnJlZCdcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZExhc3RLZXkodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiAncGViYmxlcydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5kTGFzdEtleShvYmplY3QsIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIGJhc2VGaW5kS2V5KG9iamVjdCwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgYmFzZUZvck93blJpZ2h0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlcyBvdmVyIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2YgYW5cbiAgICAgKiBvYmplY3QgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBrZXksIG9iamVjdCkuIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdFxuICAgICAqIGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uZm9ySW5SaWdodFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5mb3JJbihuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2EnLCAnYicsIHRoZW4gJ2MnIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvckluKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbFxuICAgICAgICA/IG9iamVjdFxuICAgICAgICA6IGJhc2VGb3Iob2JqZWN0LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMyksIGtleXNJbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mb3JJbmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBwcm9wZXJ0aWVzIG9mXG4gICAgICogYG9iamVjdGAgaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uZm9ySW5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8uZm9ySW5SaWdodChuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2MnLCAnYicsIHRoZW4gJ2EnIGFzc3VtaW5nIGBfLmZvckluYCBsb2dzICdhJywgJ2InLCB0aGVuICdjJy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JJblJpZ2h0KG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbFxuICAgICAgICA/IG9iamVjdFxuICAgICAgICA6IGJhc2VGb3JSaWdodChvYmplY3QsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSwga2V5c0luKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlcyBvdmVyIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdCBhbmRcbiAgICAgKiBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICAgKiBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uXG4gICAgICogZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjMuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmZvck93blJpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLmZvck93bihuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3JPd24ob2JqZWN0LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZm9yT3duYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIHByb3BlcnRpZXMgb2ZcbiAgICAgKiBgb2JqZWN0YCBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5mb3JPd25cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8uZm9yT3duUmlnaHQobmV3IEZvbywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAqICAgY29uc29sZS5sb2coa2V5KTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzICdiJyB0aGVuICdhJyBhc3N1bWluZyBgXy5mb3JPd25gIGxvZ3MgJ2EnIHRoZW4gJ2InLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvck93blJpZ2h0KG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBvYmplY3QgJiYgYmFzZUZvck93blJpZ2h0KG9iamVjdCwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHByb3BlcnR5IG5hbWVzIGZyb20gb3duIGVudW1lcmFibGUgcHJvcGVydGllc1xuICAgICAqIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgZnVuY3Rpb24gbmFtZXMuXG4gICAgICogQHNlZSBfLmZ1bmN0aW9uc0luXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IF8uY29uc3RhbnQoJ2EnKTtcbiAgICAgKiAgIHRoaXMuYiA9IF8uY29uc3RhbnQoJ2InKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSBfLmNvbnN0YW50KCdjJyk7XG4gICAgICpcbiAgICAgKiBfLmZ1bmN0aW9ucyhuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYiddXG4gICAgICovXG4gICAgZnVuY3Rpb24gZnVuY3Rpb25zKG9iamVjdCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlRnVuY3Rpb25zKG9iamVjdCwga2V5cyhvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHByb3BlcnR5IG5hbWVzIGZyb20gb3duIGFuZCBpbmhlcml0ZWRcbiAgICAgKiBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBuYW1lcy5cbiAgICAgKiBAc2VlIF8uZnVuY3Rpb25zXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IF8uY29uc3RhbnQoJ2EnKTtcbiAgICAgKiAgIHRoaXMuYiA9IF8uY29uc3RhbnQoJ2InKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSBfLmNvbnN0YW50KCdjJyk7XG4gICAgICpcbiAgICAgKiBfLmZ1bmN0aW9uc0luKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZ1bmN0aW9uc0luKG9iamVjdCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlRnVuY3Rpb25zKG9iamVjdCwga2V5c0luKG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXG4gICAgICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy43LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gICAgICpcbiAgICAgKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcbiAgICAgKiAvLyA9PiAnZGVmYXVsdCdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHBhdGhgIGlzIGEgZGlyZWN0IHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IHsgJ2InOiAyIH0gfTtcbiAgICAgKiB2YXIgb3RoZXIgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XG4gICAgICpcbiAgICAgKiBfLmhhcyhvYmplY3QsICdhJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5oYXMob2JqZWN0LCAnYS5iJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5oYXMob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmhhcyhvdGhlciwgJ2EnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhcyhvYmplY3QsIHBhdGgpIHtcbiAgICAgIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgYmFzZUhhcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XG4gICAgICpcbiAgICAgKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xuICAgICAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBiYXNlSGFzSW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBpbnZlcnRlZCBrZXlzIGFuZCB2YWx1ZXMgb2YgYG9iamVjdGAuXG4gICAgICogSWYgYG9iamVjdGAgY29udGFpbnMgZHVwbGljYXRlIHZhbHVlcywgc3Vic2VxdWVudCB2YWx1ZXMgb3ZlcndyaXRlXG4gICAgICogcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnZlcnQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGludmVydGVkIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMSB9O1xuICAgICAqXG4gICAgICogXy5pbnZlcnQob2JqZWN0KTtcbiAgICAgKiAvLyA9PiB7ICcxJzogJ2MnLCAnMic6ICdiJyB9XG4gICAgICovXG4gICAgdmFyIGludmVydCA9IGNyZWF0ZUludmVydGVyKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiZcbiAgICAgICAgICB0eXBlb2YgdmFsdWUudG9TdHJpbmcgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWx1ZSA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHRbdmFsdWVdID0ga2V5O1xuICAgIH0sIGNvbnN0YW50KGlkZW50aXR5KSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmludmVydGAgZXhjZXB0IHRoYXQgdGhlIGludmVydGVkIG9iamVjdCBpcyBnZW5lcmF0ZWRcbiAgICAgKiBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcgZWFjaCBlbGVtZW50IG9mIGBvYmplY3RgIHRocnUgYGl0ZXJhdGVlYC4gVGhlXG4gICAgICogY29ycmVzcG9uZGluZyBpbnZlcnRlZCB2YWx1ZSBvZiBlYWNoIGludmVydGVkIGtleSBpcyBhbiBhcnJheSBvZiBrZXlzXG4gICAgICogcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlIGludmVydGVkIHZhbHVlLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZFxuICAgICAqIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMS4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnZlcnQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBpbnZlcnRlZCBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfTtcbiAgICAgKlxuICAgICAqIF8uaW52ZXJ0Qnkob2JqZWN0KTtcbiAgICAgKiAvLyA9PiB7ICcxJzogWydhJywgJ2MnXSwgJzInOiBbJ2InXSB9XG4gICAgICpcbiAgICAgKiBfLmludmVydEJ5KG9iamVjdCwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgKiAgIHJldHVybiAnZ3JvdXAnICsgdmFsdWU7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4geyAnZ3JvdXAxJzogWydhJywgJ2MnXSwgJ2dyb3VwMic6IFsnYiddIH1cbiAgICAgKi9cbiAgICB2YXIgaW52ZXJ0QnkgPSBjcmVhdGVJbnZlcnRlcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmXG4gICAgICAgICAgdHlwZW9mIHZhbHVlLnRvU3RyaW5nICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFsdWUgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCB2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0W3ZhbHVlXS5wdXNoKGtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRbdmFsdWVdID0gW2tleV07XG4gICAgICB9XG4gICAgfSwgZ2V0SXRlcmF0ZWUpO1xuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgbWV0aG9kIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIG1ldGhvZCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGludm9rZWQgbWV0aG9kLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IFsxLCAyLCAzLCA0XSB9IH1dIH07XG4gICAgICpcbiAgICAgKiBfLmludm9rZShvYmplY3QsICdhWzBdLmIuYy5zbGljZScsIDEsIDMpO1xuICAgICAqIC8vID0+IFsyLCAzXVxuICAgICAqL1xuICAgIHZhciBpbnZva2UgPSBiYXNlUmVzdChiYXNlSW52b2tlKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAgICAgKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gICAgICogZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8ua2V5cyhuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICpcbiAgICAgKiBfLmtleXMoJ2hpJyk7XG4gICAgICogLy8gPT4gWycwJywgJzEnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gICAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5rZXlzSW4obmV3IEZvbyk7XG4gICAgICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICovXG4gICAgZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLm1hcFZhbHVlc2A7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdGhlXG4gICAgICogc2FtZSB2YWx1ZXMgYXMgYG9iamVjdGAgYW5kIGtleXMgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmcgZWFjaCBvd24gZW51bWVyYWJsZVxuICAgICAqIHN0cmluZyBrZXllZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJ1IGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuOC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBvYmplY3QuXG4gICAgICogQHNlZSBfLm1hcFZhbHVlc1xuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1hcEtleXMoeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICByZXR1cm4ga2V5ICsgdmFsdWU7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4geyAnYTEnOiAxLCAnYjInOiAyIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBLZXlzKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICAgIGl0ZXJhdGVlID0gZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpO1xuXG4gICAgICBiYXNlRm9yT3duKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqZWN0KSB7XG4gICAgICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iamVjdCksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYXMgYG9iamVjdGAgYW5kIHZhbHVlcyBnZW5lcmF0ZWRcbiAgICAgKiBieSBydW5uaW5nIGVhY2ggb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnR5IG9mIGBvYmplY3RgIHRocnVcbiAgICAgKiBgaXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAgICAgKiAodmFsdWUsIGtleSwgb2JqZWN0KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjQuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgb2JqZWN0LlxuICAgICAqIEBzZWUgXy5tYXBLZXlzXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IHtcbiAgICAgKiAgICdmcmVkJzogICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwIH0sXG4gICAgICogICAncGViYmxlcyc6IHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxIH1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogXy5tYXBWYWx1ZXModXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlOyB9KTtcbiAgICAgKiAvLyA9PiB7ICdmcmVkJzogNDAsICdwZWJibGVzJzogMSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLm1hcFZhbHVlcyh1c2VycywgJ2FnZScpO1xuICAgICAqIC8vID0+IHsgJ2ZyZWQnOiA0MCwgJ3BlYmJsZXMnOiAxIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBWYWx1ZXMob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMyk7XG5cbiAgICAgIGJhc2VGb3JPd24ob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmplY3QpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG93biBhbmRcbiAgICAgKiBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyBpbnRvIHRoZVxuICAgICAqIGRlc3RpbmF0aW9uIG9iamVjdC4gU291cmNlIHByb3BlcnRpZXMgdGhhdCByZXNvbHZlIHRvIGB1bmRlZmluZWRgIGFyZVxuICAgICAqIHNraXBwZWQgaWYgYSBkZXN0aW5hdGlvbiB2YWx1ZSBleGlzdHMuIEFycmF5IGFuZCBwbGFpbiBvYmplY3QgcHJvcGVydGllc1xuICAgICAqIGFyZSBtZXJnZWQgcmVjdXJzaXZlbHkuIE90aGVyIG9iamVjdHMgYW5kIHZhbHVlIHR5cGVzIGFyZSBvdmVycmlkZGVuIGJ5XG4gICAgICogYXNzaWdubWVudC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LiBTdWJzZXF1ZW50XG4gICAgICogc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNS4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0ge1xuICAgICAqICAgJ2EnOiBbeyAnYic6IDIgfSwgeyAnZCc6IDQgfV1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogdmFyIG90aGVyID0ge1xuICAgICAqICAgJ2EnOiBbeyAnYyc6IDMgfSwgeyAnZSc6IDUgfV1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogXy5tZXJnZShvYmplY3QsIG90aGVyKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogW3sgJ2InOiAyLCAnYyc6IDMgfSwgeyAnZCc6IDQsICdlJzogNSB9XSB9XG4gICAgICovXG4gICAgdmFyIG1lcmdlID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KSB7XG4gICAgICBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ubWVyZ2VgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBtZXJnZWQgdmFsdWVzIG9mIHRoZSBkZXN0aW5hdGlvbiBhbmQgc291cmNlXG4gICAgICogcHJvcGVydGllcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAsIG1lcmdpbmcgaXMgaGFuZGxlZCBieSB0aGVcbiAgICAgKiBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkIHdpdGggc2l4IGFyZ3VtZW50czpcbiAgICAgKiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjaykuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IHNvdXJjZXMgVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUpIHtcbiAgICAgKiAgIGlmIChfLmlzQXJyYXkob2JqVmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiBvYmpWYWx1ZS5jb25jYXQoc3JjVmFsdWUpO1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogWzFdLCAnYic6IFsyXSB9O1xuICAgICAqIHZhciBvdGhlciA9IHsgJ2EnOiBbM10sICdiJzogWzRdIH07XG4gICAgICpcbiAgICAgKiBfLm1lcmdlV2l0aChvYmplY3QsIG90aGVyLCBjdXN0b21pemVyKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogWzEsIDNdLCAnYic6IFsyLCA0XSB9XG4gICAgICovXG4gICAgdmFyIG1lcmdlV2l0aCA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcikge1xuICAgICAgYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcik7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8ucGlja2A7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZVxuICAgICAqIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgcGF0aHMgb2YgYG9iamVjdGAgdGhhdCBhcmUgbm90IG9taXR0ZWQuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgY29uc2lkZXJhYmx5IHNsb3dlciB0aGFuIGBfLnBpY2tgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gb21pdC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAgICAgKlxuICAgICAqIF8ub21pdChvYmplY3QsIFsnYScsICdjJ10pO1xuICAgICAqIC8vID0+IHsgJ2InOiAnMicgfVxuICAgICAqL1xuICAgIHZhciBvbWl0ID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICB2YXIgaXNEZWVwID0gZmFsc2U7XG4gICAgICBwYXRocyA9IGFycmF5TWFwKHBhdGhzLCBmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICAgICAgICBpc0RlZXAgfHwgKGlzRGVlcCA9IHBhdGgubGVuZ3RoID4gMSk7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgICAgfSk7XG4gICAgICBjb3B5T2JqZWN0KG9iamVjdCwgZ2V0QWxsS2V5c0luKG9iamVjdCksIHJlc3VsdCk7XG4gICAgICBpZiAoaXNEZWVwKSB7XG4gICAgICAgIHJlc3VsdCA9IGJhc2VDbG9uZShyZXN1bHQsIENMT05FX0RFRVBfRkxBRyB8IENMT05FX0ZMQVRfRkxBRyB8IENMT05FX1NZTUJPTFNfRkxBRywgY3VzdG9tT21pdENsb25lKTtcbiAgICAgIH1cbiAgICAgIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGg7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgYmFzZVVuc2V0KHJlc3VsdCwgcGF0aHNbbGVuZ3RoXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tCeWA7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mXG4gICAgICogdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2YgYG9iamVjdGAgdGhhdFxuICAgICAqIGBwcmVkaWNhdGVgIGRvZXNuJ3QgcmV0dXJuIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHR3b1xuICAgICAqIGFyZ3VtZW50czogKHZhbHVlLCBrZXkpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgcHJvcGVydHkuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gICAgICpcbiAgICAgKiBfLm9taXRCeShvYmplY3QsIF8uaXNOdW1iZXIpO1xuICAgICAqIC8vID0+IHsgJ2InOiAnMicgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG9taXRCeShvYmplY3QsIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIHBpY2tCeShvYmplY3QsIG5lZ2F0ZShnZXRJdGVyYXRlZShwcmVkaWNhdGUpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIHBpY2tlZCBgb2JqZWN0YCBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAgICAgKlxuICAgICAqIF8ucGljayhvYmplY3QsIFsnYScsICdjJ10pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYyc6IDMgfVxuICAgICAqL1xuICAgIHZhciBwaWNrID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8ge30gOiBiYXNlUGljayhvYmplY3QsIHBhdGhzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBgb2JqZWN0YCBwcm9wZXJ0aWVzIGBwcmVkaWNhdGVgIHJldHVybnNcbiAgICAgKiB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAodmFsdWUsIGtleSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBwcm9wZXJ0eS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAgICAgKlxuICAgICAqIF8ucGlja0J5KG9iamVjdCwgXy5pc051bWJlcik7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gcGlja0J5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gICAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgdmFyIHByb3BzID0gYXJyYXlNYXAoZ2V0QWxsS2V5c0luKG9iamVjdCksIGZ1bmN0aW9uKHByb3ApIHtcbiAgICAgICAgcmV0dXJuIFtwcm9wXTtcbiAgICAgIH0pO1xuICAgICAgcHJlZGljYXRlID0gZ2V0SXRlcmF0ZWUocHJlZGljYXRlKTtcbiAgICAgIHJldHVybiBiYXNlUGlja0J5KG9iamVjdCwgcHJvcHMsIGZ1bmN0aW9uKHZhbHVlLCBwYXRoKSB7XG4gICAgICAgIHJldHVybiBwcmVkaWNhdGUodmFsdWUsIHBhdGhbMF0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5nZXRgIGV4Y2VwdCB0aGF0IGlmIHRoZSByZXNvbHZlZCB2YWx1ZSBpcyBhXG4gICAgICogZnVuY3Rpb24gaXQncyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGl0cyBwYXJlbnQgb2JqZWN0IGFuZFxuICAgICAqIGl0cyByZXN1bHQgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byByZXNvbHZlLlxuICAgICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYzEnOiAzLCAnYzInOiBfLmNvbnN0YW50KDQpIH0gfV0gfTtcbiAgICAgKlxuICAgICAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0uYi5jMScpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0uYi5jMicpO1xuICAgICAqIC8vID0+IDRcbiAgICAgKlxuICAgICAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0uYi5jMycsICdkZWZhdWx0Jyk7XG4gICAgICogLy8gPT4gJ2RlZmF1bHQnXG4gICAgICpcbiAgICAgKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzMnLCBfLmNvbnN0YW50KCdkZWZhdWx0JykpO1xuICAgICAqIC8vID0+ICdkZWZhdWx0J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc3VsdChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gICAgICAvLyBFbnN1cmUgdGhlIGxvb3AgaXMgZW50ZXJlZCB3aGVuIHBhdGggaXMgZW1wdHkuXG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICBsZW5ndGggPSAxO1xuICAgICAgICBvYmplY3QgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFt0b0tleShwYXRoW2luZGV4XSldO1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuICAgICAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG9iamVjdCA9IGlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUuY2FsbChvYmplY3QpIDogdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgYSBwb3J0aW9uIG9mIGBwYXRoYCBkb2Vzbid0IGV4aXN0LFxuICAgICAqIGl0J3MgY3JlYXRlZC4gQXJyYXlzIGFyZSBjcmVhdGVkIGZvciBtaXNzaW5nIGluZGV4IHByb3BlcnRpZXMgd2hpbGUgb2JqZWN0c1xuICAgICAqIGFyZSBjcmVhdGVkIGZvciBhbGwgb3RoZXIgbWlzc2luZyBwcm9wZXJ0aWVzLiBVc2UgYF8uc2V0V2l0aGAgdG8gY3VzdG9taXplXG4gICAgICogYHBhdGhgIGNyZWF0aW9uLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy43LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICAgICAqXG4gICAgICogXy5zZXQob2JqZWN0LCAnYVswXS5iLmMnLCA0KTtcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3QuYVswXS5iLmMpO1xuICAgICAqIC8vID0+IDRcbiAgICAgKlxuICAgICAqIF8uc2V0KG9iamVjdCwgWyd4JywgJzAnLCAneScsICd6J10sIDUpO1xuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdC54WzBdLnkueik7XG4gICAgICogLy8gPT4gNVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldChvYmplY3QsIHBhdGgsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc2V0YCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgb2JqZWN0cyBvZiBgcGF0aGAuICBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYFxuICAgICAqIHBhdGggY3JlYXRpb24gaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdGhyZWUgYXJndW1lbnRzOiAobnNWYWx1ZSwga2V5LCBuc09iamVjdCkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0ge307XG4gICAgICpcbiAgICAgKiBfLnNldFdpdGgob2JqZWN0LCAnWzBdWzFdJywgJ2EnLCBPYmplY3QpO1xuICAgICAqIC8vID0+IHsgJzAnOiB7ICcxJzogJ2EnIH0gfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldFdpdGgob2JqZWN0LCBwYXRoLCB2YWx1ZSwgY3VzdG9taXplcikge1xuICAgICAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gb2JqZWN0IDogYmFzZVNldChvYmplY3QsIHBhdGgsIHZhbHVlLCBjdXN0b21pemVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZC12YWx1ZSBwYWlycyBmb3IgYG9iamVjdGBcbiAgICAgKiB3aGljaCBjYW4gYmUgY29uc3VtZWQgYnkgYF8uZnJvbVBhaXJzYC4gSWYgYG9iamVjdGAgaXMgYSBtYXAgb3Igc2V0LCBpdHNcbiAgICAgKiBlbnRyaWVzIGFyZSByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBhbGlhcyBlbnRyaWVzXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8udG9QYWlycyhuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbWydhJywgMV0sIFsnYicsIDJdXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIHZhciB0b1BhaXJzID0gY3JlYXRlVG9QYWlycyhrZXlzKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQtdmFsdWUgcGFpcnNcbiAgICAgKiBmb3IgYG9iamVjdGAgd2hpY2ggY2FuIGJlIGNvbnN1bWVkIGJ5IGBfLmZyb21QYWlyc2AuIElmIGBvYmplY3RgIGlzIGEgbWFwXG4gICAgICogb3Igc2V0LCBpdHMgZW50cmllcyBhcmUgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAYWxpYXMgZW50cmllc0luXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8udG9QYWlyc0luKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFtbJ2EnLCAxXSwgWydiJywgMl0sIFsnYycsIDNdXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIHZhciB0b1BhaXJzSW4gPSBjcmVhdGVUb1BhaXJzKGtleXNJbik7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhbHRlcm5hdGl2ZSB0byBgXy5yZWR1Y2VgOyB0aGlzIG1ldGhvZCB0cmFuc2Zvcm1zIGBvYmplY3RgIHRvIGEgbmV3XG4gICAgICogYGFjY3VtdWxhdG9yYCBvYmplY3Qgd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGVhY2ggb2YgaXRzIG93blxuICAgICAqIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgdGhydSBgaXRlcmF0ZWVgLCB3aXRoIGVhY2ggaW52b2NhdGlvblxuICAgICAqIHBvdGVudGlhbGx5IG11dGF0aW5nIHRoZSBgYWNjdW11bGF0b3JgIG9iamVjdC4gSWYgYGFjY3VtdWxhdG9yYCBpcyBub3RcbiAgICAgKiBwcm92aWRlZCwgYSBuZXcgb2JqZWN0IHdpdGggdGhlIHNhbWUgYFtbUHJvdG90eXBlXV1gIHdpbGwgYmUgdXNlZC4gVGhlXG4gICAgICogaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIGZvdXIgYXJndW1lbnRzOiAoYWNjdW11bGF0b3IsIHZhbHVlLCBrZXksIG9iamVjdCkuXG4gICAgICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBjdXN0b20gYWNjdW11bGF0b3IgdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRyYW5zZm9ybShbMiwgMywgNF0sIGZ1bmN0aW9uKHJlc3VsdCwgbikge1xuICAgICAqICAgcmVzdWx0LnB1c2gobiAqPSBuKTtcbiAgICAgKiAgIHJldHVybiBuICUgMiA9PSAwO1xuICAgICAqIH0sIFtdKTtcbiAgICAgKiAvLyA9PiBbNCwgOV1cbiAgICAgKlxuICAgICAqIF8udHJhbnNmb3JtKHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMSB9LCBmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgKiAgIChyZXN1bHRbdmFsdWVdIHx8IChyZXN1bHRbdmFsdWVdID0gW10pKS5wdXNoKGtleSk7XG4gICAgICogfSwge30pO1xuICAgICAqIC8vID0+IHsgJzEnOiBbJ2EnLCAnYyddLCAnMic6IFsnYiddIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm0ob2JqZWN0LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgICAgIHZhciBpc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgICAgICBpc0Fyckxpa2UgPSBpc0FyciB8fCBpc0J1ZmZlcihvYmplY3QpIHx8IGlzVHlwZWRBcnJheShvYmplY3QpO1xuXG4gICAgICBpdGVyYXRlZSA9IGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCA0KTtcbiAgICAgIGlmIChhY2N1bXVsYXRvciA9PSBudWxsKSB7XG4gICAgICAgIHZhciBDdG9yID0gb2JqZWN0ICYmIG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgICAgICAgaWYgKGlzQXJyTGlrZSkge1xuICAgICAgICAgIGFjY3VtdWxhdG9yID0gaXNBcnIgPyBuZXcgQ3RvciA6IFtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgICBhY2N1bXVsYXRvciA9IGlzRnVuY3Rpb24oQ3RvcikgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKSA6IHt9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGFjY3VtdWxhdG9yID0ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIChpc0Fyckxpa2UgPyBhcnJheUVhY2ggOiBiYXNlRm9yT3duKShvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRlZShhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBvYmplY3QpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgcHJvcGVydHkgYXQgYHBhdGhgIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gdW5zZXQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBkZWxldGVkLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogNyB9IH1dIH07XG4gICAgICogXy51bnNldChvYmplY3QsICdhWzBdLmIuYycpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdCk7XG4gICAgICogLy8gPT4geyAnYSc6IFt7ICdiJzoge30gfV0gfTtcbiAgICAgKlxuICAgICAqIF8udW5zZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob2JqZWN0KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogW3sgJ2InOiB7fSB9XSB9O1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuc2V0KG9iamVjdCwgcGF0aCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdHJ1ZSA6IGJhc2VVbnNldChvYmplY3QsIHBhdGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc2V0YCBleGNlcHQgdGhhdCBhY2NlcHRzIGB1cGRhdGVyYCB0byBwcm9kdWNlIHRoZVxuICAgICAqIHZhbHVlIHRvIHNldC4gVXNlIGBfLnVwZGF0ZVdpdGhgIHRvIGN1c3RvbWl6ZSBgcGF0aGAgY3JlYXRpb24uIFRoZSBgdXBkYXRlcmBcbiAgICAgKiBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC42LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHVwZGF0ZXIgVGhlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgdGhlIHVwZGF0ZWQgdmFsdWUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAgICAgKlxuICAgICAqIF8udXBkYXRlKG9iamVjdCwgJ2FbMF0uYi5jJywgZnVuY3Rpb24obikgeyByZXR1cm4gbiAqIG47IH0pO1xuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdC5hWzBdLmIuYyk7XG4gICAgICogLy8gPT4gOVxuICAgICAqXG4gICAgICogXy51cGRhdGUob2JqZWN0LCAneFswXS55LnonLCBmdW5jdGlvbihuKSB7IHJldHVybiBuID8gbiArIDEgOiAwOyB9KTtcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3QueFswXS55LnopO1xuICAgICAqIC8vID0+IDBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1cGRhdGUob2JqZWN0LCBwYXRoLCB1cGRhdGVyKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBiYXNlVXBkYXRlKG9iamVjdCwgcGF0aCwgY2FzdEZ1bmN0aW9uKHVwZGF0ZXIpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVwZGF0ZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIG9iamVjdHMgb2YgYHBhdGhgLiAgSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGBcbiAgICAgKiBwYXRoIGNyZWF0aW9uIGlzIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKG5zVmFsdWUsIGtleSwgbnNPYmplY3QpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC42LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHVwZGF0ZXIgVGhlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgdGhlIHVwZGF0ZWQgdmFsdWUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7fTtcbiAgICAgKlxuICAgICAqIF8udXBkYXRlV2l0aChvYmplY3QsICdbMF1bMV0nLCBfLmNvbnN0YW50KCdhJyksIE9iamVjdCk7XG4gICAgICogLy8gPT4geyAnMCc6IHsgJzEnOiAnYScgfSB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gdXBkYXRlV2l0aChvYmplY3QsIHBhdGgsIHVwZGF0ZXIsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IG9iamVjdCA6IGJhc2VVcGRhdGUob2JqZWN0LCBwYXRoLCBjYXN0RnVuY3Rpb24odXBkYXRlciksIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLnZhbHVlcyhuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbMSwgMl0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKlxuICAgICAqIF8udmFsdWVzKCdoaScpO1xuICAgICAqIC8vID0+IFsnaCcsICdpJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBbXSA6IGJhc2VWYWx1ZXMob2JqZWN0LCBrZXlzKG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnR5XG4gICAgICogdmFsdWVzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy52YWx1ZXNJbihuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB2YWx1ZXNJbihvYmplY3QpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZVZhbHVlcyhvYmplY3QsIGtleXNJbihvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDbGFtcHMgYG51bWJlcmAgd2l0aGluIHRoZSBpbmNsdXNpdmUgYGxvd2VyYCBhbmQgYHVwcGVyYCBib3VuZHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTnVtYmVyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNsYW1wLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbG93ZXJdIFRoZSBsb3dlciBib3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdXBwZXIgVGhlIHVwcGVyIGJvdW5kLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNsYW1wZWQgbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNsYW1wKC0xMCwgLTUsIDUpO1xuICAgICAqIC8vID0+IC01XG4gICAgICpcbiAgICAgKiBfLmNsYW1wKDEwLCAtNSwgNSk7XG4gICAgICogLy8gPT4gNVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsYW1wKG51bWJlciwgbG93ZXIsIHVwcGVyKSB7XG4gICAgICBpZiAodXBwZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB1cHBlciA9IGxvd2VyO1xuICAgICAgICBsb3dlciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICh1cHBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHVwcGVyID0gdG9OdW1iZXIodXBwZXIpO1xuICAgICAgICB1cHBlciA9IHVwcGVyID09PSB1cHBlciA/IHVwcGVyIDogMDtcbiAgICAgIH1cbiAgICAgIGlmIChsb3dlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxvd2VyID0gdG9OdW1iZXIobG93ZXIpO1xuICAgICAgICBsb3dlciA9IGxvd2VyID09PSBsb3dlciA/IGxvd2VyIDogMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlQ2xhbXAodG9OdW1iZXIobnVtYmVyKSwgbG93ZXIsIHVwcGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYG5gIGlzIGJldHdlZW4gYHN0YXJ0YCBhbmQgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCBgZW5kYC4gSWZcbiAgICAgKiBgZW5kYCBpcyBub3Qgc3BlY2lmaWVkLCBpdCdzIHNldCB0byBgc3RhcnRgIHdpdGggYHN0YXJ0YCB0aGVuIHNldCB0byBgMGAuXG4gICAgICogSWYgYHN0YXJ0YCBpcyBncmVhdGVyIHRoYW4gYGVuZGAgdGhlIHBhcmFtcyBhcmUgc3dhcHBlZCB0byBzdXBwb3J0XG4gICAgICogbmVnYXRpdmUgcmFuZ2VzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMy4wXG4gICAgICogQGNhdGVnb3J5IE51bWJlclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG51bWJlcmAgaXMgaW4gdGhlIHJhbmdlLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQHNlZSBfLnJhbmdlLCBfLnJhbmdlUmlnaHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDMsIDIsIDQpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSg0LCA4KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmluUmFuZ2UoNCwgMik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSgyLCAyKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDEuMiwgMik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDUuMiwgNCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSgtMywgLTIsIC02KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5SYW5nZShudW1iZXIsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHN0YXJ0ID0gdG9GaW5pdGUoc3RhcnQpO1xuICAgICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVuZCA9IHN0YXJ0O1xuICAgICAgICBzdGFydCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbmQgPSB0b0Zpbml0ZShlbmQpO1xuICAgICAgfVxuICAgICAgbnVtYmVyID0gdG9OdW1iZXIobnVtYmVyKTtcbiAgICAgIHJldHVybiBiYXNlSW5SYW5nZShudW1iZXIsIHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2R1Y2VzIGEgcmFuZG9tIG51bWJlciBiZXR3ZWVuIHRoZSBpbmNsdXNpdmUgYGxvd2VyYCBhbmQgYHVwcGVyYCBib3VuZHMuXG4gICAgICogSWYgb25seSBvbmUgYXJndW1lbnQgaXMgcHJvdmlkZWQgYSBudW1iZXIgYmV0d2VlbiBgMGAgYW5kIHRoZSBnaXZlbiBudW1iZXJcbiAgICAgKiBpcyByZXR1cm5lZC4gSWYgYGZsb2F0aW5nYCBpcyBgdHJ1ZWAsIG9yIGVpdGhlciBgbG93ZXJgIG9yIGB1cHBlcmAgYXJlXG4gICAgICogZmxvYXRzLCBhIGZsb2F0aW5nLXBvaW50IG51bWJlciBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGludGVnZXIuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSmF2YVNjcmlwdCBmb2xsb3dzIHRoZSBJRUVFLTc1NCBzdGFuZGFyZCBmb3IgcmVzb2x2aW5nXG4gICAgICogZmxvYXRpbmctcG9pbnQgdmFsdWVzIHdoaWNoIGNhbiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjcuMFxuICAgICAqIEBjYXRlZ29yeSBOdW1iZXJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xvd2VyPTBdIFRoZSBsb3dlciBib3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3VwcGVyPTFdIFRoZSB1cHBlciBib3VuZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmbG9hdGluZ10gU3BlY2lmeSByZXR1cm5pbmcgYSBmbG9hdGluZy1wb2ludCBudW1iZXIuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcmFuZG9tIG51bWJlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yYW5kb20oMCwgNSk7XG4gICAgICogLy8gPT4gYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDVcbiAgICAgKlxuICAgICAqIF8ucmFuZG9tKDUpO1xuICAgICAqIC8vID0+IGFsc28gYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDVcbiAgICAgKlxuICAgICAqIF8ucmFuZG9tKDUsIHRydWUpO1xuICAgICAqIC8vID0+IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGJldHdlZW4gMCBhbmQgNVxuICAgICAqXG4gICAgICogXy5yYW5kb20oMS4yLCA1LjIpO1xuICAgICAqIC8vID0+IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGJldHdlZW4gMS4yIGFuZCA1LjJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByYW5kb20obG93ZXIsIHVwcGVyLCBmbG9hdGluZykge1xuICAgICAgaWYgKGZsb2F0aW5nICYmIHR5cGVvZiBmbG9hdGluZyAhPSAnYm9vbGVhbicgJiYgaXNJdGVyYXRlZUNhbGwobG93ZXIsIHVwcGVyLCBmbG9hdGluZykpIHtcbiAgICAgICAgdXBwZXIgPSBmbG9hdGluZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChmbG9hdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdXBwZXIgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgZmxvYXRpbmcgPSB1cHBlcjtcbiAgICAgICAgICB1cHBlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbG93ZXIgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgZmxvYXRpbmcgPSBsb3dlcjtcbiAgICAgICAgICBsb3dlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxvd2VyID09PSB1bmRlZmluZWQgJiYgdXBwZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsb3dlciA9IDA7XG4gICAgICAgIHVwcGVyID0gMTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBsb3dlciA9IHRvRmluaXRlKGxvd2VyKTtcbiAgICAgICAgaWYgKHVwcGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB1cHBlciA9IGxvd2VyO1xuICAgICAgICAgIGxvd2VyID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cHBlciA9IHRvRmluaXRlKHVwcGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxvd2VyID4gdXBwZXIpIHtcbiAgICAgICAgdmFyIHRlbXAgPSBsb3dlcjtcbiAgICAgICAgbG93ZXIgPSB1cHBlcjtcbiAgICAgICAgdXBwZXIgPSB0ZW1wO1xuICAgICAgfVxuICAgICAgaWYgKGZsb2F0aW5nIHx8IGxvd2VyICUgMSB8fCB1cHBlciAlIDEpIHtcbiAgICAgICAgdmFyIHJhbmQgPSBuYXRpdmVSYW5kb20oKTtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZU1pbihsb3dlciArIChyYW5kICogKHVwcGVyIC0gbG93ZXIgKyBmcmVlUGFyc2VGbG9hdCgnMWUtJyArICgocmFuZCArICcnKS5sZW5ndGggLSAxKSkpKSwgdXBwZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VSYW5kb20obG93ZXIsIHVwcGVyKTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBbY2FtZWwgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ2FtZWxDYXNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNhbWVsIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jYW1lbENhc2UoJ0ZvbyBCYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vQmFyJ1xuICAgICAqXG4gICAgICogXy5jYW1lbENhc2UoJy0tZm9vLWJhci0tJyk7XG4gICAgICogLy8gPT4gJ2Zvb0JhcidcbiAgICAgKlxuICAgICAqIF8uY2FtZWxDYXNlKCdfX0ZPT19CQVJfXycpO1xuICAgICAqIC8vID0+ICdmb29CYXInXG4gICAgICovXG4gICAgdmFyIGNhbWVsQ2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LCB3b3JkLCBpbmRleCkge1xuICAgICAgd29yZCA9IHdvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyBjYXBpdGFsaXplKHdvcmQpIDogd29yZCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGBzdHJpbmdgIHRvIHVwcGVyIGNhc2UgYW5kIHRoZSByZW1haW5pbmdcbiAgICAgKiB0byBsb3dlciBjYXNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNhcGl0YWxpemUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY2FwaXRhbGl6ZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNhcGl0YWxpemUoJ0ZSRUQnKTtcbiAgICAgKiAvLyA9PiAnRnJlZCdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXBpdGFsaXplKHN0cmluZykge1xuICAgICAgcmV0dXJuIHVwcGVyRmlyc3QodG9TdHJpbmcoc3RyaW5nKS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWJ1cnJzIGBzdHJpbmdgIGJ5IGNvbnZlcnRpbmdcbiAgICAgKiBbTGF0aW4tMSBTdXBwbGVtZW50XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MYXRpbi0xX1N1cHBsZW1lbnRfKFVuaWNvZGVfYmxvY2spI0NoYXJhY3Rlcl90YWJsZSlcbiAgICAgKiBhbmQgW0xhdGluIEV4dGVuZGVkLUFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdGluX0V4dGVuZGVkLUEpXG4gICAgICogbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzIGFuZCByZW1vdmluZ1xuICAgICAqIFtjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3NdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbWJpbmluZ19EaWFjcml0aWNhbF9NYXJrcykuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gZGVidXJyLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGRlYnVycmVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWJ1cnIoJ2TDqWrDoCB2dScpO1xuICAgICAqIC8vID0+ICdkZWphIHZ1J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRlYnVycihzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICByZXR1cm4gc3RyaW5nICYmIHN0cmluZy5yZXBsYWNlKHJlTGF0aW4sIGRlYnVyckxldHRlcikucmVwbGFjZShyZUNvbWJvTWFyaywgJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgc3RyaW5nYCBlbmRzIHdpdGggdGhlIGdpdmVuIHRhcmdldCBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RhcmdldF0gVGhlIHN0cmluZyB0byBzZWFyY2ggZm9yLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcG9zaXRpb249c3RyaW5nLmxlbmd0aF0gVGhlIHBvc2l0aW9uIHRvIHNlYXJjaCB1cCB0by5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHN0cmluZ2AgZW5kcyB3aXRoIGB0YXJnZXRgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZW5kc1dpdGgoJ2FiYycsICdjJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5lbmRzV2l0aCgnYWJjJywgJ2InKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5lbmRzV2l0aCgnYWJjJywgJ2InLCAyKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZW5kc1dpdGgoc3RyaW5nLCB0YXJnZXQsIHBvc2l0aW9uKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgdGFyZ2V0ID0gYmFzZVRvU3RyaW5nKHRhcmdldCk7XG5cbiAgICAgIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gbGVuZ3RoXG4gICAgICAgIDogYmFzZUNsYW1wKHRvSW50ZWdlcihwb3NpdGlvbiksIDAsIGxlbmd0aCk7XG5cbiAgICAgIHZhciBlbmQgPSBwb3NpdGlvbjtcbiAgICAgIHBvc2l0aW9uIC09IHRhcmdldC5sZW5ndGg7XG4gICAgICByZXR1cm4gcG9zaXRpb24gPj0gMCAmJiBzdHJpbmcuc2xpY2UocG9zaXRpb24sIGVuZCkgPT0gdGFyZ2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBjaGFyYWN0ZXJzIFwiJlwiLCBcIjxcIiwgXCI+XCIsICdcIicsIGFuZCBcIidcIiBpbiBgc3RyaW5nYCB0byB0aGVpclxuICAgICAqIGNvcnJlc3BvbmRpbmcgSFRNTCBlbnRpdGllcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBObyBvdGhlciBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkLiBUbyBlc2NhcGUgYWRkaXRpb25hbFxuICAgICAqIGNoYXJhY3RlcnMgdXNlIGEgdGhpcmQtcGFydHkgbGlicmFyeSBsaWtlIFtfaGVfXShodHRwczovL210aHMuYmUvaGUpLlxuICAgICAqXG4gICAgICogVGhvdWdoIHRoZSBcIj5cIiBjaGFyYWN0ZXIgaXMgZXNjYXBlZCBmb3Igc3ltbWV0cnksIGNoYXJhY3RlcnMgbGlrZVxuICAgICAqIFwiPlwiIGFuZCBcIi9cIiBkb24ndCBuZWVkIGVzY2FwaW5nIGluIEhUTUwgYW5kIGhhdmUgbm8gc3BlY2lhbCBtZWFuaW5nXG4gICAgICogdW5sZXNzIHRoZXkncmUgcGFydCBvZiBhIHRhZyBvciB1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuIFNlZVxuICAgICAqIFtNYXRoaWFzIEJ5bmVucydzIGFydGljbGVdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9hbWJpZ3VvdXMtYW1wZXJzYW5kcylcbiAgICAgKiAodW5kZXIgXCJzZW1pLXJlbGF0ZWQgZnVuIGZhY3RcIikgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKlxuICAgICAqIFdoZW4gd29ya2luZyB3aXRoIEhUTUwgeW91IHNob3VsZCBhbHdheXNcbiAgICAgKiBbcXVvdGUgYXR0cmlidXRlIHZhbHVlc10oaHR0cDovL3dvbmtvLmNvbS9wb3N0L2h0bWwtZXNjYXBpbmcpIHRvIHJlZHVjZVxuICAgICAqIFhTUyB2ZWN0b3JzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5lc2NhcGUoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gICAgICogLy8gPT4gJ2ZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlcydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSlcbiAgICAgICAgPyBzdHJpbmcucmVwbGFjZShyZVVuZXNjYXBlZEh0bWwsIGVzY2FwZUh0bWxDaGFyKVxuICAgICAgICA6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFc2NhcGVzIHRoZSBgUmVnRXhwYCBzcGVjaWFsIGNoYXJhY3RlcnMgXCJeXCIsIFwiJFwiLCBcIlxcXCIsIFwiLlwiLCBcIipcIiwgXCIrXCIsXG4gICAgICogXCI/XCIsIFwiKFwiLCBcIilcIiwgXCJbXCIsIFwiXVwiLCBcIntcIiwgXCJ9XCIsIGFuZCBcInxcIiBpbiBgc3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZXNjYXBlUmVnRXhwKCdbbG9kYXNoXShodHRwczovL2xvZGFzaC5jb20vKScpO1xuICAgICAqIC8vID0+ICdcXFtsb2Rhc2hcXF1cXChodHRwczovL2xvZGFzaFxcLmNvbS9cXCknXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHJldHVybiAoc3RyaW5nICYmIHJlSGFzUmVnRXhwQ2hhci50ZXN0KHN0cmluZykpXG4gICAgICAgID8gc3RyaW5nLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgICAgICAgOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG9cbiAgICAgKiBba2ViYWIgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGV0dGVyX2Nhc2UjU3BlY2lhbF9jYXNlX3N0eWxlcykuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBrZWJhYiBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ua2ViYWJDYXNlKCdGb28gQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvby1iYXInXG4gICAgICpcbiAgICAgKiBfLmtlYmFiQ2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvby1iYXInXG4gICAgICpcbiAgICAgKiBfLmtlYmFiQ2FzZSgnX19GT09fQkFSX18nKTtcbiAgICAgKiAvLyA9PiAnZm9vLWJhcidcbiAgICAgKi9cbiAgICB2YXIga2ViYWJDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJy0nIDogJycpICsgd29yZC50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AsIGFzIHNwYWNlIHNlcGFyYXRlZCB3b3JkcywgdG8gbG93ZXIgY2FzZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGxvd2VyIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5sb3dlckNhc2UoJy0tRm9vLUJhci0tJyk7XG4gICAgICogLy8gPT4gJ2ZvbyBiYXInXG4gICAgICpcbiAgICAgKiBfLmxvd2VyQ2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ2ZvbyBiYXInXG4gICAgICpcbiAgICAgKiBfLmxvd2VyQ2FzZSgnX19GT09fQkFSX18nKTtcbiAgICAgKiAvLyA9PiAnZm9vIGJhcidcbiAgICAgKi9cbiAgICB2YXIgbG93ZXJDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJyAnIDogJycpICsgd29yZC50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3RyaW5nYCB0byBsb3dlciBjYXNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5sb3dlckZpcnN0KCdGcmVkJyk7XG4gICAgICogLy8gPT4gJ2ZyZWQnXG4gICAgICpcbiAgICAgKiBfLmxvd2VyRmlyc3QoJ0ZSRUQnKTtcbiAgICAgKiAvLyA9PiAnZlJFRCdcbiAgICAgKi9cbiAgICB2YXIgbG93ZXJGaXJzdCA9IGNyZWF0ZUNhc2VGaXJzdCgndG9Mb3dlckNhc2UnKTtcblxuICAgIC8qKlxuICAgICAqIFBhZHMgYHN0cmluZ2Agb24gdGhlIGxlZnQgYW5kIHJpZ2h0IHNpZGVzIGlmIGl0J3Mgc2hvcnRlciB0aGFuIGBsZW5ndGhgLlxuICAgICAqIFBhZGRpbmcgY2hhcmFjdGVycyBhcmUgdHJ1bmNhdGVkIGlmIHRoZXkgY2FuJ3QgYmUgZXZlbmx5IGRpdmlkZWQgYnkgYGxlbmd0aGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcGFkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPTBdIFRoZSBwYWRkaW5nIGxlbmd0aC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPScgJ10gVGhlIHN0cmluZyB1c2VkIGFzIHBhZGRpbmcuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcGFkZGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5wYWQoJ2FiYycsIDgpO1xuICAgICAqIC8vID0+ICcgIGFiYyAgICdcbiAgICAgKlxuICAgICAqIF8ucGFkKCdhYmMnLCA4LCAnXy0nKTtcbiAgICAgKiAvLyA9PiAnXy1hYmNfLV8nXG4gICAgICpcbiAgICAgKiBfLnBhZCgnYWJjJywgMyk7XG4gICAgICogLy8gPT4gJ2FiYydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYWQoc3RyaW5nLCBsZW5ndGgsIGNoYXJzKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgbGVuZ3RoID0gdG9JbnRlZ2VyKGxlbmd0aCk7XG5cbiAgICAgIHZhciBzdHJMZW5ndGggPSBsZW5ndGggPyBzdHJpbmdTaXplKHN0cmluZykgOiAwO1xuICAgICAgaWYgKCFsZW5ndGggfHwgc3RyTGVuZ3RoID49IGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgICAgdmFyIG1pZCA9IChsZW5ndGggLSBzdHJMZW5ndGgpIC8gMjtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGNyZWF0ZVBhZGRpbmcobmF0aXZlRmxvb3IobWlkKSwgY2hhcnMpICtcbiAgICAgICAgc3RyaW5nICtcbiAgICAgICAgY3JlYXRlUGFkZGluZyhuYXRpdmVDZWlsKG1pZCksIGNoYXJzKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYWRzIGBzdHJpbmdgIG9uIHRoZSByaWdodCBzaWRlIGlmIGl0J3Mgc2hvcnRlciB0aGFuIGBsZW5ndGhgLiBQYWRkaW5nXG4gICAgICogY2hhcmFjdGVycyBhcmUgdHJ1bmNhdGVkIGlmIHRoZXkgZXhjZWVkIGBsZW5ndGhgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHBhZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD0wXSBUaGUgcGFkZGluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHBhZGRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucGFkRW5kKCdhYmMnLCA2KTtcbiAgICAgKiAvLyA9PiAnYWJjICAgJ1xuICAgICAqXG4gICAgICogXy5wYWRFbmQoJ2FiYycsIDYsICdfLScpO1xuICAgICAqIC8vID0+ICdhYmNfLV8nXG4gICAgICpcbiAgICAgKiBfLnBhZEVuZCgnYWJjJywgMyk7XG4gICAgICogLy8gPT4gJ2FiYydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYWRFbmQoc3RyaW5nLCBsZW5ndGgsIGNoYXJzKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgbGVuZ3RoID0gdG9JbnRlZ2VyKGxlbmd0aCk7XG5cbiAgICAgIHZhciBzdHJMZW5ndGggPSBsZW5ndGggPyBzdHJpbmdTaXplKHN0cmluZykgOiAwO1xuICAgICAgcmV0dXJuIChsZW5ndGggJiYgc3RyTGVuZ3RoIDwgbGVuZ3RoKVxuICAgICAgICA/IChzdHJpbmcgKyBjcmVhdGVQYWRkaW5nKGxlbmd0aCAtIHN0ckxlbmd0aCwgY2hhcnMpKVxuICAgICAgICA6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYWRzIGBzdHJpbmdgIG9uIHRoZSBsZWZ0IHNpZGUgaWYgaXQncyBzaG9ydGVyIHRoYW4gYGxlbmd0aGAuIFBhZGRpbmdcbiAgICAgKiBjaGFyYWN0ZXJzIGFyZSB0cnVuY2F0ZWQgaWYgdGhleSBleGNlZWQgYGxlbmd0aGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcGFkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPTBdIFRoZSBwYWRkaW5nIGxlbmd0aC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPScgJ10gVGhlIHN0cmluZyB1c2VkIGFzIHBhZGRpbmcuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcGFkZGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5wYWRTdGFydCgnYWJjJywgNik7XG4gICAgICogLy8gPT4gJyAgIGFiYydcbiAgICAgKlxuICAgICAqIF8ucGFkU3RhcnQoJ2FiYycsIDYsICdfLScpO1xuICAgICAqIC8vID0+ICdfLV9hYmMnXG4gICAgICpcbiAgICAgKiBfLnBhZFN0YXJ0KCdhYmMnLCAzKTtcbiAgICAgKiAvLyA9PiAnYWJjJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhZFN0YXJ0KHN0cmluZywgbGVuZ3RoLCBjaGFycykge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIGxlbmd0aCA9IHRvSW50ZWdlcihsZW5ndGgpO1xuXG4gICAgICB2YXIgc3RyTGVuZ3RoID0gbGVuZ3RoID8gc3RyaW5nU2l6ZShzdHJpbmcpIDogMDtcbiAgICAgIHJldHVybiAobGVuZ3RoICYmIHN0ckxlbmd0aCA8IGxlbmd0aClcbiAgICAgICAgPyAoY3JlYXRlUGFkZGluZyhsZW5ndGggLSBzdHJMZW5ndGgsIGNoYXJzKSArIHN0cmluZylcbiAgICAgICAgOiBzdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG8gYW4gaW50ZWdlciBvZiB0aGUgc3BlY2lmaWVkIHJhZGl4LiBJZiBgcmFkaXhgIGlzXG4gICAgICogYHVuZGVmaW5lZGAgb3IgYDBgLCBhIGByYWRpeGAgb2YgYDEwYCBpcyB1c2VkIHVubGVzcyBgdmFsdWVgIGlzIGFcbiAgICAgKiBoZXhhZGVjaW1hbCwgaW4gd2hpY2ggY2FzZSBhIGByYWRpeGAgb2YgYDE2YCBpcyB1c2VkLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGFsaWducyB3aXRoIHRoZVxuICAgICAqIFtFUzUgaW1wbGVtZW50YXRpb25dKGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDE1LjEuMi4yKSBvZiBgcGFyc2VJbnRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMS4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcmFkaXg9MTBdIFRoZSByYWRpeCB0byBpbnRlcnByZXQgYHZhbHVlYCBieS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBpbnRlZ2VyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnBhcnNlSW50KCcwOCcpO1xuICAgICAqIC8vID0+IDhcbiAgICAgKlxuICAgICAqIF8ubWFwKFsnNicsICcwOCcsICcxMCddLCBfLnBhcnNlSW50KTtcbiAgICAgKiAvLyA9PiBbNiwgOCwgMTBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcGFyc2VJbnQoc3RyaW5nLCByYWRpeCwgZ3VhcmQpIHtcbiAgICAgIGlmIChndWFyZCB8fCByYWRpeCA9PSBudWxsKSB7XG4gICAgICAgIHJhZGl4ID0gMDtcbiAgICAgIH0gZWxzZSBpZiAocmFkaXgpIHtcbiAgICAgICAgcmFkaXggPSArcmFkaXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmF0aXZlUGFyc2VJbnQodG9TdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlVHJpbVN0YXJ0LCAnJyksIHJhZGl4IHx8IDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcGVhdHMgdGhlIGdpdmVuIHN0cmluZyBgbmAgdGltZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcmVwZWF0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgc3RyaW5nLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmVwZWF0ZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJlcGVhdCgnKicsIDMpO1xuICAgICAqIC8vID0+ICcqKionXG4gICAgICpcbiAgICAgKiBfLnJlcGVhdCgnYWJjJywgMik7XG4gICAgICogLy8gPT4gJ2FiY2FiYydcbiAgICAgKlxuICAgICAqIF8ucmVwZWF0KCdhYmMnLCAwKTtcbiAgICAgKiAvLyA9PiAnJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlcGVhdChzdHJpbmcsIG4sIGd1YXJkKSB7XG4gICAgICBpZiAoKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBuLCBndWFyZCkgOiBuID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIG4gPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbiA9IHRvSW50ZWdlcihuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlUmVwZWF0KHRvU3RyaW5nKHN0cmluZyksIG4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2VzIG1hdGNoZXMgZm9yIGBwYXR0ZXJuYCBpbiBgc3RyaW5nYCB3aXRoIGByZXBsYWNlbWVudGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgKiBbYFN0cmluZyNyZXBsYWNlYF0oaHR0cHM6Ly9tZG4uaW8vU3RyaW5nL3JlcGxhY2UpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cHxzdHJpbmd9IHBhdHRlcm4gVGhlIHBhdHRlcm4gdG8gcmVwbGFjZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gcmVwbGFjZW1lbnQgVGhlIG1hdGNoIHJlcGxhY2VtZW50LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIG1vZGlmaWVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yZXBsYWNlKCdIaSBGcmVkJywgJ0ZyZWQnLCAnQmFybmV5Jyk7XG4gICAgICogLy8gPT4gJ0hpIEJhcm5leSdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXBsYWNlKCkge1xuICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgc3RyaW5nID0gdG9TdHJpbmcoYXJnc1swXSk7XG5cbiAgICAgIHJldHVybiBhcmdzLmxlbmd0aCA8IDMgPyBzdHJpbmcgOiBzdHJpbmcucmVwbGFjZShhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0b1xuICAgICAqIFtzbmFrZSBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TbmFrZV9jYXNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNuYWtlIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zbmFrZUNhc2UoJ0ZvbyBCYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vX2JhcidcbiAgICAgKlxuICAgICAqIF8uc25ha2VDYXNlKCdmb29CYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vX2JhcidcbiAgICAgKlxuICAgICAqIF8uc25ha2VDYXNlKCctLUZPTy1CQVItLScpO1xuICAgICAqIC8vID0+ICdmb29fYmFyJ1xuICAgICAqL1xuICAgIHZhciBzbmFrZUNhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyAnXycgOiAnJykgKyB3b3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBTcGxpdHMgYHN0cmluZ2AgYnkgYHNlcGFyYXRvcmAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgKiBbYFN0cmluZyNzcGxpdGBdKGh0dHBzOi8vbWRuLmlvL1N0cmluZy9zcGxpdCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gc3BsaXQuXG4gICAgICogQHBhcmFtIHtSZWdFeHB8c3RyaW5nfSBzZXBhcmF0b3IgVGhlIHNlcGFyYXRvciBwYXR0ZXJuIHRvIHNwbGl0IGJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGltaXRdIFRoZSBsZW5ndGggdG8gdHJ1bmNhdGUgcmVzdWx0cyB0by5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHN0cmluZyBzZWdtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zcGxpdCgnYS1iLWMnLCAnLScsIDIpO1xuICAgICAqIC8vID0+IFsnYScsICdiJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzcGxpdChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIGlmIChsaW1pdCAmJiB0eXBlb2YgbGltaXQgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KSkge1xuICAgICAgICBzZXBhcmF0b3IgPSBsaW1pdCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGxpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9BUlJBWV9MRU5HVEggOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmICghbGltaXQpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIGlmIChzdHJpbmcgJiYgKFxuICAgICAgICAgICAgdHlwZW9mIHNlcGFyYXRvciA9PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgKHNlcGFyYXRvciAhPSBudWxsICYmICFpc1JlZ0V4cChzZXBhcmF0b3IpKVxuICAgICAgICAgICkpIHtcbiAgICAgICAgc2VwYXJhdG9yID0gYmFzZVRvU3RyaW5nKHNlcGFyYXRvcik7XG4gICAgICAgIGlmICghc2VwYXJhdG9yICYmIGhhc1VuaWNvZGUoc3RyaW5nKSkge1xuICAgICAgICAgIHJldHVybiBjYXN0U2xpY2Uoc3RyaW5nVG9BcnJheShzdHJpbmcpLCAwLCBsaW1pdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHJpbmcuc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG9cbiAgICAgKiBbc3RhcnQgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGV0dGVyX2Nhc2UjU3R5bGlzdGljX29yX3NwZWNpYWxpc2VkX3VzYWdlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjEuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0YXJ0IGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zdGFydENhc2UoJy0tZm9vLWJhci0tJyk7XG4gICAgICogLy8gPT4gJ0ZvbyBCYXInXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0Q2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ0ZvbyBCYXInXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0Q2FzZSgnX19GT09fQkFSX18nKTtcbiAgICAgKiAvLyA9PiAnRk9PIEJBUidcbiAgICAgKi9cbiAgICB2YXIgc3RhcnRDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJyAnIDogJycpICsgdXBwZXJGaXJzdCh3b3JkKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgc3RyaW5nYCBzdGFydHMgd2l0aCB0aGUgZ2l2ZW4gdGFyZ2V0IHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdGFyZ2V0XSBUaGUgc3RyaW5nIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwb3NpdGlvbj0wXSBUaGUgcG9zaXRpb24gdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBzdHJpbmdgIHN0YXJ0cyB3aXRoIGB0YXJnZXRgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc3RhcnRzV2l0aCgnYWJjJywgJ2EnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0c1dpdGgoJ2FiYycsICdiJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uc3RhcnRzV2l0aCgnYWJjJywgJ2InLCAxKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhcnRzV2l0aChzdHJpbmcsIHRhcmdldCwgcG9zaXRpb24pIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uID09IG51bGxcbiAgICAgICAgPyAwXG4gICAgICAgIDogYmFzZUNsYW1wKHRvSW50ZWdlcihwb3NpdGlvbiksIDAsIHN0cmluZy5sZW5ndGgpO1xuXG4gICAgICB0YXJnZXQgPSBiYXNlVG9TdHJpbmcodGFyZ2V0KTtcbiAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgdGFyZ2V0Lmxlbmd0aCkgPT0gdGFyZ2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjb21waWxlZCB0ZW1wbGF0ZSBmdW5jdGlvbiB0aGF0IGNhbiBpbnRlcnBvbGF0ZSBkYXRhIHByb3BlcnRpZXNcbiAgICAgKiBpbiBcImludGVycG9sYXRlXCIgZGVsaW1pdGVycywgSFRNTC1lc2NhcGUgaW50ZXJwb2xhdGVkIGRhdGEgcHJvcGVydGllcyBpblxuICAgICAqIFwiZXNjYXBlXCIgZGVsaW1pdGVycywgYW5kIGV4ZWN1dGUgSmF2YVNjcmlwdCBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy4gRGF0YVxuICAgICAqIHByb3BlcnRpZXMgbWF5IGJlIGFjY2Vzc2VkIGFzIGZyZWUgdmFyaWFibGVzIGluIHRoZSB0ZW1wbGF0ZS4gSWYgYSBzZXR0aW5nXG4gICAgICogb2JqZWN0IGlzIGdpdmVuLCBpdCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYF8udGVtcGxhdGVTZXR0aW5nc2AgdmFsdWVzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIEluIHRoZSBkZXZlbG9wbWVudCBidWlsZCBgXy50ZW1wbGF0ZWAgdXRpbGl6ZXNcbiAgICAgKiBbc291cmNlVVJMc10oaHR0cDovL3d3dy5odG1sNXJvY2tzLmNvbS9lbi90dXRvcmlhbHMvZGV2ZWxvcGVydG9vbHMvc291cmNlbWFwcy8jdG9jLXNvdXJjZXVybClcbiAgICAgKiBmb3IgZWFzaWVyIGRlYnVnZ2luZy5cbiAgICAgKlxuICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHByZWNvbXBpbGluZyB0ZW1wbGF0ZXMgc2VlXG4gICAgICogW2xvZGFzaCdzIGN1c3RvbSBidWlsZHMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9sb2Rhc2guY29tL2N1c3RvbS1idWlsZHMpLlxuICAgICAqXG4gICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gQ2hyb21lIGV4dGVuc2lvbiBzYW5kYm94ZXMgc2VlXG4gICAgICogW0Nocm9tZSdzIGV4dGVuc2lvbnMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9leHRlbnNpb25zL3NhbmRib3hpbmdFdmFsKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHRlbXBsYXRlIHN0cmluZy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuZXNjYXBlPV8udGVtcGxhdGVTZXR0aW5ncy5lc2NhcGVdXG4gICAgICogIFRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyLlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfSBbb3B0aW9ucy5ldmFsdWF0ZT1fLnRlbXBsYXRlU2V0dGluZ3MuZXZhbHVhdGVdXG4gICAgICogIFRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5pbXBvcnRzPV8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXVxuICAgICAqICBBbiBvYmplY3QgdG8gaW1wb3J0IGludG8gdGhlIHRlbXBsYXRlIGFzIGZyZWUgdmFyaWFibGVzLlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfSBbb3B0aW9ucy5pbnRlcnBvbGF0ZT1fLnRlbXBsYXRlU2V0dGluZ3MuaW50ZXJwb2xhdGVdXG4gICAgICogIFRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zb3VyY2VVUkw9J2xvZGFzaC50ZW1wbGF0ZVNvdXJjZXNbbl0nXVxuICAgICAqICBUaGUgc291cmNlVVJMIG9mIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudmFyaWFibGU9J29iaiddXG4gICAgICogIFRoZSBkYXRhIG9iamVjdCB2YXJpYWJsZSBuYW1lLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBjb21waWxlZCB0ZW1wbGF0ZSBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyIHRvIGNyZWF0ZSBhIGNvbXBpbGVkIHRlbXBsYXRlLlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvIDwlPSB1c2VyICU+IScpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnZnJlZCcgfSk7XG4gICAgICogLy8gPT4gJ2hlbGxvIGZyZWQhJ1xuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyIHRvIGVzY2FwZSBkYXRhIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8Yj48JS0gdmFsdWUgJT48L2I+Jyk7XG4gICAgICogY29tcGlsZWQoeyAndmFsdWUnOiAnPHNjcmlwdD4nIH0pO1xuICAgICAqIC8vID0+ICc8Yj4mbHQ7c2NyaXB0Jmd0OzwvYj4nXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXIgdG8gZXhlY3V0ZSBKYXZhU2NyaXB0IGFuZCBnZW5lcmF0ZSBIVE1MLlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIF8uZm9yRWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+Jyk7XG4gICAgICogY29tcGlsZWQoeyAndXNlcnMnOiBbJ2ZyZWQnLCAnYmFybmV5J10gfSk7XG4gICAgICogLy8gPT4gJzxsaT5mcmVkPC9saT48bGk+YmFybmV5PC9saT4nXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIGludGVybmFsIGBwcmludGAgZnVuY3Rpb24gaW4gXCJldmFsdWF0ZVwiIGRlbGltaXRlcnMuXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCUgcHJpbnQoXCJoZWxsbyBcIiArIHVzZXIpOyAlPiEnKTtcbiAgICAgKiBjb21waWxlZCh7ICd1c2VyJzogJ2Jhcm5leScgfSk7XG4gICAgICogLy8gPT4gJ2hlbGxvIGJhcm5leSEnXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIEVTIHRlbXBsYXRlIGxpdGVyYWwgZGVsaW1pdGVyIGFzIGFuIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gICAgICogLy8gRGlzYWJsZSBzdXBwb3J0IGJ5IHJlcGxhY2luZyB0aGUgXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlci5cbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyAkeyB1c2VyIH0hJyk7XG4gICAgICogY29tcGlsZWQoeyAndXNlcic6ICdwZWJibGVzJyB9KTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gcGViYmxlcyEnXG4gICAgICpcbiAgICAgKiAvLyBVc2UgYmFja3NsYXNoZXMgdG8gdHJlYXQgZGVsaW1pdGVycyBhcyBwbGFpbiB0ZXh0LlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlPSBcIlxcXFw8JS0gdmFsdWUgJVxcXFw+XCIgJT4nKTtcbiAgICAgKiBjb21waWxlZCh7ICd2YWx1ZSc6ICdpZ25vcmVkJyB9KTtcbiAgICAgKiAvLyA9PiAnPCUtIHZhbHVlICU+J1xuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBgaW1wb3J0c2Agb3B0aW9uIHRvIGltcG9ydCBgalF1ZXJ5YCBhcyBganFgLlxuICAgICAqIHZhciB0ZXh0ID0gJzwlIGpxLmVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsgJT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPic7XG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSh0ZXh0LCB7ICdpbXBvcnRzJzogeyAnanEnOiBqUXVlcnkgfSB9KTtcbiAgICAgKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAgICAgKiAvLyA9PiAnPGxpPmZyZWQ8L2xpPjxsaT5iYXJuZXk8L2xpPidcbiAgICAgKlxuICAgICAqIC8vIFVzZSB0aGUgYHNvdXJjZVVSTGAgb3B0aW9uIHRvIHNwZWNpZnkgYSBjdXN0b20gc291cmNlVVJMIGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJywgeyAnc291cmNlVVJMJzogJy9iYXNpYy9ncmVldGluZy5qc3QnIH0pO1xuICAgICAqIGNvbXBpbGVkKGRhdGEpO1xuICAgICAqIC8vID0+IEZpbmQgdGhlIHNvdXJjZSBvZiBcImdyZWV0aW5nLmpzdFwiIHVuZGVyIHRoZSBTb3VyY2VzIHRhYiBvciBSZXNvdXJjZXMgcGFuZWwgb2YgdGhlIHdlYiBpbnNwZWN0b3IuXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIGB2YXJpYWJsZWAgb3B0aW9uIHRvIGVuc3VyZSBhIHdpdGgtc3RhdGVtZW50IGlzbid0IHVzZWQgaW4gdGhlIGNvbXBpbGVkIHRlbXBsYXRlLlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hpIDwlPSBkYXRhLnVzZXIgJT4hJywgeyAndmFyaWFibGUnOiAnZGF0YScgfSk7XG4gICAgICogY29tcGlsZWQuc291cmNlO1xuICAgICAqIC8vID0+IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgKiAvLyAgIHZhciBfX3QsIF9fcCA9ICcnO1xuICAgICAqIC8vICAgX19wICs9ICdoaSAnICsgKChfX3QgPSAoIGRhdGEudXNlciApKSA9PSBudWxsID8gJycgOiBfX3QpICsgJyEnO1xuICAgICAqIC8vICAgcmV0dXJuIF9fcDtcbiAgICAgKiAvLyB9XG4gICAgICpcbiAgICAgKiAvLyBVc2UgY3VzdG9tIHRlbXBsYXRlIGRlbGltaXRlcnMuXG4gICAgICogXy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlID0gL3t7KFtcXHNcXFNdKz8pfX0vZztcbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyB7eyB1c2VyIH19IScpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnbXVzdGFjaGUnIH0pO1xuICAgICAqIC8vID0+ICdoZWxsbyBtdXN0YWNoZSEnXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIGBzb3VyY2VgIHByb3BlcnR5IHRvIGlubGluZSBjb21waWxlZCB0ZW1wbGF0ZXMgZm9yIG1lYW5pbmdmdWxcbiAgICAgKiAvLyBsaW5lIG51bWJlcnMgaW4gZXJyb3IgbWVzc2FnZXMgYW5kIHN0YWNrIHRyYWNlcy5cbiAgICAgKiBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnanN0LmpzJyksICdcXFxuICAgICAqICAgdmFyIEpTVCA9IHtcXFxuICAgICAqICAgICBcIm1haW5cIjogJyArIF8udGVtcGxhdGUobWFpblRleHQpLnNvdXJjZSArICdcXFxuICAgICAqICAgfTtcXFxuICAgICAqICcpO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRlbXBsYXRlKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpIHtcbiAgICAgIC8vIEJhc2VkIG9uIEpvaG4gUmVzaWcncyBgdG1wbGAgaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIChodHRwOi8vZWpvaG4ub3JnL2Jsb2cvamF2YXNjcmlwdC1taWNyby10ZW1wbGF0aW5nLylcbiAgICAgIC8vIGFuZCBMYXVyYSBEb2t0b3JvdmEncyBkb1QuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9vbGFkby9kb1QpLlxuICAgICAgdmFyIHNldHRpbmdzID0gbG9kYXNoLnRlbXBsYXRlU2V0dGluZ3M7XG5cbiAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzdHJpbmcsIG9wdGlvbnMsIGd1YXJkKSkge1xuICAgICAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIG9wdGlvbnMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMsIHNldHRpbmdzLCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKTtcblxuICAgICAgdmFyIGltcG9ydHMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMuaW1wb3J0cywgc2V0dGluZ3MuaW1wb3J0cywgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiksXG4gICAgICAgICAgaW1wb3J0c0tleXMgPSBrZXlzKGltcG9ydHMpLFxuICAgICAgICAgIGltcG9ydHNWYWx1ZXMgPSBiYXNlVmFsdWVzKGltcG9ydHMsIGltcG9ydHNLZXlzKTtcblxuICAgICAgdmFyIGlzRXNjYXBpbmcsXG4gICAgICAgICAgaXNFdmFsdWF0aW5nLFxuICAgICAgICAgIGluZGV4ID0gMCxcbiAgICAgICAgICBpbnRlcnBvbGF0ZSA9IG9wdGlvbnMuaW50ZXJwb2xhdGUgfHwgcmVOb01hdGNoLFxuICAgICAgICAgIHNvdXJjZSA9IFwiX19wICs9ICdcIjtcblxuICAgICAgLy8gQ29tcGlsZSB0aGUgcmVnZXhwIHRvIG1hdGNoIGVhY2ggZGVsaW1pdGVyLlxuICAgICAgdmFyIHJlRGVsaW1pdGVycyA9IFJlZ0V4cChcbiAgICAgICAgKG9wdGlvbnMuZXNjYXBlIHx8IHJlTm9NYXRjaCkuc291cmNlICsgJ3wnICtcbiAgICAgICAgaW50ZXJwb2xhdGUuc291cmNlICsgJ3wnICtcbiAgICAgICAgKGludGVycG9sYXRlID09PSByZUludGVycG9sYXRlID8gcmVFc1RlbXBsYXRlIDogcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgICAgICAob3B0aW9ucy5ldmFsdWF0ZSB8fCByZU5vTWF0Y2gpLnNvdXJjZSArICd8JCdcbiAgICAgICwgJ2cnKTtcblxuICAgICAgLy8gVXNlIGEgc291cmNlVVJMIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICAgICAgLy8gVGhlIHNvdXJjZVVSTCBnZXRzIGluamVjdGVkIGludG8gdGhlIHNvdXJjZSB0aGF0J3MgZXZhbC1lZCwgc28gYmUgY2FyZWZ1bFxuICAgICAgLy8gdG8gbm9ybWFsaXplIGFsbCBraW5kcyBvZiB3aGl0ZXNwYWNlLCBzbyBlLmcuIG5ld2xpbmVzIChhbmQgdW5pY29kZSB2ZXJzaW9ucyBvZiBpdCkgY2FuJ3Qgc25lYWsgaW5cbiAgICAgIC8vIGFuZCBlc2NhcGUgdGhlIGNvbW1lbnQsIHRodXMgaW5qZWN0aW5nIGNvZGUgdGhhdCBnZXRzIGV2YWxlZC5cbiAgICAgIHZhciBzb3VyY2VVUkwgPSAnLy8jIHNvdXJjZVVSTD0nICtcbiAgICAgICAgKGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3NvdXJjZVVSTCcpXG4gICAgICAgICAgPyAob3B0aW9ucy5zb3VyY2VVUkwgKyAnJykucmVwbGFjZSgvXFxzL2csICcgJylcbiAgICAgICAgICA6ICgnbG9kYXNoLnRlbXBsYXRlU291cmNlc1snICsgKCsrdGVtcGxhdGVDb3VudGVyKSArICddJylcbiAgICAgICAgKSArICdcXG4nO1xuXG4gICAgICBzdHJpbmcucmVwbGFjZShyZURlbGltaXRlcnMsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGVWYWx1ZSwgaW50ZXJwb2xhdGVWYWx1ZSwgZXNUZW1wbGF0ZVZhbHVlLCBldmFsdWF0ZVZhbHVlLCBvZmZzZXQpIHtcbiAgICAgICAgaW50ZXJwb2xhdGVWYWx1ZSB8fCAoaW50ZXJwb2xhdGVWYWx1ZSA9IGVzVGVtcGxhdGVWYWx1ZSk7XG5cbiAgICAgICAgLy8gRXNjYXBlIGNoYXJhY3RlcnMgdGhhdCBjYW4ndCBiZSBpbmNsdWRlZCBpbiBzdHJpbmcgbGl0ZXJhbHMuXG4gICAgICAgIHNvdXJjZSArPSBzdHJpbmcuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShyZVVuZXNjYXBlZFN0cmluZywgZXNjYXBlU3RyaW5nQ2hhcik7XG5cbiAgICAgICAgLy8gUmVwbGFjZSBkZWxpbWl0ZXJzIHdpdGggc25pcHBldHMuXG4gICAgICAgIGlmIChlc2NhcGVWYWx1ZSkge1xuICAgICAgICAgIGlzRXNjYXBpbmcgPSB0cnVlO1xuICAgICAgICAgIHNvdXJjZSArPSBcIicgK1xcbl9fZShcIiArIGVzY2FwZVZhbHVlICsgXCIpICtcXG4nXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2YWx1YXRlVmFsdWUpIHtcbiAgICAgICAgICBpc0V2YWx1YXRpbmcgPSB0cnVlO1xuICAgICAgICAgIHNvdXJjZSArPSBcIic7XFxuXCIgKyBldmFsdWF0ZVZhbHVlICsgXCI7XFxuX19wICs9ICdcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW50ZXJwb2xhdGVWYWx1ZSkge1xuICAgICAgICAgIHNvdXJjZSArPSBcIicgK1xcbigoX190ID0gKFwiICsgaW50ZXJwb2xhdGVWYWx1ZSArIFwiKSkgPT0gbnVsbCA/ICcnIDogX190KSArXFxuJ1wiO1xuICAgICAgICB9XG4gICAgICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgICAgIC8vIFRoZSBKUyBlbmdpbmUgZW1iZWRkZWQgaW4gQWRvYmUgcHJvZHVjdHMgbmVlZHMgYG1hdGNoYCByZXR1cm5lZCBpblxuICAgICAgICAvLyBvcmRlciB0byBwcm9kdWNlIHRoZSBjb3JyZWN0IGBvZmZzZXRgIHZhbHVlLlxuICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICB9KTtcblxuICAgICAgc291cmNlICs9IFwiJztcXG5cIjtcblxuICAgICAgLy8gSWYgYHZhcmlhYmxlYCBpcyBub3Qgc3BlY2lmaWVkIHdyYXAgYSB3aXRoLXN0YXRlbWVudCBhcm91bmQgdGhlIGdlbmVyYXRlZFxuICAgICAgLy8gY29kZSB0byBhZGQgdGhlIGRhdGEgb2JqZWN0IHRvIHRoZSB0b3Agb2YgdGhlIHNjb3BlIGNoYWluLlxuICAgICAgdmFyIHZhcmlhYmxlID0gaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAndmFyaWFibGUnKSAmJiBvcHRpb25zLnZhcmlhYmxlO1xuICAgICAgaWYgKCF2YXJpYWJsZSkge1xuICAgICAgICBzb3VyY2UgPSAnd2l0aCAob2JqKSB7XFxuJyArIHNvdXJjZSArICdcXG59XFxuJztcbiAgICAgIH1cbiAgICAgIC8vIFRocm93IGFuIGVycm9yIGlmIGEgZm9yYmlkZGVuIGNoYXJhY3RlciB3YXMgZm91bmQgaW4gYHZhcmlhYmxlYCwgdG8gcHJldmVudFxuICAgICAgLy8gcG90ZW50aWFsIGNvbW1hbmQgaW5qZWN0aW9uIGF0dGFja3MuXG4gICAgICBlbHNlIGlmIChyZUZvcmJpZGRlbklkZW50aWZpZXJDaGFycy50ZXN0KHZhcmlhYmxlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5WQUxJRF9URU1QTF9WQVJfRVJST1JfVEVYVCk7XG4gICAgICB9XG5cbiAgICAgIC8vIENsZWFudXAgY29kZSBieSBzdHJpcHBpbmcgZW1wdHkgc3RyaW5ncy5cbiAgICAgIHNvdXJjZSA9IChpc0V2YWx1YXRpbmcgPyBzb3VyY2UucmVwbGFjZShyZUVtcHR5U3RyaW5nTGVhZGluZywgJycpIDogc291cmNlKVxuICAgICAgICAucmVwbGFjZShyZUVtcHR5U3RyaW5nTWlkZGxlLCAnJDEnKVxuICAgICAgICAucmVwbGFjZShyZUVtcHR5U3RyaW5nVHJhaWxpbmcsICckMTsnKTtcblxuICAgICAgLy8gRnJhbWUgY29kZSBhcyB0aGUgZnVuY3Rpb24gYm9keS5cbiAgICAgIHNvdXJjZSA9ICdmdW5jdGlvbignICsgKHZhcmlhYmxlIHx8ICdvYmonKSArICcpIHtcXG4nICtcbiAgICAgICAgKHZhcmlhYmxlXG4gICAgICAgICAgPyAnJ1xuICAgICAgICAgIDogJ29iaiB8fCAob2JqID0ge30pO1xcbidcbiAgICAgICAgKSArXG4gICAgICAgIFwidmFyIF9fdCwgX19wID0gJydcIiArXG4gICAgICAgIChpc0VzY2FwaW5nXG4gICAgICAgICAgID8gJywgX19lID0gXy5lc2NhcGUnXG4gICAgICAgICAgIDogJydcbiAgICAgICAgKSArXG4gICAgICAgIChpc0V2YWx1YXRpbmdcbiAgICAgICAgICA/ICcsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xcbicgK1xuICAgICAgICAgICAgXCJmdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH1cXG5cIlxuICAgICAgICAgIDogJztcXG4nXG4gICAgICAgICkgK1xuICAgICAgICBzb3VyY2UgK1xuICAgICAgICAncmV0dXJuIF9fcFxcbn0nO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gYXR0ZW1wdChmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEZ1bmN0aW9uKGltcG9ydHNLZXlzLCBzb3VyY2VVUkwgKyAncmV0dXJuICcgKyBzb3VyY2UpXG4gICAgICAgICAgLmFwcGx5KHVuZGVmaW5lZCwgaW1wb3J0c1ZhbHVlcyk7XG4gICAgICB9KTtcblxuICAgICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24ncyBzb3VyY2UgYnkgaXRzIGB0b1N0cmluZ2AgbWV0aG9kIG9yXG4gICAgICAvLyB0aGUgYHNvdXJjZWAgcHJvcGVydHkgYXMgYSBjb252ZW5pZW5jZSBmb3IgaW5saW5pbmcgY29tcGlsZWQgdGVtcGxhdGVzLlxuICAgICAgcmVzdWx0LnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgIGlmIChpc0Vycm9yKHJlc3VsdCkpIHtcbiAgICAgICAgdGhyb3cgcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCwgYXMgYSB3aG9sZSwgdG8gbG93ZXIgY2FzZSBqdXN0IGxpa2VcbiAgICAgKiBbU3RyaW5nI3RvTG93ZXJDYXNlXShodHRwczovL21kbi5pby90b0xvd2VyQ2FzZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBsb3dlciBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9Mb3dlcignLS1Gb28tQmFyLS0nKTtcbiAgICAgKiAvLyA9PiAnLS1mb28tYmFyLS0nXG4gICAgICpcbiAgICAgKiBfLnRvTG93ZXIoJ2Zvb0JhcicpO1xuICAgICAqIC8vID0+ICdmb29iYXInXG4gICAgICpcbiAgICAgKiBfLnRvTG93ZXIoJ19fRk9PX0JBUl9fJyk7XG4gICAgICogLy8gPT4gJ19fZm9vX2Jhcl9fJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvTG93ZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiB0b1N0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCwgYXMgYSB3aG9sZSwgdG8gdXBwZXIgY2FzZSBqdXN0IGxpa2VcbiAgICAgKiBbU3RyaW5nI3RvVXBwZXJDYXNlXShodHRwczovL21kbi5pby90b1VwcGVyQ2FzZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1cHBlciBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9VcHBlcignLS1mb28tYmFyLS0nKTtcbiAgICAgKiAvLyA9PiAnLS1GT08tQkFSLS0nXG4gICAgICpcbiAgICAgKiBfLnRvVXBwZXIoJ2Zvb0JhcicpO1xuICAgICAqIC8vID0+ICdGT09CQVInXG4gICAgICpcbiAgICAgKiBfLnRvVXBwZXIoJ19fZm9vX2Jhcl9fJyk7XG4gICAgICogLy8gPT4gJ19fRk9PX0JBUl9fJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvVXBwZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiB0b1N0cmluZyh2YWx1ZSkudG9VcHBlckNhc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2Ugb3Igc3BlY2lmaWVkIGNoYXJhY3RlcnMgZnJvbSBgc3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byB0cmltLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9d2hpdGVzcGFjZV0gVGhlIGNoYXJhY3RlcnMgdG8gdHJpbS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHRyaW1tZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRyaW0oJyAgYWJjICAnKTtcbiAgICAgKiAvLyA9PiAnYWJjJ1xuICAgICAqXG4gICAgICogXy50cmltKCctXy1hYmMtXy0nLCAnXy0nKTtcbiAgICAgKiAvLyA9PiAnYWJjJ1xuICAgICAqXG4gICAgICogXy5tYXAoWycgIGZvbyAgJywgJyAgYmFyICAnXSwgXy50cmltKTtcbiAgICAgKiAvLyA9PiBbJ2ZvbycsICdiYXInXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRyaW0oc3RyaW5nLCBjaGFycywgZ3VhcmQpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBpZiAoc3RyaW5nICYmIChndWFyZCB8fCBjaGFycyA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICByZXR1cm4gYmFzZVRyaW0oc3RyaW5nKTtcbiAgICAgIH1cbiAgICAgIGlmICghc3RyaW5nIHx8ICEoY2hhcnMgPSBiYXNlVG9TdHJpbmcoY2hhcnMpKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgICAgdmFyIHN0clN5bWJvbHMgPSBzdHJpbmdUb0FycmF5KHN0cmluZyksXG4gICAgICAgICAgY2hyU3ltYm9scyA9IHN0cmluZ1RvQXJyYXkoY2hhcnMpLFxuICAgICAgICAgIHN0YXJ0ID0gY2hhcnNTdGFydEluZGV4KHN0clN5bWJvbHMsIGNoclN5bWJvbHMpLFxuICAgICAgICAgIGVuZCA9IGNoYXJzRW5kSW5kZXgoc3RyU3ltYm9scywgY2hyU3ltYm9scykgKyAxO1xuXG4gICAgICByZXR1cm4gY2FzdFNsaWNlKHN0clN5bWJvbHMsIHN0YXJ0LCBlbmQpLmpvaW4oJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdHJhaWxpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz13aGl0ZXNwYWNlXSBUaGUgY2hhcmFjdGVycyB0byB0cmltLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJpbUVuZCgnICBhYmMgICcpO1xuICAgICAqIC8vID0+ICcgIGFiYydcbiAgICAgKlxuICAgICAqIF8udHJpbUVuZCgnLV8tYWJjLV8tJywgJ18tJyk7XG4gICAgICogLy8gPT4gJy1fLWFiYydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmltRW5kKHN0cmluZywgY2hhcnMsIGd1YXJkKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgaWYgKHN0cmluZyAmJiAoZ3VhcmQgfHwgY2hhcnMgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5zbGljZSgwLCB0cmltbWVkRW5kSW5kZXgoc3RyaW5nKSArIDEpO1xuICAgICAgfVxuICAgICAgaWYgKCFzdHJpbmcgfHwgIShjaGFycyA9IGJhc2VUb1N0cmluZyhjaGFycykpKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICB9XG4gICAgICB2YXIgc3RyU3ltYm9scyA9IHN0cmluZ1RvQXJyYXkoc3RyaW5nKSxcbiAgICAgICAgICBlbmQgPSBjaGFyc0VuZEluZGV4KHN0clN5bWJvbHMsIHN0cmluZ1RvQXJyYXkoY2hhcnMpKSArIDE7XG5cbiAgICAgIHJldHVybiBjYXN0U2xpY2Uoc3RyU3ltYm9scywgMCwgZW5kKS5qb2luKCcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGxlYWRpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz13aGl0ZXNwYWNlXSBUaGUgY2hhcmFjdGVycyB0byB0cmltLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJpbVN0YXJ0KCcgIGFiYyAgJyk7XG4gICAgICogLy8gPT4gJ2FiYyAgJ1xuICAgICAqXG4gICAgICogXy50cmltU3RhcnQoJy1fLWFiYy1fLScsICdfLScpO1xuICAgICAqIC8vID0+ICdhYmMtXy0nXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJpbVN0YXJ0KHN0cmluZywgY2hhcnMsIGd1YXJkKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgaWYgKHN0cmluZyAmJiAoZ3VhcmQgfHwgY2hhcnMgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlVHJpbVN0YXJ0LCAnJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXN0cmluZyB8fCAhKGNoYXJzID0gYmFzZVRvU3RyaW5nKGNoYXJzKSkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgIH1cbiAgICAgIHZhciBzdHJTeW1ib2xzID0gc3RyaW5nVG9BcnJheShzdHJpbmcpLFxuICAgICAgICAgIHN0YXJ0ID0gY2hhcnNTdGFydEluZGV4KHN0clN5bWJvbHMsIHN0cmluZ1RvQXJyYXkoY2hhcnMpKTtcblxuICAgICAgcmV0dXJuIGNhc3RTbGljZShzdHJTeW1ib2xzLCBzdGFydCkuam9pbignJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJ1bmNhdGVzIGBzdHJpbmdgIGlmIGl0J3MgbG9uZ2VyIHRoYW4gdGhlIGdpdmVuIG1heGltdW0gc3RyaW5nIGxlbmd0aC5cbiAgICAgKiBUaGUgbGFzdCBjaGFyYWN0ZXJzIG9mIHRoZSB0cnVuY2F0ZWQgc3RyaW5nIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBvbWlzc2lvblxuICAgICAqIHN0cmluZyB3aGljaCBkZWZhdWx0cyB0byBcIi4uLlwiLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRydW5jYXRlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sZW5ndGg9MzBdIFRoZSBtYXhpbXVtIHN0cmluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm9taXNzaW9uPScuLi4nXSBUaGUgc3RyaW5nIHRvIGluZGljYXRlIHRleHQgaXMgb21pdHRlZC5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cHxzdHJpbmd9IFtvcHRpb25zLnNlcGFyYXRvcl0gVGhlIHNlcGFyYXRvciBwYXR0ZXJuIHRvIHRydW5jYXRlIHRvLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHRydW5jYXRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nKTtcbiAgICAgKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvLi4uJ1xuICAgICAqXG4gICAgICogXy50cnVuY2F0ZSgnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvcmlubycsIHtcbiAgICAgKiAgICdsZW5ndGgnOiAyNCxcbiAgICAgKiAgICdzZXBhcmF0b3InOiAnICdcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLC4uLidcbiAgICAgKlxuICAgICAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nLCB7XG4gICAgICogICAnbGVuZ3RoJzogMjQsXG4gICAgICogICAnc2VwYXJhdG9yJzogLyw/ICsvXG4gICAgICogfSk7XG4gICAgICogLy8gPT4gJ2hpLWRpZGRseS1obyB0aGVyZS4uLidcbiAgICAgKlxuICAgICAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nLCB7XG4gICAgICogICAnb21pc3Npb24nOiAnIFsuLi5dJ1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWcgWy4uLl0nXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJ1bmNhdGUoc3RyaW5nLCBvcHRpb25zKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gREVGQVVMVF9UUlVOQ19MRU5HVEgsXG4gICAgICAgICAgb21pc3Npb24gPSBERUZBVUxUX1RSVU5DX09NSVNTSU9OO1xuXG4gICAgICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICAgICAgdmFyIHNlcGFyYXRvciA9ICdzZXBhcmF0b3InIGluIG9wdGlvbnMgPyBvcHRpb25zLnNlcGFyYXRvciA6IHNlcGFyYXRvcjtcbiAgICAgICAgbGVuZ3RoID0gJ2xlbmd0aCcgaW4gb3B0aW9ucyA/IHRvSW50ZWdlcihvcHRpb25zLmxlbmd0aCkgOiBsZW5ndGg7XG4gICAgICAgIG9taXNzaW9uID0gJ29taXNzaW9uJyBpbiBvcHRpb25zID8gYmFzZVRvU3RyaW5nKG9wdGlvbnMub21pc3Npb24pIDogb21pc3Npb247XG4gICAgICB9XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgICB2YXIgc3RyTGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgICAgIGlmIChoYXNVbmljb2RlKHN0cmluZykpIHtcbiAgICAgICAgdmFyIHN0clN5bWJvbHMgPSBzdHJpbmdUb0FycmF5KHN0cmluZyk7XG4gICAgICAgIHN0ckxlbmd0aCA9IHN0clN5bWJvbHMubGVuZ3RoO1xuICAgICAgfVxuICAgICAgaWYgKGxlbmd0aCA+PSBzdHJMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgIH1cbiAgICAgIHZhciBlbmQgPSBsZW5ndGggLSBzdHJpbmdTaXplKG9taXNzaW9uKTtcbiAgICAgIGlmIChlbmQgPCAxKSB7XG4gICAgICAgIHJldHVybiBvbWlzc2lvbjtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSBzdHJTeW1ib2xzXG4gICAgICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDAsIGVuZCkuam9pbignJylcbiAgICAgICAgOiBzdHJpbmcuc2xpY2UoMCwgZW5kKTtcblxuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQgKyBvbWlzc2lvbjtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJTeW1ib2xzKSB7XG4gICAgICAgIGVuZCArPSAocmVzdWx0Lmxlbmd0aCAtIGVuZCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNSZWdFeHAoc2VwYXJhdG9yKSkge1xuICAgICAgICBpZiAoc3RyaW5nLnNsaWNlKGVuZCkuc2VhcmNoKHNlcGFyYXRvcikpIHtcbiAgICAgICAgICB2YXIgbWF0Y2gsXG4gICAgICAgICAgICAgIHN1YnN0cmluZyA9IHJlc3VsdDtcblxuICAgICAgICAgIGlmICghc2VwYXJhdG9yLmdsb2JhbCkge1xuICAgICAgICAgICAgc2VwYXJhdG9yID0gUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIHRvU3RyaW5nKHJlRmxhZ3MuZXhlYyhzZXBhcmF0b3IpKSArICdnJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlcGFyYXRvci5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBzZXBhcmF0b3IuZXhlYyhzdWJzdHJpbmcpKSkge1xuICAgICAgICAgICAgdmFyIG5ld0VuZCA9IG1hdGNoLmluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgbmV3RW5kID09PSB1bmRlZmluZWQgPyBlbmQgOiBuZXdFbmQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0cmluZy5pbmRleE9mKGJhc2VUb1N0cmluZyhzZXBhcmF0b3IpLCBlbmQpICE9IGVuZCkge1xuICAgICAgICB2YXIgaW5kZXggPSByZXN1bHQubGFzdEluZGV4T2Yoc2VwYXJhdG9yKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0ICsgb21pc3Npb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGludmVyc2Ugb2YgYF8uZXNjYXBlYDsgdGhpcyBtZXRob2QgY29udmVydHMgdGhlIEhUTUwgZW50aXRpZXNcbiAgICAgKiBgJmFtcDtgLCBgJmx0O2AsIGAmZ3Q7YCwgYCZxdW90O2AsIGFuZCBgJiMzOTtgIGluIGBzdHJpbmdgIHRvXG4gICAgICogdGhlaXIgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXJzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vIG90aGVyIEhUTUwgZW50aXRpZXMgYXJlIHVuZXNjYXBlZC4gVG8gdW5lc2NhcGUgYWRkaXRpb25hbFxuICAgICAqIEhUTUwgZW50aXRpZXMgdXNlIGEgdGhpcmQtcGFydHkgbGlicmFyeSBsaWtlIFtfaGVfXShodHRwczovL210aHMuYmUvaGUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNi4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHVuZXNjYXBlLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHVuZXNjYXBlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udW5lc2NhcGUoJ2ZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlcycpO1xuICAgICAqIC8vID0+ICdmcmVkLCBiYXJuZXksICYgcGViYmxlcydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmVzY2FwZShzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICByZXR1cm4gKHN0cmluZyAmJiByZUhhc0VzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSlcbiAgICAgICAgPyBzdHJpbmcucmVwbGFjZShyZUVzY2FwZWRIdG1sLCB1bmVzY2FwZUh0bWxDaGFyKVxuICAgICAgICA6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCwgYXMgc3BhY2Ugc2VwYXJhdGVkIHdvcmRzLCB0byB1cHBlciBjYXNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdXBwZXIgY2FzZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVwcGVyQ2FzZSgnLS1mb28tYmFyJyk7XG4gICAgICogLy8gPT4gJ0ZPTyBCQVInXG4gICAgICpcbiAgICAgKiBfLnVwcGVyQ2FzZSgnZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ0ZPTyBCQVInXG4gICAgICpcbiAgICAgKiBfLnVwcGVyQ2FzZSgnX19mb29fYmFyX18nKTtcbiAgICAgKiAvLyA9PiAnRk9PIEJBUidcbiAgICAgKi9cbiAgICB2YXIgdXBwZXJDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJyAnIDogJycpICsgd29yZC50b1VwcGVyQ2FzZSgpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3RyaW5nYCB0byB1cHBlciBjYXNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51cHBlckZpcnN0KCdmcmVkJyk7XG4gICAgICogLy8gPT4gJ0ZyZWQnXG4gICAgICpcbiAgICAgKiBfLnVwcGVyRmlyc3QoJ0ZSRUQnKTtcbiAgICAgKiAvLyA9PiAnRlJFRCdcbiAgICAgKi9cbiAgICB2YXIgdXBwZXJGaXJzdCA9IGNyZWF0ZUNhc2VGaXJzdCgndG9VcHBlckNhc2UnKTtcblxuICAgIC8qKlxuICAgICAqIFNwbGl0cyBgc3RyaW5nYCBpbnRvIGFuIGFycmF5IG9mIGl0cyB3b3Jkcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gW3BhdHRlcm5dIFRoZSBwYXR0ZXJuIHRvIG1hdGNoIHdvcmRzLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3b3JkcyBvZiBgc3RyaW5nYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy53b3JkcygnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnKTtcbiAgICAgKiAvLyA9PiBbJ2ZyZWQnLCAnYmFybmV5JywgJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogXy53b3JkcygnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnLCAvW14sIF0rL2cpO1xuICAgICAqIC8vID0+IFsnZnJlZCcsICdiYXJuZXknLCAnJicsICdwZWJibGVzJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3b3JkcyhzdHJpbmcsIHBhdHRlcm4sIGd1YXJkKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgcGF0dGVybiA9IGd1YXJkID8gdW5kZWZpbmVkIDogcGF0dGVybjtcblxuICAgICAgaWYgKHBhdHRlcm4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gaGFzVW5pY29kZVdvcmQoc3RyaW5nKSA/IHVuaWNvZGVXb3JkcyhzdHJpbmcpIDogYXNjaWlXb3JkcyhzdHJpbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cmluZy5tYXRjaChwYXR0ZXJuKSB8fCBbXTtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBBdHRlbXB0cyB0byBpbnZva2UgYGZ1bmNgLCByZXR1cm5pbmcgZWl0aGVyIHRoZSByZXN1bHQgb3IgdGhlIGNhdWdodCBlcnJvclxuICAgICAqIG9iamVjdC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCdzIGludm9rZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGF0dGVtcHQuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGBmdW5jYCByZXN1bHQgb3IgZXJyb3Igb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBBdm9pZCB0aHJvd2luZyBlcnJvcnMgZm9yIGludmFsaWQgc2VsZWN0b3JzLlxuICAgICAqIHZhciBlbGVtZW50cyA9IF8uYXR0ZW1wdChmdW5jdGlvbihzZWxlY3Rvcikge1xuICAgICAqICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgICAqIH0sICc+Xz4nKTtcbiAgICAgKlxuICAgICAqIGlmIChfLmlzRXJyb3IoZWxlbWVudHMpKSB7XG4gICAgICogICBlbGVtZW50cyA9IFtdO1xuICAgICAqIH1cbiAgICAgKi9cbiAgICB2YXIgYXR0ZW1wdCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIGFyZ3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhcHBseShmdW5jLCB1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gaXNFcnJvcihlKSA/IGUgOiBuZXcgRXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBCaW5kcyBtZXRob2RzIG9mIGFuIG9iamVjdCB0byB0aGUgb2JqZWN0IGl0c2VsZiwgb3ZlcndyaXRpbmcgdGhlIGV4aXN0aW5nXG4gICAgICogbWV0aG9kLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIGJvdW5kIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGJpbmQgYW5kIGFzc2lnbiB0aGUgYm91bmQgbWV0aG9kcyB0by5cbiAgICAgKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBtZXRob2ROYW1lcyBUaGUgb2JqZWN0IG1ldGhvZCBuYW1lcyB0byBiaW5kLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB2aWV3ID0ge1xuICAgICAqICAgJ2xhYmVsJzogJ2RvY3MnLFxuICAgICAqICAgJ2NsaWNrJzogZnVuY3Rpb24oKSB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdjbGlja2VkICcgKyB0aGlzLmxhYmVsKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogXy5iaW5kQWxsKHZpZXcsIFsnY2xpY2snXSk7XG4gICAgICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIHZpZXcuY2xpY2spO1xuICAgICAqIC8vID0+IExvZ3MgJ2NsaWNrZWQgZG9jcycgd2hlbiBjbGlja2VkLlxuICAgICAqL1xuICAgIHZhciBiaW5kQWxsID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBtZXRob2ROYW1lcykge1xuICAgICAgYXJyYXlFYWNoKG1ldGhvZE5hbWVzLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAga2V5ID0gdG9LZXkoa2V5KTtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBiaW5kKG9iamVjdFtrZXldLCBvYmplY3QpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGl0ZXJhdGVzIG92ZXIgYHBhaXJzYCBhbmQgaW52b2tlcyB0aGUgY29ycmVzcG9uZGluZ1xuICAgICAqIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBwcmVkaWNhdGUgdG8gcmV0dXJuIHRydXRoeS4gVGhlIHByZWRpY2F0ZS1mdW5jdGlvblxuICAgICAqIHBhaXJzIGFyZSBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHMgb2YgdGhlIGNyZWF0ZWRcbiAgICAgKiBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBcnJheX0gcGFpcnMgVGhlIHByZWRpY2F0ZS1mdW5jdGlvbiBwYWlycy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3NpdGUgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBmdW5jID0gXy5jb25kKFtcbiAgICAgKiAgIFtfLm1hdGNoZXMoeyAnYSc6IDEgfSksICAgICAgICAgICBfLmNvbnN0YW50KCdtYXRjaGVzIEEnKV0sXG4gICAgICogICBbXy5jb25mb3Jtcyh7ICdiJzogXy5pc051bWJlciB9KSwgXy5jb25zdGFudCgnbWF0Y2hlcyBCJyldLFxuICAgICAqICAgW18uc3R1YlRydWUsICAgICAgICAgICAgICAgICAgICAgIF8uY29uc3RhbnQoJ25vIG1hdGNoJyldXG4gICAgICogXSk7XG4gICAgICpcbiAgICAgKiBmdW5jKHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gICAgICogLy8gPT4gJ21hdGNoZXMgQSdcbiAgICAgKlxuICAgICAqIGZ1bmMoeyAnYSc6IDAsICdiJzogMSB9KTtcbiAgICAgKiAvLyA9PiAnbWF0Y2hlcyBCJ1xuICAgICAqXG4gICAgICogZnVuYyh7ICdhJzogJzEnLCAnYic6ICcyJyB9KTtcbiAgICAgKiAvLyA9PiAnbm8gbWF0Y2gnXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uZChwYWlycykge1xuICAgICAgdmFyIGxlbmd0aCA9IHBhaXJzID09IG51bGwgPyAwIDogcGFpcnMubGVuZ3RoLFxuICAgICAgICAgIHRvSXRlcmF0ZWUgPSBnZXRJdGVyYXRlZSgpO1xuXG4gICAgICBwYWlycyA9ICFsZW5ndGggPyBbXSA6IGFycmF5TWFwKHBhaXJzLCBmdW5jdGlvbihwYWlyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFpclsxXSAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbdG9JdGVyYXRlZShwYWlyWzBdKSwgcGFpclsxXV07XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIHBhaXIgPSBwYWlyc1tpbmRleF07XG4gICAgICAgICAgaWYgKGFwcGx5KHBhaXJbMF0sIHRoaXMsIGFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwbHkocGFpclsxXSwgdGhpcywgYXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSBwcmVkaWNhdGUgcHJvcGVydGllcyBvZiBgc291cmNlYCB3aXRoXG4gICAgICogdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgdmFsdWVzIG9mIGEgZ2l2ZW4gb2JqZWN0LCByZXR1cm5pbmcgYHRydWVgIGlmXG4gICAgICogYWxsIHByZWRpY2F0ZXMgcmV0dXJuIHRydXRoeSwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoZSBjcmVhdGVkIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gYF8uY29uZm9ybXNUb2Agd2l0aFxuICAgICAqIGBzb3VyY2VgIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgcHJlZGljYXRlcyB0byBjb25mb3JtIHRvLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IDIsICdiJzogMSB9LFxuICAgICAqICAgeyAnYSc6IDEsICdiJzogMiB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZmlsdGVyKG9iamVjdHMsIF8uY29uZm9ybXMoeyAnYic6IGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gPiAxOyB9IH0pKTtcbiAgICAgKiAvLyA9PiBbeyAnYSc6IDEsICdiJzogMiB9XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbmZvcm1zKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIGJhc2VDb25mb3JtcyhiYXNlQ2xvbmUoc291cmNlLCBDTE9ORV9ERUVQX0ZMQUcpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi40LjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICAgICAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGB2YWx1ZWAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBkZWZhdWx0IHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZCBpblxuICAgICAqIGl0cyBwbGFjZS4gVGhlIGBkZWZhdWx0VmFsdWVgIGlzIHJldHVybmVkIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGBudWxsYCxcbiAgICAgKiBvciBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjE0LjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlIFRoZSBkZWZhdWx0IHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWZhdWx0VG8oMSwgMTApO1xuICAgICAqIC8vID0+IDFcbiAgICAgKlxuICAgICAqIF8uZGVmYXVsdFRvKHVuZGVmaW5lZCwgMTApO1xuICAgICAqIC8vID0+IDEwXG4gICAgICovXG4gICAgZnVuY3Rpb24gZGVmYXVsdFRvKHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUpID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBnaXZlbiBmdW5jdGlvbnNcbiAgICAgKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbiwgd2hlcmUgZWFjaCBzdWNjZXNzaXZlXG4gICAgICogaW52b2NhdGlvbiBpcyBzdXBwbGllZCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwcmV2aW91cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtmdW5jc10gVGhlIGZ1bmN0aW9ucyB0byBpbnZva2UuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29tcG9zaXRlIGZ1bmN0aW9uLlxuICAgICAqIEBzZWUgXy5mbG93UmlnaHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgYWRkU3F1YXJlID0gXy5mbG93KFtfLmFkZCwgc3F1YXJlXSk7XG4gICAgICogYWRkU3F1YXJlKDEsIDIpO1xuICAgICAqIC8vID0+IDlcbiAgICAgKi9cbiAgICB2YXIgZmxvdyA9IGNyZWF0ZUZsb3coKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmxvd2AgZXhjZXB0IHRoYXQgaXQgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXRcbiAgICAgKiBpbnZva2VzIHRoZSBnaXZlbiBmdW5jdGlvbnMgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW2Z1bmNzXSBUaGUgZnVuY3Rpb25zIHRvIGludm9rZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3NpdGUgZnVuY3Rpb24uXG4gICAgICogQHNlZSBfLmZsb3dcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgYWRkU3F1YXJlID0gXy5mbG93UmlnaHQoW3NxdWFyZSwgXy5hZGRdKTtcbiAgICAgKiBhZGRTcXVhcmUoMSwgMik7XG4gICAgICogLy8gPT4gOVxuICAgICAqL1xuICAgIHZhciBmbG93UmlnaHQgPSBjcmVhdGVGbG93KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGFyZ3VtZW50cyBvZiB0aGUgY3JlYXRlZFxuICAgICAqIGZ1bmN0aW9uLiBJZiBgZnVuY2AgaXMgYSBwcm9wZXJ0eSBuYW1lLCB0aGUgY3JlYXRlZCBmdW5jdGlvbiByZXR1cm5zIHRoZVxuICAgICAqIHByb3BlcnR5IHZhbHVlIGZvciBhIGdpdmVuIGVsZW1lbnQuIElmIGBmdW5jYCBpcyBhbiBhcnJheSBvciBvYmplY3QsIHRoZVxuICAgICAqIGNyZWF0ZWQgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgY29udGFpbiB0aGUgZXF1aXZhbGVudFxuICAgICAqIHNvdXJjZSBwcm9wZXJ0aWVzLCBvdGhlcndpc2UgaXQgcmV0dXJucyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0geyp9IFtmdW5jPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGEgY2FsbGJhY2suXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBjYWxsYmFjay5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbHRlcih1c2VycywgXy5pdGVyYXRlZSh7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiB0cnVlIH0pKTtcbiAgICAgKiAvLyA9PiBbeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH1dXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maWx0ZXIodXNlcnMsIF8uaXRlcmF0ZWUoWyd1c2VyJywgJ2ZyZWQnXSkpO1xuICAgICAqIC8vID0+IFt7ICd1c2VyJzogJ2ZyZWQnLCAnYWdlJzogNDAgfV1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWFwKHVzZXJzLCBfLml0ZXJhdGVlKCd1c2VyJykpO1xuICAgICAqIC8vID0+IFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gQ3JlYXRlIGN1c3RvbSBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqIF8uaXRlcmF0ZWUgPSBfLndyYXAoXy5pdGVyYXRlZSwgZnVuY3Rpb24oaXRlcmF0ZWUsIGZ1bmMpIHtcbiAgICAgKiAgIHJldHVybiAhXy5pc1JlZ0V4cChmdW5jKSA/IGl0ZXJhdGVlKGZ1bmMpIDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICogICAgIHJldHVybiBmdW5jLnRlc3Qoc3RyaW5nKTtcbiAgICAgKiAgIH07XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBfLmZpbHRlcihbJ2FiYycsICdkZWYnXSwgL2VmLyk7XG4gICAgICogLy8gPT4gWydkZWYnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGl0ZXJhdGVlKGZ1bmMpIHtcbiAgICAgIHJldHVybiBiYXNlSXRlcmF0ZWUodHlwZW9mIGZ1bmMgPT0gJ2Z1bmN0aW9uJyA/IGZ1bmMgOiBiYXNlQ2xvbmUoZnVuYywgQ0xPTkVfREVFUF9GTEFHKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYSBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIGEgZ2l2ZW5cbiAgICAgKiBvYmplY3QgYW5kIGBzb3VyY2VgLCByZXR1cm5pbmcgYHRydWVgIGlmIHRoZSBnaXZlbiBvYmplY3QgaGFzIGVxdWl2YWxlbnRcbiAgICAgKiBwcm9wZXJ0eSB2YWx1ZXMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGUgY3JlYXRlZCBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGBfLmlzTWF0Y2hgIHdpdGggYHNvdXJjZWBcbiAgICAgKiBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIFBhcnRpYWwgY29tcGFyaXNvbnMgd2lsbCBtYXRjaCBlbXB0eSBhcnJheSBhbmQgZW1wdHkgb2JqZWN0IGBzb3VyY2VgXG4gICAgICogdmFsdWVzIGFnYWluc3QgYW55IGFycmF5IG9yIG9iamVjdCB2YWx1ZSwgcmVzcGVjdGl2ZWx5LiBTZWUgYF8uaXNFcXVhbGBcbiAgICAgKiBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCB2YWx1ZSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBNdWx0aXBsZSB2YWx1ZXMgY2FuIGJlIGNoZWNrZWQgYnkgY29tYmluaW5nIHNldmVyYWwgbWF0Y2hlcnNcbiAgICAgKiB1c2luZyBgXy5vdmVyU29tZWBcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgKiAgIHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9LFxuICAgICAqICAgeyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maWx0ZXIob2JqZWN0cywgXy5tYXRjaGVzKHsgJ2EnOiA0LCAnYyc6IDYgfSkpO1xuICAgICAqIC8vID0+IFt7ICdhJzogNCwgJ2InOiA1LCAnYyc6IDYgfV1cbiAgICAgKlxuICAgICAqIC8vIENoZWNraW5nIGZvciBzZXZlcmFsIHBvc3NpYmxlIHZhbHVlc1xuICAgICAqIF8uZmlsdGVyKG9iamVjdHMsIF8ub3ZlclNvbWUoW18ubWF0Y2hlcyh7ICdhJzogMSB9KSwgXy5tYXRjaGVzKHsgJ2EnOiA0IH0pXSkpO1xuICAgICAqIC8vID0+IFt7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfSwgeyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWF0Y2hlcyhzb3VyY2UpIHtcbiAgICAgIHJldHVybiBiYXNlTWF0Y2hlcyhiYXNlQ2xvbmUoc291cmNlLCBDTE9ORV9ERUVQX0ZMQUcpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhIHBhcnRpYWwgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gdGhlXG4gICAgICogdmFsdWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0IHRvIGBzcmNWYWx1ZWAsIHJldHVybmluZyBgdHJ1ZWAgaWYgdGhlXG4gICAgICogb2JqZWN0IHZhbHVlIGlzIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBQYXJ0aWFsIGNvbXBhcmlzb25zIHdpbGwgbWF0Y2ggZW1wdHkgYXJyYXkgYW5kIGVtcHR5IG9iamVjdFxuICAgICAqIGBzcmNWYWx1ZWAgdmFsdWVzIGFnYWluc3QgYW55IGFycmF5IG9yIG9iamVjdCB2YWx1ZSwgcmVzcGVjdGl2ZWx5LiBTZWVcbiAgICAgKiBgXy5pc0VxdWFsYCBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCB2YWx1ZSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBNdWx0aXBsZSB2YWx1ZXMgY2FuIGJlIGNoZWNrZWQgYnkgY29tYmluaW5nIHNldmVyYWwgbWF0Y2hlcnNcbiAgICAgKiB1c2luZyBgXy5vdmVyU29tZWBcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjIuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgKiAgIHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9LFxuICAgICAqICAgeyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maW5kKG9iamVjdHMsIF8ubWF0Y2hlc1Byb3BlcnR5KCdhJywgNCkpO1xuICAgICAqIC8vID0+IHsgJ2EnOiA0LCAnYic6IDUsICdjJzogNiB9XG4gICAgICpcbiAgICAgKiAvLyBDaGVja2luZyBmb3Igc2V2ZXJhbCBwb3NzaWJsZSB2YWx1ZXNcbiAgICAgKiBfLmZpbHRlcihvYmplY3RzLCBfLm92ZXJTb21lKFtfLm1hdGNoZXNQcm9wZXJ0eSgnYScsIDEpLCBfLm1hdGNoZXNQcm9wZXJ0eSgnYScsIDQpXSkpO1xuICAgICAqIC8vID0+IFt7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfSwgeyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWF0Y2hlc1Byb3BlcnR5KHBhdGgsIHNyY1ZhbHVlKSB7XG4gICAgICByZXR1cm4gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBiYXNlQ2xvbmUoc3JjVmFsdWUsIENMT05FX0RFRVBfRkxBRykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIG1ldGhvZCBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gICAgICogQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byB0aGUgaW52b2tlZCBtZXRob2QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy43LjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIHRoZSBtZXRob2Qgd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBpbnZva2VyIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgKiAgIHsgJ2EnOiB7ICdiJzogXy5jb25zdGFudCgyKSB9IH0sXG4gICAgICogICB7ICdhJzogeyAnYic6IF8uY29uc3RhbnQoMSkgfSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8ubWFwKG9iamVjdHMsIF8ubWV0aG9kKCdhLmInKSk7XG4gICAgICogLy8gPT4gWzIsIDFdXG4gICAgICpcbiAgICAgKiBfLm1hcChvYmplY3RzLCBfLm1ldGhvZChbJ2EnLCAnYiddKSk7XG4gICAgICogLy8gPT4gWzIsIDFdXG4gICAgICovXG4gICAgdmFyIG1ldGhvZCA9IGJhc2VSZXN0KGZ1bmN0aW9uKHBhdGgsIGFyZ3MpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VJbnZva2Uob2JqZWN0LCBwYXRoLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8ubWV0aG9kYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlc1xuICAgICAqIHRoZSBtZXRob2QgYXQgYSBnaXZlbiBwYXRoIG9mIGBvYmplY3RgLiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlXG4gICAgICogcHJvdmlkZWQgdG8gdGhlIGludm9rZWQgbWV0aG9kLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuNy4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIG1ldGhvZCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGludm9rZXIgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IF8udGltZXMoMywgXy5jb25zdGFudCksXG4gICAgICogICAgIG9iamVjdCA9IHsgJ2EnOiBhcnJheSwgJ2InOiBhcnJheSwgJ2MnOiBhcnJheSB9O1xuICAgICAqXG4gICAgICogXy5tYXAoWydhWzJdJywgJ2NbMF0nXSwgXy5tZXRob2RPZihvYmplY3QpKTtcbiAgICAgKiAvLyA9PiBbMiwgMF1cbiAgICAgKlxuICAgICAqIF8ubWFwKFtbJ2EnLCAnMiddLCBbJ2MnLCAnMCddXSwgXy5tZXRob2RPZihvYmplY3QpKTtcbiAgICAgKiAvLyA9PiBbMiwgMF1cbiAgICAgKi9cbiAgICB2YXIgbWV0aG9kT2YgPSBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIGFyZ3MpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgIHJldHVybiBiYXNlSW52b2tlKG9iamVjdCwgcGF0aCwgYXJncyk7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhbGwgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIGZ1bmN0aW9uIHByb3BlcnRpZXMgb2YgYSBzb3VyY2VcbiAgICAgKiBvYmplY3QgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdC4gSWYgYG9iamVjdGAgaXMgYSBmdW5jdGlvbiwgdGhlbiBtZXRob2RzXG4gICAgICogYXJlIGFkZGVkIHRvIGl0cyBwcm90b3R5cGUgYXMgd2VsbC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVc2UgYF8ucnVuSW5Db250ZXh0YCB0byBjcmVhdGUgYSBwcmlzdGluZSBgbG9kYXNoYCBmdW5jdGlvbiB0b1xuICAgICAqIGF2b2lkIGNvbmZsaWN0cyBjYXVzZWQgYnkgbW9kaWZ5aW5nIHRoZSBvcmlnaW5hbC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmplY3R9IFtvYmplY3Q9bG9kYXNoXSBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBmdW5jdGlvbnMgdG8gYWRkLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY2hhaW49dHJ1ZV0gU3BlY2lmeSB3aGV0aGVyIG1peGlucyBhcmUgY2hhaW5hYmxlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbnxPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHZvd2VscyhzdHJpbmcpIHtcbiAgICAgKiAgIHJldHVybiBfLmZpbHRlcihzdHJpbmcsIGZ1bmN0aW9uKHYpIHtcbiAgICAgKiAgICAgcmV0dXJuIC9bYWVpb3VdL2kudGVzdCh2KTtcbiAgICAgKiAgIH0pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIF8ubWl4aW4oeyAndm93ZWxzJzogdm93ZWxzIH0pO1xuICAgICAqIF8udm93ZWxzKCdmcmVkJyk7XG4gICAgICogLy8gPT4gWydlJ11cbiAgICAgKlxuICAgICAqIF8oJ2ZyZWQnKS52b3dlbHMoKS52YWx1ZSgpO1xuICAgICAqIC8vID0+IFsnZSddXG4gICAgICpcbiAgICAgKiBfLm1peGluKHsgJ3Zvd2Vscyc6IHZvd2VscyB9LCB7ICdjaGFpbic6IGZhbHNlIH0pO1xuICAgICAqIF8oJ2ZyZWQnKS52b3dlbHMoKTtcbiAgICAgKiAvLyA9PiBbJ2UnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1peGluKG9iamVjdCwgc291cmNlLCBvcHRpb25zKSB7XG4gICAgICB2YXIgcHJvcHMgPSBrZXlzKHNvdXJjZSksXG4gICAgICAgICAgbWV0aG9kTmFtZXMgPSBiYXNlRnVuY3Rpb25zKHNvdXJjZSwgcHJvcHMpO1xuXG4gICAgICBpZiAob3B0aW9ucyA9PSBudWxsICYmXG4gICAgICAgICAgIShpc09iamVjdChzb3VyY2UpICYmIChtZXRob2ROYW1lcy5sZW5ndGggfHwgIXByb3BzLmxlbmd0aCkpKSB7XG4gICAgICAgIG9wdGlvbnMgPSBzb3VyY2U7XG4gICAgICAgIHNvdXJjZSA9IG9iamVjdDtcbiAgICAgICAgb2JqZWN0ID0gdGhpcztcbiAgICAgICAgbWV0aG9kTmFtZXMgPSBiYXNlRnVuY3Rpb25zKHNvdXJjZSwga2V5cyhzb3VyY2UpKTtcbiAgICAgIH1cbiAgICAgIHZhciBjaGFpbiA9ICEoaXNPYmplY3Qob3B0aW9ucykgJiYgJ2NoYWluJyBpbiBvcHRpb25zKSB8fCAhIW9wdGlvbnMuY2hhaW4sXG4gICAgICAgICAgaXNGdW5jID0gaXNGdW5jdGlvbihvYmplY3QpO1xuXG4gICAgICBhcnJheUVhY2gobWV0aG9kTmFtZXMsIGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBzb3VyY2VbbWV0aG9kTmFtZV07XG4gICAgICAgIG9iamVjdFttZXRob2ROYW1lXSA9IGZ1bmM7XG4gICAgICAgIGlmIChpc0Z1bmMpIHtcbiAgICAgICAgICBvYmplY3QucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgY2hhaW5BbGwgPSB0aGlzLl9fY2hhaW5fXztcbiAgICAgICAgICAgIGlmIChjaGFpbiB8fCBjaGFpbkFsbCkge1xuICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb2JqZWN0KHRoaXMuX193cmFwcGVkX18pLFxuICAgICAgICAgICAgICAgICAgYWN0aW9ucyA9IHJlc3VsdC5fX2FjdGlvbnNfXyA9IGNvcHlBcnJheSh0aGlzLl9fYWN0aW9uc19fKTtcblxuICAgICAgICAgICAgICBhY3Rpb25zLnB1c2goeyAnZnVuYyc6IGZ1bmMsICdhcmdzJzogYXJndW1lbnRzLCAndGhpc0FyZyc6IG9iamVjdCB9KTtcbiAgICAgICAgICAgICAgcmVzdWx0Ll9fY2hhaW5fXyA9IGNoYWluQWxsO1xuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkob2JqZWN0LCBhcnJheVB1c2goW3RoaXMudmFsdWUoKV0sIGFyZ3VtZW50cykpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldmVydHMgdGhlIGBfYCB2YXJpYWJsZSB0byBpdHMgcHJldmlvdXMgdmFsdWUgYW5kIHJldHVybnMgYSByZWZlcmVuY2UgdG9cbiAgICAgKiB0aGUgYGxvZGFzaGAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgYGxvZGFzaGAgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBsb2Rhc2ggPSBfLm5vQ29uZmxpY3QoKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub0NvbmZsaWN0KCkge1xuICAgICAgaWYgKHJvb3QuXyA9PT0gdGhpcykge1xuICAgICAgICByb290Ll8gPSBvbGREYXNoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udGltZXMoMiwgXy5ub29wKTtcbiAgICAgKiAvLyA9PiBbdW5kZWZpbmVkLCB1bmRlZmluZWRdXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9vcCgpIHtcbiAgICAgIC8vIE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgZ2V0cyB0aGUgYXJndW1lbnQgYXQgaW5kZXggYG5gLiBJZiBgbmAgaXMgbmVnYXRpdmUsXG4gICAgICogdGhlIG50aCBhcmd1bWVudCBmcm9tIHRoZSBlbmQgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0wXSBUaGUgaW5kZXggb2YgdGhlIGFyZ3VtZW50IHRvIHJldHVybi5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBwYXNzLXRocnUgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBmdW5jID0gXy5udGhBcmcoMSk7XG4gICAgICogZnVuYygnYScsICdiJywgJ2MnLCAnZCcpO1xuICAgICAqIC8vID0+ICdiJ1xuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm50aEFyZygtMik7XG4gICAgICogZnVuYygnYScsICdiJywgJ2MnLCAnZCcpO1xuICAgICAqIC8vID0+ICdjJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG50aEFyZyhuKSB7XG4gICAgICBuID0gdG9JbnRlZ2VyKG4pO1xuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VOdGgoYXJncywgbik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBpdGVyYXRlZXNgIHdpdGggdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlc1xuICAgICAqIGFuZCByZXR1cm5zIHRoZWlyIHJlc3VsdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1bmN0aW9uW10pfSBbaXRlcmF0ZWVzPVtfLmlkZW50aXR5XV1cbiAgICAgKiAgVGhlIGl0ZXJhdGVlcyB0byBpbnZva2UuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBmdW5jID0gXy5vdmVyKFtNYXRoLm1heCwgTWF0aC5taW5dKTtcbiAgICAgKlxuICAgICAqIGZ1bmMoMSwgMiwgMywgNCk7XG4gICAgICogLy8gPT4gWzQsIDFdXG4gICAgICovXG4gICAgdmFyIG92ZXIgPSBjcmVhdGVPdmVyKGFycmF5TWFwKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiAqKmFsbCoqIG9mIHRoZSBgcHJlZGljYXRlc2AgcmV0dXJuXG4gICAgICogdHJ1dGh5IHdoZW4gaW52b2tlZCB3aXRoIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBGb2xsb3dpbmcgc2hvcnRoYW5kcyBhcmUgcG9zc2libGUgZm9yIHByb3ZpZGluZyBwcmVkaWNhdGVzLlxuICAgICAqIFBhc3MgYW4gYE9iamVjdGAgYW5kIGl0IHdpbGwgYmUgdXNlZCBhcyBhbiBwYXJhbWV0ZXIgZm9yIGBfLm1hdGNoZXNgIHRvIGNyZWF0ZSB0aGUgcHJlZGljYXRlLlxuICAgICAqIFBhc3MgYW4gYEFycmF5YCBvZiBwYXJhbWV0ZXJzIGZvciBgXy5tYXRjaGVzUHJvcGVydHlgIGFuZCB0aGUgcHJlZGljYXRlIHdpbGwgYmUgY3JlYXRlZCB1c2luZyB0aGVtLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW3ByZWRpY2F0ZXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgcHJlZGljYXRlcyB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm92ZXJFdmVyeShbQm9vbGVhbiwgaXNGaW5pdGVdKTtcbiAgICAgKlxuICAgICAqIGZ1bmMoJzEnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBmdW5jKG51bGwpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBmdW5jKE5hTik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgb3ZlckV2ZXJ5ID0gY3JlYXRlT3ZlcihhcnJheUV2ZXJ5KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiAqKmFueSoqIG9mIHRoZSBgcHJlZGljYXRlc2AgcmV0dXJuXG4gICAgICogdHJ1dGh5IHdoZW4gaW52b2tlZCB3aXRoIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBGb2xsb3dpbmcgc2hvcnRoYW5kcyBhcmUgcG9zc2libGUgZm9yIHByb3ZpZGluZyBwcmVkaWNhdGVzLlxuICAgICAqIFBhc3MgYW4gYE9iamVjdGAgYW5kIGl0IHdpbGwgYmUgdXNlZCBhcyBhbiBwYXJhbWV0ZXIgZm9yIGBfLm1hdGNoZXNgIHRvIGNyZWF0ZSB0aGUgcHJlZGljYXRlLlxuICAgICAqIFBhc3MgYW4gYEFycmF5YCBvZiBwYXJhbWV0ZXJzIGZvciBgXy5tYXRjaGVzUHJvcGVydHlgIGFuZCB0aGUgcHJlZGljYXRlIHdpbGwgYmUgY3JlYXRlZCB1c2luZyB0aGVtLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW3ByZWRpY2F0ZXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgcHJlZGljYXRlcyB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm92ZXJTb21lKFtCb29sZWFuLCBpc0Zpbml0ZV0pO1xuICAgICAqXG4gICAgICogZnVuYygnMScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIGZ1bmMobnVsbCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogZnVuYyhOYU4pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiB2YXIgbWF0Y2hlc0Z1bmMgPSBfLm92ZXJTb21lKFt7ICdhJzogMSB9LCB7ICdhJzogMiB9XSlcbiAgICAgKiB2YXIgbWF0Y2hlc1Byb3BlcnR5RnVuYyA9IF8ub3ZlclNvbWUoW1snYScsIDFdLCBbJ2EnLCAyXV0pXG4gICAgICovXG4gICAgdmFyIG92ZXJTb21lID0gY3JlYXRlT3ZlcihhcnJheVNvbWUpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuNC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFtcbiAgICAgKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXG4gICAgICogICB7ICdhJzogeyAnYic6IDEgfSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8ubWFwKG9iamVjdHMsIF8ucHJvcGVydHkoJ2EuYicpKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKlxuICAgICAqIF8ubWFwKF8uc29ydEJ5KG9iamVjdHMsIF8ucHJvcGVydHkoWydhJywgJ2InXSkpLCAnYS5iJyk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHJvcGVydHkocGF0aCkge1xuICAgICAgcmV0dXJuIGlzS2V5KHBhdGgpID8gYmFzZVByb3BlcnR5KHRvS2V5KHBhdGgpKSA6IGJhc2VQcm9wZXJ0eURlZXAocGF0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLnByb3BlcnR5YDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJuc1xuICAgICAqIHRoZSB2YWx1ZSBhdCBhIGdpdmVuIHBhdGggb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzAsIDEsIDJdLFxuICAgICAqICAgICBvYmplY3QgPSB7ICdhJzogYXJyYXksICdiJzogYXJyYXksICdjJzogYXJyYXkgfTtcbiAgICAgKlxuICAgICAqIF8ubWFwKFsnYVsyXScsICdjWzBdJ10sIF8ucHJvcGVydHlPZihvYmplY3QpKTtcbiAgICAgKiAvLyA9PiBbMiwgMF1cbiAgICAgKlxuICAgICAqIF8ubWFwKFtbJ2EnLCAnMiddLCBbJ2MnLCAnMCddXSwgXy5wcm9wZXJ0eU9mKG9iamVjdCkpO1xuICAgICAqIC8vID0+IFsyLCAwXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHByb3BlcnR5T2Yob2JqZWN0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyAocG9zaXRpdmUgYW5kL29yIG5lZ2F0aXZlKSBwcm9ncmVzc2luZyBmcm9tXG4gICAgICogYHN0YXJ0YCB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcsIGBlbmRgLiBBIHN0ZXAgb2YgYC0xYCBpcyB1c2VkIGlmIGEgbmVnYXRpdmVcbiAgICAgKiBgc3RhcnRgIGlzIHNwZWNpZmllZCB3aXRob3V0IGFuIGBlbmRgIG9yIGBzdGVwYC4gSWYgYGVuZGAgaXMgbm90IHNwZWNpZmllZCxcbiAgICAgKiBpdCdzIHNldCB0byBgc3RhcnRgIHdpdGggYHN0YXJ0YCB0aGVuIHNldCB0byBgMGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSmF2YVNjcmlwdCBmb2xsb3dzIHRoZSBJRUVFLTc1NCBzdGFuZGFyZCBmb3IgcmVzb2x2aW5nXG4gICAgICogZmxvYXRpbmctcG9pbnQgdmFsdWVzIHdoaWNoIGNhbiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTFdIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAgICAgKiBAc2VlIF8uaW5SYW5nZSwgXy5yYW5nZVJpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoNCk7XG4gICAgICogLy8gPT4gWzAsIDEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlKC00KTtcbiAgICAgKiAvLyA9PiBbMCwgLTEsIC0yLCAtM11cbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoMSwgNSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDMsIDRdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlKDAsIDIwLCA1KTtcbiAgICAgKiAvLyA9PiBbMCwgNSwgMTAsIDE1XVxuICAgICAqXG4gICAgICogXy5yYW5nZSgwLCAtNCwgLTEpO1xuICAgICAqIC8vID0+IFswLCAtMSwgLTIsIC0zXVxuICAgICAqXG4gICAgICogXy5yYW5nZSgxLCA0LCAwKTtcbiAgICAgKiAvLyA9PiBbMSwgMSwgMV1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoMCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICB2YXIgcmFuZ2UgPSBjcmVhdGVSYW5nZSgpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5yYW5nZWAgZXhjZXB0IHRoYXQgaXQgcG9wdWxhdGVzIHZhbHVlcyBpblxuICAgICAqIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0xXSBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmdlIG9mIG51bWJlcnMuXG4gICAgICogQHNlZSBfLmluUmFuZ2UsIF8ucmFuZ2VcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDQpO1xuICAgICAqIC8vID0+IFszLCAyLCAxLCAwXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KC00KTtcbiAgICAgKiAvLyA9PiBbLTMsIC0yLCAtMSwgMF1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2VSaWdodCgxLCA1KTtcbiAgICAgKiAvLyA9PiBbNCwgMywgMiwgMV1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2VSaWdodCgwLCAyMCwgNSk7XG4gICAgICogLy8gPT4gWzE1LCAxMCwgNSwgMF1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2VSaWdodCgwLCAtNCwgLTEpO1xuICAgICAqIC8vID0+IFstMywgLTIsIC0xLCAwXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDEsIDQsIDApO1xuICAgICAqIC8vID0+IFsxLCAxLCAxXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDApO1xuICAgICAqIC8vID0+IFtdXG4gICAgICovXG4gICAgdmFyIHJhbmdlUmlnaHQgPSBjcmVhdGVSYW5nZSh0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xMy4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAgICAgKiAvLyA9PiBbW10sIFtdXVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjEzLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICAgICAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uc3R1Yk9iamVjdCk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAgICAgKiAvLyA9PiBbe30sIHt9XVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdHViT2JqZWN0KCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRpbWVzKDIsIF8uc3R1YlN0cmluZyk7XG4gICAgICogLy8gPT4gWycnLCAnJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdHViU3RyaW5nKCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHRydWVgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRpbWVzKDIsIF8uc3R1YlRydWUpO1xuICAgICAqIC8vID0+IFt0cnVlLCB0cnVlXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0dWJUcnVlKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgaXRlcmF0ZWUgYG5gIHRpbWVzLCByZXR1cm5pbmcgYW4gYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2ZcbiAgICAgKiBlYWNoIGludm9jYXRpb24uIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OyAoaW5kZXgpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50aW1lcygzLCBTdHJpbmcpO1xuICAgICAqIC8vID0+IFsnMCcsICcxJywgJzInXVxuICAgICAqXG4gICAgICogIF8udGltZXMoNCwgXy5jb25zdGFudCgwKSk7XG4gICAgICogLy8gPT4gWzAsIDAsIDAsIDBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgICAgIG4gPSB0b0ludGVnZXIobik7XG4gICAgICBpZiAobiA8IDEgfHwgbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gTUFYX0FSUkFZX0xFTkdUSCxcbiAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNaW4obiwgTUFYX0FSUkFZX0xFTkdUSCk7XG5cbiAgICAgIGl0ZXJhdGVlID0gZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUpO1xuICAgICAgbiAtPSBNQVhfQVJSQVlfTEVOR1RIO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gYmFzZVRpbWVzKGxlbmd0aCwgaXRlcmF0ZWUpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgICAgIGl0ZXJhdGVlKGluZGV4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b1BhdGgoJ2EuYi5jJyk7XG4gICAgICogLy8gPT4gWydhJywgJ2InLCAnYyddXG4gICAgICpcbiAgICAgKiBfLnRvUGF0aCgnYVswXS5iLmMnKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnMCcsICdiJywgJ2MnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvUGF0aCh2YWx1ZSkge1xuICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgdG9LZXkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzU3ltYm9sKHZhbHVlKSA/IFt2YWx1ZV0gOiBjb3B5QXJyYXkoc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIHVuaXF1ZSBJRC4gSWYgYHByZWZpeGAgaXMgZ2l2ZW4sIHRoZSBJRCBpcyBhcHBlbmRlZCB0byBpdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwcmVmaXg9JyddIFRoZSB2YWx1ZSB0byBwcmVmaXggdGhlIElEIHdpdGguXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdW5pcXVlIElELlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaXF1ZUlkKCdjb250YWN0XycpO1xuICAgICAqIC8vID0+ICdjb250YWN0XzEwNCdcbiAgICAgKlxuICAgICAqIF8udW5pcXVlSWQoKTtcbiAgICAgKiAvLyA9PiAnMTA1J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuaXF1ZUlkKHByZWZpeCkge1xuICAgICAgdmFyIGlkID0gKytpZENvdW50ZXI7XG4gICAgICByZXR1cm4gdG9TdHJpbmcocHJlZml4KSArIGlkO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIEFkZHMgdHdvIG51bWJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy40LjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhdWdlbmQgVGhlIGZpcnN0IG51bWJlciBpbiBhbiBhZGRpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYWRkZW5kIFRoZSBzZWNvbmQgbnVtYmVyIGluIGFuIGFkZGl0aW9uLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRvdGFsLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmFkZCg2LCA0KTtcbiAgICAgKiAvLyA9PiAxMFxuICAgICAqL1xuICAgIHZhciBhZGQgPSBjcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKGF1Z2VuZCwgYWRkZW5kKSB7XG4gICAgICByZXR1cm4gYXVnZW5kICsgYWRkZW5kO1xuICAgIH0sIDApO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRlZCB1cCB0byBgcHJlY2lzaW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjEwLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byByb3VuZCB1cC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lzaW9uIHRvIHJvdW5kIHVwIHRvLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJvdW5kZWQgdXAgbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNlaWwoNC4wMDYpO1xuICAgICAqIC8vID0+IDVcbiAgICAgKlxuICAgICAqIF8uY2VpbCg2LjAwNCwgMik7XG4gICAgICogLy8gPT4gNi4wMVxuICAgICAqXG4gICAgICogXy5jZWlsKDYwNDAsIC0yKTtcbiAgICAgKiAvLyA9PiA2MTAwXG4gICAgICovXG4gICAgdmFyIGNlaWwgPSBjcmVhdGVSb3VuZCgnY2VpbCcpO1xuXG4gICAgLyoqXG4gICAgICogRGl2aWRlIHR3byBudW1iZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNy4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGl2aWRlbmQgVGhlIGZpcnN0IG51bWJlciBpbiBhIGRpdmlzaW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkaXZpc29yIFRoZSBzZWNvbmQgbnVtYmVyIGluIGEgZGl2aXNpb24uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcXVvdGllbnQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGl2aWRlKDYsIDQpO1xuICAgICAqIC8vID0+IDEuNVxuICAgICAqL1xuICAgIHZhciBkaXZpZGUgPSBjcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKGRpdmlkZW5kLCBkaXZpc29yKSB7XG4gICAgICByZXR1cm4gZGl2aWRlbmQgLyBkaXZpc29yO1xuICAgIH0sIDEpO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRlZCBkb3duIHRvIGBwcmVjaXNpb25gLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMTAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIHJvdW5kIGRvd24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249MF0gVGhlIHByZWNpc2lvbiB0byByb3VuZCBkb3duIHRvLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJvdW5kZWQgZG93biBudW1iZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZmxvb3IoNC4wMDYpO1xuICAgICAqIC8vID0+IDRcbiAgICAgKlxuICAgICAqIF8uZmxvb3IoMC4wNDYsIDIpO1xuICAgICAqIC8vID0+IDAuMDRcbiAgICAgKlxuICAgICAqIF8uZmxvb3IoNDA2MCwgLTIpO1xuICAgICAqIC8vID0+IDQwMDBcbiAgICAgKi9cbiAgICB2YXIgZmxvb3IgPSBjcmVhdGVSb3VuZCgnZmxvb3InKTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGBhcnJheWAuIElmIGBhcnJheWAgaXMgZW1wdHkgb3IgZmFsc2V5LFxuICAgICAqIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1heChbNCwgMiwgOCwgNl0pO1xuICAgICAqIC8vID0+IDhcbiAgICAgKlxuICAgICAqIF8ubWF4KFtdKTtcbiAgICAgKiAvLyA9PiB1bmRlZmluZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXgoYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgaWRlbnRpdHksIGJhc2VHdClcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5tYXhgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2hcbiAgICAgKiB0aGUgdmFsdWUgaXMgcmFua2VkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1heGltdW0gdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ24nOiAxIH0sIHsgJ24nOiAyIH1dO1xuICAgICAqXG4gICAgICogXy5tYXhCeShvYmplY3RzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLm47IH0pO1xuICAgICAqIC8vID0+IHsgJ24nOiAyIH1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWF4Qnkob2JqZWN0cywgJ24nKTtcbiAgICAgKiAvLyA9PiB7ICduJzogMiB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWF4QnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYmFzZUd0KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgbWVhbiBvZiB0aGUgdmFsdWVzIGluIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbWVhbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5tZWFuKFs0LCAyLCA4LCA2XSk7XG4gICAgICogLy8gPT4gNVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lYW4oYXJyYXkpIHtcbiAgICAgIHJldHVybiBiYXNlTWVhbihhcnJheSwgaWRlbnRpdHkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ubWVhbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IGluIGBhcnJheWAgdG8gZ2VuZXJhdGUgdGhlIHZhbHVlIHRvIGJlIGF2ZXJhZ2VkLlxuICAgICAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNy4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBtZWFuLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICduJzogNCB9LCB7ICduJzogMiB9LCB7ICduJzogOCB9LCB7ICduJzogNiB9XTtcbiAgICAgKlxuICAgICAqIF8ubWVhbkJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ubjsgfSk7XG4gICAgICogLy8gPT4gNVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5tZWFuQnkob2JqZWN0cywgJ24nKTtcbiAgICAgKiAvLyA9PiA1XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWVhbkJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGJhc2VNZWFuKGFycmF5LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBtaW5pbXVtIHZhbHVlIG9mIGBhcnJheWAuIElmIGBhcnJheWAgaXMgZW1wdHkgb3IgZmFsc2V5LFxuICAgICAqIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1pbihbNCwgMiwgOCwgNl0pO1xuICAgICAqIC8vID0+IDJcbiAgICAgKlxuICAgICAqIF8ubWluKFtdKTtcbiAgICAgKiAvLyA9PiB1bmRlZmluZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtaW4oYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgaWRlbnRpdHksIGJhc2VMdClcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5taW5gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2hcbiAgICAgKiB0aGUgdmFsdWUgaXMgcmFua2VkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1pbmltdW0gdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ24nOiAxIH0sIHsgJ24nOiAyIH1dO1xuICAgICAqXG4gICAgICogXy5taW5CeShvYmplY3RzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLm47IH0pO1xuICAgICAqIC8vID0+IHsgJ24nOiAxIH1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWluQnkob2JqZWN0cywgJ24nKTtcbiAgICAgKiAvLyA9PiB7ICduJzogMSB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWluQnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYmFzZUx0KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSB0d28gbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjcuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG11bHRpcGxpZXIgVGhlIGZpcnN0IG51bWJlciBpbiBhIG11bHRpcGxpY2F0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aXBsaWNhbmQgVGhlIHNlY29uZCBudW1iZXIgaW4gYSBtdWx0aXBsaWNhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBwcm9kdWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm11bHRpcGx5KDYsIDQpO1xuICAgICAqIC8vID0+IDI0XG4gICAgICovXG4gICAgdmFyIG11bHRpcGx5ID0gY3JlYXRlTWF0aE9wZXJhdGlvbihmdW5jdGlvbihtdWx0aXBsaWVyLCBtdWx0aXBsaWNhbmQpIHtcbiAgICAgIHJldHVybiBtdWx0aXBsaWVyICogbXVsdGlwbGljYW5kO1xuICAgIH0sIDEpO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRlZCB0byBgcHJlY2lzaW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjEwLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byByb3VuZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lzaW9uIHRvIHJvdW5kIHRvLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJvdW5kZWQgbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQuMDA2KTtcbiAgICAgKiAvLyA9PiA0XG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQuMDA2LCAyKTtcbiAgICAgKiAvLyA9PiA0LjAxXG4gICAgICpcbiAgICAgKiBfLnJvdW5kKDQwNjAsIC0yKTtcbiAgICAgKiAvLyA9PiA0MTAwXG4gICAgICovXG4gICAgdmFyIHJvdW5kID0gY3JlYXRlUm91bmQoJ3JvdW5kJyk7XG5cbiAgICAvKipcbiAgICAgKiBTdWJ0cmFjdCB0d28gbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1pbnVlbmQgVGhlIGZpcnN0IG51bWJlciBpbiBhIHN1YnRyYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdWJ0cmFoZW5kIFRoZSBzZWNvbmQgbnVtYmVyIGluIGEgc3VidHJhY3Rpb24uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgZGlmZmVyZW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zdWJ0cmFjdCg2LCA0KTtcbiAgICAgKiAvLyA9PiAyXG4gICAgICovXG4gICAgdmFyIHN1YnRyYWN0ID0gY3JlYXRlTWF0aE9wZXJhdGlvbihmdW5jdGlvbihtaW51ZW5kLCBzdWJ0cmFoZW5kKSB7XG4gICAgICByZXR1cm4gbWludWVuZCAtIHN1YnRyYWhlbmQ7XG4gICAgfSwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgc3VtIG9mIHRoZSB2YWx1ZXMgaW4gYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjQuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdW0uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc3VtKFs0LCAyLCA4LCA2XSk7XG4gICAgICogLy8gPT4gMjBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdW0oYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VTdW0oYXJyYXksIGlkZW50aXR5KVxuICAgICAgICA6IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zdW1gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSB2YWx1ZSB0byBiZSBzdW1tZWQuXG4gICAgICogVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN1bS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAnbic6IDQgfSwgeyAnbic6IDIgfSwgeyAnbic6IDggfSwgeyAnbic6IDYgfV07XG4gICAgICpcbiAgICAgKiBfLnN1bUJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ubjsgfSk7XG4gICAgICogLy8gPT4gMjBcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uc3VtQnkob2JqZWN0cywgJ24nKTtcbiAgICAgKiAvLyA9PiAyMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN1bUJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVN1bShhcnJheSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgICAgICA6IDA7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLy8gQWRkIG1ldGhvZHMgdGhhdCByZXR1cm4gd3JhcHBlZCB2YWx1ZXMgaW4gY2hhaW4gc2VxdWVuY2VzLlxuICAgIGxvZGFzaC5hZnRlciA9IGFmdGVyO1xuICAgIGxvZGFzaC5hcnkgPSBhcnk7XG4gICAgbG9kYXNoLmFzc2lnbiA9IGFzc2lnbjtcbiAgICBsb2Rhc2guYXNzaWduSW4gPSBhc3NpZ25JbjtcbiAgICBsb2Rhc2guYXNzaWduSW5XaXRoID0gYXNzaWduSW5XaXRoO1xuICAgIGxvZGFzaC5hc3NpZ25XaXRoID0gYXNzaWduV2l0aDtcbiAgICBsb2Rhc2guYXQgPSBhdDtcbiAgICBsb2Rhc2guYmVmb3JlID0gYmVmb3JlO1xuICAgIGxvZGFzaC5iaW5kID0gYmluZDtcbiAgICBsb2Rhc2guYmluZEFsbCA9IGJpbmRBbGw7XG4gICAgbG9kYXNoLmJpbmRLZXkgPSBiaW5kS2V5O1xuICAgIGxvZGFzaC5jYXN0QXJyYXkgPSBjYXN0QXJyYXk7XG4gICAgbG9kYXNoLmNoYWluID0gY2hhaW47XG4gICAgbG9kYXNoLmNodW5rID0gY2h1bms7XG4gICAgbG9kYXNoLmNvbXBhY3QgPSBjb21wYWN0O1xuICAgIGxvZGFzaC5jb25jYXQgPSBjb25jYXQ7XG4gICAgbG9kYXNoLmNvbmQgPSBjb25kO1xuICAgIGxvZGFzaC5jb25mb3JtcyA9IGNvbmZvcm1zO1xuICAgIGxvZGFzaC5jb25zdGFudCA9IGNvbnN0YW50O1xuICAgIGxvZGFzaC5jb3VudEJ5ID0gY291bnRCeTtcbiAgICBsb2Rhc2guY3JlYXRlID0gY3JlYXRlO1xuICAgIGxvZGFzaC5jdXJyeSA9IGN1cnJ5O1xuICAgIGxvZGFzaC5jdXJyeVJpZ2h0ID0gY3VycnlSaWdodDtcbiAgICBsb2Rhc2guZGVib3VuY2UgPSBkZWJvdW5jZTtcbiAgICBsb2Rhc2guZGVmYXVsdHMgPSBkZWZhdWx0cztcbiAgICBsb2Rhc2guZGVmYXVsdHNEZWVwID0gZGVmYXVsdHNEZWVwO1xuICAgIGxvZGFzaC5kZWZlciA9IGRlZmVyO1xuICAgIGxvZGFzaC5kZWxheSA9IGRlbGF5O1xuICAgIGxvZGFzaC5kaWZmZXJlbmNlID0gZGlmZmVyZW5jZTtcbiAgICBsb2Rhc2guZGlmZmVyZW5jZUJ5ID0gZGlmZmVyZW5jZUJ5O1xuICAgIGxvZGFzaC5kaWZmZXJlbmNlV2l0aCA9IGRpZmZlcmVuY2VXaXRoO1xuICAgIGxvZGFzaC5kcm9wID0gZHJvcDtcbiAgICBsb2Rhc2guZHJvcFJpZ2h0ID0gZHJvcFJpZ2h0O1xuICAgIGxvZGFzaC5kcm9wUmlnaHRXaGlsZSA9IGRyb3BSaWdodFdoaWxlO1xuICAgIGxvZGFzaC5kcm9wV2hpbGUgPSBkcm9wV2hpbGU7XG4gICAgbG9kYXNoLmZpbGwgPSBmaWxsO1xuICAgIGxvZGFzaC5maWx0ZXIgPSBmaWx0ZXI7XG4gICAgbG9kYXNoLmZsYXRNYXAgPSBmbGF0TWFwO1xuICAgIGxvZGFzaC5mbGF0TWFwRGVlcCA9IGZsYXRNYXBEZWVwO1xuICAgIGxvZGFzaC5mbGF0TWFwRGVwdGggPSBmbGF0TWFwRGVwdGg7XG4gICAgbG9kYXNoLmZsYXR0ZW4gPSBmbGF0dGVuO1xuICAgIGxvZGFzaC5mbGF0dGVuRGVlcCA9IGZsYXR0ZW5EZWVwO1xuICAgIGxvZGFzaC5mbGF0dGVuRGVwdGggPSBmbGF0dGVuRGVwdGg7XG4gICAgbG9kYXNoLmZsaXAgPSBmbGlwO1xuICAgIGxvZGFzaC5mbG93ID0gZmxvdztcbiAgICBsb2Rhc2guZmxvd1JpZ2h0ID0gZmxvd1JpZ2h0O1xuICAgIGxvZGFzaC5mcm9tUGFpcnMgPSBmcm9tUGFpcnM7XG4gICAgbG9kYXNoLmZ1bmN0aW9ucyA9IGZ1bmN0aW9ucztcbiAgICBsb2Rhc2guZnVuY3Rpb25zSW4gPSBmdW5jdGlvbnNJbjtcbiAgICBsb2Rhc2guZ3JvdXBCeSA9IGdyb3VwQnk7XG4gICAgbG9kYXNoLmluaXRpYWwgPSBpbml0aWFsO1xuICAgIGxvZGFzaC5pbnRlcnNlY3Rpb24gPSBpbnRlcnNlY3Rpb247XG4gICAgbG9kYXNoLmludGVyc2VjdGlvbkJ5ID0gaW50ZXJzZWN0aW9uQnk7XG4gICAgbG9kYXNoLmludGVyc2VjdGlvbldpdGggPSBpbnRlcnNlY3Rpb25XaXRoO1xuICAgIGxvZGFzaC5pbnZlcnQgPSBpbnZlcnQ7XG4gICAgbG9kYXNoLmludmVydEJ5ID0gaW52ZXJ0Qnk7XG4gICAgbG9kYXNoLmludm9rZU1hcCA9IGludm9rZU1hcDtcbiAgICBsb2Rhc2guaXRlcmF0ZWUgPSBpdGVyYXRlZTtcbiAgICBsb2Rhc2gua2V5QnkgPSBrZXlCeTtcbiAgICBsb2Rhc2gua2V5cyA9IGtleXM7XG4gICAgbG9kYXNoLmtleXNJbiA9IGtleXNJbjtcbiAgICBsb2Rhc2gubWFwID0gbWFwO1xuICAgIGxvZGFzaC5tYXBLZXlzID0gbWFwS2V5cztcbiAgICBsb2Rhc2gubWFwVmFsdWVzID0gbWFwVmFsdWVzO1xuICAgIGxvZGFzaC5tYXRjaGVzID0gbWF0Y2hlcztcbiAgICBsb2Rhc2gubWF0Y2hlc1Byb3BlcnR5ID0gbWF0Y2hlc1Byb3BlcnR5O1xuICAgIGxvZGFzaC5tZW1vaXplID0gbWVtb2l6ZTtcbiAgICBsb2Rhc2gubWVyZ2UgPSBtZXJnZTtcbiAgICBsb2Rhc2gubWVyZ2VXaXRoID0gbWVyZ2VXaXRoO1xuICAgIGxvZGFzaC5tZXRob2QgPSBtZXRob2Q7XG4gICAgbG9kYXNoLm1ldGhvZE9mID0gbWV0aG9kT2Y7XG4gICAgbG9kYXNoLm1peGluID0gbWl4aW47XG4gICAgbG9kYXNoLm5lZ2F0ZSA9IG5lZ2F0ZTtcbiAgICBsb2Rhc2gubnRoQXJnID0gbnRoQXJnO1xuICAgIGxvZGFzaC5vbWl0ID0gb21pdDtcbiAgICBsb2Rhc2gub21pdEJ5ID0gb21pdEJ5O1xuICAgIGxvZGFzaC5vbmNlID0gb25jZTtcbiAgICBsb2Rhc2gub3JkZXJCeSA9IG9yZGVyQnk7XG4gICAgbG9kYXNoLm92ZXIgPSBvdmVyO1xuICAgIGxvZGFzaC5vdmVyQXJncyA9IG92ZXJBcmdzO1xuICAgIGxvZGFzaC5vdmVyRXZlcnkgPSBvdmVyRXZlcnk7XG4gICAgbG9kYXNoLm92ZXJTb21lID0gb3ZlclNvbWU7XG4gICAgbG9kYXNoLnBhcnRpYWwgPSBwYXJ0aWFsO1xuICAgIGxvZGFzaC5wYXJ0aWFsUmlnaHQgPSBwYXJ0aWFsUmlnaHQ7XG4gICAgbG9kYXNoLnBhcnRpdGlvbiA9IHBhcnRpdGlvbjtcbiAgICBsb2Rhc2gucGljayA9IHBpY2s7XG4gICAgbG9kYXNoLnBpY2tCeSA9IHBpY2tCeTtcbiAgICBsb2Rhc2gucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICBsb2Rhc2gucHJvcGVydHlPZiA9IHByb3BlcnR5T2Y7XG4gICAgbG9kYXNoLnB1bGwgPSBwdWxsO1xuICAgIGxvZGFzaC5wdWxsQWxsID0gcHVsbEFsbDtcbiAgICBsb2Rhc2gucHVsbEFsbEJ5ID0gcHVsbEFsbEJ5O1xuICAgIGxvZGFzaC5wdWxsQWxsV2l0aCA9IHB1bGxBbGxXaXRoO1xuICAgIGxvZGFzaC5wdWxsQXQgPSBwdWxsQXQ7XG4gICAgbG9kYXNoLnJhbmdlID0gcmFuZ2U7XG4gICAgbG9kYXNoLnJhbmdlUmlnaHQgPSByYW5nZVJpZ2h0O1xuICAgIGxvZGFzaC5yZWFyZyA9IHJlYXJnO1xuICAgIGxvZGFzaC5yZWplY3QgPSByZWplY3Q7XG4gICAgbG9kYXNoLnJlbW92ZSA9IHJlbW92ZTtcbiAgICBsb2Rhc2gucmVzdCA9IHJlc3Q7XG4gICAgbG9kYXNoLnJldmVyc2UgPSByZXZlcnNlO1xuICAgIGxvZGFzaC5zYW1wbGVTaXplID0gc2FtcGxlU2l6ZTtcbiAgICBsb2Rhc2guc2V0ID0gc2V0O1xuICAgIGxvZGFzaC5zZXRXaXRoID0gc2V0V2l0aDtcbiAgICBsb2Rhc2guc2h1ZmZsZSA9IHNodWZmbGU7XG4gICAgbG9kYXNoLnNsaWNlID0gc2xpY2U7XG4gICAgbG9kYXNoLnNvcnRCeSA9IHNvcnRCeTtcbiAgICBsb2Rhc2guc29ydGVkVW5pcSA9IHNvcnRlZFVuaXE7XG4gICAgbG9kYXNoLnNvcnRlZFVuaXFCeSA9IHNvcnRlZFVuaXFCeTtcbiAgICBsb2Rhc2guc3BsaXQgPSBzcGxpdDtcbiAgICBsb2Rhc2guc3ByZWFkID0gc3ByZWFkO1xuICAgIGxvZGFzaC50YWlsID0gdGFpbDtcbiAgICBsb2Rhc2gudGFrZSA9IHRha2U7XG4gICAgbG9kYXNoLnRha2VSaWdodCA9IHRha2VSaWdodDtcbiAgICBsb2Rhc2gudGFrZVJpZ2h0V2hpbGUgPSB0YWtlUmlnaHRXaGlsZTtcbiAgICBsb2Rhc2gudGFrZVdoaWxlID0gdGFrZVdoaWxlO1xuICAgIGxvZGFzaC50YXAgPSB0YXA7XG4gICAgbG9kYXNoLnRocm90dGxlID0gdGhyb3R0bGU7XG4gICAgbG9kYXNoLnRocnUgPSB0aHJ1O1xuICAgIGxvZGFzaC50b0FycmF5ID0gdG9BcnJheTtcbiAgICBsb2Rhc2gudG9QYWlycyA9IHRvUGFpcnM7XG4gICAgbG9kYXNoLnRvUGFpcnNJbiA9IHRvUGFpcnNJbjtcbiAgICBsb2Rhc2gudG9QYXRoID0gdG9QYXRoO1xuICAgIGxvZGFzaC50b1BsYWluT2JqZWN0ID0gdG9QbGFpbk9iamVjdDtcbiAgICBsb2Rhc2gudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIGxvZGFzaC51bmFyeSA9IHVuYXJ5O1xuICAgIGxvZGFzaC51bmlvbiA9IHVuaW9uO1xuICAgIGxvZGFzaC51bmlvbkJ5ID0gdW5pb25CeTtcbiAgICBsb2Rhc2gudW5pb25XaXRoID0gdW5pb25XaXRoO1xuICAgIGxvZGFzaC51bmlxID0gdW5pcTtcbiAgICBsb2Rhc2gudW5pcUJ5ID0gdW5pcUJ5O1xuICAgIGxvZGFzaC51bmlxV2l0aCA9IHVuaXFXaXRoO1xuICAgIGxvZGFzaC51bnNldCA9IHVuc2V0O1xuICAgIGxvZGFzaC51bnppcCA9IHVuemlwO1xuICAgIGxvZGFzaC51bnppcFdpdGggPSB1bnppcFdpdGg7XG4gICAgbG9kYXNoLnVwZGF0ZSA9IHVwZGF0ZTtcbiAgICBsb2Rhc2gudXBkYXRlV2l0aCA9IHVwZGF0ZVdpdGg7XG4gICAgbG9kYXNoLnZhbHVlcyA9IHZhbHVlcztcbiAgICBsb2Rhc2gudmFsdWVzSW4gPSB2YWx1ZXNJbjtcbiAgICBsb2Rhc2gud2l0aG91dCA9IHdpdGhvdXQ7XG4gICAgbG9kYXNoLndvcmRzID0gd29yZHM7XG4gICAgbG9kYXNoLndyYXAgPSB3cmFwO1xuICAgIGxvZGFzaC54b3IgPSB4b3I7XG4gICAgbG9kYXNoLnhvckJ5ID0geG9yQnk7XG4gICAgbG9kYXNoLnhvcldpdGggPSB4b3JXaXRoO1xuICAgIGxvZGFzaC56aXAgPSB6aXA7XG4gICAgbG9kYXNoLnppcE9iamVjdCA9IHppcE9iamVjdDtcbiAgICBsb2Rhc2guemlwT2JqZWN0RGVlcCA9IHppcE9iamVjdERlZXA7XG4gICAgbG9kYXNoLnppcFdpdGggPSB6aXBXaXRoO1xuXG4gICAgLy8gQWRkIGFsaWFzZXMuXG4gICAgbG9kYXNoLmVudHJpZXMgPSB0b1BhaXJzO1xuICAgIGxvZGFzaC5lbnRyaWVzSW4gPSB0b1BhaXJzSW47XG4gICAgbG9kYXNoLmV4dGVuZCA9IGFzc2lnbkluO1xuICAgIGxvZGFzaC5leHRlbmRXaXRoID0gYXNzaWduSW5XaXRoO1xuXG4gICAgLy8gQWRkIG1ldGhvZHMgdG8gYGxvZGFzaC5wcm90b3R5cGVgLlxuICAgIG1peGluKGxvZGFzaCwgbG9kYXNoKTtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8vIEFkZCBtZXRob2RzIHRoYXQgcmV0dXJuIHVud3JhcHBlZCB2YWx1ZXMgaW4gY2hhaW4gc2VxdWVuY2VzLlxuICAgIGxvZGFzaC5hZGQgPSBhZGQ7XG4gICAgbG9kYXNoLmF0dGVtcHQgPSBhdHRlbXB0O1xuICAgIGxvZGFzaC5jYW1lbENhc2UgPSBjYW1lbENhc2U7XG4gICAgbG9kYXNoLmNhcGl0YWxpemUgPSBjYXBpdGFsaXplO1xuICAgIGxvZGFzaC5jZWlsID0gY2VpbDtcbiAgICBsb2Rhc2guY2xhbXAgPSBjbGFtcDtcbiAgICBsb2Rhc2guY2xvbmUgPSBjbG9uZTtcbiAgICBsb2Rhc2guY2xvbmVEZWVwID0gY2xvbmVEZWVwO1xuICAgIGxvZGFzaC5jbG9uZURlZXBXaXRoID0gY2xvbmVEZWVwV2l0aDtcbiAgICBsb2Rhc2guY2xvbmVXaXRoID0gY2xvbmVXaXRoO1xuICAgIGxvZGFzaC5jb25mb3Jtc1RvID0gY29uZm9ybXNUbztcbiAgICBsb2Rhc2guZGVidXJyID0gZGVidXJyO1xuICAgIGxvZGFzaC5kZWZhdWx0VG8gPSBkZWZhdWx0VG87XG4gICAgbG9kYXNoLmRpdmlkZSA9IGRpdmlkZTtcbiAgICBsb2Rhc2guZW5kc1dpdGggPSBlbmRzV2l0aDtcbiAgICBsb2Rhc2guZXEgPSBlcTtcbiAgICBsb2Rhc2guZXNjYXBlID0gZXNjYXBlO1xuICAgIGxvZGFzaC5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XG4gICAgbG9kYXNoLmV2ZXJ5ID0gZXZlcnk7XG4gICAgbG9kYXNoLmZpbmQgPSBmaW5kO1xuICAgIGxvZGFzaC5maW5kSW5kZXggPSBmaW5kSW5kZXg7XG4gICAgbG9kYXNoLmZpbmRLZXkgPSBmaW5kS2V5O1xuICAgIGxvZGFzaC5maW5kTGFzdCA9IGZpbmRMYXN0O1xuICAgIGxvZGFzaC5maW5kTGFzdEluZGV4ID0gZmluZExhc3RJbmRleDtcbiAgICBsb2Rhc2guZmluZExhc3RLZXkgPSBmaW5kTGFzdEtleTtcbiAgICBsb2Rhc2guZmxvb3IgPSBmbG9vcjtcbiAgICBsb2Rhc2guZm9yRWFjaCA9IGZvckVhY2g7XG4gICAgbG9kYXNoLmZvckVhY2hSaWdodCA9IGZvckVhY2hSaWdodDtcbiAgICBsb2Rhc2guZm9ySW4gPSBmb3JJbjtcbiAgICBsb2Rhc2guZm9ySW5SaWdodCA9IGZvckluUmlnaHQ7XG4gICAgbG9kYXNoLmZvck93biA9IGZvck93bjtcbiAgICBsb2Rhc2guZm9yT3duUmlnaHQgPSBmb3JPd25SaWdodDtcbiAgICBsb2Rhc2guZ2V0ID0gZ2V0O1xuICAgIGxvZGFzaC5ndCA9IGd0O1xuICAgIGxvZGFzaC5ndGUgPSBndGU7XG4gICAgbG9kYXNoLmhhcyA9IGhhcztcbiAgICBsb2Rhc2guaGFzSW4gPSBoYXNJbjtcbiAgICBsb2Rhc2guaGVhZCA9IGhlYWQ7XG4gICAgbG9kYXNoLmlkZW50aXR5ID0gaWRlbnRpdHk7XG4gICAgbG9kYXNoLmluY2x1ZGVzID0gaW5jbHVkZXM7XG4gICAgbG9kYXNoLmluZGV4T2YgPSBpbmRleE9mO1xuICAgIGxvZGFzaC5pblJhbmdlID0gaW5SYW5nZTtcbiAgICBsb2Rhc2guaW52b2tlID0gaW52b2tlO1xuICAgIGxvZGFzaC5pc0FyZ3VtZW50cyA9IGlzQXJndW1lbnRzO1xuICAgIGxvZGFzaC5pc0FycmF5ID0gaXNBcnJheTtcbiAgICBsb2Rhc2guaXNBcnJheUJ1ZmZlciA9IGlzQXJyYXlCdWZmZXI7XG4gICAgbG9kYXNoLmlzQXJyYXlMaWtlID0gaXNBcnJheUxpa2U7XG4gICAgbG9kYXNoLmlzQXJyYXlMaWtlT2JqZWN0ID0gaXNBcnJheUxpa2VPYmplY3Q7XG4gICAgbG9kYXNoLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcbiAgICBsb2Rhc2guaXNCdWZmZXIgPSBpc0J1ZmZlcjtcbiAgICBsb2Rhc2guaXNEYXRlID0gaXNEYXRlO1xuICAgIGxvZGFzaC5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG4gICAgbG9kYXNoLmlzRW1wdHkgPSBpc0VtcHR5O1xuICAgIGxvZGFzaC5pc0VxdWFsID0gaXNFcXVhbDtcbiAgICBsb2Rhc2guaXNFcXVhbFdpdGggPSBpc0VxdWFsV2l0aDtcbiAgICBsb2Rhc2guaXNFcnJvciA9IGlzRXJyb3I7XG4gICAgbG9kYXNoLmlzRmluaXRlID0gaXNGaW5pdGU7XG4gICAgbG9kYXNoLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuICAgIGxvZGFzaC5pc0ludGVnZXIgPSBpc0ludGVnZXI7XG4gICAgbG9kYXNoLmlzTGVuZ3RoID0gaXNMZW5ndGg7XG4gICAgbG9kYXNoLmlzTWFwID0gaXNNYXA7XG4gICAgbG9kYXNoLmlzTWF0Y2ggPSBpc01hdGNoO1xuICAgIGxvZGFzaC5pc01hdGNoV2l0aCA9IGlzTWF0Y2hXaXRoO1xuICAgIGxvZGFzaC5pc05hTiA9IGlzTmFOO1xuICAgIGxvZGFzaC5pc05hdGl2ZSA9IGlzTmF0aXZlO1xuICAgIGxvZGFzaC5pc05pbCA9IGlzTmlsO1xuICAgIGxvZGFzaC5pc051bGwgPSBpc051bGw7XG4gICAgbG9kYXNoLmlzTnVtYmVyID0gaXNOdW1iZXI7XG4gICAgbG9kYXNoLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG4gICAgbG9kYXNoLmlzT2JqZWN0TGlrZSA9IGlzT2JqZWN0TGlrZTtcbiAgICBsb2Rhc2guaXNQbGFpbk9iamVjdCA9IGlzUGxhaW5PYmplY3Q7XG4gICAgbG9kYXNoLmlzUmVnRXhwID0gaXNSZWdFeHA7XG4gICAgbG9kYXNoLmlzU2FmZUludGVnZXIgPSBpc1NhZmVJbnRlZ2VyO1xuICAgIGxvZGFzaC5pc1NldCA9IGlzU2V0O1xuICAgIGxvZGFzaC5pc1N0cmluZyA9IGlzU3RyaW5nO1xuICAgIGxvZGFzaC5pc1N5bWJvbCA9IGlzU3ltYm9sO1xuICAgIGxvZGFzaC5pc1R5cGVkQXJyYXkgPSBpc1R5cGVkQXJyYXk7XG4gICAgbG9kYXNoLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG4gICAgbG9kYXNoLmlzV2Vha01hcCA9IGlzV2Vha01hcDtcbiAgICBsb2Rhc2guaXNXZWFrU2V0ID0gaXNXZWFrU2V0O1xuICAgIGxvZGFzaC5qb2luID0gam9pbjtcbiAgICBsb2Rhc2gua2ViYWJDYXNlID0ga2ViYWJDYXNlO1xuICAgIGxvZGFzaC5sYXN0ID0gbGFzdDtcbiAgICBsb2Rhc2gubGFzdEluZGV4T2YgPSBsYXN0SW5kZXhPZjtcbiAgICBsb2Rhc2gubG93ZXJDYXNlID0gbG93ZXJDYXNlO1xuICAgIGxvZGFzaC5sb3dlckZpcnN0ID0gbG93ZXJGaXJzdDtcbiAgICBsb2Rhc2gubHQgPSBsdDtcbiAgICBsb2Rhc2gubHRlID0gbHRlO1xuICAgIGxvZGFzaC5tYXggPSBtYXg7XG4gICAgbG9kYXNoLm1heEJ5ID0gbWF4Qnk7XG4gICAgbG9kYXNoLm1lYW4gPSBtZWFuO1xuICAgIGxvZGFzaC5tZWFuQnkgPSBtZWFuQnk7XG4gICAgbG9kYXNoLm1pbiA9IG1pbjtcbiAgICBsb2Rhc2gubWluQnkgPSBtaW5CeTtcbiAgICBsb2Rhc2guc3R1YkFycmF5ID0gc3R1YkFycmF5O1xuICAgIGxvZGFzaC5zdHViRmFsc2UgPSBzdHViRmFsc2U7XG4gICAgbG9kYXNoLnN0dWJPYmplY3QgPSBzdHViT2JqZWN0O1xuICAgIGxvZGFzaC5zdHViU3RyaW5nID0gc3R1YlN0cmluZztcbiAgICBsb2Rhc2guc3R1YlRydWUgPSBzdHViVHJ1ZTtcbiAgICBsb2Rhc2gubXVsdGlwbHkgPSBtdWx0aXBseTtcbiAgICBsb2Rhc2gubnRoID0gbnRoO1xuICAgIGxvZGFzaC5ub0NvbmZsaWN0ID0gbm9Db25mbGljdDtcbiAgICBsb2Rhc2gubm9vcCA9IG5vb3A7XG4gICAgbG9kYXNoLm5vdyA9IG5vdztcbiAgICBsb2Rhc2gucGFkID0gcGFkO1xuICAgIGxvZGFzaC5wYWRFbmQgPSBwYWRFbmQ7XG4gICAgbG9kYXNoLnBhZFN0YXJ0ID0gcGFkU3RhcnQ7XG4gICAgbG9kYXNoLnBhcnNlSW50ID0gcGFyc2VJbnQ7XG4gICAgbG9kYXNoLnJhbmRvbSA9IHJhbmRvbTtcbiAgICBsb2Rhc2gucmVkdWNlID0gcmVkdWNlO1xuICAgIGxvZGFzaC5yZWR1Y2VSaWdodCA9IHJlZHVjZVJpZ2h0O1xuICAgIGxvZGFzaC5yZXBlYXQgPSByZXBlYXQ7XG4gICAgbG9kYXNoLnJlcGxhY2UgPSByZXBsYWNlO1xuICAgIGxvZGFzaC5yZXN1bHQgPSByZXN1bHQ7XG4gICAgbG9kYXNoLnJvdW5kID0gcm91bmQ7XG4gICAgbG9kYXNoLnJ1bkluQ29udGV4dCA9IHJ1bkluQ29udGV4dDtcbiAgICBsb2Rhc2guc2FtcGxlID0gc2FtcGxlO1xuICAgIGxvZGFzaC5zaXplID0gc2l6ZTtcbiAgICBsb2Rhc2guc25ha2VDYXNlID0gc25ha2VDYXNlO1xuICAgIGxvZGFzaC5zb21lID0gc29tZTtcbiAgICBsb2Rhc2guc29ydGVkSW5kZXggPSBzb3J0ZWRJbmRleDtcbiAgICBsb2Rhc2guc29ydGVkSW5kZXhCeSA9IHNvcnRlZEluZGV4Qnk7XG4gICAgbG9kYXNoLnNvcnRlZEluZGV4T2YgPSBzb3J0ZWRJbmRleE9mO1xuICAgIGxvZGFzaC5zb3J0ZWRMYXN0SW5kZXggPSBzb3J0ZWRMYXN0SW5kZXg7XG4gICAgbG9kYXNoLnNvcnRlZExhc3RJbmRleEJ5ID0gc29ydGVkTGFzdEluZGV4Qnk7XG4gICAgbG9kYXNoLnNvcnRlZExhc3RJbmRleE9mID0gc29ydGVkTGFzdEluZGV4T2Y7XG4gICAgbG9kYXNoLnN0YXJ0Q2FzZSA9IHN0YXJ0Q2FzZTtcbiAgICBsb2Rhc2guc3RhcnRzV2l0aCA9IHN0YXJ0c1dpdGg7XG4gICAgbG9kYXNoLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgbG9kYXNoLnN1bSA9IHN1bTtcbiAgICBsb2Rhc2guc3VtQnkgPSBzdW1CeTtcbiAgICBsb2Rhc2gudGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICBsb2Rhc2gudGltZXMgPSB0aW1lcztcbiAgICBsb2Rhc2gudG9GaW5pdGUgPSB0b0Zpbml0ZTtcbiAgICBsb2Rhc2gudG9JbnRlZ2VyID0gdG9JbnRlZ2VyO1xuICAgIGxvZGFzaC50b0xlbmd0aCA9IHRvTGVuZ3RoO1xuICAgIGxvZGFzaC50b0xvd2VyID0gdG9Mb3dlcjtcbiAgICBsb2Rhc2gudG9OdW1iZXIgPSB0b051bWJlcjtcbiAgICBsb2Rhc2gudG9TYWZlSW50ZWdlciA9IHRvU2FmZUludGVnZXI7XG4gICAgbG9kYXNoLnRvU3RyaW5nID0gdG9TdHJpbmc7XG4gICAgbG9kYXNoLnRvVXBwZXIgPSB0b1VwcGVyO1xuICAgIGxvZGFzaC50cmltID0gdHJpbTtcbiAgICBsb2Rhc2gudHJpbUVuZCA9IHRyaW1FbmQ7XG4gICAgbG9kYXNoLnRyaW1TdGFydCA9IHRyaW1TdGFydDtcbiAgICBsb2Rhc2gudHJ1bmNhdGUgPSB0cnVuY2F0ZTtcbiAgICBsb2Rhc2gudW5lc2NhcGUgPSB1bmVzY2FwZTtcbiAgICBsb2Rhc2gudW5pcXVlSWQgPSB1bmlxdWVJZDtcbiAgICBsb2Rhc2gudXBwZXJDYXNlID0gdXBwZXJDYXNlO1xuICAgIGxvZGFzaC51cHBlckZpcnN0ID0gdXBwZXJGaXJzdDtcblxuICAgIC8vIEFkZCBhbGlhc2VzLlxuICAgIGxvZGFzaC5lYWNoID0gZm9yRWFjaDtcbiAgICBsb2Rhc2guZWFjaFJpZ2h0ID0gZm9yRWFjaFJpZ2h0O1xuICAgIGxvZGFzaC5maXJzdCA9IGhlYWQ7XG5cbiAgICBtaXhpbihsb2Rhc2gsIChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzb3VyY2UgPSB7fTtcbiAgICAgIGJhc2VGb3JPd24obG9kYXNoLCBmdW5jdGlvbihmdW5jLCBtZXRob2ROYW1lKSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChsb2Rhc2gucHJvdG90eXBlLCBtZXRob2ROYW1lKSkge1xuICAgICAgICAgIHNvdXJjZVttZXRob2ROYW1lXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9KCkpLCB7ICdjaGFpbic6IGZhbHNlIH0pO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogVGhlIHNlbWFudGljIHZlcnNpb24gbnVtYmVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBsb2Rhc2guVkVSU0lPTiA9IFZFUlNJT047XG5cbiAgICAvLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG4gICAgYXJyYXlFYWNoKFsnYmluZCcsICdiaW5kS2V5JywgJ2N1cnJ5JywgJ2N1cnJ5UmlnaHQnLCAncGFydGlhbCcsICdwYXJ0aWFsUmlnaHQnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSkge1xuICAgICAgbG9kYXNoW21ldGhvZE5hbWVdLnBsYWNlaG9sZGVyID0gbG9kYXNoO1xuICAgIH0pO1xuXG4gICAgLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyBmb3IgYF8uZHJvcGAgYW5kIGBfLnRha2VgIHZhcmlhbnRzLlxuICAgIGFycmF5RWFjaChbJ2Ryb3AnLCAndGFrZSddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24obikge1xuICAgICAgICBuID0gbiA9PT0gdW5kZWZpbmVkID8gMSA6IG5hdGl2ZU1heCh0b0ludGVnZXIobiksIDApO1xuXG4gICAgICAgIHZhciByZXN1bHQgPSAodGhpcy5fX2ZpbHRlcmVkX18gJiYgIWluZGV4KVxuICAgICAgICAgID8gbmV3IExhenlXcmFwcGVyKHRoaXMpXG4gICAgICAgICAgOiB0aGlzLmNsb25lKCk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5fX2ZpbHRlcmVkX18pIHtcbiAgICAgICAgICByZXN1bHQuX190YWtlQ291bnRfXyA9IG5hdGl2ZU1pbihuLCByZXN1bHQuX190YWtlQ291bnRfXyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0Ll9fdmlld3NfXy5wdXNoKHtcbiAgICAgICAgICAgICdzaXplJzogbmF0aXZlTWluKG4sIE1BWF9BUlJBWV9MRU5HVEgpLFxuICAgICAgICAgICAgJ3R5cGUnOiBtZXRob2ROYW1lICsgKHJlc3VsdC5fX2Rpcl9fIDwgMCA/ICdSaWdodCcgOiAnJylcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcblxuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWUgKyAnUmlnaHQnXSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV2ZXJzZSgpW21ldGhvZE5hbWVdKG4pLnJldmVyc2UoKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIHRoYXQgYWNjZXB0IGFuIGBpdGVyYXRlZWAgdmFsdWUuXG4gICAgYXJyYXlFYWNoKFsnZmlsdGVyJywgJ21hcCcsICd0YWtlV2hpbGUnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSwgaW5kZXgpIHtcbiAgICAgIHZhciB0eXBlID0gaW5kZXggKyAxLFxuICAgICAgICAgIGlzRmlsdGVyID0gdHlwZSA9PSBMQVpZX0ZJTFRFUl9GTEFHIHx8IHR5cGUgPT0gTEFaWV9XSElMRV9GTEFHO1xuXG4gICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbihpdGVyYXRlZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5jbG9uZSgpO1xuICAgICAgICByZXN1bHQuX19pdGVyYXRlZXNfXy5wdXNoKHtcbiAgICAgICAgICAnaXRlcmF0ZWUnOiBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMyksXG4gICAgICAgICAgJ3R5cGUnOiB0eXBlXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gcmVzdWx0Ll9fZmlsdGVyZWRfXyB8fCBpc0ZpbHRlcjtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIGZvciBgXy5oZWFkYCBhbmQgYF8ubGFzdGAuXG4gICAgYXJyYXlFYWNoKFsnaGVhZCcsICdsYXN0J10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGluZGV4KSB7XG4gICAgICB2YXIgdGFrZU5hbWUgPSAndGFrZScgKyAoaW5kZXggPyAnUmlnaHQnIDogJycpO1xuXG4gICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbdGFrZU5hbWVdKDEpLnZhbHVlKClbMF07XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyBmb3IgYF8uaW5pdGlhbGAgYW5kIGBfLnRhaWxgLlxuICAgIGFycmF5RWFjaChbJ2luaXRpYWwnLCAndGFpbCddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICAgICAgdmFyIGRyb3BOYW1lID0gJ2Ryb3AnICsgKGluZGV4ID8gJycgOiAnUmlnaHQnKTtcblxuICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fZmlsdGVyZWRfXyA/IG5ldyBMYXp5V3JhcHBlcih0aGlzKSA6IHRoaXNbZHJvcE5hbWVdKDEpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5jb21wYWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXIoaWRlbnRpdHkpO1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKHByZWRpY2F0ZSkuaGVhZCgpO1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUuZmluZExhc3QgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJldmVyc2UoKS5maW5kKHByZWRpY2F0ZSk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5pbnZva2VNYXAgPSBiYXNlUmVzdChmdW5jdGlvbihwYXRoLCBhcmdzKSB7XG4gICAgICBpZiAodHlwZW9mIHBhdGggPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBiYXNlSW52b2tlKHZhbHVlLCBwYXRoLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnJlamVjdCA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKG5lZ2F0ZShnZXRJdGVyYXRlZShwcmVkaWNhdGUpKSk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHN0YXJ0ID0gdG9JbnRlZ2VyKHN0YXJ0KTtcblxuICAgICAgdmFyIHJlc3VsdCA9IHRoaXM7XG4gICAgICBpZiAocmVzdWx0Ll9fZmlsdGVyZWRfXyAmJiAoc3RhcnQgPiAwIHx8IGVuZCA8IDApKSB7XG4gICAgICAgIHJldHVybiBuZXcgTGF6eVdyYXBwZXIocmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRha2VSaWdodCgtc3RhcnQpO1xuICAgICAgfSBlbHNlIGlmIChzdGFydCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuZHJvcChzdGFydCk7XG4gICAgICB9XG4gICAgICBpZiAoZW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZW5kID0gdG9JbnRlZ2VyKGVuZCk7XG4gICAgICAgIHJlc3VsdCA9IGVuZCA8IDAgPyByZXN1bHQuZHJvcFJpZ2h0KC1lbmQpIDogcmVzdWx0LnRha2UoZW5kIC0gc3RhcnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnRha2VSaWdodFdoaWxlID0gZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXZlcnNlKCkudGFrZVdoaWxlKHByZWRpY2F0ZSkucmV2ZXJzZSgpO1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGFrZShNQVhfQVJSQVlfTEVOR1RIKTtcbiAgICB9O1xuXG4gICAgLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyB0byBgbG9kYXNoLnByb3RvdHlwZWAuXG4gICAgYmFzZUZvck93bihMYXp5V3JhcHBlci5wcm90b3R5cGUsIGZ1bmN0aW9uKGZ1bmMsIG1ldGhvZE5hbWUpIHtcbiAgICAgIHZhciBjaGVja0l0ZXJhdGVlID0gL14oPzpmaWx0ZXJ8ZmluZHxtYXB8cmVqZWN0KXxXaGlsZSQvLnRlc3QobWV0aG9kTmFtZSksXG4gICAgICAgICAgaXNUYWtlciA9IC9eKD86aGVhZHxsYXN0KSQvLnRlc3QobWV0aG9kTmFtZSksXG4gICAgICAgICAgbG9kYXNoRnVuYyA9IGxvZGFzaFtpc1Rha2VyID8gKCd0YWtlJyArIChtZXRob2ROYW1lID09ICdsYXN0JyA/ICdSaWdodCcgOiAnJykpIDogbWV0aG9kTmFtZV0sXG4gICAgICAgICAgcmV0VW53cmFwcGVkID0gaXNUYWtlciB8fCAvXmZpbmQvLnRlc3QobWV0aG9kTmFtZSk7XG5cbiAgICAgIGlmICghbG9kYXNoRnVuYykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsb2Rhc2gucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX193cmFwcGVkX18sXG4gICAgICAgICAgICBhcmdzID0gaXNUYWtlciA/IFsxXSA6IGFyZ3VtZW50cyxcbiAgICAgICAgICAgIGlzTGF6eSA9IHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIsXG4gICAgICAgICAgICBpdGVyYXRlZSA9IGFyZ3NbMF0sXG4gICAgICAgICAgICB1c2VMYXp5ID0gaXNMYXp5IHx8IGlzQXJyYXkodmFsdWUpO1xuXG4gICAgICAgIHZhciBpbnRlcmNlcHRvciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGxvZGFzaEZ1bmMuYXBwbHkobG9kYXNoLCBhcnJheVB1c2goW3ZhbHVlXSwgYXJncykpO1xuICAgICAgICAgIHJldHVybiAoaXNUYWtlciAmJiBjaGFpbkFsbCkgPyByZXN1bHRbMF0gOiByZXN1bHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHVzZUxhenkgJiYgY2hlY2tJdGVyYXRlZSAmJiB0eXBlb2YgaXRlcmF0ZWUgPT0gJ2Z1bmN0aW9uJyAmJiBpdGVyYXRlZS5sZW5ndGggIT0gMSkge1xuICAgICAgICAgIC8vIEF2b2lkIGxhenkgdXNlIGlmIHRoZSBpdGVyYXRlZSBoYXMgYSBcImxlbmd0aFwiIHZhbHVlIG90aGVyIHRoYW4gYDFgLlxuICAgICAgICAgIGlzTGF6eSA9IHVzZUxhenkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2hhaW5BbGwgPSB0aGlzLl9fY2hhaW5fXyxcbiAgICAgICAgICAgIGlzSHlicmlkID0gISF0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCxcbiAgICAgICAgICAgIGlzVW53cmFwcGVkID0gcmV0VW53cmFwcGVkICYmICFjaGFpbkFsbCxcbiAgICAgICAgICAgIG9ubHlMYXp5ID0gaXNMYXp5ICYmICFpc0h5YnJpZDtcblxuICAgICAgICBpZiAoIXJldFVud3JhcHBlZCAmJiB1c2VMYXp5KSB7XG4gICAgICAgICAgdmFsdWUgPSBvbmx5TGF6eSA/IHZhbHVlIDogbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHZhbHVlLCBhcmdzKTtcbiAgICAgICAgICByZXN1bHQuX19hY3Rpb25zX18ucHVzaCh7ICdmdW5jJzogdGhydSwgJ2FyZ3MnOiBbaW50ZXJjZXB0b3JdLCAndGhpc0FyZyc6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIocmVzdWx0LCBjaGFpbkFsbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVW53cmFwcGVkICYmIG9ubHlMYXp5KSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gdGhpcy50aHJ1KGludGVyY2VwdG9yKTtcbiAgICAgICAgcmV0dXJuIGlzVW53cmFwcGVkID8gKGlzVGFrZXIgPyByZXN1bHQudmFsdWUoKVswXSA6IHJlc3VsdC52YWx1ZSgpKSA6IHJlc3VsdDtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYEFycmF5YCBtZXRob2RzIHRvIGBsb2Rhc2gucHJvdG90eXBlYC5cbiAgICBhcnJheUVhY2goWydwb3AnLCAncHVzaCcsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0J10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHtcbiAgICAgIHZhciBmdW5jID0gYXJyYXlQcm90b1ttZXRob2ROYW1lXSxcbiAgICAgICAgICBjaGFpbk5hbWUgPSAvXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QobWV0aG9kTmFtZSkgPyAndGFwJyA6ICd0aHJ1JyxcbiAgICAgICAgICByZXRVbndyYXBwZWQgPSAvXig/OnBvcHxzaGlmdCkkLy50ZXN0KG1ldGhvZE5hbWUpO1xuXG4gICAgICBsb2Rhc2gucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICBpZiAocmV0VW53cmFwcGVkICYmICF0aGlzLl9fY2hhaW5fXykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUoKTtcbiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseShpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW10sIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzW2NoYWluTmFtZV0oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseShpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW10sIGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBNYXAgbWluaWZpZWQgbWV0aG9kIG5hbWVzIHRvIHRoZWlyIHJlYWwgbmFtZXMuXG4gICAgYmFzZUZvck93bihMYXp5V3JhcHBlci5wcm90b3R5cGUsIGZ1bmN0aW9uKGZ1bmMsIG1ldGhvZE5hbWUpIHtcbiAgICAgIHZhciBsb2Rhc2hGdW5jID0gbG9kYXNoW21ldGhvZE5hbWVdO1xuICAgICAgaWYgKGxvZGFzaEZ1bmMpIHtcbiAgICAgICAgdmFyIGtleSA9IGxvZGFzaEZ1bmMubmFtZSArICcnO1xuICAgICAgICBpZiAoIWhhc093blByb3BlcnR5LmNhbGwocmVhbE5hbWVzLCBrZXkpKSB7XG4gICAgICAgICAgcmVhbE5hbWVzW2tleV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICByZWFsTmFtZXNba2V5XS5wdXNoKHsgJ25hbWUnOiBtZXRob2ROYW1lLCAnZnVuYyc6IGxvZGFzaEZ1bmMgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZWFsTmFtZXNbY3JlYXRlSHlicmlkKHVuZGVmaW5lZCwgV1JBUF9CSU5EX0tFWV9GTEFHKS5uYW1lXSA9IFt7XG4gICAgICAnbmFtZSc6ICd3cmFwcGVyJyxcbiAgICAgICdmdW5jJzogdW5kZWZpbmVkXG4gICAgfV07XG5cbiAgICAvLyBBZGQgbWV0aG9kcyB0byBgTGF6eVdyYXBwZXJgLlxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5jbG9uZSA9IGxhenlDbG9uZTtcbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUucmV2ZXJzZSA9IGxhenlSZXZlcnNlO1xuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS52YWx1ZSA9IGxhenlWYWx1ZTtcblxuICAgIC8vIEFkZCBjaGFpbiBzZXF1ZW5jZSBtZXRob2RzIHRvIHRoZSBgbG9kYXNoYCB3cmFwcGVyLlxuICAgIGxvZGFzaC5wcm90b3R5cGUuYXQgPSB3cmFwcGVyQXQ7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5jaGFpbiA9IHdyYXBwZXJDaGFpbjtcbiAgICBsb2Rhc2gucHJvdG90eXBlLmNvbW1pdCA9IHdyYXBwZXJDb21taXQ7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5uZXh0ID0gd3JhcHBlck5leHQ7XG4gICAgbG9kYXNoLnByb3RvdHlwZS5wbGFudCA9IHdyYXBwZXJQbGFudDtcbiAgICBsb2Rhc2gucHJvdG90eXBlLnJldmVyc2UgPSB3cmFwcGVyUmV2ZXJzZTtcbiAgICBsb2Rhc2gucHJvdG90eXBlLnRvSlNPTiA9IGxvZGFzaC5wcm90b3R5cGUudmFsdWVPZiA9IGxvZGFzaC5wcm90b3R5cGUudmFsdWUgPSB3cmFwcGVyVmFsdWU7XG5cbiAgICAvLyBBZGQgbGF6eSBhbGlhc2VzLlxuICAgIGxvZGFzaC5wcm90b3R5cGUuZmlyc3QgPSBsb2Rhc2gucHJvdG90eXBlLmhlYWQ7XG5cbiAgICBpZiAoc3ltSXRlcmF0b3IpIHtcbiAgICAgIGxvZGFzaC5wcm90b3R5cGVbc3ltSXRlcmF0b3JdID0gd3JhcHBlclRvSXRlcmF0b3I7XG4gICAgfVxuICAgIHJldHVybiBsb2Rhc2g7XG4gIH0pO1xuXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gIC8vIEV4cG9ydCBsb2Rhc2guXG4gIHZhciBfID0gcnVuSW5Db250ZXh0KCk7XG5cbiAgLy8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3IgY29uZGl0aW9uIHBhdHRlcm5zIGxpa2U6XG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuICAgIC8vIEV4cG9zZSBMb2Rhc2ggb24gdGhlIGdsb2JhbCBvYmplY3QgdG8gcHJldmVudCBlcnJvcnMgd2hlbiBMb2Rhc2ggaXNcbiAgICAvLyBsb2FkZWQgYnkgYSBzY3JpcHQgdGFnIGluIHRoZSBwcmVzZW5jZSBvZiBhbiBBTUQgbG9hZGVyLlxuICAgIC8vIFNlZSBodHRwOi8vcmVxdWlyZWpzLm9yZy9kb2NzL2Vycm9ycy5odG1sI21pc21hdGNoIGZvciBtb3JlIGRldGFpbHMuXG4gICAgLy8gVXNlIGBfLm5vQ29uZmxpY3RgIHRvIHJlbW92ZSBMb2Rhc2ggZnJvbSB0aGUgZ2xvYmFsIG9iamVjdC5cbiAgICByb290Ll8gPSBfO1xuXG4gICAgLy8gRGVmaW5lIGFzIGFuIGFub255bW91cyBtb2R1bGUgc28sIHRocm91Z2ggcGF0aCBtYXBwaW5nLCBpdCBjYW4gYmVcbiAgICAvLyByZWZlcmVuY2VkIGFzIHRoZSBcInVuZGVyc2NvcmVcIiBtb2R1bGUuXG4gICAgZGVmaW5lKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIF87XG4gICAgfSk7XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIGBleHBvcnRzYCBhZnRlciBgZGVmaW5lYCBpbiBjYXNlIGEgYnVpbGQgb3B0aW1pemVyIGFkZHMgaXQuXG4gIGVsc2UgaWYgKGZyZWVNb2R1bGUpIHtcbiAgICAvLyBFeHBvcnQgZm9yIE5vZGUuanMuXG4gICAgKGZyZWVNb2R1bGUuZXhwb3J0cyA9IF8pLl8gPSBfO1xuICAgIC8vIEV4cG9ydCBmb3IgQ29tbW9uSlMgc3VwcG9ydC5cbiAgICBmcmVlRXhwb3J0cy5fID0gXztcbiAgfVxuICBlbHNlIHtcbiAgICAvLyBFeHBvcnQgdG8gdGhlIGdsb2JhbCBvYmplY3QuXG4gICAgcm9vdC5fID0gXztcbiAgfVxufS5jYWxsKHRoaXMpKTtcbiIsIi8qIVxuICogcGVyZmVjdC1zY3JvbGxiYXIgdjEuNS4wXG4gKiBDb3B5cmlnaHQgMjAyMCBIeXVuamUgSnVuLCBNREJvb3RzdHJhcCBhbmQgQ29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVRcbiAqL1xuXG5mdW5jdGlvbiBnZXQoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gc2V0KGVsZW1lbnQsIG9iaikge1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgdmFyIHZhbCA9IG9ialtrZXldO1xuICAgIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgICAgdmFsID0gdmFsICsgXCJweFwiO1xuICAgIH1cbiAgICBlbGVtZW50LnN0eWxlW2tleV0gPSB2YWw7XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGRpdihjbGFzc05hbWUpIHtcbiAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBkaXYuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICByZXR1cm4gZGl2O1xufVxuXG52YXIgZWxNYXRjaGVzID1cbiAgdHlwZW9mIEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmXG4gIChFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzIHx8XG4gICAgRWxlbWVudC5wcm90b3R5cGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8XG4gICAgRWxlbWVudC5wcm90b3R5cGUubW96TWF0Y2hlc1NlbGVjdG9yIHx8XG4gICAgRWxlbWVudC5wcm90b3R5cGUubXNNYXRjaGVzU2VsZWN0b3IpO1xuXG5mdW5jdGlvbiBtYXRjaGVzKGVsZW1lbnQsIHF1ZXJ5KSB7XG4gIGlmICghZWxNYXRjaGVzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBlbGVtZW50IG1hdGNoaW5nIG1ldGhvZCBzdXBwb3J0ZWQnKTtcbiAgfVxuXG4gIHJldHVybiBlbE1hdGNoZXMuY2FsbChlbGVtZW50LCBxdWVyeSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZShlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnJlbW92ZSkge1xuICAgIGVsZW1lbnQucmVtb3ZlKCk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBxdWVyeUNoaWxkcmVuKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoZWxlbWVudC5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiBtYXRjaGVzKGNoaWxkLCBzZWxlY3Rvcik7IH1cbiAgKTtcbn1cblxudmFyIGNscyA9IHtcbiAgbWFpbjogJ3BzJyxcbiAgcnRsOiAncHNfX3J0bCcsXG4gIGVsZW1lbnQ6IHtcbiAgICB0aHVtYjogZnVuY3Rpb24gKHgpIHsgcmV0dXJuIChcInBzX190aHVtYi1cIiArIHgpOyB9LFxuICAgIHJhaWw6IGZ1bmN0aW9uICh4KSB7IHJldHVybiAoXCJwc19fcmFpbC1cIiArIHgpOyB9LFxuICAgIGNvbnN1bWluZzogJ3BzX19jaGlsZC0tY29uc3VtZScsXG4gIH0sXG4gIHN0YXRlOiB7XG4gICAgZm9jdXM6ICdwcy0tZm9jdXMnLFxuICAgIGNsaWNraW5nOiAncHMtLWNsaWNraW5nJyxcbiAgICBhY3RpdmU6IGZ1bmN0aW9uICh4KSB7IHJldHVybiAoXCJwcy0tYWN0aXZlLVwiICsgeCk7IH0sXG4gICAgc2Nyb2xsaW5nOiBmdW5jdGlvbiAoeCkgeyByZXR1cm4gKFwicHMtLXNjcm9sbGluZy1cIiArIHgpOyB9LFxuICB9LFxufTtcblxuLypcbiAqIEhlbHBlciBtZXRob2RzXG4gKi9cbnZhciBzY3JvbGxpbmdDbGFzc1RpbWVvdXQgPSB7IHg6IG51bGwsIHk6IG51bGwgfTtcblxuZnVuY3Rpb24gYWRkU2Nyb2xsaW5nQ2xhc3MoaSwgeCkge1xuICB2YXIgY2xhc3NMaXN0ID0gaS5lbGVtZW50LmNsYXNzTGlzdDtcbiAgdmFyIGNsYXNzTmFtZSA9IGNscy5zdGF0ZS5zY3JvbGxpbmcoeCk7XG5cbiAgaWYgKGNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKSB7XG4gICAgY2xlYXJUaW1lb3V0KHNjcm9sbGluZ0NsYXNzVGltZW91dFt4XSk7XG4gIH0gZWxzZSB7XG4gICAgY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNjcm9sbGluZ0NsYXNzKGksIHgpIHtcbiAgc2Nyb2xsaW5nQ2xhc3NUaW1lb3V0W3hdID0gc2V0VGltZW91dChcbiAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBpLmlzQWxpdmUgJiYgaS5lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xzLnN0YXRlLnNjcm9sbGluZyh4KSk7IH0sXG4gICAgaS5zZXR0aW5ncy5zY3JvbGxpbmdUaHJlc2hvbGRcbiAgKTtcbn1cblxuZnVuY3Rpb24gc2V0U2Nyb2xsaW5nQ2xhc3NJbnN0YW50bHkoaSwgeCkge1xuICBhZGRTY3JvbGxpbmdDbGFzcyhpLCB4KTtcbiAgcmVtb3ZlU2Nyb2xsaW5nQ2xhc3MoaSwgeCk7XG59XG5cbnZhciBFdmVudEVsZW1lbnQgPSBmdW5jdGlvbiBFdmVudEVsZW1lbnQoZWxlbWVudCkge1xuICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICB0aGlzLmhhbmRsZXJzID0ge307XG59O1xuXG52YXIgcHJvdG90eXBlQWNjZXNzb3JzID0geyBpc0VtcHR5OiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cbkV2ZW50RWxlbWVudC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIGJpbmQgKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICBpZiAodHlwZW9mIHRoaXMuaGFuZGxlcnNbZXZlbnROYW1lXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0aGlzLmhhbmRsZXJzW2V2ZW50TmFtZV0gPSBbXTtcbiAgfVxuICB0aGlzLmhhbmRsZXJzW2V2ZW50TmFtZV0ucHVzaChoYW5kbGVyKTtcbiAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyLCBmYWxzZSk7XG59O1xuXG5FdmVudEVsZW1lbnQucHJvdG90eXBlLnVuYmluZCA9IGZ1bmN0aW9uIHVuYmluZCAoZXZlbnROYW1lLCB0YXJnZXQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB0aGlzLmhhbmRsZXJzW2V2ZW50TmFtZV0gPSB0aGlzLmhhbmRsZXJzW2V2ZW50TmFtZV0uZmlsdGVyKGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgaWYgKHRhcmdldCAmJiBoYW5kbGVyICE9PSB0YXJnZXQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0aGlzJDEuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgaGFuZGxlciwgZmFsc2UpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59O1xuXG5FdmVudEVsZW1lbnQucHJvdG90eXBlLnVuYmluZEFsbCA9IGZ1bmN0aW9uIHVuYmluZEFsbCAoKSB7XG4gIGZvciAodmFyIG5hbWUgaW4gdGhpcy5oYW5kbGVycykge1xuICAgIHRoaXMudW5iaW5kKG5hbWUpO1xuICB9XG59O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMuaXNFbXB0eS5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaGFuZGxlcnMpLmV2ZXJ5KFxuICAgIGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHRoaXMkMS5oYW5kbGVyc1trZXldLmxlbmd0aCA9PT0gMDsgfVxuICApO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIEV2ZW50RWxlbWVudC5wcm90b3R5cGUsIHByb3RvdHlwZUFjY2Vzc29ycyApO1xuXG52YXIgRXZlbnRNYW5hZ2VyID0gZnVuY3Rpb24gRXZlbnRNYW5hZ2VyKCkge1xuICB0aGlzLmV2ZW50RWxlbWVudHMgPSBbXTtcbn07XG5cbkV2ZW50TWFuYWdlci5wcm90b3R5cGUuZXZlbnRFbGVtZW50ID0gZnVuY3Rpb24gZXZlbnRFbGVtZW50IChlbGVtZW50KSB7XG4gIHZhciBlZSA9IHRoaXMuZXZlbnRFbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24gKGVlKSB7IHJldHVybiBlZS5lbGVtZW50ID09PSBlbGVtZW50OyB9KVswXTtcbiAgaWYgKCFlZSkge1xuICAgIGVlID0gbmV3IEV2ZW50RWxlbWVudChlbGVtZW50KTtcbiAgICB0aGlzLmV2ZW50RWxlbWVudHMucHVzaChlZSk7XG4gIH1cbiAgcmV0dXJuIGVlO1xufTtcblxuRXZlbnRNYW5hZ2VyLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZCAoZWxlbWVudCwgZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gIHRoaXMuZXZlbnRFbGVtZW50KGVsZW1lbnQpLmJpbmQoZXZlbnROYW1lLCBoYW5kbGVyKTtcbn07XG5cbkV2ZW50TWFuYWdlci5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24gdW5iaW5kIChlbGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgdmFyIGVlID0gdGhpcy5ldmVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGVlLnVuYmluZChldmVudE5hbWUsIGhhbmRsZXIpO1xuXG4gIGlmIChlZS5pc0VtcHR5KSB7XG4gICAgLy8gcmVtb3ZlXG4gICAgdGhpcy5ldmVudEVsZW1lbnRzLnNwbGljZSh0aGlzLmV2ZW50RWxlbWVudHMuaW5kZXhPZihlZSksIDEpO1xuICB9XG59O1xuXG5FdmVudE1hbmFnZXIucHJvdG90eXBlLnVuYmluZEFsbCA9IGZ1bmN0aW9uIHVuYmluZEFsbCAoKSB7XG4gIHRoaXMuZXZlbnRFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7IHJldHVybiBlLnVuYmluZEFsbCgpOyB9KTtcbiAgdGhpcy5ldmVudEVsZW1lbnRzID0gW107XG59O1xuXG5FdmVudE1hbmFnZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlIChlbGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgdmFyIGVlID0gdGhpcy5ldmVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciBvbmNlSGFuZGxlciA9IGZ1bmN0aW9uIChldnQpIHtcbiAgICBlZS51bmJpbmQoZXZlbnROYW1lLCBvbmNlSGFuZGxlcik7XG4gICAgaGFuZGxlcihldnQpO1xuICB9O1xuICBlZS5iaW5kKGV2ZW50TmFtZSwgb25jZUhhbmRsZXIpO1xufTtcblxuZnVuY3Rpb24gY3JlYXRlRXZlbnQobmFtZSkge1xuICBpZiAodHlwZW9mIHdpbmRvdy5DdXN0b21FdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBuZXcgQ3VzdG9tRXZlbnQobmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpO1xuICAgIGV2dC5pbml0Q3VzdG9tRXZlbnQobmFtZSwgZmFsc2UsIGZhbHNlLCB1bmRlZmluZWQpO1xuICAgIHJldHVybiBldnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1Njcm9sbERpZmYoXG4gIGksXG4gIGF4aXMsXG4gIGRpZmYsXG4gIHVzZVNjcm9sbGluZ0NsYXNzLFxuICBmb3JjZUZpcmVSZWFjaEV2ZW50XG4pIHtcbiAgaWYgKCB1c2VTY3JvbGxpbmdDbGFzcyA9PT0gdm9pZCAwICkgdXNlU2Nyb2xsaW5nQ2xhc3MgPSB0cnVlO1xuICBpZiAoIGZvcmNlRmlyZVJlYWNoRXZlbnQgPT09IHZvaWQgMCApIGZvcmNlRmlyZVJlYWNoRXZlbnQgPSBmYWxzZTtcblxuICB2YXIgZmllbGRzO1xuICBpZiAoYXhpcyA9PT0gJ3RvcCcpIHtcbiAgICBmaWVsZHMgPSBbXG4gICAgICAnY29udGVudEhlaWdodCcsXG4gICAgICAnY29udGFpbmVySGVpZ2h0JyxcbiAgICAgICdzY3JvbGxUb3AnLFxuICAgICAgJ3knLFxuICAgICAgJ3VwJyxcbiAgICAgICdkb3duJyBdO1xuICB9IGVsc2UgaWYgKGF4aXMgPT09ICdsZWZ0Jykge1xuICAgIGZpZWxkcyA9IFtcbiAgICAgICdjb250ZW50V2lkdGgnLFxuICAgICAgJ2NvbnRhaW5lcldpZHRoJyxcbiAgICAgICdzY3JvbGxMZWZ0JyxcbiAgICAgICd4JyxcbiAgICAgICdsZWZ0JyxcbiAgICAgICdyaWdodCcgXTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgcHJvcGVyIGF4aXMgc2hvdWxkIGJlIHByb3ZpZGVkJyk7XG4gIH1cblxuICBwcm9jZXNzU2Nyb2xsRGlmZiQxKGksIGRpZmYsIGZpZWxkcywgdXNlU2Nyb2xsaW5nQ2xhc3MsIGZvcmNlRmlyZVJlYWNoRXZlbnQpO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzU2Nyb2xsRGlmZiQxKFxuICBpLFxuICBkaWZmLFxuICByZWYsXG4gIHVzZVNjcm9sbGluZ0NsYXNzLFxuICBmb3JjZUZpcmVSZWFjaEV2ZW50XG4pIHtcbiAgdmFyIGNvbnRlbnRIZWlnaHQgPSByZWZbMF07XG4gIHZhciBjb250YWluZXJIZWlnaHQgPSByZWZbMV07XG4gIHZhciBzY3JvbGxUb3AgPSByZWZbMl07XG4gIHZhciB5ID0gcmVmWzNdO1xuICB2YXIgdXAgPSByZWZbNF07XG4gIHZhciBkb3duID0gcmVmWzVdO1xuICBpZiAoIHVzZVNjcm9sbGluZ0NsYXNzID09PSB2b2lkIDAgKSB1c2VTY3JvbGxpbmdDbGFzcyA9IHRydWU7XG4gIGlmICggZm9yY2VGaXJlUmVhY2hFdmVudCA9PT0gdm9pZCAwICkgZm9yY2VGaXJlUmVhY2hFdmVudCA9IGZhbHNlO1xuXG4gIHZhciBlbGVtZW50ID0gaS5lbGVtZW50O1xuXG4gIC8vIHJlc2V0IHJlYWNoXG4gIGkucmVhY2hbeV0gPSBudWxsO1xuXG4gIC8vIDEgZm9yIHN1YnBpeGVsIHJvdW5kaW5nXG4gIGlmIChlbGVtZW50W3Njcm9sbFRvcF0gPCAxKSB7XG4gICAgaS5yZWFjaFt5XSA9ICdzdGFydCc7XG4gIH1cblxuICAvLyAxIGZvciBzdWJwaXhlbCByb3VuZGluZ1xuICBpZiAoZWxlbWVudFtzY3JvbGxUb3BdID4gaVtjb250ZW50SGVpZ2h0XSAtIGlbY29udGFpbmVySGVpZ2h0XSAtIDEpIHtcbiAgICBpLnJlYWNoW3ldID0gJ2VuZCc7XG4gIH1cblxuICBpZiAoZGlmZikge1xuICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChjcmVhdGVFdmVudCgoXCJwcy1zY3JvbGwtXCIgKyB5KSkpO1xuXG4gICAgaWYgKGRpZmYgPCAwKSB7XG4gICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoY3JlYXRlRXZlbnQoKFwicHMtc2Nyb2xsLVwiICsgdXApKSk7XG4gICAgfSBlbHNlIGlmIChkaWZmID4gMCkge1xuICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KGNyZWF0ZUV2ZW50KChcInBzLXNjcm9sbC1cIiArIGRvd24pKSk7XG4gICAgfVxuXG4gICAgaWYgKHVzZVNjcm9sbGluZ0NsYXNzKSB7XG4gICAgICBzZXRTY3JvbGxpbmdDbGFzc0luc3RhbnRseShpLCB5KTtcbiAgICB9XG4gIH1cblxuICBpZiAoaS5yZWFjaFt5XSAmJiAoZGlmZiB8fCBmb3JjZUZpcmVSZWFjaEV2ZW50KSkge1xuICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChjcmVhdGVFdmVudCgoXCJwcy1cIiArIHkgKyBcIi1yZWFjaC1cIiArIChpLnJlYWNoW3ldKSkpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b0ludCh4KSB7XG4gIHJldHVybiBwYXJzZUludCh4LCAxMCkgfHwgMDtcbn1cblxuZnVuY3Rpb24gaXNFZGl0YWJsZShlbCkge1xuICByZXR1cm4gKFxuICAgIG1hdGNoZXMoZWwsICdpbnB1dCxbY29udGVudGVkaXRhYmxlXScpIHx8XG4gICAgbWF0Y2hlcyhlbCwgJ3NlbGVjdCxbY29udGVudGVkaXRhYmxlXScpIHx8XG4gICAgbWF0Y2hlcyhlbCwgJ3RleHRhcmVhLFtjb250ZW50ZWRpdGFibGVdJykgfHxcbiAgICBtYXRjaGVzKGVsLCAnYnV0dG9uLFtjb250ZW50ZWRpdGFibGVdJylcbiAgKTtcbn1cblxuZnVuY3Rpb24gb3V0ZXJXaWR0aChlbGVtZW50KSB7XG4gIHZhciBzdHlsZXMgPSBnZXQoZWxlbWVudCk7XG4gIHJldHVybiAoXG4gICAgdG9JbnQoc3R5bGVzLndpZHRoKSArXG4gICAgdG9JbnQoc3R5bGVzLnBhZGRpbmdMZWZ0KSArXG4gICAgdG9JbnQoc3R5bGVzLnBhZGRpbmdSaWdodCkgK1xuICAgIHRvSW50KHN0eWxlcy5ib3JkZXJMZWZ0V2lkdGgpICtcbiAgICB0b0ludChzdHlsZXMuYm9yZGVyUmlnaHRXaWR0aClcbiAgKTtcbn1cblxudmFyIGVudiA9IHtcbiAgaXNXZWJLaXQ6XG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICdXZWJraXRBcHBlYXJhbmNlJyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUsXG4gIHN1cHBvcnRzVG91Y2g6XG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAoJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8XG4gICAgICAoJ21heFRvdWNoUG9pbnRzJyBpbiB3aW5kb3cubmF2aWdhdG9yICYmXG4gICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAwKSB8fFxuICAgICAgKHdpbmRvdy5Eb2N1bWVudFRvdWNoICYmIGRvY3VtZW50IGluc3RhbmNlb2Ygd2luZG93LkRvY3VtZW50VG91Y2gpKSxcbiAgc3VwcG9ydHNJZVBvaW50ZXI6XG4gICAgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLm1zTWF4VG91Y2hQb2ludHMsXG4gIGlzQ2hyb21lOlxuICAgIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmXG4gICAgL0Nocm9tZS9pLnRlc3QobmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQpLFxufTtcblxuZnVuY3Rpb24gdXBkYXRlR2VvbWV0cnkoaSkge1xuICB2YXIgZWxlbWVudCA9IGkuZWxlbWVudDtcbiAgdmFyIHJvdW5kZWRTY3JvbGxUb3AgPSBNYXRoLmZsb29yKGVsZW1lbnQuc2Nyb2xsVG9wKTtcbiAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIGkuY29udGFpbmVyV2lkdGggPSBNYXRoLmNlaWwocmVjdC53aWR0aCk7XG4gIGkuY29udGFpbmVySGVpZ2h0ID0gTWF0aC5jZWlsKHJlY3QuaGVpZ2h0KTtcbiAgaS5jb250ZW50V2lkdGggPSBlbGVtZW50LnNjcm9sbFdpZHRoO1xuICBpLmNvbnRlbnRIZWlnaHQgPSBlbGVtZW50LnNjcm9sbEhlaWdodDtcblxuICBpZiAoIWVsZW1lbnQuY29udGFpbnMoaS5zY3JvbGxiYXJYUmFpbCkpIHtcbiAgICAvLyBjbGVhbiB1cCBhbmQgYXBwZW5kXG4gICAgcXVlcnlDaGlsZHJlbihlbGVtZW50LCBjbHMuZWxlbWVudC5yYWlsKCd4JykpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiByZW1vdmUoZWwpOyB9XG4gICAgKTtcbiAgICBlbGVtZW50LmFwcGVuZENoaWxkKGkuc2Nyb2xsYmFyWFJhaWwpO1xuICB9XG4gIGlmICghZWxlbWVudC5jb250YWlucyhpLnNjcm9sbGJhcllSYWlsKSkge1xuICAgIC8vIGNsZWFuIHVwIGFuZCBhcHBlbmRcbiAgICBxdWVyeUNoaWxkcmVuKGVsZW1lbnQsIGNscy5lbGVtZW50LnJhaWwoJ3knKSkuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIHJlbW92ZShlbCk7IH1cbiAgICApO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoaS5zY3JvbGxiYXJZUmFpbCk7XG4gIH1cblxuICBpZiAoXG4gICAgIWkuc2V0dGluZ3Muc3VwcHJlc3NTY3JvbGxYICYmXG4gICAgaS5jb250YWluZXJXaWR0aCArIGkuc2V0dGluZ3Muc2Nyb2xsWE1hcmdpbk9mZnNldCA8IGkuY29udGVudFdpZHRoXG4gICkge1xuICAgIGkuc2Nyb2xsYmFyWEFjdGl2ZSA9IHRydWU7XG4gICAgaS5yYWlsWFdpZHRoID0gaS5jb250YWluZXJXaWR0aCAtIGkucmFpbFhNYXJnaW5XaWR0aDtcbiAgICBpLnJhaWxYUmF0aW8gPSBpLmNvbnRhaW5lcldpZHRoIC8gaS5yYWlsWFdpZHRoO1xuICAgIGkuc2Nyb2xsYmFyWFdpZHRoID0gZ2V0VGh1bWJTaXplKFxuICAgICAgaSxcbiAgICAgIHRvSW50KChpLnJhaWxYV2lkdGggKiBpLmNvbnRhaW5lcldpZHRoKSAvIGkuY29udGVudFdpZHRoKVxuICAgICk7XG4gICAgaS5zY3JvbGxiYXJYTGVmdCA9IHRvSW50KFxuICAgICAgKChpLm5lZ2F0aXZlU2Nyb2xsQWRqdXN0bWVudCArIGVsZW1lbnQuc2Nyb2xsTGVmdCkgKlxuICAgICAgICAoaS5yYWlsWFdpZHRoIC0gaS5zY3JvbGxiYXJYV2lkdGgpKSAvXG4gICAgICAgIChpLmNvbnRlbnRXaWR0aCAtIGkuY29udGFpbmVyV2lkdGgpXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBpLnNjcm9sbGJhclhBY3RpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhaS5zZXR0aW5ncy5zdXBwcmVzc1Njcm9sbFkgJiZcbiAgICBpLmNvbnRhaW5lckhlaWdodCArIGkuc2V0dGluZ3Muc2Nyb2xsWU1hcmdpbk9mZnNldCA8IGkuY29udGVudEhlaWdodFxuICApIHtcbiAgICBpLnNjcm9sbGJhcllBY3RpdmUgPSB0cnVlO1xuICAgIGkucmFpbFlIZWlnaHQgPSBpLmNvbnRhaW5lckhlaWdodCAtIGkucmFpbFlNYXJnaW5IZWlnaHQ7XG4gICAgaS5yYWlsWVJhdGlvID0gaS5jb250YWluZXJIZWlnaHQgLyBpLnJhaWxZSGVpZ2h0O1xuICAgIGkuc2Nyb2xsYmFyWUhlaWdodCA9IGdldFRodW1iU2l6ZShcbiAgICAgIGksXG4gICAgICB0b0ludCgoaS5yYWlsWUhlaWdodCAqIGkuY29udGFpbmVySGVpZ2h0KSAvIGkuY29udGVudEhlaWdodClcbiAgICApO1xuICAgIGkuc2Nyb2xsYmFyWVRvcCA9IHRvSW50KFxuICAgICAgKHJvdW5kZWRTY3JvbGxUb3AgKiAoaS5yYWlsWUhlaWdodCAtIGkuc2Nyb2xsYmFyWUhlaWdodCkpIC9cbiAgICAgICAgKGkuY29udGVudEhlaWdodCAtIGkuY29udGFpbmVySGVpZ2h0KVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgaS5zY3JvbGxiYXJZQWN0aXZlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoaS5zY3JvbGxiYXJYTGVmdCA+PSBpLnJhaWxYV2lkdGggLSBpLnNjcm9sbGJhclhXaWR0aCkge1xuICAgIGkuc2Nyb2xsYmFyWExlZnQgPSBpLnJhaWxYV2lkdGggLSBpLnNjcm9sbGJhclhXaWR0aDtcbiAgfVxuICBpZiAoaS5zY3JvbGxiYXJZVG9wID49IGkucmFpbFlIZWlnaHQgLSBpLnNjcm9sbGJhcllIZWlnaHQpIHtcbiAgICBpLnNjcm9sbGJhcllUb3AgPSBpLnJhaWxZSGVpZ2h0IC0gaS5zY3JvbGxiYXJZSGVpZ2h0O1xuICB9XG5cbiAgdXBkYXRlQ3NzKGVsZW1lbnQsIGkpO1xuXG4gIGlmIChpLnNjcm9sbGJhclhBY3RpdmUpIHtcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xzLnN0YXRlLmFjdGl2ZSgneCcpKTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xzLnN0YXRlLmFjdGl2ZSgneCcpKTtcbiAgICBpLnNjcm9sbGJhclhXaWR0aCA9IDA7XG4gICAgaS5zY3JvbGxiYXJYTGVmdCA9IDA7XG4gICAgZWxlbWVudC5zY3JvbGxMZWZ0ID0gaS5pc1J0bCA9PT0gdHJ1ZSA/IGkuY29udGVudFdpZHRoIDogMDtcbiAgfVxuICBpZiAoaS5zY3JvbGxiYXJZQWN0aXZlKSB7XG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNscy5zdGF0ZS5hY3RpdmUoJ3knKSk7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNscy5zdGF0ZS5hY3RpdmUoJ3knKSk7XG4gICAgaS5zY3JvbGxiYXJZSGVpZ2h0ID0gMDtcbiAgICBpLnNjcm9sbGJhcllUb3AgPSAwO1xuICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUaHVtYlNpemUoaSwgdGh1bWJTaXplKSB7XG4gIGlmIChpLnNldHRpbmdzLm1pblNjcm9sbGJhckxlbmd0aCkge1xuICAgIHRodW1iU2l6ZSA9IE1hdGgubWF4KHRodW1iU2l6ZSwgaS5zZXR0aW5ncy5taW5TY3JvbGxiYXJMZW5ndGgpO1xuICB9XG4gIGlmIChpLnNldHRpbmdzLm1heFNjcm9sbGJhckxlbmd0aCkge1xuICAgIHRodW1iU2l6ZSA9IE1hdGgubWluKHRodW1iU2l6ZSwgaS5zZXR0aW5ncy5tYXhTY3JvbGxiYXJMZW5ndGgpO1xuICB9XG4gIHJldHVybiB0aHVtYlNpemU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNzcyhlbGVtZW50LCBpKSB7XG4gIHZhciB4UmFpbE9mZnNldCA9IHsgd2lkdGg6IGkucmFpbFhXaWR0aCB9O1xuICB2YXIgcm91bmRlZFNjcm9sbFRvcCA9IE1hdGguZmxvb3IoZWxlbWVudC5zY3JvbGxUb3ApO1xuXG4gIGlmIChpLmlzUnRsKSB7XG4gICAgeFJhaWxPZmZzZXQubGVmdCA9XG4gICAgICBpLm5lZ2F0aXZlU2Nyb2xsQWRqdXN0bWVudCArXG4gICAgICBlbGVtZW50LnNjcm9sbExlZnQgK1xuICAgICAgaS5jb250YWluZXJXaWR0aCAtXG4gICAgICBpLmNvbnRlbnRXaWR0aDtcbiAgfSBlbHNlIHtcbiAgICB4UmFpbE9mZnNldC5sZWZ0ID0gZWxlbWVudC5zY3JvbGxMZWZ0O1xuICB9XG4gIGlmIChpLmlzU2Nyb2xsYmFyWFVzaW5nQm90dG9tKSB7XG4gICAgeFJhaWxPZmZzZXQuYm90dG9tID0gaS5zY3JvbGxiYXJYQm90dG9tIC0gcm91bmRlZFNjcm9sbFRvcDtcbiAgfSBlbHNlIHtcbiAgICB4UmFpbE9mZnNldC50b3AgPSBpLnNjcm9sbGJhclhUb3AgKyByb3VuZGVkU2Nyb2xsVG9wO1xuICB9XG4gIHNldChpLnNjcm9sbGJhclhSYWlsLCB4UmFpbE9mZnNldCk7XG5cbiAgdmFyIHlSYWlsT2Zmc2V0ID0geyB0b3A6IHJvdW5kZWRTY3JvbGxUb3AsIGhlaWdodDogaS5yYWlsWUhlaWdodCB9O1xuICBpZiAoaS5pc1Njcm9sbGJhcllVc2luZ1JpZ2h0KSB7XG4gICAgaWYgKGkuaXNSdGwpIHtcbiAgICAgIHlSYWlsT2Zmc2V0LnJpZ2h0ID1cbiAgICAgICAgaS5jb250ZW50V2lkdGggLVxuICAgICAgICAoaS5uZWdhdGl2ZVNjcm9sbEFkanVzdG1lbnQgKyBlbGVtZW50LnNjcm9sbExlZnQpIC1cbiAgICAgICAgaS5zY3JvbGxiYXJZUmlnaHQgLVxuICAgICAgICBpLnNjcm9sbGJhcllPdXRlcldpZHRoIC1cbiAgICAgICAgOTtcbiAgICB9IGVsc2Uge1xuICAgICAgeVJhaWxPZmZzZXQucmlnaHQgPSBpLnNjcm9sbGJhcllSaWdodCAtIGVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGkuaXNSdGwpIHtcbiAgICAgIHlSYWlsT2Zmc2V0LmxlZnQgPVxuICAgICAgICBpLm5lZ2F0aXZlU2Nyb2xsQWRqdXN0bWVudCArXG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsTGVmdCArXG4gICAgICAgIGkuY29udGFpbmVyV2lkdGggKiAyIC1cbiAgICAgICAgaS5jb250ZW50V2lkdGggLVxuICAgICAgICBpLnNjcm9sbGJhcllMZWZ0IC1cbiAgICAgICAgaS5zY3JvbGxiYXJZT3V0ZXJXaWR0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgeVJhaWxPZmZzZXQubGVmdCA9IGkuc2Nyb2xsYmFyWUxlZnQgKyBlbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgfVxuICB9XG4gIHNldChpLnNjcm9sbGJhcllSYWlsLCB5UmFpbE9mZnNldCk7XG5cbiAgc2V0KGkuc2Nyb2xsYmFyWCwge1xuICAgIGxlZnQ6IGkuc2Nyb2xsYmFyWExlZnQsXG4gICAgd2lkdGg6IGkuc2Nyb2xsYmFyWFdpZHRoIC0gaS5yYWlsQm9yZGVyWFdpZHRoLFxuICB9KTtcbiAgc2V0KGkuc2Nyb2xsYmFyWSwge1xuICAgIHRvcDogaS5zY3JvbGxiYXJZVG9wLFxuICAgIGhlaWdodDogaS5zY3JvbGxiYXJZSGVpZ2h0IC0gaS5yYWlsQm9yZGVyWVdpZHRoLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xpY2tSYWlsKGkpIHtcbiAgdmFyIGVsZW1lbnQgPSBpLmVsZW1lbnQ7XG5cbiAgaS5ldmVudC5iaW5kKGkuc2Nyb2xsYmFyWSwgJ21vdXNlZG93bicsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpOyB9KTtcbiAgaS5ldmVudC5iaW5kKGkuc2Nyb2xsYmFyWVJhaWwsICdtb3VzZWRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBwb3NpdGlvblRvcCA9XG4gICAgICBlLnBhZ2VZIC1cbiAgICAgIHdpbmRvdy5wYWdlWU9mZnNldCAtXG4gICAgICBpLnNjcm9sbGJhcllSYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICB2YXIgZGlyZWN0aW9uID0gcG9zaXRpb25Ub3AgPiBpLnNjcm9sbGJhcllUb3AgPyAxIDogLTE7XG5cbiAgICBpLmVsZW1lbnQuc2Nyb2xsVG9wICs9IGRpcmVjdGlvbiAqIGkuY29udGFpbmVySGVpZ2h0O1xuICAgIHVwZGF0ZUdlb21ldHJ5KGkpO1xuXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSk7XG5cbiAgaS5ldmVudC5iaW5kKGkuc2Nyb2xsYmFyWCwgJ21vdXNlZG93bicsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpOyB9KTtcbiAgaS5ldmVudC5iaW5kKGkuc2Nyb2xsYmFyWFJhaWwsICdtb3VzZWRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBwb3NpdGlvbkxlZnQgPVxuICAgICAgZS5wYWdlWCAtXG4gICAgICB3aW5kb3cucGFnZVhPZmZzZXQgLVxuICAgICAgaS5zY3JvbGxiYXJYUmFpbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgIHZhciBkaXJlY3Rpb24gPSBwb3NpdGlvbkxlZnQgPiBpLnNjcm9sbGJhclhMZWZ0ID8gMSA6IC0xO1xuXG4gICAgaS5lbGVtZW50LnNjcm9sbExlZnQgKz0gZGlyZWN0aW9uICogaS5jb250YWluZXJXaWR0aDtcbiAgICB1cGRhdGVHZW9tZXRyeShpKTtcblxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkcmFnVGh1bWIoaSkge1xuICBiaW5kTW91c2VTY3JvbGxIYW5kbGVyKGksIFtcbiAgICAnY29udGFpbmVyV2lkdGgnLFxuICAgICdjb250ZW50V2lkdGgnLFxuICAgICdwYWdlWCcsXG4gICAgJ3JhaWxYV2lkdGgnLFxuICAgICdzY3JvbGxiYXJYJyxcbiAgICAnc2Nyb2xsYmFyWFdpZHRoJyxcbiAgICAnc2Nyb2xsTGVmdCcsXG4gICAgJ3gnLFxuICAgICdzY3JvbGxiYXJYUmFpbCcgXSk7XG4gIGJpbmRNb3VzZVNjcm9sbEhhbmRsZXIoaSwgW1xuICAgICdjb250YWluZXJIZWlnaHQnLFxuICAgICdjb250ZW50SGVpZ2h0JyxcbiAgICAncGFnZVknLFxuICAgICdyYWlsWUhlaWdodCcsXG4gICAgJ3Njcm9sbGJhclknLFxuICAgICdzY3JvbGxiYXJZSGVpZ2h0JyxcbiAgICAnc2Nyb2xsVG9wJyxcbiAgICAneScsXG4gICAgJ3Njcm9sbGJhcllSYWlsJyBdKTtcbn1cblxuZnVuY3Rpb24gYmluZE1vdXNlU2Nyb2xsSGFuZGxlcihcbiAgaSxcbiAgcmVmXG4pIHtcbiAgdmFyIGNvbnRhaW5lckhlaWdodCA9IHJlZlswXTtcbiAgdmFyIGNvbnRlbnRIZWlnaHQgPSByZWZbMV07XG4gIHZhciBwYWdlWSA9IHJlZlsyXTtcbiAgdmFyIHJhaWxZSGVpZ2h0ID0gcmVmWzNdO1xuICB2YXIgc2Nyb2xsYmFyWSA9IHJlZls0XTtcbiAgdmFyIHNjcm9sbGJhcllIZWlnaHQgPSByZWZbNV07XG4gIHZhciBzY3JvbGxUb3AgPSByZWZbNl07XG4gIHZhciB5ID0gcmVmWzddO1xuICB2YXIgc2Nyb2xsYmFyWVJhaWwgPSByZWZbOF07XG5cbiAgdmFyIGVsZW1lbnQgPSBpLmVsZW1lbnQ7XG5cbiAgdmFyIHN0YXJ0aW5nU2Nyb2xsVG9wID0gbnVsbDtcbiAgdmFyIHN0YXJ0aW5nTW91c2VQYWdlWSA9IG51bGw7XG4gIHZhciBzY3JvbGxCeSA9IG51bGw7XG5cbiAgZnVuY3Rpb24gbW91c2VNb3ZlSGFuZGxlcihlKSB7XG4gICAgaWYgKGUudG91Y2hlcyAmJiBlLnRvdWNoZXNbMF0pIHtcbiAgICAgIGVbcGFnZVldID0gZS50b3VjaGVzWzBdLnBhZ2VZO1xuICAgIH1cbiAgICBlbGVtZW50W3Njcm9sbFRvcF0gPVxuICAgICAgc3RhcnRpbmdTY3JvbGxUb3AgKyBzY3JvbGxCeSAqIChlW3BhZ2VZXSAtIHN0YXJ0aW5nTW91c2VQYWdlWSk7XG4gICAgYWRkU2Nyb2xsaW5nQ2xhc3MoaSwgeSk7XG4gICAgdXBkYXRlR2VvbWV0cnkoaSk7XG5cbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1vdXNlVXBIYW5kbGVyKCkge1xuICAgIHJlbW92ZVNjcm9sbGluZ0NsYXNzKGksIHkpO1xuICAgIGlbc2Nyb2xsYmFyWVJhaWxdLmNsYXNzTGlzdC5yZW1vdmUoY2xzLnN0YXRlLmNsaWNraW5nKTtcbiAgICBpLmV2ZW50LnVuYmluZChpLm93bmVyRG9jdW1lbnQsICdtb3VzZW1vdmUnLCBtb3VzZU1vdmVIYW5kbGVyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJpbmRNb3ZlcyhlLCB0b3VjaE1vZGUpIHtcbiAgICBzdGFydGluZ1Njcm9sbFRvcCA9IGVsZW1lbnRbc2Nyb2xsVG9wXTtcbiAgICBpZiAodG91Y2hNb2RlICYmIGUudG91Y2hlcykge1xuICAgICAgZVtwYWdlWV0gPSBlLnRvdWNoZXNbMF0ucGFnZVk7XG4gICAgfVxuICAgIHN0YXJ0aW5nTW91c2VQYWdlWSA9IGVbcGFnZVldO1xuICAgIHNjcm9sbEJ5ID1cbiAgICAgIChpW2NvbnRlbnRIZWlnaHRdIC0gaVtjb250YWluZXJIZWlnaHRdKSAvXG4gICAgICAoaVtyYWlsWUhlaWdodF0gLSBpW3Njcm9sbGJhcllIZWlnaHRdKTtcbiAgICBpZiAoIXRvdWNoTW9kZSkge1xuICAgICAgaS5ldmVudC5iaW5kKGkub3duZXJEb2N1bWVudCwgJ21vdXNlbW92ZScsIG1vdXNlTW92ZUhhbmRsZXIpO1xuICAgICAgaS5ldmVudC5vbmNlKGkub3duZXJEb2N1bWVudCwgJ21vdXNldXAnLCBtb3VzZVVwSGFuZGxlcik7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkuZXZlbnQuYmluZChpLm93bmVyRG9jdW1lbnQsICd0b3VjaG1vdmUnLCBtb3VzZU1vdmVIYW5kbGVyKTtcbiAgICB9XG5cbiAgICBpW3Njcm9sbGJhcllSYWlsXS5jbGFzc0xpc3QuYWRkKGNscy5zdGF0ZS5jbGlja2luZyk7XG5cbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgaS5ldmVudC5iaW5kKGlbc2Nyb2xsYmFyWV0sICdtb3VzZWRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgIGJpbmRNb3ZlcyhlKTtcbiAgfSk7XG4gIGkuZXZlbnQuYmluZChpW3Njcm9sbGJhclldLCAndG91Y2hzdGFydCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgYmluZE1vdmVzKGUsIHRydWUpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24ga2V5Ym9hcmQoaSkge1xuICB2YXIgZWxlbWVudCA9IGkuZWxlbWVudDtcblxuICB2YXIgZWxlbWVudEhvdmVyZWQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtYXRjaGVzKGVsZW1lbnQsICc6aG92ZXInKTsgfTtcbiAgdmFyIHNjcm9sbGJhckZvY3VzZWQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtYXRjaGVzKGkuc2Nyb2xsYmFyWCwgJzpmb2N1cycpIHx8IG1hdGNoZXMoaS5zY3JvbGxiYXJZLCAnOmZvY3VzJyk7IH07XG5cbiAgZnVuY3Rpb24gc2hvdWxkUHJldmVudERlZmF1bHQoZGVsdGFYLCBkZWx0YVkpIHtcbiAgICB2YXIgc2Nyb2xsVG9wID0gTWF0aC5mbG9vcihlbGVtZW50LnNjcm9sbFRvcCk7XG4gICAgaWYgKGRlbHRhWCA9PT0gMCkge1xuICAgICAgaWYgKCFpLnNjcm9sbGJhcllBY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICAoc2Nyb2xsVG9wID09PSAwICYmIGRlbHRhWSA+IDApIHx8XG4gICAgICAgIChzY3JvbGxUb3AgPj0gaS5jb250ZW50SGVpZ2h0IC0gaS5jb250YWluZXJIZWlnaHQgJiYgZGVsdGFZIDwgMClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gIWkuc2V0dGluZ3Mud2hlZWxQcm9wYWdhdGlvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2Nyb2xsTGVmdCA9IGVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBpZiAoZGVsdGFZID09PSAwKSB7XG4gICAgICBpZiAoIWkuc2Nyb2xsYmFyWEFjdGl2ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIChzY3JvbGxMZWZ0ID09PSAwICYmIGRlbHRhWCA8IDApIHx8XG4gICAgICAgIChzY3JvbGxMZWZ0ID49IGkuY29udGVudFdpZHRoIC0gaS5jb250YWluZXJXaWR0aCAmJiBkZWx0YVggPiAwKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiAhaS5zZXR0aW5ncy53aGVlbFByb3BhZ2F0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGkuZXZlbnQuYmluZChpLm93bmVyRG9jdW1lbnQsICdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoXG4gICAgICAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQgJiYgZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgfHxcbiAgICAgIGUuZGVmYXVsdFByZXZlbnRlZFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZWxlbWVudEhvdmVyZWQoKSAmJiAhc2Nyb2xsYmFyRm9jdXNlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50XG4gICAgICA/IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRcbiAgICAgIDogaS5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGlmIChhY3RpdmVFbGVtZW50LnRhZ05hbWUgPT09ICdJRlJBTUUnKSB7XG4gICAgICAgIGFjdGl2ZUVsZW1lbnQgPSBhY3RpdmVFbGVtZW50LmNvbnRlbnREb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZ28gZGVlcGVyIGlmIGVsZW1lbnQgaXMgYSB3ZWJjb21wb25lbnRcbiAgICAgICAgd2hpbGUgKGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdCkge1xuICAgICAgICAgIGFjdGl2ZUVsZW1lbnQgPSBhY3RpdmVFbGVtZW50LnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzRWRpdGFibGUoYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkZWx0YVggPSAwO1xuICAgIHZhciBkZWx0YVkgPSAwO1xuXG4gICAgc3dpdGNoIChlLndoaWNoKSB7XG4gICAgICBjYXNlIDM3OiAvLyBsZWZ0XG4gICAgICAgIGlmIChlLm1ldGFLZXkpIHtcbiAgICAgICAgICBkZWx0YVggPSAtaS5jb250ZW50V2lkdGg7XG4gICAgICAgIH0gZWxzZSBpZiAoZS5hbHRLZXkpIHtcbiAgICAgICAgICBkZWx0YVggPSAtaS5jb250YWluZXJXaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWx0YVggPSAtMzA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM4OiAvLyB1cFxuICAgICAgICBpZiAoZS5tZXRhS2V5KSB7XG4gICAgICAgICAgZGVsdGFZID0gaS5jb250ZW50SGVpZ2h0O1xuICAgICAgICB9IGVsc2UgaWYgKGUuYWx0S2V5KSB7XG4gICAgICAgICAgZGVsdGFZID0gaS5jb250YWluZXJIZWlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsdGFZID0gMzA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM5OiAvLyByaWdodFxuICAgICAgICBpZiAoZS5tZXRhS2V5KSB7XG4gICAgICAgICAgZGVsdGFYID0gaS5jb250ZW50V2lkdGg7XG4gICAgICAgIH0gZWxzZSBpZiAoZS5hbHRLZXkpIHtcbiAgICAgICAgICBkZWx0YVggPSBpLmNvbnRhaW5lcldpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbHRhWCA9IDMwO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA0MDogLy8gZG93blxuICAgICAgICBpZiAoZS5tZXRhS2V5KSB7XG4gICAgICAgICAgZGVsdGFZID0gLWkuY29udGVudEhlaWdodDtcbiAgICAgICAgfSBlbHNlIGlmIChlLmFsdEtleSkge1xuICAgICAgICAgIGRlbHRhWSA9IC1pLmNvbnRhaW5lckhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWx0YVkgPSAtMzA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDMyOiAvLyBzcGFjZSBiYXJcbiAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICBkZWx0YVkgPSBpLmNvbnRhaW5lckhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWx0YVkgPSAtaS5jb250YWluZXJIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDMzOiAvLyBwYWdlIHVwXG4gICAgICAgIGRlbHRhWSA9IGkuY29udGFpbmVySGVpZ2h0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzQ6IC8vIHBhZ2UgZG93blxuICAgICAgICBkZWx0YVkgPSAtaS5jb250YWluZXJIZWlnaHQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzNjogLy8gaG9tZVxuICAgICAgICBkZWx0YVkgPSBpLmNvbnRlbnRIZWlnaHQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzNTogLy8gZW5kXG4gICAgICAgIGRlbHRhWSA9IC1pLmNvbnRlbnRIZWlnaHQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpLnNldHRpbmdzLnN1cHByZXNzU2Nyb2xsWCAmJiBkZWx0YVggIT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGkuc2V0dGluZ3Muc3VwcHJlc3NTY3JvbGxZICYmIGRlbHRhWSAhPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVsZW1lbnQuc2Nyb2xsVG9wIC09IGRlbHRhWTtcbiAgICBlbGVtZW50LnNjcm9sbExlZnQgKz0gZGVsdGFYO1xuICAgIHVwZGF0ZUdlb21ldHJ5KGkpO1xuXG4gICAgaWYgKHNob3VsZFByZXZlbnREZWZhdWx0KGRlbHRhWCwgZGVsdGFZKSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHdoZWVsKGkpIHtcbiAgdmFyIGVsZW1lbnQgPSBpLmVsZW1lbnQ7XG5cbiAgZnVuY3Rpb24gc2hvdWxkUHJldmVudERlZmF1bHQoZGVsdGFYLCBkZWx0YVkpIHtcbiAgICB2YXIgcm91bmRlZFNjcm9sbFRvcCA9IE1hdGguZmxvb3IoZWxlbWVudC5zY3JvbGxUb3ApO1xuICAgIHZhciBpc1RvcCA9IGVsZW1lbnQuc2Nyb2xsVG9wID09PSAwO1xuICAgIHZhciBpc0JvdHRvbSA9XG4gICAgICByb3VuZGVkU2Nyb2xsVG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgPT09IGVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICAgIHZhciBpc0xlZnQgPSBlbGVtZW50LnNjcm9sbExlZnQgPT09IDA7XG4gICAgdmFyIGlzUmlnaHQgPVxuICAgICAgZWxlbWVudC5zY3JvbGxMZWZ0ICsgZWxlbWVudC5vZmZzZXRXaWR0aCA9PT0gZWxlbWVudC5zY3JvbGxXaWR0aDtcblxuICAgIHZhciBoaXRzQm91bmQ7XG5cbiAgICAvLyBwaWNrIGF4aXMgd2l0aCBwcmltYXJ5IGRpcmVjdGlvblxuICAgIGlmIChNYXRoLmFicyhkZWx0YVkpID4gTWF0aC5hYnMoZGVsdGFYKSkge1xuICAgICAgaGl0c0JvdW5kID0gaXNUb3AgfHwgaXNCb3R0b207XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpdHNCb3VuZCA9IGlzTGVmdCB8fCBpc1JpZ2h0O1xuICAgIH1cblxuICAgIHJldHVybiBoaXRzQm91bmQgPyAhaS5zZXR0aW5ncy53aGVlbFByb3BhZ2F0aW9uIDogdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERlbHRhRnJvbUV2ZW50KGUpIHtcbiAgICB2YXIgZGVsdGFYID0gZS5kZWx0YVg7XG4gICAgdmFyIGRlbHRhWSA9IC0xICogZS5kZWx0YVk7XG5cbiAgICBpZiAodHlwZW9mIGRlbHRhWCA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGRlbHRhWSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIE9TIFggU2FmYXJpXG4gICAgICBkZWx0YVggPSAoLTEgKiBlLndoZWVsRGVsdGFYKSAvIDY7XG4gICAgICBkZWx0YVkgPSBlLndoZWVsRGVsdGFZIC8gNjtcbiAgICB9XG5cbiAgICBpZiAoZS5kZWx0YU1vZGUgJiYgZS5kZWx0YU1vZGUgPT09IDEpIHtcbiAgICAgIC8vIEZpcmVmb3ggaW4gZGVsdGFNb2RlIDE6IExpbmUgc2Nyb2xsaW5nXG4gICAgICBkZWx0YVggKj0gMTA7XG4gICAgICBkZWx0YVkgKj0gMTA7XG4gICAgfVxuXG4gICAgaWYgKGRlbHRhWCAhPT0gZGVsdGFYICYmIGRlbHRhWSAhPT0gZGVsdGFZIC8qIE5hTiBjaGVja3MgKi8pIHtcbiAgICAgIC8vIElFIGluIHNvbWUgbW91c2UgZHJpdmVyc1xuICAgICAgZGVsdGFYID0gMDtcbiAgICAgIGRlbHRhWSA9IGUud2hlZWxEZWx0YTtcbiAgICB9XG5cbiAgICBpZiAoZS5zaGlmdEtleSkge1xuICAgICAgLy8gcmV2ZXJzZSBheGlzIHdpdGggc2hpZnQga2V5XG4gICAgICByZXR1cm4gWy1kZWx0YVksIC1kZWx0YVhdO1xuICAgIH1cbiAgICByZXR1cm4gW2RlbHRhWCwgZGVsdGFZXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3VsZEJlQ29uc3VtZWRCeUNoaWxkKHRhcmdldCwgZGVsdGFYLCBkZWx0YVkpIHtcbiAgICAvLyBGSVhNRTogdGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIDxzZWxlY3Q+IGlzc3VlIGluIEZGIGFuZCBJRSAjNTcxXG4gICAgaWYgKCFlbnYuaXNXZWJLaXQgJiYgZWxlbWVudC5xdWVyeVNlbGVjdG9yKCdzZWxlY3Q6Zm9jdXMnKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFlbGVtZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgY3Vyc29yID0gdGFyZ2V0O1xuXG4gICAgd2hpbGUgKGN1cnNvciAmJiBjdXJzb3IgIT09IGVsZW1lbnQpIHtcbiAgICAgIGlmIChjdXJzb3IuY2xhc3NMaXN0LmNvbnRhaW5zKGNscy5lbGVtZW50LmNvbnN1bWluZykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHlsZSA9IGdldChjdXJzb3IpO1xuXG4gICAgICAvLyBpZiBkZWx0YVkgJiYgdmVydGljYWwgc2Nyb2xsYWJsZVxuICAgICAgaWYgKGRlbHRhWSAmJiBzdHlsZS5vdmVyZmxvd1kubWF0Y2goLyhzY3JvbGx8YXV0bykvKSkge1xuICAgICAgICB2YXIgbWF4U2Nyb2xsVG9wID0gY3Vyc29yLnNjcm9sbEhlaWdodCAtIGN1cnNvci5jbGllbnRIZWlnaHQ7XG4gICAgICAgIGlmIChtYXhTY3JvbGxUb3AgPiAwKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGN1cnNvci5zY3JvbGxUb3AgPiAwICYmIGRlbHRhWSA8IDApIHx8XG4gICAgICAgICAgICAoY3Vyc29yLnNjcm9sbFRvcCA8IG1heFNjcm9sbFRvcCAmJiBkZWx0YVkgPiAwKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiBkZWx0YVggJiYgaG9yaXpvbnRhbCBzY3JvbGxhYmxlXG4gICAgICBpZiAoZGVsdGFYICYmIHN0eWxlLm92ZXJmbG93WC5tYXRjaCgvKHNjcm9sbHxhdXRvKS8pKSB7XG4gICAgICAgIHZhciBtYXhTY3JvbGxMZWZ0ID0gY3Vyc29yLnNjcm9sbFdpZHRoIC0gY3Vyc29yLmNsaWVudFdpZHRoO1xuICAgICAgICBpZiAobWF4U2Nyb2xsTGVmdCA+IDApIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY3Vyc29yLnNjcm9sbExlZnQgPiAwICYmIGRlbHRhWCA8IDApIHx8XG4gICAgICAgICAgICAoY3Vyc29yLnNjcm9sbExlZnQgPCBtYXhTY3JvbGxMZWZ0ICYmIGRlbHRhWCA+IDApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY3Vyc29yID0gY3Vyc29yLnBhcmVudE5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gbW91c2V3aGVlbEhhbmRsZXIoZSkge1xuICAgIHZhciByZWYgPSBnZXREZWx0YUZyb21FdmVudChlKTtcbiAgICB2YXIgZGVsdGFYID0gcmVmWzBdO1xuICAgIHZhciBkZWx0YVkgPSByZWZbMV07XG5cbiAgICBpZiAoc2hvdWxkQmVDb25zdW1lZEJ5Q2hpbGQoZS50YXJnZXQsIGRlbHRhWCwgZGVsdGFZKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzaG91bGRQcmV2ZW50ID0gZmFsc2U7XG4gICAgaWYgKCFpLnNldHRpbmdzLnVzZUJvdGhXaGVlbEF4ZXMpIHtcbiAgICAgIC8vIGRlbHRhWCB3aWxsIG9ubHkgYmUgdXNlZCBmb3IgaG9yaXpvbnRhbCBzY3JvbGxpbmcgYW5kIGRlbHRhWSB3aWxsXG4gICAgICAvLyBvbmx5IGJlIHVzZWQgZm9yIHZlcnRpY2FsIHNjcm9sbGluZyAtIHRoaXMgaXMgdGhlIGRlZmF1bHRcbiAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wIC09IGRlbHRhWSAqIGkuc2V0dGluZ3Mud2hlZWxTcGVlZDtcbiAgICAgIGVsZW1lbnQuc2Nyb2xsTGVmdCArPSBkZWx0YVggKiBpLnNldHRpbmdzLndoZWVsU3BlZWQ7XG4gICAgfSBlbHNlIGlmIChpLnNjcm9sbGJhcllBY3RpdmUgJiYgIWkuc2Nyb2xsYmFyWEFjdGl2ZSkge1xuICAgICAgLy8gb25seSB2ZXJ0aWNhbCBzY3JvbGxiYXIgaXMgYWN0aXZlIGFuZCB1c2VCb3RoV2hlZWxBeGVzIG9wdGlvbiBpc1xuICAgICAgLy8gYWN0aXZlLCBzbyBsZXQncyBzY3JvbGwgdmVydGljYWwgYmFyIHVzaW5nIGJvdGggbW91c2Ugd2hlZWwgYXhlc1xuICAgICAgaWYgKGRlbHRhWSkge1xuICAgICAgICBlbGVtZW50LnNjcm9sbFRvcCAtPSBkZWx0YVkgKiBpLnNldHRpbmdzLndoZWVsU3BlZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnNjcm9sbFRvcCArPSBkZWx0YVggKiBpLnNldHRpbmdzLndoZWVsU3BlZWQ7XG4gICAgICB9XG4gICAgICBzaG91bGRQcmV2ZW50ID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGkuc2Nyb2xsYmFyWEFjdGl2ZSAmJiAhaS5zY3JvbGxiYXJZQWN0aXZlKSB7XG4gICAgICAvLyB1c2VCb3RoV2hlZWxBeGVzIGFuZCBvbmx5IGhvcml6b250YWwgYmFyIGlzIGFjdGl2ZSwgc28gdXNlIGJvdGhcbiAgICAgIC8vIHdoZWVsIGF4ZXMgZm9yIGhvcml6b250YWwgYmFyXG4gICAgICBpZiAoZGVsdGFYKSB7XG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsTGVmdCArPSBkZWx0YVggKiBpLnNldHRpbmdzLndoZWVsU3BlZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnNjcm9sbExlZnQgLT0gZGVsdGFZICogaS5zZXR0aW5ncy53aGVlbFNwZWVkO1xuICAgICAgfVxuICAgICAgc2hvdWxkUHJldmVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgdXBkYXRlR2VvbWV0cnkoaSk7XG5cbiAgICBzaG91bGRQcmV2ZW50ID0gc2hvdWxkUHJldmVudCB8fCBzaG91bGRQcmV2ZW50RGVmYXVsdChkZWx0YVgsIGRlbHRhWSk7XG4gICAgaWYgKHNob3VsZFByZXZlbnQgJiYgIWUuY3RybEtleSkge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHdpbmRvdy5vbndoZWVsICE9PSAndW5kZWZpbmVkJykge1xuICAgIGkuZXZlbnQuYmluZChlbGVtZW50LCAnd2hlZWwnLCBtb3VzZXdoZWVsSGFuZGxlcik7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5vbm1vdXNld2hlZWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaS5ldmVudC5iaW5kKGVsZW1lbnQsICdtb3VzZXdoZWVsJywgbW91c2V3aGVlbEhhbmRsZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvdWNoKGkpIHtcbiAgaWYgKCFlbnYuc3VwcG9ydHNUb3VjaCAmJiAhZW52LnN1cHBvcnRzSWVQb2ludGVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGVsZW1lbnQgPSBpLmVsZW1lbnQ7XG5cbiAgZnVuY3Rpb24gc2hvdWxkUHJldmVudChkZWx0YVgsIGRlbHRhWSkge1xuICAgIHZhciBzY3JvbGxUb3AgPSBNYXRoLmZsb29yKGVsZW1lbnQuc2Nyb2xsVG9wKTtcbiAgICB2YXIgc2Nyb2xsTGVmdCA9IGVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB2YXIgbWFnbml0dWRlWCA9IE1hdGguYWJzKGRlbHRhWCk7XG4gICAgdmFyIG1hZ25pdHVkZVkgPSBNYXRoLmFicyhkZWx0YVkpO1xuXG4gICAgaWYgKG1hZ25pdHVkZVkgPiBtYWduaXR1ZGVYKSB7XG4gICAgICAvLyB1c2VyIGlzIHBlcmhhcHMgdHJ5aW5nIHRvIHN3aXBlIHVwL2Rvd24gdGhlIHBhZ2VcblxuICAgICAgaWYgKFxuICAgICAgICAoZGVsdGFZIDwgMCAmJiBzY3JvbGxUb3AgPT09IGkuY29udGVudEhlaWdodCAtIGkuY29udGFpbmVySGVpZ2h0KSB8fFxuICAgICAgICAoZGVsdGFZID4gMCAmJiBzY3JvbGxUb3AgPT09IDApXG4gICAgICApIHtcbiAgICAgICAgLy8gc2V0IHByZXZlbnQgZm9yIG1vYmlsZSBDaHJvbWUgcmVmcmVzaFxuICAgICAgICByZXR1cm4gd2luZG93LnNjcm9sbFkgPT09IDAgJiYgZGVsdGFZID4gMCAmJiBlbnYuaXNDaHJvbWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtYWduaXR1ZGVYID4gbWFnbml0dWRlWSkge1xuICAgICAgLy8gdXNlciBpcyBwZXJoYXBzIHRyeWluZyB0byBzd2lwZSBsZWZ0L3JpZ2h0IGFjcm9zcyB0aGUgcGFnZVxuXG4gICAgICBpZiAoXG4gICAgICAgIChkZWx0YVggPCAwICYmIHNjcm9sbExlZnQgPT09IGkuY29udGVudFdpZHRoIC0gaS5jb250YWluZXJXaWR0aCkgfHxcbiAgICAgICAgKGRlbHRhWCA+IDAgJiYgc2Nyb2xsTGVmdCA9PT0gMClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5VG91Y2hNb3ZlKGRpZmZlcmVuY2VYLCBkaWZmZXJlbmNlWSkge1xuICAgIGVsZW1lbnQuc2Nyb2xsVG9wIC09IGRpZmZlcmVuY2VZO1xuICAgIGVsZW1lbnQuc2Nyb2xsTGVmdCAtPSBkaWZmZXJlbmNlWDtcblxuICAgIHVwZGF0ZUdlb21ldHJ5KGkpO1xuICB9XG5cbiAgdmFyIHN0YXJ0T2Zmc2V0ID0ge307XG4gIHZhciBzdGFydFRpbWUgPSAwO1xuICB2YXIgc3BlZWQgPSB7fTtcbiAgdmFyIGVhc2luZ0xvb3AgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGdldFRvdWNoKGUpIHtcbiAgICBpZiAoZS50YXJnZXRUb3VjaGVzKSB7XG4gICAgICByZXR1cm4gZS50YXJnZXRUb3VjaGVzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNYXliZSBJRSBwb2ludGVyXG4gICAgICByZXR1cm4gZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRIYW5kbGUoZSkge1xuICAgIGlmIChlLnBvaW50ZXJUeXBlICYmIGUucG9pbnRlclR5cGUgPT09ICdwZW4nICYmIGUuYnV0dG9ucyA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZS50YXJnZXRUb3VjaGVzICYmIGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBlLnBvaW50ZXJUeXBlICYmXG4gICAgICBlLnBvaW50ZXJUeXBlICE9PSAnbW91c2UnICYmXG4gICAgICBlLnBvaW50ZXJUeXBlICE9PSBlLk1TUE9JTlRFUl9UWVBFX01PVVNFXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2hTdGFydChlKSB7XG4gICAgaWYgKCFzaG91bGRIYW5kbGUoZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdG91Y2ggPSBnZXRUb3VjaChlKTtcblxuICAgIHN0YXJ0T2Zmc2V0LnBhZ2VYID0gdG91Y2gucGFnZVg7XG4gICAgc3RhcnRPZmZzZXQucGFnZVkgPSB0b3VjaC5wYWdlWTtcblxuICAgIHN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG4gICAgaWYgKGVhc2luZ0xvb3AgIT09IG51bGwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoZWFzaW5nTG9vcCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkQmVDb25zdW1lZEJ5Q2hpbGQodGFyZ2V0LCBkZWx0YVgsIGRlbHRhWSkge1xuICAgIGlmICghZWxlbWVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGN1cnNvciA9IHRhcmdldDtcblxuICAgIHdoaWxlIChjdXJzb3IgJiYgY3Vyc29yICE9PSBlbGVtZW50KSB7XG4gICAgICBpZiAoY3Vyc29yLmNsYXNzTGlzdC5jb250YWlucyhjbHMuZWxlbWVudC5jb25zdW1pbmcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3R5bGUgPSBnZXQoY3Vyc29yKTtcblxuICAgICAgLy8gaWYgZGVsdGFZICYmIHZlcnRpY2FsIHNjcm9sbGFibGVcbiAgICAgIGlmIChkZWx0YVkgJiYgc3R5bGUub3ZlcmZsb3dZLm1hdGNoKC8oc2Nyb2xsfGF1dG8pLykpIHtcbiAgICAgICAgdmFyIG1heFNjcm9sbFRvcCA9IGN1cnNvci5zY3JvbGxIZWlnaHQgLSBjdXJzb3IuY2xpZW50SGVpZ2h0O1xuICAgICAgICBpZiAobWF4U2Nyb2xsVG9wID4gMCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChjdXJzb3Iuc2Nyb2xsVG9wID4gMCAmJiBkZWx0YVkgPCAwKSB8fFxuICAgICAgICAgICAgKGN1cnNvci5zY3JvbGxUb3AgPCBtYXhTY3JvbGxUb3AgJiYgZGVsdGFZID4gMClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gaWYgZGVsdGFYICYmIGhvcml6b250YWwgc2Nyb2xsYWJsZVxuICAgICAgaWYgKGRlbHRhWCAmJiBzdHlsZS5vdmVyZmxvd1gubWF0Y2goLyhzY3JvbGx8YXV0bykvKSkge1xuICAgICAgICB2YXIgbWF4U2Nyb2xsTGVmdCA9IGN1cnNvci5zY3JvbGxXaWR0aCAtIGN1cnNvci5jbGllbnRXaWR0aDtcbiAgICAgICAgaWYgKG1heFNjcm9sbExlZnQgPiAwKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGN1cnNvci5zY3JvbGxMZWZ0ID4gMCAmJiBkZWx0YVggPCAwKSB8fFxuICAgICAgICAgICAgKGN1cnNvci5zY3JvbGxMZWZ0IDwgbWF4U2Nyb2xsTGVmdCAmJiBkZWx0YVggPiAwKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGN1cnNvciA9IGN1cnNvci5wYXJlbnROb2RlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoTW92ZShlKSB7XG4gICAgaWYgKHNob3VsZEhhbmRsZShlKSkge1xuICAgICAgdmFyIHRvdWNoID0gZ2V0VG91Y2goZSk7XG5cbiAgICAgIHZhciBjdXJyZW50T2Zmc2V0ID0geyBwYWdlWDogdG91Y2gucGFnZVgsIHBhZ2VZOiB0b3VjaC5wYWdlWSB9O1xuXG4gICAgICB2YXIgZGlmZmVyZW5jZVggPSBjdXJyZW50T2Zmc2V0LnBhZ2VYIC0gc3RhcnRPZmZzZXQucGFnZVg7XG4gICAgICB2YXIgZGlmZmVyZW5jZVkgPSBjdXJyZW50T2Zmc2V0LnBhZ2VZIC0gc3RhcnRPZmZzZXQucGFnZVk7XG5cbiAgICAgIGlmIChzaG91bGRCZUNvbnN1bWVkQnlDaGlsZChlLnRhcmdldCwgZGlmZmVyZW5jZVgsIGRpZmZlcmVuY2VZKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFwcGx5VG91Y2hNb3ZlKGRpZmZlcmVuY2VYLCBkaWZmZXJlbmNlWSk7XG4gICAgICBzdGFydE9mZnNldCA9IGN1cnJlbnRPZmZzZXQ7XG5cbiAgICAgIHZhciBjdXJyZW50VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG4gICAgICB2YXIgdGltZUdhcCA9IGN1cnJlbnRUaW1lIC0gc3RhcnRUaW1lO1xuICAgICAgaWYgKHRpbWVHYXAgPiAwKSB7XG4gICAgICAgIHNwZWVkLnggPSBkaWZmZXJlbmNlWCAvIHRpbWVHYXA7XG4gICAgICAgIHNwZWVkLnkgPSBkaWZmZXJlbmNlWSAvIHRpbWVHYXA7XG4gICAgICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkUHJldmVudChkaWZmZXJlbmNlWCwgZGlmZmVyZW5jZVkpKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdG91Y2hFbmQoKSB7XG4gICAgaWYgKGkuc2V0dGluZ3Muc3dpcGVFYXNpbmcpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoZWFzaW5nTG9vcCk7XG4gICAgICBlYXNpbmdMb29wID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChpLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICBjbGVhckludGVydmFsKGVhc2luZ0xvb3ApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3BlZWQueCAmJiAhc3BlZWQueSkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoZWFzaW5nTG9vcCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKHNwZWVkLngpIDwgMC4wMSAmJiBNYXRoLmFicyhzcGVlZC55KSA8IDAuMDEpIHtcbiAgICAgICAgICBjbGVhckludGVydmFsKGVhc2luZ0xvb3ApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGFwcGx5VG91Y2hNb3ZlKHNwZWVkLnggKiAzMCwgc3BlZWQueSAqIDMwKTtcblxuICAgICAgICBzcGVlZC54ICo9IDAuODtcbiAgICAgICAgc3BlZWQueSAqPSAwLjg7XG4gICAgICB9LCAxMCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGVudi5zdXBwb3J0c1RvdWNoKSB7XG4gICAgaS5ldmVudC5iaW5kKGVsZW1lbnQsICd0b3VjaHN0YXJ0JywgdG91Y2hTdGFydCk7XG4gICAgaS5ldmVudC5iaW5kKGVsZW1lbnQsICd0b3VjaG1vdmUnLCB0b3VjaE1vdmUpO1xuICAgIGkuZXZlbnQuYmluZChlbGVtZW50LCAndG91Y2hlbmQnLCB0b3VjaEVuZCk7XG4gIH0gZWxzZSBpZiAoZW52LnN1cHBvcnRzSWVQb2ludGVyKSB7XG4gICAgaWYgKHdpbmRvdy5Qb2ludGVyRXZlbnQpIHtcbiAgICAgIGkuZXZlbnQuYmluZChlbGVtZW50LCAncG9pbnRlcmRvd24nLCB0b3VjaFN0YXJ0KTtcbiAgICAgIGkuZXZlbnQuYmluZChlbGVtZW50LCAncG9pbnRlcm1vdmUnLCB0b3VjaE1vdmUpO1xuICAgICAgaS5ldmVudC5iaW5kKGVsZW1lbnQsICdwb2ludGVydXAnLCB0b3VjaEVuZCk7XG4gICAgfSBlbHNlIGlmICh3aW5kb3cuTVNQb2ludGVyRXZlbnQpIHtcbiAgICAgIGkuZXZlbnQuYmluZChlbGVtZW50LCAnTVNQb2ludGVyRG93bicsIHRvdWNoU3RhcnQpO1xuICAgICAgaS5ldmVudC5iaW5kKGVsZW1lbnQsICdNU1BvaW50ZXJNb3ZlJywgdG91Y2hNb3ZlKTtcbiAgICAgIGkuZXZlbnQuYmluZChlbGVtZW50LCAnTVNQb2ludGVyVXAnLCB0b3VjaEVuZCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBkZWZhdWx0U2V0dGluZ3MgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAoe1xuICBoYW5kbGVyczogWydjbGljay1yYWlsJywgJ2RyYWctdGh1bWInLCAna2V5Ym9hcmQnLCAnd2hlZWwnLCAndG91Y2gnXSxcbiAgbWF4U2Nyb2xsYmFyTGVuZ3RoOiBudWxsLFxuICBtaW5TY3JvbGxiYXJMZW5ndGg6IG51bGwsXG4gIHNjcm9sbGluZ1RocmVzaG9sZDogMTAwMCxcbiAgc2Nyb2xsWE1hcmdpbk9mZnNldDogMCxcbiAgc2Nyb2xsWU1hcmdpbk9mZnNldDogMCxcbiAgc3VwcHJlc3NTY3JvbGxYOiBmYWxzZSxcbiAgc3VwcHJlc3NTY3JvbGxZOiBmYWxzZSxcbiAgc3dpcGVFYXNpbmc6IHRydWUsXG4gIHVzZUJvdGhXaGVlbEF4ZXM6IGZhbHNlLFxuICB3aGVlbFByb3BhZ2F0aW9uOiB0cnVlLFxuICB3aGVlbFNwZWVkOiAxLFxufSk7IH07XG5cbnZhciBoYW5kbGVycyA9IHtcbiAgJ2NsaWNrLXJhaWwnOiBjbGlja1JhaWwsXG4gICdkcmFnLXRodW1iJzogZHJhZ1RodW1iLFxuICBrZXlib2FyZDoga2V5Ym9hcmQsXG4gIHdoZWVsOiB3aGVlbCxcbiAgdG91Y2g6IHRvdWNoLFxufTtcblxudmFyIFBlcmZlY3RTY3JvbGxiYXIgPSBmdW5jdGlvbiBQZXJmZWN0U2Nyb2xsYmFyKGVsZW1lbnQsIHVzZXJTZXR0aW5ncykge1xuICB2YXIgdGhpcyQxID0gdGhpcztcbiAgaWYgKCB1c2VyU2V0dGluZ3MgPT09IHZvaWQgMCApIHVzZXJTZXR0aW5ncyA9IHt9O1xuXG4gIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbGVtZW50KTtcbiAgfVxuXG4gIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5ub2RlTmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm8gZWxlbWVudCBpcyBzcGVjaWZpZWQgdG8gaW5pdGlhbGl6ZSBQZXJmZWN0U2Nyb2xsYmFyJyk7XG4gIH1cblxuICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuXG4gIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbHMubWFpbik7XG5cbiAgdGhpcy5zZXR0aW5ncyA9IGRlZmF1bHRTZXR0aW5ncygpO1xuICBmb3IgKHZhciBrZXkgaW4gdXNlclNldHRpbmdzKSB7XG4gICAgdGhpcy5zZXR0aW5nc1trZXldID0gdXNlclNldHRpbmdzW2tleV07XG4gIH1cblxuICB0aGlzLmNvbnRhaW5lcldpZHRoID0gbnVsbDtcbiAgdGhpcy5jb250YWluZXJIZWlnaHQgPSBudWxsO1xuICB0aGlzLmNvbnRlbnRXaWR0aCA9IG51bGw7XG4gIHRoaXMuY29udGVudEhlaWdodCA9IG51bGw7XG5cbiAgdmFyIGZvY3VzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNscy5zdGF0ZS5mb2N1cyk7IH07XG4gIHZhciBibHVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNscy5zdGF0ZS5mb2N1cyk7IH07XG5cbiAgdGhpcy5pc1J0bCA9IGdldChlbGVtZW50KS5kaXJlY3Rpb24gPT09ICdydGwnO1xuICBpZiAodGhpcy5pc1J0bCA9PT0gdHJ1ZSkge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbHMucnRsKTtcbiAgfVxuICB0aGlzLmlzTmVnYXRpdmVTY3JvbGwgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcmlnaW5hbFNjcm9sbExlZnQgPSBlbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgdmFyIHJlc3VsdCA9IG51bGw7XG4gICAgZWxlbWVudC5zY3JvbGxMZWZ0ID0gLTE7XG4gICAgcmVzdWx0ID0gZWxlbWVudC5zY3JvbGxMZWZ0IDwgMDtcbiAgICBlbGVtZW50LnNjcm9sbExlZnQgPSBvcmlnaW5hbFNjcm9sbExlZnQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSkoKTtcbiAgdGhpcy5uZWdhdGl2ZVNjcm9sbEFkanVzdG1lbnQgPSB0aGlzLmlzTmVnYXRpdmVTY3JvbGxcbiAgICA/IGVsZW1lbnQuc2Nyb2xsV2lkdGggLSBlbGVtZW50LmNsaWVudFdpZHRoXG4gICAgOiAwO1xuICB0aGlzLmV2ZW50ID0gbmV3IEV2ZW50TWFuYWdlcigpO1xuICB0aGlzLm93bmVyRG9jdW1lbnQgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7XG5cbiAgdGhpcy5zY3JvbGxiYXJYUmFpbCA9IGRpdihjbHMuZWxlbWVudC5yYWlsKCd4JykpO1xuICBlbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsYmFyWFJhaWwpO1xuICB0aGlzLnNjcm9sbGJhclggPSBkaXYoY2xzLmVsZW1lbnQudGh1bWIoJ3gnKSk7XG4gIHRoaXMuc2Nyb2xsYmFyWFJhaWwuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxiYXJYKTtcbiAgdGhpcy5zY3JvbGxiYXJYLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAwKTtcbiAgdGhpcy5ldmVudC5iaW5kKHRoaXMuc2Nyb2xsYmFyWCwgJ2ZvY3VzJywgZm9jdXMpO1xuICB0aGlzLmV2ZW50LmJpbmQodGhpcy5zY3JvbGxiYXJYLCAnYmx1cicsIGJsdXIpO1xuICB0aGlzLnNjcm9sbGJhclhBY3RpdmUgPSBudWxsO1xuICB0aGlzLnNjcm9sbGJhclhXaWR0aCA9IG51bGw7XG4gIHRoaXMuc2Nyb2xsYmFyWExlZnQgPSBudWxsO1xuICB2YXIgcmFpbFhTdHlsZSA9IGdldCh0aGlzLnNjcm9sbGJhclhSYWlsKTtcbiAgdGhpcy5zY3JvbGxiYXJYQm90dG9tID0gcGFyc2VJbnQocmFpbFhTdHlsZS5ib3R0b20sIDEwKTtcbiAgaWYgKGlzTmFOKHRoaXMuc2Nyb2xsYmFyWEJvdHRvbSkpIHtcbiAgICB0aGlzLmlzU2Nyb2xsYmFyWFVzaW5nQm90dG9tID0gZmFsc2U7XG4gICAgdGhpcy5zY3JvbGxiYXJYVG9wID0gdG9JbnQocmFpbFhTdHlsZS50b3ApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuaXNTY3JvbGxiYXJYVXNpbmdCb3R0b20gPSB0cnVlO1xuICB9XG4gIHRoaXMucmFpbEJvcmRlclhXaWR0aCA9XG4gICAgdG9JbnQocmFpbFhTdHlsZS5ib3JkZXJMZWZ0V2lkdGgpICsgdG9JbnQocmFpbFhTdHlsZS5ib3JkZXJSaWdodFdpZHRoKTtcbiAgLy8gU2V0IHJhaWwgdG8gZGlzcGxheTpibG9jayB0byBjYWxjdWxhdGUgbWFyZ2luc1xuICBzZXQodGhpcy5zY3JvbGxiYXJYUmFpbCwgeyBkaXNwbGF5OiAnYmxvY2snIH0pO1xuICB0aGlzLnJhaWxYTWFyZ2luV2lkdGggPVxuICAgIHRvSW50KHJhaWxYU3R5bGUubWFyZ2luTGVmdCkgKyB0b0ludChyYWlsWFN0eWxlLm1hcmdpblJpZ2h0KTtcbiAgc2V0KHRoaXMuc2Nyb2xsYmFyWFJhaWwsIHsgZGlzcGxheTogJycgfSk7XG4gIHRoaXMucmFpbFhXaWR0aCA9IG51bGw7XG4gIHRoaXMucmFpbFhSYXRpbyA9IG51bGw7XG5cbiAgdGhpcy5zY3JvbGxiYXJZUmFpbCA9IGRpdihjbHMuZWxlbWVudC5yYWlsKCd5JykpO1xuICBlbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuc2Nyb2xsYmFyWVJhaWwpO1xuICB0aGlzLnNjcm9sbGJhclkgPSBkaXYoY2xzLmVsZW1lbnQudGh1bWIoJ3knKSk7XG4gIHRoaXMuc2Nyb2xsYmFyWVJhaWwuYXBwZW5kQ2hpbGQodGhpcy5zY3JvbGxiYXJZKTtcbiAgdGhpcy5zY3JvbGxiYXJZLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAwKTtcbiAgdGhpcy5ldmVudC5iaW5kKHRoaXMuc2Nyb2xsYmFyWSwgJ2ZvY3VzJywgZm9jdXMpO1xuICB0aGlzLmV2ZW50LmJpbmQodGhpcy5zY3JvbGxiYXJZLCAnYmx1cicsIGJsdXIpO1xuICB0aGlzLnNjcm9sbGJhcllBY3RpdmUgPSBudWxsO1xuICB0aGlzLnNjcm9sbGJhcllIZWlnaHQgPSBudWxsO1xuICB0aGlzLnNjcm9sbGJhcllUb3AgPSBudWxsO1xuICB2YXIgcmFpbFlTdHlsZSA9IGdldCh0aGlzLnNjcm9sbGJhcllSYWlsKTtcbiAgdGhpcy5zY3JvbGxiYXJZUmlnaHQgPSBwYXJzZUludChyYWlsWVN0eWxlLnJpZ2h0LCAxMCk7XG4gIGlmIChpc05hTih0aGlzLnNjcm9sbGJhcllSaWdodCkpIHtcbiAgICB0aGlzLmlzU2Nyb2xsYmFyWVVzaW5nUmlnaHQgPSBmYWxzZTtcbiAgICB0aGlzLnNjcm9sbGJhcllMZWZ0ID0gdG9JbnQocmFpbFlTdHlsZS5sZWZ0KTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmlzU2Nyb2xsYmFyWVVzaW5nUmlnaHQgPSB0cnVlO1xuICB9XG4gIHRoaXMuc2Nyb2xsYmFyWU91dGVyV2lkdGggPSB0aGlzLmlzUnRsID8gb3V0ZXJXaWR0aCh0aGlzLnNjcm9sbGJhclkpIDogbnVsbDtcbiAgdGhpcy5yYWlsQm9yZGVyWVdpZHRoID1cbiAgICB0b0ludChyYWlsWVN0eWxlLmJvcmRlclRvcFdpZHRoKSArIHRvSW50KHJhaWxZU3R5bGUuYm9yZGVyQm90dG9tV2lkdGgpO1xuICBzZXQodGhpcy5zY3JvbGxiYXJZUmFpbCwgeyBkaXNwbGF5OiAnYmxvY2snIH0pO1xuICB0aGlzLnJhaWxZTWFyZ2luSGVpZ2h0ID1cbiAgICB0b0ludChyYWlsWVN0eWxlLm1hcmdpblRvcCkgKyB0b0ludChyYWlsWVN0eWxlLm1hcmdpbkJvdHRvbSk7XG4gIHNldCh0aGlzLnNjcm9sbGJhcllSYWlsLCB7IGRpc3BsYXk6ICcnIH0pO1xuICB0aGlzLnJhaWxZSGVpZ2h0ID0gbnVsbDtcbiAgdGhpcy5yYWlsWVJhdGlvID0gbnVsbDtcblxuICB0aGlzLnJlYWNoID0ge1xuICAgIHg6XG4gICAgICBlbGVtZW50LnNjcm9sbExlZnQgPD0gMFxuICAgICAgICA/ICdzdGFydCdcbiAgICAgICAgOiBlbGVtZW50LnNjcm9sbExlZnQgPj0gdGhpcy5jb250ZW50V2lkdGggLSB0aGlzLmNvbnRhaW5lcldpZHRoXG4gICAgICAgID8gJ2VuZCdcbiAgICAgICAgOiBudWxsLFxuICAgIHk6XG4gICAgICBlbGVtZW50LnNjcm9sbFRvcCA8PSAwXG4gICAgICAgID8gJ3N0YXJ0J1xuICAgICAgICA6IGVsZW1lbnQuc2Nyb2xsVG9wID49IHRoaXMuY29udGVudEhlaWdodCAtIHRoaXMuY29udGFpbmVySGVpZ2h0XG4gICAgICAgID8gJ2VuZCdcbiAgICAgICAgOiBudWxsLFxuICB9O1xuXG4gIHRoaXMuaXNBbGl2ZSA9IHRydWU7XG5cbiAgdGhpcy5zZXR0aW5ncy5oYW5kbGVycy5mb3JFYWNoKGZ1bmN0aW9uIChoYW5kbGVyTmFtZSkgeyByZXR1cm4gaGFuZGxlcnNbaGFuZGxlck5hbWVdKHRoaXMkMSk7IH0pO1xuXG4gIHRoaXMubGFzdFNjcm9sbFRvcCA9IE1hdGguZmxvb3IoZWxlbWVudC5zY3JvbGxUb3ApOyAvLyBmb3Igb25TY3JvbGwgb25seVxuICB0aGlzLmxhc3RTY3JvbGxMZWZ0ID0gZWxlbWVudC5zY3JvbGxMZWZ0OyAvLyBmb3Igb25TY3JvbGwgb25seVxuICB0aGlzLmV2ZW50LmJpbmQodGhpcy5lbGVtZW50LCAnc2Nyb2xsJywgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHRoaXMkMS5vblNjcm9sbChlKTsgfSk7XG4gIHVwZGF0ZUdlb21ldHJ5KHRoaXMpO1xufTtcblxuUGVyZmVjdFNjcm9sbGJhci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlICgpIHtcbiAgaWYgKCF0aGlzLmlzQWxpdmUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBSZWNhbGN1YXRlIG5lZ2F0aXZlIHNjcm9sbExlZnQgYWRqdXN0bWVudFxuICB0aGlzLm5lZ2F0aXZlU2Nyb2xsQWRqdXN0bWVudCA9IHRoaXMuaXNOZWdhdGl2ZVNjcm9sbFxuICAgID8gdGhpcy5lbGVtZW50LnNjcm9sbFdpZHRoIC0gdGhpcy5lbGVtZW50LmNsaWVudFdpZHRoXG4gICAgOiAwO1xuXG4gIC8vIFJlY2FsY3VsYXRlIHJhaWwgbWFyZ2luc1xuICBzZXQodGhpcy5zY3JvbGxiYXJYUmFpbCwgeyBkaXNwbGF5OiAnYmxvY2snIH0pO1xuICBzZXQodGhpcy5zY3JvbGxiYXJZUmFpbCwgeyBkaXNwbGF5OiAnYmxvY2snIH0pO1xuICB0aGlzLnJhaWxYTWFyZ2luV2lkdGggPVxuICAgIHRvSW50KGdldCh0aGlzLnNjcm9sbGJhclhSYWlsKS5tYXJnaW5MZWZ0KSArXG4gICAgdG9JbnQoZ2V0KHRoaXMuc2Nyb2xsYmFyWFJhaWwpLm1hcmdpblJpZ2h0KTtcbiAgdGhpcy5yYWlsWU1hcmdpbkhlaWdodCA9XG4gICAgdG9JbnQoZ2V0KHRoaXMuc2Nyb2xsYmFyWVJhaWwpLm1hcmdpblRvcCkgK1xuICAgIHRvSW50KGdldCh0aGlzLnNjcm9sbGJhcllSYWlsKS5tYXJnaW5Cb3R0b20pO1xuXG4gIC8vIEhpZGUgc2Nyb2xsYmFycyBub3QgdG8gYWZmZWN0IHNjcm9sbFdpZHRoIGFuZCBzY3JvbGxIZWlnaHRcbiAgc2V0KHRoaXMuc2Nyb2xsYmFyWFJhaWwsIHsgZGlzcGxheTogJ25vbmUnIH0pO1xuICBzZXQodGhpcy5zY3JvbGxiYXJZUmFpbCwgeyBkaXNwbGF5OiAnbm9uZScgfSk7XG5cbiAgdXBkYXRlR2VvbWV0cnkodGhpcyk7XG5cbiAgcHJvY2Vzc1Njcm9sbERpZmYodGhpcywgJ3RvcCcsIDAsIGZhbHNlLCB0cnVlKTtcbiAgcHJvY2Vzc1Njcm9sbERpZmYodGhpcywgJ2xlZnQnLCAwLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgc2V0KHRoaXMuc2Nyb2xsYmFyWFJhaWwsIHsgZGlzcGxheTogJycgfSk7XG4gIHNldCh0aGlzLnNjcm9sbGJhcllSYWlsLCB7IGRpc3BsYXk6ICcnIH0pO1xufTtcblxuUGVyZmVjdFNjcm9sbGJhci5wcm90b3R5cGUub25TY3JvbGwgPSBmdW5jdGlvbiBvblNjcm9sbCAoZSkge1xuICBpZiAoIXRoaXMuaXNBbGl2ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHVwZGF0ZUdlb21ldHJ5KHRoaXMpO1xuICBwcm9jZXNzU2Nyb2xsRGlmZih0aGlzLCAndG9wJywgdGhpcy5lbGVtZW50LnNjcm9sbFRvcCAtIHRoaXMubGFzdFNjcm9sbFRvcCk7XG4gIHByb2Nlc3NTY3JvbGxEaWZmKFxuICAgIHRoaXMsXG4gICAgJ2xlZnQnLFxuICAgIHRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0IC0gdGhpcy5sYXN0U2Nyb2xsTGVmdFxuICApO1xuXG4gIHRoaXMubGFzdFNjcm9sbFRvcCA9IE1hdGguZmxvb3IodGhpcy5lbGVtZW50LnNjcm9sbFRvcCk7XG4gIHRoaXMubGFzdFNjcm9sbExlZnQgPSB0aGlzLmVsZW1lbnQuc2Nyb2xsTGVmdDtcbn07XG5cblBlcmZlY3RTY3JvbGxiYXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95ICgpIHtcbiAgaWYgKCF0aGlzLmlzQWxpdmUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLmV2ZW50LnVuYmluZEFsbCgpO1xuICByZW1vdmUodGhpcy5zY3JvbGxiYXJYKTtcbiAgcmVtb3ZlKHRoaXMuc2Nyb2xsYmFyWSk7XG4gIHJlbW92ZSh0aGlzLnNjcm9sbGJhclhSYWlsKTtcbiAgcmVtb3ZlKHRoaXMuc2Nyb2xsYmFyWVJhaWwpO1xuICB0aGlzLnJlbW92ZVBzQ2xhc3NlcygpO1xuXG4gIC8vIHVuc2V0IGVsZW1lbnRzXG4gIHRoaXMuZWxlbWVudCA9IG51bGw7XG4gIHRoaXMuc2Nyb2xsYmFyWCA9IG51bGw7XG4gIHRoaXMuc2Nyb2xsYmFyWSA9IG51bGw7XG4gIHRoaXMuc2Nyb2xsYmFyWFJhaWwgPSBudWxsO1xuICB0aGlzLnNjcm9sbGJhcllSYWlsID0gbnVsbDtcblxuICB0aGlzLmlzQWxpdmUgPSBmYWxzZTtcbn07XG5cblBlcmZlY3RTY3JvbGxiYXIucHJvdG90eXBlLnJlbW92ZVBzQ2xhc3NlcyA9IGZ1bmN0aW9uIHJlbW92ZVBzQ2xhc3NlcyAoKSB7XG4gIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lXG4gICAgLnNwbGl0KCcgJylcbiAgICAuZmlsdGVyKGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiAhbmFtZS5tYXRjaCgvXnBzKFstX10uK3wpJC8pOyB9KVxuICAgIC5qb2luKCcgJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQZXJmZWN0U2Nyb2xsYmFyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGVyZmVjdC1zY3JvbGxiYXIuZXNtLmpzLm1hcFxuIiwiLyohIFBob3RvU3dpcGUgRGVmYXVsdCBVSSAtIDQuMS4zIC0gMjAxOS0wMS0wOFxuKiBodHRwOi8vcGhvdG9zd2lwZS5jb21cbiogQ29weXJpZ2h0IChjKSAyMDE5IERtaXRyeSBTZW1lbm92OyAqL1xuLyoqXG4qXG4qIFVJIG9uIHRvcCBvZiBtYWluIHNsaWRpbmcgYXJlYSAoY2FwdGlvbiwgYXJyb3dzLCBjbG9zZSBidXR0b24sIGV0Yy4pLlxuKiBCdWlsdCBqdXN0IHVzaW5nIHB1YmxpYyBtZXRob2RzL3Byb3BlcnRpZXMgb2YgUGhvdG9Td2lwZS5cbiogXG4qL1xuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7IFxuXHRpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0ZGVmaW5lKGZhY3RvcnkpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHR9IGVsc2Uge1xuXHRcdHJvb3QuUGhvdG9Td2lwZVVJX0RlZmF1bHQgPSBmYWN0b3J5KCk7XG5cdH1cbn0pKHRoaXMsIGZ1bmN0aW9uICgpIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblxuXG52YXIgUGhvdG9Td2lwZVVJX0RlZmF1bHQgPVxuIGZ1bmN0aW9uKHBzd3AsIGZyYW1ld29yaykge1xuXG5cdHZhciB1aSA9IHRoaXM7XG5cdHZhciBfb3ZlcmxheVVJVXBkYXRlZCA9IGZhbHNlLFxuXHRcdF9jb250cm9sc1Zpc2libGUgPSB0cnVlLFxuXHRcdF9mdWxsc2NyZW5BUEksXG5cdFx0X2NvbnRyb2xzLFxuXHRcdF9jYXB0aW9uQ29udGFpbmVyLFxuXHRcdF9mYWtlQ2FwdGlvbkNvbnRhaW5lcixcblx0XHRfaW5kZXhJbmRpY2F0b3IsXG5cdFx0X3NoYXJlQnV0dG9uLFxuXHRcdF9zaGFyZU1vZGFsLFxuXHRcdF9zaGFyZU1vZGFsSGlkZGVuID0gdHJ1ZSxcblx0XHRfaW5pdGFsQ2xvc2VPblNjcm9sbFZhbHVlLFxuXHRcdF9pc0lkbGUsXG5cdFx0X2xpc3RlbixcblxuXHRcdF9sb2FkaW5nSW5kaWNhdG9yLFxuXHRcdF9sb2FkaW5nSW5kaWNhdG9ySGlkZGVuLFxuXHRcdF9sb2FkaW5nSW5kaWNhdG9yVGltZW91dCxcblxuXHRcdF9nYWxsZXJ5SGFzT25lU2xpZGUsXG5cblx0XHRfb3B0aW9ucyxcblx0XHRfZGVmYXVsdFVJT3B0aW9ucyA9IHtcblx0XHRcdGJhcnNTaXplOiB7dG9wOjQ0LCBib3R0b206J2F1dG8nfSxcblx0XHRcdGNsb3NlRWxDbGFzc2VzOiBbJ2l0ZW0nLCAnY2FwdGlvbicsICd6b29tLXdyYXAnLCAndWknLCAndG9wLWJhciddLCBcblx0XHRcdHRpbWVUb0lkbGU6IDQwMDAsIFxuXHRcdFx0dGltZVRvSWRsZU91dHNpZGU6IDEwMDAsXG5cdFx0XHRsb2FkaW5nSW5kaWNhdG9yRGVsYXk6IDEwMDAsIC8vIDJzXG5cdFx0XHRcblx0XHRcdGFkZENhcHRpb25IVE1MRm46IGZ1bmN0aW9uKGl0ZW0sIGNhcHRpb25FbCAvKiwgaXNGYWtlICovKSB7XG5cdFx0XHRcdGlmKCFpdGVtLnRpdGxlKSB7XG5cdFx0XHRcdFx0Y2FwdGlvbkVsLmNoaWxkcmVuWzBdLmlubmVySFRNTCA9ICcnO1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjYXB0aW9uRWwuY2hpbGRyZW5bMF0uaW5uZXJIVE1MID0gaXRlbS50aXRsZTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9LFxuXG5cdFx0XHRjbG9zZUVsOnRydWUsXG5cdFx0XHRjYXB0aW9uRWw6IHRydWUsXG5cdFx0XHRmdWxsc2NyZWVuRWw6IHRydWUsXG5cdFx0XHR6b29tRWw6IHRydWUsXG5cdFx0XHRzaGFyZUVsOiB0cnVlLFxuXHRcdFx0Y291bnRlckVsOiB0cnVlLFxuXHRcdFx0YXJyb3dFbDogdHJ1ZSxcblx0XHRcdHByZWxvYWRlckVsOiB0cnVlLFxuXG5cdFx0XHR0YXBUb0Nsb3NlOiBmYWxzZSxcblx0XHRcdHRhcFRvVG9nZ2xlQ29udHJvbHM6IHRydWUsXG5cblx0XHRcdGNsaWNrVG9DbG9zZU5vblpvb21hYmxlOiB0cnVlLFxuXG5cdFx0XHRzaGFyZUJ1dHRvbnM6IFtcblx0XHRcdFx0e2lkOidmYWNlYm9vaycsIGxhYmVsOidTaGFyZSBvbiBGYWNlYm9vaycsIHVybDonaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL3NoYXJlci9zaGFyZXIucGhwP3U9e3t1cmx9fSd9LFxuXHRcdFx0XHR7aWQ6J3R3aXR0ZXInLCBsYWJlbDonVHdlZXQnLCB1cmw6J2h0dHBzOi8vdHdpdHRlci5jb20vaW50ZW50L3R3ZWV0P3RleHQ9e3t0ZXh0fX0mdXJsPXt7dXJsfX0nfSxcblx0XHRcdFx0e2lkOidwaW50ZXJlc3QnLCBsYWJlbDonUGluIGl0JywgdXJsOidodHRwOi8vd3d3LnBpbnRlcmVzdC5jb20vcGluL2NyZWF0ZS9idXR0b24vJytcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Jz91cmw9e3t1cmx9fSZtZWRpYT17e2ltYWdlX3VybH19JmRlc2NyaXB0aW9uPXt7dGV4dH19J30sXG5cdFx0XHRcdHtpZDonZG93bmxvYWQnLCBsYWJlbDonRG93bmxvYWQgaW1hZ2UnLCB1cmw6J3t7cmF3X2ltYWdlX3VybH19JywgZG93bmxvYWQ6dHJ1ZX1cblx0XHRcdF0sXG5cdFx0XHRnZXRJbWFnZVVSTEZvclNoYXJlOiBmdW5jdGlvbiggLyogc2hhcmVCdXR0b25EYXRhICovICkge1xuXHRcdFx0XHRyZXR1cm4gcHN3cC5jdXJySXRlbS5zcmMgfHwgJyc7XG5cdFx0XHR9LFxuXHRcdFx0Z2V0UGFnZVVSTEZvclNoYXJlOiBmdW5jdGlvbiggLyogc2hhcmVCdXR0b25EYXRhICovICkge1xuXHRcdFx0XHRyZXR1cm4gd2luZG93LmxvY2F0aW9uLmhyZWY7XG5cdFx0XHR9LFxuXHRcdFx0Z2V0VGV4dEZvclNoYXJlOiBmdW5jdGlvbiggLyogc2hhcmVCdXR0b25EYXRhICovICkge1xuXHRcdFx0XHRyZXR1cm4gcHN3cC5jdXJySXRlbS50aXRsZSB8fCAnJztcblx0XHRcdH0sXG5cdFx0XHRcdFxuXHRcdFx0aW5kZXhJbmRpY2F0b3JTZXA6ICcgLyAnLFxuXHRcdFx0Zml0Q29udHJvbHNXaWR0aDogMTIwMFxuXG5cdFx0fSxcblx0XHRfYmxvY2tDb250cm9sc1RhcCxcblx0XHRfYmxvY2tDb250cm9sc1RhcFRpbWVvdXQ7XG5cblxuXG5cdHZhciBfb25Db250cm9sc1RhcCA9IGZ1bmN0aW9uKGUpIHtcblx0XHRcdGlmKF9ibG9ja0NvbnRyb2xzVGFwKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cblx0XHRcdGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcblxuXHRcdFx0aWYoX29wdGlvbnMudGltZVRvSWRsZSAmJiBfb3B0aW9ucy5tb3VzZVVzZWQgJiYgIV9pc0lkbGUpIHtcblx0XHRcdFx0Ly8gcmVzZXQgaWRsZSB0aW1lclxuXHRcdFx0XHRfb25JZGxlTW91c2VNb3ZlKCk7XG5cdFx0XHR9XG5cblxuXHRcdFx0dmFyIHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudCxcblx0XHRcdFx0dWlFbGVtZW50LFxuXHRcdFx0XHRjbGlja2VkQ2xhc3MgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnLFxuXHRcdFx0XHRmb3VuZDtcblxuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IF91aUVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHVpRWxlbWVudCA9IF91aUVsZW1lbnRzW2ldO1xuXHRcdFx0XHRpZih1aUVsZW1lbnQub25UYXAgJiYgY2xpY2tlZENsYXNzLmluZGV4T2YoJ3Bzd3BfXycgKyB1aUVsZW1lbnQubmFtZSApID4gLTEgKSB7XG5cdFx0XHRcdFx0dWlFbGVtZW50Lm9uVGFwKCk7XG5cdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYoZm91bmQpIHtcblx0XHRcdFx0aWYoZS5zdG9wUHJvcGFnYXRpb24pIHtcblx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdF9ibG9ja0NvbnRyb2xzVGFwID0gdHJ1ZTtcblxuXHRcdFx0XHQvLyBTb21lIHZlcnNpb25zIG9mIEFuZHJvaWQgZG9uJ3QgcHJldmVudCBnaG9zdCBjbGljayBldmVudCBcblx0XHRcdFx0Ly8gd2hlbiBwcmV2ZW50RGVmYXVsdCgpIHdhcyBjYWxsZWQgb24gdG91Y2hzdGFydCBhbmQvb3IgdG91Y2hlbmQuXG5cdFx0XHRcdC8vIFxuXHRcdFx0XHQvLyBUaGlzIGhhcHBlbnMgb24gdjQuMywgNC4yLCA0LjEsIFxuXHRcdFx0XHQvLyBvbGRlciB2ZXJzaW9ucyBzdHJhbmdlbHkgd29yayBjb3JyZWN0bHksIFxuXHRcdFx0XHQvLyBidXQganVzdCBpbiBjYXNlIHdlIGFkZCBkZWxheSBvbiBhbGwgb2YgdGhlbSlcdFxuXHRcdFx0XHR2YXIgdGFwRGVsYXkgPSBmcmFtZXdvcmsuZmVhdHVyZXMuaXNPbGRBbmRyb2lkID8gNjAwIDogMzA7XG5cdFx0XHRcdF9ibG9ja0NvbnRyb2xzVGFwVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0X2Jsb2NrQ29udHJvbHNUYXAgPSBmYWxzZTtcblx0XHRcdFx0fSwgdGFwRGVsYXkpO1xuXHRcdFx0fVxuXG5cdFx0fSxcblx0XHRfZml0Q29udHJvbHNJblZpZXdwb3J0ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gIXBzd3AubGlrZWx5VG91Y2hEZXZpY2UgfHwgX29wdGlvbnMubW91c2VVc2VkIHx8IHNjcmVlbi53aWR0aCA+IF9vcHRpb25zLmZpdENvbnRyb2xzV2lkdGg7XG5cdFx0fSxcblx0XHRfdG9nZ2xlUHN3cENsYXNzID0gZnVuY3Rpb24oZWwsIGNOYW1lLCBhZGQpIHtcblx0XHRcdGZyYW1ld29ya1sgKGFkZCA/ICdhZGQnIDogJ3JlbW92ZScpICsgJ0NsYXNzJyBdKGVsLCAncHN3cF9fJyArIGNOYW1lKTtcblx0XHR9LFxuXG5cdFx0Ly8gYWRkIGNsYXNzIHdoZW4gdGhlcmUgaXMganVzdCBvbmUgaXRlbSBpbiB0aGUgZ2FsbGVyeVxuXHRcdC8vIChieSBkZWZhdWx0IGl0IGhpZGVzIGxlZnQvcmlnaHQgYXJyb3dzIGFuZCAxb2ZYIGNvdW50ZXIpXG5cdFx0X2NvdW50TnVtSXRlbXMgPSBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBoYXNPbmVTbGlkZSA9IChfb3B0aW9ucy5nZXROdW1JdGVtc0ZuKCkgPT09IDEpO1xuXG5cdFx0XHRpZihoYXNPbmVTbGlkZSAhPT0gX2dhbGxlcnlIYXNPbmVTbGlkZSkge1xuXHRcdFx0XHRfdG9nZ2xlUHN3cENsYXNzKF9jb250cm9scywgJ3VpLS1vbmUtc2xpZGUnLCBoYXNPbmVTbGlkZSk7XG5cdFx0XHRcdF9nYWxsZXJ5SGFzT25lU2xpZGUgPSBoYXNPbmVTbGlkZTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdF90b2dnbGVTaGFyZU1vZGFsQ2xhc3MgPSBmdW5jdGlvbigpIHtcblx0XHRcdF90b2dnbGVQc3dwQ2xhc3MoX3NoYXJlTW9kYWwsICdzaGFyZS1tb2RhbC0taGlkZGVuJywgX3NoYXJlTW9kYWxIaWRkZW4pO1xuXHRcdH0sXG5cdFx0X3RvZ2dsZVNoYXJlTW9kYWwgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0X3NoYXJlTW9kYWxIaWRkZW4gPSAhX3NoYXJlTW9kYWxIaWRkZW47XG5cdFx0XHRcblx0XHRcdFxuXHRcdFx0aWYoIV9zaGFyZU1vZGFsSGlkZGVuKSB7XG5cdFx0XHRcdF90b2dnbGVTaGFyZU1vZGFsQ2xhc3MoKTtcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZighX3NoYXJlTW9kYWxIaWRkZW4pIHtcblx0XHRcdFx0XHRcdGZyYW1ld29yay5hZGRDbGFzcyhfc2hhcmVNb2RhbCwgJ3Bzd3BfX3NoYXJlLW1vZGFsLS1mYWRlLWluJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCAzMCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmcmFtZXdvcmsucmVtb3ZlQ2xhc3MoX3NoYXJlTW9kYWwsICdwc3dwX19zaGFyZS1tb2RhbC0tZmFkZS1pbicpO1xuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmKF9zaGFyZU1vZGFsSGlkZGVuKSB7XG5cdFx0XHRcdFx0XHRfdG9nZ2xlU2hhcmVNb2RhbENsYXNzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCAzMDApO1xuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHRpZighX3NoYXJlTW9kYWxIaWRkZW4pIHtcblx0XHRcdFx0X3VwZGF0ZVNoYXJlVVJMcygpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cblx0XHRfb3BlbldpbmRvd1BvcHVwID0gZnVuY3Rpb24oZSkge1xuXHRcdFx0ZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuXHRcdFx0dmFyIHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDtcblxuXHRcdFx0cHN3cC5zaG91dCgnc2hhcmVMaW5rQ2xpY2snLCBlLCB0YXJnZXQpO1xuXG5cdFx0XHRpZighdGFyZ2V0LmhyZWYpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiggdGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnZG93bmxvYWQnKSApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdHdpbmRvdy5vcGVuKHRhcmdldC5ocmVmLCAncHN3cF9zaGFyZScsICdzY3JvbGxiYXJzPXllcyxyZXNpemFibGU9eWVzLHRvb2xiYXI9bm8sJytcblx0XHRcdFx0XHRcdFx0XHRcdFx0J2xvY2F0aW9uPXllcyx3aWR0aD01NTAsaGVpZ2h0PTQyMCx0b3A9MTAwLGxlZnQ9JyArIFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQod2luZG93LnNjcmVlbiA/IE1hdGgucm91bmQoc2NyZWVuLndpZHRoIC8gMiAtIDI3NSkgOiAxMDApICApO1xuXG5cdFx0XHRpZighX3NoYXJlTW9kYWxIaWRkZW4pIHtcblx0XHRcdFx0X3RvZ2dsZVNoYXJlTW9kYWwoKTtcblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0X3VwZGF0ZVNoYXJlVVJMcyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNoYXJlQnV0dG9uT3V0ID0gJycsXG5cdFx0XHRcdHNoYXJlQnV0dG9uRGF0YSxcblx0XHRcdFx0c2hhcmVVUkwsXG5cdFx0XHRcdGltYWdlX3VybCxcblx0XHRcdFx0cGFnZV91cmwsXG5cdFx0XHRcdHNoYXJlX3RleHQ7XG5cblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBfb3B0aW9ucy5zaGFyZUJ1dHRvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0c2hhcmVCdXR0b25EYXRhID0gX29wdGlvbnMuc2hhcmVCdXR0b25zW2ldO1xuXG5cdFx0XHRcdGltYWdlX3VybCA9IF9vcHRpb25zLmdldEltYWdlVVJMRm9yU2hhcmUoc2hhcmVCdXR0b25EYXRhKTtcblx0XHRcdFx0cGFnZV91cmwgPSBfb3B0aW9ucy5nZXRQYWdlVVJMRm9yU2hhcmUoc2hhcmVCdXR0b25EYXRhKTtcblx0XHRcdFx0c2hhcmVfdGV4dCA9IF9vcHRpb25zLmdldFRleHRGb3JTaGFyZShzaGFyZUJ1dHRvbkRhdGEpO1xuXG5cdFx0XHRcdHNoYXJlVVJMID0gc2hhcmVCdXR0b25EYXRhLnVybC5yZXBsYWNlKCd7e3VybH19JywgZW5jb2RlVVJJQ29tcG9uZW50KHBhZ2VfdXJsKSApXG5cdFx0XHRcdFx0XHRcdFx0XHQucmVwbGFjZSgne3tpbWFnZV91cmx9fScsIGVuY29kZVVSSUNvbXBvbmVudChpbWFnZV91cmwpIClcblx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKCd7e3Jhd19pbWFnZV91cmx9fScsIGltYWdlX3VybCApXG5cdFx0XHRcdFx0XHRcdFx0XHQucmVwbGFjZSgne3t0ZXh0fX0nLCBlbmNvZGVVUklDb21wb25lbnQoc2hhcmVfdGV4dCkgKTtcblxuXHRcdFx0XHRzaGFyZUJ1dHRvbk91dCArPSAnPGEgaHJlZj1cIicgKyBzaGFyZVVSTCArICdcIiB0YXJnZXQ9XCJfYmxhbmtcIiAnK1xuXHRcdFx0XHRcdFx0XHRcdFx0J2NsYXNzPVwicHN3cF9fc2hhcmUtLScgKyBzaGFyZUJ1dHRvbkRhdGEuaWQgKyAnXCInICtcblx0XHRcdFx0XHRcdFx0XHRcdChzaGFyZUJ1dHRvbkRhdGEuZG93bmxvYWQgPyAnZG93bmxvYWQnIDogJycpICsgJz4nICsgXG5cdFx0XHRcdFx0XHRcdFx0XHRzaGFyZUJ1dHRvbkRhdGEubGFiZWwgKyAnPC9hPic7XG5cblx0XHRcdFx0aWYoX29wdGlvbnMucGFyc2VTaGFyZUJ1dHRvbk91dCkge1xuXHRcdFx0XHRcdHNoYXJlQnV0dG9uT3V0ID0gX29wdGlvbnMucGFyc2VTaGFyZUJ1dHRvbk91dChzaGFyZUJ1dHRvbkRhdGEsIHNoYXJlQnV0dG9uT3V0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0X3NoYXJlTW9kYWwuY2hpbGRyZW5bMF0uaW5uZXJIVE1MID0gc2hhcmVCdXR0b25PdXQ7XG5cdFx0XHRfc2hhcmVNb2RhbC5jaGlsZHJlblswXS5vbmNsaWNrID0gX29wZW5XaW5kb3dQb3B1cDtcblxuXHRcdH0sXG5cdFx0X2hhc0Nsb3NlQ2xhc3MgPSBmdW5jdGlvbih0YXJnZXQpIHtcblx0XHRcdGZvcih2YXIgIGkgPSAwOyBpIDwgX29wdGlvbnMuY2xvc2VFbENsYXNzZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYoIGZyYW1ld29yay5oYXNDbGFzcyh0YXJnZXQsICdwc3dwX18nICsgX29wdGlvbnMuY2xvc2VFbENsYXNzZXNbaV0pICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRfaWRsZUludGVydmFsLFxuXHRcdF9pZGxlVGltZXIsXG5cdFx0X2lkbGVJbmNyZW1lbnQgPSAwLFxuXHRcdF9vbklkbGVNb3VzZU1vdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdGNsZWFyVGltZW91dChfaWRsZVRpbWVyKTtcblx0XHRcdF9pZGxlSW5jcmVtZW50ID0gMDtcblx0XHRcdGlmKF9pc0lkbGUpIHtcblx0XHRcdFx0dWkuc2V0SWRsZShmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRfb25Nb3VzZUxlYXZlV2luZG93ID0gZnVuY3Rpb24oZSkge1xuXHRcdFx0ZSA9IGUgPyBlIDogd2luZG93LmV2ZW50O1xuXHRcdFx0dmFyIGZyb20gPSBlLnJlbGF0ZWRUYXJnZXQgfHwgZS50b0VsZW1lbnQ7XG5cdFx0XHRpZiAoIWZyb20gfHwgZnJvbS5ub2RlTmFtZSA9PT0gJ0hUTUwnKSB7XG5cdFx0XHRcdGNsZWFyVGltZW91dChfaWRsZVRpbWVyKTtcblx0XHRcdFx0X2lkbGVUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dWkuc2V0SWRsZSh0cnVlKTtcblx0XHRcdFx0fSwgX29wdGlvbnMudGltZVRvSWRsZU91dHNpZGUpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0X3NldHVwRnVsbHNjcmVlbkFQSSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYoX29wdGlvbnMuZnVsbHNjcmVlbkVsICYmICFmcmFtZXdvcmsuZmVhdHVyZXMuaXNPbGRBbmRyb2lkKSB7XG5cdFx0XHRcdGlmKCFfZnVsbHNjcmVuQVBJKSB7XG5cdFx0XHRcdFx0X2Z1bGxzY3JlbkFQSSA9IHVpLmdldEZ1bGxzY3JlZW5BUEkoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihfZnVsbHNjcmVuQVBJKSB7XG5cdFx0XHRcdFx0ZnJhbWV3b3JrLmJpbmQoZG9jdW1lbnQsIF9mdWxsc2NyZW5BUEkuZXZlbnRLLCB1aS51cGRhdGVGdWxsc2NyZWVuKTtcblx0XHRcdFx0XHR1aS51cGRhdGVGdWxsc2NyZWVuKCk7XG5cdFx0XHRcdFx0ZnJhbWV3b3JrLmFkZENsYXNzKHBzd3AudGVtcGxhdGUsICdwc3dwLS1zdXBwb3J0cy1mcycpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZyYW1ld29yay5yZW1vdmVDbGFzcyhwc3dwLnRlbXBsYXRlLCAncHN3cC0tc3VwcG9ydHMtZnMnKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0X3NldHVwTG9hZGluZ0luZGljYXRvciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gU2V0dXAgbG9hZGluZyBpbmRpY2F0b3Jcblx0XHRcdGlmKF9vcHRpb25zLnByZWxvYWRlckVsKSB7XG5cdFx0XHRcblx0XHRcdFx0X3RvZ2dsZUxvYWRpbmdJbmRpY2F0b3IodHJ1ZSk7XG5cblx0XHRcdFx0X2xpc3RlbignYmVmb3JlQ2hhbmdlJywgZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRjbGVhclRpbWVvdXQoX2xvYWRpbmdJbmRpY2F0b3JUaW1lb3V0KTtcblxuXHRcdFx0XHRcdC8vIGRpc3BsYXkgbG9hZGluZyBpbmRpY2F0b3Igd2l0aCBkZWxheVxuXHRcdFx0XHRcdF9sb2FkaW5nSW5kaWNhdG9yVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdGlmKHBzd3AuY3Vyckl0ZW0gJiYgcHN3cC5jdXJySXRlbS5sb2FkaW5nKSB7XG5cblx0XHRcdFx0XHRcdFx0aWYoICFwc3dwLmFsbG93UHJvZ3Jlc3NpdmVJbWcoKSB8fCAocHN3cC5jdXJySXRlbS5pbWcgJiYgIXBzd3AuY3Vyckl0ZW0uaW1nLm5hdHVyYWxXaWR0aCkgICkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIHNob3cgcHJlbG9hZGVyIGlmIHByb2dyZXNzaXZlIGxvYWRpbmcgaXMgbm90IGVuYWJsZWQsIFxuXHRcdFx0XHRcdFx0XHRcdC8vIG9yIGltYWdlIHdpZHRoIGlzIG5vdCBkZWZpbmVkIHlldCAoYmVjYXVzZSBvZiBzbG93IGNvbm5lY3Rpb24pXG5cdFx0XHRcdFx0XHRcdFx0X3RvZ2dsZUxvYWRpbmdJbmRpY2F0b3IoZmFsc2UpOyBcblx0XHRcdFx0XHRcdFx0XHQvLyBpdGVtcy1jb250cm9sbGVyLmpzIGZ1bmN0aW9uIGFsbG93UHJvZ3Jlc3NpdmVJbWdcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdF90b2dnbGVMb2FkaW5nSW5kaWNhdG9yKHRydWUpOyAvLyBoaWRlIHByZWxvYWRlclxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fSwgX29wdGlvbnMubG9hZGluZ0luZGljYXRvckRlbGF5KTtcblx0XHRcdFx0XHRcblx0XHRcdFx0fSk7XG5cdFx0XHRcdF9saXN0ZW4oJ2ltYWdlTG9hZENvbXBsZXRlJywgZnVuY3Rpb24oaW5kZXgsIGl0ZW0pIHtcblx0XHRcdFx0XHRpZihwc3dwLmN1cnJJdGVtID09PSBpdGVtKSB7XG5cdFx0XHRcdFx0XHRfdG9nZ2xlTG9hZGluZ0luZGljYXRvcih0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRfdG9nZ2xlTG9hZGluZ0luZGljYXRvciA9IGZ1bmN0aW9uKGhpZGUpIHtcblx0XHRcdGlmKCBfbG9hZGluZ0luZGljYXRvckhpZGRlbiAhPT0gaGlkZSApIHtcblx0XHRcdFx0X3RvZ2dsZVBzd3BDbGFzcyhfbG9hZGluZ0luZGljYXRvciwgJ3ByZWxvYWRlci0tYWN0aXZlJywgIWhpZGUpO1xuXHRcdFx0XHRfbG9hZGluZ0luZGljYXRvckhpZGRlbiA9IGhpZGU7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRfYXBwbHlOYXZCYXJHYXBzID0gZnVuY3Rpb24oaXRlbSkge1xuXHRcdFx0dmFyIGdhcCA9IGl0ZW0udkdhcDtcblxuXHRcdFx0aWYoIF9maXRDb250cm9sc0luVmlld3BvcnQoKSApIHtcblx0XHRcdFx0XG5cdFx0XHRcdHZhciBiYXJzID0gX29wdGlvbnMuYmFyc1NpemU7IFxuXHRcdFx0XHRpZihfb3B0aW9ucy5jYXB0aW9uRWwgJiYgYmFycy5ib3R0b20gPT09ICdhdXRvJykge1xuXHRcdFx0XHRcdGlmKCFfZmFrZUNhcHRpb25Db250YWluZXIpIHtcblx0XHRcdFx0XHRcdF9mYWtlQ2FwdGlvbkNvbnRhaW5lciA9IGZyYW1ld29yay5jcmVhdGVFbCgncHN3cF9fY2FwdGlvbiBwc3dwX19jYXB0aW9uLS1mYWtlJyk7XG5cdFx0XHRcdFx0XHRfZmFrZUNhcHRpb25Db250YWluZXIuYXBwZW5kQ2hpbGQoIGZyYW1ld29yay5jcmVhdGVFbCgncHN3cF9fY2FwdGlvbl9fY2VudGVyJykgKTtcblx0XHRcdFx0XHRcdF9jb250cm9scy5pbnNlcnRCZWZvcmUoX2Zha2VDYXB0aW9uQ29udGFpbmVyLCBfY2FwdGlvbkNvbnRhaW5lcik7XG5cdFx0XHRcdFx0XHRmcmFtZXdvcmsuYWRkQ2xhc3MoX2NvbnRyb2xzLCAncHN3cF9fdWktLWZpdCcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiggX29wdGlvbnMuYWRkQ2FwdGlvbkhUTUxGbihpdGVtLCBfZmFrZUNhcHRpb25Db250YWluZXIsIHRydWUpICkge1xuXG5cdFx0XHRcdFx0XHR2YXIgY2FwdGlvblNpemUgPSBfZmFrZUNhcHRpb25Db250YWluZXIuY2xpZW50SGVpZ2h0O1xuXHRcdFx0XHRcdFx0Z2FwLmJvdHRvbSA9IHBhcnNlSW50KGNhcHRpb25TaXplLDEwKSB8fCA0NDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Z2FwLmJvdHRvbSA9IGJhcnMudG9wOyAvLyBpZiBubyBjYXB0aW9uLCBzZXQgc2l6ZSBvZiBib3R0b20gZ2FwIHRvIHNpemUgb2YgdG9wXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGdhcC5ib3R0b20gPSBiYXJzLmJvdHRvbSA9PT0gJ2F1dG8nID8gMCA6IGJhcnMuYm90dG9tO1xuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0XHQvLyBoZWlnaHQgb2YgdG9wIGJhciBpcyBzdGF0aWMsIG5vIG5lZWQgdG8gY2FsY3VsYXRlIGl0XG5cdFx0XHRcdGdhcC50b3AgPSBiYXJzLnRvcDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGdhcC50b3AgPSBnYXAuYm90dG9tID0gMDtcblx0XHRcdH1cblx0XHR9LFxuXHRcdF9zZXR1cElkbGUgPSBmdW5jdGlvbigpIHtcblx0XHRcdC8vIEhpZGUgY29udHJvbHMgd2hlbiBtb3VzZSBpcyB1c2VkXG5cdFx0XHRpZihfb3B0aW9ucy50aW1lVG9JZGxlKSB7XG5cdFx0XHRcdF9saXN0ZW4oJ21vdXNlVXNlZCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGZyYW1ld29yay5iaW5kKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgX29uSWRsZU1vdXNlTW92ZSk7XG5cdFx0XHRcdFx0ZnJhbWV3b3JrLmJpbmQoZG9jdW1lbnQsICdtb3VzZW91dCcsIF9vbk1vdXNlTGVhdmVXaW5kb3cpO1xuXG5cdFx0XHRcdFx0X2lkbGVJbnRlcnZhbCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0X2lkbGVJbmNyZW1lbnQrKztcblx0XHRcdFx0XHRcdGlmKF9pZGxlSW5jcmVtZW50ID09PSAyKSB7XG5cdFx0XHRcdFx0XHRcdHVpLnNldElkbGUodHJ1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSwgX29wdGlvbnMudGltZVRvSWRsZSAvIDIpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdF9zZXR1cEhpZGluZ0NvbnRyb2xzRHVyaW5nR2VzdHVyZXMgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gSGlkZSBjb250cm9scyBvbiB2ZXJ0aWNhbCBkcmFnXG5cdFx0XHRfbGlzdGVuKCdvblZlcnRpY2FsRHJhZycsIGZ1bmN0aW9uKG5vdykge1xuXHRcdFx0XHRpZihfY29udHJvbHNWaXNpYmxlICYmIG5vdyA8IDAuOTUpIHtcblx0XHRcdFx0XHR1aS5oaWRlQ29udHJvbHMoKTtcblx0XHRcdFx0fSBlbHNlIGlmKCFfY29udHJvbHNWaXNpYmxlICYmIG5vdyA+PSAwLjk1KSB7XG5cdFx0XHRcdFx0dWkuc2hvd0NvbnRyb2xzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBIaWRlIGNvbnRyb2xzIHdoZW4gcGluY2hpbmcgdG8gY2xvc2Vcblx0XHRcdHZhciBwaW5jaENvbnRyb2xzSGlkZGVuO1xuXHRcdFx0X2xpc3Rlbignb25QaW5jaENsb3NlJyAsIGZ1bmN0aW9uKG5vdykge1xuXHRcdFx0XHRpZihfY29udHJvbHNWaXNpYmxlICYmIG5vdyA8IDAuOSkge1xuXHRcdFx0XHRcdHVpLmhpZGVDb250cm9scygpO1xuXHRcdFx0XHRcdHBpbmNoQ29udHJvbHNIaWRkZW4gPSB0cnVlO1xuXHRcdFx0XHR9IGVsc2UgaWYocGluY2hDb250cm9sc0hpZGRlbiAmJiAhX2NvbnRyb2xzVmlzaWJsZSAmJiBub3cgPiAwLjkpIHtcblx0XHRcdFx0XHR1aS5zaG93Q29udHJvbHMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdF9saXN0ZW4oJ3pvb21HZXN0dXJlRW5kZWQnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0cGluY2hDb250cm9sc0hpZGRlbiA9IGZhbHNlO1xuXHRcdFx0XHRpZihwaW5jaENvbnRyb2xzSGlkZGVuICYmICFfY29udHJvbHNWaXNpYmxlKSB7XG5cdFx0XHRcdFx0dWkuc2hvd0NvbnRyb2xzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0fTtcblxuXG5cblx0dmFyIF91aUVsZW1lbnRzID0gW1xuXHRcdHsgXG5cdFx0XHRuYW1lOiAnY2FwdGlvbicsIFxuXHRcdFx0b3B0aW9uOiAnY2FwdGlvbkVsJyxcblx0XHRcdG9uSW5pdDogZnVuY3Rpb24oZWwpIHsgIFxuXHRcdFx0XHRfY2FwdGlvbkNvbnRhaW5lciA9IGVsOyBcblx0XHRcdH0gXG5cdFx0fSxcblx0XHR7IFxuXHRcdFx0bmFtZTogJ3NoYXJlLW1vZGFsJywgXG5cdFx0XHRvcHRpb246ICdzaGFyZUVsJyxcblx0XHRcdG9uSW5pdDogZnVuY3Rpb24oZWwpIHsgIFxuXHRcdFx0XHRfc2hhcmVNb2RhbCA9IGVsO1xuXHRcdFx0fSxcblx0XHRcdG9uVGFwOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0X3RvZ2dsZVNoYXJlTW9kYWwoKTtcblx0XHRcdH0gXG5cdFx0fSxcblx0XHR7IFxuXHRcdFx0bmFtZTogJ2J1dHRvbi0tc2hhcmUnLCBcblx0XHRcdG9wdGlvbjogJ3NoYXJlRWwnLFxuXHRcdFx0b25Jbml0OiBmdW5jdGlvbihlbCkgeyBcblx0XHRcdFx0X3NoYXJlQnV0dG9uID0gZWw7XG5cdFx0XHR9LFxuXHRcdFx0b25UYXA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRfdG9nZ2xlU2hhcmVNb2RhbCgpO1xuXHRcdFx0fSBcblx0XHR9LFxuXHRcdHsgXG5cdFx0XHRuYW1lOiAnYnV0dG9uLS16b29tJywgXG5cdFx0XHRvcHRpb246ICd6b29tRWwnLFxuXHRcdFx0b25UYXA6IHBzd3AudG9nZ2xlRGVza3RvcFpvb21cblx0XHR9LFxuXHRcdHsgXG5cdFx0XHRuYW1lOiAnY291bnRlcicsIFxuXHRcdFx0b3B0aW9uOiAnY291bnRlckVsJyxcblx0XHRcdG9uSW5pdDogZnVuY3Rpb24oZWwpIHsgIFxuXHRcdFx0XHRfaW5kZXhJbmRpY2F0b3IgPSBlbDtcblx0XHRcdH0gXG5cdFx0fSxcblx0XHR7IFxuXHRcdFx0bmFtZTogJ2J1dHRvbi0tY2xvc2UnLCBcblx0XHRcdG9wdGlvbjogJ2Nsb3NlRWwnLFxuXHRcdFx0b25UYXA6IHBzd3AuY2xvc2Vcblx0XHR9LFxuXHRcdHsgXG5cdFx0XHRuYW1lOiAnYnV0dG9uLS1hcnJvdy0tbGVmdCcsIFxuXHRcdFx0b3B0aW9uOiAnYXJyb3dFbCcsXG5cdFx0XHRvblRhcDogcHN3cC5wcmV2XG5cdFx0fSxcblx0XHR7IFxuXHRcdFx0bmFtZTogJ2J1dHRvbi0tYXJyb3ctLXJpZ2h0JywgXG5cdFx0XHRvcHRpb246ICdhcnJvd0VsJyxcblx0XHRcdG9uVGFwOiBwc3dwLm5leHRcblx0XHR9LFxuXHRcdHsgXG5cdFx0XHRuYW1lOiAnYnV0dG9uLS1mcycsIFxuXHRcdFx0b3B0aW9uOiAnZnVsbHNjcmVlbkVsJyxcblx0XHRcdG9uVGFwOiBmdW5jdGlvbigpIHsgIFxuXHRcdFx0XHRpZihfZnVsbHNjcmVuQVBJLmlzRnVsbHNjcmVlbigpKSB7XG5cdFx0XHRcdFx0X2Z1bGxzY3JlbkFQSS5leGl0KCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0X2Z1bGxzY3JlbkFQSS5lbnRlcigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IFxuXHRcdH0sXG5cdFx0eyBcblx0XHRcdG5hbWU6ICdwcmVsb2FkZXInLCBcblx0XHRcdG9wdGlvbjogJ3ByZWxvYWRlckVsJyxcblx0XHRcdG9uSW5pdDogZnVuY3Rpb24oZWwpIHsgIFxuXHRcdFx0XHRfbG9hZGluZ0luZGljYXRvciA9IGVsO1xuXHRcdFx0fSBcblx0XHR9XG5cblx0XTtcblxuXHR2YXIgX3NldHVwVUlFbGVtZW50cyA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpdGVtLFxuXHRcdFx0Y2xhc3NBdHRyLFxuXHRcdFx0dWlFbGVtZW50O1xuXG5cdFx0dmFyIGxvb3BUaHJvdWdoQ2hpbGRFbGVtZW50cyA9IGZ1bmN0aW9uKHNDaGlsZHJlbikge1xuXHRcdFx0aWYoIXNDaGlsZHJlbikge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZhciBsID0gc0NoaWxkcmVuLmxlbmd0aDtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0aXRlbSA9IHNDaGlsZHJlbltpXTtcblx0XHRcdFx0Y2xhc3NBdHRyID0gaXRlbS5jbGFzc05hbWU7XG5cblx0XHRcdFx0Zm9yKHZhciBhID0gMDsgYSA8IF91aUVsZW1lbnRzLmxlbmd0aDsgYSsrKSB7XG5cdFx0XHRcdFx0dWlFbGVtZW50ID0gX3VpRWxlbWVudHNbYV07XG5cblx0XHRcdFx0XHRpZihjbGFzc0F0dHIuaW5kZXhPZigncHN3cF9fJyArIHVpRWxlbWVudC5uYW1lKSA+IC0xICApIHtcblxuXHRcdFx0XHRcdFx0aWYoIF9vcHRpb25zW3VpRWxlbWVudC5vcHRpb25dICkgeyAvLyBpZiBlbGVtZW50IGlzIG5vdCBkaXNhYmxlZCBmcm9tIG9wdGlvbnNcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdGZyYW1ld29yay5yZW1vdmVDbGFzcyhpdGVtLCAncHN3cF9fZWxlbWVudC0tZGlzYWJsZWQnKTtcblx0XHRcdFx0XHRcdFx0aWYodWlFbGVtZW50Lm9uSW5pdCkge1xuXHRcdFx0XHRcdFx0XHRcdHVpRWxlbWVudC5vbkluaXQoaXRlbSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdC8vaXRlbS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGZyYW1ld29yay5hZGRDbGFzcyhpdGVtLCAncHN3cF9fZWxlbWVudC0tZGlzYWJsZWQnKTtcblx0XHRcdFx0XHRcdFx0Ly9pdGVtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRsb29wVGhyb3VnaENoaWxkRWxlbWVudHMoX2NvbnRyb2xzLmNoaWxkcmVuKTtcblxuXHRcdHZhciB0b3BCYXIgPSAgZnJhbWV3b3JrLmdldENoaWxkQnlDbGFzcyhfY29udHJvbHMsICdwc3dwX190b3AtYmFyJyk7XG5cdFx0aWYodG9wQmFyKSB7XG5cdFx0XHRsb29wVGhyb3VnaENoaWxkRWxlbWVudHMoIHRvcEJhci5jaGlsZHJlbiApO1xuXHRcdH1cblx0fTtcblxuXG5cdFxuXG5cdHVpLmluaXQgPSBmdW5jdGlvbigpIHtcblxuXHRcdC8vIGV4dGVuZCBvcHRpb25zXG5cdFx0ZnJhbWV3b3JrLmV4dGVuZChwc3dwLm9wdGlvbnMsIF9kZWZhdWx0VUlPcHRpb25zLCB0cnVlKTtcblxuXHRcdC8vIGNyZWF0ZSBsb2NhbCBsaW5rIGZvciBmYXN0IGFjY2Vzc1xuXHRcdF9vcHRpb25zID0gcHN3cC5vcHRpb25zO1xuXG5cdFx0Ly8gZmluZCBwc3dwX191aSBlbGVtZW50XG5cdFx0X2NvbnRyb2xzID0gZnJhbWV3b3JrLmdldENoaWxkQnlDbGFzcyhwc3dwLnNjcm9sbFdyYXAsICdwc3dwX191aScpO1xuXG5cdFx0Ly8gY3JlYXRlIGxvY2FsIGxpbmtcblx0XHRfbGlzdGVuID0gcHN3cC5saXN0ZW47XG5cblxuXHRcdF9zZXR1cEhpZGluZ0NvbnRyb2xzRHVyaW5nR2VzdHVyZXMoKTtcblxuXHRcdC8vIHVwZGF0ZSBjb250cm9scyB3aGVuIHNsaWRlcyBjaGFuZ2Vcblx0XHRfbGlzdGVuKCdiZWZvcmVDaGFuZ2UnLCB1aS51cGRhdGUpO1xuXG5cdFx0Ly8gdG9nZ2xlIHpvb20gb24gZG91YmxlLXRhcFxuXHRcdF9saXN0ZW4oJ2RvdWJsZVRhcCcsIGZ1bmN0aW9uKHBvaW50KSB7XG5cdFx0XHR2YXIgaW5pdGlhbFpvb21MZXZlbCA9IHBzd3AuY3Vyckl0ZW0uaW5pdGlhbFpvb21MZXZlbDtcblx0XHRcdGlmKHBzd3AuZ2V0Wm9vbUxldmVsKCkgIT09IGluaXRpYWxab29tTGV2ZWwpIHtcblx0XHRcdFx0cHN3cC56b29tVG8oaW5pdGlhbFpvb21MZXZlbCwgcG9pbnQsIDMzMyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwc3dwLnpvb21Ubyhfb3B0aW9ucy5nZXREb3VibGVUYXBab29tKGZhbHNlLCBwc3dwLmN1cnJJdGVtKSwgcG9pbnQsIDMzMyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBBbGxvdyB0ZXh0IHNlbGVjdGlvbiBpbiBjYXB0aW9uXG5cdFx0X2xpc3RlbigncHJldmVudERyYWdFdmVudCcsIGZ1bmN0aW9uKGUsIGlzRG93biwgcHJldmVudE9iaikge1xuXHRcdFx0dmFyIHQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7XG5cdFx0XHRpZihcblx0XHRcdFx0dCAmJiBcblx0XHRcdFx0dC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgJiYgZS50eXBlLmluZGV4T2YoJ21vdXNlJykgPiAtMSAmJiBcblx0XHRcdFx0KCB0LmdldEF0dHJpYnV0ZSgnY2xhc3MnKS5pbmRleE9mKCdfX2NhcHRpb24nKSA+IDAgfHwgKC8oU01BTEx8U1RST05HfEVNKS9pKS50ZXN0KHQudGFnTmFtZSkgKSBcblx0XHRcdCkge1xuXHRcdFx0XHRwcmV2ZW50T2JqLnByZXZlbnQgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIGJpbmQgZXZlbnRzIGZvciBVSVxuXHRcdF9saXN0ZW4oJ2JpbmRFdmVudHMnLCBmdW5jdGlvbigpIHtcblx0XHRcdGZyYW1ld29yay5iaW5kKF9jb250cm9scywgJ3Bzd3BUYXAgY2xpY2snLCBfb25Db250cm9sc1RhcCk7XG5cdFx0XHRmcmFtZXdvcmsuYmluZChwc3dwLnNjcm9sbFdyYXAsICdwc3dwVGFwJywgdWkub25HbG9iYWxUYXApO1xuXG5cdFx0XHRpZighcHN3cC5saWtlbHlUb3VjaERldmljZSkge1xuXHRcdFx0XHRmcmFtZXdvcmsuYmluZChwc3dwLnNjcm9sbFdyYXAsICdtb3VzZW92ZXInLCB1aS5vbk1vdXNlT3Zlcik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyB1bmJpbmQgZXZlbnRzIGZvciBVSVxuXHRcdF9saXN0ZW4oJ3VuYmluZEV2ZW50cycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYoIV9zaGFyZU1vZGFsSGlkZGVuKSB7XG5cdFx0XHRcdF90b2dnbGVTaGFyZU1vZGFsKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmKF9pZGxlSW50ZXJ2YWwpIHtcblx0XHRcdFx0Y2xlYXJJbnRlcnZhbChfaWRsZUludGVydmFsKTtcblx0XHRcdH1cblx0XHRcdGZyYW1ld29yay51bmJpbmQoZG9jdW1lbnQsICdtb3VzZW91dCcsIF9vbk1vdXNlTGVhdmVXaW5kb3cpO1xuXHRcdFx0ZnJhbWV3b3JrLnVuYmluZChkb2N1bWVudCwgJ21vdXNlbW92ZScsIF9vbklkbGVNb3VzZU1vdmUpO1xuXHRcdFx0ZnJhbWV3b3JrLnVuYmluZChfY29udHJvbHMsICdwc3dwVGFwIGNsaWNrJywgX29uQ29udHJvbHNUYXApO1xuXHRcdFx0ZnJhbWV3b3JrLnVuYmluZChwc3dwLnNjcm9sbFdyYXAsICdwc3dwVGFwJywgdWkub25HbG9iYWxUYXApO1xuXHRcdFx0ZnJhbWV3b3JrLnVuYmluZChwc3dwLnNjcm9sbFdyYXAsICdtb3VzZW92ZXInLCB1aS5vbk1vdXNlT3Zlcik7XG5cblx0XHRcdGlmKF9mdWxsc2NyZW5BUEkpIHtcblx0XHRcdFx0ZnJhbWV3b3JrLnVuYmluZChkb2N1bWVudCwgX2Z1bGxzY3JlbkFQSS5ldmVudEssIHVpLnVwZGF0ZUZ1bGxzY3JlZW4pO1xuXHRcdFx0XHRpZihfZnVsbHNjcmVuQVBJLmlzRnVsbHNjcmVlbigpKSB7XG5cdFx0XHRcdFx0X29wdGlvbnMuaGlkZUFuaW1hdGlvbkR1cmF0aW9uID0gMDtcblx0XHRcdFx0XHRfZnVsbHNjcmVuQVBJLmV4aXQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRfZnVsbHNjcmVuQVBJID0gbnVsbDtcblx0XHRcdH1cblx0XHR9KTtcblxuXG5cdFx0Ly8gY2xlYW4gdXAgdGhpbmdzIHdoZW4gZ2FsbGVyeSBpcyBkZXN0cm95ZWRcblx0XHRfbGlzdGVuKCdkZXN0cm95JywgZnVuY3Rpb24oKSB7XG5cdFx0XHRpZihfb3B0aW9ucy5jYXB0aW9uRWwpIHtcblx0XHRcdFx0aWYoX2Zha2VDYXB0aW9uQ29udGFpbmVyKSB7XG5cdFx0XHRcdFx0X2NvbnRyb2xzLnJlbW92ZUNoaWxkKF9mYWtlQ2FwdGlvbkNvbnRhaW5lcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZnJhbWV3b3JrLnJlbW92ZUNsYXNzKF9jYXB0aW9uQ29udGFpbmVyLCAncHN3cF9fY2FwdGlvbi0tZW1wdHknKTtcblx0XHRcdH1cblxuXHRcdFx0aWYoX3NoYXJlTW9kYWwpIHtcblx0XHRcdFx0X3NoYXJlTW9kYWwuY2hpbGRyZW5bMF0ub25jbGljayA9IG51bGw7XG5cdFx0XHR9XG5cdFx0XHRmcmFtZXdvcmsucmVtb3ZlQ2xhc3MoX2NvbnRyb2xzLCAncHN3cF9fdWktLW92ZXItY2xvc2UnKTtcblx0XHRcdGZyYW1ld29yay5hZGRDbGFzcyggX2NvbnRyb2xzLCAncHN3cF9fdWktLWhpZGRlbicpO1xuXHRcdFx0dWkuc2V0SWRsZShmYWxzZSk7XG5cdFx0fSk7XG5cdFx0XG5cblx0XHRpZighX29wdGlvbnMuc2hvd0FuaW1hdGlvbkR1cmF0aW9uKSB7XG5cdFx0XHRmcmFtZXdvcmsucmVtb3ZlQ2xhc3MoIF9jb250cm9scywgJ3Bzd3BfX3VpLS1oaWRkZW4nKTtcblx0XHR9XG5cdFx0X2xpc3RlbignaW5pdGlhbFpvb21JbicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYoX29wdGlvbnMuc2hvd0FuaW1hdGlvbkR1cmF0aW9uKSB7XG5cdFx0XHRcdGZyYW1ld29yay5yZW1vdmVDbGFzcyggX2NvbnRyb2xzLCAncHN3cF9fdWktLWhpZGRlbicpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdF9saXN0ZW4oJ2luaXRpYWxab29tT3V0JywgZnVuY3Rpb24oKSB7XG5cdFx0XHRmcmFtZXdvcmsuYWRkQ2xhc3MoIF9jb250cm9scywgJ3Bzd3BfX3VpLS1oaWRkZW4nKTtcblx0XHR9KTtcblxuXHRcdF9saXN0ZW4oJ3BhcnNlVmVydGljYWxNYXJnaW4nLCBfYXBwbHlOYXZCYXJHYXBzKTtcblx0XHRcblx0XHRfc2V0dXBVSUVsZW1lbnRzKCk7XG5cblx0XHRpZihfb3B0aW9ucy5zaGFyZUVsICYmIF9zaGFyZUJ1dHRvbiAmJiBfc2hhcmVNb2RhbCkge1xuXHRcdFx0X3NoYXJlTW9kYWxIaWRkZW4gPSB0cnVlO1xuXHRcdH1cblxuXHRcdF9jb3VudE51bUl0ZW1zKCk7XG5cblx0XHRfc2V0dXBJZGxlKCk7XG5cblx0XHRfc2V0dXBGdWxsc2NyZWVuQVBJKCk7XG5cblx0XHRfc2V0dXBMb2FkaW5nSW5kaWNhdG9yKCk7XG5cdH07XG5cblx0dWkuc2V0SWRsZSA9IGZ1bmN0aW9uKGlzSWRsZSkge1xuXHRcdF9pc0lkbGUgPSBpc0lkbGU7XG5cdFx0X3RvZ2dsZVBzd3BDbGFzcyhfY29udHJvbHMsICd1aS0taWRsZScsIGlzSWRsZSk7XG5cdH07XG5cblx0dWkudXBkYXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0Ly8gRG9uJ3QgdXBkYXRlIFVJIGlmIGl0J3MgaGlkZGVuXG5cdFx0aWYoX2NvbnRyb2xzVmlzaWJsZSAmJiBwc3dwLmN1cnJJdGVtKSB7XG5cdFx0XHRcblx0XHRcdHVpLnVwZGF0ZUluZGV4SW5kaWNhdG9yKCk7XG5cblx0XHRcdGlmKF9vcHRpb25zLmNhcHRpb25FbCkge1xuXHRcdFx0XHRfb3B0aW9ucy5hZGRDYXB0aW9uSFRNTEZuKHBzd3AuY3Vyckl0ZW0sIF9jYXB0aW9uQ29udGFpbmVyKTtcblxuXHRcdFx0XHRfdG9nZ2xlUHN3cENsYXNzKF9jYXB0aW9uQ29udGFpbmVyLCAnY2FwdGlvbi0tZW1wdHknLCAhcHN3cC5jdXJySXRlbS50aXRsZSk7XG5cdFx0XHR9XG5cblx0XHRcdF9vdmVybGF5VUlVcGRhdGVkID0gdHJ1ZTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRfb3ZlcmxheVVJVXBkYXRlZCA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmKCFfc2hhcmVNb2RhbEhpZGRlbikge1xuXHRcdFx0X3RvZ2dsZVNoYXJlTW9kYWwoKTtcblx0XHR9XG5cblx0XHRfY291bnROdW1JdGVtcygpO1xuXHR9O1xuXG5cdHVpLnVwZGF0ZUZ1bGxzY3JlZW4gPSBmdW5jdGlvbihlKSB7XG5cblx0XHRpZihlKSB7XG5cdFx0XHQvLyBzb21lIGJyb3dzZXJzIGNoYW5nZSB3aW5kb3cgc2Nyb2xsIHBvc2l0aW9uIGR1cmluZyB0aGUgZnVsbHNjcmVlblxuXHRcdFx0Ly8gc28gUGhvdG9Td2lwZSB1cGRhdGVzIGl0IGp1c3QgaW4gY2FzZVxuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0cHN3cC5zZXRTY3JvbGxPZmZzZXQoIDAsIGZyYW1ld29yay5nZXRTY3JvbGxZKCkgKTtcblx0XHRcdH0sIDUwKTtcblx0XHR9XG5cdFx0XG5cdFx0Ly8gdG9vZ2xlIHBzd3AtLWZzIGNsYXNzIG9uIHJvb3QgZWxlbWVudFxuXHRcdGZyYW1ld29ya1sgKF9mdWxsc2NyZW5BUEkuaXNGdWxsc2NyZWVuKCkgPyAnYWRkJyA6ICdyZW1vdmUnKSArICdDbGFzcycgXShwc3dwLnRlbXBsYXRlLCAncHN3cC0tZnMnKTtcblx0fTtcblxuXHR1aS51cGRhdGVJbmRleEluZGljYXRvciA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmKF9vcHRpb25zLmNvdW50ZXJFbCkge1xuXHRcdFx0X2luZGV4SW5kaWNhdG9yLmlubmVySFRNTCA9IChwc3dwLmdldEN1cnJlbnRJbmRleCgpKzEpICsgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdF9vcHRpb25zLmluZGV4SW5kaWNhdG9yU2VwICsgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdF9vcHRpb25zLmdldE51bUl0ZW1zRm4oKTtcblx0XHR9XG5cdH07XG5cdFxuXHR1aS5vbkdsb2JhbFRhcCA9IGZ1bmN0aW9uKGUpIHtcblx0XHRlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XG5cdFx0dmFyIHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDtcblxuXHRcdGlmKF9ibG9ja0NvbnRyb2xzVGFwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYoZS5kZXRhaWwgJiYgZS5kZXRhaWwucG9pbnRlclR5cGUgPT09ICdtb3VzZScpIHtcblxuXHRcdFx0Ly8gY2xvc2UgZ2FsbGVyeSBpZiBjbGlja2VkIG91dHNpZGUgb2YgdGhlIGltYWdlXG5cdFx0XHRpZihfaGFzQ2xvc2VDbGFzcyh0YXJnZXQpKSB7XG5cdFx0XHRcdHBzd3AuY2xvc2UoKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihmcmFtZXdvcmsuaGFzQ2xhc3ModGFyZ2V0LCAncHN3cF9faW1nJykpIHtcblx0XHRcdFx0aWYocHN3cC5nZXRab29tTGV2ZWwoKSA9PT0gMSAmJiBwc3dwLmdldFpvb21MZXZlbCgpIDw9IHBzd3AuY3Vyckl0ZW0uZml0UmF0aW8pIHtcblx0XHRcdFx0XHRpZihfb3B0aW9ucy5jbGlja1RvQ2xvc2VOb25ab29tYWJsZSkge1xuXHRcdFx0XHRcdFx0cHN3cC5jbG9zZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRwc3dwLnRvZ2dsZURlc2t0b3Bab29tKGUuZGV0YWlsLnJlbGVhc2VQb2ludCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdFxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIHRhcCBhbnl3aGVyZSAoZXhjZXB0IGJ1dHRvbnMpIHRvIHRvZ2dsZSB2aXNpYmlsaXR5IG9mIGNvbnRyb2xzXG5cdFx0XHRpZihfb3B0aW9ucy50YXBUb1RvZ2dsZUNvbnRyb2xzKSB7XG5cdFx0XHRcdGlmKF9jb250cm9sc1Zpc2libGUpIHtcblx0XHRcdFx0XHR1aS5oaWRlQ29udHJvbHMoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR1aS5zaG93Q29udHJvbHMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyB0YXAgdG8gY2xvc2UgZ2FsbGVyeVxuXHRcdFx0aWYoX29wdGlvbnMudGFwVG9DbG9zZSAmJiAoZnJhbWV3b3JrLmhhc0NsYXNzKHRhcmdldCwgJ3Bzd3BfX2ltZycpIHx8IF9oYXNDbG9zZUNsYXNzKHRhcmdldCkpICkge1xuXHRcdFx0XHRwc3dwLmNsb3NlKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdFxuXHRcdH1cblx0fTtcblx0dWkub25Nb3VzZU92ZXIgPSBmdW5jdGlvbihlKSB7XG5cdFx0ZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuXHRcdHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7XG5cblx0XHQvLyBhZGQgY2xhc3Mgd2hlbiBtb3VzZSBpcyBvdmVyIGFuIGVsZW1lbnQgdGhhdCBzaG91bGQgY2xvc2UgdGhlIGdhbGxlcnlcblx0XHRfdG9nZ2xlUHN3cENsYXNzKF9jb250cm9scywgJ3VpLS1vdmVyLWNsb3NlJywgX2hhc0Nsb3NlQ2xhc3ModGFyZ2V0KSk7XG5cdH07XG5cblx0dWkuaGlkZUNvbnRyb2xzID0gZnVuY3Rpb24oKSB7XG5cdFx0ZnJhbWV3b3JrLmFkZENsYXNzKF9jb250cm9scywncHN3cF9fdWktLWhpZGRlbicpO1xuXHRcdF9jb250cm9sc1Zpc2libGUgPSBmYWxzZTtcblx0fTtcblxuXHR1aS5zaG93Q29udHJvbHMgPSBmdW5jdGlvbigpIHtcblx0XHRfY29udHJvbHNWaXNpYmxlID0gdHJ1ZTtcblx0XHRpZighX292ZXJsYXlVSVVwZGF0ZWQpIHtcblx0XHRcdHVpLnVwZGF0ZSgpO1xuXHRcdH1cblx0XHRmcmFtZXdvcmsucmVtb3ZlQ2xhc3MoX2NvbnRyb2xzLCdwc3dwX191aS0taGlkZGVuJyk7XG5cdH07XG5cblx0dWkuc3VwcG9ydHNGdWxsc2NyZWVuID0gZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGQgPSBkb2N1bWVudDtcblx0XHRyZXR1cm4gISEoZC5leGl0RnVsbHNjcmVlbiB8fCBkLm1vekNhbmNlbEZ1bGxTY3JlZW4gfHwgZC53ZWJraXRFeGl0RnVsbHNjcmVlbiB8fCBkLm1zRXhpdEZ1bGxzY3JlZW4pO1xuXHR9O1xuXG5cdHVpLmdldEZ1bGxzY3JlZW5BUEkgPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgZEUgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdFx0XHRhcGksXG5cdFx0XHR0RiA9ICdmdWxsc2NyZWVuY2hhbmdlJztcblxuXHRcdGlmIChkRS5yZXF1ZXN0RnVsbHNjcmVlbikge1xuXHRcdFx0YXBpID0ge1xuXHRcdFx0XHRlbnRlcks6ICdyZXF1ZXN0RnVsbHNjcmVlbicsXG5cdFx0XHRcdGV4aXRLOiAnZXhpdEZ1bGxzY3JlZW4nLFxuXHRcdFx0XHRlbGVtZW50SzogJ2Z1bGxzY3JlZW5FbGVtZW50Jyxcblx0XHRcdFx0ZXZlbnRLOiB0RlxuXHRcdFx0fTtcblxuXHRcdH0gZWxzZSBpZihkRS5tb3pSZXF1ZXN0RnVsbFNjcmVlbiApIHtcblx0XHRcdGFwaSA9IHtcblx0XHRcdFx0ZW50ZXJLOiAnbW96UmVxdWVzdEZ1bGxTY3JlZW4nLFxuXHRcdFx0XHRleGl0SzogJ21vekNhbmNlbEZ1bGxTY3JlZW4nLFxuXHRcdFx0XHRlbGVtZW50SzogJ21vekZ1bGxTY3JlZW5FbGVtZW50Jyxcblx0XHRcdFx0ZXZlbnRLOiAnbW96JyArIHRGXG5cdFx0XHR9O1xuXG5cdFx0XHRcblxuXHRcdH0gZWxzZSBpZihkRS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbikge1xuXHRcdFx0YXBpID0ge1xuXHRcdFx0XHRlbnRlcks6ICd3ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbicsXG5cdFx0XHRcdGV4aXRLOiAnd2Via2l0RXhpdEZ1bGxzY3JlZW4nLFxuXHRcdFx0XHRlbGVtZW50SzogJ3dlYmtpdEZ1bGxzY3JlZW5FbGVtZW50Jyxcblx0XHRcdFx0ZXZlbnRLOiAnd2Via2l0JyArIHRGXG5cdFx0XHR9O1xuXG5cdFx0fSBlbHNlIGlmKGRFLm1zUmVxdWVzdEZ1bGxzY3JlZW4pIHtcblx0XHRcdGFwaSA9IHtcblx0XHRcdFx0ZW50ZXJLOiAnbXNSZXF1ZXN0RnVsbHNjcmVlbicsXG5cdFx0XHRcdGV4aXRLOiAnbXNFeGl0RnVsbHNjcmVlbicsXG5cdFx0XHRcdGVsZW1lbnRLOiAnbXNGdWxsc2NyZWVuRWxlbWVudCcsXG5cdFx0XHRcdGV2ZW50SzogJ01TRnVsbHNjcmVlbkNoYW5nZSdcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYoYXBpKSB7XG5cdFx0XHRhcGkuZW50ZXIgPSBmdW5jdGlvbigpIHsgXG5cdFx0XHRcdC8vIGRpc2FibGUgY2xvc2Utb24tc2Nyb2xsIGluIGZ1bGxzY3JlZW5cblx0XHRcdFx0X2luaXRhbENsb3NlT25TY3JvbGxWYWx1ZSA9IF9vcHRpb25zLmNsb3NlT25TY3JvbGw7IFxuXHRcdFx0XHRfb3B0aW9ucy5jbG9zZU9uU2Nyb2xsID0gZmFsc2U7IFxuXG5cdFx0XHRcdGlmKHRoaXMuZW50ZXJLID09PSAnd2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4nKSB7XG5cdFx0XHRcdFx0cHN3cC50ZW1wbGF0ZVt0aGlzLmVudGVyS10oIEVsZW1lbnQuQUxMT1dfS0VZQk9BUkRfSU5QVVQgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gcHN3cC50ZW1wbGF0ZVt0aGlzLmVudGVyS10oKTsgXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRhcGkuZXhpdCA9IGZ1bmN0aW9uKCkgeyBcblx0XHRcdFx0X29wdGlvbnMuY2xvc2VPblNjcm9sbCA9IF9pbml0YWxDbG9zZU9uU2Nyb2xsVmFsdWU7XG5cblx0XHRcdFx0cmV0dXJuIGRvY3VtZW50W3RoaXMuZXhpdEtdKCk7IFxuXG5cdFx0XHR9O1xuXHRcdFx0YXBpLmlzRnVsbHNjcmVlbiA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gZG9jdW1lbnRbdGhpcy5lbGVtZW50S107IH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFwaTtcblx0fTtcblxuXG5cbn07XG5yZXR1cm4gUGhvdG9Td2lwZVVJX0RlZmF1bHQ7XG5cblxufSk7XG4iLCIvKiEgUGhvdG9Td2lwZSAtIHY0LjEuMyAtIDIwMTktMDEtMDhcbiogaHR0cDovL3Bob3Rvc3dpcGUuY29tXG4qIENvcHlyaWdodCAoYykgMjAxOSBEbWl0cnkgU2VtZW5vdjsgKi9cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkgeyBcblx0aWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuXHRcdGRlZmluZShmYWN0b3J5KTtcblx0fSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0fSBlbHNlIHtcblx0XHRyb290LlBob3RvU3dpcGUgPSBmYWN0b3J5KCk7XG5cdH1cbn0pKHRoaXMsIGZ1bmN0aW9uICgpIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdHZhciBQaG90b1N3aXBlID0gZnVuY3Rpb24odGVtcGxhdGUsIFVpQ2xhc3MsIGl0ZW1zLCBvcHRpb25zKXtcblxuLyo+PmZyYW1ld29yay1icmlkZ2UqL1xuLyoqXG4gKlxuICogU2V0IG9mIGdlbmVyaWMgZnVuY3Rpb25zIHVzZWQgYnkgZ2FsbGVyeS5cbiAqIFxuICogWW91J3JlIGZyZWUgdG8gbW9kaWZ5IGFueXRoaW5nIGhlcmUgYXMgbG9uZyBhcyBmdW5jdGlvbmFsaXR5IGlzIGtlcHQuXG4gKiBcbiAqL1xudmFyIGZyYW1ld29yayA9IHtcblx0ZmVhdHVyZXM6IG51bGwsXG5cdGJpbmQ6IGZ1bmN0aW9uKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHVuYmluZCkge1xuXHRcdHZhciBtZXRob2ROYW1lID0gKHVuYmluZCA/ICdyZW1vdmUnIDogJ2FkZCcpICsgJ0V2ZW50TGlzdGVuZXInO1xuXHRcdHR5cGUgPSB0eXBlLnNwbGl0KCcgJyk7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHR5cGUubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmKHR5cGVbaV0pIHtcblx0XHRcdFx0dGFyZ2V0W21ldGhvZE5hbWVdKCB0eXBlW2ldLCBsaXN0ZW5lciwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0aXNBcnJheTogZnVuY3Rpb24ob2JqKSB7XG5cdFx0cmV0dXJuIChvYmogaW5zdGFuY2VvZiBBcnJheSk7XG5cdH0sXG5cdGNyZWF0ZUVsOiBmdW5jdGlvbihjbGFzc2VzLCB0YWcpIHtcblx0XHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyB8fCAnZGl2Jyk7XG5cdFx0aWYoY2xhc3Nlcykge1xuXHRcdFx0ZWwuY2xhc3NOYW1lID0gY2xhc3Nlcztcblx0XHR9XG5cdFx0cmV0dXJuIGVsO1xuXHR9LFxuXHRnZXRTY3JvbGxZOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgeU9mZnNldCA9IHdpbmRvdy5wYWdlWU9mZnNldDtcblx0XHRyZXR1cm4geU9mZnNldCAhPT0gdW5kZWZpbmVkID8geU9mZnNldCA6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XG5cdH0sXG5cdHVuYmluZDogZnVuY3Rpb24odGFyZ2V0LCB0eXBlLCBsaXN0ZW5lcikge1xuXHRcdGZyYW1ld29yay5iaW5kKHRhcmdldCx0eXBlLGxpc3RlbmVyLHRydWUpO1xuXHR9LFxuXHRyZW1vdmVDbGFzczogZnVuY3Rpb24oZWwsIGNsYXNzTmFtZSkge1xuXHRcdHZhciByZWcgPSBuZXcgUmVnRXhwKCcoXFxcXHN8XiknICsgY2xhc3NOYW1lICsgJyhcXFxcc3wkKScpO1xuXHRcdGVsLmNsYXNzTmFtZSA9IGVsLmNsYXNzTmFtZS5yZXBsYWNlKHJlZywgJyAnKS5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKS5yZXBsYWNlKC9cXHNcXHMqJC8sICcnKTsgXG5cdH0sXG5cdGFkZENsYXNzOiBmdW5jdGlvbihlbCwgY2xhc3NOYW1lKSB7XG5cdFx0aWYoICFmcmFtZXdvcmsuaGFzQ2xhc3MoZWwsY2xhc3NOYW1lKSApIHtcblx0XHRcdGVsLmNsYXNzTmFtZSArPSAoZWwuY2xhc3NOYW1lID8gJyAnIDogJycpICsgY2xhc3NOYW1lO1xuXHRcdH1cblx0fSxcblx0aGFzQ2xhc3M6IGZ1bmN0aW9uKGVsLCBjbGFzc05hbWUpIHtcblx0XHRyZXR1cm4gZWwuY2xhc3NOYW1lICYmIG5ldyBSZWdFeHAoJyhefFxcXFxzKScgKyBjbGFzc05hbWUgKyAnKFxcXFxzfCQpJykudGVzdChlbC5jbGFzc05hbWUpO1xuXHR9LFxuXHRnZXRDaGlsZEJ5Q2xhc3M6IGZ1bmN0aW9uKHBhcmVudEVsLCBjaGlsZENsYXNzTmFtZSkge1xuXHRcdHZhciBub2RlID0gcGFyZW50RWwuZmlyc3RDaGlsZDtcblx0XHR3aGlsZShub2RlKSB7XG5cdFx0XHRpZiggZnJhbWV3b3JrLmhhc0NsYXNzKG5vZGUsIGNoaWxkQ2xhc3NOYW1lKSApIHtcblx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHR9XG5cdFx0XHRub2RlID0gbm9kZS5uZXh0U2libGluZztcblx0XHR9XG5cdH0sXG5cdGFycmF5U2VhcmNoOiBmdW5jdGlvbihhcnJheSwgdmFsdWUsIGtleSkge1xuXHRcdHZhciBpID0gYXJyYXkubGVuZ3RoO1xuXHRcdHdoaWxlKGktLSkge1xuXHRcdFx0aWYoYXJyYXlbaV1ba2V5XSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHR9IFxuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5cdGV4dGVuZDogZnVuY3Rpb24obzEsIG8yLCBwcmV2ZW50T3ZlcndyaXRlKSB7XG5cdFx0Zm9yICh2YXIgcHJvcCBpbiBvMikge1xuXHRcdFx0aWYgKG8yLmhhc093blByb3BlcnR5KHByb3ApKSB7XG5cdFx0XHRcdGlmKHByZXZlbnRPdmVyd3JpdGUgJiYgbzEuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvMVtwcm9wXSA9IG8yW3Byb3BdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0ZWFzaW5nOiB7XG5cdFx0c2luZToge1xuXHRcdFx0b3V0OiBmdW5jdGlvbihrKSB7XG5cdFx0XHRcdHJldHVybiBNYXRoLnNpbihrICogKE1hdGguUEkgLyAyKSk7XG5cdFx0XHR9LFxuXHRcdFx0aW5PdXQ6IGZ1bmN0aW9uKGspIHtcblx0XHRcdFx0cmV0dXJuIC0gKE1hdGguY29zKE1hdGguUEkgKiBrKSAtIDEpIC8gMjtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGN1YmljOiB7XG5cdFx0XHRvdXQ6IGZ1bmN0aW9uKGspIHtcblx0XHRcdFx0cmV0dXJuIC0tayAqIGsgKiBrICsgMTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Lypcblx0XHRcdGVsYXN0aWM6IHtcblx0XHRcdFx0b3V0OiBmdW5jdGlvbiAoIGsgKSB7XG5cblx0XHRcdFx0XHR2YXIgcywgYSA9IDAuMSwgcCA9IDAuNDtcblx0XHRcdFx0XHRpZiAoIGsgPT09IDAgKSByZXR1cm4gMDtcblx0XHRcdFx0XHRpZiAoIGsgPT09IDEgKSByZXR1cm4gMTtcblx0XHRcdFx0XHRpZiAoICFhIHx8IGEgPCAxICkgeyBhID0gMTsgcyA9IHAgLyA0OyB9XG5cdFx0XHRcdFx0ZWxzZSBzID0gcCAqIE1hdGguYXNpbiggMSAvIGEgKSAvICggMiAqIE1hdGguUEkgKTtcblx0XHRcdFx0XHRyZXR1cm4gKCBhICogTWF0aC5wb3coIDIsIC0gMTAgKiBrKSAqIE1hdGguc2luKCAoIGsgLSBzICkgKiAoIDIgKiBNYXRoLlBJICkgLyBwICkgKyAxICk7XG5cblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRiYWNrOiB7XG5cdFx0XHRcdG91dDogZnVuY3Rpb24gKCBrICkge1xuXHRcdFx0XHRcdHZhciBzID0gMS43MDE1ODtcblx0XHRcdFx0XHRyZXR1cm4gLS1rICogayAqICggKCBzICsgMSApICogayArIHMgKSArIDE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHQqL1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBcblx0ICogQHJldHVybiB7b2JqZWN0fVxuXHQgKiBcblx0ICoge1xuXHQgKiAgcmFmIDogcmVxdWVzdCBhbmltYXRpb24gZnJhbWUgZnVuY3Rpb25cblx0ICogIGNhZiA6IGNhbmNlbCBhbmltYXRpb24gZnJhbWUgZnVuY3Rpb25cblx0ICogIHRyYW5zZnJvbSA6IHRyYW5zZm9ybSBwcm9wZXJ0eSBrZXkgKHdpdGggdmVuZG9yKSwgb3IgbnVsbCBpZiBub3Qgc3VwcG9ydGVkXG5cdCAqICBvbGRJRSA6IElFOCBvciBiZWxvd1xuXHQgKiB9XG5cdCAqIFxuXHQgKi9cblx0ZGV0ZWN0RmVhdHVyZXM6IGZ1bmN0aW9uKCkge1xuXHRcdGlmKGZyYW1ld29yay5mZWF0dXJlcykge1xuXHRcdFx0cmV0dXJuIGZyYW1ld29yay5mZWF0dXJlcztcblx0XHR9XG5cdFx0dmFyIGhlbHBlckVsID0gZnJhbWV3b3JrLmNyZWF0ZUVsKCksXG5cdFx0XHRoZWxwZXJTdHlsZSA9IGhlbHBlckVsLnN0eWxlLFxuXHRcdFx0dmVuZG9yID0gJycsXG5cdFx0XHRmZWF0dXJlcyA9IHt9O1xuXG5cdFx0Ly8gSUU4IGFuZCBiZWxvd1xuXHRcdGZlYXR1cmVzLm9sZElFID0gZG9jdW1lbnQuYWxsICYmICFkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyO1xuXG5cdFx0ZmVhdHVyZXMudG91Y2ggPSAnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3c7XG5cblx0XHRpZih3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG5cdFx0XHRmZWF0dXJlcy5yYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuXHRcdFx0ZmVhdHVyZXMuY2FmID0gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lO1xuXHRcdH1cblxuXHRcdGZlYXR1cmVzLnBvaW50ZXJFdmVudCA9ICEhKHdpbmRvdy5Qb2ludGVyRXZlbnQpIHx8IG5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkO1xuXG5cdFx0Ly8gZml4IGZhbHNlLXBvc2l0aXZlIGRldGVjdGlvbiBvZiBvbGQgQW5kcm9pZCBpbiBuZXcgSUVcblx0XHQvLyAoSUUxMSB1YSBzdHJpbmcgY29udGFpbnMgXCJBbmRyb2lkIDQuMFwiKVxuXHRcdFxuXHRcdGlmKCFmZWF0dXJlcy5wb2ludGVyRXZlbnQpIHsgXG5cblx0XHRcdHZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cblx0XHRcdC8vIERldGVjdCBpZiBkZXZpY2UgaXMgaVBob25lIG9yIGlQb2QgYW5kIGlmIGl0J3Mgb2xkZXIgdGhhbiBpT1MgOFxuXHRcdFx0Ly8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTQyMjM5MjBcblx0XHRcdC8vIFxuXHRcdFx0Ly8gVGhpcyBkZXRlY3Rpb24gaXMgbWFkZSBiZWNhdXNlIG9mIGJ1Z2d5IHRvcC9ib3R0b20gdG9vbGJhcnNcblx0XHRcdC8vIHRoYXQgZG9uJ3QgdHJpZ2dlciB3aW5kb3cucmVzaXplIGV2ZW50LlxuXHRcdFx0Ly8gRm9yIG1vcmUgaW5mbyByZWZlciB0byBfaXNGaXhlZFBvc2l0aW9uIHZhcmlhYmxlIGluIGNvcmUuanNcblxuXHRcdFx0aWYgKC9pUChob25lfG9kKS8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pKSB7XG5cdFx0XHRcdHZhciB2ID0gKG5hdmlnYXRvci5hcHBWZXJzaW9uKS5tYXRjaCgvT1MgKFxcZCspXyhcXGQrKV8/KFxcZCspPy8pO1xuXHRcdFx0XHRpZih2ICYmIHYubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHYgPSBwYXJzZUludCh2WzFdLCAxMCk7XG5cdFx0XHRcdFx0aWYodiA+PSAxICYmIHYgPCA4ICkge1xuXHRcdFx0XHRcdFx0ZmVhdHVyZXMuaXNPbGRJT1NQaG9uZSA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIERldGVjdCBvbGQgQW5kcm9pZCAoYmVmb3JlIEtpdEthdClcblx0XHRcdC8vIGR1ZSB0byBidWdzIHJlbGF0ZWQgdG8gcG9zaXRpb246Zml4ZWRcblx0XHRcdC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzE4NDU3My9waWNrLXVwLXRoZS1hbmRyb2lkLXZlcnNpb24taW4tdGhlLWJyb3dzZXItYnktamF2YXNjcmlwdFxuXHRcdFx0XG5cdFx0XHR2YXIgbWF0Y2ggPSB1YS5tYXRjaCgvQW5kcm9pZFxccyhbMC05XFwuXSopLyk7XG5cdFx0XHR2YXIgYW5kcm9pZHZlcnNpb24gPSAgbWF0Y2ggPyBtYXRjaFsxXSA6IDA7XG5cdFx0XHRhbmRyb2lkdmVyc2lvbiA9IHBhcnNlRmxvYXQoYW5kcm9pZHZlcnNpb24pO1xuXHRcdFx0aWYoYW5kcm9pZHZlcnNpb24gPj0gMSApIHtcblx0XHRcdFx0aWYoYW5kcm9pZHZlcnNpb24gPCA0LjQpIHtcblx0XHRcdFx0XHRmZWF0dXJlcy5pc09sZEFuZHJvaWQgPSB0cnVlOyAvLyBmb3IgZml4ZWQgcG9zaXRpb24gYnVnICYgcGVyZm9ybWFuY2Vcblx0XHRcdFx0fVxuXHRcdFx0XHRmZWF0dXJlcy5hbmRyb2lkVmVyc2lvbiA9IGFuZHJvaWR2ZXJzaW9uOyAvLyBmb3IgdG91Y2hlbmQgYnVnXG5cdFx0XHR9XHRcblx0XHRcdGZlYXR1cmVzLmlzTW9iaWxlT3BlcmEgPSAvb3BlcmEgbWluaXxvcGVyYSBtb2JpL2kudGVzdCh1YSk7XG5cblx0XHRcdC8vIHAucy4geWVzLCB5ZXMsIFVBIHNuaWZmaW5nIGlzIGJhZCwgcHJvcG9zZSB5b3VyIHNvbHV0aW9uIGZvciBhYm92ZSBidWdzLlxuXHRcdH1cblx0XHRcblx0XHR2YXIgc3R5bGVDaGVja3MgPSBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZScsICdhbmltYXRpb25OYW1lJ10sXG5cdFx0XHR2ZW5kb3JzID0gWycnLCAnd2Via2l0JywnTW96JywnbXMnLCdPJ10sXG5cdFx0XHRzdHlsZUNoZWNrSXRlbSxcblx0XHRcdHN0eWxlTmFtZTtcblxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0XHRcdHZlbmRvciA9IHZlbmRvcnNbaV07XG5cblx0XHRcdGZvcih2YXIgYSA9IDA7IGEgPCAzOyBhKyspIHtcblx0XHRcdFx0c3R5bGVDaGVja0l0ZW0gPSBzdHlsZUNoZWNrc1thXTtcblxuXHRcdFx0XHQvLyB1cHBlcmNhc2UgZmlyc3QgbGV0dGVyIG9mIHByb3BlcnR5IG5hbWUsIGlmIHZlbmRvciBpcyBwcmVzZW50XG5cdFx0XHRcdHN0eWxlTmFtZSA9IHZlbmRvciArICh2ZW5kb3IgPyBcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGVDaGVja0l0ZW0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHlsZUNoZWNrSXRlbS5zbGljZSgxKSA6IFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZUNoZWNrSXRlbSk7XG5cdFx0XHRcblx0XHRcdFx0aWYoIWZlYXR1cmVzW3N0eWxlQ2hlY2tJdGVtXSAmJiBzdHlsZU5hbWUgaW4gaGVscGVyU3R5bGUgKSB7XG5cdFx0XHRcdFx0ZmVhdHVyZXNbc3R5bGVDaGVja0l0ZW1dID0gc3R5bGVOYW1lO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmKHZlbmRvciAmJiAhZmVhdHVyZXMucmFmKSB7XG5cdFx0XHRcdHZlbmRvciA9IHZlbmRvci50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRmZWF0dXJlcy5yYWYgPSB3aW5kb3dbdmVuZG9yKydSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXTtcblx0XHRcdFx0aWYoZmVhdHVyZXMucmFmKSB7XG5cdFx0XHRcdFx0ZmVhdHVyZXMuY2FmID0gd2luZG93W3ZlbmRvcisnQ2FuY2VsQW5pbWF0aW9uRnJhbWUnXSB8fCBcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvd1t2ZW5kb3IrJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdFx0XG5cdFx0aWYoIWZlYXR1cmVzLnJhZikge1xuXHRcdFx0dmFyIGxhc3RUaW1lID0gMDtcblx0XHRcdGZlYXR1cmVzLnJhZiA9IGZ1bmN0aW9uKGZuKSB7XG5cdFx0XHRcdHZhciBjdXJyVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXHRcdFx0XHR2YXIgdGltZVRvQ2FsbCA9IE1hdGgubWF4KDAsIDE2IC0gKGN1cnJUaW1lIC0gbGFzdFRpbWUpKTtcblx0XHRcdFx0dmFyIGlkID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGZuKGN1cnJUaW1lICsgdGltZVRvQ2FsbCk7IH0sIHRpbWVUb0NhbGwpO1xuXHRcdFx0XHRsYXN0VGltZSA9IGN1cnJUaW1lICsgdGltZVRvQ2FsbDtcblx0XHRcdFx0cmV0dXJuIGlkO1xuXHRcdFx0fTtcblx0XHRcdGZlYXR1cmVzLmNhZiA9IGZ1bmN0aW9uKGlkKSB7IGNsZWFyVGltZW91dChpZCk7IH07XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IFNWRyBzdXBwb3J0XG5cdFx0ZmVhdHVyZXMuc3ZnID0gISFkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMgJiYgXG5cdFx0XHRcdFx0XHQhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnc3ZnJykuY3JlYXRlU1ZHUmVjdDtcblxuXHRcdGZyYW1ld29yay5mZWF0dXJlcyA9IGZlYXR1cmVzO1xuXG5cdFx0cmV0dXJuIGZlYXR1cmVzO1xuXHR9XG59O1xuXG5mcmFtZXdvcmsuZGV0ZWN0RmVhdHVyZXMoKTtcblxuLy8gT3ZlcnJpZGUgYWRkRXZlbnRMaXN0ZW5lciBmb3Igb2xkIHZlcnNpb25zIG9mIElFXG5pZihmcmFtZXdvcmsuZmVhdHVyZXMub2xkSUUpIHtcblxuXHRmcmFtZXdvcmsuYmluZCA9IGZ1bmN0aW9uKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHVuYmluZCkge1xuXHRcdFxuXHRcdHR5cGUgPSB0eXBlLnNwbGl0KCcgJyk7XG5cblx0XHR2YXIgbWV0aG9kTmFtZSA9ICh1bmJpbmQgPyAnZGV0YWNoJyA6ICdhdHRhY2gnKSArICdFdmVudCcsXG5cdFx0XHRldk5hbWUsXG5cdFx0XHRfaGFuZGxlRXYgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0bGlzdGVuZXIuaGFuZGxlRXZlbnQuY2FsbChsaXN0ZW5lcik7XG5cdFx0XHR9O1xuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHR5cGUubGVuZ3RoOyBpKyspIHtcblx0XHRcdGV2TmFtZSA9IHR5cGVbaV07XG5cdFx0XHRpZihldk5hbWUpIHtcblxuXHRcdFx0XHRpZih0eXBlb2YgbGlzdGVuZXIgPT09ICdvYmplY3QnICYmIGxpc3RlbmVyLmhhbmRsZUV2ZW50KSB7XG5cdFx0XHRcdFx0aWYoIXVuYmluZCkge1xuXHRcdFx0XHRcdFx0bGlzdGVuZXJbJ29sZElFJyArIGV2TmFtZV0gPSBfaGFuZGxlRXY7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmKCFsaXN0ZW5lclsnb2xkSUUnICsgZXZOYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGFyZ2V0W21ldGhvZE5hbWVdKCAnb24nICsgZXZOYW1lLCBsaXN0ZW5lclsnb2xkSUUnICsgZXZOYW1lXSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGFyZ2V0W21ldGhvZE5hbWVdKCAnb24nICsgZXZOYW1lLCBsaXN0ZW5lcik7XG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0XG59XG5cbi8qPj5mcmFtZXdvcmstYnJpZGdlKi9cblxuLyo+PmNvcmUqL1xuLy9mdW5jdGlvbih0ZW1wbGF0ZSwgVWlDbGFzcywgaXRlbXMsIG9wdGlvbnMpXG5cbnZhciBzZWxmID0gdGhpcztcblxuLyoqXG4gKiBTdGF0aWMgdmFycywgZG9uJ3QgY2hhbmdlIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy5cbiAqL1xudmFyIERPVUJMRV9UQVBfUkFESVVTID0gMjUsIFxuXHROVU1fSE9MREVSUyA9IDM7XG5cbi8qKlxuICogT3B0aW9uc1xuICovXG52YXIgX29wdGlvbnMgPSB7XG5cdGFsbG93UGFuVG9OZXh0OnRydWUsXG5cdHNwYWNpbmc6IDAuMTIsXG5cdGJnT3BhY2l0eTogMSxcblx0bW91c2VVc2VkOiBmYWxzZSxcblx0bG9vcDogdHJ1ZSxcblx0cGluY2hUb0Nsb3NlOiB0cnVlLFxuXHRjbG9zZU9uU2Nyb2xsOiB0cnVlLFxuXHRjbG9zZU9uVmVydGljYWxEcmFnOiB0cnVlLFxuXHR2ZXJ0aWNhbERyYWdSYW5nZTogMC43NSxcblx0aGlkZUFuaW1hdGlvbkR1cmF0aW9uOiAzMzMsXG5cdHNob3dBbmltYXRpb25EdXJhdGlvbjogMzMzLFxuXHRzaG93SGlkZU9wYWNpdHk6IGZhbHNlLFxuXHRmb2N1czogdHJ1ZSxcblx0ZXNjS2V5OiB0cnVlLFxuXHRhcnJvd0tleXM6IHRydWUsXG5cdG1haW5TY3JvbGxFbmRGcmljdGlvbjogMC4zNSxcblx0cGFuRW5kRnJpY3Rpb246IDAuMzUsXG5cdGlzQ2xpY2thYmxlRWxlbWVudDogZnVuY3Rpb24oZWwpIHtcbiAgICAgICAgcmV0dXJuIGVsLnRhZ05hbWUgPT09ICdBJztcbiAgICB9LFxuICAgIGdldERvdWJsZVRhcFpvb206IGZ1bmN0aW9uKGlzTW91c2VDbGljaywgaXRlbSkge1xuICAgIFx0aWYoaXNNb3VzZUNsaWNrKSB7XG4gICAgXHRcdHJldHVybiAxO1xuICAgIFx0fSBlbHNlIHtcbiAgICBcdFx0cmV0dXJuIGl0ZW0uaW5pdGlhbFpvb21MZXZlbCA8IDAuNyA/IDEgOiAxLjMzO1xuICAgIFx0fVxuICAgIH0sXG4gICAgbWF4U3ByZWFkWm9vbTogMS4zMyxcblx0bW9kYWw6IHRydWUsXG5cblx0Ly8gbm90IGZ1bGx5IGltcGxlbWVudGVkIHlldFxuXHRzY2FsZU1vZGU6ICdmaXQnIC8vIFRPRE9cbn07XG5mcmFtZXdvcmsuZXh0ZW5kKF9vcHRpb25zLCBvcHRpb25zKTtcblxuXG4vKipcbiAqIFByaXZhdGUgaGVscGVyIHZhcmlhYmxlcyAmIGZ1bmN0aW9uc1xuICovXG5cbnZhciBfZ2V0RW1wdHlQb2ludCA9IGZ1bmN0aW9uKCkgeyBcblx0XHRyZXR1cm4ge3g6MCx5OjB9OyBcblx0fTtcblxudmFyIF9pc09wZW4sXG5cdF9pc0Rlc3Ryb3lpbmcsXG5cdF9jbG9zZWRCeVNjcm9sbCxcblx0X2N1cnJlbnRJdGVtSW5kZXgsXG5cdF9jb250YWluZXJTdHlsZSxcblx0X2NvbnRhaW5lclNoaWZ0SW5kZXgsXG5cdF9jdXJyUGFuRGlzdCA9IF9nZXRFbXB0eVBvaW50KCksXG5cdF9zdGFydFBhbk9mZnNldCA9IF9nZXRFbXB0eVBvaW50KCksXG5cdF9wYW5PZmZzZXQgPSBfZ2V0RW1wdHlQb2ludCgpLFxuXHRfdXBNb3ZlRXZlbnRzLCAvLyBkcmFnIG1vdmUsIGRyYWcgZW5kICYgZHJhZyBjYW5jZWwgZXZlbnRzIGFycmF5XG5cdF9kb3duRXZlbnRzLCAvLyBkcmFnIHN0YXJ0IGV2ZW50cyBhcnJheVxuXHRfZ2xvYmFsRXZlbnRIYW5kbGVycyxcblx0X3ZpZXdwb3J0U2l6ZSA9IHt9LFxuXHRfY3Vyclpvb21MZXZlbCxcblx0X3N0YXJ0Wm9vbUxldmVsLFxuXHRfdHJhbnNsYXRlUHJlZml4LFxuXHRfdHJhbnNsYXRlU3VmaXgsXG5cdF91cGRhdGVTaXplSW50ZXJ2YWwsXG5cdF9pdGVtc05lZWRVcGRhdGUsXG5cdF9jdXJyUG9zaXRpb25JbmRleCA9IDAsXG5cdF9vZmZzZXQgPSB7fSxcblx0X3NsaWRlU2l6ZSA9IF9nZXRFbXB0eVBvaW50KCksIC8vIHNpemUgb2Ygc2xpZGUgYXJlYSwgaW5jbHVkaW5nIHNwYWNpbmdcblx0X2l0ZW1Ib2xkZXJzLFxuXHRfcHJldkl0ZW1JbmRleCxcblx0X2luZGV4RGlmZiA9IDAsIC8vIGRpZmZlcmVuY2Ugb2YgaW5kZXhlcyBzaW5jZSBsYXN0IGNvbnRlbnQgdXBkYXRlXG5cdF9kcmFnU3RhcnRFdmVudCxcblx0X2RyYWdNb3ZlRXZlbnQsXG5cdF9kcmFnRW5kRXZlbnQsXG5cdF9kcmFnQ2FuY2VsRXZlbnQsXG5cdF90cmFuc2Zvcm1LZXksXG5cdF9wb2ludGVyRXZlbnRFbmFibGVkLFxuXHRfaXNGaXhlZFBvc2l0aW9uID0gdHJ1ZSxcblx0X2xpa2VseVRvdWNoRGV2aWNlLFxuXHRfbW9kdWxlcyA9IFtdLFxuXHRfcmVxdWVzdEFGLFxuXHRfY2FuY2VsQUYsXG5cdF9pbml0YWxDbGFzc05hbWUsXG5cdF9pbml0YWxXaW5kb3dTY3JvbGxZLFxuXHRfb2xkSUUsXG5cdF9jdXJyZW50V2luZG93U2Nyb2xsWSxcblx0X2ZlYXR1cmVzLFxuXHRfd2luZG93VmlzaWJsZVNpemUgPSB7fSxcblx0X3JlbmRlck1heFJlc29sdXRpb24gPSBmYWxzZSxcblx0X29yaWVudGF0aW9uQ2hhbmdlVGltZW91dCxcblxuXG5cdC8vIFJlZ2lzdGVycyBQaG90b1NXaXBlIG1vZHVsZSAoSGlzdG9yeSwgQ29udHJvbGxlciAuLi4pXG5cdF9yZWdpc3Rlck1vZHVsZSA9IGZ1bmN0aW9uKG5hbWUsIG1vZHVsZSkge1xuXHRcdGZyYW1ld29yay5leHRlbmQoc2VsZiwgbW9kdWxlLnB1YmxpY01ldGhvZHMpO1xuXHRcdF9tb2R1bGVzLnB1c2gobmFtZSk7XG5cdH0sXG5cblx0X2dldExvb3BlZElkID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0XHR2YXIgbnVtU2xpZGVzID0gX2dldE51bUl0ZW1zKCk7XG5cdFx0aWYoaW5kZXggPiBudW1TbGlkZXMgLSAxKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXggLSBudW1TbGlkZXM7XG5cdFx0fSBlbHNlICBpZihpbmRleCA8IDApIHtcblx0XHRcdHJldHVybiBudW1TbGlkZXMgKyBpbmRleDtcblx0XHR9XG5cdFx0cmV0dXJuIGluZGV4O1xuXHR9LFxuXHRcblx0Ly8gTWljcm8gYmluZC90cmlnZ2VyXG5cdF9saXN0ZW5lcnMgPSB7fSxcblx0X2xpc3RlbiA9IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG5cdFx0aWYoIV9saXN0ZW5lcnNbbmFtZV0pIHtcblx0XHRcdF9saXN0ZW5lcnNbbmFtZV0gPSBbXTtcblx0XHR9XG5cdFx0cmV0dXJuIF9saXN0ZW5lcnNbbmFtZV0ucHVzaChmbik7XG5cdH0sXG5cdF9zaG91dCA9IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHR2YXIgbGlzdGVuZXJzID0gX2xpc3RlbmVyc1tuYW1lXTtcblxuXHRcdGlmKGxpc3RlbmVycykge1xuXHRcdFx0dmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXHRcdFx0YXJncy5zaGlmdCgpO1xuXG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGxpc3RlbmVyc1tpXS5hcHBseShzZWxmLCBhcmdzKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0X2dldEN1cnJlbnRUaW1lID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXHR9LFxuXHRfYXBwbHlCZ09wYWNpdHkgPSBmdW5jdGlvbihvcGFjaXR5KSB7XG5cdFx0X2JnT3BhY2l0eSA9IG9wYWNpdHk7XG5cdFx0c2VsZi5iZy5zdHlsZS5vcGFjaXR5ID0gb3BhY2l0eSAqIF9vcHRpb25zLmJnT3BhY2l0eTtcblx0fSxcblxuXHRfYXBwbHlab29tVHJhbnNmb3JtID0gZnVuY3Rpb24oc3R5bGVPYmoseCx5LHpvb20saXRlbSkge1xuXHRcdGlmKCFfcmVuZGVyTWF4UmVzb2x1dGlvbiB8fCAoaXRlbSAmJiBpdGVtICE9PSBzZWxmLmN1cnJJdGVtKSApIHtcblx0XHRcdHpvb20gPSB6b29tIC8gKGl0ZW0gPyBpdGVtLmZpdFJhdGlvIDogc2VsZi5jdXJySXRlbS5maXRSYXRpbyk7XHRcblx0XHR9XG5cdFx0XHRcblx0XHRzdHlsZU9ialtfdHJhbnNmb3JtS2V5XSA9IF90cmFuc2xhdGVQcmVmaXggKyB4ICsgJ3B4LCAnICsgeSArICdweCcgKyBfdHJhbnNsYXRlU3VmaXggKyAnIHNjYWxlKCcgKyB6b29tICsgJyknO1xuXHR9LFxuXHRfYXBwbHlDdXJyZW50Wm9vbVBhbiA9IGZ1bmN0aW9uKCBhbGxvd1JlbmRlclJlc29sdXRpb24gKSB7XG5cdFx0aWYoX2N1cnJab29tRWxlbWVudFN0eWxlKSB7XG5cblx0XHRcdGlmKGFsbG93UmVuZGVyUmVzb2x1dGlvbikge1xuXHRcdFx0XHRpZihfY3Vyclpvb21MZXZlbCA+IHNlbGYuY3Vyckl0ZW0uZml0UmF0aW8pIHtcblx0XHRcdFx0XHRpZighX3JlbmRlck1heFJlc29sdXRpb24pIHtcblx0XHRcdFx0XHRcdF9zZXRJbWFnZVNpemUoc2VsZi5jdXJySXRlbSwgZmFsc2UsIHRydWUpO1xuXHRcdFx0XHRcdFx0X3JlbmRlck1heFJlc29sdXRpb24gPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZihfcmVuZGVyTWF4UmVzb2x1dGlvbikge1xuXHRcdFx0XHRcdFx0X3NldEltYWdlU2l6ZShzZWxmLmN1cnJJdGVtKTtcblx0XHRcdFx0XHRcdF9yZW5kZXJNYXhSZXNvbHV0aW9uID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRcblxuXHRcdFx0X2FwcGx5Wm9vbVRyYW5zZm9ybShfY3Vyclpvb21FbGVtZW50U3R5bGUsIF9wYW5PZmZzZXQueCwgX3Bhbk9mZnNldC55LCBfY3Vyclpvb21MZXZlbCk7XG5cdFx0fVxuXHR9LFxuXHRfYXBwbHlab29tUGFuVG9JdGVtID0gZnVuY3Rpb24oaXRlbSkge1xuXHRcdGlmKGl0ZW0uY29udGFpbmVyKSB7XG5cblx0XHRcdF9hcHBseVpvb21UcmFuc2Zvcm0oaXRlbS5jb250YWluZXIuc3R5bGUsIFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW0uaW5pdGlhbFBvc2l0aW9uLngsIFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW0uaW5pdGlhbFBvc2l0aW9uLnksIFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW0uaW5pdGlhbFpvb21MZXZlbCxcblx0XHRcdFx0XHRcdFx0XHRpdGVtKTtcblx0XHR9XG5cdH0sXG5cdF9zZXRUcmFuc2xhdGVYID0gZnVuY3Rpb24oeCwgZWxTdHlsZSkge1xuXHRcdGVsU3R5bGVbX3RyYW5zZm9ybUtleV0gPSBfdHJhbnNsYXRlUHJlZml4ICsgeCArICdweCwgMHB4JyArIF90cmFuc2xhdGVTdWZpeDtcblx0fSxcblx0X21vdmVNYWluU2Nyb2xsID0gZnVuY3Rpb24oeCwgZHJhZ2dpbmcpIHtcblxuXHRcdGlmKCFfb3B0aW9ucy5sb29wICYmIGRyYWdnaW5nKSB7XG5cdFx0XHR2YXIgbmV3U2xpZGVJbmRleE9mZnNldCA9IF9jdXJyZW50SXRlbUluZGV4ICsgKF9zbGlkZVNpemUueCAqIF9jdXJyUG9zaXRpb25JbmRleCAtIHgpIC8gX3NsaWRlU2l6ZS54LFxuXHRcdFx0XHRkZWx0YSA9IE1hdGgucm91bmQoeCAtIF9tYWluU2Nyb2xsUG9zLngpO1xuXG5cdFx0XHRpZiggKG5ld1NsaWRlSW5kZXhPZmZzZXQgPCAwICYmIGRlbHRhID4gMCkgfHwgXG5cdFx0XHRcdChuZXdTbGlkZUluZGV4T2Zmc2V0ID49IF9nZXROdW1JdGVtcygpIC0gMSAmJiBkZWx0YSA8IDApICkge1xuXHRcdFx0XHR4ID0gX21haW5TY3JvbGxQb3MueCArIGRlbHRhICogX29wdGlvbnMubWFpblNjcm9sbEVuZEZyaWN0aW9uO1xuXHRcdFx0fSBcblx0XHR9XG5cdFx0XG5cdFx0X21haW5TY3JvbGxQb3MueCA9IHg7XG5cdFx0X3NldFRyYW5zbGF0ZVgoeCwgX2NvbnRhaW5lclN0eWxlKTtcblx0fSxcblx0X2NhbGN1bGF0ZVBhbk9mZnNldCA9IGZ1bmN0aW9uKGF4aXMsIHpvb21MZXZlbCkge1xuXHRcdHZhciBtID0gX21pZFpvb21Qb2ludFtheGlzXSAtIF9vZmZzZXRbYXhpc107XG5cdFx0cmV0dXJuIF9zdGFydFBhbk9mZnNldFtheGlzXSArIF9jdXJyUGFuRGlzdFtheGlzXSArIG0gLSBtICogKCB6b29tTGV2ZWwgLyBfc3RhcnRab29tTGV2ZWwgKTtcblx0fSxcblx0XG5cdF9lcXVhbGl6ZVBvaW50cyA9IGZ1bmN0aW9uKHAxLCBwMikge1xuXHRcdHAxLnggPSBwMi54O1xuXHRcdHAxLnkgPSBwMi55O1xuXHRcdGlmKHAyLmlkKSB7XG5cdFx0XHRwMS5pZCA9IHAyLmlkO1xuXHRcdH1cblx0fSxcblx0X3JvdW5kUG9pbnQgPSBmdW5jdGlvbihwKSB7XG5cdFx0cC54ID0gTWF0aC5yb3VuZChwLngpO1xuXHRcdHAueSA9IE1hdGgucm91bmQocC55KTtcblx0fSxcblxuXHRfbW91c2VNb3ZlVGltZW91dCA9IG51bGwsXG5cdF9vbkZpcnN0TW91c2VNb3ZlID0gZnVuY3Rpb24oKSB7XG5cdFx0Ly8gV2FpdCB1bnRpbCBtb3VzZSBtb3ZlIGV2ZW50IGlzIGZpcmVkIGF0IGxlYXN0IHR3aWNlIGR1cmluZyAxMDBtc1xuXHRcdC8vIFdlIGRvIHRoaXMsIGJlY2F1c2Ugc29tZSBtb2JpbGUgYnJvd3NlcnMgdHJpZ2dlciBpdCBvbiB0b3VjaHN0YXJ0XG5cdFx0aWYoX21vdXNlTW92ZVRpbWVvdXQgKSB7IFxuXHRcdFx0ZnJhbWV3b3JrLnVuYmluZChkb2N1bWVudCwgJ21vdXNlbW92ZScsIF9vbkZpcnN0TW91c2VNb3ZlKTtcblx0XHRcdGZyYW1ld29yay5hZGRDbGFzcyh0ZW1wbGF0ZSwgJ3Bzd3AtLWhhc19tb3VzZScpO1xuXHRcdFx0X29wdGlvbnMubW91c2VVc2VkID0gdHJ1ZTtcblx0XHRcdF9zaG91dCgnbW91c2VVc2VkJyk7XG5cdFx0fVxuXHRcdF9tb3VzZU1vdmVUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdF9tb3VzZU1vdmVUaW1lb3V0ID0gbnVsbDtcblx0XHR9LCAxMDApO1xuXHR9LFxuXG5cdF9iaW5kRXZlbnRzID0gZnVuY3Rpb24oKSB7XG5cdFx0ZnJhbWV3b3JrLmJpbmQoZG9jdW1lbnQsICdrZXlkb3duJywgc2VsZik7XG5cblx0XHRpZihfZmVhdHVyZXMudHJhbnNmb3JtKSB7XG5cdFx0XHQvLyBkb24ndCBiaW5kIGNsaWNrIGV2ZW50IGluIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0cmFuc2Zvcm0gKG1vc3RseSBJRTgpXG5cdFx0XHRmcmFtZXdvcmsuYmluZChzZWxmLnNjcm9sbFdyYXAsICdjbGljaycsIHNlbGYpO1xuXHRcdH1cblx0XHRcblxuXHRcdGlmKCFfb3B0aW9ucy5tb3VzZVVzZWQpIHtcblx0XHRcdGZyYW1ld29yay5iaW5kKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgX29uRmlyc3RNb3VzZU1vdmUpO1xuXHRcdH1cblxuXHRcdGZyYW1ld29yay5iaW5kKHdpbmRvdywgJ3Jlc2l6ZSBzY3JvbGwgb3JpZW50YXRpb25jaGFuZ2UnLCBzZWxmKTtcblxuXHRcdF9zaG91dCgnYmluZEV2ZW50cycpO1xuXHR9LFxuXG5cdF91bmJpbmRFdmVudHMgPSBmdW5jdGlvbigpIHtcblx0XHRmcmFtZXdvcmsudW5iaW5kKHdpbmRvdywgJ3Jlc2l6ZSBzY3JvbGwgb3JpZW50YXRpb25jaGFuZ2UnLCBzZWxmKTtcblx0XHRmcmFtZXdvcmsudW5iaW5kKHdpbmRvdywgJ3Njcm9sbCcsIF9nbG9iYWxFdmVudEhhbmRsZXJzLnNjcm9sbCk7XG5cdFx0ZnJhbWV3b3JrLnVuYmluZChkb2N1bWVudCwgJ2tleWRvd24nLCBzZWxmKTtcblx0XHRmcmFtZXdvcmsudW5iaW5kKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgX29uRmlyc3RNb3VzZU1vdmUpO1xuXG5cdFx0aWYoX2ZlYXR1cmVzLnRyYW5zZm9ybSkge1xuXHRcdFx0ZnJhbWV3b3JrLnVuYmluZChzZWxmLnNjcm9sbFdyYXAsICdjbGljaycsIHNlbGYpO1xuXHRcdH1cblxuXHRcdGlmKF9pc0RyYWdnaW5nKSB7XG5cdFx0XHRmcmFtZXdvcmsudW5iaW5kKHdpbmRvdywgX3VwTW92ZUV2ZW50cywgc2VsZik7XG5cdFx0fVxuXG5cdFx0Y2xlYXJUaW1lb3V0KF9vcmllbnRhdGlvbkNoYW5nZVRpbWVvdXQpO1xuXG5cdFx0X3Nob3V0KCd1bmJpbmRFdmVudHMnKTtcblx0fSxcblx0XG5cdF9jYWxjdWxhdGVQYW5Cb3VuZHMgPSBmdW5jdGlvbih6b29tTGV2ZWwsIHVwZGF0ZSkge1xuXHRcdHZhciBib3VuZHMgPSBfY2FsY3VsYXRlSXRlbVNpemUoIHNlbGYuY3Vyckl0ZW0sIF92aWV3cG9ydFNpemUsIHpvb21MZXZlbCApO1xuXHRcdGlmKHVwZGF0ZSkge1xuXHRcdFx0X2N1cnJQYW5Cb3VuZHMgPSBib3VuZHM7XG5cdFx0fVxuXHRcdHJldHVybiBib3VuZHM7XG5cdH0sXG5cdFxuXHRfZ2V0TWluWm9vbUxldmVsID0gZnVuY3Rpb24oaXRlbSkge1xuXHRcdGlmKCFpdGVtKSB7XG5cdFx0XHRpdGVtID0gc2VsZi5jdXJySXRlbTtcblx0XHR9XG5cdFx0cmV0dXJuIGl0ZW0uaW5pdGlhbFpvb21MZXZlbDtcblx0fSxcblx0X2dldE1heFpvb21MZXZlbCA9IGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRpZighaXRlbSkge1xuXHRcdFx0aXRlbSA9IHNlbGYuY3Vyckl0ZW07XG5cdFx0fVxuXHRcdHJldHVybiBpdGVtLncgPiAwID8gX29wdGlvbnMubWF4U3ByZWFkWm9vbSA6IDE7XG5cdH0sXG5cblx0Ly8gUmV0dXJuIHRydWUgaWYgb2Zmc2V0IGlzIG91dCBvZiB0aGUgYm91bmRzXG5cdF9tb2RpZnlEZXN0UGFuT2Zmc2V0ID0gZnVuY3Rpb24oYXhpcywgZGVzdFBhbkJvdW5kcywgZGVzdFBhbk9mZnNldCwgZGVzdFpvb21MZXZlbCkge1xuXHRcdGlmKGRlc3Rab29tTGV2ZWwgPT09IHNlbGYuY3Vyckl0ZW0uaW5pdGlhbFpvb21MZXZlbCkge1xuXHRcdFx0ZGVzdFBhbk9mZnNldFtheGlzXSA9IHNlbGYuY3Vyckl0ZW0uaW5pdGlhbFBvc2l0aW9uW2F4aXNdO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlc3RQYW5PZmZzZXRbYXhpc10gPSBfY2FsY3VsYXRlUGFuT2Zmc2V0KGF4aXMsIGRlc3Rab29tTGV2ZWwpOyBcblxuXHRcdFx0aWYoZGVzdFBhbk9mZnNldFtheGlzXSA+IGRlc3RQYW5Cb3VuZHMubWluW2F4aXNdKSB7XG5cdFx0XHRcdGRlc3RQYW5PZmZzZXRbYXhpc10gPSBkZXN0UGFuQm91bmRzLm1pbltheGlzXTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2UgaWYoZGVzdFBhbk9mZnNldFtheGlzXSA8IGRlc3RQYW5Cb3VuZHMubWF4W2F4aXNdICkge1xuXHRcdFx0XHRkZXN0UGFuT2Zmc2V0W2F4aXNdID0gZGVzdFBhbkJvdW5kcy5tYXhbYXhpc107XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0X3NldHVwVHJhbnNmb3JtcyA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0aWYoX3RyYW5zZm9ybUtleSkge1xuXHRcdFx0Ly8gc2V0dXAgM2QgdHJhbnNmb3Jtc1xuXHRcdFx0dmFyIGFsbG93M2RUcmFuc2Zvcm0gPSBfZmVhdHVyZXMucGVyc3BlY3RpdmUgJiYgIV9saWtlbHlUb3VjaERldmljZTtcblx0XHRcdF90cmFuc2xhdGVQcmVmaXggPSAndHJhbnNsYXRlJyArIChhbGxvdzNkVHJhbnNmb3JtID8gJzNkKCcgOiAnKCcpO1xuXHRcdFx0X3RyYW5zbGF0ZVN1Zml4ID0gX2ZlYXR1cmVzLnBlcnNwZWN0aXZlID8gJywgMHB4KScgOiAnKSc7XHRcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBPdmVycmlkZSB6b29tL3Bhbi9tb3ZlIGZ1bmN0aW9ucyBpbiBjYXNlIG9sZCBicm93c2VyIGlzIHVzZWQgKG1vc3QgbGlrZWx5IElFKVxuXHRcdC8vIChzbyB0aGV5IHVzZSBsZWZ0L3RvcC93aWR0aC9oZWlnaHQsIGluc3RlYWQgb2YgQ1NTIHRyYW5zZm9ybSlcblx0XG5cdFx0X3RyYW5zZm9ybUtleSA9ICdsZWZ0Jztcblx0XHRmcmFtZXdvcmsuYWRkQ2xhc3ModGVtcGxhdGUsICdwc3dwLS1pZScpO1xuXG5cdFx0X3NldFRyYW5zbGF0ZVggPSBmdW5jdGlvbih4LCBlbFN0eWxlKSB7XG5cdFx0XHRlbFN0eWxlLmxlZnQgPSB4ICsgJ3B4Jztcblx0XHR9O1xuXHRcdF9hcHBseVpvb21QYW5Ub0l0ZW0gPSBmdW5jdGlvbihpdGVtKSB7XG5cblx0XHRcdHZhciB6b29tUmF0aW8gPSBpdGVtLmZpdFJhdGlvID4gMSA/IDEgOiBpdGVtLmZpdFJhdGlvLFxuXHRcdFx0XHRzID0gaXRlbS5jb250YWluZXIuc3R5bGUsXG5cdFx0XHRcdHcgPSB6b29tUmF0aW8gKiBpdGVtLncsXG5cdFx0XHRcdGggPSB6b29tUmF0aW8gKiBpdGVtLmg7XG5cblx0XHRcdHMud2lkdGggPSB3ICsgJ3B4Jztcblx0XHRcdHMuaGVpZ2h0ID0gaCArICdweCc7XG5cdFx0XHRzLmxlZnQgPSBpdGVtLmluaXRpYWxQb3NpdGlvbi54ICsgJ3B4Jztcblx0XHRcdHMudG9wID0gaXRlbS5pbml0aWFsUG9zaXRpb24ueSArICdweCc7XG5cblx0XHR9O1xuXHRcdF9hcHBseUN1cnJlbnRab29tUGFuID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZihfY3Vyclpvb21FbGVtZW50U3R5bGUpIHtcblxuXHRcdFx0XHR2YXIgcyA9IF9jdXJyWm9vbUVsZW1lbnRTdHlsZSxcblx0XHRcdFx0XHRpdGVtID0gc2VsZi5jdXJySXRlbSxcblx0XHRcdFx0XHR6b29tUmF0aW8gPSBpdGVtLmZpdFJhdGlvID4gMSA/IDEgOiBpdGVtLmZpdFJhdGlvLFxuXHRcdFx0XHRcdHcgPSB6b29tUmF0aW8gKiBpdGVtLncsXG5cdFx0XHRcdFx0aCA9IHpvb21SYXRpbyAqIGl0ZW0uaDtcblxuXHRcdFx0XHRzLndpZHRoID0gdyArICdweCc7XG5cdFx0XHRcdHMuaGVpZ2h0ID0gaCArICdweCc7XG5cblxuXHRcdFx0XHRzLmxlZnQgPSBfcGFuT2Zmc2V0LnggKyAncHgnO1xuXHRcdFx0XHRzLnRvcCA9IF9wYW5PZmZzZXQueSArICdweCc7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHR9O1xuXHR9LFxuXG5cdF9vbktleURvd24gPSBmdW5jdGlvbihlKSB7XG5cdFx0dmFyIGtleWRvd25BY3Rpb24gPSAnJztcblx0XHRpZihfb3B0aW9ucy5lc2NLZXkgJiYgZS5rZXlDb2RlID09PSAyNykgeyBcblx0XHRcdGtleWRvd25BY3Rpb24gPSAnY2xvc2UnO1xuXHRcdH0gZWxzZSBpZihfb3B0aW9ucy5hcnJvd0tleXMpIHtcblx0XHRcdGlmKGUua2V5Q29kZSA9PT0gMzcpIHtcblx0XHRcdFx0a2V5ZG93bkFjdGlvbiA9ICdwcmV2Jztcblx0XHRcdH0gZWxzZSBpZihlLmtleUNvZGUgPT09IDM5KSB7IFxuXHRcdFx0XHRrZXlkb3duQWN0aW9uID0gJ25leHQnO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKGtleWRvd25BY3Rpb24pIHtcblx0XHRcdC8vIGRvbid0IGRvIGFueXRoaW5nIGlmIHNwZWNpYWwga2V5IHByZXNzZWQgdG8gcHJldmVudCBmcm9tIG92ZXJyaWRpbmcgZGVmYXVsdCBicm93c2VyIGFjdGlvbnNcblx0XHRcdC8vIGUuZy4gaW4gQ2hyb21lIG9uIE1hYyBjbWQrYXJyb3ctbGVmdCByZXR1cm5zIHRvIHByZXZpb3VzIHBhZ2Vcblx0XHRcdGlmKCAhZS5jdHJsS2V5ICYmICFlLmFsdEtleSAmJiAhZS5zaGlmdEtleSAmJiAhZS5tZXRhS2V5ICkge1xuXHRcdFx0XHRpZihlLnByZXZlbnREZWZhdWx0KSB7XG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGUucmV0dXJuVmFsdWUgPSBmYWxzZTtcblx0XHRcdFx0fSBcblx0XHRcdFx0c2VsZltrZXlkb3duQWN0aW9uXSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRfb25HbG9iYWxDbGljayA9IGZ1bmN0aW9uKGUpIHtcblx0XHRpZighZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGRvbid0IGFsbG93IGNsaWNrIGV2ZW50IHRvIHBhc3MgdGhyb3VnaCB3aGVuIHRyaWdnZXJpbmcgYWZ0ZXIgZHJhZyBvciBzb21lIG90aGVyIGdlc3R1cmVcblx0XHRpZihfbW92ZWQgfHwgX3pvb21TdGFydGVkIHx8IF9tYWluU2Nyb2xsQW5pbWF0aW5nIHx8IF92ZXJ0aWNhbERyYWdJbml0aWF0ZWQpIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXHR9LFxuXG5cdF91cGRhdGVQYWdlU2Nyb2xsT2Zmc2V0ID0gZnVuY3Rpb24oKSB7XG5cdFx0c2VsZi5zZXRTY3JvbGxPZmZzZXQoMCwgZnJhbWV3b3JrLmdldFNjcm9sbFkoKSk7XHRcdFxuXHR9O1xuXHRcblxuXG5cdFxuXG5cblxuLy8gTWljcm8gYW5pbWF0aW9uIGVuZ2luZVxudmFyIF9hbmltYXRpb25zID0ge30sXG5cdF9udW1BbmltYXRpb25zID0gMCxcblx0X3N0b3BBbmltYXRpb24gPSBmdW5jdGlvbihuYW1lKSB7XG5cdFx0aWYoX2FuaW1hdGlvbnNbbmFtZV0pIHtcblx0XHRcdGlmKF9hbmltYXRpb25zW25hbWVdLnJhZikge1xuXHRcdFx0XHRfY2FuY2VsQUYoIF9hbmltYXRpb25zW25hbWVdLnJhZiApO1xuXHRcdFx0fVxuXHRcdFx0X251bUFuaW1hdGlvbnMtLTtcblx0XHRcdGRlbGV0ZSBfYW5pbWF0aW9uc1tuYW1lXTtcblx0XHR9XG5cdH0sXG5cdF9yZWdpc3RlclN0YXJ0QW5pbWF0aW9uID0gZnVuY3Rpb24obmFtZSkge1xuXHRcdGlmKF9hbmltYXRpb25zW25hbWVdKSB7XG5cdFx0XHRfc3RvcEFuaW1hdGlvbihuYW1lKTtcblx0XHR9XG5cdFx0aWYoIV9hbmltYXRpb25zW25hbWVdKSB7XG5cdFx0XHRfbnVtQW5pbWF0aW9ucysrO1xuXHRcdFx0X2FuaW1hdGlvbnNbbmFtZV0gPSB7fTtcblx0XHR9XG5cdH0sXG5cdF9zdG9wQWxsQW5pbWF0aW9ucyA9IGZ1bmN0aW9uKCkge1xuXHRcdGZvciAodmFyIHByb3AgaW4gX2FuaW1hdGlvbnMpIHtcblxuXHRcdFx0aWYoIF9hbmltYXRpb25zLmhhc093blByb3BlcnR5KCBwcm9wICkgKSB7XG5cdFx0XHRcdF9zdG9wQW5pbWF0aW9uKHByb3ApO1xuXHRcdFx0fSBcblx0XHRcdFxuXHRcdH1cblx0fSxcblx0X2FuaW1hdGVQcm9wID0gZnVuY3Rpb24obmFtZSwgYiwgZW5kUHJvcCwgZCwgZWFzaW5nRm4sIG9uVXBkYXRlLCBvbkNvbXBsZXRlKSB7XG5cdFx0dmFyIHN0YXJ0QW5pbVRpbWUgPSBfZ2V0Q3VycmVudFRpbWUoKSwgdDtcblx0XHRfcmVnaXN0ZXJTdGFydEFuaW1hdGlvbihuYW1lKTtcblxuXHRcdHZhciBhbmltbG9vcCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRpZiAoIF9hbmltYXRpb25zW25hbWVdICkge1xuXHRcdFx0XHRcblx0XHRcdFx0dCA9IF9nZXRDdXJyZW50VGltZSgpIC0gc3RhcnRBbmltVGltZTsgLy8gdGltZSBkaWZmXG5cdFx0XHRcdC8vYiAtIGJlZ2lubmluZyAoc3RhcnQgcHJvcClcblx0XHRcdFx0Ly9kIC0gYW5pbSBkdXJhdGlvblxuXG5cdFx0XHRcdGlmICggdCA+PSBkICkge1xuXHRcdFx0XHRcdF9zdG9wQW5pbWF0aW9uKG5hbWUpO1xuXHRcdFx0XHRcdG9uVXBkYXRlKGVuZFByb3ApO1xuXHRcdFx0XHRcdGlmKG9uQ29tcGxldGUpIHtcblx0XHRcdFx0XHRcdG9uQ29tcGxldGUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9uVXBkYXRlKCAoZW5kUHJvcCAtIGIpICogZWFzaW5nRm4odC9kKSArIGIgKTtcblxuXHRcdFx0XHRfYW5pbWF0aW9uc1tuYW1lXS5yYWYgPSBfcmVxdWVzdEFGKGFuaW1sb29wKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGFuaW1sb29wKCk7XG5cdH07XG5cdFxuXG5cbnZhciBwdWJsaWNNZXRob2RzID0ge1xuXG5cdC8vIG1ha2UgYSBmZXcgbG9jYWwgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgcHVibGljXG5cdHNob3V0OiBfc2hvdXQsXG5cdGxpc3RlbjogX2xpc3Rlbixcblx0dmlld3BvcnRTaXplOiBfdmlld3BvcnRTaXplLFxuXHRvcHRpb25zOiBfb3B0aW9ucyxcblxuXHRpc01haW5TY3JvbGxBbmltYXRpbmc6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBfbWFpblNjcm9sbEFuaW1hdGluZztcblx0fSxcblx0Z2V0Wm9vbUxldmVsOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gX2N1cnJab29tTGV2ZWw7XG5cdH0sXG5cdGdldEN1cnJlbnRJbmRleDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIF9jdXJyZW50SXRlbUluZGV4O1xuXHR9LFxuXHRpc0RyYWdnaW5nOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gX2lzRHJhZ2dpbmc7XG5cdH0sXHRcblx0aXNab29taW5nOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gX2lzWm9vbWluZztcblx0fSxcblx0c2V0U2Nyb2xsT2Zmc2V0OiBmdW5jdGlvbih4LHkpIHtcblx0XHRfb2Zmc2V0LnggPSB4O1xuXHRcdF9jdXJyZW50V2luZG93U2Nyb2xsWSA9IF9vZmZzZXQueSA9IHk7XG5cdFx0X3Nob3V0KCd1cGRhdGVTY3JvbGxPZmZzZXQnLCBfb2Zmc2V0KTtcblx0fSxcblx0YXBwbHlab29tUGFuOiBmdW5jdGlvbih6b29tTGV2ZWwscGFuWCxwYW5ZLGFsbG93UmVuZGVyUmVzb2x1dGlvbikge1xuXHRcdF9wYW5PZmZzZXQueCA9IHBhblg7XG5cdFx0X3Bhbk9mZnNldC55ID0gcGFuWTtcblx0XHRfY3Vyclpvb21MZXZlbCA9IHpvb21MZXZlbDtcblx0XHRfYXBwbHlDdXJyZW50Wm9vbVBhbiggYWxsb3dSZW5kZXJSZXNvbHV0aW9uICk7XG5cdH0sXG5cblx0aW5pdDogZnVuY3Rpb24oKSB7XG5cblx0XHRpZihfaXNPcGVuIHx8IF9pc0Rlc3Ryb3lpbmcpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgaTtcblxuXHRcdHNlbGYuZnJhbWV3b3JrID0gZnJhbWV3b3JrOyAvLyBiYXNpYyBmdW5jdGlvbmFsaXR5XG5cdFx0c2VsZi50ZW1wbGF0ZSA9IHRlbXBsYXRlOyAvLyByb290IERPTSBlbGVtZW50IG9mIFBob3RvU3dpcGVcblx0XHRzZWxmLmJnID0gZnJhbWV3b3JrLmdldENoaWxkQnlDbGFzcyh0ZW1wbGF0ZSwgJ3Bzd3BfX2JnJyk7XG5cblx0XHRfaW5pdGFsQ2xhc3NOYW1lID0gdGVtcGxhdGUuY2xhc3NOYW1lO1xuXHRcdF9pc09wZW4gPSB0cnVlO1xuXHRcdFx0XHRcblx0XHRfZmVhdHVyZXMgPSBmcmFtZXdvcmsuZGV0ZWN0RmVhdHVyZXMoKTtcblx0XHRfcmVxdWVzdEFGID0gX2ZlYXR1cmVzLnJhZjtcblx0XHRfY2FuY2VsQUYgPSBfZmVhdHVyZXMuY2FmO1xuXHRcdF90cmFuc2Zvcm1LZXkgPSBfZmVhdHVyZXMudHJhbnNmb3JtO1xuXHRcdF9vbGRJRSA9IF9mZWF0dXJlcy5vbGRJRTtcblx0XHRcblx0XHRzZWxmLnNjcm9sbFdyYXAgPSBmcmFtZXdvcmsuZ2V0Q2hpbGRCeUNsYXNzKHRlbXBsYXRlLCAncHN3cF9fc2Nyb2xsLXdyYXAnKTtcblx0XHRzZWxmLmNvbnRhaW5lciA9IGZyYW1ld29yay5nZXRDaGlsZEJ5Q2xhc3Moc2VsZi5zY3JvbGxXcmFwLCAncHN3cF9fY29udGFpbmVyJyk7XG5cblx0XHRfY29udGFpbmVyU3R5bGUgPSBzZWxmLmNvbnRhaW5lci5zdHlsZTsgLy8gZm9yIGZhc3QgYWNjZXNzXG5cblx0XHQvLyBPYmplY3RzIHRoYXQgaG9sZCBzbGlkZXMgKHRoZXJlIGFyZSBvbmx5IDMgaW4gRE9NKVxuXHRcdHNlbGYuaXRlbUhvbGRlcnMgPSBfaXRlbUhvbGRlcnMgPSBbXG5cdFx0XHR7ZWw6c2VsZi5jb250YWluZXIuY2hpbGRyZW5bMF0gLCB3cmFwOjAsIGluZGV4OiAtMX0sXG5cdFx0XHR7ZWw6c2VsZi5jb250YWluZXIuY2hpbGRyZW5bMV0gLCB3cmFwOjAsIGluZGV4OiAtMX0sXG5cdFx0XHR7ZWw6c2VsZi5jb250YWluZXIuY2hpbGRyZW5bMl0gLCB3cmFwOjAsIGluZGV4OiAtMX1cblx0XHRdO1xuXG5cdFx0Ly8gaGlkZSBuZWFyYnkgaXRlbSBob2xkZXJzIHVudGlsIGluaXRpYWwgem9vbSBhbmltYXRpb24gZmluaXNoZXMgKHRvIGF2b2lkIGV4dHJhIFBhaW50cylcblx0XHRfaXRlbUhvbGRlcnNbMF0uZWwuc3R5bGUuZGlzcGxheSA9IF9pdGVtSG9sZGVyc1syXS5lbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG5cdFx0X3NldHVwVHJhbnNmb3JtcygpO1xuXG5cdFx0Ly8gU2V0dXAgZ2xvYmFsIGV2ZW50c1xuXHRcdF9nbG9iYWxFdmVudEhhbmRsZXJzID0ge1xuXHRcdFx0cmVzaXplOiBzZWxmLnVwZGF0ZVNpemUsXG5cblx0XHRcdC8vIEZpeGVzOiBpT1MgMTAuMyByZXNpemUgZXZlbnRcblx0XHRcdC8vIGRvZXMgbm90IHVwZGF0ZSBzY3JvbGxXcmFwLmNsaWVudFdpZHRoIGluc3RhbnRseSBhZnRlciByZXNpemVcblx0XHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW1zZW1lbm92L1Bob3RvU3dpcGUvaXNzdWVzLzEzMTVcblx0XHRcdG9yaWVudGF0aW9uY2hhbmdlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KF9vcmllbnRhdGlvbkNoYW5nZVRpbWVvdXQpO1xuXHRcdFx0XHRfb3JpZW50YXRpb25DaGFuZ2VUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZihfdmlld3BvcnRTaXplLnggIT09IHNlbGYuc2Nyb2xsV3JhcC5jbGllbnRXaWR0aCkge1xuXHRcdFx0XHRcdFx0c2VsZi51cGRhdGVTaXplKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCA1MDApO1xuXHRcdFx0fSxcblx0XHRcdHNjcm9sbDogX3VwZGF0ZVBhZ2VTY3JvbGxPZmZzZXQsXG5cdFx0XHRrZXlkb3duOiBfb25LZXlEb3duLFxuXHRcdFx0Y2xpY2s6IF9vbkdsb2JhbENsaWNrXG5cdFx0fTtcblxuXHRcdC8vIGRpc2FibGUgc2hvdy9oaWRlIGVmZmVjdHMgb24gb2xkIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBDU1MgYW5pbWF0aW9ucyBvciB0cmFuc2Zvcm1zLCBcblx0XHQvLyBvbGQgSU9TLCBBbmRyb2lkIGFuZCBPcGVyYSBtb2JpbGUuIEJsYWNrYmVycnkgc2VlbXMgdG8gd29yayBmaW5lLCBldmVuIG9sZGVyIG1vZGVscy5cblx0XHR2YXIgb2xkUGhvbmUgPSBfZmVhdHVyZXMuaXNPbGRJT1NQaG9uZSB8fCBfZmVhdHVyZXMuaXNPbGRBbmRyb2lkIHx8IF9mZWF0dXJlcy5pc01vYmlsZU9wZXJhO1xuXHRcdGlmKCFfZmVhdHVyZXMuYW5pbWF0aW9uTmFtZSB8fCAhX2ZlYXR1cmVzLnRyYW5zZm9ybSB8fCBvbGRQaG9uZSkge1xuXHRcdFx0X29wdGlvbnMuc2hvd0FuaW1hdGlvbkR1cmF0aW9uID0gX29wdGlvbnMuaGlkZUFuaW1hdGlvbkR1cmF0aW9uID0gMDtcblx0XHR9XG5cblx0XHQvLyBpbml0IG1vZHVsZXNcblx0XHRmb3IoaSA9IDA7IGkgPCBfbW9kdWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0c2VsZlsnaW5pdCcgKyBfbW9kdWxlc1tpXV0oKTtcblx0XHR9XG5cdFx0XG5cdFx0Ly8gaW5pdFxuXHRcdGlmKFVpQ2xhc3MpIHtcblx0XHRcdHZhciB1aSA9IHNlbGYudWkgPSBuZXcgVWlDbGFzcyhzZWxmLCBmcmFtZXdvcmspO1xuXHRcdFx0dWkuaW5pdCgpO1xuXHRcdH1cblxuXHRcdF9zaG91dCgnZmlyc3RVcGRhdGUnKTtcblx0XHRfY3VycmVudEl0ZW1JbmRleCA9IF9jdXJyZW50SXRlbUluZGV4IHx8IF9vcHRpb25zLmluZGV4IHx8IDA7XG5cdFx0Ly8gdmFsaWRhdGUgaW5kZXhcblx0XHRpZiggaXNOYU4oX2N1cnJlbnRJdGVtSW5kZXgpIHx8IF9jdXJyZW50SXRlbUluZGV4IDwgMCB8fCBfY3VycmVudEl0ZW1JbmRleCA+PSBfZ2V0TnVtSXRlbXMoKSApIHtcblx0XHRcdF9jdXJyZW50SXRlbUluZGV4ID0gMDtcblx0XHR9XG5cdFx0c2VsZi5jdXJySXRlbSA9IF9nZXRJdGVtQXQoIF9jdXJyZW50SXRlbUluZGV4ICk7XG5cblx0XHRcblx0XHRpZihfZmVhdHVyZXMuaXNPbGRJT1NQaG9uZSB8fCBfZmVhdHVyZXMuaXNPbGRBbmRyb2lkKSB7XG5cdFx0XHRfaXNGaXhlZFBvc2l0aW9uID0gZmFsc2U7XG5cdFx0fVxuXHRcdFxuXHRcdHRlbXBsYXRlLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcblx0XHRpZihfb3B0aW9ucy5tb2RhbCkge1xuXHRcdFx0aWYoIV9pc0ZpeGVkUG9zaXRpb24pIHtcblx0XHRcdFx0dGVtcGxhdGUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXHRcdFx0XHR0ZW1wbGF0ZS5zdHlsZS50b3AgPSBmcmFtZXdvcmsuZ2V0U2Nyb2xsWSgpICsgJ3B4Jztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRlbXBsYXRlLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihfY3VycmVudFdpbmRvd1Njcm9sbFkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0X3Nob3V0KCdpbml0aWFsTGF5b3V0Jyk7XG5cdFx0XHRfY3VycmVudFdpbmRvd1Njcm9sbFkgPSBfaW5pdGFsV2luZG93U2Nyb2xsWSA9IGZyYW1ld29yay5nZXRTY3JvbGxZKCk7XG5cdFx0fVxuXHRcdFxuXHRcdC8vIGFkZCBjbGFzc2VzIHRvIHJvb3QgZWxlbWVudCBvZiBQaG90b1N3aXBlXG5cdFx0dmFyIHJvb3RDbGFzc2VzID0gJ3Bzd3AtLW9wZW4gJztcblx0XHRpZihfb3B0aW9ucy5tYWluQ2xhc3MpIHtcblx0XHRcdHJvb3RDbGFzc2VzICs9IF9vcHRpb25zLm1haW5DbGFzcyArICcgJztcblx0XHR9XG5cdFx0aWYoX29wdGlvbnMuc2hvd0hpZGVPcGFjaXR5KSB7XG5cdFx0XHRyb290Q2xhc3NlcyArPSAncHN3cC0tYW5pbWF0ZV9vcGFjaXR5ICc7XG5cdFx0fVxuXHRcdHJvb3RDbGFzc2VzICs9IF9saWtlbHlUb3VjaERldmljZSA/ICdwc3dwLS10b3VjaCcgOiAncHN3cC0tbm90b3VjaCc7XG5cdFx0cm9vdENsYXNzZXMgKz0gX2ZlYXR1cmVzLmFuaW1hdGlvbk5hbWUgPyAnIHBzd3AtLWNzc19hbmltYXRpb24nIDogJyc7XG5cdFx0cm9vdENsYXNzZXMgKz0gX2ZlYXR1cmVzLnN2ZyA/ICcgcHN3cC0tc3ZnJyA6ICcnO1xuXHRcdGZyYW1ld29yay5hZGRDbGFzcyh0ZW1wbGF0ZSwgcm9vdENsYXNzZXMpO1xuXG5cdFx0c2VsZi51cGRhdGVTaXplKCk7XG5cblx0XHQvLyBpbml0aWFsIHVwZGF0ZVxuXHRcdF9jb250YWluZXJTaGlmdEluZGV4ID0gLTE7XG5cdFx0X2luZGV4RGlmZiA9IG51bGw7XG5cdFx0Zm9yKGkgPSAwOyBpIDwgTlVNX0hPTERFUlM7IGkrKykge1xuXHRcdFx0X3NldFRyYW5zbGF0ZVgoIChpK19jb250YWluZXJTaGlmdEluZGV4KSAqIF9zbGlkZVNpemUueCwgX2l0ZW1Ib2xkZXJzW2ldLmVsLnN0eWxlKTtcblx0XHR9XG5cblx0XHRpZighX29sZElFKSB7XG5cdFx0XHRmcmFtZXdvcmsuYmluZChzZWxmLnNjcm9sbFdyYXAsIF9kb3duRXZlbnRzLCBzZWxmKTsgLy8gbm8gZHJhZ2dpbmcgZm9yIG9sZCBJRVxuXHRcdH1cdFxuXG5cdFx0X2xpc3RlbignaW5pdGlhbFpvb21JbkVuZCcsIGZ1bmN0aW9uKCkge1xuXHRcdFx0c2VsZi5zZXRDb250ZW50KF9pdGVtSG9sZGVyc1swXSwgX2N1cnJlbnRJdGVtSW5kZXgtMSk7XG5cdFx0XHRzZWxmLnNldENvbnRlbnQoX2l0ZW1Ib2xkZXJzWzJdLCBfY3VycmVudEl0ZW1JbmRleCsxKTtcblxuXHRcdFx0X2l0ZW1Ib2xkZXJzWzBdLmVsLnN0eWxlLmRpc3BsYXkgPSBfaXRlbUhvbGRlcnNbMl0uZWwuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cblx0XHRcdGlmKF9vcHRpb25zLmZvY3VzKSB7XG5cdFx0XHRcdC8vIGZvY3VzIGNhdXNlcyBsYXlvdXQsIFxuXHRcdFx0XHQvLyB3aGljaCBjYXVzZXMgbGFnIGR1cmluZyB0aGUgYW5pbWF0aW9uLCBcblx0XHRcdFx0Ly8gdGhhdCdzIHdoeSB3ZSBkZWxheSBpdCB1bnRpbGwgdGhlIGluaXRpYWwgem9vbSB0cmFuc2l0aW9uIGVuZHNcblx0XHRcdFx0dGVtcGxhdGUuZm9jdXMoKTtcblx0XHRcdH1cblx0XHRcdCBcblxuXHRcdFx0X2JpbmRFdmVudHMoKTtcblx0XHR9KTtcblxuXHRcdC8vIHNldCBjb250ZW50IGZvciBjZW50ZXIgc2xpZGUgKGZpcnN0IHRpbWUpXG5cdFx0c2VsZi5zZXRDb250ZW50KF9pdGVtSG9sZGVyc1sxXSwgX2N1cnJlbnRJdGVtSW5kZXgpO1xuXHRcdFxuXHRcdHNlbGYudXBkYXRlQ3Vyckl0ZW0oKTtcblxuXHRcdF9zaG91dCgnYWZ0ZXJJbml0Jyk7XG5cblx0XHRpZighX2lzRml4ZWRQb3NpdGlvbikge1xuXG5cdFx0XHQvLyBPbiBhbGwgdmVyc2lvbnMgb2YgaU9TIGxvd2VyIHRoYW4gOC4wLCB3ZSBjaGVjayBzaXplIG9mIHZpZXdwb3J0IGV2ZXJ5IHNlY29uZC5cblx0XHRcdC8vIFxuXHRcdFx0Ly8gVGhpcyBpcyBkb25lIHRvIGRldGVjdCB3aGVuIFNhZmFyaSB0b3AgJiBib3R0b20gYmFycyBhcHBlYXIsIFxuXHRcdFx0Ly8gYXMgdGhpcyBhY3Rpb24gZG9lc24ndCB0cmlnZ2VyIGFueSBldmVudHMgKGxpa2UgcmVzaXplKS4gXG5cdFx0XHQvLyBcblx0XHRcdC8vIE9uIGlPUzggdGhleSBmaXhlZCB0aGlzLlxuXHRcdFx0Ly8gXG5cdFx0XHQvLyAxMCBOb3YgMjAxNDogaU9TIDcgdXNhZ2UgfjQwJS4gaU9TIDggdXNhZ2UgNTYlLlxuXHRcdFx0XG5cdFx0XHRfdXBkYXRlU2l6ZUludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmKCFfbnVtQW5pbWF0aW9ucyAmJiAhX2lzRHJhZ2dpbmcgJiYgIV9pc1pvb21pbmcgJiYgKF9jdXJyWm9vbUxldmVsID09PSBzZWxmLmN1cnJJdGVtLmluaXRpYWxab29tTGV2ZWwpICApIHtcblx0XHRcdFx0XHRzZWxmLnVwZGF0ZVNpemUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgMTAwMCk7XG5cdFx0fVxuXG5cdFx0ZnJhbWV3b3JrLmFkZENsYXNzKHRlbXBsYXRlLCAncHN3cC0tdmlzaWJsZScpO1xuXHR9LFxuXG5cdC8vIENsb3NlIHRoZSBnYWxsZXJ5LCB0aGVuIGRlc3Ryb3kgaXRcblx0Y2xvc2U6IGZ1bmN0aW9uKCkge1xuXHRcdGlmKCFfaXNPcGVuKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0X2lzT3BlbiA9IGZhbHNlO1xuXHRcdF9pc0Rlc3Ryb3lpbmcgPSB0cnVlO1xuXHRcdF9zaG91dCgnY2xvc2UnKTtcblx0XHRfdW5iaW5kRXZlbnRzKCk7XG5cblx0XHRfc2hvd09ySGlkZShzZWxmLmN1cnJJdGVtLCBudWxsLCB0cnVlLCBzZWxmLmRlc3Ryb3kpO1xuXHR9LFxuXG5cdC8vIGRlc3Ryb3lzIHRoZSBnYWxsZXJ5ICh1bmJpbmRzIGV2ZW50cywgY2xlYW5zIHVwIGludGVydmFscyBhbmQgdGltZW91dHMgdG8gYXZvaWQgbWVtb3J5IGxlYWtzKVxuXHRkZXN0cm95OiBmdW5jdGlvbigpIHtcblx0XHRfc2hvdXQoJ2Rlc3Ryb3knKTtcblxuXHRcdGlmKF9zaG93T3JIaWRlVGltZW91dCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KF9zaG93T3JIaWRlVGltZW91dCk7XG5cdFx0fVxuXHRcdFxuXHRcdHRlbXBsYXRlLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuXHRcdHRlbXBsYXRlLmNsYXNzTmFtZSA9IF9pbml0YWxDbGFzc05hbWU7XG5cblx0XHRpZihfdXBkYXRlU2l6ZUludGVydmFsKSB7XG5cdFx0XHRjbGVhckludGVydmFsKF91cGRhdGVTaXplSW50ZXJ2YWwpO1xuXHRcdH1cblxuXHRcdGZyYW1ld29yay51bmJpbmQoc2VsZi5zY3JvbGxXcmFwLCBfZG93bkV2ZW50cywgc2VsZik7XG5cblx0XHQvLyB3ZSB1bmJpbmQgc2Nyb2xsIGV2ZW50IGF0IHRoZSBlbmQsIGFzIGNsb3NpbmcgYW5pbWF0aW9uIG1heSBkZXBlbmQgb24gaXRcblx0XHRmcmFtZXdvcmsudW5iaW5kKHdpbmRvdywgJ3Njcm9sbCcsIHNlbGYpO1xuXG5cdFx0X3N0b3BEcmFnVXBkYXRlTG9vcCgpO1xuXG5cdFx0X3N0b3BBbGxBbmltYXRpb25zKCk7XG5cblx0XHRfbGlzdGVuZXJzID0gbnVsbDtcblx0fSxcblxuXHQvKipcblx0ICogUGFuIGltYWdlIHRvIHBvc2l0aW9uXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSB4ICAgICBcblx0ICogQHBhcmFtIHtOdW1iZXJ9IHkgICAgIFxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IGZvcmNlIFdpbGwgaWdub3JlIGJvdW5kcyBpZiBzZXQgdG8gdHJ1ZS5cblx0ICovXG5cdHBhblRvOiBmdW5jdGlvbih4LHksZm9yY2UpIHtcblx0XHRpZighZm9yY2UpIHtcblx0XHRcdGlmKHggPiBfY3VyclBhbkJvdW5kcy5taW4ueCkge1xuXHRcdFx0XHR4ID0gX2N1cnJQYW5Cb3VuZHMubWluLng7XG5cdFx0XHR9IGVsc2UgaWYoeCA8IF9jdXJyUGFuQm91bmRzLm1heC54KSB7XG5cdFx0XHRcdHggPSBfY3VyclBhbkJvdW5kcy5tYXgueDtcblx0XHRcdH1cblxuXHRcdFx0aWYoeSA+IF9jdXJyUGFuQm91bmRzLm1pbi55KSB7XG5cdFx0XHRcdHkgPSBfY3VyclBhbkJvdW5kcy5taW4ueTtcblx0XHRcdH0gZWxzZSBpZih5IDwgX2N1cnJQYW5Cb3VuZHMubWF4LnkpIHtcblx0XHRcdFx0eSA9IF9jdXJyUGFuQm91bmRzLm1heC55O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRcblx0XHRfcGFuT2Zmc2V0LnggPSB4O1xuXHRcdF9wYW5PZmZzZXQueSA9IHk7XG5cdFx0X2FwcGx5Q3VycmVudFpvb21QYW4oKTtcblx0fSxcblx0XG5cdGhhbmRsZUV2ZW50OiBmdW5jdGlvbiAoZSkge1xuXHRcdGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcblx0XHRpZihfZ2xvYmFsRXZlbnRIYW5kbGVyc1tlLnR5cGVdKSB7XG5cdFx0XHRfZ2xvYmFsRXZlbnRIYW5kbGVyc1tlLnR5cGVdKGUpO1xuXHRcdH1cblx0fSxcblxuXG5cdGdvVG86IGZ1bmN0aW9uKGluZGV4KSB7XG5cblx0XHRpbmRleCA9IF9nZXRMb29wZWRJZChpbmRleCk7XG5cblx0XHR2YXIgZGlmZiA9IGluZGV4IC0gX2N1cnJlbnRJdGVtSW5kZXg7XG5cdFx0X2luZGV4RGlmZiA9IGRpZmY7XG5cblx0XHRfY3VycmVudEl0ZW1JbmRleCA9IGluZGV4O1xuXHRcdHNlbGYuY3Vyckl0ZW0gPSBfZ2V0SXRlbUF0KCBfY3VycmVudEl0ZW1JbmRleCApO1xuXHRcdF9jdXJyUG9zaXRpb25JbmRleCAtPSBkaWZmO1xuXHRcdFxuXHRcdF9tb3ZlTWFpblNjcm9sbChfc2xpZGVTaXplLnggKiBfY3VyclBvc2l0aW9uSW5kZXgpO1xuXHRcdFxuXG5cdFx0X3N0b3BBbGxBbmltYXRpb25zKCk7XG5cdFx0X21haW5TY3JvbGxBbmltYXRpbmcgPSBmYWxzZTtcblxuXHRcdHNlbGYudXBkYXRlQ3Vyckl0ZW0oKTtcblx0fSxcblx0bmV4dDogZnVuY3Rpb24oKSB7XG5cdFx0c2VsZi5nb1RvKCBfY3VycmVudEl0ZW1JbmRleCArIDEpO1xuXHR9LFxuXHRwcmV2OiBmdW5jdGlvbigpIHtcblx0XHRzZWxmLmdvVG8oIF9jdXJyZW50SXRlbUluZGV4IC0gMSk7XG5cdH0sXG5cblx0Ly8gdXBkYXRlIGN1cnJlbnQgem9vbS9wYW4gb2JqZWN0c1xuXHR1cGRhdGVDdXJyWm9vbUl0ZW06IGZ1bmN0aW9uKGVtdWxhdGVTZXRDb250ZW50KSB7XG5cdFx0aWYoZW11bGF0ZVNldENvbnRlbnQpIHtcblx0XHRcdF9zaG91dCgnYmVmb3JlQ2hhbmdlJywgMCk7XG5cdFx0fVxuXG5cdFx0Ly8gaXRlbUhvbGRlclsxXSBpcyBtaWRkbGUgKGN1cnJlbnQpIGl0ZW1cblx0XHRpZihfaXRlbUhvbGRlcnNbMV0uZWwuY2hpbGRyZW4ubGVuZ3RoKSB7XG5cdFx0XHR2YXIgem9vbUVsZW1lbnQgPSBfaXRlbUhvbGRlcnNbMV0uZWwuY2hpbGRyZW5bMF07XG5cdFx0XHRpZiggZnJhbWV3b3JrLmhhc0NsYXNzKHpvb21FbGVtZW50LCAncHN3cF9fem9vbS13cmFwJykgKSB7XG5cdFx0XHRcdF9jdXJyWm9vbUVsZW1lbnRTdHlsZSA9IHpvb21FbGVtZW50LnN0eWxlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0X2N1cnJab29tRWxlbWVudFN0eWxlID0gbnVsbDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0X2N1cnJab29tRWxlbWVudFN0eWxlID0gbnVsbDtcblx0XHR9XG5cdFx0XG5cdFx0X2N1cnJQYW5Cb3VuZHMgPSBzZWxmLmN1cnJJdGVtLmJvdW5kcztcdFxuXHRcdF9zdGFydFpvb21MZXZlbCA9IF9jdXJyWm9vbUxldmVsID0gc2VsZi5jdXJySXRlbS5pbml0aWFsWm9vbUxldmVsO1xuXG5cdFx0X3Bhbk9mZnNldC54ID0gX2N1cnJQYW5Cb3VuZHMuY2VudGVyLng7XG5cdFx0X3Bhbk9mZnNldC55ID0gX2N1cnJQYW5Cb3VuZHMuY2VudGVyLnk7XG5cblx0XHRpZihlbXVsYXRlU2V0Q29udGVudCkge1xuXHRcdFx0X3Nob3V0KCdhZnRlckNoYW5nZScpO1xuXHRcdH1cblx0fSxcblxuXG5cdGludmFsaWRhdGVDdXJySXRlbXM6IGZ1bmN0aW9uKCkge1xuXHRcdF9pdGVtc05lZWRVcGRhdGUgPSB0cnVlO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBOVU1fSE9MREVSUzsgaSsrKSB7XG5cdFx0XHRpZiggX2l0ZW1Ib2xkZXJzW2ldLml0ZW0gKSB7XG5cdFx0XHRcdF9pdGVtSG9sZGVyc1tpXS5pdGVtLm5lZWRzVXBkYXRlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0dXBkYXRlQ3Vyckl0ZW06IGZ1bmN0aW9uKGJlZm9yZUFuaW1hdGlvbikge1xuXG5cdFx0aWYoX2luZGV4RGlmZiA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBkaWZmQWJzID0gTWF0aC5hYnMoX2luZGV4RGlmZiksXG5cdFx0XHR0ZW1wSG9sZGVyO1xuXG5cdFx0aWYoYmVmb3JlQW5pbWF0aW9uICYmIGRpZmZBYnMgPCAyKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cblx0XHRzZWxmLmN1cnJJdGVtID0gX2dldEl0ZW1BdCggX2N1cnJlbnRJdGVtSW5kZXggKTtcblx0XHRfcmVuZGVyTWF4UmVzb2x1dGlvbiA9IGZhbHNlO1xuXHRcdFxuXHRcdF9zaG91dCgnYmVmb3JlQ2hhbmdlJywgX2luZGV4RGlmZik7XG5cblx0XHRpZihkaWZmQWJzID49IE5VTV9IT0xERVJTKSB7XG5cdFx0XHRfY29udGFpbmVyU2hpZnRJbmRleCArPSBfaW5kZXhEaWZmICsgKF9pbmRleERpZmYgPiAwID8gLU5VTV9IT0xERVJTIDogTlVNX0hPTERFUlMpO1xuXHRcdFx0ZGlmZkFicyA9IE5VTV9IT0xERVJTO1xuXHRcdH1cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZGlmZkFiczsgaSsrKSB7XG5cdFx0XHRpZihfaW5kZXhEaWZmID4gMCkge1xuXHRcdFx0XHR0ZW1wSG9sZGVyID0gX2l0ZW1Ib2xkZXJzLnNoaWZ0KCk7XG5cdFx0XHRcdF9pdGVtSG9sZGVyc1tOVU1fSE9MREVSUy0xXSA9IHRlbXBIb2xkZXI7IC8vIG1vdmUgZmlyc3QgdG8gbGFzdFxuXG5cdFx0XHRcdF9jb250YWluZXJTaGlmdEluZGV4Kys7XG5cdFx0XHRcdF9zZXRUcmFuc2xhdGVYKCAoX2NvbnRhaW5lclNoaWZ0SW5kZXgrMikgKiBfc2xpZGVTaXplLngsIHRlbXBIb2xkZXIuZWwuc3R5bGUpO1xuXHRcdFx0XHRzZWxmLnNldENvbnRlbnQodGVtcEhvbGRlciwgX2N1cnJlbnRJdGVtSW5kZXggLSBkaWZmQWJzICsgaSArIDEgKyAxKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRlbXBIb2xkZXIgPSBfaXRlbUhvbGRlcnMucG9wKCk7XG5cdFx0XHRcdF9pdGVtSG9sZGVycy51bnNoaWZ0KCB0ZW1wSG9sZGVyICk7IC8vIG1vdmUgbGFzdCB0byBmaXJzdFxuXG5cdFx0XHRcdF9jb250YWluZXJTaGlmdEluZGV4LS07XG5cdFx0XHRcdF9zZXRUcmFuc2xhdGVYKCBfY29udGFpbmVyU2hpZnRJbmRleCAqIF9zbGlkZVNpemUueCwgdGVtcEhvbGRlci5lbC5zdHlsZSk7XG5cdFx0XHRcdHNlbGYuc2V0Q29udGVudCh0ZW1wSG9sZGVyLCBfY3VycmVudEl0ZW1JbmRleCArIGRpZmZBYnMgLSBpIC0gMSAtIDEpO1xuXHRcdFx0fVxuXHRcdFx0XG5cdFx0fVxuXG5cdFx0Ly8gcmVzZXQgem9vbS9wYW4gb24gcHJldmlvdXMgaXRlbVxuXHRcdGlmKF9jdXJyWm9vbUVsZW1lbnRTdHlsZSAmJiBNYXRoLmFicyhfaW5kZXhEaWZmKSA9PT0gMSkge1xuXG5cdFx0XHR2YXIgcHJldkl0ZW0gPSBfZ2V0SXRlbUF0KF9wcmV2SXRlbUluZGV4KTtcblx0XHRcdGlmKHByZXZJdGVtLmluaXRpYWxab29tTGV2ZWwgIT09IF9jdXJyWm9vbUxldmVsKSB7XG5cdFx0XHRcdF9jYWxjdWxhdGVJdGVtU2l6ZShwcmV2SXRlbSAsIF92aWV3cG9ydFNpemUgKTtcblx0XHRcdFx0X3NldEltYWdlU2l6ZShwcmV2SXRlbSk7XG5cdFx0XHRcdF9hcHBseVpvb21QYW5Ub0l0ZW0oIHByZXZJdGVtICk7IFx0XHRcdFx0XG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHQvLyByZXNldCBkaWZmIGFmdGVyIHVwZGF0ZVxuXHRcdF9pbmRleERpZmYgPSAwO1xuXG5cdFx0c2VsZi51cGRhdGVDdXJyWm9vbUl0ZW0oKTtcblxuXHRcdF9wcmV2SXRlbUluZGV4ID0gX2N1cnJlbnRJdGVtSW5kZXg7XG5cblx0XHRfc2hvdXQoJ2FmdGVyQ2hhbmdlJyk7XG5cdFx0XG5cdH0sXG5cblxuXG5cdHVwZGF0ZVNpemU6IGZ1bmN0aW9uKGZvcmNlKSB7XG5cdFx0XG5cdFx0aWYoIV9pc0ZpeGVkUG9zaXRpb24gJiYgX29wdGlvbnMubW9kYWwpIHtcblx0XHRcdHZhciB3aW5kb3dTY3JvbGxZID0gZnJhbWV3b3JrLmdldFNjcm9sbFkoKTtcblx0XHRcdGlmKF9jdXJyZW50V2luZG93U2Nyb2xsWSAhPT0gd2luZG93U2Nyb2xsWSkge1xuXHRcdFx0XHR0ZW1wbGF0ZS5zdHlsZS50b3AgPSB3aW5kb3dTY3JvbGxZICsgJ3B4Jztcblx0XHRcdFx0X2N1cnJlbnRXaW5kb3dTY3JvbGxZID0gd2luZG93U2Nyb2xsWTtcblx0XHRcdH1cblx0XHRcdGlmKCFmb3JjZSAmJiBfd2luZG93VmlzaWJsZVNpemUueCA9PT0gd2luZG93LmlubmVyV2lkdGggJiYgX3dpbmRvd1Zpc2libGVTaXplLnkgPT09IHdpbmRvdy5pbm5lckhlaWdodCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRfd2luZG93VmlzaWJsZVNpemUueCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXHRcdFx0X3dpbmRvd1Zpc2libGVTaXplLnkgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cblx0XHRcdC8vdGVtcGxhdGUuc3R5bGUud2lkdGggPSBfd2luZG93VmlzaWJsZVNpemUueCArICdweCc7XG5cdFx0XHR0ZW1wbGF0ZS5zdHlsZS5oZWlnaHQgPSBfd2luZG93VmlzaWJsZVNpemUueSArICdweCc7XG5cdFx0fVxuXG5cblxuXHRcdF92aWV3cG9ydFNpemUueCA9IHNlbGYuc2Nyb2xsV3JhcC5jbGllbnRXaWR0aDtcblx0XHRfdmlld3BvcnRTaXplLnkgPSBzZWxmLnNjcm9sbFdyYXAuY2xpZW50SGVpZ2h0O1xuXG5cdFx0X3VwZGF0ZVBhZ2VTY3JvbGxPZmZzZXQoKTtcblxuXHRcdF9zbGlkZVNpemUueCA9IF92aWV3cG9ydFNpemUueCArIE1hdGgucm91bmQoX3ZpZXdwb3J0U2l6ZS54ICogX29wdGlvbnMuc3BhY2luZyk7XG5cdFx0X3NsaWRlU2l6ZS55ID0gX3ZpZXdwb3J0U2l6ZS55O1xuXG5cdFx0X21vdmVNYWluU2Nyb2xsKF9zbGlkZVNpemUueCAqIF9jdXJyUG9zaXRpb25JbmRleCk7XG5cblx0XHRfc2hvdXQoJ2JlZm9yZVJlc2l6ZScpOyAvLyBldmVuIG1heSBiZSB1c2VkIGZvciBleGFtcGxlIHRvIHN3aXRjaCBpbWFnZSBzb3VyY2VzXG5cblxuXHRcdC8vIGRvbid0IHJlLWNhbGN1bGF0ZSBzaXplIG9uIGluaXRhbCBzaXplIHVwZGF0ZVxuXHRcdGlmKF9jb250YWluZXJTaGlmdEluZGV4ICE9PSB1bmRlZmluZWQpIHtcblxuXHRcdFx0dmFyIGhvbGRlcixcblx0XHRcdFx0aXRlbSxcblx0XHRcdFx0aEluZGV4O1xuXG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgTlVNX0hPTERFUlM7IGkrKykge1xuXHRcdFx0XHRob2xkZXIgPSBfaXRlbUhvbGRlcnNbaV07XG5cdFx0XHRcdF9zZXRUcmFuc2xhdGVYKCAoaStfY29udGFpbmVyU2hpZnRJbmRleCkgKiBfc2xpZGVTaXplLngsIGhvbGRlci5lbC5zdHlsZSk7XG5cblx0XHRcdFx0aEluZGV4ID0gX2N1cnJlbnRJdGVtSW5kZXgraS0xO1xuXG5cdFx0XHRcdGlmKF9vcHRpb25zLmxvb3AgJiYgX2dldE51bUl0ZW1zKCkgPiAyKSB7XG5cdFx0XHRcdFx0aEluZGV4ID0gX2dldExvb3BlZElkKGhJbmRleCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyB1cGRhdGUgem9vbSBsZXZlbCBvbiBpdGVtcyBhbmQgcmVmcmVzaCBzb3VyY2UgKGlmIG5lZWRzVXBkYXRlKVxuXHRcdFx0XHRpdGVtID0gX2dldEl0ZW1BdCggaEluZGV4ICk7XG5cblx0XHRcdFx0Ly8gcmUtcmVuZGVyIGdhbGxlcnkgaXRlbSBpZiBgbmVlZHNVcGRhdGVgLFxuXHRcdFx0XHQvLyBvciBkb2Vzbid0IGhhdmUgYGJvdW5kc2AgKGVudGlyZWx5IG5ldyBzbGlkZSBvYmplY3QpXG5cdFx0XHRcdGlmKCBpdGVtICYmIChfaXRlbXNOZWVkVXBkYXRlIHx8IGl0ZW0ubmVlZHNVcGRhdGUgfHwgIWl0ZW0uYm91bmRzKSApIHtcblxuXHRcdFx0XHRcdHNlbGYuY2xlYW5TbGlkZSggaXRlbSApO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdHNlbGYuc2V0Q29udGVudCggaG9sZGVyLCBoSW5kZXggKTtcblxuXHRcdFx0XHRcdC8vIGlmIFwiY2VudGVyXCIgc2xpZGVcblx0XHRcdFx0XHRpZihpID09PSAxKSB7XG5cdFx0XHRcdFx0XHRzZWxmLmN1cnJJdGVtID0gaXRlbTtcblx0XHRcdFx0XHRcdHNlbGYudXBkYXRlQ3Vyclpvb21JdGVtKHRydWUpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGl0ZW0ubmVlZHNVcGRhdGUgPSBmYWxzZTtcblxuXHRcdFx0XHR9IGVsc2UgaWYoaG9sZGVyLmluZGV4ID09PSAtMSAmJiBoSW5kZXggPj0gMCkge1xuXHRcdFx0XHRcdC8vIGFkZCBjb250ZW50IGZpcnN0IHRpbWVcblx0XHRcdFx0XHRzZWxmLnNldENvbnRlbnQoIGhvbGRlciwgaEluZGV4ICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoaXRlbSAmJiBpdGVtLmNvbnRhaW5lcikge1xuXHRcdFx0XHRcdF9jYWxjdWxhdGVJdGVtU2l6ZShpdGVtLCBfdmlld3BvcnRTaXplKTtcblx0XHRcdFx0XHRfc2V0SW1hZ2VTaXplKGl0ZW0pO1xuXHRcdFx0XHRcdF9hcHBseVpvb21QYW5Ub0l0ZW0oIGl0ZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdH1cblx0XHRcdF9pdGVtc05lZWRVcGRhdGUgPSBmYWxzZTtcblx0XHR9XHRcblxuXHRcdF9zdGFydFpvb21MZXZlbCA9IF9jdXJyWm9vbUxldmVsID0gc2VsZi5jdXJySXRlbS5pbml0aWFsWm9vbUxldmVsO1xuXHRcdF9jdXJyUGFuQm91bmRzID0gc2VsZi5jdXJySXRlbS5ib3VuZHM7XG5cblx0XHRpZihfY3VyclBhbkJvdW5kcykge1xuXHRcdFx0X3Bhbk9mZnNldC54ID0gX2N1cnJQYW5Cb3VuZHMuY2VudGVyLng7XG5cdFx0XHRfcGFuT2Zmc2V0LnkgPSBfY3VyclBhbkJvdW5kcy5jZW50ZXIueTtcblx0XHRcdF9hcHBseUN1cnJlbnRab29tUGFuKCB0cnVlICk7XG5cdFx0fVxuXHRcdFxuXHRcdF9zaG91dCgncmVzaXplJyk7XG5cdH0sXG5cdFxuXHQvLyBab29tIGN1cnJlbnQgaXRlbSB0b1xuXHR6b29tVG86IGZ1bmN0aW9uKGRlc3Rab29tTGV2ZWwsIGNlbnRlclBvaW50LCBzcGVlZCwgZWFzaW5nRm4sIHVwZGF0ZUZuKSB7XG5cdFx0Lypcblx0XHRcdGlmKGRlc3Rab29tTGV2ZWwgPT09ICdmaXQnKSB7XG5cdFx0XHRcdGRlc3Rab29tTGV2ZWwgPSBzZWxmLmN1cnJJdGVtLmZpdFJhdGlvO1xuXHRcdFx0fSBlbHNlIGlmKGRlc3Rab29tTGV2ZWwgPT09ICdmaWxsJykge1xuXHRcdFx0XHRkZXN0Wm9vbUxldmVsID0gc2VsZi5jdXJySXRlbS5maWxsUmF0aW87XG5cdFx0XHR9XG5cdFx0Ki9cblxuXHRcdGlmKGNlbnRlclBvaW50KSB7XG5cdFx0XHRfc3RhcnRab29tTGV2ZWwgPSBfY3Vyclpvb21MZXZlbDtcblx0XHRcdF9taWRab29tUG9pbnQueCA9IE1hdGguYWJzKGNlbnRlclBvaW50LngpIC0gX3Bhbk9mZnNldC54IDtcblx0XHRcdF9taWRab29tUG9pbnQueSA9IE1hdGguYWJzKGNlbnRlclBvaW50LnkpIC0gX3Bhbk9mZnNldC55IDtcblx0XHRcdF9lcXVhbGl6ZVBvaW50cyhfc3RhcnRQYW5PZmZzZXQsIF9wYW5PZmZzZXQpO1xuXHRcdH1cblxuXHRcdHZhciBkZXN0UGFuQm91bmRzID0gX2NhbGN1bGF0ZVBhbkJvdW5kcyhkZXN0Wm9vbUxldmVsLCBmYWxzZSksXG5cdFx0XHRkZXN0UGFuT2Zmc2V0ID0ge307XG5cblx0XHRfbW9kaWZ5RGVzdFBhbk9mZnNldCgneCcsIGRlc3RQYW5Cb3VuZHMsIGRlc3RQYW5PZmZzZXQsIGRlc3Rab29tTGV2ZWwpO1xuXHRcdF9tb2RpZnlEZXN0UGFuT2Zmc2V0KCd5JywgZGVzdFBhbkJvdW5kcywgZGVzdFBhbk9mZnNldCwgZGVzdFpvb21MZXZlbCk7XG5cblx0XHR2YXIgaW5pdGlhbFpvb21MZXZlbCA9IF9jdXJyWm9vbUxldmVsO1xuXHRcdHZhciBpbml0aWFsUGFuT2Zmc2V0ID0ge1xuXHRcdFx0eDogX3Bhbk9mZnNldC54LFxuXHRcdFx0eTogX3Bhbk9mZnNldC55XG5cdFx0fTtcblxuXHRcdF9yb3VuZFBvaW50KGRlc3RQYW5PZmZzZXQpO1xuXG5cdFx0dmFyIG9uVXBkYXRlID0gZnVuY3Rpb24obm93KSB7XG5cdFx0XHRpZihub3cgPT09IDEpIHtcblx0XHRcdFx0X2N1cnJab29tTGV2ZWwgPSBkZXN0Wm9vbUxldmVsO1xuXHRcdFx0XHRfcGFuT2Zmc2V0LnggPSBkZXN0UGFuT2Zmc2V0Lng7XG5cdFx0XHRcdF9wYW5PZmZzZXQueSA9IGRlc3RQYW5PZmZzZXQueTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdF9jdXJyWm9vbUxldmVsID0gKGRlc3Rab29tTGV2ZWwgLSBpbml0aWFsWm9vbUxldmVsKSAqIG5vdyArIGluaXRpYWxab29tTGV2ZWw7XG5cdFx0XHRcdF9wYW5PZmZzZXQueCA9IChkZXN0UGFuT2Zmc2V0LnggLSBpbml0aWFsUGFuT2Zmc2V0LngpICogbm93ICsgaW5pdGlhbFBhbk9mZnNldC54O1xuXHRcdFx0XHRfcGFuT2Zmc2V0LnkgPSAoZGVzdFBhbk9mZnNldC55IC0gaW5pdGlhbFBhbk9mZnNldC55KSAqIG5vdyArIGluaXRpYWxQYW5PZmZzZXQueTtcblx0XHRcdH1cblxuXHRcdFx0aWYodXBkYXRlRm4pIHtcblx0XHRcdFx0dXBkYXRlRm4obm93KTtcblx0XHRcdH1cblxuXHRcdFx0X2FwcGx5Q3VycmVudFpvb21QYW4oIG5vdyA9PT0gMSApO1xuXHRcdH07XG5cblx0XHRpZihzcGVlZCkge1xuXHRcdFx0X2FuaW1hdGVQcm9wKCdjdXN0b21ab29tVG8nLCAwLCAxLCBzcGVlZCwgZWFzaW5nRm4gfHwgZnJhbWV3b3JrLmVhc2luZy5zaW5lLmluT3V0LCBvblVwZGF0ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9uVXBkYXRlKDEpO1xuXHRcdH1cblx0fVxuXG5cbn07XG5cblxuLyo+PmNvcmUqL1xuXG4vKj4+Z2VzdHVyZXMqL1xuLyoqXG4gKiBNb3VzZS90b3VjaC9wb2ludGVyIGV2ZW50IGhhbmRsZXJzLlxuICogXG4gKiBzZXBhcmF0ZWQgZnJvbSBAY29yZS5qcyBmb3IgcmVhZGFiaWxpdHlcbiAqL1xuXG52YXIgTUlOX1NXSVBFX0RJU1RBTkNFID0gMzAsXG5cdERJUkVDVElPTl9DSEVDS19PRkZTRVQgPSAxMDsgLy8gYW1vdW50IG9mIHBpeGVscyB0byBkcmFnIHRvIGRldGVybWluZSBkaXJlY3Rpb24gb2Ygc3dpcGVcblxudmFyIF9nZXN0dXJlU3RhcnRUaW1lLFxuXHRfZ2VzdHVyZUNoZWNrU3BlZWRUaW1lLFxuXG5cdC8vIHBvb2wgb2Ygb2JqZWN0cyB0aGF0IGFyZSB1c2VkIGR1cmluZyBkcmFnZ2luZyBvZiB6b29taW5nXG5cdHAgPSB7fSwgLy8gZmlyc3QgcG9pbnRcblx0cDIgPSB7fSwgLy8gc2Vjb25kIHBvaW50IChmb3Igem9vbSBnZXN0dXJlKVxuXHRkZWx0YSA9IHt9LFxuXHRfY3VyclBvaW50ID0ge30sXG5cdF9zdGFydFBvaW50ID0ge30sXG5cdF9jdXJyUG9pbnRlcnMgPSBbXSxcblx0X3N0YXJ0TWFpblNjcm9sbFBvcyA9IHt9LFxuXHRfcmVsZWFzZUFuaW1EYXRhLFxuXHRfcG9zUG9pbnRzID0gW10sIC8vIGFycmF5IG9mIHBvaW50cyBkdXJpbmcgZHJhZ2dpbmcsIHVzZWQgdG8gZGV0ZXJtaW5lIHR5cGUgb2YgZ2VzdHVyZVxuXHRfdGVtcFBvaW50ID0ge30sXG5cblx0X2lzWm9vbWluZ0luLFxuXHRfdmVydGljYWxEcmFnSW5pdGlhdGVkLFxuXHRfb2xkQW5kcm9pZFRvdWNoRW5kVGltZW91dCxcblx0X2N1cnJab29tZWRJdGVtSW5kZXggPSAwLFxuXHRfY2VudGVyUG9pbnQgPSBfZ2V0RW1wdHlQb2ludCgpLFxuXHRfbGFzdFJlbGVhc2VUaW1lID0gMCxcblx0X2lzRHJhZ2dpbmcsIC8vIGF0IGxlYXN0IG9uZSBwb2ludGVyIGlzIGRvd25cblx0X2lzTXVsdGl0b3VjaCwgLy8gYXQgbGVhc3QgdHdvIF9wb2ludGVycyBhcmUgZG93blxuXHRfem9vbVN0YXJ0ZWQsIC8vIHpvb20gbGV2ZWwgY2hhbmdlZCBkdXJpbmcgem9vbSBnZXN0dXJlXG5cdF9tb3ZlZCxcblx0X2RyYWdBbmltRnJhbWUsXG5cdF9tYWluU2Nyb2xsU2hpZnRlZCxcblx0X2N1cnJlbnRQb2ludHMsIC8vIGFycmF5IG9mIGN1cnJlbnQgdG91Y2ggcG9pbnRzXG5cdF9pc1pvb21pbmcsXG5cdF9jdXJyUG9pbnRzRGlzdGFuY2UsXG5cdF9zdGFydFBvaW50c0Rpc3RhbmNlLFxuXHRfY3VyclBhbkJvdW5kcyxcblx0X21haW5TY3JvbGxQb3MgPSBfZ2V0RW1wdHlQb2ludCgpLFxuXHRfY3Vyclpvb21FbGVtZW50U3R5bGUsXG5cdF9tYWluU2Nyb2xsQW5pbWF0aW5nLCAvLyB0cnVlLCBpZiBhbmltYXRpb24gYWZ0ZXIgc3dpcGUgZ2VzdHVyZSBpcyBydW5uaW5nXG5cdF9taWRab29tUG9pbnQgPSBfZ2V0RW1wdHlQb2ludCgpLFxuXHRfY3VyckNlbnRlclBvaW50ID0gX2dldEVtcHR5UG9pbnQoKSxcblx0X2RpcmVjdGlvbixcblx0X2lzRmlyc3RNb3ZlLFxuXHRfb3BhY2l0eUNoYW5nZWQsXG5cdF9iZ09wYWNpdHksXG5cdF93YXNPdmVySW5pdGlhbFpvb20sXG5cblx0X2lzRXF1YWxQb2ludHMgPSBmdW5jdGlvbihwMSwgcDIpIHtcblx0XHRyZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xuXHR9LFxuXHRfaXNOZWFyYnlQb2ludHMgPSBmdW5jdGlvbih0b3VjaDAsIHRvdWNoMSkge1xuXHRcdHJldHVybiBNYXRoLmFicyh0b3VjaDAueCAtIHRvdWNoMS54KSA8IERPVUJMRV9UQVBfUkFESVVTICYmIE1hdGguYWJzKHRvdWNoMC55IC0gdG91Y2gxLnkpIDwgRE9VQkxFX1RBUF9SQURJVVM7XG5cdH0sXG5cdF9jYWxjdWxhdGVQb2ludHNEaXN0YW5jZSA9IGZ1bmN0aW9uKHAxLCBwMikge1xuXHRcdF90ZW1wUG9pbnQueCA9IE1hdGguYWJzKCBwMS54IC0gcDIueCApO1xuXHRcdF90ZW1wUG9pbnQueSA9IE1hdGguYWJzKCBwMS55IC0gcDIueSApO1xuXHRcdHJldHVybiBNYXRoLnNxcnQoX3RlbXBQb2ludC54ICogX3RlbXBQb2ludC54ICsgX3RlbXBQb2ludC55ICogX3RlbXBQb2ludC55KTtcblx0fSxcblx0X3N0b3BEcmFnVXBkYXRlTG9vcCA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmKF9kcmFnQW5pbUZyYW1lKSB7XG5cdFx0XHRfY2FuY2VsQUYoX2RyYWdBbmltRnJhbWUpO1xuXHRcdFx0X2RyYWdBbmltRnJhbWUgPSBudWxsO1xuXHRcdH1cblx0fSxcblx0X2RyYWdVcGRhdGVMb29wID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYoX2lzRHJhZ2dpbmcpIHtcblx0XHRcdF9kcmFnQW5pbUZyYW1lID0gX3JlcXVlc3RBRihfZHJhZ1VwZGF0ZUxvb3ApO1xuXHRcdFx0X3JlbmRlck1vdmVtZW50KCk7XG5cdFx0fVxuXHR9LFxuXHRfY2FuUGFuID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuICEoX29wdGlvbnMuc2NhbGVNb2RlID09PSAnZml0JyAmJiBfY3Vyclpvb21MZXZlbCA9PT0gIHNlbGYuY3Vyckl0ZW0uaW5pdGlhbFpvb21MZXZlbCk7XG5cdH0sXG5cdFxuXHQvLyBmaW5kIHRoZSBjbG9zZXN0IHBhcmVudCBET00gZWxlbWVudFxuXHRfY2xvc2VzdEVsZW1lbnQgPSBmdW5jdGlvbihlbCwgZm4pIHtcblx0ICBcdGlmKCFlbCB8fCBlbCA9PT0gZG9jdW1lbnQpIHtcblx0ICBcdFx0cmV0dXJuIGZhbHNlO1xuXHQgIFx0fVxuXG5cdCAgXHQvLyBkb24ndCBzZWFyY2ggZWxlbWVudHMgYWJvdmUgcHN3cF9fc2Nyb2xsLXdyYXBcblx0ICBcdGlmKGVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSAmJiBlbC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykuaW5kZXhPZigncHN3cF9fc2Nyb2xsLXdyYXAnKSA+IC0xICkge1xuXHQgIFx0XHRyZXR1cm4gZmFsc2U7XG5cdCAgXHR9XG5cblx0ICBcdGlmKCBmbihlbCkgKSB7XG5cdCAgXHRcdHJldHVybiBlbDtcblx0ICBcdH1cblxuXHQgIFx0cmV0dXJuIF9jbG9zZXN0RWxlbWVudChlbC5wYXJlbnROb2RlLCBmbik7XG5cdH0sXG5cblx0X3ByZXZlbnRPYmogPSB7fSxcblx0X3ByZXZlbnREZWZhdWx0RXZlbnRCZWhhdmlvdXIgPSBmdW5jdGlvbihlLCBpc0Rvd24pIHtcblx0ICAgIF9wcmV2ZW50T2JqLnByZXZlbnQgPSAhX2Nsb3Nlc3RFbGVtZW50KGUudGFyZ2V0LCBfb3B0aW9ucy5pc0NsaWNrYWJsZUVsZW1lbnQpO1xuXG5cdFx0X3Nob3V0KCdwcmV2ZW50RHJhZ0V2ZW50JywgZSwgaXNEb3duLCBfcHJldmVudE9iaik7XG5cdFx0cmV0dXJuIF9wcmV2ZW50T2JqLnByZXZlbnQ7XG5cblx0fSxcblx0X2NvbnZlcnRUb3VjaFRvUG9pbnQgPSBmdW5jdGlvbih0b3VjaCwgcCkge1xuXHRcdHAueCA9IHRvdWNoLnBhZ2VYO1xuXHRcdHAueSA9IHRvdWNoLnBhZ2VZO1xuXHRcdHAuaWQgPSB0b3VjaC5pZGVudGlmaWVyO1xuXHRcdHJldHVybiBwO1xuXHR9LFxuXHRfZmluZENlbnRlck9mUG9pbnRzID0gZnVuY3Rpb24ocDEsIHAyLCBwQ2VudGVyKSB7XG5cdFx0cENlbnRlci54ID0gKHAxLnggKyBwMi54KSAqIDAuNTtcblx0XHRwQ2VudGVyLnkgPSAocDEueSArIHAyLnkpICogMC41O1xuXHR9LFxuXHRfcHVzaFBvc1BvaW50ID0gZnVuY3Rpb24odGltZSwgeCwgeSkge1xuXHRcdGlmKHRpbWUgLSBfZ2VzdHVyZUNoZWNrU3BlZWRUaW1lID4gNTApIHtcblx0XHRcdHZhciBvID0gX3Bvc1BvaW50cy5sZW5ndGggPiAyID8gX3Bvc1BvaW50cy5zaGlmdCgpIDoge307XG5cdFx0XHRvLnggPSB4O1xuXHRcdFx0by55ID0geTsgXG5cdFx0XHRfcG9zUG9pbnRzLnB1c2gobyk7XG5cdFx0XHRfZ2VzdHVyZUNoZWNrU3BlZWRUaW1lID0gdGltZTtcblx0XHR9XG5cdH0sXG5cblx0X2NhbGN1bGF0ZVZlcnRpY2FsRHJhZ09wYWNpdHlSYXRpbyA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB5T2Zmc2V0ID0gX3Bhbk9mZnNldC55IC0gc2VsZi5jdXJySXRlbS5pbml0aWFsUG9zaXRpb24ueTsgLy8gZGlmZmVyZW5jZSBiZXR3ZWVuIGluaXRpYWwgYW5kIGN1cnJlbnQgcG9zaXRpb25cblx0XHRyZXR1cm4gMSAtICBNYXRoLmFicyggeU9mZnNldCAvIChfdmlld3BvcnRTaXplLnkgLyAyKSAgKTtcblx0fSxcblxuXHRcblx0Ly8gcG9pbnRzIHBvb2wsIHJldXNlZCBkdXJpbmcgdG91Y2ggZXZlbnRzXG5cdF9lUG9pbnQxID0ge30sXG5cdF9lUG9pbnQyID0ge30sXG5cdF90ZW1wUG9pbnRzQXJyID0gW10sXG5cdF90ZW1wQ291bnRlcixcblx0X2dldFRvdWNoUG9pbnRzID0gZnVuY3Rpb24oZSkge1xuXHRcdC8vIGNsZWFuIHVwIHByZXZpb3VzIHBvaW50cywgd2l0aG91dCByZWNyZWF0aW5nIGFycmF5XG5cdFx0d2hpbGUoX3RlbXBQb2ludHNBcnIubGVuZ3RoID4gMCkge1xuXHRcdFx0X3RlbXBQb2ludHNBcnIucG9wKCk7XG5cdFx0fVxuXG5cdFx0aWYoIV9wb2ludGVyRXZlbnRFbmFibGVkKSB7XG5cdFx0XHRpZihlLnR5cGUuaW5kZXhPZigndG91Y2gnKSA+IC0xKSB7XG5cblx0XHRcdFx0aWYoZS50b3VjaGVzICYmIGUudG91Y2hlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0X3RlbXBQb2ludHNBcnJbMF0gPSBfY29udmVydFRvdWNoVG9Qb2ludChlLnRvdWNoZXNbMF0sIF9lUG9pbnQxKTtcblx0XHRcdFx0XHRpZihlLnRvdWNoZXMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdFx0X3RlbXBQb2ludHNBcnJbMV0gPSBfY29udmVydFRvdWNoVG9Qb2ludChlLnRvdWNoZXNbMV0sIF9lUG9pbnQyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRfZVBvaW50MS54ID0gZS5wYWdlWDtcblx0XHRcdFx0X2VQb2ludDEueSA9IGUucGFnZVk7XG5cdFx0XHRcdF9lUG9pbnQxLmlkID0gJyc7XG5cdFx0XHRcdF90ZW1wUG9pbnRzQXJyWzBdID0gX2VQb2ludDE7Ly9fZVBvaW50MTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0X3RlbXBDb3VudGVyID0gMDtcblx0XHRcdC8vIHdlIGNhbiB1c2UgZm9yRWFjaCwgYXMgcG9pbnRlciBldmVudHMgYXJlIHN1cHBvcnRlZCBvbmx5IGluIG1vZGVybiBicm93c2Vyc1xuXHRcdFx0X2N1cnJQb2ludGVycy5mb3JFYWNoKGZ1bmN0aW9uKHApIHtcblx0XHRcdFx0aWYoX3RlbXBDb3VudGVyID09PSAwKSB7XG5cdFx0XHRcdFx0X3RlbXBQb2ludHNBcnJbMF0gPSBwO1xuXHRcdFx0XHR9IGVsc2UgaWYoX3RlbXBDb3VudGVyID09PSAxKSB7XG5cdFx0XHRcdFx0X3RlbXBQb2ludHNBcnJbMV0gPSBwO1xuXHRcdFx0XHR9XG5cdFx0XHRcdF90ZW1wQ291bnRlcisrO1xuXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIF90ZW1wUG9pbnRzQXJyO1xuXHR9LFxuXG5cdF9wYW5Pck1vdmVNYWluU2Nyb2xsID0gZnVuY3Rpb24oYXhpcywgZGVsdGEpIHtcblxuXHRcdHZhciBwYW5GcmljdGlvbixcblx0XHRcdG92ZXJEaWZmID0gMCxcblx0XHRcdG5ld09mZnNldCA9IF9wYW5PZmZzZXRbYXhpc10gKyBkZWx0YVtheGlzXSxcblx0XHRcdHN0YXJ0T3ZlckRpZmYsXG5cdFx0XHRkaXIgPSBkZWx0YVtheGlzXSA+IDAsXG5cdFx0XHRuZXdNYWluU2Nyb2xsUG9zaXRpb24gPSBfbWFpblNjcm9sbFBvcy54ICsgZGVsdGEueCxcblx0XHRcdG1haW5TY3JvbGxEaWZmID0gX21haW5TY3JvbGxQb3MueCAtIF9zdGFydE1haW5TY3JvbGxQb3MueCxcblx0XHRcdG5ld1BhblBvcyxcblx0XHRcdG5ld01haW5TY3JvbGxQb3M7XG5cblx0XHQvLyBjYWxjdWxhdGUgZmRpc3RhbmNlIG92ZXIgdGhlIGJvdW5kcyBhbmQgZnJpY3Rpb25cblx0XHRpZihuZXdPZmZzZXQgPiBfY3VyclBhbkJvdW5kcy5taW5bYXhpc10gfHwgbmV3T2Zmc2V0IDwgX2N1cnJQYW5Cb3VuZHMubWF4W2F4aXNdKSB7XG5cdFx0XHRwYW5GcmljdGlvbiA9IF9vcHRpb25zLnBhbkVuZEZyaWN0aW9uO1xuXHRcdFx0Ly8gTGluZWFyIGluY3JlYXNpbmcgb2YgZnJpY3Rpb24sIHNvIGF0IDEvNCBvZiB2aWV3cG9ydCBpdCdzIGF0IG1heCB2YWx1ZS4gXG5cdFx0XHQvLyBMb29rcyBub3QgYXMgbmljZSBhcyB3YXMgZXhwZWN0ZWQuIExlZnQgZm9yIGhpc3RvcnkuXG5cdFx0XHQvLyBwYW5GcmljdGlvbiA9ICgxIC0gKF9wYW5PZmZzZXRbYXhpc10gKyBkZWx0YVtheGlzXSArIHBhbkJvdW5kcy5taW5bYXhpc10pIC8gKF92aWV3cG9ydFNpemVbYXhpc10gLyA0KSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwYW5GcmljdGlvbiA9IDE7XG5cdFx0fVxuXHRcdFxuXHRcdG5ld09mZnNldCA9IF9wYW5PZmZzZXRbYXhpc10gKyBkZWx0YVtheGlzXSAqIHBhbkZyaWN0aW9uO1xuXG5cdFx0Ly8gbW92ZSBtYWluIHNjcm9sbCBvciBzdGFydCBwYW5uaW5nXG5cdFx0aWYoX29wdGlvbnMuYWxsb3dQYW5Ub05leHQgfHwgX2N1cnJab29tTGV2ZWwgPT09IHNlbGYuY3Vyckl0ZW0uaW5pdGlhbFpvb21MZXZlbCkge1xuXG5cblx0XHRcdGlmKCFfY3Vyclpvb21FbGVtZW50U3R5bGUpIHtcblx0XHRcdFx0XG5cdFx0XHRcdG5ld01haW5TY3JvbGxQb3MgPSBuZXdNYWluU2Nyb2xsUG9zaXRpb247XG5cblx0XHRcdH0gZWxzZSBpZihfZGlyZWN0aW9uID09PSAnaCcgJiYgYXhpcyA9PT0gJ3gnICYmICFfem9vbVN0YXJ0ZWQgKSB7XG5cdFx0XHRcdFxuXHRcdFx0XHRpZihkaXIpIHtcblx0XHRcdFx0XHRpZihuZXdPZmZzZXQgPiBfY3VyclBhbkJvdW5kcy5taW5bYXhpc10pIHtcblx0XHRcdFx0XHRcdHBhbkZyaWN0aW9uID0gX29wdGlvbnMucGFuRW5kRnJpY3Rpb247XG5cdFx0XHRcdFx0XHRvdmVyRGlmZiA9IF9jdXJyUGFuQm91bmRzLm1pbltheGlzXSAtIG5ld09mZnNldDtcblx0XHRcdFx0XHRcdHN0YXJ0T3ZlckRpZmYgPSBfY3VyclBhbkJvdW5kcy5taW5bYXhpc10gLSBfc3RhcnRQYW5PZmZzZXRbYXhpc107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdC8vIGRyYWcgcmlnaHRcblx0XHRcdFx0XHRpZiggKHN0YXJ0T3ZlckRpZmYgPD0gMCB8fCBtYWluU2Nyb2xsRGlmZiA8IDApICYmIF9nZXROdW1JdGVtcygpID4gMSApIHtcblx0XHRcdFx0XHRcdG5ld01haW5TY3JvbGxQb3MgPSBuZXdNYWluU2Nyb2xsUG9zaXRpb247XG5cdFx0XHRcdFx0XHRpZihtYWluU2Nyb2xsRGlmZiA8IDAgJiYgbmV3TWFpblNjcm9sbFBvc2l0aW9uID4gX3N0YXJ0TWFpblNjcm9sbFBvcy54KSB7XG5cdFx0XHRcdFx0XHRcdG5ld01haW5TY3JvbGxQb3MgPSBfc3RhcnRNYWluU2Nyb2xsUG9zLng7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmKF9jdXJyUGFuQm91bmRzLm1pbi54ICE9PSBfY3VyclBhbkJvdW5kcy5tYXgueCkge1xuXHRcdFx0XHRcdFx0XHRuZXdQYW5Qb3MgPSBuZXdPZmZzZXQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGlmKG5ld09mZnNldCA8IF9jdXJyUGFuQm91bmRzLm1heFtheGlzXSApIHtcblx0XHRcdFx0XHRcdHBhbkZyaWN0aW9uID1fb3B0aW9ucy5wYW5FbmRGcmljdGlvbjtcblx0XHRcdFx0XHRcdG92ZXJEaWZmID0gbmV3T2Zmc2V0IC0gX2N1cnJQYW5Cb3VuZHMubWF4W2F4aXNdO1xuXHRcdFx0XHRcdFx0c3RhcnRPdmVyRGlmZiA9IF9zdGFydFBhbk9mZnNldFtheGlzXSAtIF9jdXJyUGFuQm91bmRzLm1heFtheGlzXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiggKHN0YXJ0T3ZlckRpZmYgPD0gMCB8fCBtYWluU2Nyb2xsRGlmZiA+IDApICYmIF9nZXROdW1JdGVtcygpID4gMSApIHtcblx0XHRcdFx0XHRcdG5ld01haW5TY3JvbGxQb3MgPSBuZXdNYWluU2Nyb2xsUG9zaXRpb247XG5cblx0XHRcdFx0XHRcdGlmKG1haW5TY3JvbGxEaWZmID4gMCAmJiBuZXdNYWluU2Nyb2xsUG9zaXRpb24gPCBfc3RhcnRNYWluU2Nyb2xsUG9zLngpIHtcblx0XHRcdFx0XHRcdFx0bmV3TWFpblNjcm9sbFBvcyA9IF9zdGFydE1haW5TY3JvbGxQb3MueDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZihfY3VyclBhbkJvdW5kcy5taW4ueCAhPT0gX2N1cnJQYW5Cb3VuZHMubWF4LngpIHtcblx0XHRcdFx0XHRcdFx0bmV3UGFuUG9zID0gbmV3T2Zmc2V0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblxuXHRcdFx0XHQvL1xuXHRcdFx0fVxuXG5cdFx0XHRpZihheGlzID09PSAneCcpIHtcblxuXHRcdFx0XHRpZihuZXdNYWluU2Nyb2xsUG9zICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRfbW92ZU1haW5TY3JvbGwobmV3TWFpblNjcm9sbFBvcywgdHJ1ZSk7XG5cdFx0XHRcdFx0aWYobmV3TWFpblNjcm9sbFBvcyA9PT0gX3N0YXJ0TWFpblNjcm9sbFBvcy54KSB7XG5cdFx0XHRcdFx0XHRfbWFpblNjcm9sbFNoaWZ0ZWQgPSBmYWxzZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0X21haW5TY3JvbGxTaGlmdGVkID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihfY3VyclBhbkJvdW5kcy5taW4ueCAhPT0gX2N1cnJQYW5Cb3VuZHMubWF4LngpIHtcblx0XHRcdFx0XHRpZihuZXdQYW5Qb3MgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0X3Bhbk9mZnNldC54ID0gbmV3UGFuUG9zO1xuXHRcdFx0XHRcdH0gZWxzZSBpZighX21haW5TY3JvbGxTaGlmdGVkKSB7XG5cdFx0XHRcdFx0XHRfcGFuT2Zmc2V0LnggKz0gZGVsdGEueCAqIHBhbkZyaWN0aW9uO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBuZXdNYWluU2Nyb2xsUG9zICE9PSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZighX21haW5TY3JvbGxBbmltYXRpbmcpIHtcblx0XHRcdFxuXHRcdFx0aWYoIV9tYWluU2Nyb2xsU2hpZnRlZCkge1xuXHRcdFx0XHRpZihfY3Vyclpvb21MZXZlbCA+IHNlbGYuY3Vyckl0ZW0uZml0UmF0aW8pIHtcblx0XHRcdFx0XHRfcGFuT2Zmc2V0W2F4aXNdICs9IGRlbHRhW2F4aXNdICogcGFuRnJpY3Rpb247XG5cdFx0XHRcdFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdFxuXHRcdH1cblx0XHRcblx0fSxcblxuXHQvLyBQb2ludGVyZG93bi90b3VjaHN0YXJ0L21vdXNlZG93biBoYW5kbGVyXG5cdF9vbkRyYWdTdGFydCA9IGZ1bmN0aW9uKGUpIHtcblxuXHRcdC8vIEFsbG93IGRyYWdnaW5nIG9ubHkgdmlhIGxlZnQgbW91c2UgYnV0dG9uLlxuXHRcdC8vIEFzIHRoaXMgaGFuZGxlciBpcyBub3QgYWRkZWQgaW4gSUU4IC0gd2UgaWdub3JlIGUud2hpY2hcblx0XHQvLyBcblx0XHQvLyBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2pzL2V2ZW50c19wcm9wZXJ0aWVzLmh0bWxcblx0XHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvZXZlbnQuYnV0dG9uXG5cdFx0aWYoZS50eXBlID09PSAnbW91c2Vkb3duJyAmJiBlLmJ1dHRvbiA+IDAgICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmKF9pbml0aWFsWm9vbVJ1bm5pbmcpIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZihfb2xkQW5kcm9pZFRvdWNoRW5kVGltZW91dCAmJiBlLnR5cGUgPT09ICdtb3VzZWRvd24nKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYoX3ByZXZlbnREZWZhdWx0RXZlbnRCZWhhdmlvdXIoZSwgdHJ1ZSkpIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cblxuXG5cdFx0X3Nob3V0KCdwb2ludGVyRG93bicpO1xuXG5cdFx0aWYoX3BvaW50ZXJFdmVudEVuYWJsZWQpIHtcblx0XHRcdHZhciBwb2ludGVySW5kZXggPSBmcmFtZXdvcmsuYXJyYXlTZWFyY2goX2N1cnJQb2ludGVycywgZS5wb2ludGVySWQsICdpZCcpO1xuXHRcdFx0aWYocG9pbnRlckluZGV4IDwgMCkge1xuXHRcdFx0XHRwb2ludGVySW5kZXggPSBfY3VyclBvaW50ZXJzLmxlbmd0aDtcblx0XHRcdH1cblx0XHRcdF9jdXJyUG9pbnRlcnNbcG9pbnRlckluZGV4XSA9IHt4OmUucGFnZVgsIHk6ZS5wYWdlWSwgaWQ6IGUucG9pbnRlcklkfTtcblx0XHR9XG5cdFx0XG5cblxuXHRcdHZhciBzdGFydFBvaW50c0xpc3QgPSBfZ2V0VG91Y2hQb2ludHMoZSksXG5cdFx0XHRudW1Qb2ludHMgPSBzdGFydFBvaW50c0xpc3QubGVuZ3RoO1xuXG5cdFx0X2N1cnJlbnRQb2ludHMgPSBudWxsO1xuXG5cdFx0X3N0b3BBbGxBbmltYXRpb25zKCk7XG5cblx0XHQvLyBpbml0IGRyYWdcblx0XHRpZighX2lzRHJhZ2dpbmcgfHwgbnVtUG9pbnRzID09PSAxKSB7XG5cblx0XHRcdFxuXG5cdFx0XHRfaXNEcmFnZ2luZyA9IF9pc0ZpcnN0TW92ZSA9IHRydWU7XG5cdFx0XHRmcmFtZXdvcmsuYmluZCh3aW5kb3csIF91cE1vdmVFdmVudHMsIHNlbGYpO1xuXG5cdFx0XHRfaXNab29taW5nSW4gPSBcblx0XHRcdFx0X3dhc092ZXJJbml0aWFsWm9vbSA9IFxuXHRcdFx0XHRfb3BhY2l0eUNoYW5nZWQgPSBcblx0XHRcdFx0X3ZlcnRpY2FsRHJhZ0luaXRpYXRlZCA9IFxuXHRcdFx0XHRfbWFpblNjcm9sbFNoaWZ0ZWQgPSBcblx0XHRcdFx0X21vdmVkID0gXG5cdFx0XHRcdF9pc011bHRpdG91Y2ggPSBcblx0XHRcdFx0X3pvb21TdGFydGVkID0gZmFsc2U7XG5cblx0XHRcdF9kaXJlY3Rpb24gPSBudWxsO1xuXG5cdFx0XHRfc2hvdXQoJ2ZpcnN0VG91Y2hTdGFydCcsIHN0YXJ0UG9pbnRzTGlzdCk7XG5cblx0XHRcdF9lcXVhbGl6ZVBvaW50cyhfc3RhcnRQYW5PZmZzZXQsIF9wYW5PZmZzZXQpO1xuXG5cdFx0XHRfY3VyclBhbkRpc3QueCA9IF9jdXJyUGFuRGlzdC55ID0gMDtcblx0XHRcdF9lcXVhbGl6ZVBvaW50cyhfY3VyclBvaW50LCBzdGFydFBvaW50c0xpc3RbMF0pO1xuXHRcdFx0X2VxdWFsaXplUG9pbnRzKF9zdGFydFBvaW50LCBfY3VyclBvaW50KTtcblxuXHRcdFx0Ly9fZXF1YWxpemVQb2ludHMoX3N0YXJ0TWFpblNjcm9sbFBvcywgX21haW5TY3JvbGxQb3MpO1xuXHRcdFx0X3N0YXJ0TWFpblNjcm9sbFBvcy54ID0gX3NsaWRlU2l6ZS54ICogX2N1cnJQb3NpdGlvbkluZGV4O1xuXG5cdFx0XHRfcG9zUG9pbnRzID0gW3tcblx0XHRcdFx0eDogX2N1cnJQb2ludC54LFxuXHRcdFx0XHR5OiBfY3VyclBvaW50Lnlcblx0XHRcdH1dO1xuXG5cdFx0XHRfZ2VzdHVyZUNoZWNrU3BlZWRUaW1lID0gX2dlc3R1cmVTdGFydFRpbWUgPSBfZ2V0Q3VycmVudFRpbWUoKTtcblxuXHRcdFx0Ly9fbWFpblNjcm9sbEFuaW1hdGlvbkVuZCh0cnVlKTtcblx0XHRcdF9jYWxjdWxhdGVQYW5Cb3VuZHMoIF9jdXJyWm9vbUxldmVsLCB0cnVlICk7XG5cdFx0XHRcblx0XHRcdC8vIFN0YXJ0IHJlbmRlcmluZ1xuXHRcdFx0X3N0b3BEcmFnVXBkYXRlTG9vcCgpO1xuXHRcdFx0X2RyYWdVcGRhdGVMb29wKCk7XG5cdFx0XHRcblx0XHR9XG5cblx0XHQvLyBpbml0IHpvb21cblx0XHRpZighX2lzWm9vbWluZyAmJiBudW1Qb2ludHMgPiAxICYmICFfbWFpblNjcm9sbEFuaW1hdGluZyAmJiAhX21haW5TY3JvbGxTaGlmdGVkKSB7XG5cdFx0XHRfc3RhcnRab29tTGV2ZWwgPSBfY3Vyclpvb21MZXZlbDtcblx0XHRcdF96b29tU3RhcnRlZCA9IGZhbHNlOyAvLyB0cnVlIGlmIHpvb20gY2hhbmdlZCBhdCBsZWFzdCBvbmNlXG5cblx0XHRcdF9pc1pvb21pbmcgPSBfaXNNdWx0aXRvdWNoID0gdHJ1ZTtcblx0XHRcdF9jdXJyUGFuRGlzdC55ID0gX2N1cnJQYW5EaXN0LnggPSAwO1xuXG5cdFx0XHRfZXF1YWxpemVQb2ludHMoX3N0YXJ0UGFuT2Zmc2V0LCBfcGFuT2Zmc2V0KTtcblxuXHRcdFx0X2VxdWFsaXplUG9pbnRzKHAsIHN0YXJ0UG9pbnRzTGlzdFswXSk7XG5cdFx0XHRfZXF1YWxpemVQb2ludHMocDIsIHN0YXJ0UG9pbnRzTGlzdFsxXSk7XG5cblx0XHRcdF9maW5kQ2VudGVyT2ZQb2ludHMocCwgcDIsIF9jdXJyQ2VudGVyUG9pbnQpO1xuXG5cdFx0XHRfbWlkWm9vbVBvaW50LnggPSBNYXRoLmFicyhfY3VyckNlbnRlclBvaW50LngpIC0gX3Bhbk9mZnNldC54O1xuXHRcdFx0X21pZFpvb21Qb2ludC55ID0gTWF0aC5hYnMoX2N1cnJDZW50ZXJQb2ludC55KSAtIF9wYW5PZmZzZXQueTtcblx0XHRcdF9jdXJyUG9pbnRzRGlzdGFuY2UgPSBfc3RhcnRQb2ludHNEaXN0YW5jZSA9IF9jYWxjdWxhdGVQb2ludHNEaXN0YW5jZShwLCBwMik7XG5cdFx0fVxuXG5cblx0fSxcblxuXHQvLyBQb2ludGVybW92ZS90b3VjaG1vdmUvbW91c2Vtb3ZlIGhhbmRsZXJcblx0X29uRHJhZ01vdmUgPSBmdW5jdGlvbihlKSB7XG5cblx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRpZihfcG9pbnRlckV2ZW50RW5hYmxlZCkge1xuXHRcdFx0dmFyIHBvaW50ZXJJbmRleCA9IGZyYW1ld29yay5hcnJheVNlYXJjaChfY3VyclBvaW50ZXJzLCBlLnBvaW50ZXJJZCwgJ2lkJyk7XG5cdFx0XHRpZihwb2ludGVySW5kZXggPiAtMSkge1xuXHRcdFx0XHR2YXIgcCA9IF9jdXJyUG9pbnRlcnNbcG9pbnRlckluZGV4XTtcblx0XHRcdFx0cC54ID0gZS5wYWdlWDtcblx0XHRcdFx0cC55ID0gZS5wYWdlWTsgXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoX2lzRHJhZ2dpbmcpIHtcblx0XHRcdHZhciB0b3VjaGVzTGlzdCA9IF9nZXRUb3VjaFBvaW50cyhlKTtcblx0XHRcdGlmKCFfZGlyZWN0aW9uICYmICFfbW92ZWQgJiYgIV9pc1pvb21pbmcpIHtcblxuXHRcdFx0XHRpZihfbWFpblNjcm9sbFBvcy54ICE9PSBfc2xpZGVTaXplLnggKiBfY3VyclBvc2l0aW9uSW5kZXgpIHtcblx0XHRcdFx0XHQvLyBpZiBtYWluIHNjcm9sbCBwb3NpdGlvbiBpcyBzaGlmdGVkIOKAkyBkaXJlY3Rpb24gaXMgYWx3YXlzIGhvcml6b250YWxcblx0XHRcdFx0XHRfZGlyZWN0aW9uID0gJ2gnO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciBkaWZmID0gTWF0aC5hYnModG91Y2hlc0xpc3RbMF0ueCAtIF9jdXJyUG9pbnQueCkgLSBNYXRoLmFicyh0b3VjaGVzTGlzdFswXS55IC0gX2N1cnJQb2ludC55KTtcblx0XHRcdFx0XHQvLyBjaGVjayB0aGUgZGlyZWN0aW9uIG9mIG1vdmVtZW50XG5cdFx0XHRcdFx0aWYoTWF0aC5hYnMoZGlmZikgPj0gRElSRUNUSU9OX0NIRUNLX09GRlNFVCkge1xuXHRcdFx0XHRcdFx0X2RpcmVjdGlvbiA9IGRpZmYgPiAwID8gJ2gnIDogJ3YnO1xuXHRcdFx0XHRcdFx0X2N1cnJlbnRQb2ludHMgPSB0b3VjaGVzTGlzdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRfY3VycmVudFBvaW50cyA9IHRvdWNoZXNMaXN0O1xuXHRcdFx0fVxuXHRcdH1cdFxuXHR9LFxuXHQvLyBcblx0X3JlbmRlck1vdmVtZW50ID0gIGZ1bmN0aW9uKCkge1xuXG5cdFx0aWYoIV9jdXJyZW50UG9pbnRzKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIG51bVBvaW50cyA9IF9jdXJyZW50UG9pbnRzLmxlbmd0aDtcblxuXHRcdGlmKG51bVBvaW50cyA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdF9lcXVhbGl6ZVBvaW50cyhwLCBfY3VycmVudFBvaW50c1swXSk7XG5cblx0XHRkZWx0YS54ID0gcC54IC0gX2N1cnJQb2ludC54O1xuXHRcdGRlbHRhLnkgPSBwLnkgLSBfY3VyclBvaW50Lnk7XG5cblx0XHRpZihfaXNab29taW5nICYmIG51bVBvaW50cyA+IDEpIHtcblx0XHRcdC8vIEhhbmRsZSBiZWhhdmlvdXIgZm9yIG1vcmUgdGhhbiAxIHBvaW50XG5cblx0XHRcdF9jdXJyUG9pbnQueCA9IHAueDtcblx0XHRcdF9jdXJyUG9pbnQueSA9IHAueTtcblx0XHRcblx0XHRcdC8vIGNoZWNrIGlmIG9uZSBvZiB0d28gcG9pbnRzIGNoYW5nZWRcblx0XHRcdGlmKCAhZGVsdGEueCAmJiAhZGVsdGEueSAmJiBfaXNFcXVhbFBvaW50cyhfY3VycmVudFBvaW50c1sxXSwgcDIpICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdF9lcXVhbGl6ZVBvaW50cyhwMiwgX2N1cnJlbnRQb2ludHNbMV0pO1xuXG5cblx0XHRcdGlmKCFfem9vbVN0YXJ0ZWQpIHtcblx0XHRcdFx0X3pvb21TdGFydGVkID0gdHJ1ZTtcblx0XHRcdFx0X3Nob3V0KCd6b29tR2VzdHVyZVN0YXJ0ZWQnKTtcblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0Ly8gRGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzXG5cdFx0XHR2YXIgcG9pbnRzRGlzdGFuY2UgPSBfY2FsY3VsYXRlUG9pbnRzRGlzdGFuY2UocCxwMik7XG5cblx0XHRcdHZhciB6b29tTGV2ZWwgPSBfY2FsY3VsYXRlWm9vbUxldmVsKHBvaW50c0Rpc3RhbmNlKTtcblxuXHRcdFx0Ly8gc2xpZ2h0bHkgb3ZlciB0aGUgb2YgaW5pdGlhbCB6b29tIGxldmVsXG5cdFx0XHRpZih6b29tTGV2ZWwgPiBzZWxmLmN1cnJJdGVtLmluaXRpYWxab29tTGV2ZWwgKyBzZWxmLmN1cnJJdGVtLmluaXRpYWxab29tTGV2ZWwgLyAxNSkge1xuXHRcdFx0XHRfd2FzT3ZlckluaXRpYWxab29tID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQXBwbHkgdGhlIGZyaWN0aW9uIGlmIHpvb20gbGV2ZWwgaXMgb3V0IG9mIHRoZSBib3VuZHNcblx0XHRcdHZhciB6b29tRnJpY3Rpb24gPSAxLFxuXHRcdFx0XHRtaW5ab29tTGV2ZWwgPSBfZ2V0TWluWm9vbUxldmVsKCksXG5cdFx0XHRcdG1heFpvb21MZXZlbCA9IF9nZXRNYXhab29tTGV2ZWwoKTtcblxuXHRcdFx0aWYgKCB6b29tTGV2ZWwgPCBtaW5ab29tTGV2ZWwgKSB7XG5cdFx0XHRcdFxuXHRcdFx0XHRpZihfb3B0aW9ucy5waW5jaFRvQ2xvc2UgJiYgIV93YXNPdmVySW5pdGlhbFpvb20gJiYgX3N0YXJ0Wm9vbUxldmVsIDw9IHNlbGYuY3Vyckl0ZW0uaW5pdGlhbFpvb21MZXZlbCkge1xuXHRcdFx0XHRcdC8vIGZhZGUgb3V0IGJhY2tncm91bmQgaWYgem9vbWluZyBvdXRcblx0XHRcdFx0XHR2YXIgbWludXNEaWZmID0gbWluWm9vbUxldmVsIC0gem9vbUxldmVsO1xuXHRcdFx0XHRcdHZhciBwZXJjZW50ID0gMSAtIG1pbnVzRGlmZiAvIChtaW5ab29tTGV2ZWwgLyAxLjIpO1xuXG5cdFx0XHRcdFx0X2FwcGx5QmdPcGFjaXR5KHBlcmNlbnQpO1xuXHRcdFx0XHRcdF9zaG91dCgnb25QaW5jaENsb3NlJywgcGVyY2VudCk7XG5cdFx0XHRcdFx0X29wYWNpdHlDaGFuZ2VkID0gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR6b29tRnJpY3Rpb24gPSAobWluWm9vbUxldmVsIC0gem9vbUxldmVsKSAvIG1pblpvb21MZXZlbDtcblx0XHRcdFx0XHRpZih6b29tRnJpY3Rpb24gPiAxKSB7XG5cdFx0XHRcdFx0XHR6b29tRnJpY3Rpb24gPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR6b29tTGV2ZWwgPSBtaW5ab29tTGV2ZWwgLSB6b29tRnJpY3Rpb24gKiAobWluWm9vbUxldmVsIC8gMyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHR9IGVsc2UgaWYgKCB6b29tTGV2ZWwgPiBtYXhab29tTGV2ZWwgKSB7XG5cdFx0XHRcdC8vIDEuNSAtIGV4dHJhIHpvb20gbGV2ZWwgYWJvdmUgdGhlIG1heC4gRS5nLiBpZiBtYXggaXMgeDYsIHJlYWwgbWF4IDYgKyAxLjUgPSA3LjVcblx0XHRcdFx0em9vbUZyaWN0aW9uID0gKHpvb21MZXZlbCAtIG1heFpvb21MZXZlbCkgLyAoIG1pblpvb21MZXZlbCAqIDYgKTtcblx0XHRcdFx0aWYoem9vbUZyaWN0aW9uID4gMSkge1xuXHRcdFx0XHRcdHpvb21GcmljdGlvbiA9IDE7XG5cdFx0XHRcdH1cblx0XHRcdFx0em9vbUxldmVsID0gbWF4Wm9vbUxldmVsICsgem9vbUZyaWN0aW9uICogbWluWm9vbUxldmVsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZih6b29tRnJpY3Rpb24gPCAwKSB7XG5cdFx0XHRcdHpvb21GcmljdGlvbiA9IDA7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGRpc3RhbmNlIGJldHdlZW4gdG91Y2ggcG9pbnRzIGFmdGVyIGZyaWN0aW9uIGlzIGFwcGxpZWRcblx0XHRcdF9jdXJyUG9pbnRzRGlzdGFuY2UgPSBwb2ludHNEaXN0YW5jZTtcblxuXHRcdFx0Ly8gX2NlbnRlclBvaW50IC0gVGhlIHBvaW50IGluIHRoZSBtaWRkbGUgb2YgdHdvIHBvaW50ZXJzXG5cdFx0XHRfZmluZENlbnRlck9mUG9pbnRzKHAsIHAyLCBfY2VudGVyUG9pbnQpO1xuXHRcdFxuXHRcdFx0Ly8gcGFuaW5nIHdpdGggdHdvIHBvaW50ZXJzIHByZXNzZWRcblx0XHRcdF9jdXJyUGFuRGlzdC54ICs9IF9jZW50ZXJQb2ludC54IC0gX2N1cnJDZW50ZXJQb2ludC54O1xuXHRcdFx0X2N1cnJQYW5EaXN0LnkgKz0gX2NlbnRlclBvaW50LnkgLSBfY3VyckNlbnRlclBvaW50Lnk7XG5cdFx0XHRfZXF1YWxpemVQb2ludHMoX2N1cnJDZW50ZXJQb2ludCwgX2NlbnRlclBvaW50KTtcblxuXHRcdFx0X3Bhbk9mZnNldC54ID0gX2NhbGN1bGF0ZVBhbk9mZnNldCgneCcsIHpvb21MZXZlbCk7XG5cdFx0XHRfcGFuT2Zmc2V0LnkgPSBfY2FsY3VsYXRlUGFuT2Zmc2V0KCd5Jywgem9vbUxldmVsKTtcblxuXHRcdFx0X2lzWm9vbWluZ0luID0gem9vbUxldmVsID4gX2N1cnJab29tTGV2ZWw7XG5cdFx0XHRfY3Vyclpvb21MZXZlbCA9IHpvb21MZXZlbDtcblx0XHRcdF9hcHBseUN1cnJlbnRab29tUGFuKCk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBoYW5kbGUgYmVoYXZpb3VyIGZvciBvbmUgcG9pbnQgKGRyYWdnaW5nIG9yIHBhbm5pbmcpXG5cblx0XHRcdGlmKCFfZGlyZWN0aW9uKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYoX2lzRmlyc3RNb3ZlKSB7XG5cdFx0XHRcdF9pc0ZpcnN0TW92ZSA9IGZhbHNlO1xuXG5cdFx0XHRcdC8vIHN1YnRyYWN0IGRyYWcgZGlzdGFuY2UgdGhhdCB3YXMgdXNlZCBkdXJpbmcgdGhlIGRldGVjdGlvbiBkaXJlY3Rpb24gIFxuXG5cdFx0XHRcdGlmKCBNYXRoLmFicyhkZWx0YS54KSA+PSBESVJFQ1RJT05fQ0hFQ0tfT0ZGU0VUKSB7XG5cdFx0XHRcdFx0ZGVsdGEueCAtPSBfY3VycmVudFBvaW50c1swXS54IC0gX3N0YXJ0UG9pbnQueDtcblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdFx0aWYoIE1hdGguYWJzKGRlbHRhLnkpID49IERJUkVDVElPTl9DSEVDS19PRkZTRVQpIHtcblx0XHRcdFx0XHRkZWx0YS55IC09IF9jdXJyZW50UG9pbnRzWzBdLnkgLSBfc3RhcnRQb2ludC55O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdF9jdXJyUG9pbnQueCA9IHAueDtcblx0XHRcdF9jdXJyUG9pbnQueSA9IHAueTtcblxuXHRcdFx0Ly8gZG8gbm90aGluZyBpZiBwb2ludGVycyBwb3NpdGlvbiBoYXNuJ3QgY2hhbmdlZFxuXHRcdFx0aWYoZGVsdGEueCA9PT0gMCAmJiBkZWx0YS55ID09PSAwKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYoX2RpcmVjdGlvbiA9PT0gJ3YnICYmIF9vcHRpb25zLmNsb3NlT25WZXJ0aWNhbERyYWcpIHtcblx0XHRcdFx0aWYoIV9jYW5QYW4oKSkge1xuXHRcdFx0XHRcdF9jdXJyUGFuRGlzdC55ICs9IGRlbHRhLnk7XG5cdFx0XHRcdFx0X3Bhbk9mZnNldC55ICs9IGRlbHRhLnk7XG5cblx0XHRcdFx0XHR2YXIgb3BhY2l0eVJhdGlvID0gX2NhbGN1bGF0ZVZlcnRpY2FsRHJhZ09wYWNpdHlSYXRpbygpO1xuXG5cdFx0XHRcdFx0X3ZlcnRpY2FsRHJhZ0luaXRpYXRlZCA9IHRydWU7XG5cdFx0XHRcdFx0X3Nob3V0KCdvblZlcnRpY2FsRHJhZycsIG9wYWNpdHlSYXRpbyk7XG5cblx0XHRcdFx0XHRfYXBwbHlCZ09wYWNpdHkob3BhY2l0eVJhdGlvKTtcblx0XHRcdFx0XHRfYXBwbHlDdXJyZW50Wm9vbVBhbigpO1xuXHRcdFx0XHRcdHJldHVybiA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0X3B1c2hQb3NQb2ludChfZ2V0Q3VycmVudFRpbWUoKSwgcC54LCBwLnkpO1xuXG5cdFx0XHRfbW92ZWQgPSB0cnVlO1xuXHRcdFx0X2N1cnJQYW5Cb3VuZHMgPSBzZWxmLmN1cnJJdGVtLmJvdW5kcztcblx0XHRcdFxuXHRcdFx0dmFyIG1haW5TY3JvbGxDaGFuZ2VkID0gX3Bhbk9yTW92ZU1haW5TY3JvbGwoJ3gnLCBkZWx0YSk7XG5cdFx0XHRpZighbWFpblNjcm9sbENoYW5nZWQpIHtcblx0XHRcdFx0X3Bhbk9yTW92ZU1haW5TY3JvbGwoJ3knLCBkZWx0YSk7XG5cblx0XHRcdFx0X3JvdW5kUG9pbnQoX3Bhbk9mZnNldCk7XG5cdFx0XHRcdF9hcHBseUN1cnJlbnRab29tUGFuKCk7XG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fSxcblx0XG5cdC8vIFBvaW50ZXJ1cC9wb2ludGVyY2FuY2VsL3RvdWNoZW5kL3RvdWNoY2FuY2VsL21vdXNldXAgZXZlbnQgaGFuZGxlclxuXHRfb25EcmFnUmVsZWFzZSA9IGZ1bmN0aW9uKGUpIHtcblxuXHRcdGlmKF9mZWF0dXJlcy5pc09sZEFuZHJvaWQgKSB7XG5cblx0XHRcdGlmKF9vbGRBbmRyb2lkVG91Y2hFbmRUaW1lb3V0ICYmIGUudHlwZSA9PT0gJ21vdXNldXAnKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gb24gQW5kcm9pZCAodjQuMSwgNC4yLCA0LjMgJiBwb3NzaWJseSBvbGRlcikgXG5cdFx0XHQvLyBnaG9zdCBtb3VzZWRvd24vdXAgZXZlbnQgaXNuJ3QgcHJldmVudGFibGUgdmlhIGUucHJldmVudERlZmF1bHQsXG5cdFx0XHQvLyB3aGljaCBjYXVzZXMgZmFrZSBtb3VzZWRvd24gZXZlbnRcblx0XHRcdC8vIHNvIHdlIGJsb2NrIG1vdXNlZG93bi91cCBmb3IgNjAwbXNcblx0XHRcdGlmKCBlLnR5cGUuaW5kZXhPZigndG91Y2gnKSA+IC0xICkge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQoX29sZEFuZHJvaWRUb3VjaEVuZFRpbWVvdXQpO1xuXHRcdFx0XHRfb2xkQW5kcm9pZFRvdWNoRW5kVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0X29sZEFuZHJvaWRUb3VjaEVuZFRpbWVvdXQgPSAwO1xuXHRcdFx0XHR9LCA2MDApO1xuXHRcdFx0fVxuXHRcdFx0XG5cdFx0fVxuXG5cdFx0X3Nob3V0KCdwb2ludGVyVXAnKTtcblxuXHRcdGlmKF9wcmV2ZW50RGVmYXVsdEV2ZW50QmVoYXZpb3VyKGUsIGZhbHNlKSkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblxuXHRcdHZhciByZWxlYXNlUG9pbnQ7XG5cblx0XHRpZihfcG9pbnRlckV2ZW50RW5hYmxlZCkge1xuXHRcdFx0dmFyIHBvaW50ZXJJbmRleCA9IGZyYW1ld29yay5hcnJheVNlYXJjaChfY3VyclBvaW50ZXJzLCBlLnBvaW50ZXJJZCwgJ2lkJyk7XG5cdFx0XHRcblx0XHRcdGlmKHBvaW50ZXJJbmRleCA+IC0xKSB7XG5cdFx0XHRcdHJlbGVhc2VQb2ludCA9IF9jdXJyUG9pbnRlcnMuc3BsaWNlKHBvaW50ZXJJbmRleCwgMSlbMF07XG5cblx0XHRcdFx0aWYobmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpIHtcblx0XHRcdFx0XHR2YXIgTVNQT0lOVEVSX1RZUEVTID0ge1xuXHRcdFx0XHRcdFx0NDogJ21vdXNlJywgLy8gZXZlbnQuTVNQT0lOVEVSX1RZUEVfTU9VU0Vcblx0XHRcdFx0XHRcdDI6ICd0b3VjaCcsIC8vIGV2ZW50Lk1TUE9JTlRFUl9UWVBFX1RPVUNIIFxuXHRcdFx0XHRcdFx0MzogJ3BlbicgLy8gZXZlbnQuTVNQT0lOVEVSX1RZUEVfUEVOXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRyZWxlYXNlUG9pbnQudHlwZSA9IE1TUE9JTlRFUl9UWVBFU1tlLnBvaW50ZXJUeXBlXTtcblxuXHRcdFx0XHRcdGlmKCFyZWxlYXNlUG9pbnQudHlwZSkge1xuXHRcdFx0XHRcdFx0cmVsZWFzZVBvaW50LnR5cGUgPSBlLnBvaW50ZXJUeXBlIHx8ICdtb3VzZSc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlbGVhc2VQb2ludC50eXBlID0gZS5wb2ludGVyVHlwZSB8fCAnbW91c2UnO1xuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgdG91Y2hMaXN0ID0gX2dldFRvdWNoUG9pbnRzKGUpLFxuXHRcdFx0Z2VzdHVyZVR5cGUsXG5cdFx0XHRudW1Qb2ludHMgPSB0b3VjaExpc3QubGVuZ3RoO1xuXG5cdFx0aWYoZS50eXBlID09PSAnbW91c2V1cCcpIHtcblx0XHRcdG51bVBvaW50cyA9IDA7XG5cdFx0fVxuXG5cdFx0Ly8gRG8gbm90aGluZyBpZiB0aGVyZSB3ZXJlIDMgdG91Y2ggcG9pbnRzIG9yIG1vcmVcblx0XHRpZihudW1Qb2ludHMgPT09IDIpIHtcblx0XHRcdF9jdXJyZW50UG9pbnRzID0gbnVsbDtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIGlmIHNlY29uZCBwb2ludGVyIHJlbGVhc2VkXG5cdFx0aWYobnVtUG9pbnRzID09PSAxKSB7XG5cdFx0XHRfZXF1YWxpemVQb2ludHMoX3N0YXJ0UG9pbnQsIHRvdWNoTGlzdFswXSk7XG5cdFx0fVx0XHRcdFx0XG5cblxuXHRcdC8vIHBvaW50ZXIgaGFzbid0IG1vdmVkLCBzZW5kIFwidGFwIHJlbGVhc2VcIiBwb2ludFxuXHRcdGlmKG51bVBvaW50cyA9PT0gMCAmJiAhX2RpcmVjdGlvbiAmJiAhX21haW5TY3JvbGxBbmltYXRpbmcpIHtcblx0XHRcdGlmKCFyZWxlYXNlUG9pbnQpIHtcblx0XHRcdFx0aWYoZS50eXBlID09PSAnbW91c2V1cCcpIHtcblx0XHRcdFx0XHRyZWxlYXNlUG9pbnQgPSB7eDogZS5wYWdlWCwgeTogZS5wYWdlWSwgdHlwZTonbW91c2UnfTtcblx0XHRcdFx0fSBlbHNlIGlmKGUuY2hhbmdlZFRvdWNoZXMgJiYgZS5jaGFuZ2VkVG91Y2hlc1swXSkge1xuXHRcdFx0XHRcdHJlbGVhc2VQb2ludCA9IHt4OiBlLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYLCB5OiBlLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VZLCB0eXBlOid0b3VjaCd9O1xuXHRcdFx0XHR9XHRcdFxuXHRcdFx0fVxuXG5cdFx0XHRfc2hvdXQoJ3RvdWNoUmVsZWFzZScsIGUsIHJlbGVhc2VQb2ludCk7XG5cdFx0fVxuXG5cdFx0Ly8gRGlmZmVyZW5jZSBpbiB0aW1lIGJldHdlZW4gcmVsZWFzaW5nIG9mIHR3byBsYXN0IHRvdWNoIHBvaW50cyAoem9vbSBnZXN0dXJlKVxuXHRcdHZhciByZWxlYXNlVGltZURpZmYgPSAtMTtcblxuXHRcdC8vIEdlc3R1cmUgY29tcGxldGVkLCBubyBwb2ludGVycyBsZWZ0XG5cdFx0aWYobnVtUG9pbnRzID09PSAwKSB7XG5cdFx0XHRfaXNEcmFnZ2luZyA9IGZhbHNlO1xuXHRcdFx0ZnJhbWV3b3JrLnVuYmluZCh3aW5kb3csIF91cE1vdmVFdmVudHMsIHNlbGYpO1xuXG5cdFx0XHRfc3RvcERyYWdVcGRhdGVMb29wKCk7XG5cblx0XHRcdGlmKF9pc1pvb21pbmcpIHtcblx0XHRcdFx0Ly8gVHdvIHBvaW50cyByZWxlYXNlZCBhdCB0aGUgc2FtZSB0aW1lXG5cdFx0XHRcdHJlbGVhc2VUaW1lRGlmZiA9IDA7XG5cdFx0XHR9IGVsc2UgaWYoX2xhc3RSZWxlYXNlVGltZSAhPT0gLTEpIHtcblx0XHRcdFx0cmVsZWFzZVRpbWVEaWZmID0gX2dldEN1cnJlbnRUaW1lKCkgLSBfbGFzdFJlbGVhc2VUaW1lO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRfbGFzdFJlbGVhc2VUaW1lID0gbnVtUG9pbnRzID09PSAxID8gX2dldEN1cnJlbnRUaW1lKCkgOiAtMTtcblx0XHRcblx0XHRpZihyZWxlYXNlVGltZURpZmYgIT09IC0xICYmIHJlbGVhc2VUaW1lRGlmZiA8IDE1MCkge1xuXHRcdFx0Z2VzdHVyZVR5cGUgPSAnem9vbSc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGdlc3R1cmVUeXBlID0gJ3N3aXBlJztcblx0XHR9XG5cblx0XHRpZihfaXNab29taW5nICYmIG51bVBvaW50cyA8IDIpIHtcblx0XHRcdF9pc1pvb21pbmcgPSBmYWxzZTtcblxuXHRcdFx0Ly8gT25seSBzZWNvbmQgcG9pbnQgcmVsZWFzZWRcblx0XHRcdGlmKG51bVBvaW50cyA9PT0gMSkge1xuXHRcdFx0XHRnZXN0dXJlVHlwZSA9ICd6b29tUG9pbnRlclVwJztcblx0XHRcdH1cblx0XHRcdF9zaG91dCgnem9vbUdlc3R1cmVFbmRlZCcpO1xuXHRcdH1cblxuXHRcdF9jdXJyZW50UG9pbnRzID0gbnVsbDtcblx0XHRpZighX21vdmVkICYmICFfem9vbVN0YXJ0ZWQgJiYgIV9tYWluU2Nyb2xsQW5pbWF0aW5nICYmICFfdmVydGljYWxEcmFnSW5pdGlhdGVkKSB7XG5cdFx0XHQvLyBub3RoaW5nIHRvIGFuaW1hdGVcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFxuXHRcdF9zdG9wQWxsQW5pbWF0aW9ucygpO1xuXG5cdFx0XG5cdFx0aWYoIV9yZWxlYXNlQW5pbURhdGEpIHtcblx0XHRcdF9yZWxlYXNlQW5pbURhdGEgPSBfaW5pdERyYWdSZWxlYXNlQW5pbWF0aW9uRGF0YSgpO1xuXHRcdH1cblx0XHRcblx0XHRfcmVsZWFzZUFuaW1EYXRhLmNhbGN1bGF0ZVN3aXBlU3BlZWQoJ3gnKTtcblxuXG5cdFx0aWYoX3ZlcnRpY2FsRHJhZ0luaXRpYXRlZCkge1xuXG5cdFx0XHR2YXIgb3BhY2l0eVJhdGlvID0gX2NhbGN1bGF0ZVZlcnRpY2FsRHJhZ09wYWNpdHlSYXRpbygpO1xuXG5cdFx0XHRpZihvcGFjaXR5UmF0aW8gPCBfb3B0aW9ucy52ZXJ0aWNhbERyYWdSYW5nZSkge1xuXHRcdFx0XHRzZWxmLmNsb3NlKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YXIgaW5pdGFsUGFuWSA9IF9wYW5PZmZzZXQueSxcblx0XHRcdFx0XHRpbml0aWFsQmdPcGFjaXR5ID0gX2JnT3BhY2l0eTtcblxuXHRcdFx0XHRfYW5pbWF0ZVByb3AoJ3ZlcnRpY2FsRHJhZycsIDAsIDEsIDMwMCwgZnJhbWV3b3JrLmVhc2luZy5jdWJpYy5vdXQsIGZ1bmN0aW9uKG5vdykge1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdF9wYW5PZmZzZXQueSA9IChzZWxmLmN1cnJJdGVtLmluaXRpYWxQb3NpdGlvbi55IC0gaW5pdGFsUGFuWSkgKiBub3cgKyBpbml0YWxQYW5ZO1xuXG5cdFx0XHRcdFx0X2FwcGx5QmdPcGFjaXR5KCAgKDEgLSBpbml0aWFsQmdPcGFjaXR5KSAqIG5vdyArIGluaXRpYWxCZ09wYWNpdHkgKTtcblx0XHRcdFx0XHRfYXBwbHlDdXJyZW50Wm9vbVBhbigpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRfc2hvdXQoJ29uVmVydGljYWxEcmFnJywgMSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblxuXHRcdC8vIG1haW4gc2Nyb2xsIFxuXHRcdGlmKCAgKF9tYWluU2Nyb2xsU2hpZnRlZCB8fCBfbWFpblNjcm9sbEFuaW1hdGluZykgJiYgbnVtUG9pbnRzID09PSAwKSB7XG5cdFx0XHR2YXIgaXRlbUNoYW5nZWQgPSBfZmluaXNoU3dpcGVNYWluU2Nyb2xsR2VzdHVyZShnZXN0dXJlVHlwZSwgX3JlbGVhc2VBbmltRGF0YSk7XG5cdFx0XHRpZihpdGVtQ2hhbmdlZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRnZXN0dXJlVHlwZSA9ICd6b29tUG9pbnRlclVwJztcblx0XHR9XG5cblx0XHQvLyBwcmV2ZW50IHpvb20vcGFuIGFuaW1hdGlvbiB3aGVuIG1haW4gc2Nyb2xsIGFuaW1hdGlvbiBydW5zXG5cdFx0aWYoX21haW5TY3JvbGxBbmltYXRpbmcpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0XG5cdFx0Ly8gQ29tcGxldGUgc2ltcGxlIHpvb20gZ2VzdHVyZSAocmVzZXQgem9vbSBsZXZlbCBpZiBpdCdzIG91dCBvZiB0aGUgYm91bmRzKSAgXG5cdFx0aWYoZ2VzdHVyZVR5cGUgIT09ICdzd2lwZScpIHtcblx0XHRcdF9jb21wbGV0ZVpvb21HZXN0dXJlKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcblx0XHQvLyBDb21wbGV0ZSBwYW4gZ2VzdHVyZSBpZiBtYWluIHNjcm9sbCBpcyBub3Qgc2hpZnRlZCwgYW5kIGl0J3MgcG9zc2libGUgdG8gcGFuIGN1cnJlbnQgaW1hZ2Vcblx0XHRpZighX21haW5TY3JvbGxTaGlmdGVkICYmIF9jdXJyWm9vbUxldmVsID4gc2VsZi5jdXJySXRlbS5maXRSYXRpbykge1xuXHRcdFx0X2NvbXBsZXRlUGFuR2VzdHVyZShfcmVsZWFzZUFuaW1EYXRhKTtcblx0XHR9XG5cdH0sXG5cblxuXHQvLyBSZXR1cm5zIG9iamVjdCB3aXRoIGRhdGEgYWJvdXQgZ2VzdHVyZVxuXHQvLyBJdCdzIGNyZWF0ZWQgb25seSBvbmNlIGFuZCB0aGVuIHJldXNlZFxuXHRfaW5pdERyYWdSZWxlYXNlQW5pbWF0aW9uRGF0YSAgPSBmdW5jdGlvbigpIHtcblx0XHQvLyB0ZW1wIGxvY2FsIHZhcnNcblx0XHR2YXIgbGFzdEZsaWNrRHVyYXRpb24sXG5cdFx0XHR0ZW1wUmVsZWFzZVBvcztcblxuXHRcdC8vIHMgPSB0aGlzXG5cdFx0dmFyIHMgPSB7XG5cdFx0XHRsYXN0RmxpY2tPZmZzZXQ6IHt9LFxuXHRcdFx0bGFzdEZsaWNrRGlzdDoge30sXG5cdFx0XHRsYXN0RmxpY2tTcGVlZDoge30sXG5cdFx0XHRzbG93RG93blJhdGlvOiAge30sXG5cdFx0XHRzbG93RG93blJhdGlvUmV2ZXJzZTogIHt9LFxuXHRcdFx0c3BlZWREZWNlbGVyYXRpb25SYXRpbzogIHt9LFxuXHRcdFx0c3BlZWREZWNlbGVyYXRpb25SYXRpb0FiczogIHt9LFxuXHRcdFx0ZGlzdGFuY2VPZmZzZXQ6ICB7fSxcblx0XHRcdGJhY2tBbmltRGVzdGluYXRpb246IHt9LFxuXHRcdFx0YmFja0FuaW1TdGFydGVkOiB7fSxcblx0XHRcdGNhbGN1bGF0ZVN3aXBlU3BlZWQ6IGZ1bmN0aW9uKGF4aXMpIHtcblx0XHRcdFx0XG5cblx0XHRcdFx0aWYoIF9wb3NQb2ludHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdGxhc3RGbGlja0R1cmF0aW9uID0gX2dldEN1cnJlbnRUaW1lKCkgLSBfZ2VzdHVyZUNoZWNrU3BlZWRUaW1lICsgNTA7XG5cdFx0XHRcdFx0dGVtcFJlbGVhc2VQb3MgPSBfcG9zUG9pbnRzW19wb3NQb2ludHMubGVuZ3RoLTJdW2F4aXNdO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxhc3RGbGlja0R1cmF0aW9uID0gX2dldEN1cnJlbnRUaW1lKCkgLSBfZ2VzdHVyZVN0YXJ0VGltZTsgLy8gdG90YWwgZ2VzdHVyZSBkdXJhdGlvblxuXHRcdFx0XHRcdHRlbXBSZWxlYXNlUG9zID0gX3N0YXJ0UG9pbnRbYXhpc107XG5cdFx0XHRcdH1cblx0XHRcdFx0cy5sYXN0RmxpY2tPZmZzZXRbYXhpc10gPSBfY3VyclBvaW50W2F4aXNdIC0gdGVtcFJlbGVhc2VQb3M7XG5cdFx0XHRcdHMubGFzdEZsaWNrRGlzdFtheGlzXSA9IE1hdGguYWJzKHMubGFzdEZsaWNrT2Zmc2V0W2F4aXNdKTtcblx0XHRcdFx0aWYocy5sYXN0RmxpY2tEaXN0W2F4aXNdID4gMjApIHtcblx0XHRcdFx0XHRzLmxhc3RGbGlja1NwZWVkW2F4aXNdID0gcy5sYXN0RmxpY2tPZmZzZXRbYXhpc10gLyBsYXN0RmxpY2tEdXJhdGlvbjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzLmxhc3RGbGlja1NwZWVkW2F4aXNdID0gMDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiggTWF0aC5hYnMocy5sYXN0RmxpY2tTcGVlZFtheGlzXSkgPCAwLjEgKSB7XG5cdFx0XHRcdFx0cy5sYXN0RmxpY2tTcGVlZFtheGlzXSA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdHMuc2xvd0Rvd25SYXRpb1theGlzXSA9IDAuOTU7XG5cdFx0XHRcdHMuc2xvd0Rvd25SYXRpb1JldmVyc2VbYXhpc10gPSAxIC0gcy5zbG93RG93blJhdGlvW2F4aXNdO1xuXHRcdFx0XHRzLnNwZWVkRGVjZWxlcmF0aW9uUmF0aW9bYXhpc10gPSAxO1xuXHRcdFx0fSxcblxuXHRcdFx0Y2FsY3VsYXRlT3ZlckJvdW5kc0FuaW1PZmZzZXQ6IGZ1bmN0aW9uKGF4aXMsIHNwZWVkKSB7XG5cdFx0XHRcdGlmKCFzLmJhY2tBbmltU3RhcnRlZFtheGlzXSkge1xuXG5cdFx0XHRcdFx0aWYoX3Bhbk9mZnNldFtheGlzXSA+IF9jdXJyUGFuQm91bmRzLm1pbltheGlzXSkge1xuXHRcdFx0XHRcdFx0cy5iYWNrQW5pbURlc3RpbmF0aW9uW2F4aXNdID0gX2N1cnJQYW5Cb3VuZHMubWluW2F4aXNdO1xuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0fSBlbHNlIGlmKF9wYW5PZmZzZXRbYXhpc10gPCBfY3VyclBhbkJvdW5kcy5tYXhbYXhpc10pIHtcblx0XHRcdFx0XHRcdHMuYmFja0FuaW1EZXN0aW5hdGlvbltheGlzXSA9IF9jdXJyUGFuQm91bmRzLm1heFtheGlzXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihzLmJhY2tBbmltRGVzdGluYXRpb25bYXhpc10gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0cy5zbG93RG93blJhdGlvW2F4aXNdID0gMC43O1xuXHRcdFx0XHRcdFx0cy5zbG93RG93blJhdGlvUmV2ZXJzZVtheGlzXSA9IDEgLSBzLnNsb3dEb3duUmF0aW9bYXhpc107XG5cdFx0XHRcdFx0XHRpZihzLnNwZWVkRGVjZWxlcmF0aW9uUmF0aW9BYnNbYXhpc10gPCAwLjA1KSB7XG5cblx0XHRcdFx0XHRcdFx0cy5sYXN0RmxpY2tTcGVlZFtheGlzXSA9IDA7XG5cdFx0XHRcdFx0XHRcdHMuYmFja0FuaW1TdGFydGVkW2F4aXNdID0gdHJ1ZTtcblxuXHRcdFx0XHRcdFx0XHRfYW5pbWF0ZVByb3AoJ2JvdW5jZVpvb21QYW4nK2F4aXMsX3Bhbk9mZnNldFtheGlzXSwgXG5cdFx0XHRcdFx0XHRcdFx0cy5iYWNrQW5pbURlc3RpbmF0aW9uW2F4aXNdLCBcblx0XHRcdFx0XHRcdFx0XHRzcGVlZCB8fCAzMDAsIFxuXHRcdFx0XHRcdFx0XHRcdGZyYW1ld29yay5lYXNpbmcuc2luZS5vdXQsIFxuXHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKHBvcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0X3Bhbk9mZnNldFtheGlzXSA9IHBvcztcblx0XHRcdFx0XHRcdFx0XHRcdF9hcHBseUN1cnJlbnRab29tUGFuKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZWR1Y2VzIHRoZSBzcGVlZCBieSBzbG93RG93blJhdGlvIChwZXIgMTBtcylcblx0XHRcdGNhbGN1bGF0ZUFuaW1PZmZzZXQ6IGZ1bmN0aW9uKGF4aXMpIHtcblx0XHRcdFx0aWYoIXMuYmFja0FuaW1TdGFydGVkW2F4aXNdKSB7XG5cdFx0XHRcdFx0cy5zcGVlZERlY2VsZXJhdGlvblJhdGlvW2F4aXNdID0gcy5zcGVlZERlY2VsZXJhdGlvblJhdGlvW2F4aXNdICogKHMuc2xvd0Rvd25SYXRpb1theGlzXSArIFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cy5zbG93RG93blJhdGlvUmV2ZXJzZVtheGlzXSAtIFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cy5zbG93RG93blJhdGlvUmV2ZXJzZVtheGlzXSAqIHMudGltZURpZmYgLyAxMCk7XG5cblx0XHRcdFx0XHRzLnNwZWVkRGVjZWxlcmF0aW9uUmF0aW9BYnNbYXhpc10gPSBNYXRoLmFicyhzLmxhc3RGbGlja1NwZWVkW2F4aXNdICogcy5zcGVlZERlY2VsZXJhdGlvblJhdGlvW2F4aXNdKTtcblx0XHRcdFx0XHRzLmRpc3RhbmNlT2Zmc2V0W2F4aXNdID0gcy5sYXN0RmxpY2tTcGVlZFtheGlzXSAqIHMuc3BlZWREZWNlbGVyYXRpb25SYXRpb1theGlzXSAqIHMudGltZURpZmY7XG5cdFx0XHRcdFx0X3Bhbk9mZnNldFtheGlzXSArPSBzLmRpc3RhbmNlT2Zmc2V0W2F4aXNdO1xuXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdHBhbkFuaW1Mb29wOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBfYW5pbWF0aW9ucy56b29tUGFuICkge1xuXHRcdFx0XHRcdF9hbmltYXRpb25zLnpvb21QYW4ucmFmID0gX3JlcXVlc3RBRihzLnBhbkFuaW1Mb29wKTtcblxuXHRcdFx0XHRcdHMubm93ID0gX2dldEN1cnJlbnRUaW1lKCk7XG5cdFx0XHRcdFx0cy50aW1lRGlmZiA9IHMubm93IC0gcy5sYXN0Tm93O1xuXHRcdFx0XHRcdHMubGFzdE5vdyA9IHMubm93O1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdHMuY2FsY3VsYXRlQW5pbU9mZnNldCgneCcpO1xuXHRcdFx0XHRcdHMuY2FsY3VsYXRlQW5pbU9mZnNldCgneScpO1xuXG5cdFx0XHRcdFx0X2FwcGx5Q3VycmVudFpvb21QYW4oKTtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRzLmNhbGN1bGF0ZU92ZXJCb3VuZHNBbmltT2Zmc2V0KCd4Jyk7XG5cdFx0XHRcdFx0cy5jYWxjdWxhdGVPdmVyQm91bmRzQW5pbU9mZnNldCgneScpO1xuXG5cblx0XHRcdFx0XHRpZiAocy5zcGVlZERlY2VsZXJhdGlvblJhdGlvQWJzLnggPCAwLjA1ICYmIHMuc3BlZWREZWNlbGVyYXRpb25SYXRpb0Ficy55IDwgMC4wNSkge1xuXG5cdFx0XHRcdFx0XHQvLyByb3VuZCBwYW4gcG9zaXRpb25cblx0XHRcdFx0XHRcdF9wYW5PZmZzZXQueCA9IE1hdGgucm91bmQoX3Bhbk9mZnNldC54KTtcblx0XHRcdFx0XHRcdF9wYW5PZmZzZXQueSA9IE1hdGgucm91bmQoX3Bhbk9mZnNldC55KTtcblx0XHRcdFx0XHRcdF9hcHBseUN1cnJlbnRab29tUGFuKCk7XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdF9zdG9wQW5pbWF0aW9uKCd6b29tUGFuJyk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHR9O1xuXHRcdHJldHVybiBzO1xuXHR9LFxuXG5cdF9jb21wbGV0ZVBhbkdlc3R1cmUgPSBmdW5jdGlvbihhbmltRGF0YSkge1xuXHRcdC8vIGNhbGN1bGF0ZSBzd2lwZSBzcGVlZCBmb3IgWSBheGlzIChwYWFubmluZylcblx0XHRhbmltRGF0YS5jYWxjdWxhdGVTd2lwZVNwZWVkKCd5Jyk7XG5cblx0XHRfY3VyclBhbkJvdW5kcyA9IHNlbGYuY3Vyckl0ZW0uYm91bmRzO1xuXHRcdFxuXHRcdGFuaW1EYXRhLmJhY2tBbmltRGVzdGluYXRpb24gPSB7fTtcblx0XHRhbmltRGF0YS5iYWNrQW5pbVN0YXJ0ZWQgPSB7fTtcblxuXHRcdC8vIEF2b2lkIGFjY2VsZXJhdGlvbiBhbmltYXRpb24gaWYgc3BlZWQgaXMgdG9vIGxvd1xuXHRcdGlmKE1hdGguYWJzKGFuaW1EYXRhLmxhc3RGbGlja1NwZWVkLngpIDw9IDAuMDUgJiYgTWF0aC5hYnMoYW5pbURhdGEubGFzdEZsaWNrU3BlZWQueSkgPD0gMC4wNSApIHtcblx0XHRcdGFuaW1EYXRhLnNwZWVkRGVjZWxlcmF0aW9uUmF0aW9BYnMueCA9IGFuaW1EYXRhLnNwZWVkRGVjZWxlcmF0aW9uUmF0aW9BYnMueSA9IDA7XG5cblx0XHRcdC8vIFJ1biBwYW4gZHJhZyByZWxlYXNlIGFuaW1hdGlvbi4gRS5nLiBpZiB5b3UgZHJhZyBpbWFnZSBhbmQgcmVsZWFzZSBmaW5nZXIgd2l0aG91dCBtb21lbnR1bS5cblx0XHRcdGFuaW1EYXRhLmNhbGN1bGF0ZU92ZXJCb3VuZHNBbmltT2Zmc2V0KCd4Jyk7XG5cdFx0XHRhbmltRGF0YS5jYWxjdWxhdGVPdmVyQm91bmRzQW5pbU9mZnNldCgneScpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gQW5pbWF0aW9uIGxvb3AgdGhhdCBjb250cm9scyB0aGUgYWNjZWxlcmF0aW9uIGFmdGVyIHBhbiBnZXN0dXJlIGVuZHNcblx0XHRfcmVnaXN0ZXJTdGFydEFuaW1hdGlvbignem9vbVBhbicpO1xuXHRcdGFuaW1EYXRhLmxhc3ROb3cgPSBfZ2V0Q3VycmVudFRpbWUoKTtcblx0XHRhbmltRGF0YS5wYW5BbmltTG9vcCgpO1xuXHR9LFxuXG5cblx0X2ZpbmlzaFN3aXBlTWFpblNjcm9sbEdlc3R1cmUgPSBmdW5jdGlvbihnZXN0dXJlVHlwZSwgX3JlbGVhc2VBbmltRGF0YSkge1xuXHRcdHZhciBpdGVtQ2hhbmdlZDtcblx0XHRpZighX21haW5TY3JvbGxBbmltYXRpbmcpIHtcblx0XHRcdF9jdXJyWm9vbWVkSXRlbUluZGV4ID0gX2N1cnJlbnRJdGVtSW5kZXg7XG5cdFx0fVxuXG5cblx0XHRcblx0XHR2YXIgaXRlbXNEaWZmO1xuXG5cdFx0aWYoZ2VzdHVyZVR5cGUgPT09ICdzd2lwZScpIHtcblx0XHRcdHZhciB0b3RhbFNoaWZ0RGlzdCA9IF9jdXJyUG9pbnQueCAtIF9zdGFydFBvaW50LngsXG5cdFx0XHRcdGlzRmFzdExhc3RGbGljayA9IF9yZWxlYXNlQW5pbURhdGEubGFzdEZsaWNrRGlzdC54IDwgMTA7XG5cblx0XHRcdC8vIGlmIGNvbnRhaW5lciBpcyBzaGlmdGVkIGZvciBtb3JlIHRoYW4gTUlOX1NXSVBFX0RJU1RBTkNFLCBcblx0XHRcdC8vIGFuZCBsYXN0IGZsaWNrIGdlc3R1cmUgd2FzIGluIHJpZ2h0IGRpcmVjdGlvblxuXHRcdFx0aWYodG90YWxTaGlmdERpc3QgPiBNSU5fU1dJUEVfRElTVEFOQ0UgJiYgXG5cdFx0XHRcdChpc0Zhc3RMYXN0RmxpY2sgfHwgX3JlbGVhc2VBbmltRGF0YS5sYXN0RmxpY2tPZmZzZXQueCA+IDIwKSApIHtcblx0XHRcdFx0Ly8gZ28gdG8gcHJldiBpdGVtXG5cdFx0XHRcdGl0ZW1zRGlmZiA9IC0xO1xuXHRcdFx0fSBlbHNlIGlmKHRvdGFsU2hpZnREaXN0IDwgLU1JTl9TV0lQRV9ESVNUQU5DRSAmJiBcblx0XHRcdFx0KGlzRmFzdExhc3RGbGljayB8fCBfcmVsZWFzZUFuaW1EYXRhLmxhc3RGbGlja09mZnNldC54IDwgLTIwKSApIHtcblx0XHRcdFx0Ly8gZ28gdG8gbmV4dCBpdGVtXG5cdFx0XHRcdGl0ZW1zRGlmZiA9IDE7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIG5leHRDaXJjbGU7XG5cblx0XHRpZihpdGVtc0RpZmYpIHtcblx0XHRcdFxuXHRcdFx0X2N1cnJlbnRJdGVtSW5kZXggKz0gaXRlbXNEaWZmO1xuXG5cdFx0XHRpZihfY3VycmVudEl0ZW1JbmRleCA8IDApIHtcblx0XHRcdFx0X2N1cnJlbnRJdGVtSW5kZXggPSBfb3B0aW9ucy5sb29wID8gX2dldE51bUl0ZW1zKCktMSA6IDA7XG5cdFx0XHRcdG5leHRDaXJjbGUgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmKF9jdXJyZW50SXRlbUluZGV4ID49IF9nZXROdW1JdGVtcygpKSB7XG5cdFx0XHRcdF9jdXJyZW50SXRlbUluZGV4ID0gX29wdGlvbnMubG9vcCA/IDAgOiBfZ2V0TnVtSXRlbXMoKS0xO1xuXHRcdFx0XHRuZXh0Q2lyY2xlID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYoIW5leHRDaXJjbGUgfHwgX29wdGlvbnMubG9vcCkge1xuXHRcdFx0XHRfaW5kZXhEaWZmICs9IGl0ZW1zRGlmZjtcblx0XHRcdFx0X2N1cnJQb3NpdGlvbkluZGV4IC09IGl0ZW1zRGlmZjtcblx0XHRcdFx0aXRlbUNoYW5nZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0XG5cblx0XHRcdFxuXHRcdH1cblxuXHRcdHZhciBhbmltYXRlVG9YID0gX3NsaWRlU2l6ZS54ICogX2N1cnJQb3NpdGlvbkluZGV4O1xuXHRcdHZhciBhbmltYXRlVG9EaXN0ID0gTWF0aC5hYnMoIGFuaW1hdGVUb1ggLSBfbWFpblNjcm9sbFBvcy54ICk7XG5cdFx0dmFyIGZpbmlzaEFuaW1EdXJhdGlvbjtcblxuXG5cdFx0aWYoIWl0ZW1DaGFuZ2VkICYmIGFuaW1hdGVUb1ggPiBfbWFpblNjcm9sbFBvcy54ICE9PSBfcmVsZWFzZUFuaW1EYXRhLmxhc3RGbGlja1NwZWVkLnggPiAwKSB7XG5cdFx0XHQvLyBcInJldHVybiB0byBjdXJyZW50XCIgZHVyYXRpb24sIGUuZy4gd2hlbiBkcmFnZ2luZyBmcm9tIHNsaWRlIDAgdG8gLTFcblx0XHRcdGZpbmlzaEFuaW1EdXJhdGlvbiA9IDMzMzsgXG5cdFx0fSBlbHNlIHtcblx0XHRcdGZpbmlzaEFuaW1EdXJhdGlvbiA9IE1hdGguYWJzKF9yZWxlYXNlQW5pbURhdGEubGFzdEZsaWNrU3BlZWQueCkgPiAwID8gXG5cdFx0XHRcdFx0XHRcdFx0XHRhbmltYXRlVG9EaXN0IC8gTWF0aC5hYnMoX3JlbGVhc2VBbmltRGF0YS5sYXN0RmxpY2tTcGVlZC54KSA6IFxuXHRcdFx0XHRcdFx0XHRcdFx0MzMzO1xuXG5cdFx0XHRmaW5pc2hBbmltRHVyYXRpb24gPSBNYXRoLm1pbihmaW5pc2hBbmltRHVyYXRpb24sIDQwMCk7XG5cdFx0XHRmaW5pc2hBbmltRHVyYXRpb24gPSBNYXRoLm1heChmaW5pc2hBbmltRHVyYXRpb24sIDI1MCk7XG5cdFx0fVxuXG5cdFx0aWYoX2N1cnJab29tZWRJdGVtSW5kZXggPT09IF9jdXJyZW50SXRlbUluZGV4KSB7XG5cdFx0XHRpdGVtQ2hhbmdlZCA9IGZhbHNlO1xuXHRcdH1cblx0XHRcblx0XHRfbWFpblNjcm9sbEFuaW1hdGluZyA9IHRydWU7XG5cdFx0XG5cdFx0X3Nob3V0KCdtYWluU2Nyb2xsQW5pbVN0YXJ0Jyk7XG5cblx0XHRfYW5pbWF0ZVByb3AoJ21haW5TY3JvbGwnLCBfbWFpblNjcm9sbFBvcy54LCBhbmltYXRlVG9YLCBmaW5pc2hBbmltRHVyYXRpb24sIGZyYW1ld29yay5lYXNpbmcuY3ViaWMub3V0LCBcblx0XHRcdF9tb3ZlTWFpblNjcm9sbCxcblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRfc3RvcEFsbEFuaW1hdGlvbnMoKTtcblx0XHRcdFx0X21haW5TY3JvbGxBbmltYXRpbmcgPSBmYWxzZTtcblx0XHRcdFx0X2N1cnJab29tZWRJdGVtSW5kZXggPSAtMTtcblx0XHRcdFx0XG5cdFx0XHRcdGlmKGl0ZW1DaGFuZ2VkIHx8IF9jdXJyWm9vbWVkSXRlbUluZGV4ICE9PSBfY3VycmVudEl0ZW1JbmRleCkge1xuXHRcdFx0XHRcdHNlbGYudXBkYXRlQ3Vyckl0ZW0oKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdFx0X3Nob3V0KCdtYWluU2Nyb2xsQW5pbUNvbXBsZXRlJyk7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGlmKGl0ZW1DaGFuZ2VkKSB7XG5cdFx0XHRzZWxmLnVwZGF0ZUN1cnJJdGVtKHRydWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBpdGVtQ2hhbmdlZDtcblx0fSxcblxuXHRfY2FsY3VsYXRlWm9vbUxldmVsID0gZnVuY3Rpb24odG91Y2hlc0Rpc3RhbmNlKSB7XG5cdFx0cmV0dXJuICAxIC8gX3N0YXJ0UG9pbnRzRGlzdGFuY2UgKiB0b3VjaGVzRGlzdGFuY2UgKiBfc3RhcnRab29tTGV2ZWw7XG5cdH0sXG5cblx0Ly8gUmVzZXRzIHpvb20gaWYgaXQncyBvdXQgb2YgYm91bmRzXG5cdF9jb21wbGV0ZVpvb21HZXN0dXJlID0gZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGRlc3Rab29tTGV2ZWwgPSBfY3Vyclpvb21MZXZlbCxcblx0XHRcdG1pblpvb21MZXZlbCA9IF9nZXRNaW5ab29tTGV2ZWwoKSxcblx0XHRcdG1heFpvb21MZXZlbCA9IF9nZXRNYXhab29tTGV2ZWwoKTtcblxuXHRcdGlmICggX2N1cnJab29tTGV2ZWwgPCBtaW5ab29tTGV2ZWwgKSB7XG5cdFx0XHRkZXN0Wm9vbUxldmVsID0gbWluWm9vbUxldmVsO1xuXHRcdH0gZWxzZSBpZiAoIF9jdXJyWm9vbUxldmVsID4gbWF4Wm9vbUxldmVsICkge1xuXHRcdFx0ZGVzdFpvb21MZXZlbCA9IG1heFpvb21MZXZlbDtcblx0XHR9XG5cblx0XHR2YXIgZGVzdE9wYWNpdHkgPSAxLFxuXHRcdFx0b25VcGRhdGUsXG5cdFx0XHRpbml0aWFsT3BhY2l0eSA9IF9iZ09wYWNpdHk7XG5cblx0XHRpZihfb3BhY2l0eUNoYW5nZWQgJiYgIV9pc1pvb21pbmdJbiAmJiAhX3dhc092ZXJJbml0aWFsWm9vbSAmJiBfY3Vyclpvb21MZXZlbCA8IG1pblpvb21MZXZlbCkge1xuXHRcdFx0Ly9fY2xvc2VkQnlTY3JvbGwgPSB0cnVlO1xuXHRcdFx0c2VsZi5jbG9zZSgpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYoX29wYWNpdHlDaGFuZ2VkKSB7XG5cdFx0XHRvblVwZGF0ZSA9IGZ1bmN0aW9uKG5vdykge1xuXHRcdFx0XHRfYXBwbHlCZ09wYWNpdHkoICAoZGVzdE9wYWNpdHkgLSBpbml0aWFsT3BhY2l0eSkgKiBub3cgKyBpbml0aWFsT3BhY2l0eSApO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRzZWxmLnpvb21UbyhkZXN0Wm9vbUxldmVsLCAwLCAyMDAsICBmcmFtZXdvcmsuZWFzaW5nLmN1YmljLm91dCwgb25VcGRhdGUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9O1xuXG5cbl9yZWdpc3Rlck1vZHVsZSgnR2VzdHVyZXMnLCB7XG5cdHB1YmxpY01ldGhvZHM6IHtcblxuXHRcdGluaXRHZXN0dXJlczogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIGhlbHBlciBmdW5jdGlvbiB0aGF0IGJ1aWxkcyB0b3VjaC9wb2ludGVyL21vdXNlIGV2ZW50c1xuXHRcdFx0dmFyIGFkZEV2ZW50TmFtZXMgPSBmdW5jdGlvbihwcmVmLCBkb3duLCBtb3ZlLCB1cCwgY2FuY2VsKSB7XG5cdFx0XHRcdF9kcmFnU3RhcnRFdmVudCA9IHByZWYgKyBkb3duO1xuXHRcdFx0XHRfZHJhZ01vdmVFdmVudCA9IHByZWYgKyBtb3ZlO1xuXHRcdFx0XHRfZHJhZ0VuZEV2ZW50ID0gcHJlZiArIHVwO1xuXHRcdFx0XHRpZihjYW5jZWwpIHtcblx0XHRcdFx0XHRfZHJhZ0NhbmNlbEV2ZW50ID0gcHJlZiArIGNhbmNlbDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRfZHJhZ0NhbmNlbEV2ZW50ID0gJyc7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRcdF9wb2ludGVyRXZlbnRFbmFibGVkID0gX2ZlYXR1cmVzLnBvaW50ZXJFdmVudDtcblx0XHRcdGlmKF9wb2ludGVyRXZlbnRFbmFibGVkICYmIF9mZWF0dXJlcy50b3VjaCkge1xuXHRcdFx0XHQvLyB3ZSBkb24ndCBuZWVkIHRvdWNoIGV2ZW50cywgaWYgYnJvd3NlciBzdXBwb3J0cyBwb2ludGVyIGV2ZW50c1xuXHRcdFx0XHRfZmVhdHVyZXMudG91Y2ggPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYoX3BvaW50ZXJFdmVudEVuYWJsZWQpIHtcblx0XHRcdFx0aWYobmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpIHtcblx0XHRcdFx0XHQvLyBJRTEwIHBvaW50ZXIgZXZlbnRzIGFyZSBjYXNlLXNlbnNpdGl2ZVxuXHRcdFx0XHRcdGFkZEV2ZW50TmFtZXMoJ01TUG9pbnRlcicsICdEb3duJywgJ01vdmUnLCAnVXAnLCAnQ2FuY2VsJyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YWRkRXZlbnROYW1lcygncG9pbnRlcicsICdkb3duJywgJ21vdmUnLCAndXAnLCAnY2FuY2VsJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZihfZmVhdHVyZXMudG91Y2gpIHtcblx0XHRcdFx0YWRkRXZlbnROYW1lcygndG91Y2gnLCAnc3RhcnQnLCAnbW92ZScsICdlbmQnLCAnY2FuY2VsJyk7XG5cdFx0XHRcdF9saWtlbHlUb3VjaERldmljZSA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhZGRFdmVudE5hbWVzKCdtb3VzZScsICdkb3duJywgJ21vdmUnLCAndXAnKTtcdFxuXHRcdFx0fVxuXG5cdFx0XHRfdXBNb3ZlRXZlbnRzID0gX2RyYWdNb3ZlRXZlbnQgKyAnICcgKyBfZHJhZ0VuZEV2ZW50ICArICcgJyArICBfZHJhZ0NhbmNlbEV2ZW50O1xuXHRcdFx0X2Rvd25FdmVudHMgPSBfZHJhZ1N0YXJ0RXZlbnQ7XG5cblx0XHRcdGlmKF9wb2ludGVyRXZlbnRFbmFibGVkICYmICFfbGlrZWx5VG91Y2hEZXZpY2UpIHtcblx0XHRcdFx0X2xpa2VseVRvdWNoRGV2aWNlID0gKG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDEpIHx8IChuYXZpZ2F0b3IubXNNYXhUb3VjaFBvaW50cyA+IDEpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gbWFrZSB2YXJpYWJsZSBwdWJsaWNcblx0XHRcdHNlbGYubGlrZWx5VG91Y2hEZXZpY2UgPSBfbGlrZWx5VG91Y2hEZXZpY2U7IFxuXHRcdFx0XG5cdFx0XHRfZ2xvYmFsRXZlbnRIYW5kbGVyc1tfZHJhZ1N0YXJ0RXZlbnRdID0gX29uRHJhZ1N0YXJ0O1xuXHRcdFx0X2dsb2JhbEV2ZW50SGFuZGxlcnNbX2RyYWdNb3ZlRXZlbnRdID0gX29uRHJhZ01vdmU7XG5cdFx0XHRfZ2xvYmFsRXZlbnRIYW5kbGVyc1tfZHJhZ0VuZEV2ZW50XSA9IF9vbkRyYWdSZWxlYXNlOyAvLyB0aGUgS3Jha2VuXG5cblx0XHRcdGlmKF9kcmFnQ2FuY2VsRXZlbnQpIHtcblx0XHRcdFx0X2dsb2JhbEV2ZW50SGFuZGxlcnNbX2RyYWdDYW5jZWxFdmVudF0gPSBfZ2xvYmFsRXZlbnRIYW5kbGVyc1tfZHJhZ0VuZEV2ZW50XTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQmluZCBtb3VzZSBldmVudHMgb24gZGV2aWNlIHdpdGggZGV0ZWN0ZWQgaGFyZHdhcmUgdG91Y2ggc3VwcG9ydCwgaW4gY2FzZSBpdCBzdXBwb3J0cyBtdWx0aXBsZSB0eXBlcyBvZiBpbnB1dC5cblx0XHRcdGlmKF9mZWF0dXJlcy50b3VjaCkge1xuXHRcdFx0XHRfZG93bkV2ZW50cyArPSAnIG1vdXNlZG93bic7XG5cdFx0XHRcdF91cE1vdmVFdmVudHMgKz0gJyBtb3VzZW1vdmUgbW91c2V1cCc7XG5cdFx0XHRcdF9nbG9iYWxFdmVudEhhbmRsZXJzLm1vdXNlZG93biA9IF9nbG9iYWxFdmVudEhhbmRsZXJzW19kcmFnU3RhcnRFdmVudF07XG5cdFx0XHRcdF9nbG9iYWxFdmVudEhhbmRsZXJzLm1vdXNlbW92ZSA9IF9nbG9iYWxFdmVudEhhbmRsZXJzW19kcmFnTW92ZUV2ZW50XTtcblx0XHRcdFx0X2dsb2JhbEV2ZW50SGFuZGxlcnMubW91c2V1cCA9IF9nbG9iYWxFdmVudEhhbmRsZXJzW19kcmFnRW5kRXZlbnRdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZighX2xpa2VseVRvdWNoRGV2aWNlKSB7XG5cdFx0XHRcdC8vIGRvbid0IGFsbG93IHBhbiB0byBuZXh0IHNsaWRlIGZyb20gem9vbWVkIHN0YXRlIG9uIERlc2t0b3Bcblx0XHRcdFx0X29wdGlvbnMuYWxsb3dQYW5Ub05leHQgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0fVxufSk7XG5cblxuLyo+Pmdlc3R1cmVzKi9cblxuLyo+PnNob3ctaGlkZS10cmFuc2l0aW9uKi9cbi8qKlxuICogc2hvdy1oaWRlLXRyYW5zaXRpb24uanM6XG4gKlxuICogTWFuYWdlcyBpbml0aWFsIG9wZW5pbmcgb3IgY2xvc2luZyB0cmFuc2l0aW9uLlxuICpcbiAqIElmIHlvdSdyZSBub3QgcGxhbm5pbmcgdG8gdXNlIHRyYW5zaXRpb24gZm9yIGdhbGxlcnkgYXQgYWxsLFxuICogeW91IG1heSBzZXQgb3B0aW9ucyBoaWRlQW5pbWF0aW9uRHVyYXRpb24gYW5kIHNob3dBbmltYXRpb25EdXJhdGlvbiB0byAwLFxuICogYW5kIGp1c3QgZGVsZXRlIHN0YXJ0QW5pbWF0aW9uIGZ1bmN0aW9uLlxuICogXG4gKi9cblxuXG52YXIgX3Nob3dPckhpZGVUaW1lb3V0LFxuXHRfc2hvd09ySGlkZSA9IGZ1bmN0aW9uKGl0ZW0sIGltZywgb3V0LCBjb21wbGV0ZUZuKSB7XG5cblx0XHRpZihfc2hvd09ySGlkZVRpbWVvdXQpIHtcblx0XHRcdGNsZWFyVGltZW91dChfc2hvd09ySGlkZVRpbWVvdXQpO1xuXHRcdH1cblxuXHRcdF9pbml0aWFsWm9vbVJ1bm5pbmcgPSB0cnVlO1xuXHRcdF9pbml0aWFsQ29udGVudFNldCA9IHRydWU7XG5cdFx0XG5cdFx0Ly8gZGltZW5zaW9ucyBvZiBzbWFsbCB0aHVtYm5haWwge3g6LHk6LHc6fS5cblx0XHQvLyBIZWlnaHQgaXMgb3B0aW9uYWwsIGFzIGNhbGN1bGF0ZWQgYmFzZWQgb24gbGFyZ2UgaW1hZ2UuXG5cdFx0dmFyIHRodW1iQm91bmRzOyBcblx0XHRpZihpdGVtLmluaXRpYWxMYXlvdXQpIHtcblx0XHRcdHRodW1iQm91bmRzID0gaXRlbS5pbml0aWFsTGF5b3V0O1xuXHRcdFx0aXRlbS5pbml0aWFsTGF5b3V0ID0gbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGh1bWJCb3VuZHMgPSBfb3B0aW9ucy5nZXRUaHVtYkJvdW5kc0ZuICYmIF9vcHRpb25zLmdldFRodW1iQm91bmRzRm4oX2N1cnJlbnRJdGVtSW5kZXgpO1xuXHRcdH1cblxuXHRcdHZhciBkdXJhdGlvbiA9IG91dCA/IF9vcHRpb25zLmhpZGVBbmltYXRpb25EdXJhdGlvbiA6IF9vcHRpb25zLnNob3dBbmltYXRpb25EdXJhdGlvbjtcblxuXHRcdHZhciBvbkNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRfc3RvcEFuaW1hdGlvbignaW5pdGlhbFpvb20nKTtcblx0XHRcdGlmKCFvdXQpIHtcblx0XHRcdFx0X2FwcGx5QmdPcGFjaXR5KDEpO1xuXHRcdFx0XHRpZihpbWcpIHtcblx0XHRcdFx0XHRpbWcuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZnJhbWV3b3JrLmFkZENsYXNzKHRlbXBsYXRlLCAncHN3cC0tYW5pbWF0ZWQtaW4nKTtcblx0XHRcdFx0X3Nob3V0KCdpbml0aWFsWm9vbScgKyAob3V0ID8gJ091dEVuZCcgOiAnSW5FbmQnKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLnRlbXBsYXRlLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcblx0XHRcdFx0c2VsZi5iZy5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmKGNvbXBsZXRlRm4pIHtcblx0XHRcdFx0Y29tcGxldGVGbigpO1xuXHRcdFx0fVxuXHRcdFx0X2luaXRpYWxab29tUnVubmluZyA9IGZhbHNlO1xuXHRcdH07XG5cblx0XHQvLyBpZiBib3VuZHMgYXJlbid0IHByb3ZpZGVkLCBqdXN0IG9wZW4gZ2FsbGVyeSB3aXRob3V0IGFuaW1hdGlvblxuXHRcdGlmKCFkdXJhdGlvbiB8fCAhdGh1bWJCb3VuZHMgfHwgdGh1bWJCb3VuZHMueCA9PT0gdW5kZWZpbmVkKSB7XG5cblx0XHRcdF9zaG91dCgnaW5pdGlhbFpvb20nICsgKG91dCA/ICdPdXQnIDogJ0luJykgKTtcblxuXHRcdFx0X2N1cnJab29tTGV2ZWwgPSBpdGVtLmluaXRpYWxab29tTGV2ZWw7XG5cdFx0XHRfZXF1YWxpemVQb2ludHMoX3Bhbk9mZnNldCwgIGl0ZW0uaW5pdGlhbFBvc2l0aW9uICk7XG5cdFx0XHRfYXBwbHlDdXJyZW50Wm9vbVBhbigpO1xuXG5cdFx0XHR0ZW1wbGF0ZS5zdHlsZS5vcGFjaXR5ID0gb3V0ID8gMCA6IDE7XG5cdFx0XHRfYXBwbHlCZ09wYWNpdHkoMSk7XG5cblx0XHRcdGlmKGR1cmF0aW9uKSB7XG5cdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0b25Db21wbGV0ZSgpO1xuXHRcdFx0XHR9LCBkdXJhdGlvbik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvbkNvbXBsZXRlKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgc3RhcnRBbmltYXRpb24gPSBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBjbG9zZVdpdGhSYWYgPSBfY2xvc2VkQnlTY3JvbGwsXG5cdFx0XHRcdGZhZGVFdmVyeXRoaW5nID0gIXNlbGYuY3Vyckl0ZW0uc3JjIHx8IHNlbGYuY3Vyckl0ZW0ubG9hZEVycm9yIHx8IF9vcHRpb25zLnNob3dIaWRlT3BhY2l0eTtcblx0XHRcdFxuXHRcdFx0Ly8gYXBwbHkgaHctYWNjZWxlcmF0aW9uIHRvIGltYWdlXG5cdFx0XHRpZihpdGVtLm1pbmlJbWcpIHtcblx0XHRcdFx0aXRlbS5taW5pSW1nLnN0eWxlLndlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuXHRcdFx0fVxuXG5cdFx0XHRpZighb3V0KSB7XG5cdFx0XHRcdF9jdXJyWm9vbUxldmVsID0gdGh1bWJCb3VuZHMudyAvIGl0ZW0udztcblx0XHRcdFx0X3Bhbk9mZnNldC54ID0gdGh1bWJCb3VuZHMueDtcblx0XHRcdFx0X3Bhbk9mZnNldC55ID0gdGh1bWJCb3VuZHMueSAtIF9pbml0YWxXaW5kb3dTY3JvbGxZO1xuXG5cdFx0XHRcdHNlbGZbZmFkZUV2ZXJ5dGhpbmcgPyAndGVtcGxhdGUnIDogJ2JnJ10uc3R5bGUub3BhY2l0eSA9IDAuMDAxO1xuXHRcdFx0XHRfYXBwbHlDdXJyZW50Wm9vbVBhbigpO1xuXHRcdFx0fVxuXG5cdFx0XHRfcmVnaXN0ZXJTdGFydEFuaW1hdGlvbignaW5pdGlhbFpvb20nKTtcblx0XHRcdFxuXHRcdFx0aWYob3V0ICYmICFjbG9zZVdpdGhSYWYpIHtcblx0XHRcdFx0ZnJhbWV3b3JrLnJlbW92ZUNsYXNzKHRlbXBsYXRlLCAncHN3cC0tYW5pbWF0ZWQtaW4nKTtcblx0XHRcdH1cblxuXHRcdFx0aWYoZmFkZUV2ZXJ5dGhpbmcpIHtcblx0XHRcdFx0aWYob3V0KSB7XG5cdFx0XHRcdFx0ZnJhbWV3b3JrWyAoY2xvc2VXaXRoUmFmID8gJ3JlbW92ZScgOiAnYWRkJykgKyAnQ2xhc3MnIF0odGVtcGxhdGUsICdwc3dwLS1hbmltYXRlX29wYWNpdHknKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0ZnJhbWV3b3JrLmFkZENsYXNzKHRlbXBsYXRlLCAncHN3cC0tYW5pbWF0ZV9vcGFjaXR5Jyk7XG5cdFx0XHRcdFx0fSwgMzApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdF9zaG93T3JIaWRlVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0X3Nob3V0KCdpbml0aWFsWm9vbScgKyAob3V0ID8gJ091dCcgOiAnSW4nKSApO1xuXHRcdFx0XHRcblxuXHRcdFx0XHRpZighb3V0KSB7XG5cblx0XHRcdFx0XHQvLyBcImluXCIgYW5pbWF0aW9uIGFsd2F5cyB1c2VzIENTUyB0cmFuc2l0aW9ucyAoaW5zdGVhZCBvZiByQUYpLlxuXHRcdFx0XHRcdC8vIENTUyB0cmFuc2l0aW9uIHdvcmsgZmFzdGVyIGhlcmUsIFxuXHRcdFx0XHRcdC8vIGFzIGRldmVsb3BlciBtYXkgYWxzbyB3YW50IHRvIGFuaW1hdGUgb3RoZXIgdGhpbmdzLCBcblx0XHRcdFx0XHQvLyBsaWtlIHVpIG9uIHRvcCBvZiBzbGlkaW5nIGFyZWEsIHdoaWNoIGNhbiBiZSBhbmltYXRlZCBqdXN0IHZpYSBDU1Ncblx0XHRcdFx0XHRcblx0XHRcdFx0XHRfY3Vyclpvb21MZXZlbCA9IGl0ZW0uaW5pdGlhbFpvb21MZXZlbDtcblx0XHRcdFx0XHRfZXF1YWxpemVQb2ludHMoX3Bhbk9mZnNldCwgIGl0ZW0uaW5pdGlhbFBvc2l0aW9uICk7XG5cdFx0XHRcdFx0X2FwcGx5Q3VycmVudFpvb21QYW4oKTtcblx0XHRcdFx0XHRfYXBwbHlCZ09wYWNpdHkoMSk7XG5cblx0XHRcdFx0XHRpZihmYWRlRXZlcnl0aGluZykge1xuXHRcdFx0XHRcdFx0dGVtcGxhdGUuc3R5bGUub3BhY2l0eSA9IDE7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdF9hcHBseUJnT3BhY2l0eSgxKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRfc2hvd09ySGlkZVRpbWVvdXQgPSBzZXRUaW1lb3V0KG9uQ29tcGxldGUsIGR1cmF0aW9uICsgMjApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0Ly8gXCJvdXRcIiBhbmltYXRpb24gdXNlcyByQUYgb25seSB3aGVuIFBob3RvU3dpcGUgaXMgY2xvc2VkIGJ5IGJyb3dzZXIgc2Nyb2xsLCB0byByZWNhbGN1bGF0ZSBwb3NpdGlvblxuXHRcdFx0XHRcdHZhciBkZXN0Wm9vbUxldmVsID0gdGh1bWJCb3VuZHMudyAvIGl0ZW0udyxcblx0XHRcdFx0XHRcdGluaXRpYWxQYW5PZmZzZXQgPSB7XG5cdFx0XHRcdFx0XHRcdHg6IF9wYW5PZmZzZXQueCxcblx0XHRcdFx0XHRcdFx0eTogX3Bhbk9mZnNldC55XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0aW5pdGlhbFpvb21MZXZlbCA9IF9jdXJyWm9vbUxldmVsLFxuXHRcdFx0XHRcdFx0aW5pdGFsQmdPcGFjaXR5ID0gX2JnT3BhY2l0eSxcblx0XHRcdFx0XHRcdG9uVXBkYXRlID0gZnVuY3Rpb24obm93KSB7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRpZihub3cgPT09IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRfY3Vyclpvb21MZXZlbCA9IGRlc3Rab29tTGV2ZWw7XG5cdFx0XHRcdFx0XHRcdFx0X3Bhbk9mZnNldC54ID0gdGh1bWJCb3VuZHMueDtcblx0XHRcdFx0XHRcdFx0XHRfcGFuT2Zmc2V0LnkgPSB0aHVtYkJvdW5kcy55ICAtIF9jdXJyZW50V2luZG93U2Nyb2xsWTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRfY3Vyclpvb21MZXZlbCA9IChkZXN0Wm9vbUxldmVsIC0gaW5pdGlhbFpvb21MZXZlbCkgKiBub3cgKyBpbml0aWFsWm9vbUxldmVsO1xuXHRcdFx0XHRcdFx0XHRcdF9wYW5PZmZzZXQueCA9ICh0aHVtYkJvdW5kcy54IC0gaW5pdGlhbFBhbk9mZnNldC54KSAqIG5vdyArIGluaXRpYWxQYW5PZmZzZXQueDtcblx0XHRcdFx0XHRcdFx0XHRfcGFuT2Zmc2V0LnkgPSAodGh1bWJCb3VuZHMueSAtIF9jdXJyZW50V2luZG93U2Nyb2xsWSAtIGluaXRpYWxQYW5PZmZzZXQueSkgKiBub3cgKyBpbml0aWFsUGFuT2Zmc2V0Lnk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdF9hcHBseUN1cnJlbnRab29tUGFuKCk7XG5cdFx0XHRcdFx0XHRcdGlmKGZhZGVFdmVyeXRoaW5nKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGVtcGxhdGUuc3R5bGUub3BhY2l0eSA9IDEgLSBub3c7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0X2FwcGx5QmdPcGFjaXR5KCBpbml0YWxCZ09wYWNpdHkgLSBub3cgKiBpbml0YWxCZ09wYWNpdHkgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGlmKGNsb3NlV2l0aFJhZikge1xuXHRcdFx0XHRcdFx0X2FuaW1hdGVQcm9wKCdpbml0aWFsWm9vbScsIDAsIDEsIGR1cmF0aW9uLCBmcmFtZXdvcmsuZWFzaW5nLmN1YmljLm91dCwgb25VcGRhdGUsIG9uQ29tcGxldGUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvblVwZGF0ZSgxKTtcblx0XHRcdFx0XHRcdF9zaG93T3JIaWRlVGltZW91dCA9IHNldFRpbWVvdXQob25Db21wbGV0ZSwgZHVyYXRpb24gKyAyMCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcblx0XHRcdH0sIG91dCA/IDI1IDogOTApOyAvLyBNYWluIHB1cnBvc2Ugb2YgdGhpcyBkZWxheSBpcyB0byBnaXZlIGJyb3dzZXIgdGltZSB0byBwYWludCBhbmRcblx0XHRcdFx0XHQvLyBjcmVhdGUgY29tcG9zaXRlIGxheWVycyBvZiBQaG90b1N3aXBlIFVJIHBhcnRzIChiYWNrZ3JvdW5kLCBjb250cm9scywgY2FwdGlvbiwgYXJyb3dzKS5cblx0XHRcdFx0XHQvLyBXaGljaCBhdm9pZHMgbGFnIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc2NhbGUgdHJhbnNpdGlvbi5cblx0XHR9O1xuXHRcdHN0YXJ0QW5pbWF0aW9uKCk7XG5cblx0XHRcblx0fTtcblxuLyo+PnNob3ctaGlkZS10cmFuc2l0aW9uKi9cblxuLyo+Pml0ZW1zLWNvbnRyb2xsZXIqL1xuLyoqXG4qXG4qIENvbnRyb2xsZXIgbWFuYWdlcyBnYWxsZXJ5IGl0ZW1zLCB0aGVpciBkaW1lbnNpb25zLCBhbmQgdGhlaXIgY29udGVudC5cbiogXG4qL1xuXG52YXIgX2l0ZW1zLFxuXHRfdGVtcFBhbkFyZWFTaXplID0ge30sXG5cdF9pbWFnZXNUb0FwcGVuZFBvb2wgPSBbXSxcblx0X2luaXRpYWxDb250ZW50U2V0LFxuXHRfaW5pdGlhbFpvb21SdW5uaW5nLFxuXHRfY29udHJvbGxlckRlZmF1bHRPcHRpb25zID0ge1xuXHRcdGluZGV4OiAwLFxuXHRcdGVycm9yTXNnOiAnPGRpdiBjbGFzcz1cInBzd3BfX2Vycm9yLW1zZ1wiPjxhIGhyZWY9XCIldXJsJVwiIHRhcmdldD1cIl9ibGFua1wiPlRoZSBpbWFnZTwvYT4gY291bGQgbm90IGJlIGxvYWRlZC48L2Rpdj4nLFxuXHRcdGZvcmNlUHJvZ3Jlc3NpdmVMb2FkaW5nOiBmYWxzZSwgLy8gVE9ET1xuXHRcdHByZWxvYWQ6IFsxLDFdLFxuXHRcdGdldE51bUl0ZW1zRm46IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIF9pdGVtcy5sZW5ndGg7XG5cdFx0fVxuXHR9O1xuXG5cbnZhciBfZ2V0SXRlbUF0LFxuXHRfZ2V0TnVtSXRlbXMsXG5cdF9pbml0aWFsSXNMb29wLFxuXHRfZ2V0WmVyb0JvdW5kcyA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRjZW50ZXI6e3g6MCx5OjB9LCBcblx0XHRcdG1heDp7eDowLHk6MH0sIFxuXHRcdFx0bWluOnt4OjAseTowfVxuXHRcdH07XG5cdH0sXG5cdF9jYWxjdWxhdGVTaW5nbGVJdGVtUGFuQm91bmRzID0gZnVuY3Rpb24oaXRlbSwgcmVhbFBhbkVsZW1lbnRXLCByZWFsUGFuRWxlbWVudEggKSB7XG5cdFx0dmFyIGJvdW5kcyA9IGl0ZW0uYm91bmRzO1xuXG5cdFx0Ly8gcG9zaXRpb24gb2YgZWxlbWVudCB3aGVuIGl0J3MgY2VudGVyZWRcblx0XHRib3VuZHMuY2VudGVyLnggPSBNYXRoLnJvdW5kKChfdGVtcFBhbkFyZWFTaXplLnggLSByZWFsUGFuRWxlbWVudFcpIC8gMik7XG5cdFx0Ym91bmRzLmNlbnRlci55ID0gTWF0aC5yb3VuZCgoX3RlbXBQYW5BcmVhU2l6ZS55IC0gcmVhbFBhbkVsZW1lbnRIKSAvIDIpICsgaXRlbS52R2FwLnRvcDtcblxuXHRcdC8vIG1heGltdW0gcGFuIHBvc2l0aW9uXG5cdFx0Ym91bmRzLm1heC54ID0gKHJlYWxQYW5FbGVtZW50VyA+IF90ZW1wUGFuQXJlYVNpemUueCkgPyBcblx0XHRcdFx0XHRcdFx0TWF0aC5yb3VuZChfdGVtcFBhbkFyZWFTaXplLnggLSByZWFsUGFuRWxlbWVudFcpIDogXG5cdFx0XHRcdFx0XHRcdGJvdW5kcy5jZW50ZXIueDtcblx0XHRcblx0XHRib3VuZHMubWF4LnkgPSAocmVhbFBhbkVsZW1lbnRIID4gX3RlbXBQYW5BcmVhU2l6ZS55KSA/IFxuXHRcdFx0XHRcdFx0XHRNYXRoLnJvdW5kKF90ZW1wUGFuQXJlYVNpemUueSAtIHJlYWxQYW5FbGVtZW50SCkgKyBpdGVtLnZHYXAudG9wIDogXG5cdFx0XHRcdFx0XHRcdGJvdW5kcy5jZW50ZXIueTtcblx0XHRcblx0XHQvLyBtaW5pbXVtIHBhbiBwb3NpdGlvblxuXHRcdGJvdW5kcy5taW4ueCA9IChyZWFsUGFuRWxlbWVudFcgPiBfdGVtcFBhbkFyZWFTaXplLngpID8gMCA6IGJvdW5kcy5jZW50ZXIueDtcblx0XHRib3VuZHMubWluLnkgPSAocmVhbFBhbkVsZW1lbnRIID4gX3RlbXBQYW5BcmVhU2l6ZS55KSA/IGl0ZW0udkdhcC50b3AgOiBib3VuZHMuY2VudGVyLnk7XG5cdH0sXG5cdF9jYWxjdWxhdGVJdGVtU2l6ZSA9IGZ1bmN0aW9uKGl0ZW0sIHZpZXdwb3J0U2l6ZSwgem9vbUxldmVsKSB7XG5cblx0XHRpZiAoaXRlbS5zcmMgJiYgIWl0ZW0ubG9hZEVycm9yKSB7XG5cdFx0XHR2YXIgaXNJbml0aWFsID0gIXpvb21MZXZlbDtcblx0XHRcdFxuXHRcdFx0aWYoaXNJbml0aWFsKSB7XG5cdFx0XHRcdGlmKCFpdGVtLnZHYXApIHtcblx0XHRcdFx0XHRpdGVtLnZHYXAgPSB7dG9wOjAsYm90dG9tOjB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGFsbG93cyBvdmVycmlkaW5nIHZlcnRpY2FsIG1hcmdpbiBmb3IgaW5kaXZpZHVhbCBpdGVtc1xuXHRcdFx0XHRfc2hvdXQoJ3BhcnNlVmVydGljYWxNYXJnaW4nLCBpdGVtKTtcblx0XHRcdH1cblxuXG5cdFx0XHRfdGVtcFBhbkFyZWFTaXplLnggPSB2aWV3cG9ydFNpemUueDtcblx0XHRcdF90ZW1wUGFuQXJlYVNpemUueSA9IHZpZXdwb3J0U2l6ZS55IC0gaXRlbS52R2FwLnRvcCAtIGl0ZW0udkdhcC5ib3R0b207XG5cblx0XHRcdGlmIChpc0luaXRpYWwpIHtcblx0XHRcdFx0dmFyIGhSYXRpbyA9IF90ZW1wUGFuQXJlYVNpemUueCAvIGl0ZW0udztcblx0XHRcdFx0dmFyIHZSYXRpbyA9IF90ZW1wUGFuQXJlYVNpemUueSAvIGl0ZW0uaDtcblxuXHRcdFx0XHRpdGVtLmZpdFJhdGlvID0gaFJhdGlvIDwgdlJhdGlvID8gaFJhdGlvIDogdlJhdGlvO1xuXHRcdFx0XHQvL2l0ZW0uZmlsbFJhdGlvID0gaFJhdGlvID4gdlJhdGlvID8gaFJhdGlvIDogdlJhdGlvO1xuXG5cdFx0XHRcdHZhciBzY2FsZU1vZGUgPSBfb3B0aW9ucy5zY2FsZU1vZGU7XG5cblx0XHRcdFx0aWYgKHNjYWxlTW9kZSA9PT0gJ29yaWcnKSB7XG5cdFx0XHRcdFx0em9vbUxldmVsID0gMTtcblx0XHRcdFx0fSBlbHNlIGlmIChzY2FsZU1vZGUgPT09ICdmaXQnKSB7XG5cdFx0XHRcdFx0em9vbUxldmVsID0gaXRlbS5maXRSYXRpbztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh6b29tTGV2ZWwgPiAxKSB7XG5cdFx0XHRcdFx0em9vbUxldmVsID0gMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGl0ZW0uaW5pdGlhbFpvb21MZXZlbCA9IHpvb21MZXZlbDtcblx0XHRcdFx0XG5cdFx0XHRcdGlmKCFpdGVtLmJvdW5kcykge1xuXHRcdFx0XHRcdC8vIHJldXNlIGJvdW5kcyBvYmplY3Rcblx0XHRcdFx0XHRpdGVtLmJvdW5kcyA9IF9nZXRaZXJvQm91bmRzKCk7IFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmKCF6b29tTGV2ZWwpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRfY2FsY3VsYXRlU2luZ2xlSXRlbVBhbkJvdW5kcyhpdGVtLCBpdGVtLncgKiB6b29tTGV2ZWwsIGl0ZW0uaCAqIHpvb21MZXZlbCk7XG5cblx0XHRcdGlmIChpc0luaXRpYWwgJiYgem9vbUxldmVsID09PSBpdGVtLmluaXRpYWxab29tTGV2ZWwpIHtcblx0XHRcdFx0aXRlbS5pbml0aWFsUG9zaXRpb24gPSBpdGVtLmJvdW5kcy5jZW50ZXI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBpdGVtLmJvdW5kcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0aXRlbS53ID0gaXRlbS5oID0gMDtcblx0XHRcdGl0ZW0uaW5pdGlhbFpvb21MZXZlbCA9IGl0ZW0uZml0UmF0aW8gPSAxO1xuXHRcdFx0aXRlbS5ib3VuZHMgPSBfZ2V0WmVyb0JvdW5kcygpO1xuXHRcdFx0aXRlbS5pbml0aWFsUG9zaXRpb24gPSBpdGVtLmJvdW5kcy5jZW50ZXI7XG5cblx0XHRcdC8vIGlmIGl0J3Mgbm90IGltYWdlLCB3ZSByZXR1cm4gemVybyBib3VuZHMgKGNvbnRlbnQgaXMgbm90IHpvb21hYmxlKVxuXHRcdFx0cmV0dXJuIGl0ZW0uYm91bmRzO1xuXHRcdH1cblx0XHRcblx0fSxcblxuXHRcblxuXG5cdF9hcHBlbmRJbWFnZSA9IGZ1bmN0aW9uKGluZGV4LCBpdGVtLCBiYXNlRGl2LCBpbWcsIHByZXZlbnRBbmltYXRpb24sIGtlZXBQbGFjZWhvbGRlcikge1xuXHRcdFxuXG5cdFx0aWYoaXRlbS5sb2FkRXJyb3IpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZihpbWcpIHtcblxuXHRcdFx0aXRlbS5pbWFnZUFwcGVuZGVkID0gdHJ1ZTtcblx0XHRcdF9zZXRJbWFnZVNpemUoaXRlbSwgaW1nLCAoaXRlbSA9PT0gc2VsZi5jdXJySXRlbSAmJiBfcmVuZGVyTWF4UmVzb2x1dGlvbikgKTtcblx0XHRcdFxuXHRcdFx0YmFzZURpdi5hcHBlbmRDaGlsZChpbWcpO1xuXG5cdFx0XHRpZihrZWVwUGxhY2Vob2xkZXIpIHtcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZihpdGVtICYmIGl0ZW0ubG9hZGVkICYmIGl0ZW0ucGxhY2Vob2xkZXIpIHtcblx0XHRcdFx0XHRcdGl0ZW0ucGxhY2Vob2xkZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblx0XHRcdFx0XHRcdGl0ZW0ucGxhY2Vob2xkZXIgPSBudWxsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSwgNTAwKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFxuXG5cblx0X3ByZWxvYWRJbWFnZSA9IGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRpdGVtLmxvYWRpbmcgPSB0cnVlO1xuXHRcdGl0ZW0ubG9hZGVkID0gZmFsc2U7XG5cdFx0dmFyIGltZyA9IGl0ZW0uaW1nID0gZnJhbWV3b3JrLmNyZWF0ZUVsKCdwc3dwX19pbWcnLCAnaW1nJyk7XG5cdFx0dmFyIG9uQ29tcGxldGUgPSBmdW5jdGlvbigpIHtcblx0XHRcdGl0ZW0ubG9hZGluZyA9IGZhbHNlO1xuXHRcdFx0aXRlbS5sb2FkZWQgPSB0cnVlO1xuXG5cdFx0XHRpZihpdGVtLmxvYWRDb21wbGV0ZSkge1xuXHRcdFx0XHRpdGVtLmxvYWRDb21wbGV0ZShpdGVtKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGl0ZW0uaW1nID0gbnVsbDsgLy8gbm8gbmVlZCB0byBzdG9yZSBpbWFnZSBvYmplY3Rcblx0XHRcdH1cblx0XHRcdGltZy5vbmxvYWQgPSBpbWcub25lcnJvciA9IG51bGw7XG5cdFx0XHRpbWcgPSBudWxsO1xuXHRcdH07XG5cdFx0aW1nLm9ubG9hZCA9IG9uQ29tcGxldGU7XG5cdFx0aW1nLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcblx0XHRcdGl0ZW0ubG9hZEVycm9yID0gdHJ1ZTtcblx0XHRcdG9uQ29tcGxldGUoKTtcblx0XHR9O1x0XHRcblxuXHRcdGltZy5zcmMgPSBpdGVtLnNyYzsvLyArICc/YT0nICsgTWF0aC5yYW5kb20oKTtcblxuXHRcdHJldHVybiBpbWc7XG5cdH0sXG5cdF9jaGVja0ZvckVycm9yID0gZnVuY3Rpb24oaXRlbSwgY2xlYW5VcCkge1xuXHRcdGlmKGl0ZW0uc3JjICYmIGl0ZW0ubG9hZEVycm9yICYmIGl0ZW0uY29udGFpbmVyKSB7XG5cblx0XHRcdGlmKGNsZWFuVXApIHtcblx0XHRcdFx0aXRlbS5jb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG5cdFx0XHR9XG5cblx0XHRcdGl0ZW0uY29udGFpbmVyLmlubmVySFRNTCA9IF9vcHRpb25zLmVycm9yTXNnLnJlcGxhY2UoJyV1cmwlJywgIGl0ZW0uc3JjICk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFxuXHRcdH1cblx0fSxcblx0X3NldEltYWdlU2l6ZSA9IGZ1bmN0aW9uKGl0ZW0sIGltZywgbWF4UmVzKSB7XG5cdFx0aWYoIWl0ZW0uc3JjKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYoIWltZykge1xuXHRcdFx0aW1nID0gaXRlbS5jb250YWluZXIubGFzdENoaWxkO1xuXHRcdH1cblxuXHRcdHZhciB3ID0gbWF4UmVzID8gaXRlbS53IDogTWF0aC5yb3VuZChpdGVtLncgKiBpdGVtLmZpdFJhdGlvKSxcblx0XHRcdGggPSBtYXhSZXMgPyBpdGVtLmggOiBNYXRoLnJvdW5kKGl0ZW0uaCAqIGl0ZW0uZml0UmF0aW8pO1xuXHRcdFxuXHRcdGlmKGl0ZW0ucGxhY2Vob2xkZXIgJiYgIWl0ZW0ubG9hZGVkKSB7XG5cdFx0XHRpdGVtLnBsYWNlaG9sZGVyLnN0eWxlLndpZHRoID0gdyArICdweCc7XG5cdFx0XHRpdGVtLnBsYWNlaG9sZGVyLnN0eWxlLmhlaWdodCA9IGggKyAncHgnO1xuXHRcdH1cblxuXHRcdGltZy5zdHlsZS53aWR0aCA9IHcgKyAncHgnO1xuXHRcdGltZy5zdHlsZS5oZWlnaHQgPSBoICsgJ3B4Jztcblx0fSxcblx0X2FwcGVuZEltYWdlc1Bvb2wgPSBmdW5jdGlvbigpIHtcblxuXHRcdGlmKF9pbWFnZXNUb0FwcGVuZFBvb2wubGVuZ3RoKSB7XG5cdFx0XHR2YXIgcG9vbEl0ZW07XG5cblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBfaW1hZ2VzVG9BcHBlbmRQb29sLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHBvb2xJdGVtID0gX2ltYWdlc1RvQXBwZW5kUG9vbFtpXTtcblx0XHRcdFx0aWYoIHBvb2xJdGVtLmhvbGRlci5pbmRleCA9PT0gcG9vbEl0ZW0uaW5kZXggKSB7XG5cdFx0XHRcdFx0X2FwcGVuZEltYWdlKHBvb2xJdGVtLmluZGV4LCBwb29sSXRlbS5pdGVtLCBwb29sSXRlbS5iYXNlRGl2LCBwb29sSXRlbS5pbWcsIGZhbHNlLCBwb29sSXRlbS5jbGVhclBsYWNlaG9sZGVyKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0X2ltYWdlc1RvQXBwZW5kUG9vbCA9IFtdO1xuXHRcdH1cblx0fTtcblx0XG5cblxuX3JlZ2lzdGVyTW9kdWxlKCdDb250cm9sbGVyJywge1xuXG5cdHB1YmxpY01ldGhvZHM6IHtcblxuXHRcdGxhenlMb2FkSXRlbTogZnVuY3Rpb24oaW5kZXgpIHtcblx0XHRcdGluZGV4ID0gX2dldExvb3BlZElkKGluZGV4KTtcblx0XHRcdHZhciBpdGVtID0gX2dldEl0ZW1BdChpbmRleCk7XG5cblx0XHRcdGlmKCFpdGVtIHx8ICgoaXRlbS5sb2FkZWQgfHwgaXRlbS5sb2FkaW5nKSAmJiAhX2l0ZW1zTmVlZFVwZGF0ZSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRfc2hvdXQoJ2dldHRpbmdEYXRhJywgaW5kZXgsIGl0ZW0pO1xuXG5cdFx0XHRpZiAoIWl0ZW0uc3JjKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0X3ByZWxvYWRJbWFnZShpdGVtKTtcblx0XHR9LFxuXHRcdGluaXRDb250cm9sbGVyOiBmdW5jdGlvbigpIHtcblx0XHRcdGZyYW1ld29yay5leHRlbmQoX29wdGlvbnMsIF9jb250cm9sbGVyRGVmYXVsdE9wdGlvbnMsIHRydWUpO1xuXHRcdFx0c2VsZi5pdGVtcyA9IF9pdGVtcyA9IGl0ZW1zO1xuXHRcdFx0X2dldEl0ZW1BdCA9IHNlbGYuZ2V0SXRlbUF0O1xuXHRcdFx0X2dldE51bUl0ZW1zID0gX29wdGlvbnMuZ2V0TnVtSXRlbXNGbjsgLy9zZWxmLmdldE51bUl0ZW1zO1xuXG5cblxuXHRcdFx0X2luaXRpYWxJc0xvb3AgPSBfb3B0aW9ucy5sb29wO1xuXHRcdFx0aWYoX2dldE51bUl0ZW1zKCkgPCAzKSB7XG5cdFx0XHRcdF9vcHRpb25zLmxvb3AgPSBmYWxzZTsgLy8gZGlzYWJsZSBsb29wIGlmIGxlc3MgdGhlbiAzIGl0ZW1zXG5cdFx0XHR9XG5cblx0XHRcdF9saXN0ZW4oJ2JlZm9yZUNoYW5nZScsIGZ1bmN0aW9uKGRpZmYpIHtcblxuXHRcdFx0XHR2YXIgcCA9IF9vcHRpb25zLnByZWxvYWQsXG5cdFx0XHRcdFx0aXNOZXh0ID0gZGlmZiA9PT0gbnVsbCA/IHRydWUgOiAoZGlmZiA+PSAwKSxcblx0XHRcdFx0XHRwcmVsb2FkQmVmb3JlID0gTWF0aC5taW4ocFswXSwgX2dldE51bUl0ZW1zKCkgKSxcblx0XHRcdFx0XHRwcmVsb2FkQWZ0ZXIgPSBNYXRoLm1pbihwWzFdLCBfZ2V0TnVtSXRlbXMoKSApLFxuXHRcdFx0XHRcdGk7XG5cblxuXHRcdFx0XHRmb3IoaSA9IDE7IGkgPD0gKGlzTmV4dCA/IHByZWxvYWRBZnRlciA6IHByZWxvYWRCZWZvcmUpOyBpKyspIHtcblx0XHRcdFx0XHRzZWxmLmxhenlMb2FkSXRlbShfY3VycmVudEl0ZW1JbmRleCtpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRmb3IoaSA9IDE7IGkgPD0gKGlzTmV4dCA/IHByZWxvYWRCZWZvcmUgOiBwcmVsb2FkQWZ0ZXIpOyBpKyspIHtcblx0XHRcdFx0XHRzZWxmLmxhenlMb2FkSXRlbShfY3VycmVudEl0ZW1JbmRleC1pKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdF9saXN0ZW4oJ2luaXRpYWxMYXlvdXQnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi5jdXJySXRlbS5pbml0aWFsTGF5b3V0ID0gX29wdGlvbnMuZ2V0VGh1bWJCb3VuZHNGbiAmJiBfb3B0aW9ucy5nZXRUaHVtYkJvdW5kc0ZuKF9jdXJyZW50SXRlbUluZGV4KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRfbGlzdGVuKCdtYWluU2Nyb2xsQW5pbUNvbXBsZXRlJywgX2FwcGVuZEltYWdlc1Bvb2wpO1xuXHRcdFx0X2xpc3RlbignaW5pdGlhbFpvb21JbkVuZCcsIF9hcHBlbmRJbWFnZXNQb29sKTtcblxuXG5cblx0XHRcdF9saXN0ZW4oJ2Rlc3Ryb3knLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGl0ZW07XG5cdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBfaXRlbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRpdGVtID0gX2l0ZW1zW2ldO1xuXHRcdFx0XHRcdC8vIHJlbW92ZSByZWZlcmVuY2UgdG8gRE9NIGVsZW1lbnRzLCBmb3IgR0Ncblx0XHRcdFx0XHRpZihpdGVtLmNvbnRhaW5lcikge1xuXHRcdFx0XHRcdFx0aXRlbS5jb250YWluZXIgPSBudWxsOyBcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYoaXRlbS5wbGFjZWhvbGRlcikge1xuXHRcdFx0XHRcdFx0aXRlbS5wbGFjZWhvbGRlciA9IG51bGw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmKGl0ZW0uaW1nKSB7XG5cdFx0XHRcdFx0XHRpdGVtLmltZyA9IG51bGw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmKGl0ZW0ucHJlbG9hZGVyKSB7XG5cdFx0XHRcdFx0XHRpdGVtLnByZWxvYWRlciA9IG51bGw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmKGl0ZW0ubG9hZEVycm9yKSB7XG5cdFx0XHRcdFx0XHRpdGVtLmxvYWRlZCA9IGl0ZW0ubG9hZEVycm9yID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdF9pbWFnZXNUb0FwcGVuZFBvb2wgPSBudWxsO1xuXHRcdFx0fSk7XG5cdFx0fSxcblxuXG5cdFx0Z2V0SXRlbUF0OiBmdW5jdGlvbihpbmRleCkge1xuXHRcdFx0aWYgKGluZGV4ID49IDApIHtcblx0XHRcdFx0cmV0dXJuIF9pdGVtc1tpbmRleF0gIT09IHVuZGVmaW5lZCA/IF9pdGVtc1tpbmRleF0gOiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXG5cdFx0YWxsb3dQcm9ncmVzc2l2ZUltZzogZnVuY3Rpb24oKSB7XG5cdFx0XHQvLyAxLiBQcm9ncmVzc2l2ZSBpbWFnZSBsb2FkaW5nIGlzbid0IHdvcmtpbmcgb24gd2Via2l0L2JsaW5rIFxuXHRcdFx0Ly8gICAgd2hlbiBody1hY2NlbGVyYXRpb24gKGUuZy4gdHJhbnNsYXRlWikgaXMgYXBwbGllZCB0byBJTUcgZWxlbWVudC5cblx0XHRcdC8vICAgIFRoYXQncyB3aHkgaW4gUGhvdG9Td2lwZSBwYXJlbnQgZWxlbWVudCBnZXRzIHpvb20gdHJhbnNmb3JtLCBub3QgaW1hZ2UgaXRzZWxmLlxuXHRcdFx0Ly8gICAgXG5cdFx0XHQvLyAyLiBQcm9ncmVzc2l2ZSBpbWFnZSBsb2FkaW5nIHNvbWV0aW1lcyBibGlua3MgaW4gd2Via2l0L2JsaW5rIHdoZW4gYXBwbHlpbmcgYW5pbWF0aW9uIHRvIHBhcmVudCBlbGVtZW50LlxuXHRcdFx0Ly8gICAgVGhhdCdzIHdoeSBpdCdzIGRpc2FibGVkIG9uIHRvdWNoIGRldmljZXMgKG1haW5seSBiZWNhdXNlIG9mIHN3aXBlIHRyYW5zaXRpb24pXG5cdFx0XHQvLyAgICBcblx0XHRcdC8vIDMuIFByb2dyZXNzaXZlIGltYWdlIGxvYWRpbmcgc29tZXRpbWVzIGRvZXNuJ3Qgd29yayBpbiBJRSAodXAgdG8gMTEpLlxuXG5cdFx0XHQvLyBEb24ndCBhbGxvdyBwcm9ncmVzc2l2ZSBsb2FkaW5nIG9uIG5vbi1sYXJnZSB0b3VjaCBkZXZpY2VzXG5cdFx0XHRyZXR1cm4gX29wdGlvbnMuZm9yY2VQcm9ncmVzc2l2ZUxvYWRpbmcgfHwgIV9saWtlbHlUb3VjaERldmljZSB8fCBfb3B0aW9ucy5tb3VzZVVzZWQgfHwgc2NyZWVuLndpZHRoID4gMTIwMDsgXG5cdFx0XHQvLyAxMjAwIC0gdG8gZWxpbWluYXRlIHRvdWNoIGRldmljZXMgd2l0aCBsYXJnZSBzY3JlZW4gKGxpa2UgQ2hyb21lYm9vayBQaXhlbClcblx0XHR9LFxuXG5cdFx0c2V0Q29udGVudDogZnVuY3Rpb24oaG9sZGVyLCBpbmRleCkge1xuXG5cdFx0XHRpZihfb3B0aW9ucy5sb29wKSB7XG5cdFx0XHRcdGluZGV4ID0gX2dldExvb3BlZElkKGluZGV4KTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHByZXZJdGVtID0gc2VsZi5nZXRJdGVtQXQoaG9sZGVyLmluZGV4KTtcblx0XHRcdGlmKHByZXZJdGVtKSB7XG5cdFx0XHRcdHByZXZJdGVtLmNvbnRhaW5lciA9IG51bGw7XG5cdFx0XHR9XG5cdFxuXHRcdFx0dmFyIGl0ZW0gPSBzZWxmLmdldEl0ZW1BdChpbmRleCksXG5cdFx0XHRcdGltZztcblx0XHRcdFxuXHRcdFx0aWYoIWl0ZW0pIHtcblx0XHRcdFx0aG9sZGVyLmVsLmlubmVySFRNTCA9ICcnO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIGFsbG93IHRvIG92ZXJyaWRlIGRhdGFcblx0XHRcdF9zaG91dCgnZ2V0dGluZ0RhdGEnLCBpbmRleCwgaXRlbSk7XG5cblx0XHRcdGhvbGRlci5pbmRleCA9IGluZGV4O1xuXHRcdFx0aG9sZGVyLml0ZW0gPSBpdGVtO1xuXG5cdFx0XHQvLyBiYXNlIGNvbnRhaW5lciBESVYgaXMgY3JlYXRlZCBvbmx5IG9uY2UgZm9yIGVhY2ggb2YgMyBob2xkZXJzXG5cdFx0XHR2YXIgYmFzZURpdiA9IGl0ZW0uY29udGFpbmVyID0gZnJhbWV3b3JrLmNyZWF0ZUVsKCdwc3dwX196b29tLXdyYXAnKTsgXG5cblx0XHRcdFxuXG5cdFx0XHRpZighaXRlbS5zcmMgJiYgaXRlbS5odG1sKSB7XG5cdFx0XHRcdGlmKGl0ZW0uaHRtbC50YWdOYW1lKSB7XG5cdFx0XHRcdFx0YmFzZURpdi5hcHBlbmRDaGlsZChpdGVtLmh0bWwpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGJhc2VEaXYuaW5uZXJIVE1MID0gaXRlbS5odG1sO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdF9jaGVja0ZvckVycm9yKGl0ZW0pO1xuXG5cdFx0XHRfY2FsY3VsYXRlSXRlbVNpemUoaXRlbSwgX3ZpZXdwb3J0U2l6ZSk7XG5cdFx0XHRcblx0XHRcdGlmKGl0ZW0uc3JjICYmICFpdGVtLmxvYWRFcnJvciAmJiAhaXRlbS5sb2FkZWQpIHtcblxuXHRcdFx0XHRpdGVtLmxvYWRDb21wbGV0ZSA9IGZ1bmN0aW9uKGl0ZW0pIHtcblxuXHRcdFx0XHRcdC8vIGdhbGxlcnkgY2xvc2VkIGJlZm9yZSBpbWFnZSBmaW5pc2hlZCBsb2FkaW5nXG5cdFx0XHRcdFx0aWYoIV9pc09wZW4pIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBjaGVjayBpZiBob2xkZXIgaGFzbid0IGNoYW5nZWQgd2hpbGUgaW1hZ2Ugd2FzIGxvYWRpbmdcblx0XHRcdFx0XHRpZihob2xkZXIgJiYgaG9sZGVyLmluZGV4ID09PSBpbmRleCApIHtcblx0XHRcdFx0XHRcdGlmKCBfY2hlY2tGb3JFcnJvcihpdGVtLCB0cnVlKSApIHtcblx0XHRcdFx0XHRcdFx0aXRlbS5sb2FkQ29tcGxldGUgPSBpdGVtLmltZyA9IG51bGw7XG5cdFx0XHRcdFx0XHRcdF9jYWxjdWxhdGVJdGVtU2l6ZShpdGVtLCBfdmlld3BvcnRTaXplKTtcblx0XHRcdFx0XHRcdFx0X2FwcGx5Wm9vbVBhblRvSXRlbShpdGVtKTtcblxuXHRcdFx0XHRcdFx0XHRpZihob2xkZXIuaW5kZXggPT09IF9jdXJyZW50SXRlbUluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gcmVjYWxjdWxhdGUgZGltZW5zaW9uc1xuXHRcdFx0XHRcdFx0XHRcdHNlbGYudXBkYXRlQ3Vyclpvb21JdGVtKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYoICFpdGVtLmltYWdlQXBwZW5kZWQgKSB7XG5cdFx0XHRcdFx0XHRcdGlmKF9mZWF0dXJlcy50cmFuc2Zvcm0gJiYgKF9tYWluU2Nyb2xsQW5pbWF0aW5nIHx8IF9pbml0aWFsWm9vbVJ1bm5pbmcpICkge1xuXHRcdFx0XHRcdFx0XHRcdF9pbWFnZXNUb0FwcGVuZFBvb2wucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRpdGVtOml0ZW0sXG5cdFx0XHRcdFx0XHRcdFx0XHRiYXNlRGl2OmJhc2VEaXYsXG5cdFx0XHRcdFx0XHRcdFx0XHRpbWc6aXRlbS5pbWcsXG5cdFx0XHRcdFx0XHRcdFx0XHRpbmRleDppbmRleCxcblx0XHRcdFx0XHRcdFx0XHRcdGhvbGRlcjpob2xkZXIsXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGVhclBsYWNlaG9sZGVyOnRydWVcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRfYXBwZW5kSW1hZ2UoaW5kZXgsIGl0ZW0sIGJhc2VEaXYsIGl0ZW0uaW1nLCBfbWFpblNjcm9sbEFuaW1hdGluZyB8fCBfaW5pdGlhbFpvb21SdW5uaW5nLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gcmVtb3ZlIHByZWxvYWRlciAmIG1pbmktaW1nXG5cdFx0XHRcdFx0XHRcdGlmKCFfaW5pdGlhbFpvb21SdW5uaW5nICYmIGl0ZW0ucGxhY2Vob2xkZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRpdGVtLnBsYWNlaG9sZGVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cdFx0XHRcdFx0XHRcdFx0aXRlbS5wbGFjZWhvbGRlciA9IG51bGw7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpdGVtLmxvYWRDb21wbGV0ZSA9IG51bGw7XG5cdFx0XHRcdFx0aXRlbS5pbWcgPSBudWxsOyAvLyBubyBuZWVkIHRvIHN0b3JlIGltYWdlIGVsZW1lbnQgYWZ0ZXIgaXQncyBhZGRlZFxuXG5cdFx0XHRcdFx0X3Nob3V0KCdpbWFnZUxvYWRDb21wbGV0ZScsIGluZGV4LCBpdGVtKTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRpZihmcmFtZXdvcmsuZmVhdHVyZXMudHJhbnNmb3JtKSB7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0dmFyIHBsYWNlaG9sZGVyQ2xhc3NOYW1lID0gJ3Bzd3BfX2ltZyBwc3dwX19pbWctLXBsYWNlaG9sZGVyJzsgXG5cdFx0XHRcdFx0cGxhY2Vob2xkZXJDbGFzc05hbWUgKz0gKGl0ZW0ubXNyYyA/ICcnIDogJyBwc3dwX19pbWctLXBsYWNlaG9sZGVyLS1ibGFuaycpO1xuXG5cdFx0XHRcdFx0dmFyIHBsYWNlaG9sZGVyID0gZnJhbWV3b3JrLmNyZWF0ZUVsKHBsYWNlaG9sZGVyQ2xhc3NOYW1lLCBpdGVtLm1zcmMgPyAnaW1nJyA6ICcnKTtcblx0XHRcdFx0XHRpZihpdGVtLm1zcmMpIHtcblx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyLnNyYyA9IGl0ZW0ubXNyYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0X3NldEltYWdlU2l6ZShpdGVtLCBwbGFjZWhvbGRlcik7XG5cblx0XHRcdFx0XHRiYXNlRGl2LmFwcGVuZENoaWxkKHBsYWNlaG9sZGVyKTtcblx0XHRcdFx0XHRpdGVtLnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XG5cblx0XHRcdFx0fVxuXHRcdFx0XHRcblxuXHRcdFx0XHRcblxuXHRcdFx0XHRpZighaXRlbS5sb2FkaW5nKSB7XG5cdFx0XHRcdFx0X3ByZWxvYWRJbWFnZShpdGVtKTtcblx0XHRcdFx0fVxuXG5cblx0XHRcdFx0aWYoIHNlbGYuYWxsb3dQcm9ncmVzc2l2ZUltZygpICkge1xuXHRcdFx0XHRcdC8vIGp1c3QgYXBwZW5kIGltYWdlXG5cdFx0XHRcdFx0aWYoIV9pbml0aWFsQ29udGVudFNldCAmJiBfZmVhdHVyZXMudHJhbnNmb3JtKSB7XG5cdFx0XHRcdFx0XHRfaW1hZ2VzVG9BcHBlbmRQb29sLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRpdGVtOml0ZW0sIFxuXHRcdFx0XHRcdFx0XHRiYXNlRGl2OmJhc2VEaXYsIFxuXHRcdFx0XHRcdFx0XHRpbWc6aXRlbS5pbWcsIFxuXHRcdFx0XHRcdFx0XHRpbmRleDppbmRleCwgXG5cdFx0XHRcdFx0XHRcdGhvbGRlcjpob2xkZXJcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRfYXBwZW5kSW1hZ2UoaW5kZXgsIGl0ZW0sIGJhc2VEaXYsIGl0ZW0uaW1nLCB0cnVlLCB0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHR9IGVsc2UgaWYoaXRlbS5zcmMgJiYgIWl0ZW0ubG9hZEVycm9yKSB7XG5cdFx0XHRcdC8vIGltYWdlIG9iamVjdCBpcyBjcmVhdGVkIGV2ZXJ5IHRpbWUsIGR1ZSB0byBidWdzIG9mIGltYWdlIGxvYWRpbmcgJiBkZWxheSB3aGVuIHN3aXRjaGluZyBpbWFnZXNcblx0XHRcdFx0aW1nID0gZnJhbWV3b3JrLmNyZWF0ZUVsKCdwc3dwX19pbWcnLCAnaW1nJyk7XG5cdFx0XHRcdGltZy5zdHlsZS5vcGFjaXR5ID0gMTtcblx0XHRcdFx0aW1nLnNyYyA9IGl0ZW0uc3JjO1xuXHRcdFx0XHRfc2V0SW1hZ2VTaXplKGl0ZW0sIGltZyk7XG5cdFx0XHRcdF9hcHBlbmRJbWFnZShpbmRleCwgaXRlbSwgYmFzZURpdiwgaW1nLCB0cnVlKTtcblx0XHRcdH1cblx0XHRcdFxuXG5cdFx0XHRpZighX2luaXRpYWxDb250ZW50U2V0ICYmIGluZGV4ID09PSBfY3VycmVudEl0ZW1JbmRleCkge1xuXHRcdFx0XHRfY3Vyclpvb21FbGVtZW50U3R5bGUgPSBiYXNlRGl2LnN0eWxlO1xuXHRcdFx0XHRfc2hvd09ySGlkZShpdGVtLCAoaW1nIHx8aXRlbS5pbWcpICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRfYXBwbHlab29tUGFuVG9JdGVtKGl0ZW0pO1xuXHRcdFx0fVxuXG5cdFx0XHRob2xkZXIuZWwuaW5uZXJIVE1MID0gJyc7XG5cdFx0XHRob2xkZXIuZWwuYXBwZW5kQ2hpbGQoYmFzZURpdik7XG5cdFx0fSxcblxuXHRcdGNsZWFuU2xpZGU6IGZ1bmN0aW9uKCBpdGVtICkge1xuXHRcdFx0aWYoaXRlbS5pbWcgKSB7XG5cdFx0XHRcdGl0ZW0uaW1nLm9ubG9hZCA9IGl0ZW0uaW1nLm9uZXJyb3IgPSBudWxsO1xuXHRcdFx0fVxuXHRcdFx0aXRlbS5sb2FkZWQgPSBpdGVtLmxvYWRpbmcgPSBpdGVtLmltZyA9IGl0ZW0uaW1hZ2VBcHBlbmRlZCA9IGZhbHNlO1xuXHRcdH1cblxuXHR9XG59KTtcblxuLyo+Pml0ZW1zLWNvbnRyb2xsZXIqL1xuXG4vKj4+dGFwKi9cbi8qKlxuICogdGFwLmpzOlxuICpcbiAqIERpc3BsYXRjaGVzIHRhcCBhbmQgZG91YmxlLXRhcCBldmVudHMuXG4gKiBcbiAqL1xuXG52YXIgdGFwVGltZXIsXG5cdHRhcFJlbGVhc2VQb2ludCA9IHt9LFxuXHRfZGlzcGF0Y2hUYXBFdmVudCA9IGZ1bmN0aW9uKG9yaWdFdmVudCwgcmVsZWFzZVBvaW50LCBwb2ludGVyVHlwZSkge1x0XHRcblx0XHR2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCAnQ3VzdG9tRXZlbnQnICksXG5cdFx0XHRlRGV0YWlsID0ge1xuXHRcdFx0XHRvcmlnRXZlbnQ6b3JpZ0V2ZW50LCBcblx0XHRcdFx0dGFyZ2V0Om9yaWdFdmVudC50YXJnZXQsIFxuXHRcdFx0XHRyZWxlYXNlUG9pbnQ6IHJlbGVhc2VQb2ludCwgXG5cdFx0XHRcdHBvaW50ZXJUeXBlOnBvaW50ZXJUeXBlIHx8ICd0b3VjaCdcblx0XHRcdH07XG5cblx0XHRlLmluaXRDdXN0b21FdmVudCggJ3Bzd3BUYXAnLCB0cnVlLCB0cnVlLCBlRGV0YWlsICk7XG5cdFx0b3JpZ0V2ZW50LnRhcmdldC5kaXNwYXRjaEV2ZW50KGUpO1xuXHR9O1xuXG5fcmVnaXN0ZXJNb2R1bGUoJ1RhcCcsIHtcblx0cHVibGljTWV0aG9kczoge1xuXHRcdGluaXRUYXA6IGZ1bmN0aW9uKCkge1xuXHRcdFx0X2xpc3RlbignZmlyc3RUb3VjaFN0YXJ0Jywgc2VsZi5vblRhcFN0YXJ0KTtcblx0XHRcdF9saXN0ZW4oJ3RvdWNoUmVsZWFzZScsIHNlbGYub25UYXBSZWxlYXNlKTtcblx0XHRcdF9saXN0ZW4oJ2Rlc3Ryb3knLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dGFwUmVsZWFzZVBvaW50ID0ge307XG5cdFx0XHRcdHRhcFRpbWVyID0gbnVsbDtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0b25UYXBTdGFydDogZnVuY3Rpb24odG91Y2hMaXN0KSB7XG5cdFx0XHRpZih0b3VjaExpc3QubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQodGFwVGltZXIpO1xuXHRcdFx0XHR0YXBUaW1lciA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblRhcFJlbGVhc2U6IGZ1bmN0aW9uKGUsIHJlbGVhc2VQb2ludCkge1xuXHRcdFx0aWYoIXJlbGVhc2VQb2ludCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmKCFfbW92ZWQgJiYgIV9pc011bHRpdG91Y2ggJiYgIV9udW1BbmltYXRpb25zKSB7XG5cdFx0XHRcdHZhciBwMCA9IHJlbGVhc2VQb2ludDtcblx0XHRcdFx0aWYodGFwVGltZXIpIHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGFwVGltZXIpO1xuXHRcdFx0XHRcdHRhcFRpbWVyID0gbnVsbDtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGlmIHRhcGVkIG9uIHRoZSBzYW1lIHBsYWNlXG5cdFx0XHRcdFx0aWYgKCBfaXNOZWFyYnlQb2ludHMocDAsIHRhcFJlbGVhc2VQb2ludCkgKSB7XG5cdFx0XHRcdFx0XHRfc2hvdXQoJ2RvdWJsZVRhcCcsIHAwKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihyZWxlYXNlUG9pbnQudHlwZSA9PT0gJ21vdXNlJykge1xuXHRcdFx0XHRcdF9kaXNwYXRjaFRhcEV2ZW50KGUsIHJlbGVhc2VQb2ludCwgJ21vdXNlJyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIGNsaWNrZWRUYWdOYW1lID0gZS50YXJnZXQudGFnTmFtZS50b1VwcGVyQ2FzZSgpO1xuXHRcdFx0XHQvLyBhdm9pZCBkb3VibGUgdGFwIGRlbGF5IG9uIGJ1dHRvbnMgYW5kIGVsZW1lbnRzIHRoYXQgaGF2ZSBjbGFzcyBwc3dwX19zaW5nbGUtdGFwXG5cdFx0XHRcdGlmKGNsaWNrZWRUYWdOYW1lID09PSAnQlVUVE9OJyB8fCBmcmFtZXdvcmsuaGFzQ2xhc3MoZS50YXJnZXQsICdwc3dwX19zaW5nbGUtdGFwJykgKSB7XG5cdFx0XHRcdFx0X2Rpc3BhdGNoVGFwRXZlbnQoZSwgcmVsZWFzZVBvaW50KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRfZXF1YWxpemVQb2ludHModGFwUmVsZWFzZVBvaW50LCBwMCk7XG5cblx0XHRcdFx0dGFwVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdF9kaXNwYXRjaFRhcEV2ZW50KGUsIHJlbGVhc2VQb2ludCk7XG5cdFx0XHRcdFx0dGFwVGltZXIgPSBudWxsO1xuXHRcdFx0XHR9LCAzMDApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSk7XG5cbi8qPj50YXAqL1xuXG4vKj4+ZGVza3RvcC16b29tKi9cbi8qKlxuICpcbiAqIGRlc2t0b3Atem9vbS5qczpcbiAqXG4gKiAtIEJpbmRzIG1vdXNld2hlZWwgZXZlbnQgZm9yIHBhbmluZyB6b29tZWQgaW1hZ2UuXG4gKiAtIE1hbmFnZXMgXCJkcmFnZ2luZ1wiLCBcInpvb21lZC1pblwiLCBcInpvb20tb3V0XCIgY2xhc3Nlcy5cbiAqICAgKHdoaWNoIGFyZSB1c2VkIGZvciBjdXJzb3JzIGFuZCB6b29tIGljb24pXG4gKiAtIEFkZHMgdG9nZ2xlRGVza3RvcFpvb20gZnVuY3Rpb24uXG4gKiBcbiAqL1xuXG52YXIgX3doZWVsRGVsdGE7XG5cdFxuX3JlZ2lzdGVyTW9kdWxlKCdEZXNrdG9wWm9vbScsIHtcblxuXHRwdWJsaWNNZXRob2RzOiB7XG5cblx0XHRpbml0RGVza3RvcFpvb206IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRpZihfb2xkSUUpIHtcblx0XHRcdFx0Ly8gbm8gem9vbSBmb3Igb2xkIElFICg8PTgpXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYoX2xpa2VseVRvdWNoRGV2aWNlKSB7XG5cdFx0XHRcdC8vIGlmIGRldGVjdGVkIGhhcmR3YXJlIHRvdWNoIHN1cHBvcnQsIHdlIHdhaXQgdW50aWwgbW91c2UgaXMgdXNlZCxcblx0XHRcdFx0Ly8gYW5kIG9ubHkgdGhlbiBhcHBseSBkZXNrdG9wLXpvb20gZmVhdHVyZXNcblx0XHRcdFx0X2xpc3RlbignbW91c2VVc2VkJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0c2VsZi5zZXR1cERlc2t0b3Bab29tKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5zZXR1cERlc2t0b3Bab29tKHRydWUpO1xuXHRcdFx0fVxuXG5cdFx0fSxcblxuXHRcdHNldHVwRGVza3RvcFpvb206IGZ1bmN0aW9uKG9uSW5pdCkge1xuXG5cdFx0XHRfd2hlZWxEZWx0YSA9IHt9O1xuXG5cdFx0XHR2YXIgZXZlbnRzID0gJ3doZWVsIG1vdXNld2hlZWwgRE9NTW91c2VTY3JvbGwnO1xuXHRcdFx0XG5cdFx0XHRfbGlzdGVuKCdiaW5kRXZlbnRzJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGZyYW1ld29yay5iaW5kKHRlbXBsYXRlLCBldmVudHMsICBzZWxmLmhhbmRsZU1vdXNlV2hlZWwpO1xuXHRcdFx0fSk7XG5cblx0XHRcdF9saXN0ZW4oJ3VuYmluZEV2ZW50cycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZihfd2hlZWxEZWx0YSkge1xuXHRcdFx0XHRcdGZyYW1ld29yay51bmJpbmQodGVtcGxhdGUsIGV2ZW50cywgc2VsZi5oYW5kbGVNb3VzZVdoZWVsKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHNlbGYubW91c2Vab29tZWRJbiA9IGZhbHNlO1xuXG5cdFx0XHR2YXIgaGFzRHJhZ2dpbmdDbGFzcyxcblx0XHRcdFx0dXBkYXRlWm9vbWFibGUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZihzZWxmLm1vdXNlWm9vbWVkSW4pIHtcblx0XHRcdFx0XHRcdGZyYW1ld29yay5yZW1vdmVDbGFzcyh0ZW1wbGF0ZSwgJ3Bzd3AtLXpvb21lZC1pbicpO1xuXHRcdFx0XHRcdFx0c2VsZi5tb3VzZVpvb21lZEluID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmKF9jdXJyWm9vbUxldmVsIDwgMSkge1xuXHRcdFx0XHRcdFx0ZnJhbWV3b3JrLmFkZENsYXNzKHRlbXBsYXRlLCAncHN3cC0tem9vbS1hbGxvd2VkJyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGZyYW1ld29yay5yZW1vdmVDbGFzcyh0ZW1wbGF0ZSwgJ3Bzd3AtLXpvb20tYWxsb3dlZCcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZW1vdmVEcmFnZ2luZ0NsYXNzKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlbW92ZURyYWdnaW5nQ2xhc3MgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZihoYXNEcmFnZ2luZ0NsYXNzKSB7XG5cdFx0XHRcdFx0XHRmcmFtZXdvcmsucmVtb3ZlQ2xhc3ModGVtcGxhdGUsICdwc3dwLS1kcmFnZ2luZycpO1xuXHRcdFx0XHRcdFx0aGFzRHJhZ2dpbmdDbGFzcyA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblxuXHRcdFx0X2xpc3RlbigncmVzaXplJyAsIHVwZGF0ZVpvb21hYmxlKTtcblx0XHRcdF9saXN0ZW4oJ2FmdGVyQ2hhbmdlJyAsIHVwZGF0ZVpvb21hYmxlKTtcblx0XHRcdF9saXN0ZW4oJ3BvaW50ZXJEb3duJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmKHNlbGYubW91c2Vab29tZWRJbikge1xuXHRcdFx0XHRcdGhhc0RyYWdnaW5nQ2xhc3MgPSB0cnVlO1xuXHRcdFx0XHRcdGZyYW1ld29yay5hZGRDbGFzcyh0ZW1wbGF0ZSwgJ3Bzd3AtLWRyYWdnaW5nJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0X2xpc3RlbigncG9pbnRlclVwJywgcmVtb3ZlRHJhZ2dpbmdDbGFzcyk7XG5cblx0XHRcdGlmKCFvbkluaXQpIHtcblx0XHRcdFx0dXBkYXRlWm9vbWFibGUoKTtcblx0XHRcdH1cblx0XHRcdFxuXHRcdH0sXG5cblx0XHRoYW5kbGVNb3VzZVdoZWVsOiBmdW5jdGlvbihlKSB7XG5cblx0XHRcdGlmKF9jdXJyWm9vbUxldmVsIDw9IHNlbGYuY3Vyckl0ZW0uZml0UmF0aW8pIHtcblx0XHRcdFx0aWYoIF9vcHRpb25zLm1vZGFsICkge1xuXG5cdFx0XHRcdFx0aWYgKCFfb3B0aW9ucy5jbG9zZU9uU2Nyb2xsIHx8IF9udW1BbmltYXRpb25zIHx8IF9pc0RyYWdnaW5nKSB7XG5cdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmKF90cmFuc2Zvcm1LZXkgJiYgTWF0aC5hYnMoZS5kZWx0YVkpID4gMikge1xuXHRcdFx0XHRcdFx0Ly8gY2xvc2UgUGhvdG9Td2lwZVxuXHRcdFx0XHRcdFx0Ly8gaWYgYnJvd3NlciBzdXBwb3J0cyB0cmFuc2Zvcm1zICYgc2Nyb2xsIGNoYW5nZWQgZW5vdWdoXG5cdFx0XHRcdFx0XHRfY2xvc2VkQnlTY3JvbGwgPSB0cnVlO1xuXHRcdFx0XHRcdFx0c2VsZi5jbG9zZSgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBhbGxvdyBqdXN0IG9uZSBldmVudCB0byBmaXJlXG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG5cdFx0XHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvd2hlZWxcblx0XHRcdF93aGVlbERlbHRhLnggPSAwO1xuXG5cdFx0XHRpZignZGVsdGFYJyBpbiBlKSB7XG5cdFx0XHRcdGlmKGUuZGVsdGFNb2RlID09PSAxIC8qIERPTV9ERUxUQV9MSU5FICovKSB7XG5cdFx0XHRcdFx0Ly8gMTggLSBhdmVyYWdlIGxpbmUgaGVpZ2h0XG5cdFx0XHRcdFx0X3doZWVsRGVsdGEueCA9IGUuZGVsdGFYICogMTg7XG5cdFx0XHRcdFx0X3doZWVsRGVsdGEueSA9IGUuZGVsdGFZICogMTg7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0X3doZWVsRGVsdGEueCA9IGUuZGVsdGFYO1xuXHRcdFx0XHRcdF93aGVlbERlbHRhLnkgPSBlLmRlbHRhWTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmKCd3aGVlbERlbHRhJyBpbiBlKSB7XG5cdFx0XHRcdGlmKGUud2hlZWxEZWx0YVgpIHtcblx0XHRcdFx0XHRfd2hlZWxEZWx0YS54ID0gLTAuMTYgKiBlLndoZWVsRGVsdGFYO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKGUud2hlZWxEZWx0YVkpIHtcblx0XHRcdFx0XHRfd2hlZWxEZWx0YS55ID0gLTAuMTYgKiBlLndoZWVsRGVsdGFZO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdF93aGVlbERlbHRhLnkgPSAtMC4xNiAqIGUud2hlZWxEZWx0YTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmKCdkZXRhaWwnIGluIGUpIHtcblx0XHRcdFx0X3doZWVsRGVsdGEueSA9IGUuZGV0YWlsO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRfY2FsY3VsYXRlUGFuQm91bmRzKF9jdXJyWm9vbUxldmVsLCB0cnVlKTtcblxuXHRcdFx0dmFyIG5ld1BhblggPSBfcGFuT2Zmc2V0LnggLSBfd2hlZWxEZWx0YS54LFxuXHRcdFx0XHRuZXdQYW5ZID0gX3Bhbk9mZnNldC55IC0gX3doZWVsRGVsdGEueTtcblxuXHRcdFx0Ly8gb25seSBwcmV2ZW50IHNjcm9sbGluZyBpbiBub25tb2RhbCBtb2RlIHdoZW4gbm90IGF0IGVkZ2VzXG5cdFx0XHRpZiAoX29wdGlvbnMubW9kYWwgfHxcblx0XHRcdFx0KFxuXHRcdFx0XHRuZXdQYW5YIDw9IF9jdXJyUGFuQm91bmRzLm1pbi54ICYmIG5ld1BhblggPj0gX2N1cnJQYW5Cb3VuZHMubWF4LnggJiZcblx0XHRcdFx0bmV3UGFuWSA8PSBfY3VyclBhbkJvdW5kcy5taW4ueSAmJiBuZXdQYW5ZID49IF9jdXJyUGFuQm91bmRzLm1heC55XG5cdFx0XHRcdCkgKSB7XG5cdFx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVE9ETzogdXNlIHJBRiBpbnN0ZWFkIG9mIG1vdXNld2hlZWw/XG5cdFx0XHRzZWxmLnBhblRvKG5ld1BhblgsIG5ld1BhblkpO1xuXHRcdH0sXG5cblx0XHR0b2dnbGVEZXNrdG9wWm9vbTogZnVuY3Rpb24oY2VudGVyUG9pbnQpIHtcblx0XHRcdGNlbnRlclBvaW50ID0gY2VudGVyUG9pbnQgfHwge3g6X3ZpZXdwb3J0U2l6ZS54LzIgKyBfb2Zmc2V0LngsIHk6X3ZpZXdwb3J0U2l6ZS55LzIgKyBfb2Zmc2V0LnkgfTtcblxuXHRcdFx0dmFyIGRvdWJsZVRhcFpvb21MZXZlbCA9IF9vcHRpb25zLmdldERvdWJsZVRhcFpvb20odHJ1ZSwgc2VsZi5jdXJySXRlbSk7XG5cdFx0XHR2YXIgem9vbU91dCA9IF9jdXJyWm9vbUxldmVsID09PSBkb3VibGVUYXBab29tTGV2ZWw7XG5cdFx0XHRcblx0XHRcdHNlbGYubW91c2Vab29tZWRJbiA9ICF6b29tT3V0O1xuXG5cdFx0XHRzZWxmLnpvb21Ubyh6b29tT3V0ID8gc2VsZi5jdXJySXRlbS5pbml0aWFsWm9vbUxldmVsIDogZG91YmxlVGFwWm9vbUxldmVsLCBjZW50ZXJQb2ludCwgMzMzKTtcblx0XHRcdGZyYW1ld29ya1sgKCF6b29tT3V0ID8gJ2FkZCcgOiAncmVtb3ZlJykgKyAnQ2xhc3MnXSh0ZW1wbGF0ZSwgJ3Bzd3AtLXpvb21lZC1pbicpO1xuXHRcdH1cblxuXHR9XG59KTtcblxuXG4vKj4+ZGVza3RvcC16b29tKi9cblxuLyo+Pmhpc3RvcnkqL1xuLyoqXG4gKlxuICogaGlzdG9yeS5qczpcbiAqXG4gKiAtIEJhY2sgYnV0dG9uIHRvIGNsb3NlIGdhbGxlcnkuXG4gKiBcbiAqIC0gVW5pcXVlIFVSTCBmb3IgZWFjaCBzbGlkZTogZXhhbXBsZS5jb20vJnBpZD0xJmdpZD0zXG4gKiAgICh3aGVyZSBQSUQgaXMgcGljdHVyZSBpbmRleCwgYW5kIEdJRCBhbmQgZ2FsbGVyeSBpbmRleClcbiAqICAgXG4gKiAtIFN3aXRjaCBVUkwgd2hlbiBzbGlkZXMgY2hhbmdlLlxuICogXG4gKi9cblxuXG52YXIgX2hpc3RvcnlEZWZhdWx0T3B0aW9ucyA9IHtcblx0aGlzdG9yeTogdHJ1ZSxcblx0Z2FsbGVyeVVJRDogMVxufTtcblxudmFyIF9oaXN0b3J5VXBkYXRlVGltZW91dCxcblx0X2hhc2hDaGFuZ2VUaW1lb3V0LFxuXHRfaGFzaEFuaW1DaGVja1RpbWVvdXQsXG5cdF9oYXNoQ2hhbmdlZEJ5U2NyaXB0LFxuXHRfaGFzaENoYW5nZWRCeUhpc3RvcnksXG5cdF9oYXNoUmVzZXRlZCxcblx0X2luaXRpYWxIYXNoLFxuXHRfaGlzdG9yeUNoYW5nZWQsXG5cdF9jbG9zZWRGcm9tVVJMLFxuXHRfdXJsQ2hhbmdlZE9uY2UsXG5cdF93aW5kb3dMb2MsXG5cblx0X3N1cHBvcnRzUHVzaFN0YXRlLFxuXG5cdF9nZXRIYXNoID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIF93aW5kb3dMb2MuaGFzaC5zdWJzdHJpbmcoMSk7XG5cdH0sXG5cdF9jbGVhbkhpc3RvcnlUaW1lb3V0cyA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0aWYoX2hpc3RvcnlVcGRhdGVUaW1lb3V0KSB7XG5cdFx0XHRjbGVhclRpbWVvdXQoX2hpc3RvcnlVcGRhdGVUaW1lb3V0KTtcblx0XHR9XG5cblx0XHRpZihfaGFzaEFuaW1DaGVja1RpbWVvdXQpIHtcblx0XHRcdGNsZWFyVGltZW91dChfaGFzaEFuaW1DaGVja1RpbWVvdXQpO1xuXHRcdH1cblx0fSxcblxuXHQvLyBwaWQgLSBQaWN0dXJlIGluZGV4XG5cdC8vIGdpZCAtIEdhbGxlcnkgaW5kZXhcblx0X3BhcnNlSXRlbUluZGV4RnJvbVVSTCA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBoYXNoID0gX2dldEhhc2goKSxcblx0XHRcdHBhcmFtcyA9IHt9O1xuXG5cdFx0aWYoaGFzaC5sZW5ndGggPCA1KSB7IC8vIHBpZD0xXG5cdFx0XHRyZXR1cm4gcGFyYW1zO1xuXHRcdH1cblxuXHRcdHZhciBpLCB2YXJzID0gaGFzaC5zcGxpdCgnJicpO1xuXHRcdGZvciAoaSA9IDA7IGkgPCB2YXJzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZighdmFyc1tpXSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdHZhciBwYWlyID0gdmFyc1tpXS5zcGxpdCgnPScpO1x0XG5cdFx0XHRpZihwYWlyLmxlbmd0aCA8IDIpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRwYXJhbXNbcGFpclswXV0gPSBwYWlyWzFdO1xuXHRcdH1cblx0XHRpZihfb3B0aW9ucy5nYWxsZXJ5UElEcykge1xuXHRcdFx0Ly8gZGV0ZWN0IGN1c3RvbSBwaWQgaW4gaGFzaCBhbmQgc2VhcmNoIGZvciBpdCBhbW9uZyB0aGUgaXRlbXMgY29sbGVjdGlvblxuXHRcdFx0dmFyIHNlYXJjaGZvciA9IHBhcmFtcy5waWQ7XG5cdFx0XHRwYXJhbXMucGlkID0gMDsgLy8gaWYgY3VzdG9tIHBpZCBjYW5ub3QgYmUgZm91bmQsIGZhbGxiYWNrIHRvIHRoZSBmaXJzdCBpdGVtXG5cdFx0XHRmb3IoaSA9IDA7IGkgPCBfaXRlbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYoX2l0ZW1zW2ldLnBpZCA9PT0gc2VhcmNoZm9yKSB7XG5cdFx0XHRcdFx0cGFyYW1zLnBpZCA9IGk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cGFyYW1zLnBpZCA9IHBhcnNlSW50KHBhcmFtcy5waWQsMTApLTE7XG5cdFx0fVxuXHRcdGlmKCBwYXJhbXMucGlkIDwgMCApIHtcblx0XHRcdHBhcmFtcy5waWQgPSAwO1xuXHRcdH1cblx0XHRyZXR1cm4gcGFyYW1zO1xuXHR9LFxuXHRfdXBkYXRlSGFzaCA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0aWYoX2hhc2hBbmltQ2hlY2tUaW1lb3V0KSB7XG5cdFx0XHRjbGVhclRpbWVvdXQoX2hhc2hBbmltQ2hlY2tUaW1lb3V0KTtcblx0XHR9XG5cblxuXHRcdGlmKF9udW1BbmltYXRpb25zIHx8IF9pc0RyYWdnaW5nKSB7XG5cdFx0XHQvLyBjaGFuZ2luZyBicm93c2VyIFVSTCBmb3JjZXMgbGF5b3V0L3BhaW50IGluIHNvbWUgYnJvd3NlcnMsIHdoaWNoIGNhdXNlcyBub3RpY2FibGUgbGFnIGR1cmluZyBhbmltYXRpb25cblx0XHRcdC8vIHRoYXQncyB3aHkgd2UgdXBkYXRlIGhhc2ggb25seSB3aGVuIG5vIGFuaW1hdGlvbnMgcnVubmluZ1xuXHRcdFx0X2hhc2hBbmltQ2hlY2tUaW1lb3V0ID0gc2V0VGltZW91dChfdXBkYXRlSGFzaCwgNTAwKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0XG5cdFx0aWYoX2hhc2hDaGFuZ2VkQnlTY3JpcHQpIHtcblx0XHRcdGNsZWFyVGltZW91dChfaGFzaENoYW5nZVRpbWVvdXQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRfaGFzaENoYW5nZWRCeVNjcmlwdCA9IHRydWU7XG5cdFx0fVxuXG5cblx0XHR2YXIgcGlkID0gKF9jdXJyZW50SXRlbUluZGV4ICsgMSk7XG5cdFx0dmFyIGl0ZW0gPSBfZ2V0SXRlbUF0KCBfY3VycmVudEl0ZW1JbmRleCApO1xuXHRcdGlmKGl0ZW0uaGFzT3duUHJvcGVydHkoJ3BpZCcpKSB7XG5cdFx0XHQvLyBjYXJyeSBmb3J3YXJkIGFueSBjdXN0b20gcGlkIGFzc2lnbmVkIHRvIHRoZSBpdGVtXG5cdFx0XHRwaWQgPSBpdGVtLnBpZDtcblx0XHR9XG5cdFx0dmFyIG5ld0hhc2ggPSBfaW5pdGlhbEhhc2ggKyAnJicgICsgICdnaWQ9JyArIF9vcHRpb25zLmdhbGxlcnlVSUQgKyAnJicgKyAncGlkPScgKyBwaWQ7XG5cblx0XHRpZighX2hpc3RvcnlDaGFuZ2VkKSB7XG5cdFx0XHRpZihfd2luZG93TG9jLmhhc2guaW5kZXhPZihuZXdIYXNoKSA9PT0gLTEpIHtcblx0XHRcdFx0X3VybENoYW5nZWRPbmNlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdC8vIGZpcnN0IHRpbWUgLSBhZGQgbmV3IGhpc29yeSByZWNvcmQsIHRoZW4ganVzdCByZXBsYWNlXG5cdFx0fVxuXG5cdFx0dmFyIG5ld1VSTCA9IF93aW5kb3dMb2MuaHJlZi5zcGxpdCgnIycpWzBdICsgJyMnICsgIG5ld0hhc2g7XG5cblx0XHRpZiggX3N1cHBvcnRzUHVzaFN0YXRlICkge1xuXG5cdFx0XHRpZignIycgKyBuZXdIYXNoICE9PSB3aW5kb3cubG9jYXRpb24uaGFzaCkge1xuXHRcdFx0XHRoaXN0b3J5W19oaXN0b3J5Q2hhbmdlZCA/ICdyZXBsYWNlU3RhdGUnIDogJ3B1c2hTdGF0ZSddKCcnLCBkb2N1bWVudC50aXRsZSwgbmV3VVJMKTtcblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZihfaGlzdG9yeUNoYW5nZWQpIHtcblx0XHRcdFx0X3dpbmRvd0xvYy5yZXBsYWNlKCBuZXdVUkwgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdF93aW5kb3dMb2MuaGFzaCA9IG5ld0hhc2g7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdFxuXHRcdFxuXG5cdFx0X2hpc3RvcnlDaGFuZ2VkID0gdHJ1ZTtcblx0XHRfaGFzaENoYW5nZVRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0X2hhc2hDaGFuZ2VkQnlTY3JpcHQgPSBmYWxzZTtcblx0XHR9LCA2MCk7XG5cdH07XG5cblxuXG5cdFxuXG5fcmVnaXN0ZXJNb2R1bGUoJ0hpc3RvcnknLCB7XG5cblx0XG5cblx0cHVibGljTWV0aG9kczoge1xuXHRcdGluaXRIaXN0b3J5OiBmdW5jdGlvbigpIHtcblxuXHRcdFx0ZnJhbWV3b3JrLmV4dGVuZChfb3B0aW9ucywgX2hpc3RvcnlEZWZhdWx0T3B0aW9ucywgdHJ1ZSk7XG5cblx0XHRcdGlmKCAhX29wdGlvbnMuaGlzdG9yeSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cblx0XHRcdF93aW5kb3dMb2MgPSB3aW5kb3cubG9jYXRpb247XG5cdFx0XHRfdXJsQ2hhbmdlZE9uY2UgPSBmYWxzZTtcblx0XHRcdF9jbG9zZWRGcm9tVVJMID0gZmFsc2U7XG5cdFx0XHRfaGlzdG9yeUNoYW5nZWQgPSBmYWxzZTtcblx0XHRcdF9pbml0aWFsSGFzaCA9IF9nZXRIYXNoKCk7XG5cdFx0XHRfc3VwcG9ydHNQdXNoU3RhdGUgPSAoJ3B1c2hTdGF0ZScgaW4gaGlzdG9yeSk7XG5cblxuXHRcdFx0aWYoX2luaXRpYWxIYXNoLmluZGV4T2YoJ2dpZD0nKSA+IC0xKSB7XG5cdFx0XHRcdF9pbml0aWFsSGFzaCA9IF9pbml0aWFsSGFzaC5zcGxpdCgnJmdpZD0nKVswXTtcblx0XHRcdFx0X2luaXRpYWxIYXNoID0gX2luaXRpYWxIYXNoLnNwbGl0KCc/Z2lkPScpWzBdO1xuXHRcdFx0fVxuXHRcdFx0XG5cblx0XHRcdF9saXN0ZW4oJ2FmdGVyQ2hhbmdlJywgc2VsZi51cGRhdGVVUkwpO1xuXHRcdFx0X2xpc3RlbigndW5iaW5kRXZlbnRzJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGZyYW1ld29yay51bmJpbmQod2luZG93LCAnaGFzaGNoYW5nZScsIHNlbGYub25IYXNoQ2hhbmdlKTtcblx0XHRcdH0pO1xuXG5cblx0XHRcdHZhciByZXR1cm5Ub09yaWdpbmFsID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdF9oYXNoUmVzZXRlZCA9IHRydWU7XG5cdFx0XHRcdGlmKCFfY2xvc2VkRnJvbVVSTCkge1xuXG5cdFx0XHRcdFx0aWYoX3VybENoYW5nZWRPbmNlKSB7XG5cdFx0XHRcdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRpZihfaW5pdGlhbEhhc2gpIHtcblx0XHRcdFx0XHRcdFx0X3dpbmRvd0xvYy5oYXNoID0gX2luaXRpYWxIYXNoO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aWYgKF9zdXBwb3J0c1B1c2hTdGF0ZSkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gcmVtb3ZlIGhhc2ggZnJvbSB1cmwgd2l0aG91dCByZWZyZXNoaW5nIGl0IG9yIHNjcm9sbGluZyB0byB0b3Bcblx0XHRcdFx0XHRcdFx0XHRoaXN0b3J5LnB1c2hTdGF0ZSgnJywgZG9jdW1lbnQudGl0bGUsICBfd2luZG93TG9jLnBhdGhuYW1lICsgX3dpbmRvd0xvYy5zZWFyY2ggKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRfd2luZG93TG9jLmhhc2ggPSAnJztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0fVxuXG5cdFx0XHRcdF9jbGVhbkhpc3RvcnlUaW1lb3V0cygpO1xuXHRcdFx0fTtcblxuXG5cdFx0XHRfbGlzdGVuKCd1bmJpbmRFdmVudHMnLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYoX2Nsb3NlZEJ5U2Nyb2xsKSB7XG5cdFx0XHRcdFx0Ly8gaWYgUGhvdG9Td2lwZSBpcyBjbG9zZWQgYnkgc2Nyb2xsLCB3ZSBnbyBcImJhY2tcIiBiZWZvcmUgdGhlIGNsb3NpbmcgYW5pbWF0aW9uIHN0YXJ0c1xuXHRcdFx0XHRcdC8vIHRoaXMgaXMgZG9uZSB0byBrZWVwIHRoZSBzY3JvbGwgcG9zaXRpb25cblx0XHRcdFx0XHRyZXR1cm5Ub09yaWdpbmFsKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0X2xpc3RlbignZGVzdHJveScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZighX2hhc2hSZXNldGVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuVG9PcmlnaW5hbCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdF9saXN0ZW4oJ2ZpcnN0VXBkYXRlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdF9jdXJyZW50SXRlbUluZGV4ID0gX3BhcnNlSXRlbUluZGV4RnJvbVVSTCgpLnBpZDtcblx0XHRcdH0pO1xuXG5cdFx0XHRcblxuXHRcdFx0XG5cdFx0XHR2YXIgaW5kZXggPSBfaW5pdGlhbEhhc2guaW5kZXhPZigncGlkPScpO1xuXHRcdFx0aWYoaW5kZXggPiAtMSkge1xuXHRcdFx0XHRfaW5pdGlhbEhhc2ggPSBfaW5pdGlhbEhhc2guc3Vic3RyaW5nKDAsIGluZGV4KTtcblx0XHRcdFx0aWYoX2luaXRpYWxIYXNoLnNsaWNlKC0xKSA9PT0gJyYnKSB7XG5cdFx0XHRcdFx0X2luaXRpYWxIYXNoID0gX2luaXRpYWxIYXNoLnNsaWNlKDAsIC0xKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0XG5cblx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmKF9pc09wZW4pIHsgLy8gaGFzbid0IGRlc3Ryb3llZCB5ZXRcblx0XHRcdFx0XHRmcmFtZXdvcmsuYmluZCh3aW5kb3csICdoYXNoY2hhbmdlJywgc2VsZi5vbkhhc2hDaGFuZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCA0MCk7XG5cdFx0XHRcblx0XHR9LFxuXHRcdG9uSGFzaENoYW5nZTogZnVuY3Rpb24oKSB7XG5cblx0XHRcdGlmKF9nZXRIYXNoKCkgPT09IF9pbml0aWFsSGFzaCkge1xuXG5cdFx0XHRcdF9jbG9zZWRGcm9tVVJMID0gdHJ1ZTtcblx0XHRcdFx0c2VsZi5jbG9zZSgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZighX2hhc2hDaGFuZ2VkQnlTY3JpcHQpIHtcblxuXHRcdFx0XHRfaGFzaENoYW5nZWRCeUhpc3RvcnkgPSB0cnVlO1xuXHRcdFx0XHRzZWxmLmdvVG8oIF9wYXJzZUl0ZW1JbmRleEZyb21VUkwoKS5waWQgKTtcblx0XHRcdFx0X2hhc2hDaGFuZ2VkQnlIaXN0b3J5ID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHR9LFxuXHRcdHVwZGF0ZVVSTDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIERlbGF5IHRoZSB1cGRhdGUgb2YgVVJMLCB0byBhdm9pZCBsYWcgZHVyaW5nIHRyYW5zaXRpb24sIFxuXHRcdFx0Ly8gYW5kIHRvIG5vdCB0byB0cmlnZ2VyIGFjdGlvbnMgbGlrZSBcInJlZnJlc2ggcGFnZSBzb3VuZFwiIG9yIFwiYmxpbmtpbmcgZmF2aWNvblwiIHRvIG9mdGVuXG5cdFx0XHRcblx0XHRcdF9jbGVhbkhpc3RvcnlUaW1lb3V0cygpO1xuXHRcdFx0XG5cblx0XHRcdGlmKF9oYXNoQ2hhbmdlZEJ5SGlzdG9yeSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmKCFfaGlzdG9yeUNoYW5nZWQpIHtcblx0XHRcdFx0X3VwZGF0ZUhhc2goKTsgLy8gZmlyc3QgdGltZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0X2hpc3RvcnlVcGRhdGVUaW1lb3V0ID0gc2V0VGltZW91dChfdXBkYXRlSGFzaCwgODAwKTtcblx0XHRcdH1cblx0XHR9XG5cdFxuXHR9XG59KTtcblxuXG4vKj4+aGlzdG9yeSovXG5cdGZyYW1ld29yay5leHRlbmQoc2VsZiwgcHVibGljTWV0aG9kcyk7IH07XG5cdHJldHVybiBQaG90b1N3aXBlO1xufSk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4vLyBUaGlzIG1ldGhvZCBvZiBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QgbmVlZHMgdG8gYmVcbi8vIGtlcHQgaWRlbnRpY2FsIHRvIHRoZSB3YXkgaXQgaXMgb2J0YWluZWQgaW4gcnVudGltZS5qc1xudmFyIGcgPSAoZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzIH0pKCkgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xuXG4vLyBVc2UgYGdldE93blByb3BlcnR5TmFtZXNgIGJlY2F1c2Ugbm90IGFsbCBicm93c2VycyBzdXBwb3J0IGNhbGxpbmdcbi8vIGBoYXNPd25Qcm9wZXJ0eWAgb24gdGhlIGdsb2JhbCBgc2VsZmAgb2JqZWN0IGluIGEgd29ya2VyLiBTZWUgIzE4My5cbnZhciBoYWRSdW50aW1lID0gZy5yZWdlbmVyYXRvclJ1bnRpbWUgJiZcbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZykuaW5kZXhPZihcInJlZ2VuZXJhdG9yUnVudGltZVwiKSA+PSAwO1xuXG4vLyBTYXZlIHRoZSBvbGQgcmVnZW5lcmF0b3JSdW50aW1lIGluIGNhc2UgaXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQgbGF0ZXIuXG52YXIgb2xkUnVudGltZSA9IGhhZFJ1bnRpbWUgJiYgZy5yZWdlbmVyYXRvclJ1bnRpbWU7XG5cbi8vIEZvcmNlIHJlZXZhbHV0YXRpb24gb2YgcnVudGltZS5qcy5cbmcucmVnZW5lcmF0b3JSdW50aW1lID0gdW5kZWZpbmVkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuL3J1bnRpbWVcIik7XG5cbmlmIChoYWRSdW50aW1lKSB7XG4gIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHJ1bnRpbWUuXG4gIGcucmVnZW5lcmF0b3JSdW50aW1lID0gb2xkUnVudGltZTtcbn0gZWxzZSB7XG4gIC8vIFJlbW92ZSB0aGUgZ2xvYmFsIHByb3BlcnR5IGFkZGVkIGJ5IHJ1bnRpbWUuanMuXG4gIHRyeSB7XG4gICAgZGVsZXRlIGcucmVnZW5lcmF0b3JSdW50aW1lO1xuICB9IGNhdGNoKGUpIHtcbiAgICBnLnJlZ2VuZXJhdG9yUnVudGltZSA9IHVuZGVmaW5lZDtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEluIHNsb3BweSBtb2RlLCB1bmJvdW5kIGB0aGlzYCByZWZlcnMgdG8gdGhlIGdsb2JhbCBvYmplY3QsIGZhbGxiYWNrIHRvXG4gIC8vIEZ1bmN0aW9uIGNvbnN0cnVjdG9yIGlmIHdlJ3JlIGluIGdsb2JhbCBzdHJpY3QgbW9kZS4gVGhhdCBpcyBzYWRseSBhIGZvcm1cbiAgLy8gb2YgaW5kaXJlY3QgZXZhbCB3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeS5cbiAgKGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcyB9KSgpIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKVxuKTtcbiIsIi8qIVxuICogdHlwZWFoZWFkLmpzIDAuMTEuMVxuICogaHR0cHM6Ly9naXRodWIuY29tL3R3aXR0ZXIvdHlwZWFoZWFkLmpzXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1IFR3aXR0ZXIsIEluYy4gYW5kIG90aGVyIGNvbnRyaWJ1dG9yczsgTGljZW5zZWQgTUlUXG4gKi9cblxuKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKFwiYmxvb2Rob3VuZFwiLCBbIFwianF1ZXJ5XCIgXSwgZnVuY3Rpb24oYTApIHtcbiAgICAgICAgICAgIHJldHVybiByb290W1wiQmxvb2Rob3VuZFwiXSA9IGZhY3RvcnkoYTApO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwianF1ZXJ5XCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290W1wiQmxvb2Rob3VuZFwiXSA9IGZhY3RvcnkoalF1ZXJ5KTtcbiAgICB9XG59KSh0aGlzLCBmdW5jdGlvbigkKSB7XG4gICAgdmFyIF8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc01zaWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpID8gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvKG1zaWUgfHJ2OikoXFxkKyguXFxkKyk/KS9pKVsyXSA6IGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzQmxhbmtTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgICAgICAgICAgICAgIHJldHVybiAhc3RyIHx8IC9eXFxzKiQvLnRlc3Qoc3RyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlc2NhcGVSZWdFeENoYXJzOiBmdW5jdGlvbihzdHIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcXC1cXFtcXF1cXC9cXHtcXH1cXChcXClcXCpcXCtcXD9cXC5cXFxcXFxeXFwkXFx8XS9nLCBcIlxcXFwkJlwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc1N0cmluZzogZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNOdW1iZXI6IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm51bWJlclwiO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzQXJyYXk6ICQuaXNBcnJheSxcbiAgICAgICAgICAgIGlzRnVuY3Rpb246ICQuaXNGdW5jdGlvbixcbiAgICAgICAgICAgIGlzT2JqZWN0OiAkLmlzUGxhaW5PYmplY3QsXG4gICAgICAgICAgICBpc1VuZGVmaW5lZDogZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwidW5kZWZpbmVkXCI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNFbGVtZW50OiBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISEob2JqICYmIG9iai5ub2RlVHlwZSA9PT0gMSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNKUXVlcnk6IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiAkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRvU3RyOiBmdW5jdGlvbiB0b1N0cihzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF8uaXNVbmRlZmluZWQocykgfHwgcyA9PT0gbnVsbCA/IFwiXCIgOiBzICsgXCJcIjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBiaW5kOiAkLnByb3h5LFxuICAgICAgICAgICAgZWFjaDogZnVuY3Rpb24oY29sbGVjdGlvbiwgY2IpIHtcbiAgICAgICAgICAgICAgICAkLmVhY2goY29sbGVjdGlvbiwgcmV2ZXJzZUFyZ3MpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJldmVyc2VBcmdzKGluZGV4LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2IodmFsdWUsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWFwOiAkLm1hcCxcbiAgICAgICAgICAgIGZpbHRlcjogJC5ncmVwLFxuICAgICAgICAgICAgZXZlcnk6IGZ1bmN0aW9uKG9iaiwgdGVzdCkge1xuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICghb2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICQuZWFjaChvYmosIGZ1bmN0aW9uKGtleSwgdmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHJlc3VsdCA9IHRlc3QuY2FsbChudWxsLCB2YWwsIGtleSwgb2JqKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiAhIXJlc3VsdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb21lOiBmdW5jdGlvbihvYmosIHRlc3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKCFvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJC5lYWNoKG9iaiwgZnVuY3Rpb24oa2V5LCB2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9IHRlc3QuY2FsbChudWxsLCB2YWwsIGtleSwgb2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhcmVzdWx0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1peGluOiAkLmV4dGVuZCxcbiAgICAgICAgICAgIGlkZW50aXR5OiBmdW5jdGlvbih4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xvbmU6IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiAkLmV4dGVuZCh0cnVlLCB7fSwgb2JqKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRJZEdlbmVyYXRvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRlbXBsYXRpZnk6IGZ1bmN0aW9uIHRlbXBsYXRpZnkob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICQuaXNGdW5jdGlvbihvYmopID8gb2JqIDogdGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdGVtcGxhdGUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmZXI6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVib3VuY2U6IGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSkge1xuICAgICAgICAgICAgICAgIHZhciB0aW1lb3V0LCByZXN1bHQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHMsIGxhdGVyLCBjYWxsTm93O1xuICAgICAgICAgICAgICAgICAgICBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbE5vdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhyb3R0bGU6IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGV4dCwgYXJncywgdGltZW91dCwgcmVzdWx0LCBwcmV2aW91cywgbGF0ZXI7XG4gICAgICAgICAgICAgICAgcHJldmlvdXMgPSAwO1xuICAgICAgICAgICAgICAgIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLCByZW1haW5pbmcgPSB3YWl0IC0gKG5vdyAtIHByZXZpb3VzKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfLmlzU3RyaW5nKHZhbCkgPyB2YWwgOiBKU09OLnN0cmluZ2lmeSh2YWwpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vb3A6IGZ1bmN0aW9uKCkge31cbiAgICAgICAgfTtcbiAgICB9KCk7XG4gICAgdmFyIFZFUlNJT04gPSBcIjAuMTEuMVwiO1xuICAgIHZhciB0b2tlbml6ZXJzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbm9ud29yZDogbm9ud29yZCxcbiAgICAgICAgICAgIHdoaXRlc3BhY2U6IHdoaXRlc3BhY2UsXG4gICAgICAgICAgICBvYmo6IHtcbiAgICAgICAgICAgICAgICBub253b3JkOiBnZXRPYmpUb2tlbml6ZXIobm9ud29yZCksXG4gICAgICAgICAgICAgICAgd2hpdGVzcGFjZTogZ2V0T2JqVG9rZW5pemVyKHdoaXRlc3BhY2UpXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGZ1bmN0aW9uIHdoaXRlc3BhY2Uoc3RyKSB7XG4gICAgICAgICAgICBzdHIgPSBfLnRvU3RyKHN0cik7XG4gICAgICAgICAgICByZXR1cm4gc3RyID8gc3RyLnNwbGl0KC9cXHMrLykgOiBbXTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBub253b3JkKHN0cikge1xuICAgICAgICAgICAgc3RyID0gXy50b1N0cihzdHIpO1xuICAgICAgICAgICAgcmV0dXJuIHN0ciA/IHN0ci5zcGxpdCgvXFxXKy8pIDogW107XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0T2JqVG9rZW5pemVyKHRva2VuaXplcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldEtleShrZXlzKSB7XG4gICAgICAgICAgICAgICAga2V5cyA9IF8uaXNBcnJheShrZXlzKSA/IGtleXMgOiBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRva2VuaXplKG8pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBfLmVhY2goa2V5cywgZnVuY3Rpb24oaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zID0gdG9rZW5zLmNvbmNhdCh0b2tlbml6ZXIoXy50b1N0cihvW2tdKSkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VucztcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0oKTtcbiAgICB2YXIgTHJ1Q2FjaGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIGZ1bmN0aW9uIExydUNhY2hlKG1heFNpemUpIHtcbiAgICAgICAgICAgIHRoaXMubWF4U2l6ZSA9IF8uaXNOdW1iZXIobWF4U2l6ZSkgPyBtYXhTaXplIDogMTAwO1xuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMubWF4U2l6ZSA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXQgPSB0aGlzLmdldCA9ICQubm9vcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfLm1peGluKExydUNhY2hlLnByb3RvdHlwZSwge1xuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGFpbEl0ZW0gPSB0aGlzLmxpc3QudGFpbCwgbm9kZTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaXplID49IHRoaXMubWF4U2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3QucmVtb3ZlKHRhaWxJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuaGFzaFt0YWlsSXRlbS5rZXldO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNpemUtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUgPSB0aGlzLmhhc2hba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLnZhbCA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0Lm1vdmVUb0Zyb250KG5vZGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBuZXcgTm9kZShrZXksIHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdC5hZGQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzaFtrZXldID0gbm9kZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaXplKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5oYXNoW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0Lm1vdmVUb0Zyb250KG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS52YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNpemUgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzaCA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdCA9IG5ldyBMaXN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBmdW5jdGlvbiBMaXN0KCkge1xuICAgICAgICAgICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBfLm1peGluKExpc3QucHJvdG90eXBlLCB7XG4gICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uIGFkZChub2RlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGVhZCkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLm5leHQgPSB0aGlzLmhlYWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZC5wcmV2ID0gbm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkID0gbm9kZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRhaWwgPSB0aGlzLnRhaWwgfHwgbm9kZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShub2RlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5wcmV2ID8gbm9kZS5wcmV2Lm5leHQgPSBub2RlLm5leHQgOiB0aGlzLmhlYWQgPSBub2RlLm5leHQ7XG4gICAgICAgICAgICAgICAgbm9kZS5uZXh0ID8gbm9kZS5uZXh0LnByZXYgPSBub2RlLnByZXYgOiB0aGlzLnRhaWwgPSBub2RlLnByZXY7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbW92ZVRvRnJvbnQ6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZShub2RlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGZ1bmN0aW9uIE5vZGUoa2V5LCB2YWwpIHtcbiAgICAgICAgICAgIHRoaXMua2V5ID0ga2V5O1xuICAgICAgICAgICAgdGhpcy52YWwgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLnByZXYgPSB0aGlzLm5leHQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBMcnVDYWNoZTtcbiAgICB9KCk7XG4gICAgdmFyIFBlcnNpc3RlbnRTdG9yYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICB2YXIgTE9DQUxfU1RPUkFHRTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIExPQ0FMX1NUT1JBR0UgPSB3aW5kb3cubG9jYWxTdG9yYWdlO1xuICAgICAgICAgICAgTE9DQUxfU1RPUkFHRS5zZXRJdGVtKFwifn5+XCIsIFwiIVwiKTtcbiAgICAgICAgICAgIExPQ0FMX1NUT1JBR0UucmVtb3ZlSXRlbShcIn5+flwiKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBMT0NBTF9TVE9SQUdFID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBQZXJzaXN0ZW50U3RvcmFnZShuYW1lc3BhY2UsIG92ZXJyaWRlKSB7XG4gICAgICAgICAgICB0aGlzLnByZWZpeCA9IFsgXCJfX1wiLCBuYW1lc3BhY2UsIFwiX19cIiBdLmpvaW4oXCJcIik7XG4gICAgICAgICAgICB0aGlzLnR0bEtleSA9IFwiX190dGxfX1wiO1xuICAgICAgICAgICAgdGhpcy5rZXlNYXRjaGVyID0gbmV3IFJlZ0V4cChcIl5cIiArIF8uZXNjYXBlUmVnRXhDaGFycyh0aGlzLnByZWZpeCkpO1xuICAgICAgICAgICAgdGhpcy5scyA9IG92ZXJyaWRlIHx8IExPQ0FMX1NUT1JBR0U7XG4gICAgICAgICAgICAhdGhpcy5scyAmJiB0aGlzLl9ub29wKCk7XG4gICAgICAgIH1cbiAgICAgICAgXy5taXhpbihQZXJzaXN0ZW50U3RvcmFnZS5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgIF9wcmVmaXg6IGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByZWZpeCArIGtleTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfdHRsS2V5OiBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJlZml4KGtleSkgKyB0aGlzLnR0bEtleTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfbm9vcDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXQgPSB0aGlzLnNldCA9IHRoaXMucmVtb3ZlID0gdGhpcy5jbGVhciA9IHRoaXMuaXNFeHBpcmVkID0gXy5ub29wO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9zYWZlU2V0OiBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubHMuc2V0SXRlbShrZXksIHZhbCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIubmFtZSA9PT0gXCJRdW90YUV4Y2VlZGVkRXJyb3JcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm9vcCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNFeHBpcmVkKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUoa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlY29kZSh0aGlzLmxzLmdldEl0ZW0odGhpcy5fcHJlZml4KGtleSkpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKGtleSwgdmFsLCB0dGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoXy5pc051bWJlcih0dGwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NhZmVTZXQodGhpcy5fdHRsS2V5KGtleSksIGVuY29kZShub3coKSArIHR0bCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubHMucmVtb3ZlSXRlbSh0aGlzLl90dGxLZXkoa2V5KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zYWZlU2V0KHRoaXMuX3ByZWZpeChrZXkpLCBlbmNvZGUodmFsKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxzLnJlbW92ZUl0ZW0odGhpcy5fdHRsS2V5KGtleSkpO1xuICAgICAgICAgICAgICAgIHRoaXMubHMucmVtb3ZlSXRlbSh0aGlzLl9wcmVmaXgoa2V5KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xlYXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciBpLCBrZXlzID0gZ2F0aGVyTWF0Y2hpbmdLZXlzKHRoaXMua2V5TWF0Y2hlcik7XG4gICAgICAgICAgICAgICAgZm9yIChpID0ga2V5cy5sZW5ndGg7IGktLTsgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKGtleXNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0V4cGlyZWQ6IGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgICAgIHZhciB0dGwgPSBkZWNvZGUodGhpcy5scy5nZXRJdGVtKHRoaXMuX3R0bEtleShrZXkpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF8uaXNOdW1iZXIodHRsKSAmJiBub3coKSA+IHR0bCA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBQZXJzaXN0ZW50U3RvcmFnZTtcbiAgICAgICAgZnVuY3Rpb24gbm93KCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShfLmlzVW5kZWZpbmVkKHZhbCkgPyBudWxsIDogdmFsKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBkZWNvZGUodmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gJC5wYXJzZUpTT04odmFsKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnYXRoZXJNYXRjaGluZ0tleXMoa2V5TWF0Y2hlcikge1xuICAgICAgICAgICAgdmFyIGksIGtleSwga2V5cyA9IFtdLCBsZW4gPSBMT0NBTF9TVE9SQUdFLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICgoa2V5ID0gTE9DQUxfU1RPUkFHRS5rZXkoaSkpLm1hdGNoKGtleU1hdGNoZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkucmVwbGFjZShrZXlNYXRjaGVyLCBcIlwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgICAgIH1cbiAgICB9KCk7XG4gICAgdmFyIFRyYW5zcG9ydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIHBlbmRpbmdSZXF1ZXN0c0NvdW50ID0gMCwgcGVuZGluZ1JlcXVlc3RzID0ge30sIG1heFBlbmRpbmdSZXF1ZXN0cyA9IDYsIHNoYXJlZENhY2hlID0gbmV3IExydUNhY2hlKDEwKTtcbiAgICAgICAgZnVuY3Rpb24gVHJhbnNwb3J0KG8pIHtcbiAgICAgICAgICAgIG8gPSBvIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5jYW5jZWxsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubGFzdFJlcSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9zZW5kID0gby50cmFuc3BvcnQ7XG4gICAgICAgICAgICB0aGlzLl9nZXQgPSBvLmxpbWl0ZXIgPyBvLmxpbWl0ZXIodGhpcy5fZ2V0KSA6IHRoaXMuX2dldDtcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlID0gby5jYWNoZSA9PT0gZmFsc2UgPyBuZXcgTHJ1Q2FjaGUoMCkgOiBzaGFyZWRDYWNoZTtcbiAgICAgICAgfVxuICAgICAgICBUcmFuc3BvcnQuc2V0TWF4UGVuZGluZ1JlcXVlc3RzID0gZnVuY3Rpb24gc2V0TWF4UGVuZGluZ1JlcXVlc3RzKG51bSkge1xuICAgICAgICAgICAgbWF4UGVuZGluZ1JlcXVlc3RzID0gbnVtO1xuICAgICAgICB9O1xuICAgICAgICBUcmFuc3BvcnQucmVzZXRDYWNoZSA9IGZ1bmN0aW9uIHJlc2V0Q2FjaGUoKSB7XG4gICAgICAgICAgICBzaGFyZWRDYWNoZS5yZXNldCgpO1xuICAgICAgICB9O1xuICAgICAgICBfLm1peGluKFRyYW5zcG9ydC5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgIF9maW5nZXJwcmludDogZnVuY3Rpb24gZmluZ2VycHJpbnQobykge1xuICAgICAgICAgICAgICAgIG8gPSBvIHx8IHt9O1xuICAgICAgICAgICAgICAgIHJldHVybiBvLnVybCArIG8udHlwZSArICQucGFyYW0oby5kYXRhIHx8IHt9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfZ2V0OiBmdW5jdGlvbihvLCBjYikge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywgZmluZ2VycHJpbnQsIGpxWGhyO1xuICAgICAgICAgICAgICAgIGZpbmdlcnByaW50ID0gdGhpcy5fZmluZ2VycHJpbnQobyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuY2VsbGVkIHx8IGZpbmdlcnByaW50ICE9PSB0aGlzLmxhc3RSZXEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoanFYaHIgPSBwZW5kaW5nUmVxdWVzdHNbZmluZ2VycHJpbnRdKSB7XG4gICAgICAgICAgICAgICAgICAgIGpxWGhyLmRvbmUoZG9uZSkuZmFpbChmYWlsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBlbmRpbmdSZXF1ZXN0c0NvdW50IDwgbWF4UGVuZGluZ1JlcXVlc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0c0NvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0c1tmaW5nZXJwcmludF0gPSB0aGlzLl9zZW5kKG8pLmRvbmUoZG9uZSkuZmFpbChmYWlsKS5hbHdheXMoYWx3YXlzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGVja1JlcXVlc3RBcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBkb25lKHJlc3ApIHtcbiAgICAgICAgICAgICAgICAgICAgY2IobnVsbCwgcmVzcCk7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX2NhY2hlLnNldChmaW5nZXJwcmludCwgcmVzcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZhaWwoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNiKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhbHdheXMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0c0NvdW50LS07XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwZW5kaW5nUmVxdWVzdHNbZmluZ2VycHJpbnRdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5vbkRlY2tSZXF1ZXN0QXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fZ2V0LmFwcGx5KHRoYXQsIHRoYXQub25EZWNrUmVxdWVzdEFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5vbkRlY2tSZXF1ZXN0QXJncyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihvLCBjYikge1xuICAgICAgICAgICAgICAgIHZhciByZXNwLCBmaW5nZXJwcmludDtcbiAgICAgICAgICAgICAgICBjYiA9IGNiIHx8ICQubm9vcDtcbiAgICAgICAgICAgICAgICBvID0gXy5pc1N0cmluZyhvKSA/IHtcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBvXG4gICAgICAgICAgICAgICAgfSA6IG8gfHwge307XG4gICAgICAgICAgICAgICAgZmluZ2VycHJpbnQgPSB0aGlzLl9maW5nZXJwcmludChvKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdFJlcSA9IGZpbmdlcnByaW50O1xuICAgICAgICAgICAgICAgIGlmIChyZXNwID0gdGhpcy5fY2FjaGUuZ2V0KGZpbmdlcnByaW50KSkge1xuICAgICAgICAgICAgICAgICAgICBjYihudWxsLCByZXNwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXQobywgY2IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBUcmFuc3BvcnQ7XG4gICAgfSgpO1xuICAgIHZhciBTZWFyY2hJbmRleCA9IHdpbmRvdy5TZWFyY2hJbmRleCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIENISUxEUkVOID0gXCJjXCIsIElEUyA9IFwiaVwiO1xuICAgICAgICBmdW5jdGlvbiBTZWFyY2hJbmRleChvKSB7XG4gICAgICAgICAgICBvID0gbyB8fCB7fTtcbiAgICAgICAgICAgIGlmICghby5kYXR1bVRva2VuaXplciB8fCAhby5xdWVyeVRva2VuaXplcikge1xuICAgICAgICAgICAgICAgICQuZXJyb3IoXCJkYXR1bVRva2VuaXplciBhbmQgcXVlcnlUb2tlbml6ZXIgYXJlIGJvdGggcmVxdWlyZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmlkZW50aWZ5ID0gby5pZGVudGlmeSB8fCBfLnN0cmluZ2lmeTtcbiAgICAgICAgICAgIHRoaXMuZGF0dW1Ub2tlbml6ZXIgPSBvLmRhdHVtVG9rZW5pemVyO1xuICAgICAgICAgICAgdGhpcy5xdWVyeVRva2VuaXplciA9IG8ucXVlcnlUb2tlbml6ZXI7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgXy5taXhpbihTZWFyY2hJbmRleC5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgIGJvb3RzdHJhcDogZnVuY3Rpb24gYm9vdHN0cmFwKG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdHVtcyA9IG8uZGF0dW1zO1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZSA9IG8udHJpZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgZGF0YSA9IF8uaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbIGRhdGEgXTtcbiAgICAgICAgICAgICAgICBfLmVhY2goZGF0YSwgZnVuY3Rpb24oZGF0dW0pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkLCB0b2tlbnM7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuZGF0dW1zW2lkID0gdGhhdC5pZGVudGlmeShkYXR1bSldID0gZGF0dW07XG4gICAgICAgICAgICAgICAgICAgIHRva2VucyA9IG5vcm1hbGl6ZVRva2Vucyh0aGF0LmRhdHVtVG9rZW5pemVyKGRhdHVtKSk7XG4gICAgICAgICAgICAgICAgICAgIF8uZWFjaCh0b2tlbnMsIGZ1bmN0aW9uKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSwgY2hhcnMsIGNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHRoYXQudHJpZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzID0gdG9rZW4uc3BsaXQoXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2ggPSBjaGFycy5zaGlmdCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGVbQ0hJTERSRU5dW2NoXSB8fCAobm9kZVtDSElMRFJFTl1bY2hdID0gbmV3Tm9kZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlW0lEU10ucHVzaChpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGlkcykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICByZXR1cm4gXy5tYXAoaWRzLCBmdW5jdGlvbihpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhhdC5kYXR1bXNbaWRdO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlYXJjaDogZnVuY3Rpb24gc2VhcmNoKHF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLCB0b2tlbnMsIG1hdGNoZXM7XG4gICAgICAgICAgICAgICAgdG9rZW5zID0gbm9ybWFsaXplVG9rZW5zKHRoaXMucXVlcnlUb2tlbml6ZXIocXVlcnkpKTtcbiAgICAgICAgICAgICAgICBfLmVhY2godG9rZW5zLCBmdW5jdGlvbih0b2tlbikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSwgY2hhcnMsIGNoLCBpZHM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHRoYXQudHJpZTtcbiAgICAgICAgICAgICAgICAgICAgY2hhcnMgPSB0b2tlbi5zcGxpdChcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUgJiYgKGNoID0gY2hhcnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlW0NISUxEUkVOXVtjaF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUgJiYgY2hhcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZHMgPSBub2RlW0lEU10uc2xpY2UoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0gbWF0Y2hlcyA/IGdldEludGVyc2VjdGlvbihtYXRjaGVzLCBpZHMpIDogaWRzO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMgPyBfLm1hcCh1bmlxdWUobWF0Y2hlcyksIGZ1bmN0aW9uKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0LmRhdHVtc1tpZF07XG4gICAgICAgICAgICAgICAgfSkgOiBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhbGw6IGZ1bmN0aW9uIGFsbCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuZGF0dW1zKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHRoaXMuZGF0dW1zW2tleV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdHVtcyA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZSA9IG5ld05vZGUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXJpYWxpemU6IGZ1bmN0aW9uIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBkYXR1bXM6IHRoaXMuZGF0dW1zLFxuICAgICAgICAgICAgICAgICAgICB0cmllOiB0aGlzLnRyaWVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFNlYXJjaEluZGV4O1xuICAgICAgICBmdW5jdGlvbiBub3JtYWxpemVUb2tlbnModG9rZW5zKSB7XG4gICAgICAgICAgICB0b2tlbnMgPSBfLmZpbHRlcih0b2tlbnMsIGZ1bmN0aW9uKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhdG9rZW47XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRva2VucyA9IF8ubWFwKHRva2VucywgZnVuY3Rpb24odG9rZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW4udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VucztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBuZXdOb2RlKCkge1xuICAgICAgICAgICAgdmFyIG5vZGUgPSB7fTtcbiAgICAgICAgICAgIG5vZGVbSURTXSA9IFtdO1xuICAgICAgICAgICAgbm9kZVtDSElMRFJFTl0gPSB7fTtcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHVuaXF1ZShhcnJheSkge1xuICAgICAgICAgICAgdmFyIHNlZW4gPSB7fSwgdW5pcXVlcyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzZWVuW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgICAgICBzZWVuW2FycmF5W2ldXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHVuaXF1ZXMucHVzaChhcnJheVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuaXF1ZXM7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0SW50ZXJzZWN0aW9uKGFycmF5QSwgYXJyYXlCKSB7XG4gICAgICAgICAgICB2YXIgYWkgPSAwLCBiaSA9IDAsIGludGVyc2VjdGlvbiA9IFtdO1xuICAgICAgICAgICAgYXJyYXlBID0gYXJyYXlBLnNvcnQoKTtcbiAgICAgICAgICAgIGFycmF5QiA9IGFycmF5Qi5zb3J0KCk7XG4gICAgICAgICAgICB2YXIgbGVuQXJyYXlBID0gYXJyYXlBLmxlbmd0aCwgbGVuQXJyYXlCID0gYXJyYXlCLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlIChhaSA8IGxlbkFycmF5QSAmJiBiaSA8IGxlbkFycmF5Qikge1xuICAgICAgICAgICAgICAgIGlmIChhcnJheUFbYWldIDwgYXJyYXlCW2JpXSkge1xuICAgICAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJyYXlBW2FpXSA+IGFycmF5QltiaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgYmkrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb24ucHVzaChhcnJheUFbYWldKTtcbiAgICAgICAgICAgICAgICAgICAgYWkrKztcbiAgICAgICAgICAgICAgICAgICAgYmkrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW50ZXJzZWN0aW9uO1xuICAgICAgICB9XG4gICAgfSgpO1xuICAgIHZhciBQcmVmZXRjaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIGtleXM7XG4gICAgICAgIGtleXMgPSB7XG4gICAgICAgICAgICBkYXRhOiBcImRhdGFcIixcbiAgICAgICAgICAgIHByb3RvY29sOiBcInByb3RvY29sXCIsXG4gICAgICAgICAgICB0aHVtYnByaW50OiBcInRodW1icHJpbnRcIlxuICAgICAgICB9O1xuICAgICAgICBmdW5jdGlvbiBQcmVmZXRjaChvKSB7XG4gICAgICAgICAgICB0aGlzLnVybCA9IG8udXJsO1xuICAgICAgICAgICAgdGhpcy50dGwgPSBvLnR0bDtcbiAgICAgICAgICAgIHRoaXMuY2FjaGUgPSBvLmNhY2hlO1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlID0gby5wcmVwYXJlO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSBvLnRyYW5zZm9ybTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0ID0gby50cmFuc3BvcnQ7XG4gICAgICAgICAgICB0aGlzLnRodW1icHJpbnQgPSBvLnRodW1icHJpbnQ7XG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2UgPSBuZXcgUGVyc2lzdGVudFN0b3JhZ2Uoby5jYWNoZUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgXy5taXhpbihQcmVmZXRjaC5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgIF9zZXR0aW5nczogZnVuY3Rpb24gc2V0dGluZ3MoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB0aGlzLnVybCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJHRVRcIixcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvblwiXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdG9yZTogZnVuY3Rpb24gc3RvcmUoZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jYWNoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoa2V5cy5kYXRhLCBkYXRhLCB0aGlzLnR0bCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnNldChrZXlzLnByb3RvY29sLCBsb2NhdGlvbi5wcm90b2NvbCwgdGhpcy50dGwpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoa2V5cy50aHVtYnByaW50LCB0aGlzLnRodW1icHJpbnQsIHRoaXMudHRsKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmcm9tQ2FjaGU6IGZ1bmN0aW9uIGZyb21DYWNoZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RvcmVkID0ge30sIGlzRXhwaXJlZDtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0b3JlZC5kYXRhID0gdGhpcy5zdG9yYWdlLmdldChrZXlzLmRhdGEpO1xuICAgICAgICAgICAgICAgIHN0b3JlZC5wcm90b2NvbCA9IHRoaXMuc3RvcmFnZS5nZXQoa2V5cy5wcm90b2NvbCk7XG4gICAgICAgICAgICAgICAgc3RvcmVkLnRodW1icHJpbnQgPSB0aGlzLnN0b3JhZ2UuZ2V0KGtleXMudGh1bWJwcmludCk7XG4gICAgICAgICAgICAgICAgaXNFeHBpcmVkID0gc3RvcmVkLnRodW1icHJpbnQgIT09IHRoaXMudGh1bWJwcmludCB8fCBzdG9yZWQucHJvdG9jb2wgIT09IGxvY2F0aW9uLnByb3RvY29sO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdG9yZWQuZGF0YSAmJiAhaXNFeHBpcmVkID8gc3RvcmVkLmRhdGEgOiBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZyb21OZXR3b3JrOiBmdW5jdGlvbihjYikge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywgc2V0dGluZ3M7XG4gICAgICAgICAgICAgICAgaWYgKCFjYikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNldHRpbmdzID0gdGhpcy5wcmVwYXJlKHRoaXMuX3NldHRpbmdzKCkpO1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNwb3J0KHNldHRpbmdzKS5mYWlsKG9uRXJyb3IpLmRvbmUob25SZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gb25FcnJvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG9uUmVzcG9uc2UocmVzcCkge1xuICAgICAgICAgICAgICAgICAgICBjYihudWxsLCB0aGF0LnRyYW5zZm9ybShyZXNwKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2UuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBQcmVmZXRjaDtcbiAgICB9KCk7XG4gICAgdmFyIFJlbW90ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgZnVuY3Rpb24gUmVtb3RlKG8pIHtcbiAgICAgICAgICAgIHRoaXMudXJsID0gby51cmw7XG4gICAgICAgICAgICB0aGlzLnByZXBhcmUgPSBvLnByZXBhcmU7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IG8udHJhbnNmb3JtO1xuICAgICAgICAgICAgdGhpcy50cmFuc3BvcnQgPSBuZXcgVHJhbnNwb3J0KHtcbiAgICAgICAgICAgICAgICBjYWNoZTogby5jYWNoZSxcbiAgICAgICAgICAgICAgICBsaW1pdGVyOiBvLmxpbWl0ZXIsXG4gICAgICAgICAgICAgICAgdHJhbnNwb3J0OiBvLnRyYW5zcG9ydFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXy5taXhpbihSZW1vdGUucHJvdG90eXBlLCB7XG4gICAgICAgICAgICBfc2V0dGluZ3M6IGZ1bmN0aW9uIHNldHRpbmdzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHVybDogdGhpcy51cmwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiR0VUXCIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25cIlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQocXVlcnksIGNiKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLCBzZXR0aW5ncztcbiAgICAgICAgICAgICAgICBpZiAoIWNiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcXVlcnkgPSBxdWVyeSB8fCBcIlwiO1xuICAgICAgICAgICAgICAgIHNldHRpbmdzID0gdGhpcy5wcmVwYXJlKHF1ZXJ5LCB0aGlzLl9zZXR0aW5ncygpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc3BvcnQuZ2V0KHNldHRpbmdzLCBvblJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBvblJlc3BvbnNlKGVyciwgcmVzcCkge1xuICAgICAgICAgICAgICAgICAgICBlcnIgPyBjYihbXSkgOiBjYih0aGF0LnRyYW5zZm9ybShyZXNwKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNhbmNlbExhc3RSZXF1ZXN0OiBmdW5jdGlvbiBjYW5jZWxMYXN0UmVxdWVzdCgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zcG9ydC5jYW5jZWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBSZW1vdGU7XG4gICAgfSgpO1xuICAgIHZhciBvUGFyc2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGFyc2Uobykge1xuICAgICAgICAgICAgdmFyIGRlZmF1bHRzLCBzb3J0ZXI7XG4gICAgICAgICAgICBkZWZhdWx0cyA9IHtcbiAgICAgICAgICAgICAgICBpbml0aWFsaXplOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlkZW50aWZ5OiBfLnN0cmluZ2lmeSxcbiAgICAgICAgICAgICAgICBkYXR1bVRva2VuaXplcjogbnVsbCxcbiAgICAgICAgICAgICAgICBxdWVyeVRva2VuaXplcjogbnVsbCxcbiAgICAgICAgICAgICAgICBzdWZmaWNpZW50OiA1LFxuICAgICAgICAgICAgICAgIHNvcnRlcjogbnVsbCxcbiAgICAgICAgICAgICAgICBsb2NhbDogW10sXG4gICAgICAgICAgICAgICAgcHJlZmV0Y2g6IG51bGwsXG4gICAgICAgICAgICAgICAgcmVtb3RlOiBudWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbyA9IF8ubWl4aW4oZGVmYXVsdHMsIG8gfHwge30pO1xuICAgICAgICAgICAgIW8uZGF0dW1Ub2tlbml6ZXIgJiYgJC5lcnJvcihcImRhdHVtVG9rZW5pemVyIGlzIHJlcXVpcmVkXCIpO1xuICAgICAgICAgICAgIW8ucXVlcnlUb2tlbml6ZXIgJiYgJC5lcnJvcihcInF1ZXJ5VG9rZW5pemVyIGlzIHJlcXVpcmVkXCIpO1xuICAgICAgICAgICAgc29ydGVyID0gby5zb3J0ZXI7XG4gICAgICAgICAgICBvLnNvcnRlciA9IHNvcnRlciA/IGZ1bmN0aW9uKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geC5zb3J0KHNvcnRlcik7XG4gICAgICAgICAgICB9IDogXy5pZGVudGl0eTtcbiAgICAgICAgICAgIG8ubG9jYWwgPSBfLmlzRnVuY3Rpb24oby5sb2NhbCkgPyBvLmxvY2FsKCkgOiBvLmxvY2FsO1xuICAgICAgICAgICAgby5wcmVmZXRjaCA9IHBhcnNlUHJlZmV0Y2goby5wcmVmZXRjaCk7XG4gICAgICAgICAgICBvLnJlbW90ZSA9IHBhcnNlUmVtb3RlKG8ucmVtb3RlKTtcbiAgICAgICAgICAgIHJldHVybiBvO1xuICAgICAgICB9O1xuICAgICAgICBmdW5jdGlvbiBwYXJzZVByZWZldGNoKG8pIHtcbiAgICAgICAgICAgIHZhciBkZWZhdWx0cztcbiAgICAgICAgICAgIGlmICghbykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdHMgPSB7XG4gICAgICAgICAgICAgICAgdXJsOiBudWxsLFxuICAgICAgICAgICAgICAgIHR0bDogMjQgKiA2MCAqIDYwICogMWUzLFxuICAgICAgICAgICAgICAgIGNhY2hlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNhY2hlS2V5OiBudWxsLFxuICAgICAgICAgICAgICAgIHRodW1icHJpbnQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgcHJlcGFyZTogXy5pZGVudGl0eSxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IF8uaWRlbnRpdHksXG4gICAgICAgICAgICAgICAgdHJhbnNwb3J0OiBudWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbyA9IF8uaXNTdHJpbmcobykgPyB7XG4gICAgICAgICAgICAgICAgdXJsOiBvXG4gICAgICAgICAgICB9IDogbztcbiAgICAgICAgICAgIG8gPSBfLm1peGluKGRlZmF1bHRzLCBvKTtcbiAgICAgICAgICAgICFvLnVybCAmJiAkLmVycm9yKFwicHJlZmV0Y2ggcmVxdWlyZXMgdXJsIHRvIGJlIHNldFwiKTtcbiAgICAgICAgICAgIG8udHJhbnNmb3JtID0gby5maWx0ZXIgfHwgby50cmFuc2Zvcm07XG4gICAgICAgICAgICBvLmNhY2hlS2V5ID0gby5jYWNoZUtleSB8fCBvLnVybDtcbiAgICAgICAgICAgIG8udGh1bWJwcmludCA9IFZFUlNJT04gKyBvLnRodW1icHJpbnQ7XG4gICAgICAgICAgICBvLnRyYW5zcG9ydCA9IG8udHJhbnNwb3J0ID8gY2FsbGJhY2tUb0RlZmVycmVkKG8udHJhbnNwb3J0KSA6ICQuYWpheDtcbiAgICAgICAgICAgIHJldHVybiBvO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlUmVtb3RlKG8pIHtcbiAgICAgICAgICAgIHZhciBkZWZhdWx0cztcbiAgICAgICAgICAgIGlmICghbykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHRzID0ge1xuICAgICAgICAgICAgICAgIHVybDogbnVsbCxcbiAgICAgICAgICAgICAgICBjYWNoZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwcmVwYXJlOiBudWxsLFxuICAgICAgICAgICAgICAgIHJlcGxhY2U6IG51bGwsXG4gICAgICAgICAgICAgICAgd2lsZGNhcmQ6IG51bGwsXG4gICAgICAgICAgICAgICAgbGltaXRlcjogbnVsbCxcbiAgICAgICAgICAgICAgICByYXRlTGltaXRCeTogXCJkZWJvdW5jZVwiLFxuICAgICAgICAgICAgICAgIHJhdGVMaW1pdFdhaXQ6IDMwMCxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IF8uaWRlbnRpdHksXG4gICAgICAgICAgICAgICAgdHJhbnNwb3J0OiBudWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbyA9IF8uaXNTdHJpbmcobykgPyB7XG4gICAgICAgICAgICAgICAgdXJsOiBvXG4gICAgICAgICAgICB9IDogbztcbiAgICAgICAgICAgIG8gPSBfLm1peGluKGRlZmF1bHRzLCBvKTtcbiAgICAgICAgICAgICFvLnVybCAmJiAkLmVycm9yKFwicmVtb3RlIHJlcXVpcmVzIHVybCB0byBiZSBzZXRcIik7XG4gICAgICAgICAgICBvLnRyYW5zZm9ybSA9IG8uZmlsdGVyIHx8IG8udHJhbnNmb3JtO1xuICAgICAgICAgICAgby5wcmVwYXJlID0gdG9SZW1vdGVQcmVwYXJlKG8pO1xuICAgICAgICAgICAgby5saW1pdGVyID0gdG9MaW1pdGVyKG8pO1xuICAgICAgICAgICAgby50cmFuc3BvcnQgPSBvLnRyYW5zcG9ydCA/IGNhbGxiYWNrVG9EZWZlcnJlZChvLnRyYW5zcG9ydCkgOiAkLmFqYXg7XG4gICAgICAgICAgICBkZWxldGUgby5yZXBsYWNlO1xuICAgICAgICAgICAgZGVsZXRlIG8ud2lsZGNhcmQ7XG4gICAgICAgICAgICBkZWxldGUgby5yYXRlTGltaXRCeTtcbiAgICAgICAgICAgIGRlbGV0ZSBvLnJhdGVMaW1pdFdhaXQ7XG4gICAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0b1JlbW90ZVByZXBhcmUobykge1xuICAgICAgICAgICAgdmFyIHByZXBhcmUsIHJlcGxhY2UsIHdpbGRjYXJkO1xuICAgICAgICAgICAgcHJlcGFyZSA9IG8ucHJlcGFyZTtcbiAgICAgICAgICAgIHJlcGxhY2UgPSBvLnJlcGxhY2U7XG4gICAgICAgICAgICB3aWxkY2FyZCA9IG8ud2lsZGNhcmQ7XG4gICAgICAgICAgICBpZiAocHJlcGFyZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmVwYXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgICAgICAgICAgICBwcmVwYXJlID0gcHJlcGFyZUJ5UmVwbGFjZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoby53aWxkY2FyZCkge1xuICAgICAgICAgICAgICAgIHByZXBhcmUgPSBwcmVwYXJlQnlXaWxkY2FyZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJlcGFyZSA9IGlkZW5pdHlQcmVwYXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHByZXBhcmU7XG4gICAgICAgICAgICBmdW5jdGlvbiBwcmVwYXJlQnlSZXBsYWNlKHF1ZXJ5LCBzZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIHNldHRpbmdzLnVybCA9IHJlcGxhY2Uoc2V0dGluZ3MudXJsLCBxdWVyeSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNldHRpbmdzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gcHJlcGFyZUJ5V2lsZGNhcmQocXVlcnksIHNldHRpbmdzKSB7XG4gICAgICAgICAgICAgICAgc2V0dGluZ3MudXJsID0gc2V0dGluZ3MudXJsLnJlcGxhY2Uod2lsZGNhcmQsIGVuY29kZVVSSUNvbXBvbmVudChxdWVyeSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXR0aW5ncztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZ1bmN0aW9uIGlkZW5pdHlQcmVwYXJlKHF1ZXJ5LCBzZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXR0aW5ncztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0b0xpbWl0ZXIobykge1xuICAgICAgICAgICAgdmFyIGxpbWl0ZXIsIG1ldGhvZCwgd2FpdDtcbiAgICAgICAgICAgIGxpbWl0ZXIgPSBvLmxpbWl0ZXI7XG4gICAgICAgICAgICBtZXRob2QgPSBvLnJhdGVMaW1pdEJ5O1xuICAgICAgICAgICAgd2FpdCA9IG8ucmF0ZUxpbWl0V2FpdDtcbiAgICAgICAgICAgIGlmICghbGltaXRlcikge1xuICAgICAgICAgICAgICAgIGxpbWl0ZXIgPSAvXnRocm90dGxlJC9pLnRlc3QobWV0aG9kKSA/IHRocm90dGxlKHdhaXQpIDogZGVib3VuY2Uod2FpdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbGltaXRlcjtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGRlYm91bmNlKHdhaXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZGVib3VuY2UoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF8uZGVib3VuY2UoZm4sIHdhaXQpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiB0aHJvdHRsZSh3YWl0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRocm90dGxlKGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfLnRocm90dGxlKGZuLCB3YWl0KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrVG9EZWZlcnJlZChmbikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHdyYXBwZXIobykge1xuICAgICAgICAgICAgICAgIHZhciBkZWZlcnJlZCA9ICQuRGVmZXJyZWQoKTtcbiAgICAgICAgICAgICAgICBmbihvLCBvblN1Y2Nlc3MsIG9uRXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZDtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBvblN1Y2Nlc3MocmVzcCkge1xuICAgICAgICAgICAgICAgICAgICBfLmRlZmVyKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZShyZXNwKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG9uRXJyb3IoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIF8uZGVmZXIoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0oKTtcbiAgICB2YXIgQmxvb2Rob3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIG9sZDtcbiAgICAgICAgb2xkID0gd2luZG93ICYmIHdpbmRvdy5CbG9vZGhvdW5kO1xuICAgICAgICBmdW5jdGlvbiBCbG9vZGhvdW5kKG8pIHtcbiAgICAgICAgICAgIG8gPSBvUGFyc2VyKG8pO1xuICAgICAgICAgICAgdGhpcy5zb3J0ZXIgPSBvLnNvcnRlcjtcbiAgICAgICAgICAgIHRoaXMuaWRlbnRpZnkgPSBvLmlkZW50aWZ5O1xuICAgICAgICAgICAgdGhpcy5zdWZmaWNpZW50ID0gby5zdWZmaWNpZW50O1xuICAgICAgICAgICAgdGhpcy5sb2NhbCA9IG8ubG9jYWw7XG4gICAgICAgICAgICB0aGlzLnJlbW90ZSA9IG8ucmVtb3RlID8gbmV3IFJlbW90ZShvLnJlbW90ZSkgOiBudWxsO1xuICAgICAgICAgICAgdGhpcy5wcmVmZXRjaCA9IG8ucHJlZmV0Y2ggPyBuZXcgUHJlZmV0Y2goby5wcmVmZXRjaCkgOiBudWxsO1xuICAgICAgICAgICAgdGhpcy5pbmRleCA9IG5ldyBTZWFyY2hJbmRleCh7XG4gICAgICAgICAgICAgICAgaWRlbnRpZnk6IHRoaXMuaWRlbnRpZnksXG4gICAgICAgICAgICAgICAgZGF0dW1Ub2tlbml6ZXI6IG8uZGF0dW1Ub2tlbml6ZXIsXG4gICAgICAgICAgICAgICAgcXVlcnlUb2tlbml6ZXI6IG8ucXVlcnlUb2tlbml6ZXJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgby5pbml0aWFsaXplICE9PSBmYWxzZSAmJiB0aGlzLmluaXRpYWxpemUoKTtcbiAgICAgICAgfVxuICAgICAgICBCbG9vZGhvdW5kLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiBub0NvbmZsaWN0KCkge1xuICAgICAgICAgICAgd2luZG93ICYmICh3aW5kb3cuQmxvb2Rob3VuZCA9IG9sZCk7XG4gICAgICAgICAgICByZXR1cm4gQmxvb2Rob3VuZDtcbiAgICAgICAgfTtcbiAgICAgICAgQmxvb2Rob3VuZC50b2tlbml6ZXJzID0gdG9rZW5pemVycztcbiAgICAgICAgXy5taXhpbihCbG9vZGhvdW5kLnByb3RvdHlwZSwge1xuICAgICAgICAgICAgX190dEFkYXB0ZXI6IGZ1bmN0aW9uIHR0QWRhcHRlcigpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVtb3RlID8gd2l0aEFzeW5jIDogd2l0aG91dEFzeW5jO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdpdGhBc3luYyhxdWVyeSwgc3luYywgYXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQuc2VhcmNoKHF1ZXJ5LCBzeW5jLCBhc3luYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdpdGhvdXRBc3luYyhxdWVyeSwgc3luYykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhhdC5zZWFyY2gocXVlcnksIHN5bmMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfbG9hZFByZWZldGNoOiBmdW5jdGlvbiBsb2FkUHJlZmV0Y2goKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLCBkZWZlcnJlZCwgc2VyaWFsaXplZDtcbiAgICAgICAgICAgICAgICBkZWZlcnJlZCA9ICQuRGVmZXJyZWQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucHJlZmV0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VyaWFsaXplZCA9IHRoaXMucHJlZmV0Y2guZnJvbUNhY2hlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleC5ib290c3RyYXAoc2VyaWFsaXplZCk7XG4gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZWZldGNoLmZyb21OZXR3b3JrKGRvbmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyLCBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC5yZWplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGF0LmFkZChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5wcmVmZXRjaC5zdG9yZSh0aGF0LmluZGV4LnNlcmlhbGl6ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfaW5pdGlhbGl6ZTogZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsIGRlZmVycmVkO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAodGhpcy5pbml0UHJvbWlzZSA9IHRoaXMuX2xvYWRQcmVmZXRjaCgpKS5kb25lKGFkZExvY2FsVG9JbmRleCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdFByb21pc2U7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkTG9jYWxUb0luZGV4KCkge1xuICAgICAgICAgICAgICAgICAgICB0aGF0LmFkZCh0aGF0LmxvY2FsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gaW5pdGlhbGl6ZShmb3JjZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5pbml0UHJvbWlzZSB8fCBmb3JjZSA/IHRoaXMuX2luaXRpYWxpemUoKSA6IHRoaXMuaW5pdFByb21pc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWRkOiBmdW5jdGlvbiBhZGQoZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXguYWRkKGRhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGlkcykge1xuICAgICAgICAgICAgICAgIGlkcyA9IF8uaXNBcnJheShpZHMpID8gaWRzIDogW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluZGV4LmdldChpZHMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlYXJjaDogZnVuY3Rpb24gc2VhcmNoKHF1ZXJ5LCBzeW5jLCBhc3luYykge1xuICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywgbG9jYWw7XG4gICAgICAgICAgICAgICAgbG9jYWwgPSB0aGlzLnNvcnRlcih0aGlzLmluZGV4LnNlYXJjaChxdWVyeSkpO1xuICAgICAgICAgICAgICAgIHN5bmModGhpcy5yZW1vdGUgPyBsb2NhbC5zbGljZSgpIDogbG9jYWwpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlbW90ZSAmJiBsb2NhbC5sZW5ndGggPCB0aGlzLnN1ZmZpY2llbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdGUuZ2V0KHF1ZXJ5LCBwcm9jZXNzUmVtb3RlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVtb3RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3RlLmNhbmNlbExhc3RSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NSZW1vdGUocmVtb3RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBub25EdXBsaWNhdGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgIF8uZWFjaChyZW1vdGUsIGZ1bmN0aW9uKHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICFfLnNvbWUobG9jYWwsIGZ1bmN0aW9uKGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhhdC5pZGVudGlmeShyKSA9PT0gdGhhdC5pZGVudGlmeShsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pICYmIG5vbkR1cGxpY2F0ZXMucHVzaChyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jICYmIGFzeW5jKG5vbkR1cGxpY2F0ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhbGw6IGZ1bmN0aW9uIGFsbCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleC5hbGwoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleC5yZXNldCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFyUHJlZmV0Y2hDYWNoZTogZnVuY3Rpb24gY2xlYXJQcmVmZXRjaENhY2hlKCkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlZmV0Y2ggJiYgdGhpcy5wcmVmZXRjaC5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFyUmVtb3RlQ2FjaGU6IGZ1bmN0aW9uIGNsZWFyUmVtb3RlQ2FjaGUoKSB7XG4gICAgICAgICAgICAgICAgVHJhbnNwb3J0LnJlc2V0Q2FjaGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0dEFkYXB0ZXI6IGZ1bmN0aW9uIHR0QWRhcHRlcigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fX3R0QWRhcHRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIEJsb29kaG91bmQ7XG4gICAgfSgpO1xuICAgIHJldHVybiBCbG9vZGhvdW5kO1xufSk7XG5cbihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShcInR5cGVhaGVhZC5qc1wiLCBbIFwianF1ZXJ5XCIgXSwgZnVuY3Rpb24oYTApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWN0b3J5KGEwKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcImpxdWVyeVwiKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZmFjdG9yeShqUXVlcnkpO1xuICAgIH1cbn0pKHRoaXMsIGZ1bmN0aW9uKCQpIHtcbiAgICB2YXIgXyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzTXNpZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgPyBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC8obXNpZSB8cnY6KShcXGQrKC5cXGQrKT8pL2kpWzJdIDogZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNCbGFua1N0cmluZzogZnVuY3Rpb24oc3RyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFzdHIgfHwgL15cXHMqJC8udGVzdChzdHIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVzY2FwZVJlZ0V4Q2hhcnM6IGZ1bmN0aW9uKHN0cikge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1xcLVxcW1xcXVxcL1xce1xcfVxcKFxcKVxcKlxcK1xcP1xcLlxcXFxcXF5cXCRcXHxdL2csIFwiXFxcXCQmXCIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzU3RyaW5nOiBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc051bWJlcjogZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwibnVtYmVyXCI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNBcnJheTogJC5pc0FycmF5LFxuICAgICAgICAgICAgaXNGdW5jdGlvbjogJC5pc0Z1bmN0aW9uLFxuICAgICAgICAgICAgaXNPYmplY3Q6ICQuaXNQbGFpbk9iamVjdCxcbiAgICAgICAgICAgIGlzVW5kZWZpbmVkOiBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0VsZW1lbnQ6IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIShvYmogJiYgb2JqLm5vZGVUeXBlID09PSAxKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0pRdWVyeTogZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mICQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdG9TdHI6IGZ1bmN0aW9uIHRvU3RyKHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXy5pc1VuZGVmaW5lZChzKSB8fCBzID09PSBudWxsID8gXCJcIiA6IHMgKyBcIlwiO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJpbmQ6ICQucHJveHksXG4gICAgICAgICAgICBlYWNoOiBmdW5jdGlvbihjb2xsZWN0aW9uLCBjYikge1xuICAgICAgICAgICAgICAgICQuZWFjaChjb2xsZWN0aW9uLCByZXZlcnNlQXJncyk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gcmV2ZXJzZUFyZ3MoaW5kZXgsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYih2YWx1ZSwgaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtYXA6ICQubWFwLFxuICAgICAgICAgICAgZmlsdGVyOiAkLmdyZXAsXG4gICAgICAgICAgICBldmVyeTogZnVuY3Rpb24ob2JqLCB0ZXN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKCFvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJC5lYWNoKG9iaiwgZnVuY3Rpb24oa2V5LCB2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVzdWx0ID0gdGVzdC5jYWxsKG51bGwsIHZhbCwga2V5LCBvYmopKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhcmVzdWx0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNvbWU6IGZ1bmN0aW9uKG9iaiwgdGVzdCkge1xuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoIW9iaikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkLmVhY2gob2JqLCBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID0gdGVzdC5jYWxsKG51bGwsIHZhbCwga2V5LCBvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFyZXN1bHQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWl4aW46ICQuZXh0ZW5kLFxuICAgICAgICAgICAgaWRlbnRpdHk6IGZ1bmN0aW9uKHgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbG9uZTogZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICQuZXh0ZW5kKHRydWUsIHt9LCBvYmopO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldElkR2VuZXJhdG9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY291bnRlcisrO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGVtcGxhdGlmeTogZnVuY3Rpb24gdGVtcGxhdGlmeShvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5pc0Z1bmN0aW9uKG9iaikgPyBvYmogOiB0ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB0ZW1wbGF0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmopO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZlcjogZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWJvdW5jZTogZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRpbWVvdXQsIHJlc3VsdDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0gdGhpcywgYXJncyA9IGFyZ3VtZW50cywgbGF0ZXIsIGNhbGxOb3c7XG4gICAgICAgICAgICAgICAgICAgIGxhdGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW1tZWRpYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsTm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aHJvdHRsZTogZnVuY3Rpb24oZnVuYywgd2FpdCkge1xuICAgICAgICAgICAgICAgIHZhciBjb250ZXh0LCBhcmdzLCB0aW1lb3V0LCByZXN1bHQsIHByZXZpb3VzLCBsYXRlcjtcbiAgICAgICAgICAgICAgICBwcmV2aW91cyA9IDA7XG4gICAgICAgICAgICAgICAgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCksIHJlbWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzID0gbm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGltZW91dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF8uaXNTdHJpbmcodmFsKSA/IHZhbCA6IEpTT04uc3RyaW5naWZ5KHZhbCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbm9vcDogZnVuY3Rpb24oKSB7fVxuICAgICAgICB9O1xuICAgIH0oKTtcbiAgICB2YXIgV1dXID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICB2YXIgZGVmYXVsdENsYXNzTmFtZXMgPSB7XG4gICAgICAgICAgICB3cmFwcGVyOiBcInR3aXR0ZXItdHlwZWFoZWFkXCIsXG4gICAgICAgICAgICBpbnB1dDogXCJ0dC1pbnB1dFwiLFxuICAgICAgICAgICAgaGludDogXCJ0dC1oaW50XCIsXG4gICAgICAgICAgICBtZW51OiBcInR0LW1lbnVcIixcbiAgICAgICAgICAgIGRhdGFzZXQ6IFwidHQtZGF0YXNldFwiLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbjogXCJ0dC1zdWdnZXN0aW9uXCIsXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBcInR0LXNlbGVjdGFibGVcIixcbiAgICAgICAgICAgIGVtcHR5OiBcInR0LWVtcHR5XCIsXG4gICAgICAgICAgICBvcGVuOiBcInR0LW9wZW5cIixcbiAgICAgICAgICAgIGN1cnNvcjogXCJ0dC1jdXJzb3JcIixcbiAgICAgICAgICAgIGhpZ2hsaWdodDogXCJ0dC1oaWdobGlnaHRcIlxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gYnVpbGQ7XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkKG8pIHtcbiAgICAgICAgICAgIHZhciB3d3csIGNsYXNzZXM7XG4gICAgICAgICAgICBjbGFzc2VzID0gXy5taXhpbih7fSwgZGVmYXVsdENsYXNzTmFtZXMsIG8pO1xuICAgICAgICAgICAgd3d3ID0ge1xuICAgICAgICAgICAgICAgIGNzczogYnVpbGRDc3MoKSxcbiAgICAgICAgICAgICAgICBjbGFzc2VzOiBjbGFzc2VzLFxuICAgICAgICAgICAgICAgIGh0bWw6IGJ1aWxkSHRtbChjbGFzc2VzKSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcnM6IGJ1aWxkU2VsZWN0b3JzKGNsYXNzZXMpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjc3M6IHd3dy5jc3MsXG4gICAgICAgICAgICAgICAgaHRtbDogd3d3Lmh0bWwsXG4gICAgICAgICAgICAgICAgY2xhc3Nlczogd3d3LmNsYXNzZXMsXG4gICAgICAgICAgICAgICAgc2VsZWN0b3JzOiB3d3cuc2VsZWN0b3JzLFxuICAgICAgICAgICAgICAgIG1peGluOiBmdW5jdGlvbihvKSB7XG4gICAgICAgICAgICAgICAgICAgIF8ubWl4aW4obywgd3d3KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkSHRtbChjKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHdyYXBwZXI6ICc8c3BhbiBjbGFzcz1cIicgKyBjLndyYXBwZXIgKyAnXCI+PC9zcGFuPicsXG4gICAgICAgICAgICAgICAgbWVudTogJzxkaXYgY2xhc3M9XCInICsgYy5tZW51ICsgJ1wiPjwvZGl2PidcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYnVpbGRTZWxlY3RvcnMoY2xhc3Nlcykge1xuICAgICAgICAgICAgdmFyIHNlbGVjdG9ycyA9IHt9O1xuICAgICAgICAgICAgXy5lYWNoKGNsYXNzZXMsIGZ1bmN0aW9uKHYsIGspIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RvcnNba10gPSBcIi5cIiArIHY7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RvcnM7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYnVpbGRDc3MoKSB7XG4gICAgICAgICAgICB2YXIgY3NzID0ge1xuICAgICAgICAgICAgICAgIHdyYXBwZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmUtYmxvY2tcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaGludDoge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgICAgICAgICAgICB0b3A6IFwiMFwiLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiBcIjBcIixcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogXCIxXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IFwidG9wXCIsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbnB1dFdpdGhOb0hpbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogXCJ0b3BcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWVudToge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICAgICAgICAgICAgICB0b3A6IFwiMTAwJVwiLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiBcIjBcIixcbiAgICAgICAgICAgICAgICAgICAgekluZGV4OiBcIjEwMFwiLFxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcIm5vbmVcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbHRyOiB7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IFwiMFwiLFxuICAgICAgICAgICAgICAgICAgICByaWdodDogXCJhdXRvXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJ0bDoge1xuICAgICAgICAgICAgICAgICAgICBsZWZ0OiBcImF1dG9cIixcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IFwiIDBcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoXy5pc01zaWUoKSkge1xuICAgICAgICAgICAgICAgIF8ubWl4aW4oY3NzLmlucHV0LCB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRJbWFnZTogXCJ1cmwoZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQUFBQVAvLy95SDVCQUVBQUFBQUxBQUFBQUFCQUFFQUFBSUJSQUE3KVwiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3NzO1xuICAgICAgICB9XG4gICAgfSgpO1xuICAgIHZhciBFdmVudEJ1cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIG5hbWVzcGFjZSwgZGVwcmVjYXRpb25NYXA7XG4gICAgICAgIG5hbWVzcGFjZSA9IFwidHlwZWFoZWFkOlwiO1xuICAgICAgICBkZXByZWNhdGlvbk1hcCA9IHtcbiAgICAgICAgICAgIHJlbmRlcjogXCJyZW5kZXJlZFwiLFxuICAgICAgICAgICAgY3Vyc29yY2hhbmdlOiBcImN1cnNvcmNoYW5nZWRcIixcbiAgICAgICAgICAgIHNlbGVjdDogXCJzZWxlY3RlZFwiLFxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlOiBcImF1dG9jb21wbGV0ZWRcIlxuICAgICAgICB9O1xuICAgICAgICBmdW5jdGlvbiBFdmVudEJ1cyhvKSB7XG4gICAgICAgICAgICBpZiAoIW8gfHwgIW8uZWwpIHtcbiAgICAgICAgICAgICAgICAkLmVycm9yKFwiRXZlbnRCdXMgaW5pdGlhbGl6ZWQgd2l0aG91dCBlbFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuJGVsID0gJChvLmVsKTtcbiAgICAgICAgfVxuICAgICAgICBfLm1peGluKEV2ZW50QnVzLnByb3RvdHlwZSwge1xuICAgICAgICAgICAgX3RyaWdnZXI6IGZ1bmN0aW9uKHR5cGUsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICB2YXIgJGU7XG4gICAgICAgICAgICAgICAgJGUgPSAkLkV2ZW50KG5hbWVzcGFjZSArIHR5cGUpO1xuICAgICAgICAgICAgICAgIChhcmdzID0gYXJncyB8fCBbXSkudW5zaGlmdCgkZSk7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWwudHJpZ2dlci5hcHBseSh0aGlzLiRlbCwgYXJncyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICRlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJlZm9yZTogZnVuY3Rpb24odHlwZSkge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzLCAkZTtcbiAgICAgICAgICAgICAgICBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICAgICAgICAgICRlID0gdGhpcy5fdHJpZ2dlcihcImJlZm9yZVwiICsgdHlwZSwgYXJncyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICRlLmlzRGVmYXVsdFByZXZlbnRlZCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uKHR5cGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGVwcmVjYXRlZFR5cGU7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcih0eXBlLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICAgICAgICAgICAgICAgIGlmIChkZXByZWNhdGVkVHlwZSA9IGRlcHJlY2F0aW9uTWFwW3R5cGVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoZGVwcmVjYXRlZFR5cGUsIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIEV2ZW50QnVzO1xuICAgIH0oKTtcbiAgICB2YXIgRXZlbnRFbWl0dGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICB2YXIgc3BsaXR0ZXIgPSAvXFxzKy8sIG5leHRUaWNrID0gZ2V0TmV4dFRpY2soKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG9uU3luYzogb25TeW5jLFxuICAgICAgICAgICAgb25Bc3luYzogb25Bc3luYyxcbiAgICAgICAgICAgIG9mZjogb2ZmLFxuICAgICAgICAgICAgdHJpZ2dlcjogdHJpZ2dlclxuICAgICAgICB9O1xuICAgICAgICBmdW5jdGlvbiBvbihtZXRob2QsIHR5cGVzLCBjYiwgY29udGV4dCkge1xuICAgICAgICAgICAgdmFyIHR5cGU7XG4gICAgICAgICAgICBpZiAoIWNiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0eXBlcyA9IHR5cGVzLnNwbGl0KHNwbGl0dGVyKTtcbiAgICAgICAgICAgIGNiID0gY29udGV4dCA/IGJpbmRDb250ZXh0KGNiLCBjb250ZXh0KSA6IGNiO1xuICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xuICAgICAgICAgICAgd2hpbGUgKHR5cGUgPSB0eXBlcy5zaGlmdCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2tzW3R5cGVdID0gdGhpcy5fY2FsbGJhY2tzW3R5cGVdIHx8IHtcbiAgICAgICAgICAgICAgICAgICAgc3luYzogW10sXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2tzW3R5cGVdW21ldGhvZF0ucHVzaChjYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBvbkFzeW5jKHR5cGVzLCBjYiwgY29udGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuIG9uLmNhbGwodGhpcywgXCJhc3luY1wiLCB0eXBlcywgY2IsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uU3luYyh0eXBlcywgY2IsIGNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBvbi5jYWxsKHRoaXMsIFwic3luY1wiLCB0eXBlcywgY2IsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9mZih0eXBlcykge1xuICAgICAgICAgICAgdmFyIHR5cGU7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2NhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHlwZXMgPSB0eXBlcy5zcGxpdChzcGxpdHRlcik7XG4gICAgICAgICAgICB3aGlsZSAodHlwZSA9IHR5cGVzLnNoaWZ0KCkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fY2FsbGJhY2tzW3R5cGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdHJpZ2dlcih0eXBlcykge1xuICAgICAgICAgICAgdmFyIHR5cGUsIGNhbGxiYWNrcywgYXJncywgc3luY0ZsdXNoLCBhc3luY0ZsdXNoO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9jYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHR5cGVzID0gdHlwZXMuc3BsaXQoc3BsaXR0ZXIpO1xuICAgICAgICAgICAgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIHdoaWxlICgodHlwZSA9IHR5cGVzLnNoaWZ0KCkpICYmIChjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3NbdHlwZV0pKSB7XG4gICAgICAgICAgICAgICAgc3luY0ZsdXNoID0gZ2V0Rmx1c2goY2FsbGJhY2tzLnN5bmMsIHRoaXMsIFsgdHlwZSBdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgICAgYXN5bmNGbHVzaCA9IGdldEZsdXNoKGNhbGxiYWNrcy5hc3luYywgdGhpcywgWyB0eXBlIF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgICBzeW5jRmx1c2goKSAmJiBuZXh0VGljayhhc3luY0ZsdXNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldEZsdXNoKGNhbGxiYWNrcywgY29udGV4dCwgYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIGZsdXNoO1xuICAgICAgICAgICAgZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNhbmNlbGxlZDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gY2FsbGJhY2tzLmxlbmd0aDsgIWNhbmNlbGxlZCAmJiBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsbGVkID0gY2FsbGJhY2tzW2ldLmFwcGx5KGNvbnRleHQsIGFyZ3MpID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICFjYW5jZWxsZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0TmV4dFRpY2soKSB7XG4gICAgICAgICAgICB2YXIgbmV4dFRpY2tGbjtcbiAgICAgICAgICAgIGlmICh3aW5kb3cuc2V0SW1tZWRpYXRlKSB7XG4gICAgICAgICAgICAgICAgbmV4dFRpY2tGbiA9IGZ1bmN0aW9uIG5leHRUaWNrU2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5leHRUaWNrRm4gPSBmdW5jdGlvbiBuZXh0VGlja1NldFRpbWVvdXQoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV4dFRpY2tGbjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBiaW5kQ29udGV4dChmbiwgY29udGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmJpbmQgPyBmbi5iaW5kKGNvbnRleHQpIDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgZm4uYXBwbHkoY29udGV4dCwgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KCk7XG4gICAgdmFyIGhpZ2hsaWdodCA9IGZ1bmN0aW9uKGRvYykge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIGRlZmF1bHRzID0ge1xuICAgICAgICAgICAgbm9kZTogbnVsbCxcbiAgICAgICAgICAgIHBhdHRlcm46IG51bGwsXG4gICAgICAgICAgICB0YWdOYW1lOiBcInN0cm9uZ1wiLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBudWxsLFxuICAgICAgICAgICAgd29yZHNPbmx5OiBmYWxzZSxcbiAgICAgICAgICAgIGNhc2VTZW5zaXRpdmU6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBoaWdodGxpZ2h0KG8pIHtcbiAgICAgICAgICAgIHZhciByZWdleDtcbiAgICAgICAgICAgIG8gPSBfLm1peGluKHt9LCBkZWZhdWx0cywgbyk7XG4gICAgICAgICAgICBpZiAoIW8ubm9kZSB8fCAhby5wYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgby5wYXR0ZXJuID0gXy5pc0FycmF5KG8ucGF0dGVybikgPyBvLnBhdHRlcm4gOiBbIG8ucGF0dGVybiBdO1xuICAgICAgICAgICAgcmVnZXggPSBnZXRSZWdleChvLnBhdHRlcm4sIG8uY2FzZVNlbnNpdGl2ZSwgby53b3Jkc09ubHkpO1xuICAgICAgICAgICAgdHJhdmVyc2Uoby5ub2RlLCBoaWdodGxpZ2h0VGV4dE5vZGUpO1xuICAgICAgICAgICAgZnVuY3Rpb24gaGlnaHRsaWdodFRleHROb2RlKHRleHROb2RlKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoLCBwYXR0ZXJuTm9kZSwgd3JhcHBlck5vZGU7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoID0gcmVnZXguZXhlYyh0ZXh0Tm9kZS5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICB3cmFwcGVyTm9kZSA9IGRvYy5jcmVhdGVFbGVtZW50KG8udGFnTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIG8uY2xhc3NOYW1lICYmICh3cmFwcGVyTm9kZS5jbGFzc05hbWUgPSBvLmNsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm5Ob2RlID0gdGV4dE5vZGUuc3BsaXRUZXh0KG1hdGNoLmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybk5vZGUuc3BsaXRUZXh0KG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIHdyYXBwZXJOb2RlLmFwcGVuZENoaWxkKHBhdHRlcm5Ob2RlLmNsb25lTm9kZSh0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgIHRleHROb2RlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHdyYXBwZXJOb2RlLCBwYXR0ZXJuTm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhIW1hdGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gdHJhdmVyc2UoZWwsIGhpZ2h0bGlnaHRUZXh0Tm9kZSkge1xuICAgICAgICAgICAgICAgIHZhciBjaGlsZE5vZGUsIFRFWFRfTk9ERV9UWVBFID0gMztcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0gZWwuY2hpbGROb2Rlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFX1RZUEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gaGlnaHRsaWdodFRleHROb2RlKGNoaWxkTm9kZSkgPyAxIDogMDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYXZlcnNlKGNoaWxkTm9kZSwgaGlnaHRsaWdodFRleHROb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gZ2V0UmVnZXgocGF0dGVybnMsIGNhc2VTZW5zaXRpdmUsIHdvcmRzT25seSkge1xuICAgICAgICAgICAgdmFyIGVzY2FwZWRQYXR0ZXJucyA9IFtdLCByZWdleFN0cjtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBwYXR0ZXJucy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGVzY2FwZWRQYXR0ZXJucy5wdXNoKF8uZXNjYXBlUmVnRXhDaGFycyhwYXR0ZXJuc1tpXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVnZXhTdHIgPSB3b3Jkc09ubHkgPyBcIlxcXFxiKFwiICsgZXNjYXBlZFBhdHRlcm5zLmpvaW4oXCJ8XCIpICsgXCIpXFxcXGJcIiA6IFwiKFwiICsgZXNjYXBlZFBhdHRlcm5zLmpvaW4oXCJ8XCIpICsgXCIpXCI7XG4gICAgICAgICAgICByZXR1cm4gY2FzZVNlbnNpdGl2ZSA/IG5ldyBSZWdFeHAocmVnZXhTdHIpIDogbmV3IFJlZ0V4cChyZWdleFN0ciwgXCJpXCIpO1xuICAgICAgICB9XG4gICAgfSh3aW5kb3cuZG9jdW1lbnQpO1xuICAgIHZhciBJbnB1dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIHNwZWNpYWxLZXlDb2RlTWFwO1xuICAgICAgICBzcGVjaWFsS2V5Q29kZU1hcCA9IHtcbiAgICAgICAgICAgIDk6IFwidGFiXCIsXG4gICAgICAgICAgICAyNzogXCJlc2NcIixcbiAgICAgICAgICAgIDM3OiBcImxlZnRcIixcbiAgICAgICAgICAgIDM5OiBcInJpZ2h0XCIsXG4gICAgICAgICAgICAxMzogXCJlbnRlclwiLFxuICAgICAgICAgICAgMzg6IFwidXBcIixcbiAgICAgICAgICAgIDQwOiBcImRvd25cIlxuICAgICAgICB9O1xuICAgICAgICBmdW5jdGlvbiBJbnB1dChvLCB3d3cpIHtcbiAgICAgICAgICAgIG8gPSBvIHx8IHt9O1xuICAgICAgICAgICAgaWYgKCFvLmlucHV0KSB7XG4gICAgICAgICAgICAgICAgJC5lcnJvcihcImlucHV0IGlzIG1pc3NpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3d3cubWl4aW4odGhpcyk7XG4gICAgICAgICAgICB0aGlzLiRoaW50ID0gJChvLmhpbnQpO1xuICAgICAgICAgICAgdGhpcy4kaW5wdXQgPSAkKG8uaW5wdXQpO1xuICAgICAgICAgICAgdGhpcy5xdWVyeSA9IHRoaXMuJGlucHV0LnZhbCgpO1xuICAgICAgICAgICAgdGhpcy5xdWVyeVdoZW5Gb2N1c2VkID0gdGhpcy5oYXNGb2N1cygpID8gdGhpcy5xdWVyeSA6IG51bGw7XG4gICAgICAgICAgICB0aGlzLiRvdmVyZmxvd0hlbHBlciA9IGJ1aWxkT3ZlcmZsb3dIZWxwZXIodGhpcy4kaW5wdXQpO1xuICAgICAgICAgICAgdGhpcy5fY2hlY2tMYW5ndWFnZURpcmVjdGlvbigpO1xuICAgICAgICAgICAgaWYgKHRoaXMuJGhpbnQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRIaW50ID0gdGhpcy5nZXRIaW50ID0gdGhpcy5jbGVhckhpbnQgPSB0aGlzLmNsZWFySGludElmSW52YWxpZCA9IF8ubm9vcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBJbnB1dC5ub3JtYWxpemVRdWVyeSA9IGZ1bmN0aW9uKHN0cikge1xuICAgICAgICAgICAgcmV0dXJuIF8udG9TdHIoc3RyKS5yZXBsYWNlKC9eXFxzKi9nLCBcIlwiKS5yZXBsYWNlKC9cXHN7Mix9L2csIFwiIFwiKTtcbiAgICAgICAgfTtcbiAgICAgICAgXy5taXhpbihJbnB1dC5wcm90b3R5cGUsIEV2ZW50RW1pdHRlciwge1xuICAgICAgICAgICAgX29uQmx1cjogZnVuY3Rpb24gb25CbHVyKCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRJbnB1dFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKFwiYmx1cnJlZFwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25Gb2N1czogZnVuY3Rpb24gb25Gb2N1cygpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5V2hlbkZvY3VzZWQgPSB0aGlzLnF1ZXJ5O1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcihcImZvY3VzZWRcIik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX29uS2V5ZG93bjogZnVuY3Rpb24gb25LZXlkb3duKCRlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleU5hbWUgPSBzcGVjaWFsS2V5Q29kZU1hcFskZS53aGljaCB8fCAkZS5rZXlDb2RlXTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VQcmV2ZW50RGVmYXVsdChrZXlOYW1lLCAkZSk7XG4gICAgICAgICAgICAgICAgaWYgKGtleU5hbWUgJiYgdGhpcy5fc2hvdWxkVHJpZ2dlcihrZXlOYW1lLCAkZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKGtleU5hbWUgKyBcIktleWVkXCIsICRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX29uSW5wdXQ6IGZ1bmN0aW9uIG9uSW5wdXQoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0UXVlcnkodGhpcy5nZXRJbnB1dFZhbHVlKCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJIaW50SWZJbnZhbGlkKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tMYW5ndWFnZURpcmVjdGlvbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9tYW5hZ2VQcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gbWFuYWdlUHJldmVudERlZmF1bHQoa2V5TmFtZSwgJGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgcHJldmVudERlZmF1bHQ7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChrZXlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwidXBcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJkb3duXCI6XG4gICAgICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0ID0gIXdpdGhNb2RpZmllcigkZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCAmJiAkZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9zaG91bGRUcmlnZ2VyOiBmdW5jdGlvbiBzaG91bGRUcmlnZ2VyKGtleU5hbWUsICRlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRyaWdnZXI7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChrZXlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwidGFiXCI6XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIgPSAhd2l0aE1vZGlmaWVyKCRlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJpZ2dlcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfY2hlY2tMYW5ndWFnZURpcmVjdGlvbjogZnVuY3Rpb24gY2hlY2tMYW5ndWFnZURpcmVjdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGlyID0gKHRoaXMuJGlucHV0LmNzcyhcImRpcmVjdGlvblwiKSB8fCBcImx0clwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpciAhPT0gZGlyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlyID0gZGlyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRoaW50LmF0dHIoXCJkaXJcIiwgZGlyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKFwibGFuZ0RpckNoYW5nZWRcIiwgZGlyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX3NldFF1ZXJ5OiBmdW5jdGlvbiBzZXRRdWVyeSh2YWwsIHNpbGVudCkge1xuICAgICAgICAgICAgICAgIHZhciBhcmVFcXVpdmFsZW50LCBoYXNEaWZmZXJlbnRXaGl0ZXNwYWNlO1xuICAgICAgICAgICAgICAgIGFyZUVxdWl2YWxlbnQgPSBhcmVRdWVyaWVzRXF1aXZhbGVudCh2YWwsIHRoaXMucXVlcnkpO1xuICAgICAgICAgICAgICAgIGhhc0RpZmZlcmVudFdoaXRlc3BhY2UgPSBhcmVFcXVpdmFsZW50ID8gdGhpcy5xdWVyeS5sZW5ndGggIT09IHZhbC5sZW5ndGggOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5ID0gdmFsO1xuICAgICAgICAgICAgICAgIGlmICghc2lsZW50ICYmICFhcmVFcXVpdmFsZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcihcInF1ZXJ5Q2hhbmdlZFwiLCB0aGlzLnF1ZXJ5KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzaWxlbnQgJiYgaGFzRGlmZmVyZW50V2hpdGVzcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJ3aGl0ZXNwYWNlQ2hhbmdlZFwiLCB0aGlzLnF1ZXJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmluZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLCBvbkJsdXIsIG9uRm9jdXMsIG9uS2V5ZG93biwgb25JbnB1dDtcbiAgICAgICAgICAgICAgICBvbkJsdXIgPSBfLmJpbmQodGhpcy5fb25CbHVyLCB0aGlzKTtcbiAgICAgICAgICAgICAgICBvbkZvY3VzID0gXy5iaW5kKHRoaXMuX29uRm9jdXMsIHRoaXMpO1xuICAgICAgICAgICAgICAgIG9uS2V5ZG93biA9IF8uYmluZCh0aGlzLl9vbktleWRvd24sIHRoaXMpO1xuICAgICAgICAgICAgICAgIG9uSW5wdXQgPSBfLmJpbmQodGhpcy5fb25JbnB1dCwgdGhpcyk7XG4gICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQub24oXCJibHVyLnR0XCIsIG9uQmx1cikub24oXCJmb2N1cy50dFwiLCBvbkZvY3VzKS5vbihcImtleWRvd24udHRcIiwgb25LZXlkb3duKTtcbiAgICAgICAgICAgICAgICBpZiAoIV8uaXNNc2llKCkgfHwgXy5pc01zaWUoKSA+IDkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQub24oXCJpbnB1dC50dFwiLCBvbklucHV0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRpbnB1dC5vbihcImtleWRvd24udHQga2V5cHJlc3MudHQgY3V0LnR0IHBhc3RlLnR0XCIsIGZ1bmN0aW9uKCRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BlY2lhbEtleUNvZGVNYXBbJGUud2hpY2ggfHwgJGUua2V5Q29kZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBfLmRlZmVyKF8uYmluZCh0aGF0Ll9vbklucHV0LCB0aGF0LCAkZSkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZm9jdXM6IGZ1bmN0aW9uIGZvY3VzKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGlucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmx1cjogZnVuY3Rpb24gYmx1cigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRpbnB1dC5ibHVyKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0TGFuZ0RpcjogZnVuY3Rpb24gZ2V0TGFuZ0RpcigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kaXI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0UXVlcnk6IGZ1bmN0aW9uIGdldFF1ZXJ5KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5IHx8IFwiXCI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0UXVlcnk6IGZ1bmN0aW9uIHNldFF1ZXJ5KHZhbCwgc2lsZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHZhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0UXVlcnkodmFsLCBzaWxlbnQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhc1F1ZXJ5Q2hhbmdlZFNpbmNlTGFzdEZvY3VzOiBmdW5jdGlvbiBoYXNRdWVyeUNoYW5nZWRTaW5jZUxhc3RGb2N1cygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5xdWVyeSAhPT0gdGhpcy5xdWVyeVdoZW5Gb2N1c2VkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldElucHV0VmFsdWU6IGZ1bmN0aW9uIGdldElucHV0VmFsdWUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGlucHV0LnZhbCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldElucHV0VmFsdWU6IGZ1bmN0aW9uIHNldElucHV0VmFsdWUodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRpbnB1dC52YWwodmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJIaW50SWZJbnZhbGlkKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tMYW5ndWFnZURpcmVjdGlvbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc2V0SW5wdXRWYWx1ZTogZnVuY3Rpb24gcmVzZXRJbnB1dFZhbHVlKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0aGlzLnF1ZXJ5KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRIaW50OiBmdW5jdGlvbiBnZXRIaW50KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRoaW50LnZhbCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldEhpbnQ6IGZ1bmN0aW9uIHNldEhpbnQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRoaW50LnZhbCh2YWx1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xlYXJIaW50OiBmdW5jdGlvbiBjbGVhckhpbnQoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRIaW50KFwiXCIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFySGludElmSW52YWxpZDogZnVuY3Rpb24gY2xlYXJIaW50SWZJbnZhbGlkKCkge1xuICAgICAgICAgICAgICAgIHZhciB2YWwsIGhpbnQsIHZhbElzUHJlZml4T2ZIaW50LCBpc1ZhbGlkO1xuICAgICAgICAgICAgICAgIHZhbCA9IHRoaXMuZ2V0SW5wdXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIGhpbnQgPSB0aGlzLmdldEhpbnQoKTtcbiAgICAgICAgICAgICAgICB2YWxJc1ByZWZpeE9mSGludCA9IHZhbCAhPT0gaGludCAmJiBoaW50LmluZGV4T2YodmFsKSA9PT0gMDtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gdmFsICE9PSBcIlwiICYmIHZhbElzUHJlZml4T2ZIaW50ICYmICF0aGlzLmhhc092ZXJmbG93KCk7XG4gICAgICAgICAgICAgICAgIWlzVmFsaWQgJiYgdGhpcy5jbGVhckhpbnQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYXNGb2N1czogZnVuY3Rpb24gaGFzRm9jdXMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGlucHV0LmlzKFwiOmZvY3VzXCIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhc092ZXJmbG93OiBmdW5jdGlvbiBoYXNPdmVyZmxvdygpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29uc3RyYWludCA9IHRoaXMuJGlucHV0LndpZHRoKCkgLSAyO1xuICAgICAgICAgICAgICAgIHRoaXMuJG92ZXJmbG93SGVscGVyLnRleHQodGhpcy5nZXRJbnB1dFZhbHVlKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRvdmVyZmxvd0hlbHBlci53aWR0aCgpID49IGNvbnN0cmFpbnQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNDdXJzb3JBdEVuZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlTGVuZ3RoLCBzZWxlY3Rpb25TdGFydCwgcmFuZ2U7XG4gICAgICAgICAgICAgICAgdmFsdWVMZW5ndGggPSB0aGlzLiRpbnB1dC52YWwoKS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhcnQgPSB0aGlzLiRpbnB1dFswXS5zZWxlY3Rpb25TdGFydDtcbiAgICAgICAgICAgICAgICBpZiAoXy5pc051bWJlcihzZWxlY3Rpb25TdGFydCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvblN0YXJ0ID09PSB2YWx1ZUxlbmd0aDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICByYW5nZSA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICByYW5nZS5tb3ZlU3RhcnQoXCJjaGFyYWN0ZXJcIiwgLXZhbHVlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlTGVuZ3RoID09PSByYW5nZS50ZXh0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRoaW50Lm9mZihcIi50dFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLiRpbnB1dC5vZmYoXCIudHRcIik7XG4gICAgICAgICAgICAgICAgdGhpcy4kb3ZlcmZsb3dIZWxwZXIucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy4kaGludCA9IHRoaXMuJGlucHV0ID0gdGhpcy4kb3ZlcmZsb3dIZWxwZXIgPSAkKFwiPGRpdj5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gSW5wdXQ7XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkT3ZlcmZsb3dIZWxwZXIoJGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJCgnPHByZSBhcmlhLWhpZGRlbj1cInRydWVcIj48L3ByZT4nKS5jc3Moe1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgICAgICB3aGl0ZVNwYWNlOiBcInByZVwiLFxuICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICRpbnB1dC5jc3MoXCJmb250LWZhbWlseVwiKSxcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogJGlucHV0LmNzcyhcImZvbnQtc2l6ZVwiKSxcbiAgICAgICAgICAgICAgICBmb250U3R5bGU6ICRpbnB1dC5jc3MoXCJmb250LXN0eWxlXCIpLFxuICAgICAgICAgICAgICAgIGZvbnRWYXJpYW50OiAkaW5wdXQuY3NzKFwiZm9udC12YXJpYW50XCIpLFxuICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICRpbnB1dC5jc3MoXCJmb250LXdlaWdodFwiKSxcbiAgICAgICAgICAgICAgICB3b3JkU3BhY2luZzogJGlucHV0LmNzcyhcIndvcmQtc3BhY2luZ1wiKSxcbiAgICAgICAgICAgICAgICBsZXR0ZXJTcGFjaW5nOiAkaW5wdXQuY3NzKFwibGV0dGVyLXNwYWNpbmdcIiksXG4gICAgICAgICAgICAgICAgdGV4dEluZGVudDogJGlucHV0LmNzcyhcInRleHQtaW5kZW50XCIpLFxuICAgICAgICAgICAgICAgIHRleHRSZW5kZXJpbmc6ICRpbnB1dC5jc3MoXCJ0ZXh0LXJlbmRlcmluZ1wiKSxcbiAgICAgICAgICAgICAgICB0ZXh0VHJhbnNmb3JtOiAkaW5wdXQuY3NzKFwidGV4dC10cmFuc2Zvcm1cIilcbiAgICAgICAgICAgIH0pLmluc2VydEFmdGVyKCRpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYXJlUXVlcmllc0VxdWl2YWxlbnQoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIElucHV0Lm5vcm1hbGl6ZVF1ZXJ5KGEpID09PSBJbnB1dC5ub3JtYWxpemVRdWVyeShiKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB3aXRoTW9kaWZpZXIoJGUpIHtcbiAgICAgICAgICAgIHJldHVybiAkZS5hbHRLZXkgfHwgJGUuY3RybEtleSB8fCAkZS5tZXRhS2V5IHx8ICRlLnNoaWZ0S2V5O1xuICAgICAgICB9XG4gICAgfSgpO1xuICAgIHZhciBEYXRhc2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICB2YXIga2V5cywgbmFtZUdlbmVyYXRvcjtcbiAgICAgICAga2V5cyA9IHtcbiAgICAgICAgICAgIHZhbDogXCJ0dC1zZWxlY3RhYmxlLWRpc3BsYXlcIixcbiAgICAgICAgICAgIG9iajogXCJ0dC1zZWxlY3RhYmxlLW9iamVjdFwiXG4gICAgICAgIH07XG4gICAgICAgIG5hbWVHZW5lcmF0b3IgPSBfLmdldElkR2VuZXJhdG9yKCk7XG4gICAgICAgIGZ1bmN0aW9uIERhdGFzZXQobywgd3d3KSB7XG4gICAgICAgICAgICBvID0gbyB8fCB7fTtcbiAgICAgICAgICAgIG8udGVtcGxhdGVzID0gby50ZW1wbGF0ZXMgfHwge307XG4gICAgICAgICAgICBvLnRlbXBsYXRlcy5ub3RGb3VuZCA9IG8udGVtcGxhdGVzLm5vdEZvdW5kIHx8IG8udGVtcGxhdGVzLmVtcHR5O1xuICAgICAgICAgICAgaWYgKCFvLnNvdXJjZSkge1xuICAgICAgICAgICAgICAgICQuZXJyb3IoXCJtaXNzaW5nIHNvdXJjZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghby5ub2RlKSB7XG4gICAgICAgICAgICAgICAgJC5lcnJvcihcIm1pc3Npbmcgbm9kZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvLm5hbWUgJiYgIWlzVmFsaWROYW1lKG8ubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAkLmVycm9yKFwiaW52YWxpZCBkYXRhc2V0IG5hbWU6IFwiICsgby5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHd3dy5taXhpbih0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0ID0gISFvLmhpZ2hsaWdodDtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IG8ubmFtZSB8fCBuYW1lR2VuZXJhdG9yKCk7XG4gICAgICAgICAgICB0aGlzLmxpbWl0ID0gby5saW1pdCB8fCA1O1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5Rm4gPSBnZXREaXNwbGF5Rm4oby5kaXNwbGF5IHx8IG8uZGlzcGxheUtleSk7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlcyA9IGdldFRlbXBsYXRlcyhvLnRlbXBsYXRlcywgdGhpcy5kaXNwbGF5Rm4pO1xuICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBvLnNvdXJjZS5fX3R0QWRhcHRlciA/IG8uc291cmNlLl9fdHRBZGFwdGVyKCkgOiBvLnNvdXJjZTtcbiAgICAgICAgICAgIHRoaXMuYXN5bmMgPSBfLmlzVW5kZWZpbmVkKG8uYXN5bmMpID8gdGhpcy5zb3VyY2UubGVuZ3RoID4gMiA6ICEhby5hc3luYztcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0TGFzdFN1Z2dlc3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMuJGVsID0gJChvLm5vZGUpLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5kYXRhc2V0KS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuZGF0YXNldCArIFwiLVwiICsgdGhpcy5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBEYXRhc2V0LmV4dHJhY3REYXRhID0gZnVuY3Rpb24gZXh0cmFjdERhdGEoZWwpIHtcbiAgICAgICAgICAgIHZhciAkZWwgPSAkKGVsKTtcbiAgICAgICAgICAgIGlmICgkZWwuZGF0YShrZXlzLm9iaikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB2YWw6ICRlbC5kYXRhKGtleXMudmFsKSB8fCBcIlwiLFxuICAgICAgICAgICAgICAgICAgICBvYmo6ICRlbC5kYXRhKGtleXMub2JqKSB8fCBudWxsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9O1xuICAgICAgICBfLm1peGluKERhdGFzZXQucHJvdG90eXBlLCBFdmVudEVtaXR0ZXIsIHtcbiAgICAgICAgICAgIF9vdmVyd3JpdGU6IGZ1bmN0aW9uIG92ZXJ3cml0ZShxdWVyeSwgc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyA9IHN1Z2dlc3Rpb25zIHx8IFtdO1xuICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyU3VnZ2VzdGlvbnMocXVlcnksIHN1Z2dlc3Rpb25zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXN5bmMgJiYgdGhpcy50ZW1wbGF0ZXMucGVuZGluZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJQZW5kaW5nKHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmFzeW5jICYmIHRoaXMudGVtcGxhdGVzLm5vdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlck5vdEZvdW5kKHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbXB0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJyZW5kZXJlZFwiLCB0aGlzLm5hbWUsIHN1Z2dlc3Rpb25zLCBmYWxzZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2FwcGVuZDogZnVuY3Rpb24gYXBwZW5kKHF1ZXJ5LCBzdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gc3VnZ2VzdGlvbnMgfHwgW107XG4gICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmxlbmd0aCAmJiB0aGlzLiRsYXN0U3VnZ2VzdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwZW5kU3VnZ2VzdGlvbnMocXVlcnksIHN1Z2dlc3Rpb25zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJTdWdnZXN0aW9ucyhxdWVyeSwgc3VnZ2VzdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuJGxhc3RTdWdnZXN0aW9uLmxlbmd0aCAmJiB0aGlzLnRlbXBsYXRlcy5ub3RGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJOb3RGb3VuZChxdWVyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcihcInJlbmRlcmVkXCIsIHRoaXMubmFtZSwgc3VnZ2VzdGlvbnMsIHRydWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9yZW5kZXJTdWdnZXN0aW9uczogZnVuY3Rpb24gcmVuZGVyU3VnZ2VzdGlvbnMocXVlcnksIHN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFyICRmcmFnbWVudDtcbiAgICAgICAgICAgICAgICAkZnJhZ21lbnQgPSB0aGlzLl9nZXRTdWdnZXN0aW9uc0ZyYWdtZW50KHF1ZXJ5LCBzdWdnZXN0aW9ucyk7XG4gICAgICAgICAgICAgICAgdGhpcy4kbGFzdFN1Z2dlc3Rpb24gPSAkZnJhZ21lbnQuY2hpbGRyZW4oKS5sYXN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWwuaHRtbCgkZnJhZ21lbnQpLnByZXBlbmQodGhpcy5fZ2V0SGVhZGVyKHF1ZXJ5LCBzdWdnZXN0aW9ucykpLmFwcGVuZCh0aGlzLl9nZXRGb290ZXIocXVlcnksIHN1Z2dlc3Rpb25zKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2FwcGVuZFN1Z2dlc3Rpb25zOiBmdW5jdGlvbiBhcHBlbmRTdWdnZXN0aW9ucyhxdWVyeSwgc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgJGZyYWdtZW50LCAkbGFzdFN1Z2dlc3Rpb247XG4gICAgICAgICAgICAgICAgJGZyYWdtZW50ID0gdGhpcy5fZ2V0U3VnZ2VzdGlvbnNGcmFnbWVudChxdWVyeSwgc3VnZ2VzdGlvbnMpO1xuICAgICAgICAgICAgICAgICRsYXN0U3VnZ2VzdGlvbiA9ICRmcmFnbWVudC5jaGlsZHJlbigpLmxhc3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLiRsYXN0U3VnZ2VzdGlvbi5hZnRlcigkZnJhZ21lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuJGxhc3RTdWdnZXN0aW9uID0gJGxhc3RTdWdnZXN0aW9uO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9yZW5kZXJQZW5kaW5nOiBmdW5jdGlvbiByZW5kZXJQZW5kaW5nKHF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgdmFyIHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXMucGVuZGluZztcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNldExhc3RTdWdnZXN0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGUgJiYgdGhpcy4kZWwuaHRtbCh0ZW1wbGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldDogdGhpcy5uYW1lXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9yZW5kZXJOb3RGb3VuZDogZnVuY3Rpb24gcmVuZGVyTm90Rm91bmQocXVlcnkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlcy5ub3RGb3VuZDtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNldExhc3RTdWdnZXN0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGUgJiYgdGhpcy4kZWwuaHRtbCh0ZW1wbGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldDogdGhpcy5uYW1lXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9lbXB0eTogZnVuY3Rpb24gZW1wdHkoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWwuZW1wdHkoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNldExhc3RTdWdnZXN0aW9uKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2dldFN1Z2dlc3Rpb25zRnJhZ21lbnQ6IGZ1bmN0aW9uIGdldFN1Z2dlc3Rpb25zRnJhZ21lbnQocXVlcnksIHN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLCBmcmFnbWVudDtcbiAgICAgICAgICAgICAgICBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgICAgICAgICBfLmVhY2goc3VnZ2VzdGlvbnMsIGZ1bmN0aW9uIGdldFN1Z2dlc3Rpb25Ob2RlKHN1Z2dlc3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRlbCwgY29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IHRoYXQuX2luamVjdFF1ZXJ5KHF1ZXJ5LCBzdWdnZXN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgJGVsID0gJCh0aGF0LnRlbXBsYXRlcy5zdWdnZXN0aW9uKGNvbnRleHQpKS5kYXRhKGtleXMub2JqLCBzdWdnZXN0aW9uKS5kYXRhKGtleXMudmFsLCB0aGF0LmRpc3BsYXlGbihzdWdnZXN0aW9uKSkuYWRkQ2xhc3ModGhhdC5jbGFzc2VzLnN1Z2dlc3Rpb24gKyBcIiBcIiArIHRoYXQuY2xhc3Nlcy5zZWxlY3RhYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoJGVsWzBdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodCAmJiBoaWdobGlnaHQoe1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IHRoaXMuY2xhc3Nlcy5oaWdobGlnaHQsXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IGZyYWdtZW50LFxuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuOiBxdWVyeVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiAkKGZyYWdtZW50KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfZ2V0Rm9vdGVyOiBmdW5jdGlvbiBnZXRGb290ZXIocXVlcnksIHN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVzLmZvb3RlciA/IHRoaXMudGVtcGxhdGVzLmZvb3Rlcih7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM6IHN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0OiB0aGlzLm5hbWVcbiAgICAgICAgICAgICAgICB9KSA6IG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2dldEhlYWRlcjogZnVuY3Rpb24gZ2V0SGVhZGVyKHF1ZXJ5LCBzdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlcy5oZWFkZXIgPyB0aGlzLnRlbXBsYXRlcy5oZWFkZXIoe1xuICAgICAgICAgICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zOiBzdWdnZXN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldDogdGhpcy5uYW1lXG4gICAgICAgICAgICAgICAgfSkgOiBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9yZXNldExhc3RTdWdnZXN0aW9uOiBmdW5jdGlvbiByZXNldExhc3RTdWdnZXN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGxhc3RTdWdnZXN0aW9uID0gJCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9pbmplY3RRdWVyeTogZnVuY3Rpb24gaW5qZWN0UXVlcnkocXVlcnksIG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBfLmlzT2JqZWN0KG9iaikgPyBfLm1peGluKHtcbiAgICAgICAgICAgICAgICAgICAgX3F1ZXJ5OiBxdWVyeVxuICAgICAgICAgICAgICAgIH0sIG9iaikgOiBvYmo7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUocXVlcnkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsIGNhbmNlbGVkID0gZmFsc2UsIHN5bmNDYWxsZWQgPSBmYWxzZSwgcmVuZGVyZWQgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWwgPSBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5jYW5jZWwgPSAkLm5vb3A7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuYXN5bmMgJiYgdGhhdC50cmlnZ2VyKFwiYXN5bmNDYW5jZWxlZFwiLCBxdWVyeSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZShxdWVyeSwgc3luYywgYXN5bmMpO1xuICAgICAgICAgICAgICAgICFzeW5jQ2FsbGVkICYmIHN5bmMoW10pO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHN5bmMoc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN5bmNDYWxsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzeW5jQ2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMgPSAoc3VnZ2VzdGlvbnMgfHwgW10pLnNsaWNlKDAsIHRoYXQubGltaXQpO1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJlZCA9IHN1Z2dlc3Rpb25zLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5fb3ZlcndyaXRlKHF1ZXJ5LCBzdWdnZXN0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW5kZXJlZCA8IHRoYXQubGltaXQgJiYgdGhhdC5hc3luYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC50cmlnZ2VyKFwiYXN5bmNSZXF1ZXN0ZWRcIiwgcXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFzeW5jKHN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gc3VnZ2VzdGlvbnMgfHwgW107XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FuY2VsZWQgJiYgcmVuZGVyZWQgPCB0aGF0LmxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmNhbmNlbCA9ICQubm9vcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVkICs9IHN1Z2dlc3Rpb25zLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX2FwcGVuZChxdWVyeSwgc3VnZ2VzdGlvbnMuc2xpY2UoMCwgdGhhdC5saW1pdCAtIHJlbmRlcmVkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmFzeW5jICYmIHRoYXQudHJpZ2dlcihcImFzeW5jUmVjZWl2ZWRcIiwgcXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNhbmNlbDogJC5ub29wLFxuICAgICAgICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtcHR5KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJjbGVhcmVkXCIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzRW1wdHk6IGZ1bmN0aW9uIGlzRW1wdHkoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGVsLmlzKFwiOmVtcHR5XCIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWwgPSAkKFwiPGRpdj5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gRGF0YXNldDtcbiAgICAgICAgZnVuY3Rpb24gZ2V0RGlzcGxheUZuKGRpc3BsYXkpIHtcbiAgICAgICAgICAgIGRpc3BsYXkgPSBkaXNwbGF5IHx8IF8uc3RyaW5naWZ5O1xuICAgICAgICAgICAgcmV0dXJuIF8uaXNGdW5jdGlvbihkaXNwbGF5KSA/IGRpc3BsYXkgOiBkaXNwbGF5Rm47XG4gICAgICAgICAgICBmdW5jdGlvbiBkaXNwbGF5Rm4ob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ialtkaXNwbGF5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXRUZW1wbGF0ZXModGVtcGxhdGVzLCBkaXNwbGF5Rm4pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbm90Rm91bmQ6IHRlbXBsYXRlcy5ub3RGb3VuZCAmJiBfLnRlbXBsYXRpZnkodGVtcGxhdGVzLm5vdEZvdW5kKSxcbiAgICAgICAgICAgICAgICBwZW5kaW5nOiB0ZW1wbGF0ZXMucGVuZGluZyAmJiBfLnRlbXBsYXRpZnkodGVtcGxhdGVzLnBlbmRpbmcpLFxuICAgICAgICAgICAgICAgIGhlYWRlcjogdGVtcGxhdGVzLmhlYWRlciAmJiBfLnRlbXBsYXRpZnkodGVtcGxhdGVzLmhlYWRlciksXG4gICAgICAgICAgICAgICAgZm9vdGVyOiB0ZW1wbGF0ZXMuZm9vdGVyICYmIF8udGVtcGxhdGlmeSh0ZW1wbGF0ZXMuZm9vdGVyKSxcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uOiB0ZW1wbGF0ZXMuc3VnZ2VzdGlvbiB8fCBzdWdnZXN0aW9uVGVtcGxhdGVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmdW5jdGlvbiBzdWdnZXN0aW9uVGVtcGxhdGUoY29udGV4dCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkKFwiPGRpdj5cIikudGV4dChkaXNwbGF5Rm4oY29udGV4dCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzVmFsaWROYW1lKHN0cikge1xuICAgICAgICAgICAgcmV0dXJuIC9eW19hLXpBLVowLTktXSskLy50ZXN0KHN0cik7XG4gICAgICAgIH1cbiAgICB9KCk7XG4gICAgdmFyIE1lbnUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIGZ1bmN0aW9uIE1lbnUobywgd3d3KSB7XG4gICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICBvID0gbyB8fCB7fTtcbiAgICAgICAgICAgIGlmICghby5ub2RlKSB7XG4gICAgICAgICAgICAgICAgJC5lcnJvcihcIm5vZGUgaXMgcmVxdWlyZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3d3cubWl4aW4odGhpcyk7XG4gICAgICAgICAgICB0aGlzLiRub2RlID0gJChvLm5vZGUpO1xuICAgICAgICAgICAgdGhpcy5xdWVyeSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmRhdGFzZXRzID0gXy5tYXAoby5kYXRhc2V0cywgaW5pdGlhbGl6ZURhdGFzZXQpO1xuICAgICAgICAgICAgZnVuY3Rpb24gaW5pdGlhbGl6ZURhdGFzZXQob0RhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoYXQuJG5vZGUuZmluZChvRGF0YXNldC5ub2RlKS5maXJzdCgpO1xuICAgICAgICAgICAgICAgIG9EYXRhc2V0Lm5vZGUgPSBub2RlLmxlbmd0aCA/IG5vZGUgOiAkKFwiPGRpdj5cIikuYXBwZW5kVG8odGhhdC4kbm9kZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRhc2V0KG9EYXRhc2V0LCB3d3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF8ubWl4aW4oTWVudS5wcm90b3R5cGUsIEV2ZW50RW1pdHRlciwge1xuICAgICAgICAgICAgX29uU2VsZWN0YWJsZUNsaWNrOiBmdW5jdGlvbiBvblNlbGVjdGFibGVDbGljaygkZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcihcInNlbGVjdGFibGVDbGlja2VkXCIsICQoJGUuY3VycmVudFRhcmdldCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vblJlbmRlcmVkOiBmdW5jdGlvbiBvblJlbmRlcmVkKHR5cGUsIGRhdGFzZXQsIHN1Z2dlc3Rpb25zLCBhc3luYykge1xuICAgICAgICAgICAgICAgIHRoaXMuJG5vZGUudG9nZ2xlQ2xhc3ModGhpcy5jbGFzc2VzLmVtcHR5LCB0aGlzLl9hbGxEYXRhc2V0c0VtcHR5KCkpO1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcihcImRhdGFzZXRSZW5kZXJlZFwiLCBkYXRhc2V0LCBzdWdnZXN0aW9ucywgYXN5bmMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vbkNsZWFyZWQ6IGZ1bmN0aW9uIG9uQ2xlYXJlZCgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRub2RlLnRvZ2dsZUNsYXNzKHRoaXMuY2xhc3Nlcy5lbXB0eSwgdGhpcy5fYWxsRGF0YXNldHNFbXB0eSgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoXCJkYXRhc2V0Q2xlYXJlZFwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfcHJvcGFnYXRlOiBmdW5jdGlvbiBwcm9wYWdhdGUoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2FsbERhdGFzZXRzRW1wdHk6IGZ1bmN0aW9uIGFsbERhdGFzZXRzRW1wdHkoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF8uZXZlcnkodGhpcy5kYXRhc2V0cywgaXNEYXRhc2V0RW1wdHkpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzRGF0YXNldEVtcHR5KGRhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFzZXQuaXNFbXB0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfZ2V0U2VsZWN0YWJsZXM6IGZ1bmN0aW9uIGdldFNlbGVjdGFibGVzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRub2RlLmZpbmQodGhpcy5zZWxlY3RvcnMuc2VsZWN0YWJsZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX3JlbW92ZUN1cnNvcjogZnVuY3Rpb24gX3JlbW92ZUN1cnNvcigpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHNlbGVjdGFibGUgPSB0aGlzLmdldEFjdGl2ZVNlbGVjdGFibGUoKTtcbiAgICAgICAgICAgICAgICAkc2VsZWN0YWJsZSAmJiAkc2VsZWN0YWJsZS5yZW1vdmVDbGFzcyh0aGlzLmNsYXNzZXMuY3Vyc29yKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfZW5zdXJlVmlzaWJsZTogZnVuY3Rpb24gZW5zdXJlVmlzaWJsZSgkZWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgZWxUb3AsIGVsQm90dG9tLCBub2RlU2Nyb2xsVG9wLCBub2RlSGVpZ2h0O1xuICAgICAgICAgICAgICAgIGVsVG9wID0gJGVsLnBvc2l0aW9uKCkudG9wO1xuICAgICAgICAgICAgICAgIGVsQm90dG9tID0gZWxUb3AgKyAkZWwub3V0ZXJIZWlnaHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgbm9kZVNjcm9sbFRvcCA9IHRoaXMuJG5vZGUuc2Nyb2xsVG9wKCk7XG4gICAgICAgICAgICAgICAgbm9kZUhlaWdodCA9IHRoaXMuJG5vZGUuaGVpZ2h0KCkgKyBwYXJzZUludCh0aGlzLiRub2RlLmNzcyhcInBhZGRpbmdUb3BcIiksIDEwKSArIHBhcnNlSW50KHRoaXMuJG5vZGUuY3NzKFwicGFkZGluZ0JvdHRvbVwiKSwgMTApO1xuICAgICAgICAgICAgICAgIGlmIChlbFRvcCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbm9kZS5zY3JvbGxUb3Aobm9kZVNjcm9sbFRvcCArIGVsVG9wKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGVIZWlnaHQgPCBlbEJvdHRvbSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRub2RlLnNjcm9sbFRvcChub2RlU2Nyb2xsVG9wICsgKGVsQm90dG9tIC0gbm9kZUhlaWdodCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBiaW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsIG9uU2VsZWN0YWJsZUNsaWNrO1xuICAgICAgICAgICAgICAgIG9uU2VsZWN0YWJsZUNsaWNrID0gXy5iaW5kKHRoaXMuX29uU2VsZWN0YWJsZUNsaWNrLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB0aGlzLiRub2RlLm9uKFwiY2xpY2sudHRcIiwgdGhpcy5zZWxlY3RvcnMuc2VsZWN0YWJsZSwgb25TZWxlY3RhYmxlQ2xpY2spO1xuICAgICAgICAgICAgICAgIF8uZWFjaCh0aGlzLmRhdGFzZXRzLCBmdW5jdGlvbihkYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQub25TeW5jKFwiYXN5bmNSZXF1ZXN0ZWRcIiwgdGhhdC5fcHJvcGFnYXRlLCB0aGF0KS5vblN5bmMoXCJhc3luY0NhbmNlbGVkXCIsIHRoYXQuX3Byb3BhZ2F0ZSwgdGhhdCkub25TeW5jKFwiYXN5bmNSZWNlaXZlZFwiLCB0aGF0Ll9wcm9wYWdhdGUsIHRoYXQpLm9uU3luYyhcInJlbmRlcmVkXCIsIHRoYXQuX29uUmVuZGVyZWQsIHRoYXQpLm9uU3luYyhcImNsZWFyZWRcIiwgdGhhdC5fb25DbGVhcmVkLCB0aGF0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc09wZW46IGZ1bmN0aW9uIGlzT3BlbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kbm9kZS5oYXNDbGFzcyh0aGlzLmNsYXNzZXMub3Blbik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3BlbjogZnVuY3Rpb24gb3BlbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRub2RlLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5vcGVuKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbG9zZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kbm9kZS5yZW1vdmVDbGFzcyh0aGlzLmNsYXNzZXMub3Blbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQ3Vyc29yKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0TGFuZ3VhZ2VEaXJlY3Rpb246IGZ1bmN0aW9uIHNldExhbmd1YWdlRGlyZWN0aW9uKGRpcikge1xuICAgICAgICAgICAgICAgIHRoaXMuJG5vZGUuYXR0cihcImRpclwiLCBkaXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbGVjdGFibGVSZWxhdGl2ZVRvQ3Vyc29yOiBmdW5jdGlvbiBzZWxlY3RhYmxlUmVsYXRpdmVUb0N1cnNvcihkZWx0YSkge1xuICAgICAgICAgICAgICAgIHZhciAkc2VsZWN0YWJsZXMsICRvbGRDdXJzb3IsIG9sZEluZGV4LCBuZXdJbmRleDtcbiAgICAgICAgICAgICAgICAkb2xkQ3Vyc29yID0gdGhpcy5nZXRBY3RpdmVTZWxlY3RhYmxlKCk7XG4gICAgICAgICAgICAgICAgJHNlbGVjdGFibGVzID0gdGhpcy5fZ2V0U2VsZWN0YWJsZXMoKTtcbiAgICAgICAgICAgICAgICBvbGRJbmRleCA9ICRvbGRDdXJzb3IgPyAkc2VsZWN0YWJsZXMuaW5kZXgoJG9sZEN1cnNvcikgOiAtMTtcbiAgICAgICAgICAgICAgICBuZXdJbmRleCA9IG9sZEluZGV4ICsgZGVsdGE7XG4gICAgICAgICAgICAgICAgbmV3SW5kZXggPSAobmV3SW5kZXggKyAxKSAlICgkc2VsZWN0YWJsZXMubGVuZ3RoICsgMSkgLSAxO1xuICAgICAgICAgICAgICAgIG5ld0luZGV4ID0gbmV3SW5kZXggPCAtMSA/ICRzZWxlY3RhYmxlcy5sZW5ndGggLSAxIDogbmV3SW5kZXg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0luZGV4ID09PSAtMSA/IG51bGwgOiAkc2VsZWN0YWJsZXMuZXEobmV3SW5kZXgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldEN1cnNvcjogZnVuY3Rpb24gc2V0Q3Vyc29yKCRzZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQ3Vyc29yKCk7XG4gICAgICAgICAgICAgICAgaWYgKCRzZWxlY3RhYmxlID0gJHNlbGVjdGFibGUgJiYgJHNlbGVjdGFibGUuZmlyc3QoKSkge1xuICAgICAgICAgICAgICAgICAgICAkc2VsZWN0YWJsZS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuY3Vyc29yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW5zdXJlVmlzaWJsZSgkc2VsZWN0YWJsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldFNlbGVjdGFibGVEYXRhOiBmdW5jdGlvbiBnZXRTZWxlY3RhYmxlRGF0YSgkZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJGVsICYmICRlbC5sZW5ndGggPyBEYXRhc2V0LmV4dHJhY3REYXRhKCRlbCkgOiBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldEFjdGl2ZVNlbGVjdGFibGU6IGZ1bmN0aW9uIGdldEFjdGl2ZVNlbGVjdGFibGUoKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxlY3RhYmxlID0gdGhpcy5fZ2V0U2VsZWN0YWJsZXMoKS5maWx0ZXIodGhpcy5zZWxlY3RvcnMuY3Vyc29yKS5maXJzdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiAkc2VsZWN0YWJsZS5sZW5ndGggPyAkc2VsZWN0YWJsZSA6IG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0VG9wU2VsZWN0YWJsZTogZnVuY3Rpb24gZ2V0VG9wU2VsZWN0YWJsZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHNlbGVjdGFibGUgPSB0aGlzLl9nZXRTZWxlY3RhYmxlcygpLmZpcnN0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICRzZWxlY3RhYmxlLmxlbmd0aCA/ICRzZWxlY3RhYmxlIDogbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShxdWVyeSkge1xuICAgICAgICAgICAgICAgIHZhciBpc1ZhbGlkVXBkYXRlID0gcXVlcnkgIT09IHRoaXMucXVlcnk7XG4gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRVcGRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVyeSA9IHF1ZXJ5O1xuICAgICAgICAgICAgICAgICAgICBfLmVhY2godGhpcy5kYXRhc2V0cywgdXBkYXRlRGF0YXNldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkVXBkYXRlO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXQoZGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnVwZGF0ZShxdWVyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVtcHR5OiBmdW5jdGlvbiBlbXB0eSgpIHtcbiAgICAgICAgICAgICAgICBfLmVhY2godGhpcy5kYXRhc2V0cywgY2xlYXJEYXRhc2V0KTtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLiRub2RlLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5lbXB0eSk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY2xlYXJEYXRhc2V0KGRhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldC5jbGVhcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJG5vZGUub2ZmKFwiLnR0XCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuJG5vZGUgPSAkKFwiPGRpdj5cIik7XG4gICAgICAgICAgICAgICAgXy5lYWNoKHRoaXMuZGF0YXNldHMsIGRlc3Ryb3lEYXRhc2V0KTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZXN0cm95RGF0YXNldChkYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBNZW51O1xuICAgIH0oKTtcbiAgICB2YXIgRGVmYXVsdE1lbnUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBzID0gTWVudS5wcm90b3R5cGU7XG4gICAgICAgIGZ1bmN0aW9uIERlZmF1bHRNZW51KCkge1xuICAgICAgICAgICAgTWVudS5hcHBseSh0aGlzLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCkpO1xuICAgICAgICB9XG4gICAgICAgIF8ubWl4aW4oRGVmYXVsdE1lbnUucHJvdG90eXBlLCBNZW51LnByb3RvdHlwZSwge1xuICAgICAgICAgICAgb3BlbjogZnVuY3Rpb24gb3BlbigpIHtcbiAgICAgICAgICAgICAgICAhdGhpcy5fYWxsRGF0YXNldHNFbXB0eSgpICYmIHRoaXMuX3Nob3coKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcy5vcGVuLmFwcGx5KHRoaXMsIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hpZGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcy5jbG9zZS5hcHBseSh0aGlzLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vblJlbmRlcmVkOiBmdW5jdGlvbiBvblJlbmRlcmVkKCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hbGxEYXRhc2V0c0VtcHR5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGlkZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuKCkgJiYgdGhpcy5fc2hvdygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcy5fb25SZW5kZXJlZC5hcHBseSh0aGlzLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vbkNsZWFyZWQ6IGZ1bmN0aW9uIG9uQ2xlYXJlZCgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fYWxsRGF0YXNldHNFbXB0eSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hpZGUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbigpICYmIHRoaXMuX3Nob3coKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHMuX29uQ2xlYXJlZC5hcHBseSh0aGlzLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldExhbmd1YWdlRGlyZWN0aW9uOiBmdW5jdGlvbiBzZXRMYW5ndWFnZURpcmVjdGlvbihkaXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRub2RlLmNzcyhkaXIgPT09IFwibHRyXCIgPyB0aGlzLmNzcy5sdHIgOiB0aGlzLmNzcy5ydGwpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzLnNldExhbmd1YWdlRGlyZWN0aW9uLmFwcGx5KHRoaXMsIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX2hpZGU6IGZ1bmN0aW9uIGhpZGUoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kbm9kZS5oaWRlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX3Nob3c6IGZ1bmN0aW9uIHNob3coKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kbm9kZS5jc3MoXCJkaXNwbGF5XCIsIFwiYmxvY2tcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gRGVmYXVsdE1lbnU7XG4gICAgfSgpO1xuICAgIHZhciBUeXBlYWhlYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIGZ1bmN0aW9uIFR5cGVhaGVhZChvLCB3d3cpIHtcbiAgICAgICAgICAgIHZhciBvbkZvY3VzZWQsIG9uQmx1cnJlZCwgb25FbnRlcktleWVkLCBvblRhYktleWVkLCBvbkVzY0tleWVkLCBvblVwS2V5ZWQsIG9uRG93bktleWVkLCBvbkxlZnRLZXllZCwgb25SaWdodEtleWVkLCBvblF1ZXJ5Q2hhbmdlZCwgb25XaGl0ZXNwYWNlQ2hhbmdlZDtcbiAgICAgICAgICAgIG8gPSBvIHx8IHt9O1xuICAgICAgICAgICAgaWYgKCFvLmlucHV0KSB7XG4gICAgICAgICAgICAgICAgJC5lcnJvcihcIm1pc3NpbmcgaW5wdXRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW8ubWVudSkge1xuICAgICAgICAgICAgICAgICQuZXJyb3IoXCJtaXNzaW5nIG1lbnVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW8uZXZlbnRCdXMpIHtcbiAgICAgICAgICAgICAgICAkLmVycm9yKFwibWlzc2luZyBldmVudCBidXNcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3d3cubWl4aW4odGhpcyk7XG4gICAgICAgICAgICB0aGlzLmV2ZW50QnVzID0gby5ldmVudEJ1cztcbiAgICAgICAgICAgIHRoaXMubWluTGVuZ3RoID0gXy5pc051bWJlcihvLm1pbkxlbmd0aCkgPyBvLm1pbkxlbmd0aCA6IDE7XG4gICAgICAgICAgICB0aGlzLmlucHV0ID0gby5pbnB1dDtcbiAgICAgICAgICAgIHRoaXMubWVudSA9IG8ubWVudTtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pbnB1dC5oYXNGb2N1cygpICYmIHRoaXMuYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuZGlyID0gdGhpcy5pbnB1dC5nZXRMYW5nRGlyKCk7XG4gICAgICAgICAgICB0aGlzLl9oYWNrcygpO1xuICAgICAgICAgICAgdGhpcy5tZW51LmJpbmQoKS5vblN5bmMoXCJzZWxlY3RhYmxlQ2xpY2tlZFwiLCB0aGlzLl9vblNlbGVjdGFibGVDbGlja2VkLCB0aGlzKS5vblN5bmMoXCJhc3luY1JlcXVlc3RlZFwiLCB0aGlzLl9vbkFzeW5jUmVxdWVzdGVkLCB0aGlzKS5vblN5bmMoXCJhc3luY0NhbmNlbGVkXCIsIHRoaXMuX29uQXN5bmNDYW5jZWxlZCwgdGhpcykub25TeW5jKFwiYXN5bmNSZWNlaXZlZFwiLCB0aGlzLl9vbkFzeW5jUmVjZWl2ZWQsIHRoaXMpLm9uU3luYyhcImRhdGFzZXRSZW5kZXJlZFwiLCB0aGlzLl9vbkRhdGFzZXRSZW5kZXJlZCwgdGhpcykub25TeW5jKFwiZGF0YXNldENsZWFyZWRcIiwgdGhpcy5fb25EYXRhc2V0Q2xlYXJlZCwgdGhpcyk7XG4gICAgICAgICAgICBvbkZvY3VzZWQgPSBjKHRoaXMsIFwiYWN0aXZhdGVcIiwgXCJvcGVuXCIsIFwiX29uRm9jdXNlZFwiKTtcbiAgICAgICAgICAgIG9uQmx1cnJlZCA9IGModGhpcywgXCJkZWFjdGl2YXRlXCIsIFwiX29uQmx1cnJlZFwiKTtcbiAgICAgICAgICAgIG9uRW50ZXJLZXllZCA9IGModGhpcywgXCJpc0FjdGl2ZVwiLCBcImlzT3BlblwiLCBcIl9vbkVudGVyS2V5ZWRcIik7XG4gICAgICAgICAgICBvblRhYktleWVkID0gYyh0aGlzLCBcImlzQWN0aXZlXCIsIFwiaXNPcGVuXCIsIFwiX29uVGFiS2V5ZWRcIik7XG4gICAgICAgICAgICBvbkVzY0tleWVkID0gYyh0aGlzLCBcImlzQWN0aXZlXCIsIFwiX29uRXNjS2V5ZWRcIik7XG4gICAgICAgICAgICBvblVwS2V5ZWQgPSBjKHRoaXMsIFwiaXNBY3RpdmVcIiwgXCJvcGVuXCIsIFwiX29uVXBLZXllZFwiKTtcbiAgICAgICAgICAgIG9uRG93bktleWVkID0gYyh0aGlzLCBcImlzQWN0aXZlXCIsIFwib3BlblwiLCBcIl9vbkRvd25LZXllZFwiKTtcbiAgICAgICAgICAgIG9uTGVmdEtleWVkID0gYyh0aGlzLCBcImlzQWN0aXZlXCIsIFwiaXNPcGVuXCIsIFwiX29uTGVmdEtleWVkXCIpO1xuICAgICAgICAgICAgb25SaWdodEtleWVkID0gYyh0aGlzLCBcImlzQWN0aXZlXCIsIFwiaXNPcGVuXCIsIFwiX29uUmlnaHRLZXllZFwiKTtcbiAgICAgICAgICAgIG9uUXVlcnlDaGFuZ2VkID0gYyh0aGlzLCBcIl9vcGVuSWZBY3RpdmVcIiwgXCJfb25RdWVyeUNoYW5nZWRcIik7XG4gICAgICAgICAgICBvbldoaXRlc3BhY2VDaGFuZ2VkID0gYyh0aGlzLCBcIl9vcGVuSWZBY3RpdmVcIiwgXCJfb25XaGl0ZXNwYWNlQ2hhbmdlZFwiKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuYmluZCgpLm9uU3luYyhcImZvY3VzZWRcIiwgb25Gb2N1c2VkLCB0aGlzKS5vblN5bmMoXCJibHVycmVkXCIsIG9uQmx1cnJlZCwgdGhpcykub25TeW5jKFwiZW50ZXJLZXllZFwiLCBvbkVudGVyS2V5ZWQsIHRoaXMpLm9uU3luYyhcInRhYktleWVkXCIsIG9uVGFiS2V5ZWQsIHRoaXMpLm9uU3luYyhcImVzY0tleWVkXCIsIG9uRXNjS2V5ZWQsIHRoaXMpLm9uU3luYyhcInVwS2V5ZWRcIiwgb25VcEtleWVkLCB0aGlzKS5vblN5bmMoXCJkb3duS2V5ZWRcIiwgb25Eb3duS2V5ZWQsIHRoaXMpLm9uU3luYyhcImxlZnRLZXllZFwiLCBvbkxlZnRLZXllZCwgdGhpcykub25TeW5jKFwicmlnaHRLZXllZFwiLCBvblJpZ2h0S2V5ZWQsIHRoaXMpLm9uU3luYyhcInF1ZXJ5Q2hhbmdlZFwiLCBvblF1ZXJ5Q2hhbmdlZCwgdGhpcykub25TeW5jKFwid2hpdGVzcGFjZUNoYW5nZWRcIiwgb25XaGl0ZXNwYWNlQ2hhbmdlZCwgdGhpcykub25TeW5jKFwibGFuZ0RpckNoYW5nZWRcIiwgdGhpcy5fb25MYW5nRGlyQ2hhbmdlZCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgXy5taXhpbihUeXBlYWhlYWQucHJvdG90eXBlLCB7XG4gICAgICAgICAgICBfaGFja3M6IGZ1bmN0aW9uIGhhY2tzKCkge1xuICAgICAgICAgICAgICAgIHZhciAkaW5wdXQsICRtZW51O1xuICAgICAgICAgICAgICAgICRpbnB1dCA9IHRoaXMuaW5wdXQuJGlucHV0IHx8ICQoXCI8ZGl2PlwiKTtcbiAgICAgICAgICAgICAgICAkbWVudSA9IHRoaXMubWVudS4kbm9kZSB8fCAkKFwiPGRpdj5cIik7XG4gICAgICAgICAgICAgICAgJGlucHV0Lm9uKFwiYmx1ci50dFwiLCBmdW5jdGlvbigkZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aXZlLCBpc0FjdGl2ZSwgaGFzQWN0aXZlO1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmUgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZSA9ICRtZW51LmlzKGFjdGl2ZSk7XG4gICAgICAgICAgICAgICAgICAgIGhhc0FjdGl2ZSA9ICRtZW51LmhhcyhhY3RpdmUpLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfLmlzTXNpZSgpICYmIChpc0FjdGl2ZSB8fCBoYXNBY3RpdmUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBfLmRlZmVyKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAkbWVudS5vbihcIm1vdXNlZG93bi50dFwiLCBmdW5jdGlvbigkZSkge1xuICAgICAgICAgICAgICAgICAgICAkZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vblNlbGVjdGFibGVDbGlja2VkOiBmdW5jdGlvbiBvblNlbGVjdGFibGVDbGlja2VkKHR5cGUsICRlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCRlbCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX29uRGF0YXNldENsZWFyZWQ6IGZ1bmN0aW9uIG9uRGF0YXNldENsZWFyZWQoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlSGludCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vbkRhdGFzZXRSZW5kZXJlZDogZnVuY3Rpb24gb25EYXRhc2V0UmVuZGVyZWQodHlwZSwgZGF0YXNldCwgc3VnZ2VzdGlvbnMsIGFzeW5jKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlSGludCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMudHJpZ2dlcihcInJlbmRlclwiLCBzdWdnZXN0aW9ucywgYXN5bmMsIGRhdGFzZXQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vbkFzeW5jUmVxdWVzdGVkOiBmdW5jdGlvbiBvbkFzeW5jUmVxdWVzdGVkKHR5cGUsIGRhdGFzZXQsIHF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy50cmlnZ2VyKFwiYXN5bmNyZXF1ZXN0XCIsIHF1ZXJ5LCBkYXRhc2V0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25Bc3luY0NhbmNlbGVkOiBmdW5jdGlvbiBvbkFzeW5jQ2FuY2VsZWQodHlwZSwgZGF0YXNldCwgcXVlcnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QnVzLnRyaWdnZXIoXCJhc3luY2NhbmNlbFwiLCBxdWVyeSwgZGF0YXNldCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX29uQXN5bmNSZWNlaXZlZDogZnVuY3Rpb24gb25Bc3luY1JlY2VpdmVkKHR5cGUsIGRhdGFzZXQsIHF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy50cmlnZ2VyKFwiYXN5bmNyZWNlaXZlXCIsIHF1ZXJ5LCBkYXRhc2V0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25Gb2N1c2VkOiBmdW5jdGlvbiBvbkZvY3VzZWQoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluTGVuZ3RoTWV0KCkgJiYgdGhpcy5tZW51LnVwZGF0ZSh0aGlzLmlucHV0LmdldFF1ZXJ5KCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vbkJsdXJyZWQ6IGZ1bmN0aW9uIG9uQmx1cnJlZCgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dC5oYXNRdWVyeUNoYW5nZWRTaW5jZUxhc3RGb2N1cygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMudHJpZ2dlcihcImNoYW5nZVwiLCB0aGlzLmlucHV0LmdldFF1ZXJ5KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25FbnRlcktleWVkOiBmdW5jdGlvbiBvbkVudGVyS2V5ZWQodHlwZSwgJGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHNlbGVjdGFibGU7XG4gICAgICAgICAgICAgICAgaWYgKCRzZWxlY3RhYmxlID0gdGhpcy5tZW51LmdldEFjdGl2ZVNlbGVjdGFibGUoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCgkc2VsZWN0YWJsZSkgJiYgJGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX29uVGFiS2V5ZWQ6IGZ1bmN0aW9uIG9uVGFiS2V5ZWQodHlwZSwgJGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHNlbGVjdGFibGU7XG4gICAgICAgICAgICAgICAgaWYgKCRzZWxlY3RhYmxlID0gdGhpcy5tZW51LmdldEFjdGl2ZVNlbGVjdGFibGUoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCgkc2VsZWN0YWJsZSkgJiYgJGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRzZWxlY3RhYmxlID0gdGhpcy5tZW51LmdldFRvcFNlbGVjdGFibGUoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZSgkc2VsZWN0YWJsZSkgJiYgJGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX29uRXNjS2V5ZWQ6IGZ1bmN0aW9uIG9uRXNjS2V5ZWQoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vblVwS2V5ZWQ6IGZ1bmN0aW9uIG9uVXBLZXllZCgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3IoLTEpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vbkRvd25LZXllZDogZnVuY3Rpb24gb25Eb3duS2V5ZWQoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yKCsxKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25MZWZ0S2V5ZWQ6IGZ1bmN0aW9uIG9uTGVmdEtleWVkKCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpciA9PT0gXCJydGxcIiAmJiB0aGlzLmlucHV0LmlzQ3Vyc29yQXRFbmQoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZSh0aGlzLm1lbnUuZ2V0VG9wU2VsZWN0YWJsZSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX29uUmlnaHRLZXllZDogZnVuY3Rpb24gb25SaWdodEtleWVkKCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRpciA9PT0gXCJsdHJcIiAmJiB0aGlzLmlucHV0LmlzQ3Vyc29yQXRFbmQoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZSh0aGlzLm1lbnUuZ2V0VG9wU2VsZWN0YWJsZSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX29uUXVlcnlDaGFuZ2VkOiBmdW5jdGlvbiBvblF1ZXJ5Q2hhbmdlZChlLCBxdWVyeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbkxlbmd0aE1ldChxdWVyeSkgPyB0aGlzLm1lbnUudXBkYXRlKHF1ZXJ5KSA6IHRoaXMubWVudS5lbXB0eSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vbldoaXRlc3BhY2VDaGFuZ2VkOiBmdW5jdGlvbiBvbldoaXRlc3BhY2VDaGFuZ2VkKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUhpbnQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfb25MYW5nRGlyQ2hhbmdlZDogZnVuY3Rpb24gb25MYW5nRGlyQ2hhbmdlZChlLCBkaXIpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXIgIT09IGRpcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpciA9IGRpcjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZW51LnNldExhbmd1YWdlRGlyZWN0aW9uKGRpcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9vcGVuSWZBY3RpdmU6IGZ1bmN0aW9uIG9wZW5JZkFjdGl2ZSgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQWN0aXZlKCkgJiYgdGhpcy5vcGVuKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX21pbkxlbmd0aE1ldDogZnVuY3Rpb24gbWluTGVuZ3RoTWV0KHF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgcXVlcnkgPSBfLmlzU3RyaW5nKHF1ZXJ5KSA/IHF1ZXJ5IDogdGhpcy5pbnB1dC5nZXRRdWVyeSgpIHx8IFwiXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5Lmxlbmd0aCA+PSB0aGlzLm1pbkxlbmd0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfdXBkYXRlSGludDogZnVuY3Rpb24gdXBkYXRlSGludCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHNlbGVjdGFibGUsIGRhdGEsIHZhbCwgcXVlcnksIGVzY2FwZWRRdWVyeSwgZnJvbnRNYXRjaFJlZ0V4LCBtYXRjaDtcbiAgICAgICAgICAgICAgICAkc2VsZWN0YWJsZSA9IHRoaXMubWVudS5nZXRUb3BTZWxlY3RhYmxlKCk7XG4gICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMubWVudS5nZXRTZWxlY3RhYmxlRGF0YSgkc2VsZWN0YWJsZSk7XG4gICAgICAgICAgICAgICAgdmFsID0gdGhpcy5pbnB1dC5nZXRJbnB1dFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEgJiYgIV8uaXNCbGFua1N0cmluZyh2YWwpICYmICF0aGlzLmlucHV0Lmhhc092ZXJmbG93KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnkgPSBJbnB1dC5ub3JtYWxpemVRdWVyeSh2YWwpO1xuICAgICAgICAgICAgICAgICAgICBlc2NhcGVkUXVlcnkgPSBfLmVzY2FwZVJlZ0V4Q2hhcnMocXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICBmcm9udE1hdGNoUmVnRXggPSBuZXcgUmVnRXhwKFwiXig/OlwiICsgZXNjYXBlZFF1ZXJ5ICsgXCIpKC4rJClcIiwgXCJpXCIpO1xuICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGZyb250TWF0Y2hSZWdFeC5leGVjKGRhdGEudmFsKTtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2ggJiYgdGhpcy5pbnB1dC5zZXRIaW50KHZhbCArIG1hdGNoWzFdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0LmNsZWFySGludCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0VuYWJsZWQ6IGZ1bmN0aW9uIGlzRW5hYmxlZCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmFibGVkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuYWJsZTogZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGlzYWJsZTogZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpc0FjdGl2ZTogZnVuY3Rpb24gaXNBY3RpdmUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjdGl2YXRlOiBmdW5jdGlvbiBhY3RpdmF0ZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNFbmFibGVkKCkgfHwgdGhpcy5ldmVudEJ1cy5iZWZvcmUoXCJhY3RpdmVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy50cmlnZ2VyKFwiYWN0aXZlXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVhY3RpdmF0ZTogZnVuY3Rpb24gZGVhY3RpdmF0ZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXZlbnRCdXMuYmVmb3JlKFwiaWRsZVwiKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QnVzLnRyaWdnZXIoXCJpZGxlXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNPcGVuOiBmdW5jdGlvbiBpc09wZW4oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVudS5pc09wZW4oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcGVuOiBmdW5jdGlvbiBvcGVuKCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc09wZW4oKSAmJiAhdGhpcy5ldmVudEJ1cy5iZWZvcmUoXCJvcGVuXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVudS5vcGVuKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUhpbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy50cmlnZ2VyKFwib3BlblwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNPcGVuKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzT3BlbigpICYmICF0aGlzLmV2ZW50QnVzLmJlZm9yZShcImNsb3NlXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVudS5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0LmNsZWFySGludCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnJlc2V0SW5wdXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QnVzLnRyaWdnZXIoXCJjbG9zZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzT3BlbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldFZhbDogZnVuY3Rpb24gc2V0VmFsKHZhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQuc2V0UXVlcnkoXy50b1N0cih2YWwpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRWYWw6IGZ1bmN0aW9uIGdldFZhbCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC5nZXRRdWVyeSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbGVjdDogZnVuY3Rpb24gc2VsZWN0KCRzZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLm1lbnUuZ2V0U2VsZWN0YWJsZURhdGEoJHNlbGVjdGFibGUpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhICYmICF0aGlzLmV2ZW50QnVzLmJlZm9yZShcInNlbGVjdFwiLCBkYXRhLm9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5zZXRRdWVyeShkYXRhLnZhbCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMudHJpZ2dlcihcInNlbGVjdFwiLCBkYXRhLm9iaik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhdXRvY29tcGxldGU6IGZ1bmN0aW9uIGF1dG9jb21wbGV0ZSgkc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgICAgIHZhciBxdWVyeSwgZGF0YSwgaXNWYWxpZDtcbiAgICAgICAgICAgICAgICBxdWVyeSA9IHRoaXMuaW5wdXQuZ2V0UXVlcnkoKTtcbiAgICAgICAgICAgICAgICBkYXRhID0gdGhpcy5tZW51LmdldFNlbGVjdGFibGVEYXRhKCRzZWxlY3RhYmxlKTtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZGF0YSAmJiBxdWVyeSAhPT0gZGF0YS52YWw7XG4gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQgJiYgIXRoaXMuZXZlbnRCdXMuYmVmb3JlKFwiYXV0b2NvbXBsZXRlXCIsIGRhdGEub2JqKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnNldFF1ZXJ5KGRhdGEudmFsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy50cmlnZ2VyKFwiYXV0b2NvbXBsZXRlXCIsIGRhdGEub2JqKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtb3ZlQ3Vyc29yOiBmdW5jdGlvbiBtb3ZlQ3Vyc29yKGRlbHRhKSB7XG4gICAgICAgICAgICAgICAgdmFyIHF1ZXJ5LCAkY2FuZGlkYXRlLCBkYXRhLCBwYXlsb2FkLCBjYW5jZWxNb3ZlO1xuICAgICAgICAgICAgICAgIHF1ZXJ5ID0gdGhpcy5pbnB1dC5nZXRRdWVyeSgpO1xuICAgICAgICAgICAgICAgICRjYW5kaWRhdGUgPSB0aGlzLm1lbnUuc2VsZWN0YWJsZVJlbGF0aXZlVG9DdXJzb3IoZGVsdGEpO1xuICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLm1lbnUuZ2V0U2VsZWN0YWJsZURhdGEoJGNhbmRpZGF0ZSk7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IGRhdGEgPyBkYXRhLm9iaiA6IG51bGw7XG4gICAgICAgICAgICAgICAgY2FuY2VsTW92ZSA9IHRoaXMuX21pbkxlbmd0aE1ldCgpICYmIHRoaXMubWVudS51cGRhdGUocXVlcnkpO1xuICAgICAgICAgICAgICAgIGlmICghY2FuY2VsTW92ZSAmJiAhdGhpcy5ldmVudEJ1cy5iZWZvcmUoXCJjdXJzb3JjaGFuZ2VcIiwgcGF5bG9hZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZW51LnNldEN1cnNvcigkY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQuc2V0SW5wdXRWYWx1ZShkYXRhLnZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnJlc2V0SW5wdXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlSGludCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRCdXMudHJpZ2dlcihcImN1cnNvcmNoYW5nZVwiLCBwYXlsb2FkKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIHRoaXMubWVudS5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gVHlwZWFoZWFkO1xuICAgICAgICBmdW5jdGlvbiBjKGN0eCkge1xuICAgICAgICAgICAgdmFyIG1ldGhvZHMgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgXy5lYWNoKG1ldGhvZHMsIGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3R4W21ldGhvZF0uYXBwbHkoY3R4LCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KCk7XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIG9sZCwga2V5cywgbWV0aG9kcztcbiAgICAgICAgb2xkID0gJC5mbi50eXBlYWhlYWQ7XG4gICAgICAgIGtleXMgPSB7XG4gICAgICAgICAgICB3d3c6IFwidHQtd3d3XCIsXG4gICAgICAgICAgICBhdHRyczogXCJ0dC1hdHRyc1wiLFxuICAgICAgICAgICAgdHlwZWFoZWFkOiBcInR0LXR5cGVhaGVhZFwiXG4gICAgICAgIH07XG4gICAgICAgIG1ldGhvZHMgPSB7XG4gICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbiBpbml0aWFsaXplKG8sIGRhdGFzZXRzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHd3dztcbiAgICAgICAgICAgICAgICBkYXRhc2V0cyA9IF8uaXNBcnJheShkYXRhc2V0cykgPyBkYXRhc2V0cyA6IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgICAgICBvID0gbyB8fCB7fTtcbiAgICAgICAgICAgICAgICB3d3cgPSBXV1coby5jbGFzc05hbWVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGF0dGFjaCk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXR0YWNoKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJGlucHV0LCAkd3JhcHBlciwgJGhpbnQsICRtZW51LCBkZWZhdWx0SGludCwgZGVmYXVsdE1lbnUsIGV2ZW50QnVzLCBpbnB1dCwgbWVudSwgdHlwZWFoZWFkLCBNZW51Q29uc3RydWN0b3I7XG4gICAgICAgICAgICAgICAgICAgIF8uZWFjaChkYXRhc2V0cywgZnVuY3Rpb24oZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZC5oaWdobGlnaHQgPSAhIW8uaGlnaGxpZ2h0O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgJGlucHV0ID0gJCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgJHdyYXBwZXIgPSAkKHd3dy5odG1sLndyYXBwZXIpO1xuICAgICAgICAgICAgICAgICAgICAkaGludCA9ICRlbE9yTnVsbChvLmhpbnQpO1xuICAgICAgICAgICAgICAgICAgICAkbWVudSA9ICRlbE9yTnVsbChvLm1lbnUpO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0SGludCA9IG8uaGludCAhPT0gZmFsc2UgJiYgISRoaW50O1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVudSA9IG8ubWVudSAhPT0gZmFsc2UgJiYgISRtZW51O1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0SGludCAmJiAoJGhpbnQgPSBidWlsZEhpbnRGcm9tSW5wdXQoJGlucHV0LCB3d3cpKTtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lbnUgJiYgKCRtZW51ID0gJCh3d3cuaHRtbC5tZW51KS5jc3Mod3d3LmNzcy5tZW51KSk7XG4gICAgICAgICAgICAgICAgICAgICRoaW50ICYmICRoaW50LnZhbChcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgJGlucHV0ID0gcHJlcElucHV0KCRpbnB1dCwgd3d3KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRIaW50IHx8IGRlZmF1bHRNZW51KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkd3JhcHBlci5jc3Mod3d3LmNzcy53cmFwcGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dC5jc3MoZGVmYXVsdEhpbnQgPyB3d3cuY3NzLmlucHV0IDogd3d3LmNzcy5pbnB1dFdpdGhOb0hpbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0LndyYXAoJHdyYXBwZXIpLnBhcmVudCgpLnByZXBlbmQoZGVmYXVsdEhpbnQgPyAkaGludCA6IG51bGwpLmFwcGVuZChkZWZhdWx0TWVudSA/ICRtZW51IDogbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgTWVudUNvbnN0cnVjdG9yID0gZGVmYXVsdE1lbnUgPyBEZWZhdWx0TWVudSA6IE1lbnU7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50QnVzID0gbmV3IEV2ZW50QnVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsOiAkaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0ID0gbmV3IElucHV0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpbnQ6ICRoaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6ICRpbnB1dFxuICAgICAgICAgICAgICAgICAgICB9LCB3d3cpO1xuICAgICAgICAgICAgICAgICAgICBtZW51ID0gbmV3IE1lbnVDb25zdHJ1Y3Rvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlOiAkbWVudSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXRzOiBkYXRhc2V0c1xuICAgICAgICAgICAgICAgICAgICB9LCB3d3cpO1xuICAgICAgICAgICAgICAgICAgICB0eXBlYWhlYWQgPSBuZXcgVHlwZWFoZWFkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBpbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lbnU6IG1lbnUsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudEJ1czogZXZlbnRCdXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5MZW5ndGg6IG8ubWluTGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgIH0sIHd3dyk7XG4gICAgICAgICAgICAgICAgICAgICRpbnB1dC5kYXRhKGtleXMud3d3LCB3d3cpO1xuICAgICAgICAgICAgICAgICAgICAkaW5wdXQuZGF0YShrZXlzLnR5cGVhaGVhZCwgdHlwZWFoZWFkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNFbmFibGVkOiBmdW5jdGlvbiBpc0VuYWJsZWQoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVuYWJsZWQ7XG4gICAgICAgICAgICAgICAgdHRFYWNoKHRoaXMuZmlyc3QoKSwgZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICBlbmFibGVkID0gdC5pc0VuYWJsZWQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5hYmxlZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmFibGU6IGZ1bmN0aW9uIGVuYWJsZSgpIHtcbiAgICAgICAgICAgICAgICB0dEVhY2godGhpcywgZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICB0LmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRpc2FibGU6IGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgICAgICAgICAgICAgdHRFYWNoKHRoaXMsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdC5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNBY3RpdmU6IGZ1bmN0aW9uIGlzQWN0aXZlKCkge1xuICAgICAgICAgICAgICAgIHZhciBhY3RpdmU7XG4gICAgICAgICAgICAgICAgdHRFYWNoKHRoaXMuZmlyc3QoKSwgZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmUgPSB0LmlzQWN0aXZlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdGl2ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY3RpdmF0ZTogZnVuY3Rpb24gYWN0aXZhdGUoKSB7XG4gICAgICAgICAgICAgICAgdHRFYWNoKHRoaXMsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdC5hY3RpdmF0ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlYWN0aXZhdGU6IGZ1bmN0aW9uIGRlYWN0aXZhdGUoKSB7XG4gICAgICAgICAgICAgICAgdHRFYWNoKHRoaXMsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdC5kZWFjdGl2YXRlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNPcGVuOiBmdW5jdGlvbiBpc09wZW4oKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9wZW47XG4gICAgICAgICAgICAgICAgdHRFYWNoKHRoaXMuZmlyc3QoKSwgZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICBvcGVuID0gdC5pc09wZW4oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3BlbjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcGVuOiBmdW5jdGlvbiBvcGVuKCkge1xuICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLCBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgICAgIHQub3BlbigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgICAgICAgICAgICB0dEVhY2godGhpcywgZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICB0LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0OiBmdW5jdGlvbiBzZWxlY3QoZWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3VjY2VzcyA9IGZhbHNlLCAkZWwgPSAkKGVsKTtcbiAgICAgICAgICAgICAgICB0dEVhY2godGhpcy5maXJzdCgpLCBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0LnNlbGVjdCgkZWwpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZTogZnVuY3Rpb24gYXV0b2NvbXBsZXRlKGVsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN1Y2Nlc3MgPSBmYWxzZSwgJGVsID0gJChlbCk7XG4gICAgICAgICAgICAgICAgdHRFYWNoKHRoaXMuZmlyc3QoKSwgZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdC5hdXRvY29tcGxldGUoJGVsKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtb3ZlQ3Vyc29yOiBmdW5jdGlvbiBtb3ZlQ3Vyc29lKGRlbHRhKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0dEVhY2godGhpcy5maXJzdCgpLCBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0Lm1vdmVDdXJzb3IoZGVsdGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbDogZnVuY3Rpb24gdmFsKG5ld1ZhbCkge1xuICAgICAgICAgICAgICAgIHZhciBxdWVyeTtcbiAgICAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdHRFYWNoKHRoaXMuZmlyc3QoKSwgZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkgPSB0LmdldFZhbCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHR0RWFjaCh0aGlzLCBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0LnNldFZhbChuZXdWYWwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICAgICAgdHRFYWNoKHRoaXMsIGZ1bmN0aW9uKHR5cGVhaGVhZCwgJGlucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldmVydCgkaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICB0eXBlYWhlYWQuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAkLmZuLnR5cGVhaGVhZCA9IGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgICAgICAgaWYgKG1ldGhvZHNbbWV0aG9kXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2RzW21ldGhvZF0uYXBwbHkodGhpcywgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZHMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAkLmZuLnR5cGVhaGVhZC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gbm9Db25mbGljdCgpIHtcbiAgICAgICAgICAgICQuZm4udHlwZWFoZWFkID0gb2xkO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH07XG4gICAgICAgIGZ1bmN0aW9uIHR0RWFjaCgkZWxzLCBmbikge1xuICAgICAgICAgICAgJGVscy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciAkaW5wdXQgPSAkKHRoaXMpLCB0eXBlYWhlYWQ7XG4gICAgICAgICAgICAgICAgKHR5cGVhaGVhZCA9ICRpbnB1dC5kYXRhKGtleXMudHlwZWFoZWFkKSkgJiYgZm4odHlwZWFoZWFkLCAkaW5wdXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYnVpbGRIaW50RnJvbUlucHV0KCRpbnB1dCwgd3d3KSB7XG4gICAgICAgICAgICByZXR1cm4gJGlucHV0LmNsb25lKCkuYWRkQ2xhc3Mod3d3LmNsYXNzZXMuaGludCkucmVtb3ZlRGF0YSgpLmNzcyh3d3cuY3NzLmhpbnQpLmNzcyhnZXRCYWNrZ3JvdW5kU3R5bGVzKCRpbnB1dCkpLnByb3AoXCJyZWFkb25seVwiLCB0cnVlKS5yZW1vdmVBdHRyKFwiaWQgbmFtZSBwbGFjZWhvbGRlciByZXF1aXJlZFwiKS5hdHRyKHtcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU6IFwib2ZmXCIsXG4gICAgICAgICAgICAgICAgc3BlbGxjaGVjazogXCJmYWxzZVwiLFxuICAgICAgICAgICAgICAgIHRhYmluZGV4OiAtMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcHJlcElucHV0KCRpbnB1dCwgd3d3KSB7XG4gICAgICAgICAgICAkaW5wdXQuZGF0YShrZXlzLmF0dHJzLCB7XG4gICAgICAgICAgICAgICAgZGlyOiAkaW5wdXQuYXR0cihcImRpclwiKSxcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU6ICRpbnB1dC5hdHRyKFwiYXV0b2NvbXBsZXRlXCIpLFxuICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s6ICRpbnB1dC5hdHRyKFwic3BlbGxjaGVja1wiKSxcbiAgICAgICAgICAgICAgICBzdHlsZTogJGlucHV0LmF0dHIoXCJzdHlsZVwiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAkaW5wdXQuYWRkQ2xhc3Mod3d3LmNsYXNzZXMuaW5wdXQpLmF0dHIoe1xuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZTogXCJvZmZcIixcbiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICEkaW5wdXQuYXR0cihcImRpclwiKSAmJiAkaW5wdXQuYXR0cihcImRpclwiLCBcImF1dG9cIik7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICAgICAgcmV0dXJuICRpbnB1dDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBnZXRCYWNrZ3JvdW5kU3R5bGVzKCRlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQXR0YWNobWVudDogJGVsLmNzcyhcImJhY2tncm91bmQtYXR0YWNobWVudFwiKSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ2xpcDogJGVsLmNzcyhcImJhY2tncm91bmQtY2xpcFwiKSxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICRlbC5jc3MoXCJiYWNrZ3JvdW5kLWNvbG9yXCIpLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRJbWFnZTogJGVsLmNzcyhcImJhY2tncm91bmQtaW1hZ2VcIiksXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZE9yaWdpbjogJGVsLmNzcyhcImJhY2tncm91bmQtb3JpZ2luXCIpLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRQb3NpdGlvbjogJGVsLmNzcyhcImJhY2tncm91bmQtcG9zaXRpb25cIiksXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZFJlcGVhdDogJGVsLmNzcyhcImJhY2tncm91bmQtcmVwZWF0XCIpLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRTaXplOiAkZWwuY3NzKFwiYmFja2dyb3VuZC1zaXplXCIpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJldmVydCgkaW5wdXQpIHtcbiAgICAgICAgICAgIHZhciB3d3csICR3cmFwcGVyO1xuICAgICAgICAgICAgd3d3ID0gJGlucHV0LmRhdGEoa2V5cy53d3cpO1xuICAgICAgICAgICAgJHdyYXBwZXIgPSAkaW5wdXQucGFyZW50KCkuZmlsdGVyKHd3dy5zZWxlY3RvcnMud3JhcHBlcik7XG4gICAgICAgICAgICBfLmVhY2goJGlucHV0LmRhdGEoa2V5cy5hdHRycyksIGZ1bmN0aW9uKHZhbCwga2V5KSB7XG4gICAgICAgICAgICAgICAgXy5pc1VuZGVmaW5lZCh2YWwpID8gJGlucHV0LnJlbW92ZUF0dHIoa2V5KSA6ICRpbnB1dC5hdHRyKGtleSwgdmFsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgJGlucHV0LnJlbW92ZURhdGEoa2V5cy50eXBlYWhlYWQpLnJlbW92ZURhdGEoa2V5cy53d3cpLnJlbW92ZURhdGEoa2V5cy5hdHRyKS5yZW1vdmVDbGFzcyh3d3cuY2xhc3Nlcy5pbnB1dCk7XG4gICAgICAgICAgICBpZiAoJHdyYXBwZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgJGlucHV0LmRldGFjaCgpLmluc2VydEFmdGVyKCR3cmFwcGVyKTtcbiAgICAgICAgICAgICAgICAkd3JhcHBlci5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiAkZWxPck51bGwob2JqKSB7XG4gICAgICAgICAgICB2YXIgaXNWYWxpZCwgJGVsO1xuICAgICAgICAgICAgaXNWYWxpZCA9IF8uaXNKUXVlcnkob2JqKSB8fCBfLmlzRWxlbWVudChvYmopO1xuICAgICAgICAgICAgJGVsID0gaXNWYWxpZCA/ICQob2JqKS5maXJzdCgpIDogW107XG4gICAgICAgICAgICByZXR1cm4gJGVsLmxlbmd0aCA/ICRlbCA6IG51bGw7XG4gICAgICAgIH1cbiAgICB9KSgpO1xufSk7IiwiLyohXG4gKiB2dWUtaTE4biB2OC4xNy40IFxuICogKGMpIDIwMjAga2F6dXlhIGthd2FndWNoaVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG4vKiAgKi9cblxuLyoqXG4gKiBjb25zdGFudHNcbiAqL1xuXG52YXIgbnVtYmVyRm9ybWF0S2V5cyA9IFtcbiAgJ3N0eWxlJyxcbiAgJ2N1cnJlbmN5JyxcbiAgJ2N1cnJlbmN5RGlzcGxheScsXG4gICd1c2VHcm91cGluZycsXG4gICdtaW5pbXVtSW50ZWdlckRpZ2l0cycsXG4gICdtaW5pbXVtRnJhY3Rpb25EaWdpdHMnLFxuICAnbWF4aW11bUZyYWN0aW9uRGlnaXRzJyxcbiAgJ21pbmltdW1TaWduaWZpY2FudERpZ2l0cycsXG4gICdtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMnLFxuICAnbG9jYWxlTWF0Y2hlcicsXG4gICdmb3JtYXRNYXRjaGVyJyxcbiAgJ3VuaXQnXG5dO1xuXG4vKipcbiAqIHV0aWxpdGllc1xuICovXG5cbmZ1bmN0aW9uIHdhcm4gKG1zZywgZXJyKSB7XG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zb2xlLndhcm4oJ1t2dWUtaTE4bl0gJyArIG1zZyk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVycikge1xuICAgICAgY29uc29sZS53YXJuKGVyci5zdGFjayk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGVycm9yIChtc2csIGVycikge1xuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc29sZS5lcnJvcignW3Z1ZS1pMThuXSAnICsgbXNnKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVyci5zdGFjayk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0IChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0J1xufVxuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIE9CSkVDVF9TVFJJTkcgPSAnW29iamVjdCBPYmplY3RdJztcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QgKG9iaikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSBPQkpFQ1RfU1RSSU5HXG59XG5cbmZ1bmN0aW9uIGlzTnVsbCAodmFsKSB7XG4gIHJldHVybiB2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gcGFyc2VBcmdzICgpIHtcbiAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICB2YXIgbG9jYWxlID0gbnVsbDtcbiAgdmFyIHBhcmFtcyA9IG51bGw7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgIGlmIChpc09iamVjdChhcmdzWzBdKSB8fCBBcnJheS5pc0FycmF5KGFyZ3NbMF0pKSB7XG4gICAgICBwYXJhbXMgPSBhcmdzWzBdO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBsb2NhbGUgPSBhcmdzWzBdO1xuICAgIH1cbiAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMikge1xuICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGxvY2FsZSA9IGFyZ3NbMF07XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpc09iamVjdChhcmdzWzFdKSB8fCBBcnJheS5pc0FycmF5KGFyZ3NbMV0pKSB7XG4gICAgICBwYXJhbXMgPSBhcmdzWzFdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGxvY2FsZTogbG9jYWxlLCBwYXJhbXM6IHBhcmFtcyB9XG59XG5cbmZ1bmN0aW9uIGxvb3NlQ2xvbmUgKG9iaikge1xuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKVxufVxuXG5mdW5jdGlvbiByZW1vdmUgKGFyciwgaXRlbSkge1xuICBpZiAoYXJyLmxlbmd0aCkge1xuICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXR1cm4gYXJyLnNwbGljZShpbmRleCwgMSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5jbHVkZXMgKGFyciwgaXRlbSkge1xuICByZXR1cm4gISF+YXJyLmluZGV4T2YoaXRlbSlcbn1cblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbmZ1bmN0aW9uIGhhc093biAob2JqLCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpXG59XG5cbmZ1bmN0aW9uIG1lcmdlICh0YXJnZXQpIHtcbiAgdmFyIGFyZ3VtZW50cyQxID0gYXJndW1lbnRzO1xuXG4gIHZhciBvdXRwdXQgPSBPYmplY3QodGFyZ2V0KTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzJDFbaV07XG4gICAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkICYmIHNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIGtleSA9ICh2b2lkIDApO1xuICAgICAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChoYXNPd24oc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgaWYgKGlzT2JqZWN0KHNvdXJjZVtrZXldKSkge1xuICAgICAgICAgICAgb3V0cHV0W2tleV0gPSBtZXJnZShvdXRwdXRba2V5XSwgc291cmNlW2tleV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXRwdXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0cHV0XG59XG5cbmZ1bmN0aW9uIGxvb3NlRXF1YWwgKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHsgcmV0dXJuIHRydWUgfVxuICB2YXIgaXNPYmplY3RBID0gaXNPYmplY3QoYSk7XG4gIHZhciBpc09iamVjdEIgPSBpc09iamVjdChiKTtcbiAgaWYgKGlzT2JqZWN0QSAmJiBpc09iamVjdEIpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGlzQXJyYXlBID0gQXJyYXkuaXNBcnJheShhKTtcbiAgICAgIHZhciBpc0FycmF5QiA9IEFycmF5LmlzQXJyYXkoYik7XG4gICAgICBpZiAoaXNBcnJheUEgJiYgaXNBcnJheUIpIHtcbiAgICAgICAgcmV0dXJuIGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJiBhLmV2ZXJ5KGZ1bmN0aW9uIChlLCBpKSB7XG4gICAgICAgICAgcmV0dXJuIGxvb3NlRXF1YWwoZSwgYltpXSlcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoIWlzQXJyYXlBICYmICFpc0FycmF5Qikge1xuICAgICAgICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcbiAgICAgICAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMoYik7XG4gICAgICAgIHJldHVybiBrZXlzQS5sZW5ndGggPT09IGtleXNCLmxlbmd0aCAmJiBrZXlzQS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIGxvb3NlRXF1YWwoYVtrZXldLCBiW2tleV0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9IGVsc2UgaWYgKCFpc09iamVjdEEgJiYgIWlzT2JqZWN0Qikge1xuICAgIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBleHRlbmQgKFZ1ZSkge1xuICBpZiAoIVZ1ZS5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoJyRpMThuJykpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckaTE4bicsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0ICgpIHsgcmV0dXJuIHRoaXMuX2kxOG4gfVxuICAgIH0pO1xuICB9XG5cbiAgVnVlLnByb3RvdHlwZS4kdCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdmFsdWVzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuICAgIHdoaWxlICggbGVuLS0gPiAwICkgdmFsdWVzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuXG4gICAgdmFyIGkxOG4gPSB0aGlzLiRpMThuO1xuICAgIHJldHVybiBpMThuLl90LmFwcGx5KGkxOG4sIFsga2V5LCBpMThuLmxvY2FsZSwgaTE4bi5fZ2V0TWVzc2FnZXMoKSwgdGhpcyBdLmNvbmNhdCggdmFsdWVzICkpXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kdGMgPSBmdW5jdGlvbiAoa2V5LCBjaG9pY2UpIHtcbiAgICB2YXIgdmFsdWVzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuICAgIHdoaWxlICggbGVuLS0gPiAwICkgdmFsdWVzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMiBdO1xuXG4gICAgdmFyIGkxOG4gPSB0aGlzLiRpMThuO1xuICAgIHJldHVybiBpMThuLl90Yy5hcHBseShpMThuLCBbIGtleSwgaTE4bi5sb2NhbGUsIGkxOG4uX2dldE1lc3NhZ2VzKCksIHRoaXMsIGNob2ljZSBdLmNvbmNhdCggdmFsdWVzICkpXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kdGUgPSBmdW5jdGlvbiAoa2V5LCBsb2NhbGUpIHtcbiAgICB2YXIgaTE4biA9IHRoaXMuJGkxOG47XG4gICAgcmV0dXJuIGkxOG4uX3RlKGtleSwgaTE4bi5sb2NhbGUsIGkxOG4uX2dldE1lc3NhZ2VzKCksIGxvY2FsZSlcbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFyIHJlZjtcblxuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuICAgIHdoaWxlICggbGVuLS0gPiAwICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcbiAgICByZXR1cm4gKHJlZiA9IHRoaXMuJGkxOG4pLmQuYXBwbHkocmVmLCBbIHZhbHVlIF0uY29uY2F0KCBhcmdzICkpXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHZhciByZWY7XG5cbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoIGxlbi0tID4gMCApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG4gICAgcmV0dXJuIChyZWYgPSB0aGlzLiRpMThuKS5uLmFwcGx5KHJlZiwgWyB2YWx1ZSBdLmNvbmNhdCggYXJncyApKVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIG1peGluID0ge1xuICBiZWZvcmVDcmVhdGU6IGZ1bmN0aW9uIGJlZm9yZUNyZWF0ZSAoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLiRvcHRpb25zO1xuICAgIG9wdGlvbnMuaTE4biA9IG9wdGlvbnMuaTE4biB8fCAob3B0aW9ucy5fX2kxOG4gPyB7fSA6IG51bGwpO1xuXG4gICAgaWYgKG9wdGlvbnMuaTE4bikge1xuICAgICAgaWYgKG9wdGlvbnMuaTE4biBpbnN0YW5jZW9mIFZ1ZUkxOG4pIHtcbiAgICAgICAgLy8gaW5pdCBsb2NhbGUgbWVzc2FnZXMgdmlhIGN1c3RvbSBibG9ja3NcbiAgICAgICAgaWYgKG9wdGlvbnMuX19pMThuKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBsb2NhbGVNZXNzYWdlcyA9IHt9O1xuICAgICAgICAgICAgb3B0aW9ucy5fX2kxOG4uZm9yRWFjaChmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgICAgbG9jYWxlTWVzc2FnZXMgPSBtZXJnZShsb2NhbGVNZXNzYWdlcywgSlNPTi5wYXJzZShyZXNvdXJjZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhsb2NhbGVNZXNzYWdlcykuZm9yRWFjaChmdW5jdGlvbiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgIG9wdGlvbnMuaTE4bi5tZXJnZUxvY2FsZU1lc3NhZ2UobG9jYWxlLCBsb2NhbGVNZXNzYWdlc1tsb2NhbGVdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgIGVycm9yKFwiQ2Fubm90IHBhcnNlIGxvY2FsZSBtZXNzYWdlcyB2aWEgY3VzdG9tIGJsb2Nrcy5cIiwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2kxOG4gPSBvcHRpb25zLmkxOG47XG4gICAgICAgIHRoaXMuX2kxOG5XYXRjaGVyID0gdGhpcy5faTE4bi53YXRjaEkxOG5EYXRhKCk7XG4gICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qob3B0aW9ucy5pMThuKSkge1xuICAgICAgICAvLyBjb21wb25lbnQgbG9jYWwgaTE4blxuICAgICAgICBpZiAodGhpcy4kcm9vdCAmJiB0aGlzLiRyb290LiRpMThuICYmIHRoaXMuJHJvb3QuJGkxOG4gaW5zdGFuY2VvZiBWdWVJMThuKSB7XG4gICAgICAgICAgb3B0aW9ucy5pMThuLnJvb3QgPSB0aGlzLiRyb290O1xuICAgICAgICAgIG9wdGlvbnMuaTE4bi5mb3JtYXR0ZXIgPSB0aGlzLiRyb290LiRpMThuLmZvcm1hdHRlcjtcbiAgICAgICAgICBvcHRpb25zLmkxOG4uZmFsbGJhY2tMb2NhbGUgPSB0aGlzLiRyb290LiRpMThuLmZhbGxiYWNrTG9jYWxlO1xuICAgICAgICAgIG9wdGlvbnMuaTE4bi5mb3JtYXRGYWxsYmFja01lc3NhZ2VzID0gdGhpcy4kcm9vdC4kaTE4bi5mb3JtYXRGYWxsYmFja01lc3NhZ2VzO1xuICAgICAgICAgIG9wdGlvbnMuaTE4bi5zaWxlbnRUcmFuc2xhdGlvbldhcm4gPSB0aGlzLiRyb290LiRpMThuLnNpbGVudFRyYW5zbGF0aW9uV2FybjtcbiAgICAgICAgICBvcHRpb25zLmkxOG4uc2lsZW50RmFsbGJhY2tXYXJuID0gdGhpcy4kcm9vdC4kaTE4bi5zaWxlbnRGYWxsYmFja1dhcm47XG4gICAgICAgICAgb3B0aW9ucy5pMThuLnBsdXJhbGl6YXRpb25SdWxlcyA9IHRoaXMuJHJvb3QuJGkxOG4ucGx1cmFsaXphdGlvblJ1bGVzO1xuICAgICAgICAgIG9wdGlvbnMuaTE4bi5wcmVzZXJ2ZURpcmVjdGl2ZUNvbnRlbnQgPSB0aGlzLiRyb290LiRpMThuLnByZXNlcnZlRGlyZWN0aXZlQ29udGVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluaXQgbG9jYWxlIG1lc3NhZ2VzIHZpYSBjdXN0b20gYmxvY2tzXG4gICAgICAgIGlmIChvcHRpb25zLl9faTE4bikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlTWVzc2FnZXMkMSA9IHt9O1xuICAgICAgICAgICAgb3B0aW9ucy5fX2kxOG4uZm9yRWFjaChmdW5jdGlvbiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgICAgbG9jYWxlTWVzc2FnZXMkMSA9IG1lcmdlKGxvY2FsZU1lc3NhZ2VzJDEsIEpTT04ucGFyc2UocmVzb3VyY2UpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgb3B0aW9ucy5pMThuLm1lc3NhZ2VzID0gbG9jYWxlTWVzc2FnZXMkMTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICB3YXJuKFwiQ2Fubm90IHBhcnNlIGxvY2FsZSBtZXNzYWdlcyB2aWEgY3VzdG9tIGJsb2Nrcy5cIiwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlZiA9IG9wdGlvbnMuaTE4bjtcbiAgICAgICAgdmFyIHNoYXJlZE1lc3NhZ2VzID0gcmVmLnNoYXJlZE1lc3NhZ2VzO1xuICAgICAgICBpZiAoc2hhcmVkTWVzc2FnZXMgJiYgaXNQbGFpbk9iamVjdChzaGFyZWRNZXNzYWdlcykpIHtcbiAgICAgICAgICBvcHRpb25zLmkxOG4ubWVzc2FnZXMgPSBtZXJnZShvcHRpb25zLmkxOG4ubWVzc2FnZXMsIHNoYXJlZE1lc3NhZ2VzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2kxOG4gPSBuZXcgVnVlSTE4bihvcHRpb25zLmkxOG4pO1xuICAgICAgICB0aGlzLl9pMThuV2F0Y2hlciA9IHRoaXMuX2kxOG4ud2F0Y2hJMThuRGF0YSgpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmkxOG4uc3luYyA9PT0gdW5kZWZpbmVkIHx8ICEhb3B0aW9ucy5pMThuLnN5bmMpIHtcbiAgICAgICAgICB0aGlzLl9sb2NhbGVXYXRjaGVyID0gdGhpcy4kaTE4bi53YXRjaExvY2FsZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHdhcm4oXCJDYW5ub3QgYmUgaW50ZXJwcmV0ZWQgJ2kxOG4nIG9wdGlvbi5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuJHJvb3QgJiYgdGhpcy4kcm9vdC4kaTE4biAmJiB0aGlzLiRyb290LiRpMThuIGluc3RhbmNlb2YgVnVlSTE4bikge1xuICAgICAgLy8gcm9vdCBpMThuXG4gICAgICB0aGlzLl9pMThuID0gdGhpcy4kcm9vdC4kaTE4bjtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMucGFyZW50ICYmIG9wdGlvbnMucGFyZW50LiRpMThuICYmIG9wdGlvbnMucGFyZW50LiRpMThuIGluc3RhbmNlb2YgVnVlSTE4bikge1xuICAgICAgLy8gcGFyZW50IGkxOG5cbiAgICAgIHRoaXMuX2kxOG4gPSBvcHRpb25zLnBhcmVudC4kaTE4bjtcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlTW91bnQ6IGZ1bmN0aW9uIGJlZm9yZU1vdW50ICgpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMuJG9wdGlvbnM7XG4gICAgb3B0aW9ucy5pMThuID0gb3B0aW9ucy5pMThuIHx8IChvcHRpb25zLl9faTE4biA/IHt9IDogbnVsbCk7XG5cbiAgICBpZiAob3B0aW9ucy5pMThuKSB7XG4gICAgICBpZiAob3B0aW9ucy5pMThuIGluc3RhbmNlb2YgVnVlSTE4bikge1xuICAgICAgICAvLyBpbml0IGxvY2FsZSBtZXNzYWdlcyB2aWEgY3VzdG9tIGJsb2Nrc1xuICAgICAgICB0aGlzLl9pMThuLnN1YnNjcmliZURhdGFDaGFuZ2luZyh0aGlzKTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaWJpbmcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KG9wdGlvbnMuaTE4bikpIHtcbiAgICAgICAgdGhpcy5faTE4bi5zdWJzY3JpYmVEYXRhQ2hhbmdpbmcodGhpcyk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmliaW5nID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgd2FybihcIkNhbm5vdCBiZSBpbnRlcnByZXRlZCAnaTE4bicgb3B0aW9uLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy4kcm9vdCAmJiB0aGlzLiRyb290LiRpMThuICYmIHRoaXMuJHJvb3QuJGkxOG4gaW5zdGFuY2VvZiBWdWVJMThuKSB7XG4gICAgICB0aGlzLl9pMThuLnN1YnNjcmliZURhdGFDaGFuZ2luZyh0aGlzKTtcbiAgICAgIHRoaXMuX3N1YnNjcmliaW5nID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMucGFyZW50ICYmIG9wdGlvbnMucGFyZW50LiRpMThuICYmIG9wdGlvbnMucGFyZW50LiRpMThuIGluc3RhbmNlb2YgVnVlSTE4bikge1xuICAgICAgdGhpcy5faTE4bi5zdWJzY3JpYmVEYXRhQ2hhbmdpbmcodGhpcyk7XG4gICAgICB0aGlzLl9zdWJzY3JpYmluZyA9IHRydWU7XG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3kgKCkge1xuICAgIGlmICghdGhpcy5faTE4bikgeyByZXR1cm4gfVxuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChzZWxmLl9zdWJzY3JpYmluZykge1xuICAgICAgICBzZWxmLl9pMThuLnVuc3Vic2NyaWJlRGF0YUNoYW5naW5nKHNlbGYpO1xuICAgICAgICBkZWxldGUgc2VsZi5fc3Vic2NyaWJpbmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxmLl9pMThuV2F0Y2hlcikge1xuICAgICAgICBzZWxmLl9pMThuV2F0Y2hlcigpO1xuICAgICAgICBzZWxmLl9pMThuLmRlc3Ryb3lWTSgpO1xuICAgICAgICBkZWxldGUgc2VsZi5faTE4bldhdGNoZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxmLl9sb2NhbGVXYXRjaGVyKSB7XG4gICAgICAgIHNlbGYuX2xvY2FsZVdhdGNoZXIoKTtcbiAgICAgICAgZGVsZXRlIHNlbGYuX2xvY2FsZVdhdGNoZXI7XG4gICAgICB9XG5cbiAgICAgIHNlbGYuX2kxOG4gPSBudWxsO1xuICAgIH0pO1xuICB9XG59O1xuXG4vKiAgKi9cblxudmFyIGludGVycG9sYXRpb25Db21wb25lbnQgPSB7XG4gIG5hbWU6ICdpMThuJyxcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcbiAgcHJvcHM6IHtcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0sXG4gICAgcGF0aDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGxvY2FsZToge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSxcbiAgICBwbGFjZXM6IHtcbiAgICAgIHR5cGU6IFtBcnJheSwgT2JqZWN0XVxuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKGgsIHJlZikge1xuICAgIHZhciBkYXRhID0gcmVmLmRhdGE7XG4gICAgdmFyIHBhcmVudCA9IHJlZi5wYXJlbnQ7XG4gICAgdmFyIHByb3BzID0gcmVmLnByb3BzO1xuICAgIHZhciBzbG90cyA9IHJlZi5zbG90cztcblxuICAgIHZhciAkaTE4biA9IHBhcmVudC4kaTE4bjtcbiAgICBpZiAoISRpMThuKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuKCdDYW5ub3QgZmluZCBWdWVJMThuIGluc3RhbmNlIScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIHBhdGggPSBwcm9wcy5wYXRoO1xuICAgIHZhciBsb2NhbGUgPSBwcm9wcy5sb2NhbGU7XG4gICAgdmFyIHBsYWNlcyA9IHByb3BzLnBsYWNlcztcbiAgICB2YXIgcGFyYW1zID0gc2xvdHMoKTtcbiAgICB2YXIgY2hpbGRyZW4gPSAkaTE4bi5pKFxuICAgICAgcGF0aCxcbiAgICAgIGxvY2FsZSxcbiAgICAgIG9ubHlIYXNEZWZhdWx0UGxhY2UocGFyYW1zKSB8fCBwbGFjZXNcbiAgICAgICAgPyB1c2VMZWdhY3lQbGFjZXMocGFyYW1zLmRlZmF1bHQsIHBsYWNlcylcbiAgICAgICAgOiBwYXJhbXNcbiAgICApO1xuXG4gICAgdmFyIHRhZyA9IHByb3BzLnRhZyB8fCAnc3Bhbic7XG4gICAgcmV0dXJuIHRhZyA/IGgodGFnLCBkYXRhLCBjaGlsZHJlbikgOiBjaGlsZHJlblxuICB9XG59O1xuXG5mdW5jdGlvbiBvbmx5SGFzRGVmYXVsdFBsYWNlIChwYXJhbXMpIHtcbiAgdmFyIHByb3A7XG4gIGZvciAocHJvcCBpbiBwYXJhbXMpIHtcbiAgICBpZiAocHJvcCAhPT0gJ2RlZmF1bHQnKSB7IHJldHVybiBmYWxzZSB9XG4gIH1cbiAgcmV0dXJuIEJvb2xlYW4ocHJvcClcbn1cblxuZnVuY3Rpb24gdXNlTGVnYWN5UGxhY2VzIChjaGlsZHJlbiwgcGxhY2VzKSB7XG4gIHZhciBwYXJhbXMgPSBwbGFjZXMgPyBjcmVhdGVQYXJhbXNGcm9tUGxhY2VzKHBsYWNlcykgOiB7fTtcblxuICBpZiAoIWNoaWxkcmVuKSB7IHJldHVybiBwYXJhbXMgfVxuXG4gIC8vIEZpbHRlciBlbXB0eSB0ZXh0IG5vZGVzXG4gIGNoaWxkcmVuID0gY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZC50YWcgfHwgY2hpbGQudGV4dC50cmltKCkgIT09ICcnXG4gIH0pO1xuXG4gIHZhciBldmVyeVBsYWNlID0gY2hpbGRyZW4uZXZlcnkodm5vZGVIYXNQbGFjZUF0dHJpYnV0ZSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGV2ZXJ5UGxhY2UpIHtcbiAgICB3YXJuKCdgcGxhY2VgIGF0dHJpYnV0ZSBpcyBkZXByZWNhdGVkIGluIG5leHQgbWFqb3IgdmVyc2lvbi4gUGxlYXNlIHN3aXRjaCB0byBWdWUgc2xvdHMuJyk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW4ucmVkdWNlKFxuICAgIGV2ZXJ5UGxhY2UgPyBhc3NpZ25DaGlsZFBsYWNlIDogYXNzaWduQ2hpbGRJbmRleCxcbiAgICBwYXJhbXNcbiAgKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVQYXJhbXNGcm9tUGxhY2VzIChwbGFjZXMpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKCdgcGxhY2VzYCBwcm9wIGlzIGRlcHJlY2F0ZWQgaW4gbmV4dCBtYWpvciB2ZXJzaW9uLiBQbGVhc2Ugc3dpdGNoIHRvIFZ1ZSBzbG90cy4nKTtcbiAgfVxuXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHBsYWNlcylcbiAgICA/IHBsYWNlcy5yZWR1Y2UoYXNzaWduQ2hpbGRJbmRleCwge30pXG4gICAgOiBPYmplY3QuYXNzaWduKHt9LCBwbGFjZXMpXG59XG5cbmZ1bmN0aW9uIGFzc2lnbkNoaWxkUGxhY2UgKHBhcmFtcywgY2hpbGQpIHtcbiAgaWYgKGNoaWxkLmRhdGEgJiYgY2hpbGQuZGF0YS5hdHRycyAmJiBjaGlsZC5kYXRhLmF0dHJzLnBsYWNlKSB7XG4gICAgcGFyYW1zW2NoaWxkLmRhdGEuYXR0cnMucGxhY2VdID0gY2hpbGQ7XG4gIH1cbiAgcmV0dXJuIHBhcmFtc1xufVxuXG5mdW5jdGlvbiBhc3NpZ25DaGlsZEluZGV4IChwYXJhbXMsIGNoaWxkLCBpbmRleCkge1xuICBwYXJhbXNbaW5kZXhdID0gY2hpbGQ7XG4gIHJldHVybiBwYXJhbXNcbn1cblxuZnVuY3Rpb24gdm5vZGVIYXNQbGFjZUF0dHJpYnV0ZSAodm5vZGUpIHtcbiAgcmV0dXJuIEJvb2xlYW4odm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLmF0dHJzICYmIHZub2RlLmRhdGEuYXR0cnMucGxhY2UpXG59XG5cbi8qICAqL1xuXG52YXIgbnVtYmVyQ29tcG9uZW50ID0ge1xuICBuYW1lOiAnaTE4bi1uJyxcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcbiAgcHJvcHM6IHtcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdzcGFuJ1xuICAgIH0sXG4gICAgdmFsdWU6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF1cbiAgICB9LFxuICAgIGxvY2FsZToge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoaCwgcmVmKSB7XG4gICAgdmFyIHByb3BzID0gcmVmLnByb3BzO1xuICAgIHZhciBwYXJlbnQgPSByZWYucGFyZW50O1xuICAgIHZhciBkYXRhID0gcmVmLmRhdGE7XG5cbiAgICB2YXIgaTE4biA9IHBhcmVudC4kaTE4bjtcblxuICAgIGlmICghaTE4bikge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybignQ2Fubm90IGZpbmQgVnVlSTE4biBpbnN0YW5jZSEnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgdmFyIGtleSA9IG51bGw7XG4gICAgdmFyIG9wdGlvbnMgPSBudWxsO1xuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy5mb3JtYXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBrZXkgPSBwcm9wcy5mb3JtYXQ7XG4gICAgfSBlbHNlIGlmIChpc09iamVjdChwcm9wcy5mb3JtYXQpKSB7XG4gICAgICBpZiAocHJvcHMuZm9ybWF0LmtleSkge1xuICAgICAgICBrZXkgPSBwcm9wcy5mb3JtYXQua2V5O1xuICAgICAgfVxuXG4gICAgICAvLyBGaWx0ZXIgb3V0IG51bWJlciBmb3JtYXQgb3B0aW9ucyBvbmx5XG4gICAgICBvcHRpb25zID0gT2JqZWN0LmtleXMocHJvcHMuZm9ybWF0KS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcHJvcCkge1xuICAgICAgICB2YXIgb2JqO1xuXG4gICAgICAgIGlmIChpbmNsdWRlcyhudW1iZXJGb3JtYXRLZXlzLCBwcm9wKSkge1xuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBhY2MsICggb2JqID0ge30sIG9ialtwcm9wXSA9IHByb3BzLmZvcm1hdFtwcm9wXSwgb2JqICkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY1xuICAgICAgfSwgbnVsbCk7XG4gICAgfVxuXG4gICAgdmFyIGxvY2FsZSA9IHByb3BzLmxvY2FsZSB8fCBpMThuLmxvY2FsZTtcbiAgICB2YXIgcGFydHMgPSBpMThuLl9udHAocHJvcHMudmFsdWUsIGxvY2FsZSwga2V5LCBvcHRpb25zKTtcblxuICAgIHZhciB2YWx1ZXMgPSBwYXJ0cy5tYXAoZnVuY3Rpb24gKHBhcnQsIGluZGV4KSB7XG4gICAgICB2YXIgb2JqO1xuXG4gICAgICB2YXIgc2xvdCA9IGRhdGEuc2NvcGVkU2xvdHMgJiYgZGF0YS5zY29wZWRTbG90c1twYXJ0LnR5cGVdO1xuICAgICAgcmV0dXJuIHNsb3QgPyBzbG90KCggb2JqID0ge30sIG9ialtwYXJ0LnR5cGVdID0gcGFydC52YWx1ZSwgb2JqLmluZGV4ID0gaW5kZXgsIG9iai5wYXJ0cyA9IHBhcnRzLCBvYmogKSkgOiBwYXJ0LnZhbHVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaChwcm9wcy50YWcsIHtcbiAgICAgIGF0dHJzOiBkYXRhLmF0dHJzLFxuICAgICAgJ2NsYXNzJzogZGF0YVsnY2xhc3MnXSxcbiAgICAgIHN0YXRpY0NsYXNzOiBkYXRhLnN0YXRpY0NsYXNzXG4gICAgfSwgdmFsdWVzKVxuICB9XG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gYmluZCAoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG4gIGlmICghYXNzZXJ0KGVsLCB2bm9kZSkpIHsgcmV0dXJuIH1cblxuICB0KGVsLCBiaW5kaW5nLCB2bm9kZSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZSAoZWwsIGJpbmRpbmcsIHZub2RlLCBvbGRWTm9kZSkge1xuICBpZiAoIWFzc2VydChlbCwgdm5vZGUpKSB7IHJldHVybiB9XG5cbiAgdmFyIGkxOG4gPSB2bm9kZS5jb250ZXh0LiRpMThuO1xuICBpZiAobG9jYWxlRXF1YWwoZWwsIHZub2RlKSAmJlxuICAgIChsb29zZUVxdWFsKGJpbmRpbmcudmFsdWUsIGJpbmRpbmcub2xkVmFsdWUpICYmXG4gICAgIGxvb3NlRXF1YWwoZWwuX2xvY2FsZU1lc3NhZ2UsIGkxOG4uZ2V0TG9jYWxlTWVzc2FnZShpMThuLmxvY2FsZSkpKSkgeyByZXR1cm4gfVxuXG4gIHQoZWwsIGJpbmRpbmcsIHZub2RlKTtcbn1cblxuZnVuY3Rpb24gdW5iaW5kIChlbCwgYmluZGluZywgdm5vZGUsIG9sZFZOb2RlKSB7XG4gIHZhciB2bSA9IHZub2RlLmNvbnRleHQ7XG4gIGlmICghdm0pIHtcbiAgICB3YXJuKCdWdWUgaW5zdGFuY2UgZG9lcyBub3QgZXhpc3RzIGluIFZOb2RlIGNvbnRleHQnKTtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBpMThuID0gdm5vZGUuY29udGV4dC4kaTE4biB8fCB7fTtcbiAgaWYgKCFiaW5kaW5nLm1vZGlmaWVycy5wcmVzZXJ2ZSAmJiAhaTE4bi5wcmVzZXJ2ZURpcmVjdGl2ZUNvbnRlbnQpIHtcbiAgICBlbC50ZXh0Q29udGVudCA9ICcnO1xuICB9XG4gIGVsLl92dCA9IHVuZGVmaW5lZDtcbiAgZGVsZXRlIGVsWydfdnQnXTtcbiAgZWwuX2xvY2FsZSA9IHVuZGVmaW5lZDtcbiAgZGVsZXRlIGVsWydfbG9jYWxlJ107XG4gIGVsLl9sb2NhbGVNZXNzYWdlID0gdW5kZWZpbmVkO1xuICBkZWxldGUgZWxbJ19sb2NhbGVNZXNzYWdlJ107XG59XG5cbmZ1bmN0aW9uIGFzc2VydCAoZWwsIHZub2RlKSB7XG4gIHZhciB2bSA9IHZub2RlLmNvbnRleHQ7XG4gIGlmICghdm0pIHtcbiAgICB3YXJuKCdWdWUgaW5zdGFuY2UgZG9lcyBub3QgZXhpc3RzIGluIFZOb2RlIGNvbnRleHQnKTtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmICghdm0uJGkxOG4pIHtcbiAgICB3YXJuKCdWdWVJMThuIGluc3RhbmNlIGRvZXMgbm90IGV4aXN0cyBpbiBWdWUgaW5zdGFuY2UnKTtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGxvY2FsZUVxdWFsIChlbCwgdm5vZGUpIHtcbiAgdmFyIHZtID0gdm5vZGUuY29udGV4dDtcbiAgcmV0dXJuIGVsLl9sb2NhbGUgPT09IHZtLiRpMThuLmxvY2FsZVxufVxuXG5mdW5jdGlvbiB0IChlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgdmFyIHJlZiQxLCByZWYkMjtcblxuICB2YXIgdmFsdWUgPSBiaW5kaW5nLnZhbHVlO1xuXG4gIHZhciByZWYgPSBwYXJzZVZhbHVlKHZhbHVlKTtcbiAgdmFyIHBhdGggPSByZWYucGF0aDtcbiAgdmFyIGxvY2FsZSA9IHJlZi5sb2NhbGU7XG4gIHZhciBhcmdzID0gcmVmLmFyZ3M7XG4gIHZhciBjaG9pY2UgPSByZWYuY2hvaWNlO1xuICBpZiAoIXBhdGggJiYgIWxvY2FsZSAmJiAhYXJncykge1xuICAgIHdhcm4oJ3ZhbHVlIHR5cGUgbm90IHN1cHBvcnRlZCcpO1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCFwYXRoKSB7XG4gICAgd2FybignYHBhdGhgIGlzIHJlcXVpcmVkIGluIHYtdCBkaXJlY3RpdmUnKTtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciB2bSA9IHZub2RlLmNvbnRleHQ7XG4gIGlmIChjaG9pY2UpIHtcbiAgICBlbC5fdnQgPSBlbC50ZXh0Q29udGVudCA9IChyZWYkMSA9IHZtLiRpMThuKS50Yy5hcHBseShyZWYkMSwgWyBwYXRoLCBjaG9pY2UgXS5jb25jYXQoIG1ha2VQYXJhbXMobG9jYWxlLCBhcmdzKSApKTtcbiAgfSBlbHNlIHtcbiAgICBlbC5fdnQgPSBlbC50ZXh0Q29udGVudCA9IChyZWYkMiA9IHZtLiRpMThuKS50LmFwcGx5KHJlZiQyLCBbIHBhdGggXS5jb25jYXQoIG1ha2VQYXJhbXMobG9jYWxlLCBhcmdzKSApKTtcbiAgfVxuICBlbC5fbG9jYWxlID0gdm0uJGkxOG4ubG9jYWxlO1xuICBlbC5fbG9jYWxlTWVzc2FnZSA9IHZtLiRpMThuLmdldExvY2FsZU1lc3NhZ2Uodm0uJGkxOG4ubG9jYWxlKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VWYWx1ZSAodmFsdWUpIHtcbiAgdmFyIHBhdGg7XG4gIHZhciBsb2NhbGU7XG4gIHZhciBhcmdzO1xuICB2YXIgY2hvaWNlO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcGF0aCA9IHZhbHVlO1xuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgcGF0aCA9IHZhbHVlLnBhdGg7XG4gICAgbG9jYWxlID0gdmFsdWUubG9jYWxlO1xuICAgIGFyZ3MgPSB2YWx1ZS5hcmdzO1xuICAgIGNob2ljZSA9IHZhbHVlLmNob2ljZTtcbiAgfVxuXG4gIHJldHVybiB7IHBhdGg6IHBhdGgsIGxvY2FsZTogbG9jYWxlLCBhcmdzOiBhcmdzLCBjaG9pY2U6IGNob2ljZSB9XG59XG5cbmZ1bmN0aW9uIG1ha2VQYXJhbXMgKGxvY2FsZSwgYXJncykge1xuICB2YXIgcGFyYW1zID0gW107XG5cbiAgbG9jYWxlICYmIHBhcmFtcy5wdXNoKGxvY2FsZSk7XG4gIGlmIChhcmdzICYmIChBcnJheS5pc0FycmF5KGFyZ3MpIHx8IGlzUGxhaW5PYmplY3QoYXJncykpKSB7XG4gICAgcGFyYW1zLnB1c2goYXJncyk7XG4gIH1cblxuICByZXR1cm4gcGFyYW1zXG59XG5cbnZhciBWdWU7XG5cbmZ1bmN0aW9uIGluc3RhbGwgKF9WdWUpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGluc3RhbGwuaW5zdGFsbGVkICYmIF9WdWUgPT09IFZ1ZSkge1xuICAgIHdhcm4oJ2FscmVhZHkgaW5zdGFsbGVkLicpO1xuICAgIHJldHVyblxuICB9XG4gIGluc3RhbGwuaW5zdGFsbGVkID0gdHJ1ZTtcblxuICBWdWUgPSBfVnVlO1xuXG4gIHZhciB2ZXJzaW9uID0gKFZ1ZS52ZXJzaW9uICYmIE51bWJlcihWdWUudmVyc2lvbi5zcGxpdCgnLicpWzBdKSkgfHwgLTE7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB2ZXJzaW9uIDwgMikge1xuICAgIHdhcm4oKFwidnVlLWkxOG4gKFwiICsgKGluc3RhbGwudmVyc2lvbikgKyBcIikgbmVlZCB0byB1c2UgVnVlIDIuMCBvciBsYXRlciAoVnVlOiBcIiArIChWdWUudmVyc2lvbikgKyBcIikuXCIpKTtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGV4dGVuZChWdWUpO1xuICBWdWUubWl4aW4obWl4aW4pO1xuICBWdWUuZGlyZWN0aXZlKCd0JywgeyBiaW5kOiBiaW5kLCB1cGRhdGU6IHVwZGF0ZSwgdW5iaW5kOiB1bmJpbmQgfSk7XG4gIFZ1ZS5jb21wb25lbnQoaW50ZXJwb2xhdGlvbkNvbXBvbmVudC5uYW1lLCBpbnRlcnBvbGF0aW9uQ29tcG9uZW50KTtcbiAgVnVlLmNvbXBvbmVudChudW1iZXJDb21wb25lbnQubmFtZSwgbnVtYmVyQ29tcG9uZW50KTtcblxuICAvLyB1c2Ugc2ltcGxlIG1lcmdlU3RyYXRlZ2llcyB0byBwcmV2ZW50IGkxOG4gaW5zdGFuY2UgbG9zZSAnX19wcm90b19fJ1xuICB2YXIgc3RyYXRzID0gVnVlLmNvbmZpZy5vcHRpb25NZXJnZVN0cmF0ZWdpZXM7XG4gIHN0cmF0cy5pMThuID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwpIHtcbiAgICByZXR1cm4gY2hpbGRWYWwgPT09IHVuZGVmaW5lZFxuICAgICAgPyBwYXJlbnRWYWxcbiAgICAgIDogY2hpbGRWYWxcbiAgfTtcbn1cblxuLyogICovXG5cbnZhciBCYXNlRm9ybWF0dGVyID0gZnVuY3Rpb24gQmFzZUZvcm1hdHRlciAoKSB7XG4gIHRoaXMuX2NhY2hlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG59O1xuXG5CYXNlRm9ybWF0dGVyLnByb3RvdHlwZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uIGludGVycG9sYXRlIChtZXNzYWdlLCB2YWx1ZXMpIHtcbiAgaWYgKCF2YWx1ZXMpIHtcbiAgICByZXR1cm4gW21lc3NhZ2VdXG4gIH1cbiAgdmFyIHRva2VucyA9IHRoaXMuX2NhY2hlc1ttZXNzYWdlXTtcbiAgaWYgKCF0b2tlbnMpIHtcbiAgICB0b2tlbnMgPSBwYXJzZShtZXNzYWdlKTtcbiAgICB0aGlzLl9jYWNoZXNbbWVzc2FnZV0gPSB0b2tlbnM7XG4gIH1cbiAgcmV0dXJuIGNvbXBpbGUodG9rZW5zLCB2YWx1ZXMpXG59O1xuXG5cblxudmFyIFJFX1RPS0VOX0xJU1RfVkFMVUUgPSAvXig/OlxcZCkrLztcbnZhciBSRV9UT0tFTl9OQU1FRF9WQUxVRSA9IC9eKD86XFx3KSsvO1xuXG5mdW5jdGlvbiBwYXJzZSAoZm9ybWF0KSB7XG4gIHZhciB0b2tlbnMgPSBbXTtcbiAgdmFyIHBvc2l0aW9uID0gMDtcblxuICB2YXIgdGV4dCA9ICcnO1xuICB3aGlsZSAocG9zaXRpb24gPCBmb3JtYXQubGVuZ3RoKSB7XG4gICAgdmFyIGNoYXIgPSBmb3JtYXRbcG9zaXRpb24rK107XG4gICAgaWYgKGNoYXIgPT09ICd7Jykge1xuICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlOiB0ZXh0IH0pO1xuICAgICAgfVxuXG4gICAgICB0ZXh0ID0gJyc7XG4gICAgICB2YXIgc3ViID0gJyc7XG4gICAgICBjaGFyID0gZm9ybWF0W3Bvc2l0aW9uKytdO1xuICAgICAgd2hpbGUgKGNoYXIgIT09IHVuZGVmaW5lZCAmJiBjaGFyICE9PSAnfScpIHtcbiAgICAgICAgc3ViICs9IGNoYXI7XG4gICAgICAgIGNoYXIgPSBmb3JtYXRbcG9zaXRpb24rK107XG4gICAgICB9XG4gICAgICB2YXIgaXNDbG9zZWQgPSBjaGFyID09PSAnfSc7XG5cbiAgICAgIHZhciB0eXBlID0gUkVfVE9LRU5fTElTVF9WQUxVRS50ZXN0KHN1YilcbiAgICAgICAgPyAnbGlzdCdcbiAgICAgICAgOiBpc0Nsb3NlZCAmJiBSRV9UT0tFTl9OQU1FRF9WQUxVRS50ZXN0KHN1YilcbiAgICAgICAgICA/ICduYW1lZCdcbiAgICAgICAgICA6ICd1bmtub3duJztcbiAgICAgIHRva2Vucy5wdXNoKHsgdmFsdWU6IHN1YiwgdHlwZTogdHlwZSB9KTtcbiAgICB9IGVsc2UgaWYgKGNoYXIgPT09ICclJykge1xuICAgICAgLy8gd2hlbiBmb3VuZCByYWlscyBpMThuIHN5bnRheCwgc2tpcCB0ZXh0IGNhcHR1cmVcbiAgICAgIGlmIChmb3JtYXRbKHBvc2l0aW9uKV0gIT09ICd7Jykge1xuICAgICAgICB0ZXh0ICs9IGNoYXI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRleHQgKz0gY2hhcjtcbiAgICB9XG4gIH1cblxuICB0ZXh0ICYmIHRva2Vucy5wdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZTogdGV4dCB9KTtcblxuICByZXR1cm4gdG9rZW5zXG59XG5cbmZ1bmN0aW9uIGNvbXBpbGUgKHRva2VucywgdmFsdWVzKSB7XG4gIHZhciBjb21waWxlZCA9IFtdO1xuICB2YXIgaW5kZXggPSAwO1xuXG4gIHZhciBtb2RlID0gQXJyYXkuaXNBcnJheSh2YWx1ZXMpXG4gICAgPyAnbGlzdCdcbiAgICA6IGlzT2JqZWN0KHZhbHVlcylcbiAgICAgID8gJ25hbWVkJ1xuICAgICAgOiAndW5rbm93bic7XG4gIGlmIChtb2RlID09PSAndW5rbm93bicpIHsgcmV0dXJuIGNvbXBpbGVkIH1cblxuICB3aGlsZSAoaW5kZXggPCB0b2tlbnMubGVuZ3RoKSB7XG4gICAgdmFyIHRva2VuID0gdG9rZW5zW2luZGV4XTtcbiAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICBjb21waWxlZC5wdXNoKHRva2VuLnZhbHVlKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2xpc3QnOlxuICAgICAgICBjb21waWxlZC5wdXNoKHZhbHVlc1twYXJzZUludCh0b2tlbi52YWx1ZSwgMTApXSk7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICduYW1lZCc6XG4gICAgICAgIGlmIChtb2RlID09PSAnbmFtZWQnKSB7XG4gICAgICAgICAgY29tcGlsZWQucHVzaCgodmFsdWVzKVt0b2tlbi52YWx1ZV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB3YXJuKChcIlR5cGUgb2YgdG9rZW4gJ1wiICsgKHRva2VuLnR5cGUpICsgXCInIGFuZCBmb3JtYXQgb2YgdmFsdWUgJ1wiICsgbW9kZSArIFwiJyBkb24ndCBtYXRjaCFcIikpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAndW5rbm93bic6XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgd2FybihcIkRldGVjdCAndW5rbm93bicgdHlwZSBvZiB0b2tlbiFcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICB9XG4gICAgaW5kZXgrKztcbiAgfVxuXG4gIHJldHVybiBjb21waWxlZFxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiAgUGF0aCBwYXJzZXJcbiAqICAtIEluc3BpcmVkOlxuICogICAgVnVlLmpzIFBhdGggcGFyc2VyXG4gKi9cblxuLy8gYWN0aW9uc1xudmFyIEFQUEVORCA9IDA7XG52YXIgUFVTSCA9IDE7XG52YXIgSU5DX1NVQl9QQVRIX0RFUFRIID0gMjtcbnZhciBQVVNIX1NVQl9QQVRIID0gMztcblxuLy8gc3RhdGVzXG52YXIgQkVGT1JFX1BBVEggPSAwO1xudmFyIElOX1BBVEggPSAxO1xudmFyIEJFRk9SRV9JREVOVCA9IDI7XG52YXIgSU5fSURFTlQgPSAzO1xudmFyIElOX1NVQl9QQVRIID0gNDtcbnZhciBJTl9TSU5HTEVfUVVPVEUgPSA1O1xudmFyIElOX0RPVUJMRV9RVU9URSA9IDY7XG52YXIgQUZURVJfUEFUSCA9IDc7XG52YXIgRVJST1IgPSA4O1xuXG52YXIgcGF0aFN0YXRlTWFjaGluZSA9IFtdO1xuXG5wYXRoU3RhdGVNYWNoaW5lW0JFRk9SRV9QQVRIXSA9IHtcbiAgJ3dzJzogW0JFRk9SRV9QQVRIXSxcbiAgJ2lkZW50JzogW0lOX0lERU5ULCBBUFBFTkRdLFxuICAnWyc6IFtJTl9TVUJfUEFUSF0sXG4gICdlb2YnOiBbQUZURVJfUEFUSF1cbn07XG5cbnBhdGhTdGF0ZU1hY2hpbmVbSU5fUEFUSF0gPSB7XG4gICd3cyc6IFtJTl9QQVRIXSxcbiAgJy4nOiBbQkVGT1JFX0lERU5UXSxcbiAgJ1snOiBbSU5fU1VCX1BBVEhdLFxuICAnZW9mJzogW0FGVEVSX1BBVEhdXG59O1xuXG5wYXRoU3RhdGVNYWNoaW5lW0JFRk9SRV9JREVOVF0gPSB7XG4gICd3cyc6IFtCRUZPUkVfSURFTlRdLFxuICAnaWRlbnQnOiBbSU5fSURFTlQsIEFQUEVORF0sXG4gICcwJzogW0lOX0lERU5ULCBBUFBFTkRdLFxuICAnbnVtYmVyJzogW0lOX0lERU5ULCBBUFBFTkRdXG59O1xuXG5wYXRoU3RhdGVNYWNoaW5lW0lOX0lERU5UXSA9IHtcbiAgJ2lkZW50JzogW0lOX0lERU5ULCBBUFBFTkRdLFxuICAnMCc6IFtJTl9JREVOVCwgQVBQRU5EXSxcbiAgJ251bWJlcic6IFtJTl9JREVOVCwgQVBQRU5EXSxcbiAgJ3dzJzogW0lOX1BBVEgsIFBVU0hdLFxuICAnLic6IFtCRUZPUkVfSURFTlQsIFBVU0hdLFxuICAnWyc6IFtJTl9TVUJfUEFUSCwgUFVTSF0sXG4gICdlb2YnOiBbQUZURVJfUEFUSCwgUFVTSF1cbn07XG5cbnBhdGhTdGF0ZU1hY2hpbmVbSU5fU1VCX1BBVEhdID0ge1xuICBcIidcIjogW0lOX1NJTkdMRV9RVU9URSwgQVBQRU5EXSxcbiAgJ1wiJzogW0lOX0RPVUJMRV9RVU9URSwgQVBQRU5EXSxcbiAgJ1snOiBbSU5fU1VCX1BBVEgsIElOQ19TVUJfUEFUSF9ERVBUSF0sXG4gICddJzogW0lOX1BBVEgsIFBVU0hfU1VCX1BBVEhdLFxuICAnZW9mJzogRVJST1IsXG4gICdlbHNlJzogW0lOX1NVQl9QQVRILCBBUFBFTkRdXG59O1xuXG5wYXRoU3RhdGVNYWNoaW5lW0lOX1NJTkdMRV9RVU9URV0gPSB7XG4gIFwiJ1wiOiBbSU5fU1VCX1BBVEgsIEFQUEVORF0sXG4gICdlb2YnOiBFUlJPUixcbiAgJ2Vsc2UnOiBbSU5fU0lOR0xFX1FVT1RFLCBBUFBFTkRdXG59O1xuXG5wYXRoU3RhdGVNYWNoaW5lW0lOX0RPVUJMRV9RVU9URV0gPSB7XG4gICdcIic6IFtJTl9TVUJfUEFUSCwgQVBQRU5EXSxcbiAgJ2VvZic6IEVSUk9SLFxuICAnZWxzZSc6IFtJTl9ET1VCTEVfUVVPVEUsIEFQUEVORF1cbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgYW4gZXhwcmVzc2lvbiBpcyBhIGxpdGVyYWwgdmFsdWUuXG4gKi9cblxudmFyIGxpdGVyYWxWYWx1ZVJFID0gL15cXHM/KD86dHJ1ZXxmYWxzZXwtP1tcXGQuXSt8J1teJ10qJ3xcIlteXCJdKlwiKVxccz8kLztcbmZ1bmN0aW9uIGlzTGl0ZXJhbCAoZXhwKSB7XG4gIHJldHVybiBsaXRlcmFsVmFsdWVSRS50ZXN0KGV4cClcbn1cblxuLyoqXG4gKiBTdHJpcCBxdW90ZXMgZnJvbSBhIHN0cmluZ1xuICovXG5cbmZ1bmN0aW9uIHN0cmlwUXVvdGVzIChzdHIpIHtcbiAgdmFyIGEgPSBzdHIuY2hhckNvZGVBdCgwKTtcbiAgdmFyIGIgPSBzdHIuY2hhckNvZGVBdChzdHIubGVuZ3RoIC0gMSk7XG4gIHJldHVybiBhID09PSBiICYmIChhID09PSAweDIyIHx8IGEgPT09IDB4MjcpXG4gICAgPyBzdHIuc2xpY2UoMSwgLTEpXG4gICAgOiBzdHJcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgdGhlIHR5cGUgb2YgYSBjaGFyYWN0ZXIgaW4gYSBrZXlwYXRoLlxuICovXG5cbmZ1bmN0aW9uIGdldFBhdGhDaGFyVHlwZSAoY2gpIHtcbiAgaWYgKGNoID09PSB1bmRlZmluZWQgfHwgY2ggPT09IG51bGwpIHsgcmV0dXJuICdlb2YnIH1cblxuICB2YXIgY29kZSA9IGNoLmNoYXJDb2RlQXQoMCk7XG5cbiAgc3dpdGNoIChjb2RlKSB7XG4gICAgY2FzZSAweDVCOiAvLyBbXG4gICAgY2FzZSAweDVEOiAvLyBdXG4gICAgY2FzZSAweDJFOiAvLyAuXG4gICAgY2FzZSAweDIyOiAvLyBcIlxuICAgIGNhc2UgMHgyNzogLy8gJ1xuICAgICAgcmV0dXJuIGNoXG5cbiAgICBjYXNlIDB4NUY6IC8vIF9cbiAgICBjYXNlIDB4MjQ6IC8vICRcbiAgICBjYXNlIDB4MkQ6IC8vIC1cbiAgICAgIHJldHVybiAnaWRlbnQnXG5cbiAgICBjYXNlIDB4MDk6IC8vIFRhYlxuICAgIGNhc2UgMHgwQTogLy8gTmV3bGluZVxuICAgIGNhc2UgMHgwRDogLy8gUmV0dXJuXG4gICAgY2FzZSAweEEwOiAgLy8gTm8tYnJlYWsgc3BhY2VcbiAgICBjYXNlIDB4RkVGRjogIC8vIEJ5dGUgT3JkZXIgTWFya1xuICAgIGNhc2UgMHgyMDI4OiAgLy8gTGluZSBTZXBhcmF0b3JcbiAgICBjYXNlIDB4MjAyOTogIC8vIFBhcmFncmFwaCBTZXBhcmF0b3JcbiAgICAgIHJldHVybiAnd3MnXG4gIH1cblxuICByZXR1cm4gJ2lkZW50J1xufVxuXG4vKipcbiAqIEZvcm1hdCBhIHN1YlBhdGgsIHJldHVybiBpdHMgcGxhaW4gZm9ybSBpZiBpdCBpc1xuICogYSBsaXRlcmFsIHN0cmluZyBvciBudW1iZXIuIE90aGVyd2lzZSBwcmVwZW5kIHRoZVxuICogZHluYW1pYyBpbmRpY2F0b3IgKCopLlxuICovXG5cbmZ1bmN0aW9uIGZvcm1hdFN1YlBhdGggKHBhdGgpIHtcbiAgdmFyIHRyaW1tZWQgPSBwYXRoLnRyaW0oKTtcbiAgLy8gaW52YWxpZCBsZWFkaW5nIDBcbiAgaWYgKHBhdGguY2hhckF0KDApID09PSAnMCcgJiYgaXNOYU4ocGF0aCkpIHsgcmV0dXJuIGZhbHNlIH1cblxuICByZXR1cm4gaXNMaXRlcmFsKHRyaW1tZWQpID8gc3RyaXBRdW90ZXModHJpbW1lZCkgOiAnKicgKyB0cmltbWVkXG59XG5cbi8qKlxuICogUGFyc2UgYSBzdHJpbmcgcGF0aCBpbnRvIGFuIGFycmF5IG9mIHNlZ21lbnRzXG4gKi9cblxuZnVuY3Rpb24gcGFyc2UkMSAocGF0aCkge1xuICB2YXIga2V5cyA9IFtdO1xuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIG1vZGUgPSBCRUZPUkVfUEFUSDtcbiAgdmFyIHN1YlBhdGhEZXB0aCA9IDA7XG4gIHZhciBjO1xuICB2YXIga2V5O1xuICB2YXIgbmV3Q2hhcjtcbiAgdmFyIHR5cGU7XG4gIHZhciB0cmFuc2l0aW9uO1xuICB2YXIgYWN0aW9uO1xuICB2YXIgdHlwZU1hcDtcbiAgdmFyIGFjdGlvbnMgPSBbXTtcblxuICBhY3Rpb25zW1BVU0hdID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICBrZXkgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIGFjdGlvbnNbQVBQRU5EXSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGtleSA9IG5ld0NoYXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleSArPSBuZXdDaGFyO1xuICAgIH1cbiAgfTtcblxuICBhY3Rpb25zW0lOQ19TVUJfUEFUSF9ERVBUSF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgYWN0aW9uc1tBUFBFTkRdKCk7XG4gICAgc3ViUGF0aERlcHRoKys7XG4gIH07XG5cbiAgYWN0aW9uc1tQVVNIX1NVQl9QQVRIXSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc3ViUGF0aERlcHRoID4gMCkge1xuICAgICAgc3ViUGF0aERlcHRoLS07XG4gICAgICBtb2RlID0gSU5fU1VCX1BBVEg7XG4gICAgICBhY3Rpb25zW0FQUEVORF0oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3ViUGF0aERlcHRoID0gMDtcbiAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gZmFsc2UgfVxuICAgICAga2V5ID0gZm9ybWF0U3ViUGF0aChrZXkpO1xuICAgICAgaWYgKGtleSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3Rpb25zW1BVU0hdKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIG1heWJlVW5lc2NhcGVRdW90ZSAoKSB7XG4gICAgdmFyIG5leHRDaGFyID0gcGF0aFtpbmRleCArIDFdO1xuICAgIGlmICgobW9kZSA9PT0gSU5fU0lOR0xFX1FVT1RFICYmIG5leHRDaGFyID09PSBcIidcIikgfHxcbiAgICAgIChtb2RlID09PSBJTl9ET1VCTEVfUVVPVEUgJiYgbmV4dENoYXIgPT09ICdcIicpKSB7XG4gICAgICBpbmRleCsrO1xuICAgICAgbmV3Q2hhciA9ICdcXFxcJyArIG5leHRDaGFyO1xuICAgICAgYWN0aW9uc1tBUFBFTkRdKCk7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIHdoaWxlIChtb2RlICE9PSBudWxsKSB7XG4gICAgaW5kZXgrKztcbiAgICBjID0gcGF0aFtpbmRleF07XG5cbiAgICBpZiAoYyA9PT0gJ1xcXFwnICYmIG1heWJlVW5lc2NhcGVRdW90ZSgpKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHR5cGUgPSBnZXRQYXRoQ2hhclR5cGUoYyk7XG4gICAgdHlwZU1hcCA9IHBhdGhTdGF0ZU1hY2hpbmVbbW9kZV07XG4gICAgdHJhbnNpdGlvbiA9IHR5cGVNYXBbdHlwZV0gfHwgdHlwZU1hcFsnZWxzZSddIHx8IEVSUk9SO1xuXG4gICAgaWYgKHRyYW5zaXRpb24gPT09IEVSUk9SKSB7XG4gICAgICByZXR1cm4gLy8gcGFyc2UgZXJyb3JcbiAgICB9XG5cbiAgICBtb2RlID0gdHJhbnNpdGlvblswXTtcbiAgICBhY3Rpb24gPSBhY3Rpb25zW3RyYW5zaXRpb25bMV1dO1xuICAgIGlmIChhY3Rpb24pIHtcbiAgICAgIG5ld0NoYXIgPSB0cmFuc2l0aW9uWzJdO1xuICAgICAgbmV3Q2hhciA9IG5ld0NoYXIgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IGNcbiAgICAgICAgOiBuZXdDaGFyO1xuICAgICAgaWYgKGFjdGlvbigpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobW9kZSA9PT0gQUZURVJfUEFUSCkge1xuICAgICAgcmV0dXJuIGtleXNcbiAgICB9XG4gIH1cbn1cblxuXG5cblxuXG52YXIgSTE4blBhdGggPSBmdW5jdGlvbiBJMThuUGF0aCAoKSB7XG4gIHRoaXMuX2NhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbn07XG5cbi8qKlxuICogRXh0ZXJuYWwgcGFyc2UgdGhhdCBjaGVjayBmb3IgYSBjYWNoZSBoaXQgZmlyc3RcbiAqL1xuSTE4blBhdGgucHJvdG90eXBlLnBhcnNlUGF0aCA9IGZ1bmN0aW9uIHBhcnNlUGF0aCAocGF0aCkge1xuICB2YXIgaGl0ID0gdGhpcy5fY2FjaGVbcGF0aF07XG4gIGlmICghaGl0KSB7XG4gICAgaGl0ID0gcGFyc2UkMShwYXRoKTtcbiAgICBpZiAoaGl0KSB7XG4gICAgICB0aGlzLl9jYWNoZVtwYXRoXSA9IGhpdDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGhpdCB8fCBbXVxufTtcblxuLyoqXG4gKiBHZXQgcGF0aCB2YWx1ZSBmcm9tIHBhdGggc3RyaW5nXG4gKi9cbkkxOG5QYXRoLnByb3RvdHlwZS5nZXRQYXRoVmFsdWUgPSBmdW5jdGlvbiBnZXRQYXRoVmFsdWUgKG9iaiwgcGF0aCkge1xuICBpZiAoIWlzT2JqZWN0KG9iaikpIHsgcmV0dXJuIG51bGwgfVxuXG4gIHZhciBwYXRocyA9IHRoaXMucGFyc2VQYXRoKHBhdGgpO1xuICBpZiAocGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gcGF0aHMubGVuZ3RoO1xuICAgIHZhciBsYXN0ID0gb2JqO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgICAgdmFyIHZhbHVlID0gbGFzdFtwYXRoc1tpXV07XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgbGFzdCA9IHZhbHVlO1xuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiBsYXN0XG4gIH1cbn07XG5cbi8qICAqL1xuXG5cblxudmFyIGh0bWxUYWdNYXRjaGVyID0gLzxcXC8/W1xcd1xccz1cIi8uJzo7Iy1cXC9dKz4vO1xudmFyIGxpbmtLZXlNYXRjaGVyID0gLyg/OkAoPzpcXC5bYS16XSspPzooPzpbXFx3XFwtX3wuXSt8XFwoW1xcd1xcLV98Ll0rXFwpKSkvZztcbnZhciBsaW5rS2V5UHJlZml4TWF0Y2hlciA9IC9eQCg/OlxcLihbYS16XSspKT86LztcbnZhciBicmFja2V0c01hdGNoZXIgPSAvWygpXS9nO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSB7XG4gICd1cHBlcic6IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIHN0ci50b0xvY2FsZVVwcGVyQ2FzZSgpOyB9LFxuICAnbG93ZXInOiBmdW5jdGlvbiAoc3RyKSB7IHJldHVybiBzdHIudG9Mb2NhbGVMb3dlckNhc2UoKTsgfSxcbiAgJ2NhcGl0YWxpemUnOiBmdW5jdGlvbiAoc3RyKSB7IHJldHVybiAoXCJcIiArIChzdHIuY2hhckF0KDApLnRvTG9jYWxlVXBwZXJDYXNlKCkpICsgKHN0ci5zdWJzdHIoMSkpKTsgfVxufTtcblxudmFyIGRlZmF1bHRGb3JtYXR0ZXIgPSBuZXcgQmFzZUZvcm1hdHRlcigpO1xuXG52YXIgVnVlSTE4biA9IGZ1bmN0aW9uIFZ1ZUkxOG4gKG9wdGlvbnMpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG4gIGlmICggb3B0aW9ucyA9PT0gdm9pZCAwICkgb3B0aW9ucyA9IHt9O1xuXG4gIC8vIEF1dG8gaW5zdGFsbCBpZiBpdCBpcyBub3QgZG9uZSB5ZXQgYW5kIGB3aW5kb3dgIGhhcyBgVnVlYC5cbiAgLy8gVG8gYWxsb3cgdXNlcnMgdG8gYXZvaWQgYXV0by1pbnN0YWxsYXRpb24gaW4gc29tZSBjYXNlcyxcbiAgLy8gdGhpcyBjb2RlIHNob3VsZCBiZSBwbGFjZWQgaGVyZS4gU2VlICMyOTBcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghVnVlICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5WdWUpIHtcbiAgICBpbnN0YWxsKHdpbmRvdy5WdWUpO1xuICB9XG5cbiAgdmFyIGxvY2FsZSA9IG9wdGlvbnMubG9jYWxlIHx8ICdlbi1VUyc7XG4gIHZhciBmYWxsYmFja0xvY2FsZSA9IG9wdGlvbnMuZmFsbGJhY2tMb2NhbGUgPT09IGZhbHNlXG4gICAgPyBmYWxzZVxuICAgIDogb3B0aW9ucy5mYWxsYmFja0xvY2FsZSB8fCAnZW4tVVMnO1xuICB2YXIgbWVzc2FnZXMgPSBvcHRpb25zLm1lc3NhZ2VzIHx8IHt9O1xuICB2YXIgZGF0ZVRpbWVGb3JtYXRzID0gb3B0aW9ucy5kYXRlVGltZUZvcm1hdHMgfHwge307XG4gIHZhciBudW1iZXJGb3JtYXRzID0gb3B0aW9ucy5udW1iZXJGb3JtYXRzIHx8IHt9O1xuXG4gIHRoaXMuX3ZtID0gbnVsbDtcbiAgdGhpcy5fZm9ybWF0dGVyID0gb3B0aW9ucy5mb3JtYXR0ZXIgfHwgZGVmYXVsdEZvcm1hdHRlcjtcbiAgdGhpcy5fbW9kaWZpZXJzID0gb3B0aW9ucy5tb2RpZmllcnMgfHwge307XG4gIHRoaXMuX21pc3NpbmcgPSBvcHRpb25zLm1pc3NpbmcgfHwgbnVsbDtcbiAgdGhpcy5fcm9vdCA9IG9wdGlvbnMucm9vdCB8fCBudWxsO1xuICB0aGlzLl9zeW5jID0gb3B0aW9ucy5zeW5jID09PSB1bmRlZmluZWQgPyB0cnVlIDogISFvcHRpb25zLnN5bmM7XG4gIHRoaXMuX2ZhbGxiYWNrUm9vdCA9IG9wdGlvbnMuZmFsbGJhY2tSb290ID09PSB1bmRlZmluZWRcbiAgICA/IHRydWVcbiAgICA6ICEhb3B0aW9ucy5mYWxsYmFja1Jvb3Q7XG4gIHRoaXMuX2Zvcm1hdEZhbGxiYWNrTWVzc2FnZXMgPSBvcHRpb25zLmZvcm1hdEZhbGxiYWNrTWVzc2FnZXMgPT09IHVuZGVmaW5lZFxuICAgID8gZmFsc2VcbiAgICA6ICEhb3B0aW9ucy5mb3JtYXRGYWxsYmFja01lc3NhZ2VzO1xuICB0aGlzLl9zaWxlbnRUcmFuc2xhdGlvbldhcm4gPSBvcHRpb25zLnNpbGVudFRyYW5zbGF0aW9uV2FybiA9PT0gdW5kZWZpbmVkXG4gICAgPyBmYWxzZVxuICAgIDogb3B0aW9ucy5zaWxlbnRUcmFuc2xhdGlvbldhcm47XG4gIHRoaXMuX3NpbGVudEZhbGxiYWNrV2FybiA9IG9wdGlvbnMuc2lsZW50RmFsbGJhY2tXYXJuID09PSB1bmRlZmluZWRcbiAgICA/IGZhbHNlXG4gICAgOiAhIW9wdGlvbnMuc2lsZW50RmFsbGJhY2tXYXJuO1xuICB0aGlzLl9kYXRlVGltZUZvcm1hdHRlcnMgPSB7fTtcbiAgdGhpcy5fbnVtYmVyRm9ybWF0dGVycyA9IHt9O1xuICB0aGlzLl9wYXRoID0gbmV3IEkxOG5QYXRoKCk7XG4gIHRoaXMuX2RhdGFMaXN0ZW5lcnMgPSBbXTtcbiAgdGhpcy5fcHJlc2VydmVEaXJlY3RpdmVDb250ZW50ID0gb3B0aW9ucy5wcmVzZXJ2ZURpcmVjdGl2ZUNvbnRlbnQgPT09IHVuZGVmaW5lZFxuICAgID8gZmFsc2VcbiAgICA6ICEhb3B0aW9ucy5wcmVzZXJ2ZURpcmVjdGl2ZUNvbnRlbnQ7XG4gIHRoaXMucGx1cmFsaXphdGlvblJ1bGVzID0gb3B0aW9ucy5wbHVyYWxpemF0aW9uUnVsZXMgfHwge307XG4gIHRoaXMuX3dhcm5IdG1sSW5NZXNzYWdlID0gb3B0aW9ucy53YXJuSHRtbEluTWVzc2FnZSB8fCAnb2ZmJztcbiAgdGhpcy5fcG9zdFRyYW5zbGF0aW9uID0gb3B0aW9ucy5wb3N0VHJhbnNsYXRpb24gfHwgbnVsbDtcblxuICB0aGlzLl9leGlzdCA9IGZ1bmN0aW9uIChtZXNzYWdlLCBrZXkpIHtcbiAgICBpZiAoIW1lc3NhZ2UgfHwgIWtleSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIGlmICghaXNOdWxsKHRoaXMkMS5fcGF0aC5nZXRQYXRoVmFsdWUobWVzc2FnZSwga2V5KSkpIHsgcmV0dXJuIHRydWUgfVxuICAgIC8vIGZhbGxiYWNrIGZvciBmbGF0IGtleVxuICAgIGlmIChtZXNzYWdlW2tleV0pIHsgcmV0dXJuIHRydWUgfVxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIGlmICh0aGlzLl93YXJuSHRtbEluTWVzc2FnZSA9PT0gJ3dhcm4nIHx8IHRoaXMuX3dhcm5IdG1sSW5NZXNzYWdlID09PSAnZXJyb3InKSB7XG4gICAgT2JqZWN0LmtleXMobWVzc2FnZXMpLmZvckVhY2goZnVuY3Rpb24gKGxvY2FsZSkge1xuICAgICAgdGhpcyQxLl9jaGVja0xvY2FsZU1lc3NhZ2UobG9jYWxlLCB0aGlzJDEuX3dhcm5IdG1sSW5NZXNzYWdlLCBtZXNzYWdlc1tsb2NhbGVdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRoaXMuX2luaXRWTSh7XG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgZmFsbGJhY2tMb2NhbGU6IGZhbGxiYWNrTG9jYWxlLFxuICAgIG1lc3NhZ2VzOiBtZXNzYWdlcyxcbiAgICBkYXRlVGltZUZvcm1hdHM6IGRhdGVUaW1lRm9ybWF0cyxcbiAgICBudW1iZXJGb3JtYXRzOiBudW1iZXJGb3JtYXRzXG4gIH0pO1xufTtcblxudmFyIHByb3RvdHlwZUFjY2Vzc29ycyA9IHsgdm06IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sbWVzc2FnZXM6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sZGF0ZVRpbWVGb3JtYXRzOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LG51bWJlckZvcm1hdHM6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sYXZhaWxhYmxlTG9jYWxlczogeyBjb25maWd1cmFibGU6IHRydWUgfSxsb2NhbGU6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sZmFsbGJhY2tMb2NhbGU6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sZm9ybWF0RmFsbGJhY2tNZXNzYWdlczogeyBjb25maWd1cmFibGU6IHRydWUgfSxtaXNzaW5nOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LGZvcm1hdHRlcjogeyBjb25maWd1cmFibGU6IHRydWUgfSxzaWxlbnRUcmFuc2xhdGlvbldhcm46IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sc2lsZW50RmFsbGJhY2tXYXJuOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LHByZXNlcnZlRGlyZWN0aXZlQ29udGVudDogeyBjb25maWd1cmFibGU6IHRydWUgfSx3YXJuSHRtbEluTWVzc2FnZTogeyBjb25maWd1cmFibGU6IHRydWUgfSxwb3N0VHJhbnNsYXRpb246IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX2NoZWNrTG9jYWxlTWVzc2FnZSA9IGZ1bmN0aW9uIF9jaGVja0xvY2FsZU1lc3NhZ2UgKGxvY2FsZSwgbGV2ZWwsIG1lc3NhZ2UpIHtcbiAgdmFyIHBhdGhzID0gW107XG5cbiAgdmFyIGZuID0gZnVuY3Rpb24gKGxldmVsLCBsb2NhbGUsIG1lc3NhZ2UsIHBhdGhzKSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QobWVzc2FnZSkpIHtcbiAgICAgIE9iamVjdC5rZXlzKG1lc3NhZ2UpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdmFsID0gbWVzc2FnZVtrZXldO1xuICAgICAgICBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICAgICAgcGF0aHMucHVzaChrZXkpO1xuICAgICAgICAgIHBhdGhzLnB1c2goJy4nKTtcbiAgICAgICAgICBmbihsZXZlbCwgbG9jYWxlLCB2YWwsIHBhdGhzKTtcbiAgICAgICAgICBwYXRocy5wb3AoKTtcbiAgICAgICAgICBwYXRocy5wb3AoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXRocy5wdXNoKGtleSk7XG4gICAgICAgICAgZm4obGV2ZWwsIGxvY2FsZSwgdmFsLCBwYXRocyk7XG4gICAgICAgICAgcGF0aHMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShtZXNzYWdlKSkge1xuICAgICAgbWVzc2FnZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICBpZiAoaXNQbGFpbk9iamVjdChpdGVtKSkge1xuICAgICAgICAgIHBhdGhzLnB1c2goKFwiW1wiICsgaW5kZXggKyBcIl1cIikpO1xuICAgICAgICAgIHBhdGhzLnB1c2goJy4nKTtcbiAgICAgICAgICBmbihsZXZlbCwgbG9jYWxlLCBpdGVtLCBwYXRocyk7XG4gICAgICAgICAgcGF0aHMucG9wKCk7XG4gICAgICAgICAgcGF0aHMucG9wKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGF0aHMucHVzaCgoXCJbXCIgKyBpbmRleCArIFwiXVwiKSk7XG4gICAgICAgICAgZm4obGV2ZWwsIGxvY2FsZSwgaXRlbSwgcGF0aHMpO1xuICAgICAgICAgIHBhdGhzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFyIHJldCA9IGh0bWxUYWdNYXRjaGVyLnRlc3QobWVzc2FnZSk7XG4gICAgICBpZiAocmV0KSB7XG4gICAgICAgIHZhciBtc2cgPSBcIkRldGVjdGVkIEhUTUwgaW4gbWVzc2FnZSAnXCIgKyBtZXNzYWdlICsgXCInIG9mIGtleXBhdGggJ1wiICsgKHBhdGhzLmpvaW4oJycpKSArIFwiJyBhdCAnXCIgKyBsb2NhbGUgKyBcIicuIENvbnNpZGVyIGNvbXBvbmVudCBpbnRlcnBvbGF0aW9uIHdpdGggJzxpMThuPicgdG8gYXZvaWQgWFNTLiBTZWUgaHR0cHM6Ly9iaXQubHkvMlpxSnprcFwiO1xuICAgICAgICBpZiAobGV2ZWwgPT09ICd3YXJuJykge1xuICAgICAgICAgIHdhcm4obXNnKTtcbiAgICAgICAgfSBlbHNlIGlmIChsZXZlbCA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIGVycm9yKG1zZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgZm4obGV2ZWwsIGxvY2FsZSwgbWVzc2FnZSwgcGF0aHMpO1xufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX2luaXRWTSA9IGZ1bmN0aW9uIF9pbml0Vk0gKGRhdGEpIHtcbiAgdmFyIHNpbGVudCA9IFZ1ZS5jb25maWcuc2lsZW50O1xuICBWdWUuY29uZmlnLnNpbGVudCA9IHRydWU7XG4gIHRoaXMuX3ZtID0gbmV3IFZ1ZSh7IGRhdGE6IGRhdGEgfSk7XG4gIFZ1ZS5jb25maWcuc2lsZW50ID0gc2lsZW50O1xufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuZGVzdHJveVZNID0gZnVuY3Rpb24gZGVzdHJveVZNICgpIHtcbiAgdGhpcy5fdm0uJGRlc3Ryb3koKTtcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLnN1YnNjcmliZURhdGFDaGFuZ2luZyA9IGZ1bmN0aW9uIHN1YnNjcmliZURhdGFDaGFuZ2luZyAodm0pIHtcbiAgdGhpcy5fZGF0YUxpc3RlbmVycy5wdXNoKHZtKTtcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLnVuc3Vic2NyaWJlRGF0YUNoYW5naW5nID0gZnVuY3Rpb24gdW5zdWJzY3JpYmVEYXRhQ2hhbmdpbmcgKHZtKSB7XG4gIHJlbW92ZSh0aGlzLl9kYXRhTGlzdGVuZXJzLCB2bSk7XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS53YXRjaEkxOG5EYXRhID0gZnVuY3Rpb24gd2F0Y2hJMThuRGF0YSAoKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgcmV0dXJuIHRoaXMuX3ZtLiR3YXRjaCgnJGRhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGkgPSBzZWxmLl9kYXRhTGlzdGVuZXJzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBWdWUubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLl9kYXRhTGlzdGVuZXJzW2ldICYmIHNlbGYuX2RhdGFMaXN0ZW5lcnNbaV0uJGZvcmNlVXBkYXRlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHsgZGVlcDogdHJ1ZSB9KVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUud2F0Y2hMb2NhbGUgPSBmdW5jdGlvbiB3YXRjaExvY2FsZSAoKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIXRoaXMuX3N5bmMgfHwgIXRoaXMuX3Jvb3QpIHsgcmV0dXJuIG51bGwgfVxuICB2YXIgdGFyZ2V0ID0gdGhpcy5fdm07XG4gIHJldHVybiB0aGlzLl9yb290LiRpMThuLnZtLiR3YXRjaCgnbG9jYWxlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgIHRhcmdldC4kc2V0KHRhcmdldCwgJ2xvY2FsZScsIHZhbCk7XG4gICAgdGFyZ2V0LiRmb3JjZVVwZGF0ZSgpO1xuICB9LCB7IGltbWVkaWF0ZTogdHJ1ZSB9KVxufTtcblxucHJvdG90eXBlQWNjZXNzb3JzLnZtLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3ZtIH07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5tZXNzYWdlcy5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBsb29zZUNsb25lKHRoaXMuX2dldE1lc3NhZ2VzKCkpIH07XG5wcm90b3R5cGVBY2Nlc3NvcnMuZGF0ZVRpbWVGb3JtYXRzLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGxvb3NlQ2xvbmUodGhpcy5fZ2V0RGF0ZVRpbWVGb3JtYXRzKCkpIH07XG5wcm90b3R5cGVBY2Nlc3NvcnMubnVtYmVyRm9ybWF0cy5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBsb29zZUNsb25lKHRoaXMuX2dldE51bWJlckZvcm1hdHMoKSkgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy5hdmFpbGFibGVMb2NhbGVzLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMubWVzc2FnZXMpLnNvcnQoKSB9O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMubG9jYWxlLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3ZtLmxvY2FsZSB9O1xucHJvdG90eXBlQWNjZXNzb3JzLmxvY2FsZS5zZXQgPSBmdW5jdGlvbiAobG9jYWxlKSB7XG4gIHRoaXMuX3ZtLiRzZXQodGhpcy5fdm0sICdsb2NhbGUnLCBsb2NhbGUpO1xufTtcblxucHJvdG90eXBlQWNjZXNzb3JzLmZhbGxiYWNrTG9jYWxlLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3ZtLmZhbGxiYWNrTG9jYWxlIH07XG5wcm90b3R5cGVBY2Nlc3NvcnMuZmFsbGJhY2tMb2NhbGUuc2V0ID0gZnVuY3Rpb24gKGxvY2FsZSkge1xuICB0aGlzLl9sb2NhbGVDaGFpbkNhY2hlID0ge307XG4gIHRoaXMuX3ZtLiRzZXQodGhpcy5fdm0sICdmYWxsYmFja0xvY2FsZScsIGxvY2FsZSk7XG59O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMuZm9ybWF0RmFsbGJhY2tNZXNzYWdlcy5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9mb3JtYXRGYWxsYmFja01lc3NhZ2VzIH07XG5wcm90b3R5cGVBY2Nlc3NvcnMuZm9ybWF0RmFsbGJhY2tNZXNzYWdlcy5zZXQgPSBmdW5jdGlvbiAoZmFsbGJhY2spIHsgdGhpcy5fZm9ybWF0RmFsbGJhY2tNZXNzYWdlcyA9IGZhbGxiYWNrOyB9O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMubWlzc2luZy5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9taXNzaW5nIH07XG5wcm90b3R5cGVBY2Nlc3NvcnMubWlzc2luZy5zZXQgPSBmdW5jdGlvbiAoaGFuZGxlcikgeyB0aGlzLl9taXNzaW5nID0gaGFuZGxlcjsgfTtcblxucHJvdG90eXBlQWNjZXNzb3JzLmZvcm1hdHRlci5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9mb3JtYXR0ZXIgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy5mb3JtYXR0ZXIuc2V0ID0gZnVuY3Rpb24gKGZvcm1hdHRlcikgeyB0aGlzLl9mb3JtYXR0ZXIgPSBmb3JtYXR0ZXI7IH07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5zaWxlbnRUcmFuc2xhdGlvbldhcm4uZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fc2lsZW50VHJhbnNsYXRpb25XYXJuIH07XG5wcm90b3R5cGVBY2Nlc3NvcnMuc2lsZW50VHJhbnNsYXRpb25XYXJuLnNldCA9IGZ1bmN0aW9uIChzaWxlbnQpIHsgdGhpcy5fc2lsZW50VHJhbnNsYXRpb25XYXJuID0gc2lsZW50OyB9O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMuc2lsZW50RmFsbGJhY2tXYXJuLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3NpbGVudEZhbGxiYWNrV2FybiB9O1xucHJvdG90eXBlQWNjZXNzb3JzLnNpbGVudEZhbGxiYWNrV2Fybi5zZXQgPSBmdW5jdGlvbiAoc2lsZW50KSB7IHRoaXMuX3NpbGVudEZhbGxiYWNrV2FybiA9IHNpbGVudDsgfTtcblxucHJvdG90eXBlQWNjZXNzb3JzLnByZXNlcnZlRGlyZWN0aXZlQ29udGVudC5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9wcmVzZXJ2ZURpcmVjdGl2ZUNvbnRlbnQgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy5wcmVzZXJ2ZURpcmVjdGl2ZUNvbnRlbnQuc2V0ID0gZnVuY3Rpb24gKHByZXNlcnZlKSB7IHRoaXMuX3ByZXNlcnZlRGlyZWN0aXZlQ29udGVudCA9IHByZXNlcnZlOyB9O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMud2Fybkh0bWxJbk1lc3NhZ2UuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fd2Fybkh0bWxJbk1lc3NhZ2UgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy53YXJuSHRtbEluTWVzc2FnZS5zZXQgPSBmdW5jdGlvbiAobGV2ZWwpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgb3JnTGV2ZWwgPSB0aGlzLl93YXJuSHRtbEluTWVzc2FnZTtcbiAgdGhpcy5fd2Fybkh0bWxJbk1lc3NhZ2UgPSBsZXZlbDtcbiAgaWYgKG9yZ0xldmVsICE9PSBsZXZlbCAmJiAobGV2ZWwgPT09ICd3YXJuJyB8fCBsZXZlbCA9PT0gJ2Vycm9yJykpIHtcbiAgICB2YXIgbWVzc2FnZXMgPSB0aGlzLl9nZXRNZXNzYWdlcygpO1xuICAgIE9iamVjdC5rZXlzKG1lc3NhZ2VzKS5mb3JFYWNoKGZ1bmN0aW9uIChsb2NhbGUpIHtcbiAgICAgIHRoaXMkMS5fY2hlY2tMb2NhbGVNZXNzYWdlKGxvY2FsZSwgdGhpcyQxLl93YXJuSHRtbEluTWVzc2FnZSwgbWVzc2FnZXNbbG9jYWxlXSk7XG4gICAgfSk7XG4gIH1cbn07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5wb3N0VHJhbnNsYXRpb24uZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fcG9zdFRyYW5zbGF0aW9uIH07XG5wcm90b3R5cGVBY2Nlc3NvcnMucG9zdFRyYW5zbGF0aW9uLnNldCA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7IHRoaXMuX3Bvc3RUcmFuc2xhdGlvbiA9IGhhbmRsZXI7IH07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9nZXRNZXNzYWdlcyA9IGZ1bmN0aW9uIF9nZXRNZXNzYWdlcyAoKSB7IHJldHVybiB0aGlzLl92bS5tZXNzYWdlcyB9O1xuVnVlSTE4bi5wcm90b3R5cGUuX2dldERhdGVUaW1lRm9ybWF0cyA9IGZ1bmN0aW9uIF9nZXREYXRlVGltZUZvcm1hdHMgKCkgeyByZXR1cm4gdGhpcy5fdm0uZGF0ZVRpbWVGb3JtYXRzIH07XG5WdWVJMThuLnByb3RvdHlwZS5fZ2V0TnVtYmVyRm9ybWF0cyA9IGZ1bmN0aW9uIF9nZXROdW1iZXJGb3JtYXRzICgpIHsgcmV0dXJuIHRoaXMuX3ZtLm51bWJlckZvcm1hdHMgfTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX3dhcm5EZWZhdWx0ID0gZnVuY3Rpb24gX3dhcm5EZWZhdWx0IChsb2NhbGUsIGtleSwgcmVzdWx0LCB2bSwgdmFsdWVzLCBpbnRlcnBvbGF0ZU1vZGUpIHtcbiAgaWYgKCFpc051bGwocmVzdWx0KSkgeyByZXR1cm4gcmVzdWx0IH1cbiAgaWYgKHRoaXMuX21pc3NpbmcpIHtcbiAgICB2YXIgbWlzc2luZ1JldCA9IHRoaXMuX21pc3NpbmcuYXBwbHkobnVsbCwgW2xvY2FsZSwga2V5LCB2bSwgdmFsdWVzXSk7XG4gICAgaWYgKHR5cGVvZiBtaXNzaW5nUmV0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG1pc3NpbmdSZXRcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXRoaXMuX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuKGtleSkpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwiQ2Fubm90IHRyYW5zbGF0ZSB0aGUgdmFsdWUgb2Yga2V5cGF0aCAnXCIgKyBrZXkgKyBcIicuIFwiICtcbiAgICAgICAgJ1VzZSB0aGUgdmFsdWUgb2Yga2V5cGF0aCBhcyBkZWZhdWx0LidcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMuX2Zvcm1hdEZhbGxiYWNrTWVzc2FnZXMpIHtcbiAgICB2YXIgcGFyc2VkQXJncyA9IHBhcnNlQXJncy5hcHBseSh2b2lkIDAsIHZhbHVlcyk7XG4gICAgcmV0dXJuIHRoaXMuX3JlbmRlcihrZXksIGludGVycG9sYXRlTW9kZSwgcGFyc2VkQXJncy5wYXJhbXMsIGtleSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ga2V5XG4gIH1cbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9pc0ZhbGxiYWNrUm9vdCA9IGZ1bmN0aW9uIF9pc0ZhbGxiYWNrUm9vdCAodmFsKSB7XG4gIHJldHVybiAhdmFsICYmICFpc051bGwodGhpcy5fcm9vdCkgJiYgdGhpcy5fZmFsbGJhY2tSb290XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5faXNTaWxlbnRGYWxsYmFja1dhcm4gPSBmdW5jdGlvbiBfaXNTaWxlbnRGYWxsYmFja1dhcm4gKGtleSkge1xuICByZXR1cm4gdGhpcy5fc2lsZW50RmFsbGJhY2tXYXJuIGluc3RhbmNlb2YgUmVnRXhwXG4gICAgPyB0aGlzLl9zaWxlbnRGYWxsYmFja1dhcm4udGVzdChrZXkpXG4gICAgOiB0aGlzLl9zaWxlbnRGYWxsYmFja1dhcm5cbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9pc1NpbGVudEZhbGxiYWNrID0gZnVuY3Rpb24gX2lzU2lsZW50RmFsbGJhY2sgKGxvY2FsZSwga2V5KSB7XG4gIHJldHVybiB0aGlzLl9pc1NpbGVudEZhbGxiYWNrV2FybihrZXkpICYmICh0aGlzLl9pc0ZhbGxiYWNrUm9vdCgpIHx8IGxvY2FsZSAhPT0gdGhpcy5mYWxsYmFja0xvY2FsZSlcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9pc1NpbGVudFRyYW5zbGF0aW9uV2FybiA9IGZ1bmN0aW9uIF9pc1NpbGVudFRyYW5zbGF0aW9uV2FybiAoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9zaWxlbnRUcmFuc2xhdGlvbldhcm4gaW5zdGFuY2VvZiBSZWdFeHBcbiAgICA/IHRoaXMuX3NpbGVudFRyYW5zbGF0aW9uV2Fybi50ZXN0KGtleSlcbiAgICA6IHRoaXMuX3NpbGVudFRyYW5zbGF0aW9uV2FyblxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX2ludGVycG9sYXRlID0gZnVuY3Rpb24gX2ludGVycG9sYXRlIChcbiAgbG9jYWxlLFxuICBtZXNzYWdlLFxuICBrZXksXG4gIGhvc3QsXG4gIGludGVycG9sYXRlTW9kZSxcbiAgdmFsdWVzLFxuICB2aXNpdGVkTGlua1N0YWNrXG4pIHtcbiAgaWYgKCFtZXNzYWdlKSB7IHJldHVybiBudWxsIH1cblxuICB2YXIgcGF0aFJldCA9IHRoaXMuX3BhdGguZ2V0UGF0aFZhbHVlKG1lc3NhZ2UsIGtleSk7XG4gIGlmIChBcnJheS5pc0FycmF5KHBhdGhSZXQpIHx8IGlzUGxhaW5PYmplY3QocGF0aFJldCkpIHsgcmV0dXJuIHBhdGhSZXQgfVxuXG4gIHZhciByZXQ7XG4gIGlmIChpc051bGwocGF0aFJldCkpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG1lc3NhZ2UpKSB7XG4gICAgICByZXQgPSBtZXNzYWdlW2tleV07XG4gICAgICBpZiAodHlwZW9mIHJldCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXRoaXMuX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuKGtleSkgJiYgIXRoaXMuX2lzU2lsZW50RmFsbGJhY2sobG9jYWxlLCBrZXkpKSB7XG4gICAgICAgICAgd2FybigoXCJWYWx1ZSBvZiBrZXkgJ1wiICsga2V5ICsgXCInIGlzIG5vdCBhIHN0cmluZyFcIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHR5cGVvZiBwYXRoUmV0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0ID0gcGF0aFJldDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXRoaXMuX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuKGtleSkgJiYgIXRoaXMuX2lzU2lsZW50RmFsbGJhY2sobG9jYWxlLCBrZXkpKSB7XG4gICAgICAgIHdhcm4oKFwiVmFsdWUgb2Yga2V5ICdcIiArIGtleSArIFwiJyBpcyBub3QgYSBzdHJpbmchXCIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgbGlua3Mgd2l0aGluIHRoZSB0cmFuc2xhdGVkIHN0cmluZ1xuICBpZiAocmV0LmluZGV4T2YoJ0A6JykgPj0gMCB8fCByZXQuaW5kZXhPZignQC4nKSA+PSAwKSB7XG4gICAgcmV0ID0gdGhpcy5fbGluayhsb2NhbGUsIG1lc3NhZ2UsIHJldCwgaG9zdCwgJ3JhdycsIHZhbHVlcywgdmlzaXRlZExpbmtTdGFjayk7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fcmVuZGVyKHJldCwgaW50ZXJwb2xhdGVNb2RlLCB2YWx1ZXMsIGtleSlcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9saW5rID0gZnVuY3Rpb24gX2xpbmsgKFxuICBsb2NhbGUsXG4gIG1lc3NhZ2UsXG4gIHN0cixcbiAgaG9zdCxcbiAgaW50ZXJwb2xhdGVNb2RlLFxuICB2YWx1ZXMsXG4gIHZpc2l0ZWRMaW5rU3RhY2tcbikge1xuICB2YXIgcmV0ID0gc3RyO1xuXG4gIC8vIE1hdGNoIGFsbCB0aGUgbGlua3Mgd2l0aGluIHRoZSBsb2NhbFxuICAvLyBXZSBhcmUgZ29pbmcgdG8gcmVwbGFjZSBlYWNoIG9mXG4gIC8vIHRoZW0gd2l0aCBpdHMgdHJhbnNsYXRpb25cbiAgdmFyIG1hdGNoZXMgPSByZXQubWF0Y2gobGlua0tleU1hdGNoZXIpO1xuICBmb3IgKHZhciBpZHggaW4gbWF0Y2hlcykge1xuICAgIC8vIGllIGNvbXBhdGlibGU6IGZpbHRlciBjdXN0b20gYXJyYXlcbiAgICAvLyBwcm90b3R5cGUgbWV0aG9kXG4gICAgaWYgKCFtYXRjaGVzLmhhc093blByb3BlcnR5KGlkeCkpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIHZhciBsaW5rID0gbWF0Y2hlc1tpZHhdO1xuICAgIHZhciBsaW5rS2V5UHJlZml4TWF0Y2hlcyA9IGxpbmsubWF0Y2gobGlua0tleVByZWZpeE1hdGNoZXIpO1xuICAgIHZhciBsaW5rUHJlZml4ID0gbGlua0tleVByZWZpeE1hdGNoZXNbMF07XG4gICAgICB2YXIgZm9ybWF0dGVyTmFtZSA9IGxpbmtLZXlQcmVmaXhNYXRjaGVzWzFdO1xuXG4gICAgLy8gUmVtb3ZlIHRoZSBsZWFkaW5nIEA6LCBALmNhc2U6IGFuZCB0aGUgYnJhY2tldHNcbiAgICB2YXIgbGlua1BsYWNlaG9sZGVyID0gbGluay5yZXBsYWNlKGxpbmtQcmVmaXgsICcnKS5yZXBsYWNlKGJyYWNrZXRzTWF0Y2hlciwgJycpO1xuXG4gICAgaWYgKGluY2x1ZGVzKHZpc2l0ZWRMaW5rU3RhY2ssIGxpbmtQbGFjZWhvbGRlcikpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oKFwiQ2lyY3VsYXIgcmVmZXJlbmNlIGZvdW5kLiBcXFwiXCIgKyBsaW5rICsgXCJcXFwiIGlzIGFscmVhZHkgdmlzaXRlZCBpbiB0aGUgY2hhaW4gb2YgXCIgKyAodmlzaXRlZExpbmtTdGFjay5yZXZlcnNlKCkuam9pbignIDwtICcpKSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldFxuICAgIH1cbiAgICB2aXNpdGVkTGlua1N0YWNrLnB1c2gobGlua1BsYWNlaG9sZGVyKTtcblxuICAgIC8vIFRyYW5zbGF0ZSB0aGUgbGlua1xuICAgIHZhciB0cmFuc2xhdGVkID0gdGhpcy5faW50ZXJwb2xhdGUoXG4gICAgICBsb2NhbGUsIG1lc3NhZ2UsIGxpbmtQbGFjZWhvbGRlciwgaG9zdCxcbiAgICAgIGludGVycG9sYXRlTW9kZSA9PT0gJ3JhdycgPyAnc3RyaW5nJyA6IGludGVycG9sYXRlTW9kZSxcbiAgICAgIGludGVycG9sYXRlTW9kZSA9PT0gJ3JhdycgPyB1bmRlZmluZWQgOiB2YWx1ZXMsXG4gICAgICB2aXNpdGVkTGlua1N0YWNrXG4gICAgKTtcblxuICAgIGlmICh0aGlzLl9pc0ZhbGxiYWNrUm9vdCh0cmFuc2xhdGVkKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXRoaXMuX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuKGxpbmtQbGFjZWhvbGRlcikpIHtcbiAgICAgICAgd2FybigoXCJGYWxsIGJhY2sgdG8gdHJhbnNsYXRlIHRoZSBsaW5rIHBsYWNlaG9sZGVyICdcIiArIGxpbmtQbGFjZWhvbGRlciArIFwiJyB3aXRoIHJvb3QgbG9jYWxlLlwiKSk7XG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICghdGhpcy5fcm9vdCkgeyB0aHJvdyBFcnJvcigndW5leHBlY3RlZCBlcnJvcicpIH1cbiAgICAgIHZhciByb290ID0gdGhpcy5fcm9vdC4kaTE4bjtcbiAgICAgIHRyYW5zbGF0ZWQgPSByb290Ll90cmFuc2xhdGUoXG4gICAgICAgIHJvb3QuX2dldE1lc3NhZ2VzKCksIHJvb3QubG9jYWxlLCByb290LmZhbGxiYWNrTG9jYWxlLFxuICAgICAgICBsaW5rUGxhY2Vob2xkZXIsIGhvc3QsIGludGVycG9sYXRlTW9kZSwgdmFsdWVzXG4gICAgICApO1xuICAgIH1cbiAgICB0cmFuc2xhdGVkID0gdGhpcy5fd2FybkRlZmF1bHQoXG4gICAgICBsb2NhbGUsIGxpbmtQbGFjZWhvbGRlciwgdHJhbnNsYXRlZCwgaG9zdCxcbiAgICAgIEFycmF5LmlzQXJyYXkodmFsdWVzKSA/IHZhbHVlcyA6IFt2YWx1ZXNdLFxuICAgICAgaW50ZXJwb2xhdGVNb2RlXG4gICAgKTtcblxuICAgIGlmICh0aGlzLl9tb2RpZmllcnMuaGFzT3duUHJvcGVydHkoZm9ybWF0dGVyTmFtZSkpIHtcbiAgICAgIHRyYW5zbGF0ZWQgPSB0aGlzLl9tb2RpZmllcnNbZm9ybWF0dGVyTmFtZV0odHJhbnNsYXRlZCk7XG4gICAgfSBlbHNlIGlmIChkZWZhdWx0TW9kaWZpZXJzLmhhc093blByb3BlcnR5KGZvcm1hdHRlck5hbWUpKSB7XG4gICAgICB0cmFuc2xhdGVkID0gZGVmYXVsdE1vZGlmaWVyc1tmb3JtYXR0ZXJOYW1lXSh0cmFuc2xhdGVkKTtcbiAgICB9XG5cbiAgICB2aXNpdGVkTGlua1N0YWNrLnBvcCgpO1xuXG4gICAgLy8gUmVwbGFjZSB0aGUgbGluayB3aXRoIHRoZSB0cmFuc2xhdGVkXG4gICAgcmV0ID0gIXRyYW5zbGF0ZWQgPyByZXQgOiByZXQucmVwbGFjZShsaW5rLCB0cmFuc2xhdGVkKTtcbiAgfVxuXG4gIHJldHVybiByZXRcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9yZW5kZXIgPSBmdW5jdGlvbiBfcmVuZGVyIChtZXNzYWdlLCBpbnRlcnBvbGF0ZU1vZGUsIHZhbHVlcywgcGF0aCkge1xuICB2YXIgcmV0ID0gdGhpcy5fZm9ybWF0dGVyLmludGVycG9sYXRlKG1lc3NhZ2UsIHZhbHVlcywgcGF0aCk7XG5cbiAgLy8gSWYgdGhlIGN1c3RvbSBmb3JtYXR0ZXIgcmVmdXNlcyB0byB3b3JrIC0gYXBwbHkgdGhlIGRlZmF1bHQgb25lXG4gIGlmICghcmV0KSB7XG4gICAgcmV0ID0gZGVmYXVsdEZvcm1hdHRlci5pbnRlcnBvbGF0ZShtZXNzYWdlLCB2YWx1ZXMsIHBhdGgpO1xuICB9XG5cbiAgLy8gaWYgaW50ZXJwb2xhdGVNb2RlIGlzICoqbm90KiogJ3N0cmluZycgKCdyb3cnKSxcbiAgLy8gcmV0dXJuIHRoZSBjb21waWxlZCBkYXRhIChlLmcuIFsnZm9vJywgVk5vZGUsICdiYXInXSkgd2l0aCBmb3JtYXR0ZXJcbiAgcmV0dXJuIGludGVycG9sYXRlTW9kZSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHJldCAhPT0gJ3N0cmluZycgPyByZXQuam9pbignJykgOiByZXRcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9hcHBlbmRJdGVtVG9DaGFpbiA9IGZ1bmN0aW9uIF9hcHBlbmRJdGVtVG9DaGFpbiAoY2hhaW4sIGl0ZW0sIGJsb2Nrcykge1xuICB2YXIgZm9sbG93ID0gZmFsc2U7XG4gIGlmICghaW5jbHVkZXMoY2hhaW4sIGl0ZW0pKSB7XG4gICAgZm9sbG93ID0gdHJ1ZTtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgZm9sbG93ID0gaXRlbVtpdGVtLmxlbmd0aCAtIDFdICE9PSAnISc7XG4gICAgICBpdGVtID0gaXRlbS5yZXBsYWNlKC8hL2csICcnKTtcbiAgICAgIGNoYWluLnB1c2goaXRlbSk7XG4gICAgICBpZiAoYmxvY2tzICYmIGJsb2Nrc1tpdGVtXSkge1xuICAgICAgICBmb2xsb3cgPSBibG9ja3NbaXRlbV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmb2xsb3dcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9hcHBlbmRMb2NhbGVUb0NoYWluID0gZnVuY3Rpb24gX2FwcGVuZExvY2FsZVRvQ2hhaW4gKGNoYWluLCBsb2NhbGUsIGJsb2Nrcykge1xuICB2YXIgZm9sbG93O1xuICB2YXIgdG9rZW5zID0gbG9jYWxlLnNwbGl0KCctJyk7XG4gIGRvIHtcbiAgICB2YXIgaXRlbSA9IHRva2Vucy5qb2luKCctJyk7XG4gICAgZm9sbG93ID0gdGhpcy5fYXBwZW5kSXRlbVRvQ2hhaW4oY2hhaW4sIGl0ZW0sIGJsb2Nrcyk7XG4gICAgdG9rZW5zLnNwbGljZSgtMSwgMSk7XG4gIH0gd2hpbGUgKHRva2Vucy5sZW5ndGggJiYgKGZvbGxvdyA9PT0gdHJ1ZSkpXG4gIHJldHVybiBmb2xsb3dcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9hcHBlbmRCbG9ja1RvQ2hhaW4gPSBmdW5jdGlvbiBfYXBwZW5kQmxvY2tUb0NoYWluIChjaGFpbiwgYmxvY2ssIGJsb2Nrcykge1xuICB2YXIgZm9sbG93ID0gdHJ1ZTtcbiAgZm9yICh2YXIgaSA9IDA7IChpIDwgYmxvY2subGVuZ3RoKSAmJiAodHlwZW9mIGZvbGxvdyA9PT0gJ2Jvb2xlYW4nKTsgaSsrKSB7XG4gICAgdmFyIGxvY2FsZSA9IGJsb2NrW2ldO1xuICAgIGZvbGxvdyA9IHRoaXMuX2FwcGVuZExvY2FsZVRvQ2hhaW4oY2hhaW4sIGxvY2FsZSwgYmxvY2tzKTtcbiAgfVxuICByZXR1cm4gZm9sbG93XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fZ2V0TG9jYWxlQ2hhaW4gPSBmdW5jdGlvbiBfZ2V0TG9jYWxlQ2hhaW4gKHN0YXJ0LCBmYWxsYmFja0xvY2FsZSkge1xuICBpZiAoc3RhcnQgPT09ICcnKSB7IHJldHVybiBbXSB9XG5cbiAgaWYgKCF0aGlzLl9sb2NhbGVDaGFpbkNhY2hlKSB7XG4gICAgdGhpcy5fbG9jYWxlQ2hhaW5DYWNoZSA9IHt9O1xuICB9XG5cbiAgdmFyIGNoYWluID0gdGhpcy5fbG9jYWxlQ2hhaW5DYWNoZVtzdGFydF07XG4gIGlmICghY2hhaW4pIHtcbiAgICBpZiAoIWZhbGxiYWNrTG9jYWxlKSB7XG4gICAgICBmYWxsYmFja0xvY2FsZSA9IHRoaXMuZmFsbGJhY2tMb2NhbGU7XG4gICAgfVxuICAgIGNoYWluID0gW107XG5cbiAgICAvLyBmaXJzdCBibG9jayBkZWZpbmVkIGJ5IHN0YXJ0XG4gICAgdmFyIGJsb2NrID0gW3N0YXJ0XTtcblxuICAgIC8vIHdoaWxlIGFueSBpbnRlcnZlbmluZyBibG9jayBmb3VuZFxuICAgIHdoaWxlIChBcnJheS5pc0FycmF5KGJsb2NrKSkge1xuICAgICAgYmxvY2sgPSB0aGlzLl9hcHBlbmRCbG9ja1RvQ2hhaW4oXG4gICAgICAgIGNoYWluLFxuICAgICAgICBibG9jayxcbiAgICAgICAgZmFsbGJhY2tMb2NhbGVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gbGFzdCBibG9jayBkZWZpbmVkIGJ5IGRlZmF1bHRcbiAgICB2YXIgZGVmYXVsdHM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmFsbGJhY2tMb2NhbGUpKSB7XG4gICAgICBkZWZhdWx0cyA9IGZhbGxiYWNrTG9jYWxlO1xuICAgIH0gZWxzZSBpZiAoZmFsbGJhY2tMb2NhbGUgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgIGlmIChmYWxsYmFja0xvY2FsZVsnZGVmYXVsdCddKSB7XG4gICAgICAgIGRlZmF1bHRzID0gZmFsbGJhY2tMb2NhbGVbJ2RlZmF1bHQnXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRzID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGVmYXVsdHMgPSBmYWxsYmFja0xvY2FsZTtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGRlZmF1bHRzIHRvIGFycmF5XG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJsb2NrID0gW2RlZmF1bHRzXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmxvY2sgPSBkZWZhdWx0cztcbiAgICB9XG4gICAgaWYgKGJsb2NrKSB7XG4gICAgICB0aGlzLl9hcHBlbmRCbG9ja1RvQ2hhaW4oXG4gICAgICAgIGNoYWluLFxuICAgICAgICBibG9jayxcbiAgICAgICAgbnVsbFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fbG9jYWxlQ2hhaW5DYWNoZVtzdGFydF0gPSBjaGFpbjtcbiAgfVxuICByZXR1cm4gY2hhaW5cbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl90cmFuc2xhdGUgPSBmdW5jdGlvbiBfdHJhbnNsYXRlIChcbiAgbWVzc2FnZXMsXG4gIGxvY2FsZSxcbiAgZmFsbGJhY2ssXG4gIGtleSxcbiAgaG9zdCxcbiAgaW50ZXJwb2xhdGVNb2RlLFxuICBhcmdzXG4pIHtcbiAgdmFyIGNoYWluID0gdGhpcy5fZ2V0TG9jYWxlQ2hhaW4obG9jYWxlLCBmYWxsYmFjayk7XG4gIHZhciByZXM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhaW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc3RlcCA9IGNoYWluW2ldO1xuICAgIHJlcyA9XG4gICAgICB0aGlzLl9pbnRlcnBvbGF0ZShzdGVwLCBtZXNzYWdlc1tzdGVwXSwga2V5LCBob3N0LCBpbnRlcnBvbGF0ZU1vZGUsIGFyZ3MsIFtrZXldKTtcbiAgICBpZiAoIWlzTnVsbChyZXMpKSB7XG4gICAgICBpZiAoc3RlcCAhPT0gbG9jYWxlICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXRoaXMuX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuKGtleSkgJiYgIXRoaXMuX2lzU2lsZW50RmFsbGJhY2tXYXJuKGtleSkpIHtcbiAgICAgICAgd2FybigoXCJGYWxsIGJhY2sgdG8gdHJhbnNsYXRlIHRoZSBrZXlwYXRoICdcIiArIGtleSArIFwiJyB3aXRoICdcIiArIHN0ZXAgKyBcIicgbG9jYWxlLlwiKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fdCA9IGZ1bmN0aW9uIF90IChrZXksIF9sb2NhbGUsIG1lc3NhZ2VzLCBob3N0KSB7XG4gICAgdmFyIHJlZjtcblxuICAgIHZhciB2YWx1ZXMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDQ7XG4gICAgd2hpbGUgKCBsZW4tLSA+IDAgKSB2YWx1ZXNbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyA0IF07XG4gIGlmICgha2V5KSB7IHJldHVybiAnJyB9XG5cbiAgdmFyIHBhcnNlZEFyZ3MgPSBwYXJzZUFyZ3MuYXBwbHkodm9pZCAwLCB2YWx1ZXMpO1xuICB2YXIgbG9jYWxlID0gcGFyc2VkQXJncy5sb2NhbGUgfHwgX2xvY2FsZTtcblxuICB2YXIgcmV0ID0gdGhpcy5fdHJhbnNsYXRlKFxuICAgIG1lc3NhZ2VzLCBsb2NhbGUsIHRoaXMuZmFsbGJhY2tMb2NhbGUsIGtleSxcbiAgICBob3N0LCAnc3RyaW5nJywgcGFyc2VkQXJncy5wYXJhbXNcbiAgKTtcbiAgaWYgKHRoaXMuX2lzRmFsbGJhY2tSb290KHJldCkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGhpcy5faXNTaWxlbnRUcmFuc2xhdGlvbldhcm4oa2V5KSAmJiAhdGhpcy5faXNTaWxlbnRGYWxsYmFja1dhcm4oa2V5KSkge1xuICAgICAgd2FybigoXCJGYWxsIGJhY2sgdG8gdHJhbnNsYXRlIHRoZSBrZXlwYXRoICdcIiArIGtleSArIFwiJyB3aXRoIHJvb3QgbG9jYWxlLlwiKSk7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghdGhpcy5fcm9vdCkgeyB0aHJvdyBFcnJvcigndW5leHBlY3RlZCBlcnJvcicpIH1cbiAgICByZXR1cm4gKHJlZiA9IHRoaXMuX3Jvb3QpLiR0LmFwcGx5KHJlZiwgWyBrZXkgXS5jb25jYXQoIHZhbHVlcyApKVxuICB9IGVsc2Uge1xuICAgIHJldCA9IHRoaXMuX3dhcm5EZWZhdWx0KGxvY2FsZSwga2V5LCByZXQsIGhvc3QsIHZhbHVlcywgJ3N0cmluZycpO1xuICAgIGlmICh0aGlzLl9wb3N0VHJhbnNsYXRpb24gJiYgcmV0ICE9PSBudWxsICYmIHJldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXQgPSB0aGlzLl9wb3N0VHJhbnNsYXRpb24ocmV0LCBrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLnQgPSBmdW5jdGlvbiB0IChrZXkpIHtcbiAgICB2YXIgcmVmO1xuXG4gICAgdmFyIHZhbHVlcyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoIGxlbi0tID4gMCApIHZhbHVlc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcbiAgcmV0dXJuIChyZWYgPSB0aGlzKS5fdC5hcHBseShyZWYsIFsga2V5LCB0aGlzLmxvY2FsZSwgdGhpcy5fZ2V0TWVzc2FnZXMoKSwgbnVsbCBdLmNvbmNhdCggdmFsdWVzICkpXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5faSA9IGZ1bmN0aW9uIF9pIChrZXksIGxvY2FsZSwgbWVzc2FnZXMsIGhvc3QsIHZhbHVlcykge1xuICB2YXIgcmV0ID1cbiAgICB0aGlzLl90cmFuc2xhdGUobWVzc2FnZXMsIGxvY2FsZSwgdGhpcy5mYWxsYmFja0xvY2FsZSwga2V5LCBob3N0LCAncmF3JywgdmFsdWVzKTtcbiAgaWYgKHRoaXMuX2lzRmFsbGJhY2tSb290KHJldCkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGhpcy5faXNTaWxlbnRUcmFuc2xhdGlvbldhcm4oa2V5KSkge1xuICAgICAgd2FybigoXCJGYWxsIGJhY2sgdG8gaW50ZXJwb2xhdGUgdGhlIGtleXBhdGggJ1wiICsga2V5ICsgXCInIHdpdGggcm9vdCBsb2NhbGUuXCIpKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9yb290KSB7IHRocm93IEVycm9yKCd1bmV4cGVjdGVkIGVycm9yJykgfVxuICAgIHJldHVybiB0aGlzLl9yb290LiRpMThuLmkoa2V5LCBsb2NhbGUsIHZhbHVlcylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5fd2FybkRlZmF1bHQobG9jYWxlLCBrZXksIHJldCwgaG9zdCwgW3ZhbHVlc10sICdyYXcnKVxuICB9XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5pID0gZnVuY3Rpb24gaSAoa2V5LCBsb2NhbGUsIHZhbHVlcykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFrZXkpIHsgcmV0dXJuICcnIH1cblxuICBpZiAodHlwZW9mIGxvY2FsZSAhPT0gJ3N0cmluZycpIHtcbiAgICBsb2NhbGUgPSB0aGlzLmxvY2FsZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9pKGtleSwgbG9jYWxlLCB0aGlzLl9nZXRNZXNzYWdlcygpLCBudWxsLCB2YWx1ZXMpXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fdGMgPSBmdW5jdGlvbiBfdGMgKFxuICBrZXksXG4gIF9sb2NhbGUsXG4gIG1lc3NhZ2VzLFxuICBob3N0LFxuICBjaG9pY2Vcbikge1xuICAgIHZhciByZWY7XG5cbiAgICB2YXIgdmFsdWVzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSA1O1xuICAgIHdoaWxlICggbGVuLS0gPiAwICkgdmFsdWVzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgNSBdO1xuICBpZiAoIWtleSkgeyByZXR1cm4gJycgfVxuICBpZiAoY2hvaWNlID09PSB1bmRlZmluZWQpIHtcbiAgICBjaG9pY2UgPSAxO1xuICB9XG5cbiAgdmFyIHByZWRlZmluZWQgPSB7ICdjb3VudCc6IGNob2ljZSwgJ24nOiBjaG9pY2UgfTtcbiAgdmFyIHBhcnNlZEFyZ3MgPSBwYXJzZUFyZ3MuYXBwbHkodm9pZCAwLCB2YWx1ZXMpO1xuICBwYXJzZWRBcmdzLnBhcmFtcyA9IE9iamVjdC5hc3NpZ24ocHJlZGVmaW5lZCwgcGFyc2VkQXJncy5wYXJhbXMpO1xuICB2YWx1ZXMgPSBwYXJzZWRBcmdzLmxvY2FsZSA9PT0gbnVsbCA/IFtwYXJzZWRBcmdzLnBhcmFtc10gOiBbcGFyc2VkQXJncy5sb2NhbGUsIHBhcnNlZEFyZ3MucGFyYW1zXTtcbiAgcmV0dXJuIHRoaXMuZmV0Y2hDaG9pY2UoKHJlZiA9IHRoaXMpLl90LmFwcGx5KHJlZiwgWyBrZXksIF9sb2NhbGUsIG1lc3NhZ2VzLCBob3N0IF0uY29uY2F0KCB2YWx1ZXMgKSksIGNob2ljZSlcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLmZldGNoQ2hvaWNlID0gZnVuY3Rpb24gZmV0Y2hDaG9pY2UgKG1lc3NhZ2UsIGNob2ljZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFtZXNzYWdlICYmIHR5cGVvZiBtZXNzYWdlICE9PSAnc3RyaW5nJykgeyByZXR1cm4gbnVsbCB9XG4gIHZhciBjaG9pY2VzID0gbWVzc2FnZS5zcGxpdCgnfCcpO1xuXG4gIGNob2ljZSA9IHRoaXMuZ2V0Q2hvaWNlSW5kZXgoY2hvaWNlLCBjaG9pY2VzLmxlbmd0aCk7XG4gIGlmICghY2hvaWNlc1tjaG9pY2VdKSB7IHJldHVybiBtZXNzYWdlIH1cbiAgcmV0dXJuIGNob2ljZXNbY2hvaWNlXS50cmltKClcbn07XG5cbi8qKlxuICogQHBhcmFtIGNob2ljZSB7bnVtYmVyfSBhIGNob2ljZSBpbmRleCBnaXZlbiBieSB0aGUgaW5wdXQgdG8gJHRjOiBgJHRjKCdwYXRoLnRvLnJ1bGUnLCBjaG9pY2VJbmRleClgXG4gKiBAcGFyYW0gY2hvaWNlc0xlbmd0aCB7bnVtYmVyfSBhbiBvdmVyYWxsIGFtb3VudCBvZiBhdmFpbGFibGUgY2hvaWNlc1xuICogQHJldHVybnMgYSBmaW5hbCBjaG9pY2UgaW5kZXhcbiovXG5WdWVJMThuLnByb3RvdHlwZS5nZXRDaG9pY2VJbmRleCA9IGZ1bmN0aW9uIGdldENob2ljZUluZGV4IChjaG9pY2UsIGNob2ljZXNMZW5ndGgpIHtcbiAgLy8gRGVmYXVsdCAob2xkKSBnZXRDaG9pY2VJbmRleCBpbXBsZW1lbnRhdGlvbiAtIGVuZ2xpc2gtY29tcGF0aWJsZVxuICB2YXIgZGVmYXVsdEltcGwgPSBmdW5jdGlvbiAoX2Nob2ljZSwgX2Nob2ljZXNMZW5ndGgpIHtcbiAgICBfY2hvaWNlID0gTWF0aC5hYnMoX2Nob2ljZSk7XG5cbiAgICBpZiAoX2Nob2ljZXNMZW5ndGggPT09IDIpIHtcbiAgICAgIHJldHVybiBfY2hvaWNlXG4gICAgICAgID8gX2Nob2ljZSA+IDFcbiAgICAgICAgICA/IDFcbiAgICAgICAgICA6IDBcbiAgICAgICAgOiAxXG4gICAgfVxuXG4gICAgcmV0dXJuIF9jaG9pY2UgPyBNYXRoLm1pbihfY2hvaWNlLCAyKSA6IDBcbiAgfTtcblxuICBpZiAodGhpcy5sb2NhbGUgaW4gdGhpcy5wbHVyYWxpemF0aW9uUnVsZXMpIHtcbiAgICByZXR1cm4gdGhpcy5wbHVyYWxpemF0aW9uUnVsZXNbdGhpcy5sb2NhbGVdLmFwcGx5KHRoaXMsIFtjaG9pY2UsIGNob2ljZXNMZW5ndGhdKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBkZWZhdWx0SW1wbChjaG9pY2UsIGNob2ljZXNMZW5ndGgpXG4gIH1cbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLnRjID0gZnVuY3Rpb24gdGMgKGtleSwgY2hvaWNlKSB7XG4gICAgdmFyIHJlZjtcblxuICAgIHZhciB2YWx1ZXMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG4gICAgd2hpbGUgKCBsZW4tLSA+IDAgKSB2YWx1ZXNbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAyIF07XG4gIHJldHVybiAocmVmID0gdGhpcykuX3RjLmFwcGx5KHJlZiwgWyBrZXksIHRoaXMubG9jYWxlLCB0aGlzLl9nZXRNZXNzYWdlcygpLCBudWxsLCBjaG9pY2UgXS5jb25jYXQoIHZhbHVlcyApKVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX3RlID0gZnVuY3Rpb24gX3RlIChrZXksIGxvY2FsZSwgbWVzc2FnZXMpIHtcbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMztcbiAgICB3aGlsZSAoIGxlbi0tID4gMCApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAzIF07XG5cbiAgdmFyIF9sb2NhbGUgPSBwYXJzZUFyZ3MuYXBwbHkodm9pZCAwLCBhcmdzKS5sb2NhbGUgfHwgbG9jYWxlO1xuICByZXR1cm4gdGhpcy5fZXhpc3QobWVzc2FnZXNbX2xvY2FsZV0sIGtleSlcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLnRlID0gZnVuY3Rpb24gdGUgKGtleSwgbG9jYWxlKSB7XG4gIHJldHVybiB0aGlzLl90ZShrZXksIHRoaXMubG9jYWxlLCB0aGlzLl9nZXRNZXNzYWdlcygpLCBsb2NhbGUpXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5nZXRMb2NhbGVNZXNzYWdlID0gZnVuY3Rpb24gZ2V0TG9jYWxlTWVzc2FnZSAobG9jYWxlKSB7XG4gIHJldHVybiBsb29zZUNsb25lKHRoaXMuX3ZtLm1lc3NhZ2VzW2xvY2FsZV0gfHwge30pXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5zZXRMb2NhbGVNZXNzYWdlID0gZnVuY3Rpb24gc2V0TG9jYWxlTWVzc2FnZSAobG9jYWxlLCBtZXNzYWdlKSB7XG4gIGlmICh0aGlzLl93YXJuSHRtbEluTWVzc2FnZSA9PT0gJ3dhcm4nIHx8IHRoaXMuX3dhcm5IdG1sSW5NZXNzYWdlID09PSAnZXJyb3InKSB7XG4gICAgdGhpcy5fY2hlY2tMb2NhbGVNZXNzYWdlKGxvY2FsZSwgdGhpcy5fd2Fybkh0bWxJbk1lc3NhZ2UsIG1lc3NhZ2UpO1xuICB9XG4gIHRoaXMuX3ZtLiRzZXQodGhpcy5fdm0ubWVzc2FnZXMsIGxvY2FsZSwgbWVzc2FnZSk7XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5tZXJnZUxvY2FsZU1lc3NhZ2UgPSBmdW5jdGlvbiBtZXJnZUxvY2FsZU1lc3NhZ2UgKGxvY2FsZSwgbWVzc2FnZSkge1xuICBpZiAodGhpcy5fd2Fybkh0bWxJbk1lc3NhZ2UgPT09ICd3YXJuJyB8fCB0aGlzLl93YXJuSHRtbEluTWVzc2FnZSA9PT0gJ2Vycm9yJykge1xuICAgIHRoaXMuX2NoZWNrTG9jYWxlTWVzc2FnZShsb2NhbGUsIHRoaXMuX3dhcm5IdG1sSW5NZXNzYWdlLCBtZXNzYWdlKTtcbiAgfVxuICB0aGlzLl92bS4kc2V0KHRoaXMuX3ZtLm1lc3NhZ2VzLCBsb2NhbGUsIG1lcmdlKHt9LCB0aGlzLl92bS5tZXNzYWdlc1tsb2NhbGVdIHx8IHt9LCBtZXNzYWdlKSk7XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5nZXREYXRlVGltZUZvcm1hdCA9IGZ1bmN0aW9uIGdldERhdGVUaW1lRm9ybWF0IChsb2NhbGUpIHtcbiAgcmV0dXJuIGxvb3NlQ2xvbmUodGhpcy5fdm0uZGF0ZVRpbWVGb3JtYXRzW2xvY2FsZV0gfHwge30pXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5zZXREYXRlVGltZUZvcm1hdCA9IGZ1bmN0aW9uIHNldERhdGVUaW1lRm9ybWF0IChsb2NhbGUsIGZvcm1hdCkge1xuICB0aGlzLl92bS4kc2V0KHRoaXMuX3ZtLmRhdGVUaW1lRm9ybWF0cywgbG9jYWxlLCBmb3JtYXQpO1xuICB0aGlzLl9jbGVhckRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgZm9ybWF0KTtcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLm1lcmdlRGF0ZVRpbWVGb3JtYXQgPSBmdW5jdGlvbiBtZXJnZURhdGVUaW1lRm9ybWF0IChsb2NhbGUsIGZvcm1hdCkge1xuICB0aGlzLl92bS4kc2V0KHRoaXMuX3ZtLmRhdGVUaW1lRm9ybWF0cywgbG9jYWxlLCBtZXJnZSh0aGlzLl92bS5kYXRlVGltZUZvcm1hdHNbbG9jYWxlXSB8fCB7fSwgZm9ybWF0KSk7XG4gIHRoaXMuX2NsZWFyRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBmb3JtYXQpO1xufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX2NsZWFyRGF0ZVRpbWVGb3JtYXQgPSBmdW5jdGlvbiBfY2xlYXJEYXRlVGltZUZvcm1hdCAobG9jYWxlLCBmb3JtYXQpIHtcbiAgZm9yICh2YXIga2V5IGluIGZvcm1hdCkge1xuICAgIHZhciBpZCA9IGxvY2FsZSArIFwiX19cIiArIGtleTtcblxuICAgIGlmICghdGhpcy5fZGF0ZVRpbWVGb3JtYXR0ZXJzLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBkZWxldGUgdGhpcy5fZGF0ZVRpbWVGb3JtYXR0ZXJzW2lkXTtcbiAgfVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX2xvY2FsaXplRGF0ZVRpbWUgPSBmdW5jdGlvbiBfbG9jYWxpemVEYXRlVGltZSAoXG4gIHZhbHVlLFxuICBsb2NhbGUsXG4gIGZhbGxiYWNrLFxuICBkYXRlVGltZUZvcm1hdHMsXG4gIGtleVxuKSB7XG4gIHZhciBfbG9jYWxlID0gbG9jYWxlO1xuICB2YXIgZm9ybWF0cyA9IGRhdGVUaW1lRm9ybWF0c1tfbG9jYWxlXTtcblxuICB2YXIgY2hhaW4gPSB0aGlzLl9nZXRMb2NhbGVDaGFpbihsb2NhbGUsIGZhbGxiYWNrKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFpbi5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjdXJyZW50ID0gX2xvY2FsZTtcbiAgICB2YXIgc3RlcCA9IGNoYWluW2ldO1xuICAgIGZvcm1hdHMgPSBkYXRlVGltZUZvcm1hdHNbc3RlcF07XG4gICAgX2xvY2FsZSA9IHN0ZXA7XG4gICAgLy8gZmFsbGJhY2sgbG9jYWxlXG4gICAgaWYgKGlzTnVsbChmb3JtYXRzKSB8fCBpc051bGwoZm9ybWF0c1trZXldKSkge1xuICAgICAgaWYgKHN0ZXAgIT09IGxvY2FsZSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF0aGlzLl9pc1NpbGVudFRyYW5zbGF0aW9uV2FybihrZXkpICYmICF0aGlzLl9pc1NpbGVudEZhbGxiYWNrV2FybihrZXkpKSB7XG4gICAgICAgIHdhcm4oKFwiRmFsbCBiYWNrIHRvICdcIiArIHN0ZXAgKyBcIicgZGF0ZXRpbWUgZm9ybWF0cyBmcm9tICdcIiArIGN1cnJlbnQgKyBcIicgZGF0ZXRpbWUgZm9ybWF0cy5cIikpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc051bGwoZm9ybWF0cykgfHwgaXNOdWxsKGZvcm1hdHNba2V5XSkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9IGVsc2Uge1xuICAgIHZhciBmb3JtYXQgPSBmb3JtYXRzW2tleV07XG4gICAgdmFyIGlkID0gX2xvY2FsZSArIFwiX19cIiArIGtleTtcbiAgICB2YXIgZm9ybWF0dGVyID0gdGhpcy5fZGF0ZVRpbWVGb3JtYXR0ZXJzW2lkXTtcbiAgICBpZiAoIWZvcm1hdHRlcikge1xuICAgICAgZm9ybWF0dGVyID0gdGhpcy5fZGF0ZVRpbWVGb3JtYXR0ZXJzW2lkXSA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KF9sb2NhbGUsIGZvcm1hdCk7XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHZhbHVlKVxuICB9XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5fZCA9IGZ1bmN0aW9uIF9kICh2YWx1ZSwgbG9jYWxlLCBrZXkpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFWdWVJMThuLmF2YWlsYWJpbGl0aWVzLmRhdGVUaW1lRm9ybWF0KSB7XG4gICAgd2FybignQ2Fubm90IGZvcm1hdCBhIERhdGUgdmFsdWUgZHVlIHRvIG5vdCBzdXBwb3J0ZWQgSW50bC5EYXRlVGltZUZvcm1hdC4nKTtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICgha2V5KSB7XG4gICAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSkuZm9ybWF0KHZhbHVlKVxuICB9XG5cbiAgdmFyIHJldCA9XG4gICAgdGhpcy5fbG9jYWxpemVEYXRlVGltZSh2YWx1ZSwgbG9jYWxlLCB0aGlzLmZhbGxiYWNrTG9jYWxlLCB0aGlzLl9nZXREYXRlVGltZUZvcm1hdHMoKSwga2V5KTtcbiAgaWYgKHRoaXMuX2lzRmFsbGJhY2tSb290KHJldCkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGhpcy5faXNTaWxlbnRUcmFuc2xhdGlvbldhcm4oa2V5KSAmJiAhdGhpcy5faXNTaWxlbnRGYWxsYmFja1dhcm4oa2V5KSkge1xuICAgICAgd2FybigoXCJGYWxsIGJhY2sgdG8gZGF0ZXRpbWUgbG9jYWxpemF0aW9uIG9mIHJvb3Q6IGtleSAnXCIgKyBrZXkgKyBcIicuXCIpKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCF0aGlzLl9yb290KSB7IHRocm93IEVycm9yKCd1bmV4cGVjdGVkIGVycm9yJykgfVxuICAgIHJldHVybiB0aGlzLl9yb290LiRpMThuLmQodmFsdWUsIGtleSwgbG9jYWxlKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiByZXQgfHwgJydcbiAgfVxufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuZCA9IGZ1bmN0aW9uIGQgKHZhbHVlKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKCBsZW4tLSA+IDAgKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuXG4gIHZhciBsb2NhbGUgPSB0aGlzLmxvY2FsZTtcbiAgdmFyIGtleSA9IG51bGw7XG5cbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAga2V5ID0gYXJnc1swXTtcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGFyZ3NbMF0pKSB7XG4gICAgICBpZiAoYXJnc1swXS5sb2NhbGUpIHtcbiAgICAgICAgbG9jYWxlID0gYXJnc1swXS5sb2NhbGU7XG4gICAgICB9XG4gICAgICBpZiAoYXJnc1swXS5rZXkpIHtcbiAgICAgICAga2V5ID0gYXJnc1swXS5rZXk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAga2V5ID0gYXJnc1swXTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhcmdzWzFdID09PSAnc3RyaW5nJykge1xuICAgICAgbG9jYWxlID0gYXJnc1sxXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcy5fZCh2YWx1ZSwgbG9jYWxlLCBrZXkpXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5nZXROdW1iZXJGb3JtYXQgPSBmdW5jdGlvbiBnZXROdW1iZXJGb3JtYXQgKGxvY2FsZSkge1xuICByZXR1cm4gbG9vc2VDbG9uZSh0aGlzLl92bS5udW1iZXJGb3JtYXRzW2xvY2FsZV0gfHwge30pXG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5zZXROdW1iZXJGb3JtYXQgPSBmdW5jdGlvbiBzZXROdW1iZXJGb3JtYXQgKGxvY2FsZSwgZm9ybWF0KSB7XG4gIHRoaXMuX3ZtLiRzZXQodGhpcy5fdm0ubnVtYmVyRm9ybWF0cywgbG9jYWxlLCBmb3JtYXQpO1xuICB0aGlzLl9jbGVhck51bWJlckZvcm1hdChsb2NhbGUsIGZvcm1hdCk7XG59O1xuXG5WdWVJMThuLnByb3RvdHlwZS5tZXJnZU51bWJlckZvcm1hdCA9IGZ1bmN0aW9uIG1lcmdlTnVtYmVyRm9ybWF0IChsb2NhbGUsIGZvcm1hdCkge1xuICB0aGlzLl92bS4kc2V0KHRoaXMuX3ZtLm51bWJlckZvcm1hdHMsIGxvY2FsZSwgbWVyZ2UodGhpcy5fdm0ubnVtYmVyRm9ybWF0c1tsb2NhbGVdIHx8IHt9LCBmb3JtYXQpKTtcbiAgdGhpcy5fY2xlYXJOdW1iZXJGb3JtYXQobG9jYWxlLCBmb3JtYXQpO1xufTtcblxuVnVlSTE4bi5wcm90b3R5cGUuX2NsZWFyTnVtYmVyRm9ybWF0ID0gZnVuY3Rpb24gX2NsZWFyTnVtYmVyRm9ybWF0IChsb2NhbGUsIGZvcm1hdCkge1xuICBmb3IgKHZhciBrZXkgaW4gZm9ybWF0KSB7XG4gICAgdmFyIGlkID0gbG9jYWxlICsgXCJfX1wiICsga2V5O1xuXG4gICAgaWYgKCF0aGlzLl9udW1iZXJGb3JtYXR0ZXJzLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBkZWxldGUgdGhpcy5fbnVtYmVyRm9ybWF0dGVyc1tpZF07XG4gIH1cbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9nZXROdW1iZXJGb3JtYXR0ZXIgPSBmdW5jdGlvbiBfZ2V0TnVtYmVyRm9ybWF0dGVyIChcbiAgdmFsdWUsXG4gIGxvY2FsZSxcbiAgZmFsbGJhY2ssXG4gIG51bWJlckZvcm1hdHMsXG4gIGtleSxcbiAgb3B0aW9uc1xuKSB7XG4gIHZhciBfbG9jYWxlID0gbG9jYWxlO1xuICB2YXIgZm9ybWF0cyA9IG51bWJlckZvcm1hdHNbX2xvY2FsZV07XG5cbiAgdmFyIGNoYWluID0gdGhpcy5fZ2V0TG9jYWxlQ2hhaW4obG9jYWxlLCBmYWxsYmFjayk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhaW4ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY3VycmVudCA9IF9sb2NhbGU7XG4gICAgdmFyIHN0ZXAgPSBjaGFpbltpXTtcbiAgICBmb3JtYXRzID0gbnVtYmVyRm9ybWF0c1tzdGVwXTtcbiAgICBfbG9jYWxlID0gc3RlcDtcbiAgICAvLyBmYWxsYmFjayBsb2NhbGVcbiAgICBpZiAoaXNOdWxsKGZvcm1hdHMpIHx8IGlzTnVsbChmb3JtYXRzW2tleV0pKSB7XG4gICAgICBpZiAoc3RlcCAhPT0gbG9jYWxlICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXRoaXMuX2lzU2lsZW50VHJhbnNsYXRpb25XYXJuKGtleSkgJiYgIXRoaXMuX2lzU2lsZW50RmFsbGJhY2tXYXJuKGtleSkpIHtcbiAgICAgICAgd2FybigoXCJGYWxsIGJhY2sgdG8gJ1wiICsgc3RlcCArIFwiJyBudW1iZXIgZm9ybWF0cyBmcm9tICdcIiArIGN1cnJlbnQgKyBcIicgbnVtYmVyIGZvcm1hdHMuXCIpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNOdWxsKGZvcm1hdHMpIHx8IGlzTnVsbChmb3JtYXRzW2tleV0pKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfSBlbHNlIHtcbiAgICB2YXIgZm9ybWF0ID0gZm9ybWF0c1trZXldO1xuXG4gICAgdmFyIGZvcm1hdHRlcjtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgLy8gSWYgb3B0aW9ucyBzcGVjaWZpZWQgLSBjcmVhdGUgb25lIHRpbWUgbnVtYmVyIGZvcm1hdHRlclxuICAgICAgZm9ybWF0dGVyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KF9sb2NhbGUsIE9iamVjdC5hc3NpZ24oe30sIGZvcm1hdCwgb3B0aW9ucykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaWQgPSBfbG9jYWxlICsgXCJfX1wiICsga2V5O1xuICAgICAgZm9ybWF0dGVyID0gdGhpcy5fbnVtYmVyRm9ybWF0dGVyc1tpZF07XG4gICAgICBpZiAoIWZvcm1hdHRlcikge1xuICAgICAgICBmb3JtYXR0ZXIgPSB0aGlzLl9udW1iZXJGb3JtYXR0ZXJzW2lkXSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChfbG9jYWxlLCBmb3JtYXQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0dGVyXG4gIH1cbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9uID0gZnVuY3Rpb24gX24gKHZhbHVlLCBsb2NhbGUsIGtleSwgb3B0aW9ucykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFWdWVJMThuLmF2YWlsYWJpbGl0aWVzLm51bWJlckZvcm1hdCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB3YXJuKCdDYW5ub3QgZm9ybWF0IGEgTnVtYmVyIHZhbHVlIGR1ZSB0byBub3Qgc3VwcG9ydGVkIEludGwuTnVtYmVyRm9ybWF0LicpO1xuICAgIH1cbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICgha2V5KSB7XG4gICAgdmFyIG5mID0gIW9wdGlvbnMgPyBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jYWxlKSA6IG5ldyBJbnRsLk51bWJlckZvcm1hdChsb2NhbGUsIG9wdGlvbnMpO1xuICAgIHJldHVybiBuZi5mb3JtYXQodmFsdWUpXG4gIH1cblxuICB2YXIgZm9ybWF0dGVyID0gdGhpcy5fZ2V0TnVtYmVyRm9ybWF0dGVyKHZhbHVlLCBsb2NhbGUsIHRoaXMuZmFsbGJhY2tMb2NhbGUsIHRoaXMuX2dldE51bWJlckZvcm1hdHMoKSwga2V5LCBvcHRpb25zKTtcbiAgdmFyIHJldCA9IGZvcm1hdHRlciAmJiBmb3JtYXR0ZXIuZm9ybWF0KHZhbHVlKTtcbiAgaWYgKHRoaXMuX2lzRmFsbGJhY2tSb290KHJldCkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGhpcy5faXNTaWxlbnRUcmFuc2xhdGlvbldhcm4oa2V5KSAmJiAhdGhpcy5faXNTaWxlbnRGYWxsYmFja1dhcm4oa2V5KSkge1xuICAgICAgd2FybigoXCJGYWxsIGJhY2sgdG8gbnVtYmVyIGxvY2FsaXphdGlvbiBvZiByb290OiBrZXkgJ1wiICsga2V5ICsgXCInLlwiKSk7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghdGhpcy5fcm9vdCkgeyB0aHJvdyBFcnJvcigndW5leHBlY3RlZCBlcnJvcicpIH1cbiAgICByZXR1cm4gdGhpcy5fcm9vdC4kaTE4bi5uKHZhbHVlLCBPYmplY3QuYXNzaWduKHt9LCB7IGtleToga2V5LCBsb2NhbGU6IGxvY2FsZSB9LCBvcHRpb25zKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmV0IHx8ICcnXG4gIH1cbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLm4gPSBmdW5jdGlvbiBuICh2YWx1ZSkge1xuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuICAgIHdoaWxlICggbGVuLS0gPiAwICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcblxuICB2YXIgbG9jYWxlID0gdGhpcy5sb2NhbGU7XG4gIHZhciBrZXkgPSBudWxsO1xuICB2YXIgb3B0aW9ucyA9IG51bGw7XG5cbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAga2V5ID0gYXJnc1swXTtcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGFyZ3NbMF0pKSB7XG4gICAgICBpZiAoYXJnc1swXS5sb2NhbGUpIHtcbiAgICAgICAgbG9jYWxlID0gYXJnc1swXS5sb2NhbGU7XG4gICAgICB9XG4gICAgICBpZiAoYXJnc1swXS5rZXkpIHtcbiAgICAgICAga2V5ID0gYXJnc1swXS5rZXk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbHRlciBvdXQgbnVtYmVyIGZvcm1hdCBvcHRpb25zIG9ubHlcbiAgICAgIG9wdGlvbnMgPSBPYmplY3Qua2V5cyhhcmdzWzBdKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XG4gICAgICAgICAgdmFyIG9iajtcblxuICAgICAgICBpZiAoaW5jbHVkZXMobnVtYmVyRm9ybWF0S2V5cywga2V5KSkge1xuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBhY2MsICggb2JqID0ge30sIG9ialtrZXldID0gYXJnc1swXVtrZXldLCBvYmogKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjXG4gICAgICB9LCBudWxsKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDIpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBrZXkgPSBhcmdzWzBdO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGFyZ3NbMV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBsb2NhbGUgPSBhcmdzWzFdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzLl9uKHZhbHVlLCBsb2NhbGUsIGtleSwgb3B0aW9ucylcbn07XG5cblZ1ZUkxOG4ucHJvdG90eXBlLl9udHAgPSBmdW5jdGlvbiBfbnRwICh2YWx1ZSwgbG9jYWxlLCBrZXksIG9wdGlvbnMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghVnVlSTE4bi5hdmFpbGFiaWxpdGllcy5udW1iZXJGb3JtYXQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybignQ2Fubm90IGZvcm1hdCB0byBwYXJ0cyBhIE51bWJlciB2YWx1ZSBkdWUgdG8gbm90IHN1cHBvcnRlZCBJbnRsLk51bWJlckZvcm1hdC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICBpZiAoIWtleSkge1xuICAgIHZhciBuZiA9ICFvcHRpb25zID8gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY2FsZSkgOiBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jYWxlLCBvcHRpb25zKTtcbiAgICByZXR1cm4gbmYuZm9ybWF0VG9QYXJ0cyh2YWx1ZSlcbiAgfVxuXG4gIHZhciBmb3JtYXR0ZXIgPSB0aGlzLl9nZXROdW1iZXJGb3JtYXR0ZXIodmFsdWUsIGxvY2FsZSwgdGhpcy5mYWxsYmFja0xvY2FsZSwgdGhpcy5fZ2V0TnVtYmVyRm9ybWF0cygpLCBrZXksIG9wdGlvbnMpO1xuICB2YXIgcmV0ID0gZm9ybWF0dGVyICYmIGZvcm1hdHRlci5mb3JtYXRUb1BhcnRzKHZhbHVlKTtcbiAgaWYgKHRoaXMuX2lzRmFsbGJhY2tSb290KHJldCkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdGhpcy5faXNTaWxlbnRUcmFuc2xhdGlvbldhcm4oa2V5KSkge1xuICAgICAgd2FybigoXCJGYWxsIGJhY2sgdG8gZm9ybWF0IG51bWJlciB0byBwYXJ0cyBvZiByb290OiBrZXkgJ1wiICsga2V5ICsgXCInIC5cIikpO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIXRoaXMuX3Jvb3QpIHsgdGhyb3cgRXJyb3IoJ3VuZXhwZWN0ZWQgZXJyb3InKSB9XG4gICAgcmV0dXJuIHRoaXMuX3Jvb3QuJGkxOG4uX250cCh2YWx1ZSwgbG9jYWxlLCBrZXksIG9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJldCB8fCBbXVxuICB9XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggVnVlSTE4bi5wcm90b3R5cGUsIHByb3RvdHlwZUFjY2Vzc29ycyApO1xuXG52YXIgYXZhaWxhYmlsaXRpZXM7XG4vLyAkRmxvd0ZpeE1lXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlSTE4biwgJ2F2YWlsYWJpbGl0aWVzJywge1xuICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgaWYgKCFhdmFpbGFiaWxpdGllcykge1xuICAgICAgdmFyIGludGxEZWZpbmVkID0gdHlwZW9mIEludGwgIT09ICd1bmRlZmluZWQnO1xuICAgICAgYXZhaWxhYmlsaXRpZXMgPSB7XG4gICAgICAgIGRhdGVUaW1lRm9ybWF0OiBpbnRsRGVmaW5lZCAmJiB0eXBlb2YgSW50bC5EYXRlVGltZUZvcm1hdCAhPT0gJ3VuZGVmaW5lZCcsXG4gICAgICAgIG51bWJlckZvcm1hdDogaW50bERlZmluZWQgJiYgdHlwZW9mIEludGwuTnVtYmVyRm9ybWF0ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXZhaWxhYmlsaXRpZXNcbiAgfVxufSk7XG5cblZ1ZUkxOG4uaW5zdGFsbCA9IGluc3RhbGw7XG5WdWVJMThuLnZlcnNpb24gPSAnOC4xNy40JztcblxuZXhwb3J0IGRlZmF1bHQgVnVlSTE4bjtcbiIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBhdHRyczogeyBpZDogXCJzZXJwXCIgfSB9LCBbXG4gICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJzZXJwLXByZXZpZXdcIiB9LCBbXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInNlcnAtdGl0bGVcIiB9LCBbXG4gICAgICAgIF92bS5fdihcIlxcbiAgICAgIFwiICsgX3ZtLl9zKF92bS5kaXNwbGF5ZWRUaXRsZSkgKyBcIlxcbiAgICBcIilcbiAgICAgIF0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwic2VycC11cmxcIiB9LCBbXG4gICAgICAgIF92bS5fdihcIlxcbiAgICAgIFwiICsgX3ZtLl9zKF92bS51cmwpKSxcbiAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwic2VycC1hcnJvd1wiIH0pXG4gICAgICBdKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInNlcnAtZGVzY3JpcHRpb25cIiB9LCBbXG4gICAgICAgIF92bS5fdihcIlxcbiAgICAgIFwiICsgX3ZtLl9zKF92bS5kaXNwbGF5ZWREZXNjcmlwdGlvbikgKyBcIlxcbiAgICBcIilcbiAgICAgIF0pXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc2VycC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zZXJwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vc2VycC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjZjNGM1YWImc2NvcGVkPXRydWUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vc2VycC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3NlcnAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL3NlcnAudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NjZjNGM1YWImbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCI2NmM0YzVhYlwiLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi90bXAvcHJlc3Rhc2hvcC9hZG1pbi1kZXYvdGhlbWVzL25ldy10aGVtZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc2NmM0YzVhYicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc2NmM0YzVhYicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc2NmM0YzVhYicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vc2VycC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjZjNGM1YWImc2NvcGVkPXRydWUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNjZjNGM1YWInLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImpzL2FwcC91dGlscy9zZXJwL3NlcnAudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgYXR0cnM6IHsgaWQ6IFwiY29tYmluYXRpb24tZWRpdC1tb2RhbFwiIH0gfSxcbiAgICBbXG4gICAgICBfdm0uc2VsZWN0ZWRDb21iaW5hdGlvbklkICE9PSBudWxsXG4gICAgICAgID8gX2MoXCJtb2RhbFwiLCB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJjb21iaW5hdGlvbi1tb2RhbFwiLFxuICAgICAgICAgICAgb246IHsgY2xvc2U6IF92bS5jbG9zZU1vZGFsIH0sXG4gICAgICAgICAgICBzY29wZWRTbG90czogX3ZtLl91KFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBcImJvZHlcIixcbiAgICAgICAgICAgICAgICAgIGZuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0ubG9hZGluZ0NvbWJpbmF0aW9uRm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImNvbWJpbmF0aW9uLWxvYWRpbmdcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJzcGlubmVyXCIgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImlmcmFtZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWY6IFwiaWZyYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJjb21iaW5hdGlvbi1pZnJhbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzogX3ZtLmVkaXRDb21iaW5hdGlvblVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdnNwYWNlOiBcIjBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHNwYWNlOiBcIjBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsaW5nOiBcImF1dG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRzdGFydDogX3ZtLmZyYW1lTG9hZGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZDogX3ZtLm9uRnJhbWVMb2FkZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgcHJveHk6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogXCJmb290ZXJcIixcbiAgICAgICAgICAgICAgICAgIGZuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1jbG9zZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS4kdChcIm1vZGFsLmNsb3NlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0uc3VibWl0dGluZ0NvbWJpbmF0aW9uRm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udHJ5Q2xvc2UoJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLiR0KFwibW9kYWwuY2FuY2VsXCIpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLiR0KFwibW9kYWwucHJldmlvdXNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucHJldmlvdXNDb21iaW5hdGlvbklkID09PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uc3VibWl0dGluZ0NvbWJpbmF0aW9uRm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uc2hvd1ByZXZpb3VzKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcIm1hdGVyaWFsLWljb25zXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcImtleWJvYXJkX2Fycm93X2xlZnRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS4kdChcIm1vZGFsLnByZXZpb3VzXCIpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLiR0KFwibW9kYWwubmV4dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5uZXh0Q29tYmluYXRpb25JZCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnN1Ym1pdHRpbmdDb21iaW5hdGlvbkZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnNob3dOZXh0KCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS4kdChcIm1vZGFsLm5leHRcIikpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJtYXRlcmlhbC1pY29uc1wiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCJrZXlib2FyZF9hcnJvd19yaWdodFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImJ0biBidG4tcHJpbWFyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS4kdChcIm1vZGFsLnNhdmVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uc3VibWl0dGluZ0NvbWJpbmF0aW9uRm9ybSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIV92bS5pc0Zvcm1VcGRhdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5zdWJtaXRGb3JtKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICFfdm0uc3VibWl0dGluZ0NvbWJpbmF0aW9uRm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJzcGFuXCIsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0uJHQoXCJtb2RhbC5zYXZlXCIpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uc3VibWl0dGluZ0NvbWJpbmF0aW9uRm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc21cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcm9sZTogXCJzdGF0dXNcIiwgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIiB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBwcm94eTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBcIm91dHNpZGVcIixcbiAgICAgICAgICAgICAgICAgIGZuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImhpc3RvcnlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb21iaW5hdGlvbnMtbGlzdFwiOiBfdm0uY29tYmluYXRpb25zSGlzdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzZWxlY3RlZC1jb21iaW5hdGlvblwiOiBfdm0uc2VsZWN0ZWRDb21iaW5hdGlvbklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImVtcHR5LWltYWdlLXVybFwiOiBfdm0uZW1wdHlJbWFnZVVybFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IHNlbGVjdENvbWJpbmF0aW9uOiBfdm0uc2VsZWN0Q29tYmluYXRpb24gfVxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBwcm94eTogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgIDM1ODk0NTI5NzlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwibW9kYWwtcHJldmVudC1jbG9zZVwiLFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICByZXR1cm4gX3ZtLnByZXZlbnRDbG9zZSgkZXZlbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLnNob3dDb25maXJtXG4gICAgICAgICAgICA/IF9jKFwibW9kYWxcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBcIm1vZGFsLXRpdGxlXCI6IF92bS4kdChcIm1vZGFsLmhpc3RvcnkuY29uZmlybVRpdGxlXCIpLFxuICAgICAgICAgICAgICAgICAgXCJjYW5jZWwtbGFiZWxcIjogX3ZtLiR0KFwibW9kYWwuY2FuY2VsXCIpLFxuICAgICAgICAgICAgICAgICAgXCJjb25maXJtLWxhYmVsXCI6IF92bS4kdChcIm1vZGFsLmNvbmZpcm1cIiksXG4gICAgICAgICAgICAgICAgICBcImNsb3NlLWxhYmVsXCI6IF92bS4kdChcIm1vZGFsLmNsb3NlXCIpLFxuICAgICAgICAgICAgICAgICAgY29uZmlybWF0aW9uOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgY2xvc2U6IF92bS5oaWRlQ29uZmlybU1vZGFsLFxuICAgICAgICAgICAgICAgICAgY29uZmlybTogX3ZtLmNvbmZpcm1TZWxlY3Rpb25cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNjb3BlZFNsb3RzOiBfdm0uX3UoXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiYm9keVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGZuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwicFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVySFRNTDogX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uJHQoXCJtb2RhbC5oaXN0b3J5LmNvbmZpcm1Cb2R5XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiVjb21iaW5hdGlvbk5hbWUlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uc2VsZWN0ZWRDb21iaW5hdGlvbk5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBwcm94eTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgMjYxNDM3NTExN1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0NvbWJpbmF0aW9uTW9kYWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vQ29tYmluYXRpb25Nb2RhbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0NvbWJpbmF0aW9uTW9kYWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI1YTM2ZmQ0JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0NvbWJpbmF0aW9uTW9kYWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9Db21iaW5hdGlvbk1vZGFsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9Db21iaW5hdGlvbk1vZGFsLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzI1YTM2ZmQ0JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzI1YTM2ZmQ0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzI1YTM2ZmQ0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9Db21iaW5hdGlvbk1vZGFsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNWEzNmZkNCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcyNWEzNmZkNCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwianMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2NvbWJpbmF0aW9uLW1vZGFsL0NvbWJpbmF0aW9uTW9kYWwudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwiY2FyZCBoaXN0b3J5XCIsIG9uOiB7IGNsaWNrOiBfdm0ucHJldmVudENsb3NlIH0gfSxcbiAgICBbXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImNhcmQtaGVhZGVyXCIgfSwgW1xuICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgXCJcXG4gICAgXCIgK1xuICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICBfdm0uJHQoXCJtb2RhbC5oaXN0b3J5LmVkaXRlZENvbWJpbmF0aW9uXCIsIHtcbiAgICAgICAgICAgICAgICBcIiVlZGl0ZWROYiVcIjogX3ZtLmNvbWJpbmF0aW9uc0xpc3QubGVuZ3RoXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApICtcbiAgICAgICAgICAgIFwiXFxuICBcIlxuICAgICAgICApXG4gICAgICBdKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImNhcmQtYmxvY2tcIiB9LCBbXG4gICAgICAgIF92bS5hcmVDb21iaW5hdGlvbnNOb3RFbXB0eVxuICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgIFwidWxcIixcbiAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJoaXN0b3J5LWxpc3RcIiB9LFxuICAgICAgICAgICAgICBfdm0uX2woX3ZtLnBhZ2luYXRlZERhdGFzW192bS5jdXJyZW50UGFnZSAtIDFdLCBmdW5jdGlvbihcbiAgICAgICAgICAgICAgICBjb21iaW5hdGlvbixcbiAgICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcImhpc3RvcnktaXRlbVwiLCBfdm0uaXNTZWxlY3RlZChjb21iaW5hdGlvbi5pZCldLFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uc2VsZWN0Q29tYmluYXRpb24oY29tYmluYXRpb24pXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiICsgX3ZtLl9zKGNvbWJpbmF0aW9uLnRpdGxlKSArIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJtYXRlcmlhbC1pY29uc1wiIH0sIFtfdm0uX3YoXCJlZGl0XCIpXSlcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImhpc3RvcnktZW1wdHlcIiB9LCBbXG4gICAgICAgICAgICAgIF9jKFwiaW1nXCIsIHsgYXR0cnM6IHsgc3JjOiBfdm0uZW1wdHlJbWFnZVVybCB9IH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcInBcIiwgeyBzdGF0aWNDbGFzczogXCJoaXN0b3J5LWVtcHR5LXRpcFwiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLiR0KFwibW9kYWwuaGlzdG9yeS5lbXB0eVwiKSkgK1xuICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgIFwiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXSlcbiAgICAgIF0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5hcmVDb21iaW5hdGlvbnNOb3RFbXB0eVxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiY2FyZC1mb290ZXJcIiB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInBhZ2luYXRpb25cIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IFwicGFnaW5hdGlvbi1sZW5ndGhcIjogMTQsIGRhdGFzOiBfdm0uY29tYmluYXRpb25zTGlzdCB9LFxuICAgICAgICAgICAgICAgIG9uOiB7IHBhZ2luYXRlZDogX3ZtLmNvbnN0cnVjdERhdGFzIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0hpc3RvcnkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSGlzdG9yeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0hpc3RvcnkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI1YTg1MDRlJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0hpc3RvcnkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9IaXN0b3J5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9IaXN0b3J5LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzI1YTg1MDRlJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzI1YTg1MDRlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzI1YTg1MDRlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9IaXN0b3J5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNWE4NTA0ZSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcyNWE4NTA0ZScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwianMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2NvbWJpbmF0aW9uLW1vZGFsL0hpc3RvcnkudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgYXR0cnM6IHsgaWQ6IFwicHJvZHVjdC1pbWFnZXMtY29udGFpbmVyXCIgfSB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgIFwiZHJvcHpvbmVcIixcbiAgICAgICAgICAgIFwiZHJvcHpvbmUtY29udGFpbmVyXCIsXG4gICAgICAgICAgICB7IGZ1bGw6IF92bS5maWxlcy5sZW5ndGggPD0gMCB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBhdHRyczogeyBpZDogXCJwcm9kdWN0LWltYWdlcy1kcm9wem9uZVwiIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICBcImR6LXByZXZpZXdcIixcbiAgICAgICAgICAgICAgICBcIm9wZW5maWxlbWFuYWdlclwiLFxuICAgICAgICAgICAgICAgIHsgXCJkLW5vbmVcIjogX3ZtLmxvYWRpbmcgfHwgX3ZtLmZpbGVzLmxlbmd0aCA8PSAwIH1cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfdm0uX20oMCldXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICBcImR6LWRlZmF1bHRcIixcbiAgICAgICAgICAgICAgICBcImR6LW1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICBcIm9wZW5maWxlbWFuYWdlclwiLFxuICAgICAgICAgICAgICAgIFwiZHotY2xpY2thYmxlXCIsXG4gICAgICAgICAgICAgICAgeyBcImQtbm9uZVwiOiBfdm0ubG9hZGluZyB8fCBfdm0uZmlsZXMubGVuZ3RoID4gMCB9XG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcIm1hdGVyaWFsLWljb25zXCIgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihcImFkZF9hX3Bob3RvXCIpXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBfYyhcImJyXCIpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgICBcIiArIF92bS5fcyhfdm0uJHQoXCJ3aW5kb3cuZHJvcEltYWdlc1wiKSkpLFxuICAgICAgICAgICAgICBfYyhcImJyXCIpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcImFcIiwgW192bS5fdihfdm0uX3MoX3ZtLiR0KFwid2luZG93LnNlbGVjdEZpbGVzXCIpKSldKSxcbiAgICAgICAgICAgICAgX2MoXCJiclwiKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXCJzbWFsbFwiLCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgICBcIiArIF92bS5fcyhfdm0uJHQoXCJ3aW5kb3cucmVjb21tZW5kZWRTaXplXCIpKSksXG4gICAgICAgICAgICAgICAgX2MoXCJiclwiKSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLiR0KFwid2luZG93LnJlY29tbWVuZGVkRm9ybWF0c1wiKSkgK1xuICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgIFwiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0ubG9hZGluZ1xuICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImRyb3B6b25lLWxvYWRpbmdcIiB9LCBbXG4gICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJzcGlubmVyXCIgfSlcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgXVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uc2VsZWN0ZWRGaWxlcy5sZW5ndGggPiAwXG4gICAgICAgID8gX2MoXCJkcm9wem9uZS13aW5kb3dcIiwge1xuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZHJvcHpvbmUtd2luZG93XCIsXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBcInNlbGVjdGVkLWZpbGVzXCI6IF92bS5zZWxlY3RlZEZpbGVzLFxuICAgICAgICAgICAgICBkcm9wem9uZTogX3ZtLmRyb3B6b25lLFxuICAgICAgICAgICAgICBmaWxlczogX3ZtLmZpbGVzLFxuICAgICAgICAgICAgICBsb2NhbGVzOiBfdm0ubG9jYWxlcyxcbiAgICAgICAgICAgICAgXCJzZWxlY3RlZC1sb2NhbGVcIjogX3ZtLnNlbGVjdGVkTG9jYWxlLFxuICAgICAgICAgICAgICBsb2FkaW5nOiBfdm0uYnV0dG9uTG9hZGluZ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIHVuc2VsZWN0QWxsOiBfdm0udW5zZWxlY3RBbGwsXG4gICAgICAgICAgICAgIHJlbW92ZVNlbGVjdGlvbjogX3ZtLnNob3dNb2RhbCxcbiAgICAgICAgICAgICAgc2VsZWN0QWxsOiBfdm0uc2VsZWN0QWxsLFxuICAgICAgICAgICAgICBzYXZlU2VsZWN0ZWRGaWxlOiBfdm0uc2F2ZVNlbGVjdGVkRmlsZSxcbiAgICAgICAgICAgICAgcmVwbGFjZWRGaWxlOiBfdm0ubWFuYWdlUmVwbGFjZWRGaWxlLFxuICAgICAgICAgICAgICBvcGVuR2FsbGVyeTogX3ZtLnRvZ2dsZUdhbGxlcnlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5pc01vZGFsU2hvd25cbiAgICAgICAgPyBfYyhcIm1vZGFsXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIGNvbmZpcm1hdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgXCJtb2RhbC10aXRsZVwiOiBfdm0uJHRjKFwibW9kYWwudGl0bGVcIiwgdGhpcy5zZWxlY3RlZEZpbGVzLmxlbmd0aCwge1xuICAgICAgICAgICAgICAgIFwiJWZpbGVzTmIlXCI6IHRoaXMuc2VsZWN0ZWRGaWxlcy5sZW5ndGhcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIFwiY29uZmlybS1sYWJlbFwiOiBfdm0uJHQoXCJtb2RhbC5hY2NlcHRcIiksXG4gICAgICAgICAgICAgIFwiY2FuY2VsLWxhYmVsXCI6IF92bS4kdChcIm1vZGFsLmNsb3NlXCIpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IHsgY29uZmlybTogX3ZtLnJlbW92ZVNlbGVjdGlvbiwgY2xvc2U6IF92bS5oaWRlTW9kYWwgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJkei10ZW1wbGF0ZSBkLW5vbmVcIiB9LCBbXG4gICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZHotcHJldmlldyBkei1maWxlLXByZXZpZXdcIiB9LCBbXG4gICAgICAgICAgX3ZtLl9tKDEpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLl9tKDIpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLl9tKDMpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLl9tKDQpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLl9tKDUpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLl9tKDYpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJpc2NvdmVyXCIgfSwgW1xuICAgICAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgICBcIiArIF92bS5fcyhfdm0uJHQoXCJ3aW5kb3cuY292ZXJcIikpICsgXCJcXG4gICAgICBcIilcbiAgICAgICAgICBdKVxuICAgICAgICBdKVxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnNlbGVjdGVkRmlsZXMubGVuZ3RoID4gMCAmJiBfdm0uZ2FsbGVyeU9wZW5lZFxuICAgICAgICA/IF9jKFwiZHJvcHpvbmUtcGhvdG8tc3dpcGVcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgZmlsZXM6IF92bS5zZWxlY3RlZEZpbGVzIH0sXG4gICAgICAgICAgICBvbjogeyBjbG9zZUdhbGxlcnk6IF92bS50b2dnbGVHYWxsZXJ5IH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXG4gIGZ1bmN0aW9uKCkge1xuICAgIHZhciBfdm0gPSB0aGlzXG4gICAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gICAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gICAgcmV0dXJuIF9jKFwiZGl2XCIsIFtcbiAgICAgIF9jKFwic3BhblwiLCBbXG4gICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcIm1hdGVyaWFsLWljb25zXCIgfSwgW192bS5fdihcImFkZF9hX3Bob3RvXCIpXSlcbiAgICAgIF0pXG4gICAgXSlcbiAgfSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgdmFyIF92bSA9IHRoaXNcbiAgICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJkei1pbWFnZVwiIH0sIFtcbiAgICAgIF9jKFwiaW1nXCIsIHsgYXR0cnM6IHsgXCJkYXRhLWR6LXRodW1ibmFpbFwiOiBcIlwiIH0gfSlcbiAgICBdKVxuICB9LFxuICBmdW5jdGlvbigpIHtcbiAgICB2YXIgX3ZtID0gdGhpc1xuICAgIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICAgIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICAgIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImR6LXByb2dyZXNzXCIgfSwgW1xuICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwiZHotdXBsb2FkXCIsXG4gICAgICAgIGF0dHJzOiB7IFwiZGF0YS1kei11cGxvYWRwcm9ncmVzc1wiOiBcIlwiIH1cbiAgICAgIH0pXG4gICAgXSlcbiAgfSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgdmFyIF92bSA9IHRoaXNcbiAgICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJkei1zdWNjZXNzLW1hcmtcIiB9LCBbXG4gICAgICBfYyhcInNwYW5cIiwgW192bS5fdihcIuKclFwiKV0pXG4gICAgXSlcbiAgfSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgdmFyIF92bSA9IHRoaXNcbiAgICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJkei1lcnJvci1tYXJrXCIgfSwgW1xuICAgICAgX2MoXCJzcGFuXCIsIFtfdm0uX3YoXCLinJhcIildKVxuICAgIF0pXG4gIH0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHZhciBfdm0gPSB0aGlzXG4gICAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gICAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gICAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZHotZXJyb3ItbWVzc2FnZVwiIH0sIFtcbiAgICAgIF9jKFwic3BhblwiLCB7IGF0dHJzOiB7IFwiZGF0YS1kei1lcnJvcm1lc3NhZ2VcIjogXCJcIiB9IH0pXG4gICAgXSlcbiAgfSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgdmFyIF92bSA9IHRoaXNcbiAgICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJkei1ob3ZlclwiIH0sIFtcbiAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcIm1hdGVyaWFsLWljb25zIGRyYWctaW5kaWNhdG9yXCIgfSwgW1xuICAgICAgICBfdm0uX3YoXCJkcmFnX2luZGljYXRvclwiKVxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJtZC1jaGVja2JveFwiIH0sIFtcbiAgICAgICAgX2MoXCJsYWJlbFwiLCBbXG4gICAgICAgICAgX2MoXCJpbnB1dFwiLCB7IGF0dHJzOiB7IHR5cGU6IFwiY2hlY2tib3hcIiB9IH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwibWQtY2hlY2tib3gtY29udHJvbFwiIH0pXG4gICAgICAgIF0pXG4gICAgICBdKVxuICAgIF0pXG4gIH1cbl1cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0Ryb3B6b25lLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0Ryb3B6b25lLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vRHJvcHpvbmUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM0ZDFkM2U5JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0Ryb3B6b25lLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vRHJvcHpvbmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL0Ryb3B6b25lLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzM0ZDFkM2U5JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzM0ZDFkM2U5JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzM0ZDFkM2U5JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9Ecm9wem9uZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzRkMWQzZTkmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMzRkMWQzZTknLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImpzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9kcm9wem9uZS9Ecm9wem9uZS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwicHN3cFwiLFxuICAgICAgYXR0cnM6IHsgdGFiaW5kZXg6IFwiLTFcIiwgcm9sZTogXCJkaWFsb2dcIiwgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIiB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInBzd3BfX2JnXCIgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJwc3dwX19zY3JvbGwtd3JhcFwiIH0sIFtcbiAgICAgICAgX3ZtLl9tKDApLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInBzd3BfX3VpIHBzd3BfX3VpLS1oaWRkZW5cIiB9LCBbXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJwc3dwX190b3AtYmFyXCIgfSwgW1xuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJwc3dwX19jb3VudGVyXCIgfSksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJwc3dwX19idXR0b24gcHN3cF9fYnV0dG9uLS1jbG9zZVwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgdGl0bGU6IF92bS4kdChcIndpbmRvdy5jbG9zZVBob3RvU3dpcGVcIilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJtYXRlcmlhbC1pY29uc1wiIH0sIFtfdm0uX3YoXCJjbG9zZVwiKV0pXVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInBzd3BfX2J1dHRvbiBwc3dwX19idXR0b24tLXNoYXJlXCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiwgdGl0bGU6IF92bS4kdChcIndpbmRvdy5kb3dubG9hZFwiKSB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJtYXRlcmlhbC1pY29uc1wiIH0sIFtcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcImZpbGVfZG93bmxvYWRcIilcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwicHN3cF9fYnV0dG9uIHBzd3BfX2J1dHRvbi0tZnNcIixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiBfdm0uJHQoXCJ3aW5kb3cudG9nZ2xlRnVsbHNjcmVlblwiKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcIm1hdGVyaWFsLWljb25zXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiZnVsbHNjcmVlblwiKVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJwc3dwX19idXR0b24gcHN3cF9fYnV0dG9uLS16b29tXCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICB0aXRsZTogX3ZtLiR0KFwid2luZG93Lnpvb21QaG90b1N3aXBlXCIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwibWF0ZXJpYWwtaWNvbnNcIiB9LCBbX3ZtLl92KFwiem9vbV9pblwiKV0pXVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfdm0uX20oMSlcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5fbSgyKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwicHN3cF9fYnV0dG9uIHBzd3BfX2J1dHRvbi0tYXJyb3ctLWxlZnRcIixcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBfdm0uJHQoXCJ3aW5kb3cucHJldmlvdXNQaG90b1N3aXBlXCIpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwibWF0ZXJpYWwtaWNvbnNcIiB9LCBbX3ZtLl92KFwiYXJyb3dfYmFja1wiKV0pXVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInBzd3BfX2J1dHRvbiBwc3dwX19idXR0b24tLWFycm93LS1yaWdodFwiLFxuICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCB0aXRsZTogX3ZtLiR0KFwid2luZG93Lm5leHRQaG90b1N3aXBlXCIpIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcIm1hdGVyaWFsLWljb25zXCIgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihcImFycm93X2ZvcndhcmRcIilcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLl9tKDMpXG4gICAgICAgIF0pXG4gICAgICBdKVxuICAgIF1cbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtcbiAgZnVuY3Rpb24oKSB7XG4gICAgdmFyIF92bSA9IHRoaXNcbiAgICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJwc3dwX19jb250YWluZXJcIiB9LCBbXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInBzd3BfX2l0ZW1cIiB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInBzd3BfX2l0ZW1cIiB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInBzd3BfX2l0ZW1cIiB9KVxuICAgIF0pXG4gIH0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHZhciBfdm0gPSB0aGlzXG4gICAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gICAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gICAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicHN3cF9fcHJlbG9hZGVyXCIgfSwgW1xuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJwc3dwX19wcmVsb2FkZXJfX2ljblwiIH0sIFtcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJwc3dwX19wcmVsb2FkZXJfX2N1dFwiIH0sIFtcbiAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInBzd3BfX3ByZWxvYWRlcl9fZG9udXRcIiB9KVxuICAgICAgICBdKVxuICAgICAgXSlcbiAgICBdKVxuICB9LFxuICBmdW5jdGlvbigpIHtcbiAgICB2YXIgX3ZtID0gdGhpc1xuICAgIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICAgIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICAgIHJldHVybiBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgIFwicHN3cF9fc2hhcmUtbW9kYWwgcHN3cF9fc2hhcmUtbW9kYWwtLWhpZGRlbiBwc3dwX19zaW5nbGUtdGFwXCJcbiAgICAgIH0sXG4gICAgICBbX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJwc3dwX19zaGFyZS10b29sdGlwXCIgfSldXG4gICAgKVxuICB9LFxuICBmdW5jdGlvbigpIHtcbiAgICB2YXIgX3ZtID0gdGhpc1xuICAgIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICAgIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICAgIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInBzd3BfX2NhcHRpb25cIiB9LCBbXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInBzd3BfX2NhcHRpb25fX2NlbnRlclwiIH0pXG4gICAgXSlcbiAgfVxuXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vRHJvcHpvbmVQaG90b1N3aXBlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0Ryb3B6b25lUGhvdG9Td2lwZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0Ryb3B6b25lUGhvdG9Td2lwZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjU3YWJhZjEmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vRHJvcHpvbmVQaG90b1N3aXBlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vRHJvcHpvbmVQaG90b1N3aXBlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9Ecm9wem9uZVBob3RvU3dpcGUudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1zY3NzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvdG1wL3ByZXN0YXNob3AvYWRtaW4tZGV2L3RoZW1lcy9uZXctdGhlbWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNjU3YWJhZjEnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNjU3YWJhZjEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNjU3YWJhZjEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0Ryb3B6b25lUGhvdG9Td2lwZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjU3YWJhZjEmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNjU3YWJhZjEnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImpzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9kcm9wem9uZS9Ecm9wem9uZVBob3RvU3dpcGUudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImRyb3B6b25lLXdpbmRvd1wiIH0sIFtcbiAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImRyb3B6b25lLXdpbmRvdy1oZWFkZXIgcm93XCIgfSwgW1xuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJkcm9wem9uZS13aW5kb3ctaGVhZGVyLWxlZnRcIiB9LCBbXG4gICAgICAgIF9jKFwicFwiLCB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZHJvcHpvbmUtd2luZG93LW51bWJlclwiLFxuICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICBpbm5lckhUTUw6IF92bS5fcyhcbiAgICAgICAgICAgICAgX3ZtLiR0KFwid2luZG93LnNlbGVjdGVkRmlsZXNcIiwge1xuICAgICAgICAgICAgICAgIFwiJWZpbGVzTmIlXCI6IF92bS5zZWxlY3RlZEZpbGVzLmxlbmd0aFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIF0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZHJvcHpvbmUtd2luZG93LWhlYWRlci1yaWdodFwiIH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJpXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwibWF0ZXJpYWwtaWNvbnNcIixcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIFwiZGF0YS10b2dnbGVcIjogXCJwc3Rvb2x0aXBcIixcbiAgICAgICAgICAgICAgXCJkYXRhLW9yaWdpbmFsLXRpdGxlXCI6IF92bS4kdChcIndpbmRvdy56b29tXCIpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdm0uJGVtaXQoXCJvcGVuR2FsbGVyeVwiKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbX3ZtLl92KFwic2VhcmNoXCIpXVxuICAgICAgICApLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfdm0uc2VsZWN0ZWRGaWxlXG4gICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgXCJpXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJtYXRlcmlhbC1pY29uc1wiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBcImRhdGEtdG9nZ2xlXCI6IFwicHN0b29sdGlwXCIsXG4gICAgICAgICAgICAgICAgICBcImRhdGEtb3JpZ2luYWwtdGl0bGVcIjogX3ZtLiR0KFwid2luZG93LnJlcGxhY2VTZWxlY3Rpb25cIilcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ub3BlbkZpbGVNYW5hZ2VyIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW192bS5fdihcImZpbmRfcmVwbGFjZVwiKV1cbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcImlcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJtYXRlcmlhbC1pY29uc1wiLFxuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgXCJkYXRhLXRvZ2dsZVwiOiBcInBzdG9vbHRpcFwiLFxuICAgICAgICAgICAgICBcImRhdGEtb3JpZ2luYWwtdGl0bGVcIjogX3ZtLiR0KFwid2luZG93LmRlbGV0ZVwiKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLiRlbWl0KFwicmVtb3ZlU2VsZWN0aW9uXCIpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtfdm0uX3YoXCJkZWxldGVcIildXG4gICAgICAgICksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiaVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm1hdGVyaWFsLWljb25zXCIsXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBcImRhdGEtdG9nZ2xlXCI6IFwicHN0b29sdGlwXCIsXG4gICAgICAgICAgICAgIFwiZGF0YS1vcmlnaW5hbC10aXRsZVwiOiBfdm0uJHQoXCJ3aW5kb3cuY2xvc2VcIilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF92bS4kZW1pdChcInVuc2VsZWN0QWxsXCIpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtfdm0uX3YoXCJjbG9zZVwiKV1cbiAgICAgICAgKVxuICAgICAgXSlcbiAgICBdKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5maWxlcy5sZW5ndGggPiAwICYmIF92bS5zZWxlY3RlZEZpbGVzLmxlbmd0aCAhPT0gX3ZtLmZpbGVzLmxlbmd0aFxuICAgICAgPyBfYyhcbiAgICAgICAgICBcInBcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJkcm9wem9uZS13aW5kb3ctc2VsZWN0XCIsXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF92bS4kZW1pdChcInNlbGVjdEFsbFwiKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbX3ZtLl92KFwiXFxuICAgIFwiICsgX3ZtLl9zKF92bS4kdChcIndpbmRvdy5zZWxlY3RBbGxcIikpICsgXCJcXG4gIFwiKV1cbiAgICAgICAgKVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5zZWxlY3RlZEZpbGVzLmxlbmd0aCA9PT0gX3ZtLmZpbGVzLmxlbmd0aFxuICAgICAgPyBfYyhcbiAgICAgICAgICBcInBcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJkcm9wem9uZS13aW5kb3ctdW5zZWxlY3RcIixcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLiRlbWl0KFwidW5zZWxlY3RBbGxcIilcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW192bS5fdihcIlxcbiAgICBcIiArIF92bS5fcyhfdm0uJHQoXCJ3aW5kb3cudW5zZWxlY3RBbGxcIikpICsgXCJcXG4gIFwiKV1cbiAgICAgICAgKVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5zZWxlY3RlZEZpbGUgIT09IG51bGxcbiAgICAgID8gX2MoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJtZC1jaGVja2JveCBkcm9wem9uZS13aW5kb3ctY2hlY2tib3hcIixcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIFwiZGF0YS10b2dnbGVcIjogX3ZtLnNob3dDb3ZlclRvb2x0aXAsXG4gICAgICAgICAgICAgIFwiZGF0YS1vcmlnaW5hbC10aXRsZVwiOiBfdm0uJHQoXCJ3aW5kb3cuY2FudERpc2FibGVDb3ZlclwiKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW1xuICAgICAgICAgICAgX2MoXCJsYWJlbFwiLCBbXG4gICAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiY2hlY2tib3hcIiwgZGlzYWJsZWQ6IF92bS5pc0NvdmVyIH0sXG4gICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgY2hlY2tlZDogX3ZtLmlzQ292ZXIgfSxcbiAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uY292ZXJDaGFuZ2VkKCRldmVudClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJtZC1jaGVja2JveC1jb250cm9sXCIgfSksXG4gICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICBcIlxcbiAgICAgIFwiICsgX3ZtLl9zKF92bS4kdChcIndpbmRvdy51c2VBc0NvdmVyXCIpKSArIFwiXFxuICAgIFwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgXVxuICAgICAgICApXG4gICAgICA6IF92bS5fZSgpLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICBzdGF0aWNDbGFzczogXCJkcm9wem9uZS13aW5kb3ctZmlsZW1hbmFnZXJcIixcbiAgICAgIGF0dHJzOiB7IHR5cGU6IFwiZmlsZVwiIH0sXG4gICAgICBvbjoge1xuICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgcmV0dXJuIF92bS53YXRjaEZpbGVzKCRldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX3ZtLnNlbGVjdGVkRmlsZSAhPT0gbnVsbFxuICAgICAgPyBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImRyb3B6b25lLXdpbmRvdy1sYWJlbFwiIH0sIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwibGFiZWxcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiY29udHJvbC1sYWJlbFwiLFxuICAgICAgICAgICAgICBhdHRyczogeyBmb3I6IFwiY2FwdGlvbi10ZXh0YXJlYVwiIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJ3aW5kb3cuY2FwdGlvblwiKSkpXVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0ubG9jYWxlcy5sZW5ndGggPiAxXG4gICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZHJvcGRvd25cIiB9LCBbXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICBcImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnkgYnRuLXNtIGRyb3Bkb3duLXRvZ2dsZSBqcy1sb2NhbGUtYnRuXCIsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtdG9nZ2xlXCI6IFwiZHJvcGRvd25cIixcbiAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtaGFzcG9wdXBcIjogXCJ0cnVlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgICAgICAgICBpZDogXCJwcm9kdWN0X2Ryb3B6b25lX2xhbmdcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0uc2VsZWN0ZWRMb2NhbGUuaXNvX2NvZGUpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImRyb3Bkb3duLW1lbnUgbG9jYWxlLWRyb3Bkb3duLW1lbnVcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWxhYmVsbGVkYnlcIjogXCJmb3JtX2ludm9pY2VfcHJlZml4XCIgfVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF92bS5fbChfdm0ubG9jYWxlcywgZnVuY3Rpb24obG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGxvY2FsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZHJvcGRvd24taXRlbSBqcy1sb2NhbGUtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgXCJkYXRhLWxvY2FsZVwiOiBsb2NhbGUuaXNvX2NvZGUgfVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBcIiArIF92bS5fcyhsb2NhbGUubmFtZSkgKyBcIlxcbiAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgXSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0uc2VsZWN0ZWRGaWxlICE9PSBudWxsXG4gICAgICA/IF9jKFwidGV4dGFyZWFcIiwge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5jYXB0aW9uVmFsdWVbX3ZtLnNlbGVjdGVkTG9jYWxlLmlkX2xhbmddLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImNhcHRpb25WYWx1ZVtzZWxlY3RlZExvY2FsZS5pZF9sYW5nXVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJmb3JtLWNvbnRyb2xcIixcbiAgICAgICAgICBhdHRyczogeyBpZDogXCJjYXB0aW9uLXRleHRhcmVhXCIsIG5hbWU6IFwiY2FwdGlvbi10ZXh0YXJlYVwiIH0sXG4gICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IF92bS5jYXB0aW9uVmFsdWVbX3ZtLnNlbGVjdGVkTG9jYWxlLmlkX2xhbmddIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICByZXR1cm4gX3ZtLnByZXZlbnQoJGV2ZW50KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtleXVwOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgIHJldHVybiBfdm0ucHJldmVudCgkZXZlbnQpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBfdm0uJHNldChcbiAgICAgICAgICAgICAgICBfdm0uY2FwdGlvblZhbHVlLFxuICAgICAgICAgICAgICAgIF92bS5zZWxlY3RlZExvY2FsZS5pZF9sYW5nLFxuICAgICAgICAgICAgICAgICRldmVudC50YXJnZXQudmFsdWVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0uc2VsZWN0ZWRGaWxlXG4gICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZHJvcHpvbmUtd2luZG93LWJ1dHRvbi1jb250YWluZXJcIiB9LCBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJidG4gYnRuLXByaW1hcnkgc2F2ZS1pbWFnZS1zZXR0aW5nc1wiLFxuICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS4kZW1pdChcbiAgICAgICAgICAgICAgICAgICAgXCJzYXZlU2VsZWN0ZWRGaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgIF92bS5jYXB0aW9uVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIF92bS5jb3ZlckRhdGFcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICFfdm0ubG9hZGluZ1xuICAgICAgICAgICAgICAgID8gX2MoXCJzcGFuXCIsIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLiR0KFwid2luZG93LnNhdmVJbWFnZVwiKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICBcIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF92bS5sb2FkaW5nXG4gICAgICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbVwiLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyByb2xlOiBcInN0YXR1c1wiLCBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXVxuICAgICAgICAgIClcbiAgICAgICAgXSlcbiAgICAgIDogX3ZtLl9lKClcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vRHJvcHpvbmVXaW5kb3cudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vRHJvcHpvbmVXaW5kb3cudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9Ecm9wem9uZVdpbmRvdy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjY4N2Q5OGUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vRHJvcHpvbmVXaW5kb3cudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9Ecm9wem9uZVdpbmRvdy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vRHJvcHpvbmVXaW5kb3cudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1zY3NzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvdG1wL3ByZXN0YXNob3AvYWRtaW4tZGV2L3RoZW1lcy9uZXctdGhlbWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNjY4N2Q5OGUnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNjY4N2Q5OGUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNjY4N2Q5OGUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0Ryb3B6b25lV2luZG93LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02Njg3ZDk4ZSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc2Njg3ZDk4ZScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwianMvcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2Ryb3B6b25lL0Ryb3B6b25lV2luZG93LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjb21iaW5hdGlvbnMtZmlsdGVycy1kcm9wZG93blwiIH0sIFtcbiAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImRyb3Bkb3duXCIgfSwgW1xuICAgICAgX2MoXG4gICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgXCJidG5cIixcbiAgICAgICAgICAgIFwiZHJvcGRvd24tdG9nZ2xlXCIsXG4gICAgICAgICAgICBfdm0uc2VsZWN0ZWRGaWx0ZXJzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgPyBcImJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgOiBcImJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiLFxuICAgICAgICAgICAgXCJidG5cIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICBcImRhdGEtdG9nZ2xlXCI6IFwiZHJvcGRvd25cIixcbiAgICAgICAgICAgIFwiYXJpYS1oYXNwb3B1cFwiOiBcInRydWVcIixcbiAgICAgICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBcImZhbHNlXCIsXG4gICAgICAgICAgICBpZDogXCJmb3JtX2ludm9pY2VfcHJlZml4XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICBcIlxcbiAgICAgIFwiICtcbiAgICAgICAgICAgICAgX3ZtLl9zKF92bS5sYWJlbCkgK1xuICAgICAgICAgICAgICBcIiBcIiArXG4gICAgICAgICAgICAgIF92bS5fcyhfdm0ubmJGaWxlcykgK1xuICAgICAgICAgICAgICBcIlxcbiAgICBcIlxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImRyb3Bkb3duLW1lbnVcIixcbiAgICAgICAgICBhdHRyczogeyBcImFyaWEtbGFiZWxsZWRieVwiOiBcImZvcm1faW52b2ljZV9wcmVmaXhcIiB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdm0ucHJldmVudENsb3NlKCRldmVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIF92bS5fbChfdm0uY2hpbGRyZW4sIGZ1bmN0aW9uKGZpbHRlcikge1xuICAgICAgICAgIHJldHVybiBfYyhcImRpdlwiLCB7IGtleTogZmlsdGVyLmlkLCBzdGF0aWNDbGFzczogXCJtZC1jaGVja2JveFwiIH0sIFtcbiAgICAgICAgICAgIF9jKFwibGFiZWxcIiwgeyBzdGF0aWNDbGFzczogXCJkcm9wZG93bi1pdGVtXCIgfSwgW1xuICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm1kLWNoZWNrYm94LWNvbnRhaW5lclwiIH0sIFtcbiAgICAgICAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiY2hlY2tib3hcIiB9LFxuICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgY2hlY2tlZDogX3ZtLmlzQ2hlY2tlZChmaWx0ZXIpIH0sXG4gICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9nZ2xlRmlsdGVyKGZpbHRlcilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwibWQtY2hlY2tib3gtY29udHJvbFwiIH0pLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgICAgICAgIFwiICsgX3ZtLl9zKGZpbHRlci5uYW1lKSArIFwiXFxuICAgICAgICAgIFwiKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdKVxuICAgICAgICB9KSxcbiAgICAgICAgMFxuICAgICAgKVxuICAgIF0pXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0ZpbHRlckRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0ZpbHRlckRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vRmlsdGVyRHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM0ZjIxNmRhJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0ZpbHRlckRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vRmlsdGVyRHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL0ZpbHRlckRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJ2M0ZjIxNmRhJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJ2M0ZjIxNmRhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJ2M0ZjIxNmRhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9GaWx0ZXJEcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzRmMjE2ZGEmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignYzRmMjE2ZGEnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImpzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9maWx0ZXJzL0ZpbHRlckRyb3Bkb3duLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjb21iaW5hdGlvbnMtZmlsdGVyc1wiIH0sIFtcbiAgICBfdm0uZmlsdGVycy5sZW5ndGhcbiAgICAgID8gX2MoXCJsYWJlbFwiLCB7IHN0YXRpY0NsYXNzOiBcImNvbnRyb2wtbGFiZWxcIiB9LCBbXG4gICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uJHQoXCJmaWx0ZXJzLmxhYmVsXCIpKSlcbiAgICAgICAgXSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0uZmlsdGVycy5sZW5ndGhcbiAgICAgID8gX2MoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImNvbWJpbmF0aW9ucy1maWx0ZXJzLWxpbmVcIiB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF92bS5fbChfdm0uZmlsdGVycywgZnVuY3Rpb24oZmlsdGVyKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfYyhcImZpbHRlci1kcm9wZG93blwiLCB7XG4gICAgICAgICAgICAgICAga2V5OiBmaWx0ZXIuaWQsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBmaWx0ZXIuYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgIFwicGFyZW50LWlkXCI6IGZpbHRlci5pZCxcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBmaWx0ZXIubmFtZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHsgYWRkRmlsdGVyOiBfdm0uYWRkRmlsdGVyLCByZW1vdmVGaWx0ZXI6IF92bS5yZW1vdmVGaWx0ZXIgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX3ZtLnNlbGVjdGVkRmlsdGVyc051bWJlciA+IDBcbiAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgIFwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBjb21iaW5hdGlvbnMtZmlsdGVycy1jbGVhclwiLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY2xlYXJBbGwgfVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwibWF0ZXJpYWwtaWNvbnNcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiY2xvc2VcIilcbiAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLiR0YyhcImZpbHRlcnMuY2xlYXJcIiwgX3ZtLnNlbGVjdGVkRmlsdGVyc051bWJlciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJWZpbHRlcnNOYiVcIjogX3ZtLnNlbGVjdGVkRmlsdGVyc051bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICBcIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgXSxcbiAgICAgICAgICAyXG4gICAgICAgIClcbiAgICAgIDogX3ZtLl9lKClcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vRmlsdGVycy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9GaWx0ZXJzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vRmlsdGVycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2U5MDcyZmUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vRmlsdGVycy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL0ZpbHRlcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL0ZpbHRlcnMudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1zY3NzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvdG1wL3ByZXN0YXNob3AvYWRtaW4tZGV2L3RoZW1lcy9uZXctdGhlbWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnM2U5MDcyZmUnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnM2U5MDcyZmUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnM2U5MDcyZmUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0ZpbHRlcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNlOTA3MmZlJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzNlOTA3MmZlJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJqcy9wYWdlcy9wcm9kdWN0L2NvbXBvbmVudHMvZmlsdGVycy9GaWx0ZXJzLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJnZW5lcmF0ZS1tb2RhbC1jb250ZW50XCIgfSwgW1xuICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwidGFncy1pbnB1dCBkLWZsZXggZmxleC13cmFwXCIgfSwgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwidGFncy13cmFwcGVyXCIgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5fbChfdm0uc2VsZWN0ZWRBdHRyaWJ1dGVHcm91cHMsIGZ1bmN0aW9uKHNlbGVjdGVkR3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybiBfdm0uX2woc2VsZWN0ZWRHcm91cC5hdHRyaWJ1dGVzLCBmdW5jdGlvbihcbiAgICAgICAgICAgICAgc2VsZWN0ZWRBdHRyaWJ1dGVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgeyBrZXk6IHNlbGVjdGVkQXR0cmlidXRlLmlkLCBzdGF0aWNDbGFzczogXCJ0YWdcIiB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhzZWxlY3RlZEdyb3VwLm5hbWUpICtcbiAgICAgICAgICAgICAgICAgICAgICBcIjogXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhzZWxlY3RlZEF0dHJpYnV0ZS5uYW1lKSArXG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJpXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJtYXRlcmlhbC1pY29uc1wiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnNlbmRSZW1vdmVFdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEF0dHJpYnV0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoXCJjbG9zZVwiKV1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSlcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwiZm9ybS1jb250cm9sIGlucHV0IGF0dHJpYnV0ZXMtc2VhcmNoXCIsXG4gICAgICAgIGF0dHJzOiB7IHR5cGU6IFwidGV4dFwiLCBwbGFjZWhvbGRlcjogX3ZtLiR0KFwic2VhcmNoLnBsYWNlaG9sZGVyXCIpIH1cbiAgICAgIH0pXG4gICAgXSksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInByb2R1Y3QtY29tYmluYXRpb25zLW1vZGFsLWNvbnRlbnRcIiB9LCBbXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImF0dHJpYnV0ZXMtbGlzdC1vdmVyZmxvd1wiLFxuICAgICAgICAgIGF0dHJzOiB7IGlkOiBcImF0dHJpYnV0ZXMtbGlzdC1zZWxlY3RvclwiIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiYXR0cmlidXRlcy1jb250ZW50XCIgfSxcbiAgICAgICAgICAgIF92bS5fbChfdm0uYXR0cmlidXRlR3JvdXBzLCBmdW5jdGlvbihhdHRyaWJ1dGVHcm91cCkge1xuICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7IGtleTogYXR0cmlidXRlR3JvdXAuaWQsIHN0YXRpY0NsYXNzOiBcImF0dHJpYnV0ZS1ncm91cFwiIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJhdHRyaWJ1dGUtZ3JvdXAtaGVhZGVyXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwibWQtY2hlY2tib3ggYXR0cmlidXRlLWdyb3VwLWNoZWNrYm94XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfYyhcImxhYmVsXCIsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYXR0cmlidXRlLWdyb3VwLWNoZWNrYm94XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiY2hlY2tib3hfXCIgKyBhdHRyaWJ1dGVHcm91cC5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IF92bS5jaGVja2JveExpc3QuaW5jbHVkZXMoYXR0cmlidXRlR3JvdXApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0udG9nZ2xlQWxsKGF0dHJpYnV0ZUdyb3VwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcIm1kLWNoZWNrYm94LWNvbnRyb2xcIiB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgIFwiYVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImF0dHJpYnV0ZS1ncm91cC1uYW1lIGNvbGxhcHNlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLXRvZ2dsZVwiOiBcImNvbGxhcHNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY6IFwiI2F0dHJpYnV0ZS1ncm91cC1cIiArIGF0dHJpYnV0ZUdyb3VwLmlkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKGF0dHJpYnV0ZUdyb3VwLm5hbWUpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhdHRyaWJ1dGUtZ3JvdXAtY29udGVudCBhdHRyaWJ1dGVzIGNvbGxhcHNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgaWQ6IFwiYXR0cmlidXRlLWdyb3VwLVwiICsgYXR0cmlidXRlR3JvdXAuaWQgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBfdm0uX2woYXR0cmlidXRlR3JvdXAuYXR0cmlidXRlcywgZnVuY3Rpb24oYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGF0dHJpYnV0ZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImF0dHJpYnV0ZS1pdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmdldFNlbGVjdGVkQ2xhc3MoYXR0cmlidXRlLCBhdHRyaWJ1dGVHcm91cClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgZm9yOiBcImF0dHJpYnV0ZV9cIiArIGF0dHJpYnV0ZS5pZCB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJhdHRyaWJ1dGVfXCIgKyBhdHRyaWJ1dGUuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJhdHRyaWJ1dGVfXCIgKyBhdHRyaWJ1dGUuaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnNlbmRDaGFuZ2VFdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiYXR0cmlidXRlLWl0ZW0tY29udGVudFwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUuY29sb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJhdHRyaWJ1dGUtaXRlbS1jb2xvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBcImJhY2tncm91bmQtY29sb3I6IFwiICsgYXR0cmlidXRlLmNvbG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiYXR0cmlidXRlLWl0ZW0tbmFtZVwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoYXR0cmlidXRlLm5hbWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICApXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vQXR0cmlidXRlc1NlbGVjdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0F0dHJpYnV0ZXNTZWxlY3Rvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0F0dHJpYnV0ZXNTZWxlY3Rvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YTdmOTNiMzAmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vQXR0cmlidXRlc1NlbGVjdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vQXR0cmlidXRlc1NlbGVjdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuaW1wb3J0IHN0eWxlMCBmcm9tIFwiLi9BdHRyaWJ1dGVzU2VsZWN0b3IudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1zY3NzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvdG1wL3ByZXN0YXNob3AvYWRtaW4tZGV2L3RoZW1lcy9uZXctdGhlbWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnYTdmOTNiMzAnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnYTdmOTNiMzAnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnYTdmOTNiMzAnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0F0dHJpYnV0ZXNTZWxlY3Rvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YTdmOTNiMzAmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignYTdmOTNiMzAnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImpzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9nZW5lcmF0b3IvQXR0cmlidXRlc1NlbGVjdG9yLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGF0dHJzOiB7IGlkOiBcInByb2R1Y3QtY29tYmluYXRpb25zLWdlbmVyYXRlXCIgfSB9LFxuICAgIFtcbiAgICAgIF92bS5pc01vZGFsU2hvd25cbiAgICAgICAgPyBfYyhcIm1vZGFsXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IFwibW9kYWwtdGl0bGVcIjogX3ZtLiR0KFwibW9kYWwudGl0bGVcIiksIGNvbmZpcm1hdGlvbjogdHJ1ZSB9LFxuICAgICAgICAgICAgb246IHsgY2xvc2U6IF92bS5jbG9zZU1vZGFsIH0sXG4gICAgICAgICAgICBzY29wZWRTbG90czogX3ZtLl91KFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBcImJvZHlcIixcbiAgICAgICAgICAgICAgICAgIGZuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uYXR0cmlidXRlR3JvdXBzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwiYXR0cmlidXRlcy1zZWxlY3RvclwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXR0cmlidXRlLWdyb3Vwc1wiOiBfdm0uYXR0cmlidXRlR3JvdXBzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzZWxlY3RlZC1hdHRyaWJ1dGUtZ3JvdXBzXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zZWxlY3RlZEF0dHJpYnV0ZUdyb3Vwc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZVNlbGVjdGVkOiBfdm0uY2hhbmdlU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTZWxlY3RlZDogX3ZtLnJlbW92ZVNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkU2VsZWN0ZWQ6IF92bS5hZGRTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUFsbDogX3ZtLnRvZ2dsZUFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHByb3h5OiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBrZXk6IFwiZm9vdGVyLWNvbmZpcm1hdGlvblwiLFxuICAgICAgICAgICAgICAgICAgZm46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS4kdChcIm1vZGFsLmNsb3NlXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5jbG9zZU1vZGFsKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS4kdChcIm1vZGFsLmNsb3NlXCIpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJidG4gYnRuLXByaW1hcnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIV92bS5nZW5lcmF0ZWRDb21iaW5hdGlvbnNOYiB8fCBfdm0ubG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uZ2VuZXJhdGVDb21iaW5hdGlvbnMoJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIV92bS5sb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uJHRjKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZXJhdG9yLmFjdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5nZW5lcmF0ZWRDb21iaW5hdGlvbnNOYixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiVjb21iaW5hdGlvbnNOYiVcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmdlbmVyYXRlZENvbWJpbmF0aW9uc05iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5sb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyByb2xlOiBcInN0YXR1c1wiLCBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHByb3h5OiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgMzY2MzM1ODE5OVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9Db21iaW5hdGlvbkdlbmVyYXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9Db21iaW5hdGlvbkdlbmVyYXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0NvbWJpbmF0aW9uR2VuZXJhdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNTZjNzk1NCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9Db21iaW5hdGlvbkdlbmVyYXRvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL0NvbWJpbmF0aW9uR2VuZXJhdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL3RtcC9wcmVzdGFzaG9wL2FkbWluLWRldi90aGVtZXMvbmV3LXRoZW1lL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzA1NmM3OTU0JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzA1NmM3OTU0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzA1NmM3OTU0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9Db21iaW5hdGlvbkdlbmVyYXRvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDU2Yzc5NTQmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMDU2Yzc5NTQnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImpzL3BhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9nZW5lcmF0b3IvQ29tYmluYXRpb25HZW5lcmF0b3IudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtcbiAgICAgIF9jKFwidHJhbnNpdGlvblwiLCB7IGF0dHJzOiB7IG5hbWU6IFwiZmFkZVwiIH0gfSwgW1xuICAgICAgICBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwibW9kYWwgc2hvd1wiIH0sXG4gICAgICAgICAgW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJtb2RhbC1kaWFsb2cgbW9kYWwtZGlhbG9nLWNlbnRlcmVkXCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgcm9sZTogXCJkb2N1bWVudFwiIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiY2xpY2stb3V0c2lkZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LWNsaWNrLW91dHNpZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uY2xvc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImNsb3NlXCJcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm1vZGFsLWNvbnRlbnRcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBcIm1vZGFsVGl0bGVcIixcbiAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogXCJtb2RhbERlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJoZWFkZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcIm1vZGFsLWhlYWRlclwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl90KFwiaGVhZGVyXCIsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJoNVwiLCB7IHN0YXRpY0NsYXNzOiBcIm1vZGFsLXRpdGxlXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5tb2RhbFRpdGxlKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiY2xvc2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS1kaXNtaXNzXCI6IFwibW9kYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IFwiQ2xvc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uY2xvc2UoJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBhdHRyczogeyBcImFyaWEtaGlkZGVuXCI6IFwidHJ1ZVwiIH0gfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCLDl1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgIFwic2VjdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwibW9kYWwtYm9keVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgW192bS5fdChcImJvZHlcIildLFxuICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJmb290ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcIm1vZGFsLWZvb3RlclwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgIV92bS5jb25maXJtYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfdm0uX3QoXCJmb290ZXJcIiwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogXCJDbG9zZSBtb2RhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5jbG9zZSgkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLmNsb3NlTGFiZWwpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uY29uZmlybWF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLl90KFwiZm9vdGVyLWNvbmZpcm1hdGlvblwiLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBcIkNsb3NlIG1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmNsb3NlKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0uY2FuY2VsTGFiZWwpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmNvbmZpcm0oJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5jb25maXJtTGFiZWwpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF92bS5fdChcIm91dHNpZGVcIilcbiAgICAgICAgICBdLFxuICAgICAgICAgIDJcbiAgICAgICAgKVxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICBzdGF0aWNDbGFzczogXCJtb2RhbC1iYWNrZHJvcCBzaG93XCIsXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgcmV0dXJuIF92bS5jbG9zZSgkZXZlbnQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL01vZGFsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC0xWzBdLnJ1bGVzWzBdLnVzZVswXSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL01vZGFsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vTW9kYWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRmNjc0MDI1JnNjb3BlZD10cnVlJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL01vZGFsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vTW9kYWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL01vZGFsLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTRmNjc0MDI1Jmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIFwiNGY2NzQwMjVcIixcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvdG1wL3ByZXN0YXNob3AvYWRtaW4tZGV2L3RoZW1lcy9uZXctdGhlbWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNGY2NzQwMjUnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNGY2NzQwMjUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNGY2NzQwMjUnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL01vZGFsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZjY3NDAyNSZzY29wZWQ9dHJ1ZSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc0ZjY3NDAyNScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwianMvdnVlL2NvbXBvbmVudHMvTW9kYWwudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInBhZ2luYXRpb25cIiB9LCBbXG4gICAgX2MoXG4gICAgICBcInVsXCIsXG4gICAgICB7IHN0YXRpY0NsYXNzOiBcInBhZ2luYXRpb24tbGlzdFwiIH0sXG4gICAgICBbXG4gICAgICAgIF9jKFwibGlcIiwgeyBzdGF0aWNDbGFzczogXCJwYWdpbmF0aW9uLWl0ZW0gcGFnaW5hdGlvbi1wcmV2aW91c1wiIH0sIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGF0dHJzOiB7IGRpc2FibGVkOiBfdm0uY3VycmVudFBhZ2UgPT09IDEgfSxcbiAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmdvVG9QYWdlKF92bS5jdXJyZW50UGFnZSAtIDEpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJtYXRlcmlhbC1pY29uc1wiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCJjaGV2cm9uX2xlZnRcIilcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApXG4gICAgICAgIF0pLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfdm0uX2woX3ZtLnBhZ2luYXRlZERhdGFzLCBmdW5jdGlvbihwYWdlLCBrZXkpIHtcbiAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICBcImxpXCIsXG4gICAgICAgICAgICB7IGtleToga2V5LCBjbGFzczogW1wicGFnaW5hdGlvbi1pdGVtXCIsIF92bS5pc0FjdGl2ZShrZXkpXSB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmdvVG9QYWdlKGtleSArIDEpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtfdm0uX3YoXCJcXG4gICAgICAgIFwiICsgX3ZtLl9zKGtleSArIDEpICsgXCJcXG4gICAgICBcIildXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApXG4gICAgICAgIH0pLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcImxpXCIsIHsgc3RhdGljQ2xhc3M6IFwicGFnaW5hdGlvbi1pdGVtIHBhZ2luYXRpb24tbmV4dFwiIH0sIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5jdXJyZW50UGFnZSA9PT0gX3ZtLnBhZ2luYXRlZERhdGFzLmxlbmd0aFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uZ29Ub1BhZ2UoX3ZtLmN1cnJlbnRQYWdlICsgMSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcIm1hdGVyaWFsLWljb25zXCIgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihcImNoZXZyb25fcmlnaHRcIilcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApXG4gICAgICAgIF0pXG4gICAgICBdLFxuICAgICAgMlxuICAgIClcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTFbMF0ucnVsZXNbMF0udXNlWzBdIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P2Nsb25lZFJ1bGVTZXQtMVswXS5ydWxlc1swXS51c2VbMF0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9QYWdpbmF0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDVjYWI3ZDImXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL1BhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5pbXBvcnQgc3R5bGUwIGZyb20gXCIuL1BhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1zY3NzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvdG1wL3ByZXN0YXNob3AvYWRtaW4tZGV2L3RoZW1lcy9uZXctdGhlbWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNDVjYWI3ZDInKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNDVjYWI3ZDInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNDVjYWI3ZDInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1BhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ1Y2FiN2QyJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzQ1Y2FiN2QyJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJqcy92dWUvY29tcG9uZW50cy9QYWdpbmF0aW9uLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsIi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG4vLyBJTVBPUlRBTlQ6IERvIE5PVCB1c2UgRVMyMDE1IGZlYXR1cmVzIGluIHRoaXMgZmlsZSAoZXhjZXB0IGZvciBtb2R1bGVzKS5cbi8vIFRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyLCAvKiBzZXJ2ZXIgb25seSAqL1xuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG4gICAgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAocmVuZGVyKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuc1xuICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZVxuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gJ2RhdGEtdi0nICsgc2NvcGVJZFxuICB9XG5cbiAgdmFyIGhvb2tcbiAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAob3B0aW9ucy5mdW5jdGlvbmFsID8gdGhpcy5wYXJlbnQgOiB0aGlzKS4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290XG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIDogaW5qZWN0U3R5bGVzXG4gIH1cblxuICBpZiAoaG9vaykge1xuICAgIGlmIChvcHRpb25zLmZ1bmN0aW9uYWwpIHtcbiAgICAgIC8vIGZvciB0ZW1wbGF0ZS1vbmx5IGhvdC1yZWxvYWQgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIHJlbmRlciBmbiBkb2Vzbid0XG4gICAgICAvLyBnbyB0aHJvdWdoIHRoZSBub3JtYWxpemVyXG4gICAgICBvcHRpb25zLl9pbmplY3RTdHlsZXMgPSBob29rXG4gICAgICAvLyByZWdpc3RlciBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcbiAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbiAoaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuICAgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcbiAgICAgICAgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG4iLCIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NlcnAudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NjZjNGM1YWImbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiKTtcbmlmKGNvbnRlbnQuX19lc01vZHVsZSkgY29udGVudCA9IGNvbnRlbnQuZGVmYXVsdDtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgYWRkID0gcmVxdWlyZShcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzXCIpLmRlZmF1bHRcbnZhciB1cGRhdGUgPSBhZGQoXCIyYzgzZDRkYlwiLCBjb250ZW50LCBmYWxzZSwge30pO1xuLy8gSG90IE1vZHVsZSBSZXBsYWNlbWVudFxuaWYobW9kdWxlLmhvdCkge1xuIC8vIFdoZW4gdGhlIHN0eWxlcyBjaGFuZ2UsIHVwZGF0ZSB0aGUgPHN0eWxlPiB0YWdzXG4gaWYoIWNvbnRlbnQubG9jYWxzKSB7XG4gICBtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NlcnAudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NjZjNGM1YWImbGFuZz1zY3NzJnNjb3BlZD10cnVlJlwiLCBmdW5jdGlvbigpIHtcbiAgICAgdmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc2VycC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD02NmM0YzVhYiZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCIpO1xuICAgICBpZihuZXdDb250ZW50Ll9fZXNNb2R1bGUpIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LmRlZmF1bHQ7XG4gICAgIGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuICAgICB1cGRhdGUobmV3Q29udGVudCk7XG4gICB9KTtcbiB9XG4gLy8gV2hlbiB0aGUgbW9kdWxlIGlzIGRpc3Bvc2VkLCByZW1vdmUgdGhlIDxzdHlsZT4gdGFnc1xuIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufSIsIi8vIHN0eWxlLWxvYWRlcjogQWRkcyBzb21lIGNzcyB0byB0aGUgRE9NIGJ5IGFkZGluZyBhIDxzdHlsZT4gdGFnXG5cbi8vIGxvYWQgdGhlIHN0eWxlc1xudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vQ29tYmluYXRpb25Nb2RhbC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPXNjc3MmXCIpO1xuaWYoY29udGVudC5fX2VzTW9kdWxlKSBjb250ZW50ID0gY29udGVudC5kZWZhdWx0O1xuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2Fscztcbi8vIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSBET01cbnZhciBhZGQgPSByZXF1aXJlKFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanNcIikuZGVmYXVsdFxudmFyIHVwZGF0ZSA9IGFkZChcIjdlNjIzY2E2XCIsIGNvbnRlbnQsIGZhbHNlLCB7fSk7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG4gLy8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3NcbiBpZighY29udGVudC5sb2NhbHMpIHtcbiAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vQ29tYmluYXRpb25Nb2RhbC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPXNjc3MmXCIsIGZ1bmN0aW9uKCkge1xuICAgICB2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9Db21iaW5hdGlvbk1vZGFsLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIik7XG4gICAgIGlmKG5ld0NvbnRlbnQuX19lc01vZHVsZSkgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQuZGVmYXVsdDtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwiLy8gc3R5bGUtbG9hZGVyOiBBZGRzIHNvbWUgY3NzIHRvIHRoZSBET00gYnkgYWRkaW5nIGEgPHN0eWxlPiB0YWdcblxuLy8gbG9hZCB0aGUgc3R5bGVzXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9IaXN0b3J5LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIik7XG5pZihjb250ZW50Ll9fZXNNb2R1bGUpIGNvbnRlbnQgPSBjb250ZW50LmRlZmF1bHQ7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIGFkZCA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qc1wiKS5kZWZhdWx0XG52YXIgdXBkYXRlID0gYWRkKFwiMjFjMTE1ZGFcIiwgY29udGVudCwgZmFsc2UsIHt9KTtcbi8vIEhvdCBNb2R1bGUgUmVwbGFjZW1lbnRcbmlmKG1vZHVsZS5ob3QpIHtcbiAvLyBXaGVuIHRoZSBzdHlsZXMgY2hhbmdlLCB1cGRhdGUgdGhlIDxzdHlsZT4gdGFnc1xuIGlmKCFjb250ZW50LmxvY2Fscykge1xuICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9IaXN0b3J5LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIiwgZnVuY3Rpb24oKSB7XG4gICAgIHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0hpc3RvcnkudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1zY3NzJlwiKTtcbiAgICAgaWYobmV3Q29udGVudC5fX2VzTW9kdWxlKSBuZXdDb250ZW50ID0gbmV3Q29udGVudC5kZWZhdWx0O1xuICAgICBpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcbiAgICAgdXBkYXRlKG5ld0NvbnRlbnQpO1xuICAgfSk7XG4gfVxuIC8vIFdoZW4gdGhlIG1vZHVsZSBpcyBkaXNwb3NlZCwgcmVtb3ZlIHRoZSA8c3R5bGU+IHRhZ3NcbiBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0Ryb3B6b25lLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIik7XG5pZihjb250ZW50Ll9fZXNNb2R1bGUpIGNvbnRlbnQgPSBjb250ZW50LmRlZmF1bHQ7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIGFkZCA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qc1wiKS5kZWZhdWx0XG52YXIgdXBkYXRlID0gYWRkKFwiOGFmZmQzYTZcIiwgY29udGVudCwgZmFsc2UsIHt9KTtcbi8vIEhvdCBNb2R1bGUgUmVwbGFjZW1lbnRcbmlmKG1vZHVsZS5ob3QpIHtcbiAvLyBXaGVuIHRoZSBzdHlsZXMgY2hhbmdlLCB1cGRhdGUgdGhlIDxzdHlsZT4gdGFnc1xuIGlmKCFjb250ZW50LmxvY2Fscykge1xuICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9Ecm9wem9uZS52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPXNjc3MmXCIsIGZ1bmN0aW9uKCkge1xuICAgICB2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9Ecm9wem9uZS52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPXNjc3MmXCIpO1xuICAgICBpZihuZXdDb250ZW50Ll9fZXNNb2R1bGUpIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LmRlZmF1bHQ7XG4gICAgIGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuICAgICB1cGRhdGUobmV3Q29udGVudCk7XG4gICB9KTtcbiB9XG4gLy8gV2hlbiB0aGUgbW9kdWxlIGlzIGRpc3Bvc2VkLCByZW1vdmUgdGhlIDxzdHlsZT4gdGFnc1xuIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufSIsIi8vIHN0eWxlLWxvYWRlcjogQWRkcyBzb21lIGNzcyB0byB0aGUgRE9NIGJ5IGFkZGluZyBhIDxzdHlsZT4gdGFnXG5cbi8vIGxvYWQgdGhlIHN0eWxlc1xudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vRHJvcHpvbmVQaG90b1N3aXBlLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIik7XG5pZihjb250ZW50Ll9fZXNNb2R1bGUpIGNvbnRlbnQgPSBjb250ZW50LmRlZmF1bHQ7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIGFkZCA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qc1wiKS5kZWZhdWx0XG52YXIgdXBkYXRlID0gYWRkKFwiY2EzMWI4ODZcIiwgY29udGVudCwgZmFsc2UsIHt9KTtcbi8vIEhvdCBNb2R1bGUgUmVwbGFjZW1lbnRcbmlmKG1vZHVsZS5ob3QpIHtcbiAvLyBXaGVuIHRoZSBzdHlsZXMgY2hhbmdlLCB1cGRhdGUgdGhlIDxzdHlsZT4gdGFnc1xuIGlmKCFjb250ZW50LmxvY2Fscykge1xuICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9Ecm9wem9uZVBob3RvU3dpcGUudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1zY3NzJlwiLCBmdW5jdGlvbigpIHtcbiAgICAgdmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vRHJvcHpvbmVQaG90b1N3aXBlLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIik7XG4gICAgIGlmKG5ld0NvbnRlbnQuX19lc01vZHVsZSkgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQuZGVmYXVsdDtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwiLy8gc3R5bGUtbG9hZGVyOiBBZGRzIHNvbWUgY3NzIHRvIHRoZSBET00gYnkgYWRkaW5nIGEgPHN0eWxlPiB0YWdcblxuLy8gbG9hZCB0aGUgc3R5bGVzXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9Ecm9wem9uZVdpbmRvdy52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPXNjc3MmXCIpO1xuaWYoY29udGVudC5fX2VzTW9kdWxlKSBjb250ZW50ID0gY29udGVudC5kZWZhdWx0O1xuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2Fscztcbi8vIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSBET01cbnZhciBhZGQgPSByZXF1aXJlKFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanNcIikuZGVmYXVsdFxudmFyIHVwZGF0ZSA9IGFkZChcImQ4NDQ4NTY2XCIsIGNvbnRlbnQsIGZhbHNlLCB7fSk7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG4gLy8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3NcbiBpZighY29udGVudC5sb2NhbHMpIHtcbiAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vRHJvcHpvbmVXaW5kb3cudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1zY3NzJlwiLCBmdW5jdGlvbigpIHtcbiAgICAgdmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vRHJvcHpvbmVXaW5kb3cudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1zY3NzJlwiKTtcbiAgICAgaWYobmV3Q29udGVudC5fX2VzTW9kdWxlKSBuZXdDb250ZW50ID0gbmV3Q29udGVudC5kZWZhdWx0O1xuICAgICBpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcbiAgICAgdXBkYXRlKG5ld0NvbnRlbnQpO1xuICAgfSk7XG4gfVxuIC8vIFdoZW4gdGhlIG1vZHVsZSBpcyBkaXNwb3NlZCwgcmVtb3ZlIHRoZSA8c3R5bGU+IHRhZ3NcbiBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0ZpbHRlckRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIik7XG5pZihjb250ZW50Ll9fZXNNb2R1bGUpIGNvbnRlbnQgPSBjb250ZW50LmRlZmF1bHQ7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIGFkZCA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qc1wiKS5kZWZhdWx0XG52YXIgdXBkYXRlID0gYWRkKFwiMmZmMWUyZmVcIiwgY29udGVudCwgZmFsc2UsIHt9KTtcbi8vIEhvdCBNb2R1bGUgUmVwbGFjZW1lbnRcbmlmKG1vZHVsZS5ob3QpIHtcbiAvLyBXaGVuIHRoZSBzdHlsZXMgY2hhbmdlLCB1cGRhdGUgdGhlIDxzdHlsZT4gdGFnc1xuIGlmKCFjb250ZW50LmxvY2Fscykge1xuICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9GaWx0ZXJEcm9wZG93bi52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPXNjc3MmXCIsIGZ1bmN0aW9uKCkge1xuICAgICB2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9GaWx0ZXJEcm9wZG93bi52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPXNjc3MmXCIpO1xuICAgICBpZihuZXdDb250ZW50Ll9fZXNNb2R1bGUpIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LmRlZmF1bHQ7XG4gICAgIGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuICAgICB1cGRhdGUobmV3Q29udGVudCk7XG4gICB9KTtcbiB9XG4gLy8gV2hlbiB0aGUgbW9kdWxlIGlzIGRpc3Bvc2VkLCByZW1vdmUgdGhlIDxzdHlsZT4gdGFnc1xuIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufSIsIi8vIHN0eWxlLWxvYWRlcjogQWRkcyBzb21lIGNzcyB0byB0aGUgRE9NIGJ5IGFkZGluZyBhIDxzdHlsZT4gdGFnXG5cbi8vIGxvYWQgdGhlIHN0eWxlc1xudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vRmlsdGVycy52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPXNjc3MmXCIpO1xuaWYoY29udGVudC5fX2VzTW9kdWxlKSBjb250ZW50ID0gY29udGVudC5kZWZhdWx0O1xuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2Fscztcbi8vIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSBET01cbnZhciBhZGQgPSByZXF1aXJlKFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanNcIikuZGVmYXVsdFxudmFyIHVwZGF0ZSA9IGFkZChcIjcyZGFiNzI2XCIsIGNvbnRlbnQsIGZhbHNlLCB7fSk7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG4gLy8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3NcbiBpZighY29udGVudC5sb2NhbHMpIHtcbiAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vRmlsdGVycy52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPXNjc3MmXCIsIGZ1bmN0aW9uKCkge1xuICAgICB2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9GaWx0ZXJzLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIik7XG4gICAgIGlmKG5ld0NvbnRlbnQuX19lc01vZHVsZSkgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQuZGVmYXVsdDtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwiLy8gc3R5bGUtbG9hZGVyOiBBZGRzIHNvbWUgY3NzIHRvIHRoZSBET00gYnkgYWRkaW5nIGEgPHN0eWxlPiB0YWdcblxuLy8gbG9hZCB0aGUgc3R5bGVzXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9BdHRyaWJ1dGVzU2VsZWN0b3IudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1zY3NzJlwiKTtcbmlmKGNvbnRlbnQuX19lc01vZHVsZSkgY29udGVudCA9IGNvbnRlbnQuZGVmYXVsdDtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgYWRkID0gcmVxdWlyZShcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzXCIpLmRlZmF1bHRcbnZhciB1cGRhdGUgPSBhZGQoXCI0NDBhMjA2ZVwiLCBjb250ZW50LCBmYWxzZSwge30pO1xuLy8gSG90IE1vZHVsZSBSZXBsYWNlbWVudFxuaWYobW9kdWxlLmhvdCkge1xuIC8vIFdoZW4gdGhlIHN0eWxlcyBjaGFuZ2UsIHVwZGF0ZSB0aGUgPHN0eWxlPiB0YWdzXG4gaWYoIWNvbnRlbnQubG9jYWxzKSB7XG4gICBtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0F0dHJpYnV0ZXNTZWxlY3Rvci52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPXNjc3MmXCIsIGZ1bmN0aW9uKCkge1xuICAgICB2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9BdHRyaWJ1dGVzU2VsZWN0b3IudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmbGFuZz1zY3NzJlwiKTtcbiAgICAgaWYobmV3Q29udGVudC5fX2VzTW9kdWxlKSBuZXdDb250ZW50ID0gbmV3Q29udGVudC5kZWZhdWx0O1xuICAgICBpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcbiAgICAgdXBkYXRlKG5ld0NvbnRlbnQpO1xuICAgfSk7XG4gfVxuIC8vIFdoZW4gdGhlIG1vZHVsZSBpcyBkaXNwb3NlZCwgcmVtb3ZlIHRoZSA8c3R5bGU+IHRhZ3NcbiBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL01vZGFsLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTRmNjc0MDI1Jmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZSZcIik7XG5pZihjb250ZW50Ll9fZXNNb2R1bGUpIGNvbnRlbnQgPSBjb250ZW50LmRlZmF1bHQ7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIGFkZCA9IHJlcXVpcmUoXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qc1wiKS5kZWZhdWx0XG52YXIgdXBkYXRlID0gYWRkKFwiMGJkYjkxODBcIiwgY29udGVudCwgZmFsc2UsIHt9KTtcbi8vIEhvdCBNb2R1bGUgUmVwbGFjZW1lbnRcbmlmKG1vZHVsZS5ob3QpIHtcbiAvLyBXaGVuIHRoZSBzdHlsZXMgY2hhbmdlLCB1cGRhdGUgdGhlIDxzdHlsZT4gdGFnc1xuIGlmKCFjb250ZW50LmxvY2Fscykge1xuICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9Nb2RhbC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD00ZjY3NDAyNSZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCIsIGZ1bmN0aW9uKCkge1xuICAgICB2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9Nb2RhbC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD00ZjY3NDAyNSZsYW5nPXNjc3Mmc2NvcGVkPXRydWUmXCIpO1xuICAgICBpZihuZXdDb250ZW50Ll9fZXNNb2R1bGUpIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LmRlZmF1bHQ7XG4gICAgIGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuICAgICB1cGRhdGUobmV3Q29udGVudCk7XG4gICB9KTtcbiB9XG4gLy8gV2hlbiB0aGUgbW9kdWxlIGlzIGRpc3Bvc2VkLCByZW1vdmUgdGhlIDxzdHlsZT4gdGFnc1xuIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufSIsIi8vIHN0eWxlLWxvYWRlcjogQWRkcyBzb21lIGNzcyB0byB0aGUgRE9NIGJ5IGFkZGluZyBhIDxzdHlsZT4gdGFnXG5cbi8vIGxvYWQgdGhlIHN0eWxlc1xudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPXNjc3MmXCIpO1xuaWYoY29udGVudC5fX2VzTW9kdWxlKSBjb250ZW50ID0gY29udGVudC5kZWZhdWx0O1xuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2Fscztcbi8vIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSBET01cbnZhciBhZGQgPSByZXF1aXJlKFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanNcIikuZGVmYXVsdFxudmFyIHVwZGF0ZSA9IGFkZChcIjE2ZWFmN2VmXCIsIGNvbnRlbnQsIGZhbHNlLCB7fSk7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG4gLy8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3NcbiBpZighY29udGVudC5sb2NhbHMpIHtcbiAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vUGFnaW5hdGlvbi52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZsYW5nPXNjc3MmXCIsIGZ1bmN0aW9uKCkge1xuICAgICB2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9QYWdpbmF0aW9uLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmxhbmc9c2NzcyZcIik7XG4gICAgIGlmKG5ld0NvbnRlbnQuX19lc01vZHVsZSkgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQuZGVmYXVsdDtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwiLyoqXG4gKiBUcmFuc2xhdGVzIHRoZSBsaXN0IGZvcm1hdCBwcm9kdWNlZCBieSBjc3MtbG9hZGVyIGludG8gc29tZXRoaW5nXG4gKiBlYXNpZXIgdG8gbWFuaXB1bGF0ZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGlzdFRvU3R5bGVzIChwYXJlbnRJZCwgbGlzdCkge1xuICB2YXIgc3R5bGVzID0gW11cbiAgdmFyIG5ld1N0eWxlcyA9IHt9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXVxuICAgIHZhciBpZCA9IGl0ZW1bMF1cbiAgICB2YXIgY3NzID0gaXRlbVsxXVxuICAgIHZhciBtZWRpYSA9IGl0ZW1bMl1cbiAgICB2YXIgc291cmNlTWFwID0gaXRlbVszXVxuICAgIHZhciBwYXJ0ID0ge1xuICAgICAgaWQ6IHBhcmVudElkICsgJzonICsgaSxcbiAgICAgIGNzczogY3NzLFxuICAgICAgbWVkaWE6IG1lZGlhLFxuICAgICAgc291cmNlTWFwOiBzb3VyY2VNYXBcbiAgICB9XG4gICAgaWYgKCFuZXdTdHlsZXNbaWRdKSB7XG4gICAgICBzdHlsZXMucHVzaChuZXdTdHlsZXNbaWRdID0geyBpZDogaWQsIHBhcnRzOiBbcGFydF0gfSlcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3U3R5bGVzW2lkXS5wYXJ0cy5wdXNoKHBhcnQpXG4gICAgfVxuICB9XG4gIHJldHVybiBzdHlsZXNcbn1cbiIsIi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiAgTW9kaWZpZWQgYnkgRXZhbiBZb3UgQHl5eDk5MDgwM1xuKi9cblxuaW1wb3J0IGxpc3RUb1N0eWxlcyBmcm9tICcuL2xpc3RUb1N0eWxlcydcblxudmFyIGhhc0RvY3VtZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuXG5pZiAodHlwZW9mIERFQlVHICE9PSAndW5kZWZpbmVkJyAmJiBERUJVRykge1xuICBpZiAoIWhhc0RvY3VtZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2dWUtc3R5bGUtbG9hZGVyIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQuICcgK1xuICAgIFwiVXNlIHsgdGFyZ2V0OiAnbm9kZScgfSBpbiB5b3VyIFdlYnBhY2sgY29uZmlnIHRvIGluZGljYXRlIGEgc2VydmVyLXJlbmRlcmluZyBlbnZpcm9ubWVudC5cIlxuICApIH1cbn1cblxuLypcbnR5cGUgU3R5bGVPYmplY3QgPSB7XG4gIGlkOiBudW1iZXI7XG4gIHBhcnRzOiBBcnJheTxTdHlsZU9iamVjdFBhcnQ+XG59XG5cbnR5cGUgU3R5bGVPYmplY3RQYXJ0ID0ge1xuICBjc3M6IHN0cmluZztcbiAgbWVkaWE6IHN0cmluZztcbiAgc291cmNlTWFwOiA/c3RyaW5nXG59XG4qL1xuXG52YXIgc3R5bGVzSW5Eb20gPSB7LypcbiAgW2lkOiBudW1iZXJdOiB7XG4gICAgaWQ6IG51bWJlcixcbiAgICByZWZzOiBudW1iZXIsXG4gICAgcGFydHM6IEFycmF5PChvYmo/OiBTdHlsZU9iamVjdFBhcnQpID0+IHZvaWQ+XG4gIH1cbiovfVxuXG52YXIgaGVhZCA9IGhhc0RvY3VtZW50ICYmIChkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0pXG52YXIgc2luZ2xldG9uRWxlbWVudCA9IG51bGxcbnZhciBzaW5nbGV0b25Db3VudGVyID0gMFxudmFyIGlzUHJvZHVjdGlvbiA9IGZhbHNlXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHt9XG52YXIgb3B0aW9ucyA9IG51bGxcbnZhciBzc3JJZEtleSA9ICdkYXRhLXZ1ZS1zc3ItaWQnXG5cbi8vIEZvcmNlIHNpbmdsZS10YWcgc29sdXRpb24gb24gSUU2LTksIHdoaWNoIGhhcyBhIGhhcmQgbGltaXQgb24gdGhlICMgb2YgPHN0eWxlPlxuLy8gdGFncyBpdCB3aWxsIGFsbG93IG9uIGEgcGFnZVxudmFyIGlzT2xkSUUgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAvbXNpZSBbNi05XVxcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZFN0eWxlc0NsaWVudCAocGFyZW50SWQsIGxpc3QsIF9pc1Byb2R1Y3Rpb24sIF9vcHRpb25zKSB7XG4gIGlzUHJvZHVjdGlvbiA9IF9pc1Byb2R1Y3Rpb25cblxuICBvcHRpb25zID0gX29wdGlvbnMgfHwge31cblxuICB2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKHBhcmVudElkLCBsaXN0KVxuICBhZGRTdHlsZXNUb0RvbShzdHlsZXMpXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuICAgIHZhciBtYXlSZW1vdmUgPSBbXVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHN0eWxlc1tpXVxuICAgICAgdmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF1cbiAgICAgIGRvbVN0eWxlLnJlZnMtLVxuICAgICAgbWF5UmVtb3ZlLnB1c2goZG9tU3R5bGUpXG4gICAgfVxuICAgIGlmIChuZXdMaXN0KSB7XG4gICAgICBzdHlsZXMgPSBsaXN0VG9TdHlsZXMocGFyZW50SWQsIG5ld0xpc3QpXG4gICAgICBhZGRTdHlsZXNUb0RvbShzdHlsZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlcyA9IFtdXG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF5UmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZG9tU3R5bGUgPSBtYXlSZW1vdmVbaV1cbiAgICAgIGlmIChkb21TdHlsZS5yZWZzID09PSAwKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZG9tU3R5bGUucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBkb21TdHlsZS5wYXJ0c1tqXSgpXG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHN0eWxlc0luRG9tW2RvbVN0eWxlLmlkXVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRTdHlsZXNUb0RvbSAoc3R5bGVzIC8qIEFycmF5PFN0eWxlT2JqZWN0PiAqLykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gc3R5bGVzW2ldXG4gICAgdmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF1cbiAgICBpZiAoZG9tU3R5bGUpIHtcbiAgICAgIGRvbVN0eWxlLnJlZnMrK1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBkb21TdHlsZS5wYXJ0c1tqXShpdGVtLnBhcnRzW2pdKVxuICAgICAgfVxuICAgICAgZm9yICg7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGRvbVN0eWxlLnBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSkpXG4gICAgICB9XG4gICAgICBpZiAoZG9tU3R5bGUucGFydHMubGVuZ3RoID4gaXRlbS5wYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgZG9tU3R5bGUucGFydHMubGVuZ3RoID0gaXRlbS5wYXJ0cy5sZW5ndGhcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHBhcnRzID0gW11cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBwYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0pKVxuICAgICAgfVxuICAgICAgc3R5bGVzSW5Eb21baXRlbS5pZF0gPSB7IGlkOiBpdGVtLmlkLCByZWZzOiAxLCBwYXJ0czogcGFydHMgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQgKCkge1xuICB2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKVxuICBzdHlsZUVsZW1lbnQudHlwZSA9ICd0ZXh0L2NzcydcbiAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpXG4gIHJldHVybiBzdHlsZUVsZW1lbnRcbn1cblxuZnVuY3Rpb24gYWRkU3R5bGUgKG9iaiAvKiBTdHlsZU9iamVjdFBhcnQgKi8pIHtcbiAgdmFyIHVwZGF0ZSwgcmVtb3ZlXG4gIHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzdHlsZVsnICsgc3NySWRLZXkgKyAnfj1cIicgKyBvYmouaWQgKyAnXCJdJylcblxuICBpZiAoc3R5bGVFbGVtZW50KSB7XG4gICAgaWYgKGlzUHJvZHVjdGlvbikge1xuICAgICAgLy8gaGFzIFNTUiBzdHlsZXMgYW5kIGluIHByb2R1Y3Rpb24gbW9kZS5cbiAgICAgIC8vIHNpbXBseSBkbyBub3RoaW5nLlxuICAgICAgcmV0dXJuIG5vb3BcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaGFzIFNTUiBzdHlsZXMgYnV0IGluIGRldiBtb2RlLlxuICAgICAgLy8gZm9yIHNvbWUgcmVhc29uIENocm9tZSBjYW4ndCBoYW5kbGUgc291cmNlIG1hcCBpbiBzZXJ2ZXItcmVuZGVyZWRcbiAgICAgIC8vIHN0eWxlIHRhZ3MgLSBzb3VyY2UgbWFwcyBpbiA8c3R5bGU+IG9ubHkgd29ya3MgaWYgdGhlIHN0eWxlIHRhZyBpc1xuICAgICAgLy8gY3JlYXRlZCBhbmQgaW5zZXJ0ZWQgZHluYW1pY2FsbHkuIFNvIHdlIHJlbW92ZSB0aGUgc2VydmVyIHJlbmRlcmVkXG4gICAgICAvLyBzdHlsZXMgYW5kIGluamVjdCBuZXcgb25lcy5cbiAgICAgIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudClcbiAgICB9XG4gIH1cblxuICBpZiAoaXNPbGRJRSkge1xuICAgIC8vIHVzZSBzaW5nbGV0b24gbW9kZSBmb3IgSUU5LlxuICAgIHZhciBzdHlsZUluZGV4ID0gc2luZ2xldG9uQ291bnRlcisrXG4gICAgc3R5bGVFbGVtZW50ID0gc2luZ2xldG9uRWxlbWVudCB8fCAoc2luZ2xldG9uRWxlbWVudCA9IGNyZWF0ZVN0eWxlRWxlbWVudCgpKVxuICAgIHVwZGF0ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZUVsZW1lbnQsIHN0eWxlSW5kZXgsIGZhbHNlKVxuICAgIHJlbW92ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZUVsZW1lbnQsIHN0eWxlSW5kZXgsIHRydWUpXG4gIH0gZWxzZSB7XG4gICAgLy8gdXNlIG11bHRpLXN0eWxlLXRhZyBtb2RlIGluIGFsbCBvdGhlciBjYXNlc1xuICAgIHN0eWxlRWxlbWVudCA9IGNyZWF0ZVN0eWxlRWxlbWVudCgpXG4gICAgdXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlRWxlbWVudClcbiAgICByZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgdXBkYXRlKG9iailcblxuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG5ld09iaiAvKiBTdHlsZU9iamVjdFBhcnQgKi8pIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJlxuICAgICAgICAgIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmXG4gICAgICAgICAgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHVwZGF0ZShvYmogPSBuZXdPYmopXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICB9XG59XG5cbnZhciByZXBsYWNlVGV4dCA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXh0U3RvcmUgPSBbXVxuXG4gIHJldHVybiBmdW5jdGlvbiAoaW5kZXgsIHJlcGxhY2VtZW50KSB7XG4gICAgdGV4dFN0b3JlW2luZGV4XSA9IHJlcGxhY2VtZW50XG4gICAgcmV0dXJuIHRleHRTdG9yZS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJylcbiAgfVxufSkoKVxuXG5mdW5jdGlvbiBhcHBseVRvU2luZ2xldG9uVGFnIChzdHlsZUVsZW1lbnQsIGluZGV4LCByZW1vdmUsIG9iaikge1xuICB2YXIgY3NzID0gcmVtb3ZlID8gJycgOiBvYmouY3NzXG5cbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IHJlcGxhY2VUZXh0KGluZGV4LCBjc3MpXG4gIH0gZWxzZSB7XG4gICAgdmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpXG4gICAgdmFyIGNoaWxkTm9kZXMgPSBzdHlsZUVsZW1lbnQuY2hpbGROb2Rlc1xuICAgIGlmIChjaGlsZE5vZGVzW2luZGV4XSkgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKGNoaWxkTm9kZXNbaW5kZXhdKVxuICAgIGlmIChjaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgc3R5bGVFbGVtZW50Lmluc2VydEJlZm9yZShjc3NOb2RlLCBjaGlsZE5vZGVzW2luZGV4XSlcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGNzc05vZGUpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VG9UYWcgKHN0eWxlRWxlbWVudCwgb2JqKSB7XG4gIHZhciBjc3MgPSBvYmouY3NzXG4gIHZhciBtZWRpYSA9IG9iai5tZWRpYVxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcFxuXG4gIGlmIChtZWRpYSkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ21lZGlhJywgbWVkaWEpXG4gIH1cbiAgaWYgKG9wdGlvbnMuc3NySWQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKHNzcklkS2V5LCBvYmouaWQpXG4gIH1cblxuICBpZiAoc291cmNlTWFwKSB7XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9kZXZ0b29scy9kb2NzL2phdmFzY3JpcHQtZGVidWdnaW5nXG4gICAgLy8gdGhpcyBtYWtlcyBzb3VyY2UgbWFwcyBpbnNpZGUgc3R5bGUgdGFncyB3b3JrIHByb3Blcmx5IGluIENocm9tZVxuICAgIGNzcyArPSAnXFxuLyojIHNvdXJjZVVSTD0nICsgc291cmNlTWFwLnNvdXJjZXNbMF0gKyAnICovJ1xuICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2NjAzODc1XG4gICAgY3NzICs9ICdcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCcgKyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpICsgJyAqLydcbiAgfVxuXG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3NcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZClcbiAgICB9XG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpXG4gIH1cbn1cbiIsImlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi92dWUuY29tbW9uLnByb2QuanMnKVxufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL3Z1ZS5jb21tb24uZGV2LmpzJylcbn1cbiIsIi8qIVxuICogVnVlLmpzIHYyLjYuMTJcbiAqIChjKSAyMDE0LTIwMjAgRXZhbiBZb3VcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXCJ1c2Ugc3RyaWN0XCI7dmFyIGU9T2JqZWN0LmZyZWV6ZSh7fSk7ZnVuY3Rpb24gdChlKXtyZXR1cm4gbnVsbD09ZX1mdW5jdGlvbiBuKGUpe3JldHVybiBudWxsIT1lfWZ1bmN0aW9uIHIoZSl7cmV0dXJuITA9PT1lfWZ1bmN0aW9uIGkoZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGV8fFwibnVtYmVyXCI9PXR5cGVvZiBlfHxcInN5bWJvbFwiPT10eXBlb2YgZXx8XCJib29sZWFuXCI9PXR5cGVvZiBlfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIG51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZX12YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIHMoZSl7cmV0dXJuXCJbb2JqZWN0IE9iamVjdF1cIj09PWEuY2FsbChlKX1mdW5jdGlvbiBjKGUpe3ZhciB0PXBhcnNlRmxvYXQoU3RyaW5nKGUpKTtyZXR1cm4gdD49MCYmTWF0aC5mbG9vcih0KT09PXQmJmlzRmluaXRlKGUpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIG4oZSkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUudGhlbiYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5jYXRjaH1mdW5jdGlvbiBsKGUpe3JldHVybiBudWxsPT1lP1wiXCI6QXJyYXkuaXNBcnJheShlKXx8cyhlKSYmZS50b1N0cmluZz09PWE/SlNPTi5zdHJpbmdpZnkoZSxudWxsLDIpOlN0cmluZyhlKX1mdW5jdGlvbiBmKGUpe3ZhciB0PXBhcnNlRmxvYXQoZSk7cmV0dXJuIGlzTmFOKHQpP2U6dH1mdW5jdGlvbiBwKGUsdCl7Zm9yKHZhciBuPU9iamVjdC5jcmVhdGUobnVsbCkscj1lLnNwbGl0KFwiLFwiKSxpPTA7aTxyLmxlbmd0aDtpKyspbltyW2ldXT0hMDtyZXR1cm4gdD9mdW5jdGlvbihlKXtyZXR1cm4gbltlLnRvTG93ZXJDYXNlKCldfTpmdW5jdGlvbihlKXtyZXR1cm4gbltlXX19dmFyIGQ9cChcInNsb3QsY29tcG9uZW50XCIsITApLHY9cChcImtleSxyZWYsc2xvdCxzbG90LXNjb3BlLGlzXCIpO2Z1bmN0aW9uIGgoZSx0KXtpZihlLmxlbmd0aCl7dmFyIG49ZS5pbmRleE9mKHQpO2lmKG4+LTEpcmV0dXJuIGUuc3BsaWNlKG4sMSl9fXZhciBtPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24geShlLHQpe3JldHVybiBtLmNhbGwoZSx0KX1mdW5jdGlvbiBnKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0W25dfHwodFtuXT1lKG4pKX19dmFyIF89Ly0oXFx3KS9nLGI9ZyhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKF8sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD90LnRvVXBwZXJDYXNlKCk6XCJcIn0pfSksJD1nKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSl9KSx3PS9cXEIoW0EtWl0pL2csQz1nKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UodyxcIi0kMVwiKS50b0xvd2VyQ2FzZSgpfSk7dmFyIHg9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5iaW5kKHQpfTpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4obil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gcj9yPjE/ZS5hcHBseSh0LGFyZ3VtZW50cyk6ZS5jYWxsKHQsbik6ZS5jYWxsKHQpfXJldHVybiBuLl9sZW5ndGg9ZS5sZW5ndGgsbn07ZnVuY3Rpb24gayhlLHQpe3Q9dHx8MDtmb3IodmFyIG49ZS5sZW5ndGgtdCxyPW5ldyBBcnJheShuKTtuLS07KXJbbl09ZVtuK3RdO3JldHVybiByfWZ1bmN0aW9uIEEoZSx0KXtmb3IodmFyIG4gaW4gdCllW25dPXRbbl07cmV0dXJuIGV9ZnVuY3Rpb24gTyhlKXtmb3IodmFyIHQ9e30sbj0wO248ZS5sZW5ndGg7bisrKWVbbl0mJkEodCxlW25dKTtyZXR1cm4gdH1mdW5jdGlvbiBTKGUsdCxuKXt9dmFyIFQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiExfSxFPWZ1bmN0aW9uKGUpe3JldHVybiBlfTtmdW5jdGlvbiBOKGUsdCl7aWYoZT09PXQpcmV0dXJuITA7dmFyIG49byhlKSxyPW8odCk7aWYoIW58fCFyKXJldHVybiFuJiYhciYmU3RyaW5nKGUpPT09U3RyaW5nKHQpO3RyeXt2YXIgaT1BcnJheS5pc0FycmF5KGUpLGE9QXJyYXkuaXNBcnJheSh0KTtpZihpJiZhKXJldHVybiBlLmxlbmd0aD09PXQubGVuZ3RoJiZlLmV2ZXJ5KGZ1bmN0aW9uKGUsbil7cmV0dXJuIE4oZSx0W25dKX0pO2lmKGUgaW5zdGFuY2VvZiBEYXRlJiZ0IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gZS5nZXRUaW1lKCk9PT10LmdldFRpbWUoKTtpZihpfHxhKXJldHVybiExO3ZhciBzPU9iamVjdC5rZXlzKGUpLGM9T2JqZWN0LmtleXModCk7cmV0dXJuIHMubGVuZ3RoPT09Yy5sZW5ndGgmJnMuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIE4oZVtuXSx0W25dKX0pfWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiBqKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoTihlW25dLHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEQoZSl7dmFyIHQ9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7dHx8KHQ9ITAsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX12YXIgTD1cImRhdGEtc2VydmVyLXJlbmRlcmVkXCIsTT1bXCJjb21wb25lbnRcIixcImRpcmVjdGl2ZVwiLFwiZmlsdGVyXCJdLEk9W1wiYmVmb3JlQ3JlYXRlXCIsXCJjcmVhdGVkXCIsXCJiZWZvcmVNb3VudFwiLFwibW91bnRlZFwiLFwiYmVmb3JlVXBkYXRlXCIsXCJ1cGRhdGVkXCIsXCJiZWZvcmVEZXN0cm95XCIsXCJkZXN0cm95ZWRcIixcImFjdGl2YXRlZFwiLFwiZGVhY3RpdmF0ZWRcIixcImVycm9yQ2FwdHVyZWRcIixcInNlcnZlclByZWZldGNoXCJdLEY9e29wdGlvbk1lcmdlU3RyYXRlZ2llczpPYmplY3QuY3JlYXRlKG51bGwpLHNpbGVudDohMSxwcm9kdWN0aW9uVGlwOiExLGRldnRvb2xzOiExLHBlcmZvcm1hbmNlOiExLGVycm9ySGFuZGxlcjpudWxsLHdhcm5IYW5kbGVyOm51bGwsaWdub3JlZEVsZW1lbnRzOltdLGtleUNvZGVzOk9iamVjdC5jcmVhdGUobnVsbCksaXNSZXNlcnZlZFRhZzpULGlzUmVzZXJ2ZWRBdHRyOlQsaXNVbmtub3duRWxlbWVudDpULGdldFRhZ05hbWVzcGFjZTpTLHBhcnNlUGxhdGZvcm1UYWdOYW1lOkUsbXVzdFVzZVByb3A6VCxhc3luYzohMCxfbGlmZWN5Y2xlSG9va3M6SX0sUD0vYS16QS1aXFx1MDBCN1xcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwM0YtXFx1MjA0MFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRC87ZnVuY3Rpb24gUihlLHQsbixyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ISFyLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfXZhciBIPW5ldyBSZWdFeHAoXCJbXlwiK1Auc291cmNlK1wiLiRfXFxcXGRdXCIpO3ZhciBCLFU9XCJfX3Byb3RvX19cImlue30sej1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93LFY9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFdYRW52aXJvbm1lbnQmJiEhV1hFbnZpcm9ubWVudC5wbGF0Zm9ybSxLPVYmJldYRW52aXJvbm1lbnQucGxhdGZvcm0udG9Mb3dlckNhc2UoKSxKPXomJndpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkscT1KJiYvbXNpZXx0cmlkZW50Ly50ZXN0KEopLFc9SiYmSi5pbmRleE9mKFwibXNpZSA5LjBcIik+MCxaPUomJkouaW5kZXhPZihcImVkZ2UvXCIpPjAsRz0oSiYmSi5pbmRleE9mKFwiYW5kcm9pZFwiKSxKJiYvaXBob25lfGlwYWR8aXBvZHxpb3MvLnRlc3QoSil8fFwiaW9zXCI9PT1LKSxYPShKJiYvY2hyb21lXFwvXFxkKy8udGVzdChKKSxKJiYvcGhhbnRvbWpzLy50ZXN0KEopLEomJkoubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSksWT17fS53YXRjaCxRPSExO2lmKHopdHJ5e3ZhciBlZT17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZWUsXCJwYXNzaXZlXCIse2dldDpmdW5jdGlvbigpe1E9ITB9fSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0LXBhc3NpdmVcIixudWxsLGVlKX1jYXRjaChlKXt9dmFyIHRlPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PUImJihCPSF6JiYhViYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbCYmKGdsb2JhbC5wcm9jZXNzJiZcInNlcnZlclwiPT09Z2xvYmFsLnByb2Nlc3MuZW52LlZVRV9FTlYpKSxCfSxuZT16JiZ3aW5kb3cuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztmdW5jdGlvbiByZShlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYvbmF0aXZlIGNvZGUvLnRlc3QoZS50b1N0cmluZygpKX12YXIgaWUsb2U9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmcmUoU3ltYm9sKSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFJlZmxlY3QmJnJlKFJlZmxlY3Qub3duS2V5cyk7aWU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFNldCYmcmUoU2V0KT9TZXQ6ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5zZXQ9T2JqZWN0LmNyZWF0ZShudWxsKX1yZXR1cm4gZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiEwPT09dGhpcy5zZXRbZV19LGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLnNldFtlXT0hMH0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNldD1PYmplY3QuY3JlYXRlKG51bGwpfSxlfSgpO3ZhciBhZT1TLHNlPTAsY2U9ZnVuY3Rpb24oKXt0aGlzLmlkPXNlKyssdGhpcy5zdWJzPVtdfTtjZS5wcm90b3R5cGUuYWRkU3ViPWZ1bmN0aW9uKGUpe3RoaXMuc3Vicy5wdXNoKGUpfSxjZS5wcm90b3R5cGUucmVtb3ZlU3ViPWZ1bmN0aW9uKGUpe2godGhpcy5zdWJzLGUpfSxjZS5wcm90b3R5cGUuZGVwZW5kPWZ1bmN0aW9uKCl7Y2UudGFyZ2V0JiZjZS50YXJnZXQuYWRkRGVwKHRoaXMpfSxjZS5wcm90b3R5cGUubm90aWZ5PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuc3Vicy5zbGljZSgpLHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspZVt0XS51cGRhdGUoKX0sY2UudGFyZ2V0PW51bGw7dmFyIHVlPVtdO2Z1bmN0aW9uIGxlKGUpe3VlLnB1c2goZSksY2UudGFyZ2V0PWV9ZnVuY3Rpb24gZmUoKXt1ZS5wb3AoKSxjZS50YXJnZXQ9dWVbdWUubGVuZ3RoLTFdfXZhciBwZT1mdW5jdGlvbihlLHQsbixyLGksbyxhLHMpe3RoaXMudGFnPWUsdGhpcy5kYXRhPXQsdGhpcy5jaGlsZHJlbj1uLHRoaXMudGV4dD1yLHRoaXMuZWxtPWksdGhpcy5ucz12b2lkIDAsdGhpcy5jb250ZXh0PW8sdGhpcy5mbkNvbnRleHQ9dm9pZCAwLHRoaXMuZm5PcHRpb25zPXZvaWQgMCx0aGlzLmZuU2NvcGVJZD12b2lkIDAsdGhpcy5rZXk9dCYmdC5rZXksdGhpcy5jb21wb25lbnRPcHRpb25zPWEsdGhpcy5jb21wb25lbnRJbnN0YW5jZT12b2lkIDAsdGhpcy5wYXJlbnQ9dm9pZCAwLHRoaXMucmF3PSExLHRoaXMuaXNTdGF0aWM9ITEsdGhpcy5pc1Jvb3RJbnNlcnQ9ITAsdGhpcy5pc0NvbW1lbnQ9ITEsdGhpcy5pc0Nsb25lZD0hMSx0aGlzLmlzT25jZT0hMSx0aGlzLmFzeW5jRmFjdG9yeT1zLHRoaXMuYXN5bmNNZXRhPXZvaWQgMCx0aGlzLmlzQXN5bmNQbGFjZWhvbGRlcj0hMX0sZGU9e2NoaWxkOntjb25maWd1cmFibGU6ITB9fTtkZS5jaGlsZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb21wb25lbnRJbnN0YW5jZX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMocGUucHJvdG90eXBlLGRlKTt2YXIgdmU9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9XCJcIik7dmFyIHQ9bmV3IHBlO3JldHVybiB0LnRleHQ9ZSx0LmlzQ29tbWVudD0hMCx0fTtmdW5jdGlvbiBoZShlKXtyZXR1cm4gbmV3IHBlKHZvaWQgMCx2b2lkIDAsdm9pZCAwLFN0cmluZyhlKSl9ZnVuY3Rpb24gbWUoZSl7dmFyIHQ9bmV3IHBlKGUudGFnLGUuZGF0YSxlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLnNsaWNlKCksZS50ZXh0LGUuZWxtLGUuY29udGV4dCxlLmNvbXBvbmVudE9wdGlvbnMsZS5hc3luY0ZhY3RvcnkpO3JldHVybiB0Lm5zPWUubnMsdC5pc1N0YXRpYz1lLmlzU3RhdGljLHQua2V5PWUua2V5LHQuaXNDb21tZW50PWUuaXNDb21tZW50LHQuZm5Db250ZXh0PWUuZm5Db250ZXh0LHQuZm5PcHRpb25zPWUuZm5PcHRpb25zLHQuZm5TY29wZUlkPWUuZm5TY29wZUlkLHQuYXN5bmNNZXRhPWUuYXN5bmNNZXRhLHQuaXNDbG9uZWQ9ITAsdH12YXIgeWU9QXJyYXkucHJvdG90eXBlLGdlPU9iamVjdC5jcmVhdGUoeWUpO1tcInB1c2hcIixcInBvcFwiLFwic2hpZnRcIixcInVuc2hpZnRcIixcInNwbGljZVwiLFwic29ydFwiLFwicmV2ZXJzZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PXllW2VdO1IoZ2UsZSxmdW5jdGlvbigpe2Zvcih2YXIgbj1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyluW3JdPWFyZ3VtZW50c1tyXTt2YXIgaSxvPXQuYXBwbHkodGhpcyxuKSxhPXRoaXMuX19vYl9fO3N3aXRjaChlKXtjYXNlXCJwdXNoXCI6Y2FzZVwidW5zaGlmdFwiOmk9bjticmVhaztjYXNlXCJzcGxpY2VcIjppPW4uc2xpY2UoMil9cmV0dXJuIGkmJmEub2JzZXJ2ZUFycmF5KGkpLGEuZGVwLm5vdGlmeSgpLG99KX0pO3ZhciBfZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhnZSksYmU9ITA7ZnVuY3Rpb24gJGUoZSl7YmU9ZX12YXIgd2U9ZnVuY3Rpb24oZSl7dmFyIHQ7dGhpcy52YWx1ZT1lLHRoaXMuZGVwPW5ldyBjZSx0aGlzLnZtQ291bnQ9MCxSKGUsXCJfX29iX19cIix0aGlzKSxBcnJheS5pc0FycmF5KGUpPyhVPyh0PWdlLGUuX19wcm90b19fPXQpOmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9MCxpPW4ubGVuZ3RoO3I8aTtyKyspe3ZhciBvPW5bcl07UihlLG8sdFtvXSl9fShlLGdlLF9lKSx0aGlzLm9ic2VydmVBcnJheShlKSk6dGhpcy53YWxrKGUpfTtmdW5jdGlvbiBDZShlLHQpe3ZhciBuO2lmKG8oZSkmJiEoZSBpbnN0YW5jZW9mIHBlKSlyZXR1cm4geShlLFwiX19vYl9fXCIpJiZlLl9fb2JfXyBpbnN0YW5jZW9mIHdlP249ZS5fX29iX186YmUmJiF0ZSgpJiYoQXJyYXkuaXNBcnJheShlKXx8cyhlKSkmJk9iamVjdC5pc0V4dGVuc2libGUoZSkmJiFlLl9pc1Z1ZSYmKG49bmV3IHdlKGUpKSx0JiZuJiZuLnZtQ291bnQrKyxufWZ1bmN0aW9uIHhlKGUsdCxuLHIsaSl7dmFyIG89bmV3IGNlLGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpO2lmKCFhfHwhMSE9PWEuY29uZmlndXJhYmxlKXt2YXIgcz1hJiZhLmdldCxjPWEmJmEuc2V0O3MmJiFjfHwyIT09YXJndW1lbnRzLmxlbmd0aHx8KG49ZVt0XSk7dmFyIHU9IWkmJkNlKG4pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciB0PXM/cy5jYWxsKGUpOm47cmV0dXJuIGNlLnRhcmdldCYmKG8uZGVwZW5kKCksdSYmKHUuZGVwLmRlcGVuZCgpLEFycmF5LmlzQXJyYXkodCkmJmZ1bmN0aW9uIGUodCl7Zm9yKHZhciBuPXZvaWQgMCxyPTAsaT10Lmxlbmd0aDtyPGk7cisrKShuPXRbcl0pJiZuLl9fb2JfXyYmbi5fX29iX18uZGVwLmRlcGVuZCgpLEFycmF5LmlzQXJyYXkobikmJmUobil9KHQpKSksdH0sc2V0OmZ1bmN0aW9uKHQpe3ZhciByPXM/cy5jYWxsKGUpOm47dD09PXJ8fHQhPXQmJnIhPXJ8fHMmJiFjfHwoYz9jLmNhbGwoZSx0KTpuPXQsdT0haSYmQ2UodCksby5ub3RpZnkoKSl9fSl9fWZ1bmN0aW9uIGtlKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpJiZjKHQpKXJldHVybiBlLmxlbmd0aD1NYXRoLm1heChlLmxlbmd0aCx0KSxlLnNwbGljZSh0LDEsbiksbjtpZih0IGluIGUmJiEodCBpbiBPYmplY3QucHJvdG90eXBlKSlyZXR1cm4gZVt0XT1uLG47dmFyIHI9ZS5fX29iX187cmV0dXJuIGUuX2lzVnVlfHxyJiZyLnZtQ291bnQ/bjpyPyh4ZShyLnZhbHVlLHQsbiksci5kZXAubm90aWZ5KCksbik6KGVbdF09bixuKX1mdW5jdGlvbiBBZShlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkmJmModCkpZS5zcGxpY2UodCwxKTtlbHNle3ZhciBuPWUuX19vYl9fO2UuX2lzVnVlfHxuJiZuLnZtQ291bnR8fHkoZSx0KSYmKGRlbGV0ZSBlW3RdLG4mJm4uZGVwLm5vdGlmeSgpKX19d2UucHJvdG90eXBlLndhbGs9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PU9iamVjdC5rZXlzKGUpLG49MDtuPHQubGVuZ3RoO24rKyl4ZShlLHRbbl0pfSx3ZS5wcm90b3R5cGUub2JzZXJ2ZUFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKylDZShlW3RdKX07dmFyIE9lPUYub3B0aW9uTWVyZ2VTdHJhdGVnaWVzO2Z1bmN0aW9uIFNlKGUsdCl7aWYoIXQpcmV0dXJuIGU7Zm9yKHZhciBuLHIsaSxvPW9lP1JlZmxlY3Qub3duS2V5cyh0KTpPYmplY3Qua2V5cyh0KSxhPTA7YTxvLmxlbmd0aDthKyspXCJfX29iX19cIiE9PShuPW9bYV0pJiYocj1lW25dLGk9dFtuXSx5KGUsbik/ciE9PWkmJnMocikmJnMoaSkmJlNlKHIsaSk6a2UoZSxuLGkpKTtyZXR1cm4gZX1mdW5jdGlvbiBUZShlLHQsbil7cmV0dXJuIG4/ZnVuY3Rpb24oKXt2YXIgcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3QuY2FsbChuLG4pOnQsaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2UuY2FsbChuLG4pOmU7cmV0dXJuIHI/U2UocixpKTppfTp0P2U/ZnVuY3Rpb24oKXtyZXR1cm4gU2UoXCJmdW5jdGlvblwiPT10eXBlb2YgdD90LmNhbGwodGhpcyx0aGlzKTp0LFwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZS5jYWxsKHRoaXMsdGhpcyk6ZSl9OnQ6ZX1mdW5jdGlvbiBFZShlLHQpe3ZhciBuPXQ/ZT9lLmNvbmNhdCh0KTpBcnJheS5pc0FycmF5KHQpP3Q6W3RdOmU7cmV0dXJuIG4/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MDtuPGUubGVuZ3RoO24rKyktMT09PXQuaW5kZXhPZihlW25dKSYmdC5wdXNoKGVbbl0pO3JldHVybiB0fShuKTpufWZ1bmN0aW9uIE5lKGUsdCxuLHIpe3ZhciBpPU9iamVjdC5jcmVhdGUoZXx8bnVsbCk7cmV0dXJuIHQ/QShpLHQpOml9T2UuZGF0YT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4/VGUoZSx0LG4pOnQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQ/ZTpUZShlLHQpfSxJLmZvckVhY2goZnVuY3Rpb24oZSl7T2VbZV09RWV9KSxNLmZvckVhY2goZnVuY3Rpb24oZSl7T2VbZStcInNcIl09TmV9KSxPZS53YXRjaD1mdW5jdGlvbihlLHQsbixyKXtpZihlPT09WSYmKGU9dm9pZCAwKSx0PT09WSYmKHQ9dm9pZCAwKSwhdClyZXR1cm4gT2JqZWN0LmNyZWF0ZShlfHxudWxsKTtpZighZSlyZXR1cm4gdDt2YXIgaT17fTtmb3IodmFyIG8gaW4gQShpLGUpLHQpe3ZhciBhPWlbb10scz10W29dO2EmJiFBcnJheS5pc0FycmF5KGEpJiYoYT1bYV0pLGlbb109YT9hLmNvbmNhdChzKTpBcnJheS5pc0FycmF5KHMpP3M6W3NdfXJldHVybiBpfSxPZS5wcm9wcz1PZS5tZXRob2RzPU9lLmluamVjdD1PZS5jb21wdXRlZD1mdW5jdGlvbihlLHQsbixyKXtpZighZSlyZXR1cm4gdDt2YXIgaT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBBKGksZSksdCYmQShpLHQpLGl9LE9lLnByb3ZpZGU9VGU7dmFyIGplPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQ/ZTp0fTtmdW5jdGlvbiBEZShlLHQsbil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKHQ9dC5vcHRpb25zKSxmdW5jdGlvbihlLHQpe3ZhciBuPWUucHJvcHM7aWYobil7dmFyIHIsaSxvPXt9O2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHI9bi5sZW5ndGg7ci0tOylcInN0cmluZ1wiPT10eXBlb2YoaT1uW3JdKSYmKG9bYihpKV09e3R5cGU6bnVsbH0pO2Vsc2UgaWYocyhuKSlmb3IodmFyIGEgaW4gbilpPW5bYV0sb1tiKGEpXT1zKGkpP2k6e3R5cGU6aX07ZS5wcm9wcz1vfX0odCksZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmluamVjdDtpZihuKXt2YXIgcj1lLmluamVjdD17fTtpZihBcnJheS5pc0FycmF5KG4pKWZvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXJbbltpXV09e2Zyb206bltpXX07ZWxzZSBpZihzKG4pKWZvcih2YXIgbyBpbiBuKXt2YXIgYT1uW29dO3Jbb109cyhhKT9BKHtmcm9tOm99LGEpOntmcm9tOmF9fX19KHQpLGZ1bmN0aW9uKGUpe3ZhciB0PWUuZGlyZWN0aXZlcztpZih0KWZvcih2YXIgbiBpbiB0KXt2YXIgcj10W25dO1wiZnVuY3Rpb25cIj09dHlwZW9mIHImJih0W25dPXtiaW5kOnIsdXBkYXRlOnJ9KX19KHQpLCF0Ll9iYXNlJiYodC5leHRlbmRzJiYoZT1EZShlLHQuZXh0ZW5kcyxuKSksdC5taXhpbnMpKWZvcih2YXIgcj0wLGk9dC5taXhpbnMubGVuZ3RoO3I8aTtyKyspZT1EZShlLHQubWl4aW5zW3JdLG4pO3ZhciBvLGE9e307Zm9yKG8gaW4gZSljKG8pO2ZvcihvIGluIHQpeShlLG8pfHxjKG8pO2Z1bmN0aW9uIGMocil7dmFyIGk9T2Vbcl18fGplO2Fbcl09aShlW3JdLHRbcl0sbixyKX1yZXR1cm4gYX1mdW5jdGlvbiBMZShlLHQsbixyKXtpZihcInN0cmluZ1wiPT10eXBlb2Ygbil7dmFyIGk9ZVt0XTtpZih5KGksbikpcmV0dXJuIGlbbl07dmFyIG89YihuKTtpZih5KGksbykpcmV0dXJuIGlbb107dmFyIGE9JChvKTtyZXR1cm4geShpLGEpP2lbYV06aVtuXXx8aVtvXXx8aVthXX19ZnVuY3Rpb24gTWUoZSx0LG4scil7dmFyIGk9dFtlXSxvPSF5KG4sZSksYT1uW2VdLHM9UGUoQm9vbGVhbixpLnR5cGUpO2lmKHM+LTEpaWYobyYmIXkoaSxcImRlZmF1bHRcIikpYT0hMTtlbHNlIGlmKFwiXCI9PT1hfHxhPT09QyhlKSl7dmFyIGM9UGUoU3RyaW5nLGkudHlwZSk7KGM8MHx8czxjKSYmKGE9ITApfWlmKHZvaWQgMD09PWEpe2E9ZnVuY3Rpb24oZSx0LG4pe2lmKCF5KHQsXCJkZWZhdWx0XCIpKXJldHVybjt2YXIgcj10LmRlZmF1bHQ7aWYoZSYmZS4kb3B0aW9ucy5wcm9wc0RhdGEmJnZvaWQgMD09PWUuJG9wdGlvbnMucHJvcHNEYXRhW25dJiZ2b2lkIDAhPT1lLl9wcm9wc1tuXSlyZXR1cm4gZS5fcHJvcHNbbl07cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgciYmXCJGdW5jdGlvblwiIT09SWUodC50eXBlKT9yLmNhbGwoZSk6cn0ocixpLGUpO3ZhciB1PWJlOyRlKCEwKSxDZShhKSwkZSh1KX1yZXR1cm4gYX1mdW5jdGlvbiBJZShlKXt2YXIgdD1lJiZlLnRvU3RyaW5nKCkubWF0Y2goL15cXHMqZnVuY3Rpb24gKFxcdyspLyk7cmV0dXJuIHQ/dFsxXTpcIlwifWZ1bmN0aW9uIEZlKGUsdCl7cmV0dXJuIEllKGUpPT09SWUodCl9ZnVuY3Rpb24gUGUoZSx0KXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gRmUodCxlKT8wOi0xO2Zvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyO24rKylpZihGZSh0W25dLGUpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIFJlKGUsdCxuKXtsZSgpO3RyeXtpZih0KWZvcih2YXIgcj10O3I9ci4kcGFyZW50Oyl7dmFyIGk9ci4kb3B0aW9ucy5lcnJvckNhcHR1cmVkO2lmKGkpZm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspdHJ5e2lmKCExPT09aVtvXS5jYWxsKHIsZSx0LG4pKXJldHVybn1jYXRjaChlKXtCZShlLHIsXCJlcnJvckNhcHR1cmVkIGhvb2tcIil9fUJlKGUsdCxuKX1maW5hbGx5e2ZlKCl9fWZ1bmN0aW9uIEhlKGUsdCxuLHIsaSl7dmFyIG87dHJ5eyhvPW4/ZS5hcHBseSh0LG4pOmUuY2FsbCh0KSkmJiFvLl9pc1Z1ZSYmdShvKSYmIW8uX2hhbmRsZWQmJihvLmNhdGNoKGZ1bmN0aW9uKGUpe3JldHVybiBSZShlLHIsaStcIiAoUHJvbWlzZS9hc3luYylcIil9KSxvLl9oYW5kbGVkPSEwKX1jYXRjaChlKXtSZShlLHIsaSl9cmV0dXJuIG99ZnVuY3Rpb24gQmUoZSx0LG4pe2lmKEYuZXJyb3JIYW5kbGVyKXRyeXtyZXR1cm4gRi5lcnJvckhhbmRsZXIuY2FsbChudWxsLGUsdCxuKX1jYXRjaCh0KXt0IT09ZSYmVWUodCxudWxsLFwiY29uZmlnLmVycm9ySGFuZGxlclwiKX1VZShlLHQsbil9ZnVuY3Rpb24gVWUoZSx0LG4pe2lmKCF6JiYhVnx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIGNvbnNvbGUpdGhyb3cgZTtjb25zb2xlLmVycm9yKGUpfXZhciB6ZSxWZT0hMSxLZT1bXSxKZT0hMTtmdW5jdGlvbiBxZSgpe0plPSExO3ZhciBlPUtlLnNsaWNlKDApO0tlLmxlbmd0aD0wO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0oKX1pZihcInVuZGVmaW5lZFwiIT10eXBlb2YgUHJvbWlzZSYmcmUoUHJvbWlzZSkpe3ZhciBXZT1Qcm9taXNlLnJlc29sdmUoKTt6ZT1mdW5jdGlvbigpe1dlLnRoZW4ocWUpLEcmJnNldFRpbWVvdXQoUyl9LFZlPSEwfWVsc2UgaWYocXx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXJ8fCFyZShNdXRhdGlvbk9ic2VydmVyKSYmXCJbb2JqZWN0IE11dGF0aW9uT2JzZXJ2ZXJDb25zdHJ1Y3Rvcl1cIiE9PU11dGF0aW9uT2JzZXJ2ZXIudG9TdHJpbmcoKSl6ZT1cInVuZGVmaW5lZFwiIT10eXBlb2Ygc2V0SW1tZWRpYXRlJiZyZShzZXRJbW1lZGlhdGUpP2Z1bmN0aW9uKCl7c2V0SW1tZWRpYXRlKHFlKX06ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KHFlLDApfTtlbHNle3ZhciBaZT0xLEdlPW5ldyBNdXRhdGlvbk9ic2VydmVyKHFlKSxYZT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcoWmUpKTtHZS5vYnNlcnZlKFhlLHtjaGFyYWN0ZXJEYXRhOiEwfSksemU9ZnVuY3Rpb24oKXtaZT0oWmUrMSklMixYZS5kYXRhPVN0cmluZyhaZSl9LFZlPSEwfWZ1bmN0aW9uIFllKGUsdCl7dmFyIG47aWYoS2UucHVzaChmdW5jdGlvbigpe2lmKGUpdHJ5e2UuY2FsbCh0KX1jYXRjaChlKXtSZShlLHQsXCJuZXh0VGlja1wiKX1lbHNlIG4mJm4odCl9KSxKZXx8KEplPSEwLHplKCkpLCFlJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgUHJvbWlzZSlyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSl7bj1lfSl9dmFyIFFlPW5ldyBpZTtmdW5jdGlvbiBldChlKXshZnVuY3Rpb24gZSh0LG4pe3ZhciByLGk7dmFyIGE9QXJyYXkuaXNBcnJheSh0KTtpZighYSYmIW8odCl8fE9iamVjdC5pc0Zyb3plbih0KXx8dCBpbnN0YW5jZW9mIHBlKXJldHVybjtpZih0Ll9fb2JfXyl7dmFyIHM9dC5fX29iX18uZGVwLmlkO2lmKG4uaGFzKHMpKXJldHVybjtuLmFkZChzKX1pZihhKWZvcihyPXQubGVuZ3RoO3ItLTspZSh0W3JdLG4pO2Vsc2UgZm9yKGk9T2JqZWN0LmtleXModCkscj1pLmxlbmd0aDtyLS07KWUodFtpW3JdXSxuKX0oZSxRZSksUWUuY2xlYXIoKX12YXIgdHQ9ZyhmdW5jdGlvbihlKXt2YXIgdD1cIiZcIj09PWUuY2hhckF0KDApLG49XCJ+XCI9PT0oZT10P2Uuc2xpY2UoMSk6ZSkuY2hhckF0KDApLHI9XCIhXCI9PT0oZT1uP2Uuc2xpY2UoMSk6ZSkuY2hhckF0KDApO3JldHVybntuYW1lOmU9cj9lLnNsaWNlKDEpOmUsb25jZTpuLGNhcHR1cmU6cixwYXNzaXZlOnR9fSk7ZnVuY3Rpb24gbnQoZSx0KXtmdW5jdGlvbiBuKCl7dmFyIGU9YXJndW1lbnRzLHI9bi5mbnM7aWYoIUFycmF5LmlzQXJyYXkocikpcmV0dXJuIEhlKHIsbnVsbCxhcmd1bWVudHMsdCxcInYtb24gaGFuZGxlclwiKTtmb3IodmFyIGk9ci5zbGljZSgpLG89MDtvPGkubGVuZ3RoO28rKylIZShpW29dLG51bGwsZSx0LFwidi1vbiBoYW5kbGVyXCIpfXJldHVybiBuLmZucz1lLG59ZnVuY3Rpb24gcnQoZSxuLGksbyxhLHMpe3ZhciBjLHUsbCxmO2ZvcihjIGluIGUpdT1lW2NdLGw9bltjXSxmPXR0KGMpLHQodSl8fCh0KGwpPyh0KHUuZm5zKSYmKHU9ZVtjXT1udCh1LHMpKSxyKGYub25jZSkmJih1PWVbY109YShmLm5hbWUsdSxmLmNhcHR1cmUpKSxpKGYubmFtZSx1LGYuY2FwdHVyZSxmLnBhc3NpdmUsZi5wYXJhbXMpKTp1IT09bCYmKGwuZm5zPXUsZVtjXT1sKSk7Zm9yKGMgaW4gbil0KGVbY10pJiZvKChmPXR0KGMpKS5uYW1lLG5bY10sZi5jYXB0dXJlKX1mdW5jdGlvbiBpdChlLGksbyl7dmFyIGE7ZSBpbnN0YW5jZW9mIHBlJiYoZT1lLmRhdGEuaG9va3x8KGUuZGF0YS5ob29rPXt9KSk7dmFyIHM9ZVtpXTtmdW5jdGlvbiBjKCl7by5hcHBseSh0aGlzLGFyZ3VtZW50cyksaChhLmZucyxjKX10KHMpP2E9bnQoW2NdKTpuKHMuZm5zKSYmcihzLm1lcmdlZCk/KGE9cykuZm5zLnB1c2goYyk6YT1udChbcyxjXSksYS5tZXJnZWQ9ITAsZVtpXT1hfWZ1bmN0aW9uIG90KGUsdCxyLGksbyl7aWYobih0KSl7aWYoeSh0LHIpKXJldHVybiBlW3JdPXRbcl0sb3x8ZGVsZXRlIHRbcl0sITA7aWYoeSh0LGkpKXJldHVybiBlW3JdPXRbaV0sb3x8ZGVsZXRlIHRbaV0sITB9cmV0dXJuITF9ZnVuY3Rpb24gYXQoZSl7cmV0dXJuIGkoZSk/W2hlKGUpXTpBcnJheS5pc0FycmF5KGUpP2Z1bmN0aW9uIGUobyxhKXt2YXIgcz1bXTt2YXIgYyx1LGwsZjtmb3IoYz0wO2M8by5sZW5ndGg7YysrKXQodT1vW2NdKXx8XCJib29sZWFuXCI9PXR5cGVvZiB1fHwobD1zLmxlbmd0aC0xLGY9c1tsXSxBcnJheS5pc0FycmF5KHUpP3UubGVuZ3RoPjAmJihzdCgodT1lKHUsKGF8fFwiXCIpK1wiX1wiK2MpKVswXSkmJnN0KGYpJiYoc1tsXT1oZShmLnRleHQrdVswXS50ZXh0KSx1LnNoaWZ0KCkpLHMucHVzaC5hcHBseShzLHUpKTppKHUpP3N0KGYpP3NbbF09aGUoZi50ZXh0K3UpOlwiXCIhPT11JiZzLnB1c2goaGUodSkpOnN0KHUpJiZzdChmKT9zW2xdPWhlKGYudGV4dCt1LnRleHQpOihyKG8uX2lzVkxpc3QpJiZuKHUudGFnKSYmdCh1LmtleSkmJm4oYSkmJih1LmtleT1cIl9fdmxpc3RcIithK1wiX1wiK2MrXCJfX1wiKSxzLnB1c2godSkpKTtyZXR1cm4gc30oZSk6dm9pZCAwfWZ1bmN0aW9uIHN0KGUpe3JldHVybiBuKGUpJiZuKGUudGV4dCkmJiExPT09ZS5pc0NvbW1lbnR9ZnVuY3Rpb24gY3QoZSx0KXtpZihlKXtmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPW9lP1JlZmxlY3Qub3duS2V5cyhlKTpPYmplY3Qua2V5cyhlKSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBvPXJbaV07aWYoXCJfX29iX19cIiE9PW8pe2Zvcih2YXIgYT1lW29dLmZyb20scz10O3M7KXtpZihzLl9wcm92aWRlZCYmeShzLl9wcm92aWRlZCxhKSl7bltvXT1zLl9wcm92aWRlZFthXTticmVha31zPXMuJHBhcmVudH1pZighcyYmXCJkZWZhdWx0XCJpbiBlW29dKXt2YXIgYz1lW29dLmRlZmF1bHQ7bltvXT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjP2MuY2FsbCh0KTpjfX19cmV0dXJuIG59fWZ1bmN0aW9uIHV0KGUsdCl7aWYoIWV8fCFlLmxlbmd0aClyZXR1cm57fTtmb3IodmFyIG49e30scj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl7dmFyIG89ZVtyXSxhPW8uZGF0YTtpZihhJiZhLmF0dHJzJiZhLmF0dHJzLnNsb3QmJmRlbGV0ZSBhLmF0dHJzLnNsb3Qsby5jb250ZXh0IT09dCYmby5mbkNvbnRleHQhPT10fHwhYXx8bnVsbD09YS5zbG90KShuLmRlZmF1bHR8fChuLmRlZmF1bHQ9W10pKS5wdXNoKG8pO2Vsc2V7dmFyIHM9YS5zbG90LGM9bltzXXx8KG5bc109W10pO1widGVtcGxhdGVcIj09PW8udGFnP2MucHVzaC5hcHBseShjLG8uY2hpbGRyZW58fFtdKTpjLnB1c2gobyl9fWZvcih2YXIgdSBpbiBuKW5bdV0uZXZlcnkobHQpJiZkZWxldGUgblt1XTtyZXR1cm4gbn1mdW5jdGlvbiBsdChlKXtyZXR1cm4gZS5pc0NvbW1lbnQmJiFlLmFzeW5jRmFjdG9yeXx8XCIgXCI9PT1lLnRleHR9ZnVuY3Rpb24gZnQodCxuLHIpe3ZhciBpLG89T2JqZWN0LmtleXMobikubGVuZ3RoPjAsYT10PyEhdC4kc3RhYmxlOiFvLHM9dCYmdC4ka2V5O2lmKHQpe2lmKHQuX25vcm1hbGl6ZWQpcmV0dXJuIHQuX25vcm1hbGl6ZWQ7aWYoYSYmciYmciE9PWUmJnM9PT1yLiRrZXkmJiFvJiYhci4kaGFzTm9ybWFsKXJldHVybiByO2Zvcih2YXIgYyBpbiBpPXt9LHQpdFtjXSYmXCIkXCIhPT1jWzBdJiYoaVtjXT1wdChuLGMsdFtjXSkpfWVsc2UgaT17fTtmb3IodmFyIHUgaW4gbil1IGluIGl8fChpW3VdPWR0KG4sdSkpO3JldHVybiB0JiZPYmplY3QuaXNFeHRlbnNpYmxlKHQpJiYodC5fbm9ybWFsaXplZD1pKSxSKGksXCIkc3RhYmxlXCIsYSksUihpLFwiJGtleVwiLHMpLFIoaSxcIiRoYXNOb3JtYWxcIixvKSxpfWZ1bmN0aW9uIHB0KGUsdCxuKXt2YXIgcj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg/bi5hcHBseShudWxsLGFyZ3VtZW50cyk6bih7fSk7cmV0dXJuKGU9ZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJiFBcnJheS5pc0FycmF5KGUpP1tlXTphdChlKSkmJigwPT09ZS5sZW5ndGh8fDE9PT1lLmxlbmd0aCYmZVswXS5pc0NvbW1lbnQpP3ZvaWQgMDplfTtyZXR1cm4gbi5wcm94eSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Z2V0OnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxyfWZ1bmN0aW9uIGR0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGVbdF19fWZ1bmN0aW9uIHZ0KGUsdCl7dmFyIHIsaSxhLHMsYztpZihBcnJheS5pc0FycmF5KGUpfHxcInN0cmluZ1wiPT10eXBlb2YgZSlmb3Iocj1uZXcgQXJyYXkoZS5sZW5ndGgpLGk9MCxhPWUubGVuZ3RoO2k8YTtpKyspcltpXT10KGVbaV0saSk7ZWxzZSBpZihcIm51bWJlclwiPT10eXBlb2YgZSlmb3Iocj1uZXcgQXJyYXkoZSksaT0wO2k8ZTtpKyspcltpXT10KGkrMSxpKTtlbHNlIGlmKG8oZSkpaWYob2UmJmVbU3ltYm9sLml0ZXJhdG9yXSl7cj1bXTtmb3IodmFyIHU9ZVtTeW1ib2wuaXRlcmF0b3JdKCksbD11Lm5leHQoKTshbC5kb25lOylyLnB1c2godChsLnZhbHVlLHIubGVuZ3RoKSksbD11Lm5leHQoKX1lbHNlIGZvcihzPU9iamVjdC5rZXlzKGUpLHI9bmV3IEFycmF5KHMubGVuZ3RoKSxpPTAsYT1zLmxlbmd0aDtpPGE7aSsrKWM9c1tpXSxyW2ldPXQoZVtjXSxjLGkpO3JldHVybiBuKHIpfHwocj1bXSksci5faXNWTGlzdD0hMCxyfWZ1bmN0aW9uIGh0KGUsdCxuLHIpe3ZhciBpLG89dGhpcy4kc2NvcGVkU2xvdHNbZV07bz8obj1ufHx7fSxyJiYobj1BKEEoe30sciksbikpLGk9byhuKXx8dCk6aT10aGlzLiRzbG90c1tlXXx8dDt2YXIgYT1uJiZuLnNsb3Q7cmV0dXJuIGE/dGhpcy4kY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIse3Nsb3Q6YX0saSk6aX1mdW5jdGlvbiBtdChlKXtyZXR1cm4gTGUodGhpcy4kb3B0aW9ucyxcImZpbHRlcnNcIixlKXx8RX1mdW5jdGlvbiB5dChlLHQpe3JldHVybiBBcnJheS5pc0FycmF5KGUpPy0xPT09ZS5pbmRleE9mKHQpOmUhPT10fWZ1bmN0aW9uIGd0KGUsdCxuLHIsaSl7dmFyIG89Ri5rZXlDb2Rlc1t0XXx8bjtyZXR1cm4gaSYmciYmIUYua2V5Q29kZXNbdF0/eXQoaSxyKTpvP3l0KG8sZSk6cj9DKHIpIT09dDp2b2lkIDB9ZnVuY3Rpb24gX3QoZSx0LG4scixpKXtpZihuKWlmKG8obikpe3ZhciBhO0FycmF5LmlzQXJyYXkobikmJihuPU8obikpO3ZhciBzPWZ1bmN0aW9uKG8pe2lmKFwiY2xhc3NcIj09PW98fFwic3R5bGVcIj09PW98fHYobykpYT1lO2Vsc2V7dmFyIHM9ZS5hdHRycyYmZS5hdHRycy50eXBlO2E9cnx8Ri5tdXN0VXNlUHJvcCh0LHMsbyk/ZS5kb21Qcm9wc3x8KGUuZG9tUHJvcHM9e30pOmUuYXR0cnN8fChlLmF0dHJzPXt9KX12YXIgYz1iKG8pLHU9QyhvKTtjIGluIGF8fHUgaW4gYXx8KGFbb109bltvXSxpJiYoKGUub258fChlLm9uPXt9KSlbXCJ1cGRhdGU6XCIrb109ZnVuY3Rpb24oZSl7bltvXT1lfSkpfTtmb3IodmFyIGMgaW4gbilzKGMpfWVsc2U7cmV0dXJuIGV9ZnVuY3Rpb24gYnQoZSx0KXt2YXIgbj10aGlzLl9zdGF0aWNUcmVlc3x8KHRoaXMuX3N0YXRpY1RyZWVzPVtdKSxyPW5bZV07cmV0dXJuIHImJiF0P3I6KHd0KHI9bltlXT10aGlzLiRvcHRpb25zLnN0YXRpY1JlbmRlckZuc1tlXS5jYWxsKHRoaXMuX3JlbmRlclByb3h5LG51bGwsdGhpcyksXCJfX3N0YXRpY19fXCIrZSwhMSkscil9ZnVuY3Rpb24gJHQoZSx0LG4pe3JldHVybiB3dChlLFwiX19vbmNlX19cIit0KyhuP1wiX1wiK246XCJcIiksITApLGV9ZnVuY3Rpb24gd3QoZSx0LG4pe2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspZVtyXSYmXCJzdHJpbmdcIiE9dHlwZW9mIGVbcl0mJkN0KGVbcl0sdCtcIl9cIityLG4pO2Vsc2UgQ3QoZSx0LG4pfWZ1bmN0aW9uIEN0KGUsdCxuKXtlLmlzU3RhdGljPSEwLGUua2V5PXQsZS5pc09uY2U9bn1mdW5jdGlvbiB4dChlLHQpe2lmKHQpaWYocyh0KSl7dmFyIG49ZS5vbj1lLm9uP0Eoe30sZS5vbik6e307Zm9yKHZhciByIGluIHQpe3ZhciBpPW5bcl0sbz10W3JdO25bcl09aT9bXS5jb25jYXQoaSxvKTpvfX1lbHNlO3JldHVybiBlfWZ1bmN0aW9uIGt0KGUsdCxuLHIpe3Q9dHx8eyRzdGFibGU6IW59O2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldO0FycmF5LmlzQXJyYXkobyk/a3Qobyx0LG4pOm8mJihvLnByb3h5JiYoby5mbi5wcm94eT0hMCksdFtvLmtleV09by5mbil9cmV0dXJuIHImJih0LiRrZXk9ciksdH1mdW5jdGlvbiBBdChlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bis9Mil7dmFyIHI9dFtuXTtcInN0cmluZ1wiPT10eXBlb2YgciYmciYmKGVbdFtuXV09dFtuKzFdKX1yZXR1cm4gZX1mdW5jdGlvbiBPdChlLHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP3QrZTplfWZ1bmN0aW9uIFN0KGUpe2UuX289JHQsZS5fbj1mLGUuX3M9bCxlLl9sPXZ0LGUuX3Q9aHQsZS5fcT1OLGUuX2k9aixlLl9tPWJ0LGUuX2Y9bXQsZS5faz1ndCxlLl9iPV90LGUuX3Y9aGUsZS5fZT12ZSxlLl91PWt0LGUuX2c9eHQsZS5fZD1BdCxlLl9wPU90fWZ1bmN0aW9uIFR0KHQsbixpLG8sYSl7dmFyIHMsYz10aGlzLHU9YS5vcHRpb25zO3kobyxcIl91aWRcIik/KHM9T2JqZWN0LmNyZWF0ZShvKSkuX29yaWdpbmFsPW86KHM9byxvPW8uX29yaWdpbmFsKTt2YXIgbD1yKHUuX2NvbXBpbGVkKSxmPSFsO3RoaXMuZGF0YT10LHRoaXMucHJvcHM9bix0aGlzLmNoaWxkcmVuPWksdGhpcy5wYXJlbnQ9byx0aGlzLmxpc3RlbmVycz10Lm9ufHxlLHRoaXMuaW5qZWN0aW9ucz1jdCh1LmluamVjdCxvKSx0aGlzLnNsb3RzPWZ1bmN0aW9uKCl7cmV0dXJuIGMuJHNsb3RzfHxmdCh0LnNjb3BlZFNsb3RzLGMuJHNsb3RzPXV0KGksbykpLGMuJHNsb3RzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInNjb3BlZFNsb3RzXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ0KHQuc2NvcGVkU2xvdHMsdGhpcy5zbG90cygpKX19KSxsJiYodGhpcy4kb3B0aW9ucz11LHRoaXMuJHNsb3RzPXRoaXMuc2xvdHMoKSx0aGlzLiRzY29wZWRTbG90cz1mdCh0LnNjb3BlZFNsb3RzLHRoaXMuJHNsb3RzKSksdS5fc2NvcGVJZD90aGlzLl9jPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPVB0KHMsZSx0LG4scixmKTtyZXR1cm4gaSYmIUFycmF5LmlzQXJyYXkoaSkmJihpLmZuU2NvcGVJZD11Ll9zY29wZUlkLGkuZm5Db250ZXh0PW8pLGl9OnRoaXMuX2M9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIFB0KHMsZSx0LG4scixmKX19ZnVuY3Rpb24gRXQoZSx0LG4scixpKXt2YXIgbz1tZShlKTtyZXR1cm4gby5mbkNvbnRleHQ9bixvLmZuT3B0aW9ucz1yLHQuc2xvdCYmKChvLmRhdGF8fChvLmRhdGE9e30pKS5zbG90PXQuc2xvdCksb31mdW5jdGlvbiBOdChlLHQpe2Zvcih2YXIgbiBpbiB0KWVbYihuKV09dFtuXX1TdChUdC5wcm90b3R5cGUpO3ZhciBqdD17aW5pdDpmdW5jdGlvbihlLHQpe2lmKGUuY29tcG9uZW50SW5zdGFuY2UmJiFlLmNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCYmZS5kYXRhLmtlZXBBbGl2ZSl7dmFyIHI9ZTtqdC5wcmVwYXRjaChyLHIpfWVsc2V7KGUuY29tcG9uZW50SW5zdGFuY2U9ZnVuY3Rpb24oZSx0KXt2YXIgcj17X2lzQ29tcG9uZW50OiEwLF9wYXJlbnRWbm9kZTplLHBhcmVudDp0fSxpPWUuZGF0YS5pbmxpbmVUZW1wbGF0ZTtuKGkpJiYoci5yZW5kZXI9aS5yZW5kZXIsci5zdGF0aWNSZW5kZXJGbnM9aS5zdGF0aWNSZW5kZXJGbnMpO3JldHVybiBuZXcgZS5jb21wb25lbnRPcHRpb25zLkN0b3Iocil9KGUsV3QpKS4kbW91bnQodD9lLmVsbTp2b2lkIDAsdCl9fSxwcmVwYXRjaDpmdW5jdGlvbih0LG4pe3ZhciByPW4uY29tcG9uZW50T3B0aW9uczshZnVuY3Rpb24odCxuLHIsaSxvKXt2YXIgYT1pLmRhdGEuc2NvcGVkU2xvdHMscz10LiRzY29wZWRTbG90cyxjPSEhKGEmJiFhLiRzdGFibGV8fHMhPT1lJiYhcy4kc3RhYmxlfHxhJiZ0LiRzY29wZWRTbG90cy4ka2V5IT09YS4ka2V5KSx1PSEhKG98fHQuJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVufHxjKTt0LiRvcHRpb25zLl9wYXJlbnRWbm9kZT1pLHQuJHZub2RlPWksdC5fdm5vZGUmJih0Ll92bm9kZS5wYXJlbnQ9aSk7aWYodC4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW49byx0LiRhdHRycz1pLmRhdGEuYXR0cnN8fGUsdC4kbGlzdGVuZXJzPXJ8fGUsbiYmdC4kb3B0aW9ucy5wcm9wcyl7JGUoITEpO2Zvcih2YXIgbD10Ll9wcm9wcyxmPXQuJG9wdGlvbnMuX3Byb3BLZXlzfHxbXSxwPTA7cDxmLmxlbmd0aDtwKyspe3ZhciBkPWZbcF0sdj10LiRvcHRpb25zLnByb3BzO2xbZF09TWUoZCx2LG4sdCl9JGUoITApLHQuJG9wdGlvbnMucHJvcHNEYXRhPW59cj1yfHxlO3ZhciBoPXQuJG9wdGlvbnMuX3BhcmVudExpc3RlbmVyczt0LiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM9cixxdCh0LHIsaCksdSYmKHQuJHNsb3RzPXV0KG8saS5jb250ZXh0KSx0LiRmb3JjZVVwZGF0ZSgpKX0obi5jb21wb25lbnRJbnN0YW5jZT10LmNvbXBvbmVudEluc3RhbmNlLHIucHJvcHNEYXRhLHIubGlzdGVuZXJzLG4sci5jaGlsZHJlbil9LGluc2VydDpmdW5jdGlvbihlKXt2YXIgdCxuPWUuY29udGV4dCxyPWUuY29tcG9uZW50SW5zdGFuY2U7ci5faXNNb3VudGVkfHwoci5faXNNb3VudGVkPSEwLFl0KHIsXCJtb3VudGVkXCIpKSxlLmRhdGEua2VlcEFsaXZlJiYobi5faXNNb3VudGVkPygodD1yKS5faW5hY3RpdmU9ITEsZW4ucHVzaCh0KSk6WHQociwhMCkpfSxkZXN0cm95OmZ1bmN0aW9uKGUpe3ZhciB0PWUuY29tcG9uZW50SW5zdGFuY2U7dC5faXNEZXN0cm95ZWR8fChlLmRhdGEua2VlcEFsaXZlP2Z1bmN0aW9uIGUodCxuKXtpZihuJiYodC5fZGlyZWN0SW5hY3RpdmU9ITAsR3QodCkpKXJldHVybjtpZighdC5faW5hY3RpdmUpe3QuX2luYWN0aXZlPSEwO2Zvcih2YXIgcj0wO3I8dC4kY2hpbGRyZW4ubGVuZ3RoO3IrKyllKHQuJGNoaWxkcmVuW3JdKTtZdCh0LFwiZGVhY3RpdmF0ZWRcIil9fSh0LCEwKTp0LiRkZXN0cm95KCkpfX0sRHQ9T2JqZWN0LmtleXMoanQpO2Z1bmN0aW9uIEx0KGksYSxzLGMsbCl7aWYoIXQoaSkpe3ZhciBmPXMuJG9wdGlvbnMuX2Jhc2U7aWYobyhpKSYmKGk9Zi5leHRlbmQoaSkpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGkpe3ZhciBwO2lmKHQoaS5jaWQpJiZ2b2lkIDA9PT0oaT1mdW5jdGlvbihlLGkpe2lmKHIoZS5lcnJvcikmJm4oZS5lcnJvckNvbXApKXJldHVybiBlLmVycm9yQ29tcDtpZihuKGUucmVzb2x2ZWQpKXJldHVybiBlLnJlc29sdmVkO3ZhciBhPUh0O2EmJm4oZS5vd25lcnMpJiYtMT09PWUub3duZXJzLmluZGV4T2YoYSkmJmUub3duZXJzLnB1c2goYSk7aWYocihlLmxvYWRpbmcpJiZuKGUubG9hZGluZ0NvbXApKXJldHVybiBlLmxvYWRpbmdDb21wO2lmKGEmJiFuKGUub3duZXJzKSl7dmFyIHM9ZS5vd25lcnM9W2FdLGM9ITAsbD1udWxsLGY9bnVsbDthLiRvbihcImhvb2s6ZGVzdHJveWVkXCIsZnVuY3Rpb24oKXtyZXR1cm4gaChzLGEpfSk7dmFyIHA9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj1zLmxlbmd0aDt0PG47dCsrKXNbdF0uJGZvcmNlVXBkYXRlKCk7ZSYmKHMubGVuZ3RoPTAsbnVsbCE9PWwmJihjbGVhclRpbWVvdXQobCksbD1udWxsKSxudWxsIT09ZiYmKGNsZWFyVGltZW91dChmKSxmPW51bGwpKX0sZD1EKGZ1bmN0aW9uKHQpe2UucmVzb2x2ZWQ9QnQodCxpKSxjP3MubGVuZ3RoPTA6cCghMCl9KSx2PUQoZnVuY3Rpb24odCl7bihlLmVycm9yQ29tcCkmJihlLmVycm9yPSEwLHAoITApKX0pLG09ZShkLHYpO3JldHVybiBvKG0pJiYodShtKT90KGUucmVzb2x2ZWQpJiZtLnRoZW4oZCx2KTp1KG0uY29tcG9uZW50KSYmKG0uY29tcG9uZW50LnRoZW4oZCx2KSxuKG0uZXJyb3IpJiYoZS5lcnJvckNvbXA9QnQobS5lcnJvcixpKSksbihtLmxvYWRpbmcpJiYoZS5sb2FkaW5nQ29tcD1CdChtLmxvYWRpbmcsaSksMD09PW0uZGVsYXk/ZS5sb2FkaW5nPSEwOmw9c2V0VGltZW91dChmdW5jdGlvbigpe2w9bnVsbCx0KGUucmVzb2x2ZWQpJiZ0KGUuZXJyb3IpJiYoZS5sb2FkaW5nPSEwLHAoITEpKX0sbS5kZWxheXx8MjAwKSksbihtLnRpbWVvdXQpJiYoZj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Zj1udWxsLHQoZS5yZXNvbHZlZCkmJnYobnVsbCl9LG0udGltZW91dCkpKSksYz0hMSxlLmxvYWRpbmc/ZS5sb2FkaW5nQ29tcDplLnJlc29sdmVkfX0ocD1pLGYpKSlyZXR1cm4gZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz12ZSgpO3JldHVybiBvLmFzeW5jRmFjdG9yeT1lLG8uYXN5bmNNZXRhPXtkYXRhOnQsY29udGV4dDpuLGNoaWxkcmVuOnIsdGFnOml9LG99KHAsYSxzLGMsbCk7YT1hfHx7fSwkbihpKSxuKGEubW9kZWwpJiZmdW5jdGlvbihlLHQpe3ZhciByPWUubW9kZWwmJmUubW9kZWwucHJvcHx8XCJ2YWx1ZVwiLGk9ZS5tb2RlbCYmZS5tb2RlbC5ldmVudHx8XCJpbnB1dFwiOyh0LmF0dHJzfHwodC5hdHRycz17fSkpW3JdPXQubW9kZWwudmFsdWU7dmFyIG89dC5vbnx8KHQub249e30pLGE9b1tpXSxzPXQubW9kZWwuY2FsbGJhY2s7bihhKT8oQXJyYXkuaXNBcnJheShhKT8tMT09PWEuaW5kZXhPZihzKTphIT09cykmJihvW2ldPVtzXS5jb25jYXQoYSkpOm9baV09c30oaS5vcHRpb25zLGEpO3ZhciBkPWZ1bmN0aW9uKGUscixpKXt2YXIgbz1yLm9wdGlvbnMucHJvcHM7aWYoIXQobykpe3ZhciBhPXt9LHM9ZS5hdHRycyxjPWUucHJvcHM7aWYobihzKXx8bihjKSlmb3IodmFyIHUgaW4gbyl7dmFyIGw9Qyh1KTtvdChhLGMsdSxsLCEwKXx8b3QoYSxzLHUsbCwhMSl9cmV0dXJuIGF9fShhLGkpO2lmKHIoaS5vcHRpb25zLmZ1bmN0aW9uYWwpKXJldHVybiBmdW5jdGlvbih0LHIsaSxvLGEpe3ZhciBzPXQub3B0aW9ucyxjPXt9LHU9cy5wcm9wcztpZihuKHUpKWZvcih2YXIgbCBpbiB1KWNbbF09TWUobCx1LHJ8fGUpO2Vsc2UgbihpLmF0dHJzKSYmTnQoYyxpLmF0dHJzKSxuKGkucHJvcHMpJiZOdChjLGkucHJvcHMpO3ZhciBmPW5ldyBUdChpLGMsYSxvLHQpLHA9cy5yZW5kZXIuY2FsbChudWxsLGYuX2MsZik7aWYocCBpbnN0YW5jZW9mIHBlKXJldHVybiBFdChwLGksZi5wYXJlbnQscyk7aWYoQXJyYXkuaXNBcnJheShwKSl7Zm9yKHZhciBkPWF0KHApfHxbXSx2PW5ldyBBcnJheShkLmxlbmd0aCksaD0wO2g8ZC5sZW5ndGg7aCsrKXZbaF09RXQoZFtoXSxpLGYucGFyZW50LHMpO3JldHVybiB2fX0oaSxkLGEscyxjKTt2YXIgdj1hLm9uO2lmKGEub249YS5uYXRpdmVPbixyKGkub3B0aW9ucy5hYnN0cmFjdCkpe3ZhciBtPWEuc2xvdDthPXt9LG0mJihhLnNsb3Q9bSl9IWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmhvb2t8fChlLmhvb2s9e30pLG49MDtuPER0Lmxlbmd0aDtuKyspe3ZhciByPUR0W25dLGk9dFtyXSxvPWp0W3JdO2k9PT1vfHxpJiZpLl9tZXJnZWR8fCh0W3JdPWk/TXQobyxpKTpvKX19KGEpO3ZhciB5PWkub3B0aW9ucy5uYW1lfHxsO3JldHVybiBuZXcgcGUoXCJ2dWUtY29tcG9uZW50LVwiK2kuY2lkKyh5P1wiLVwiK3k6XCJcIiksYSx2b2lkIDAsdm9pZCAwLHZvaWQgMCxzLHtDdG9yOmkscHJvcHNEYXRhOmQsbGlzdGVuZXJzOnYsdGFnOmwsY2hpbGRyZW46Y30scCl9fX1mdW5jdGlvbiBNdChlLHQpe3ZhciBuPWZ1bmN0aW9uKG4scil7ZShuLHIpLHQobixyKX07cmV0dXJuIG4uX21lcmdlZD0hMCxufXZhciBJdD0xLEZ0PTI7ZnVuY3Rpb24gUHQoZSxhLHMsYyx1LGwpe3JldHVybihBcnJheS5pc0FycmF5KHMpfHxpKHMpKSYmKHU9YyxjPXMscz12b2lkIDApLHIobCkmJih1PUZ0KSxmdW5jdGlvbihlLGksYSxzLGMpe2lmKG4oYSkmJm4oYS5fX29iX18pKXJldHVybiB2ZSgpO24oYSkmJm4oYS5pcykmJihpPWEuaXMpO2lmKCFpKXJldHVybiB2ZSgpO0FycmF5LmlzQXJyYXkocykmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHNbMF0mJigoYT1hfHx7fSkuc2NvcGVkU2xvdHM9e2RlZmF1bHQ6c1swXX0scy5sZW5ndGg9MCk7Yz09PUZ0P3M9YXQocyk6Yz09PUl0JiYocz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKylpZihBcnJheS5pc0FycmF5KGVbdF0pKXJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpO3JldHVybiBlfShzKSk7dmFyIHUsbDtpZihcInN0cmluZ1wiPT10eXBlb2YgaSl7dmFyIGY7bD1lLiR2bm9kZSYmZS4kdm5vZGUubnN8fEYuZ2V0VGFnTmFtZXNwYWNlKGkpLHU9Ri5pc1Jlc2VydmVkVGFnKGkpP25ldyBwZShGLnBhcnNlUGxhdGZvcm1UYWdOYW1lKGkpLGEscyx2b2lkIDAsdm9pZCAwLGUpOmEmJmEucHJlfHwhbihmPUxlKGUuJG9wdGlvbnMsXCJjb21wb25lbnRzXCIsaSkpP25ldyBwZShpLGEscyx2b2lkIDAsdm9pZCAwLGUpOkx0KGYsYSxlLHMsaSl9ZWxzZSB1PUx0KGksYSxlLHMpO3JldHVybiBBcnJheS5pc0FycmF5KHUpP3U6bih1KT8obihsKSYmZnVuY3Rpb24gZShpLG8sYSl7aS5ucz1vO1wiZm9yZWlnbk9iamVjdFwiPT09aS50YWcmJihvPXZvaWQgMCxhPSEwKTtpZihuKGkuY2hpbGRyZW4pKWZvcih2YXIgcz0wLGM9aS5jaGlsZHJlbi5sZW5ndGg7czxjO3MrKyl7dmFyIHU9aS5jaGlsZHJlbltzXTtuKHUudGFnKSYmKHQodS5ucyl8fHIoYSkmJlwic3ZnXCIhPT11LnRhZykmJmUodSxvLGEpfX0odSxsKSxuKGEpJiZmdW5jdGlvbihlKXtvKGUuc3R5bGUpJiZldChlLnN0eWxlKTtvKGUuY2xhc3MpJiZldChlLmNsYXNzKX0oYSksdSk6dmUoKX0oZSxhLHMsYyx1KX12YXIgUnQsSHQ9bnVsbDtmdW5jdGlvbiBCdChlLHQpe3JldHVybihlLl9fZXNNb2R1bGV8fG9lJiZcIk1vZHVsZVwiPT09ZVtTeW1ib2wudG9TdHJpbmdUYWddKSYmKGU9ZS5kZWZhdWx0KSxvKGUpP3QuZXh0ZW5kKGUpOmV9ZnVuY3Rpb24gVXQoZSl7cmV0dXJuIGUuaXNDb21tZW50JiZlLmFzeW5jRmFjdG9yeX1mdW5jdGlvbiB6dChlKXtpZihBcnJheS5pc0FycmF5KGUpKWZvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgcj1lW3RdO2lmKG4ocikmJihuKHIuY29tcG9uZW50T3B0aW9ucyl8fFV0KHIpKSlyZXR1cm4gcn19ZnVuY3Rpb24gVnQoZSx0KXtSdC4kb24oZSx0KX1mdW5jdGlvbiBLdChlLHQpe1J0LiRvZmYoZSx0KX1mdW5jdGlvbiBKdChlLHQpe3ZhciBuPVJ0O3JldHVybiBmdW5jdGlvbiByKCl7bnVsbCE9PXQuYXBwbHkobnVsbCxhcmd1bWVudHMpJiZuLiRvZmYoZSxyKX19ZnVuY3Rpb24gcXQoZSx0LG4pe1J0PWUscnQodCxufHx7fSxWdCxLdCxKdCxlKSxSdD12b2lkIDB9dmFyIFd0PW51bGw7ZnVuY3Rpb24gWnQoZSl7dmFyIHQ9V3Q7cmV0dXJuIFd0PWUsZnVuY3Rpb24oKXtXdD10fX1mdW5jdGlvbiBHdChlKXtmb3IoO2UmJihlPWUuJHBhcmVudCk7KWlmKGUuX2luYWN0aXZlKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFh0KGUsdCl7aWYodCl7aWYoZS5fZGlyZWN0SW5hY3RpdmU9ITEsR3QoZSkpcmV0dXJufWVsc2UgaWYoZS5fZGlyZWN0SW5hY3RpdmUpcmV0dXJuO2lmKGUuX2luYWN0aXZlfHxudWxsPT09ZS5faW5hY3RpdmUpe2UuX2luYWN0aXZlPSExO2Zvcih2YXIgbj0wO248ZS4kY2hpbGRyZW4ubGVuZ3RoO24rKylYdChlLiRjaGlsZHJlbltuXSk7WXQoZSxcImFjdGl2YXRlZFwiKX19ZnVuY3Rpb24gWXQoZSx0KXtsZSgpO3ZhciBuPWUuJG9wdGlvbnNbdF0scj10K1wiIGhvb2tcIjtpZihuKWZvcih2YXIgaT0wLG89bi5sZW5ndGg7aTxvO2krKylIZShuW2ldLGUsbnVsbCxlLHIpO2UuX2hhc0hvb2tFdmVudCYmZS4kZW1pdChcImhvb2s6XCIrdCksZmUoKX12YXIgUXQ9W10sZW49W10sdG49e30sbm49ITEscm49ITEsb249MDt2YXIgYW49MCxzbj1EYXRlLm5vdztpZih6JiYhcSl7dmFyIGNuPXdpbmRvdy5wZXJmb3JtYW5jZTtjbiYmXCJmdW5jdGlvblwiPT10eXBlb2YgY24ubm93JiZzbigpPmRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIikudGltZVN0YW1wJiYoc249ZnVuY3Rpb24oKXtyZXR1cm4gY24ubm93KCl9KX1mdW5jdGlvbiB1bigpe3ZhciBlLHQ7Zm9yKGFuPXNuKCkscm49ITAsUXQuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBlLmlkLXQuaWR9KSxvbj0wO29uPFF0Lmxlbmd0aDtvbisrKShlPVF0W29uXSkuYmVmb3JlJiZlLmJlZm9yZSgpLHQ9ZS5pZCx0blt0XT1udWxsLGUucnVuKCk7dmFyIG49ZW4uc2xpY2UoKSxyPVF0LnNsaWNlKCk7b249UXQubGVuZ3RoPWVuLmxlbmd0aD0wLHRuPXt9LG5uPXJuPSExLGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0uX2luYWN0aXZlPSEwLFh0KGVbdF0sITApfShuKSxmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtmb3IoO3QtLTspe3ZhciBuPWVbdF0scj1uLnZtO3IuX3dhdGNoZXI9PT1uJiZyLl9pc01vdW50ZWQmJiFyLl9pc0Rlc3Ryb3llZCYmWXQocixcInVwZGF0ZWRcIil9fShyKSxuZSYmRi5kZXZ0b29scyYmbmUuZW1pdChcImZsdXNoXCIpfXZhciBsbj0wLGZuPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dGhpcy52bT1lLGkmJihlLl93YXRjaGVyPXRoaXMpLGUuX3dhdGNoZXJzLnB1c2godGhpcykscj8odGhpcy5kZWVwPSEhci5kZWVwLHRoaXMudXNlcj0hIXIudXNlcix0aGlzLmxhenk9ISFyLmxhenksdGhpcy5zeW5jPSEhci5zeW5jLHRoaXMuYmVmb3JlPXIuYmVmb3JlKTp0aGlzLmRlZXA9dGhpcy51c2VyPXRoaXMubGF6eT10aGlzLnN5bmM9ITEsdGhpcy5jYj1uLHRoaXMuaWQ9Kytsbix0aGlzLmFjdGl2ZT0hMCx0aGlzLmRpcnR5PXRoaXMubGF6eSx0aGlzLmRlcHM9W10sdGhpcy5uZXdEZXBzPVtdLHRoaXMuZGVwSWRzPW5ldyBpZSx0aGlzLm5ld0RlcElkcz1uZXcgaWUsdGhpcy5leHByZXNzaW9uPVwiXCIsXCJmdW5jdGlvblwiPT10eXBlb2YgdD90aGlzLmdldHRlcj10Oih0aGlzLmdldHRlcj1mdW5jdGlvbihlKXtpZighSC50ZXN0KGUpKXt2YXIgdD1lLnNwbGl0KFwiLlwiKTtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe2lmKCFlKXJldHVybjtlPWVbdFtuXV19cmV0dXJuIGV9fX0odCksdGhpcy5nZXR0ZXJ8fCh0aGlzLmdldHRlcj1TKSksdGhpcy52YWx1ZT10aGlzLmxhenk/dm9pZCAwOnRoaXMuZ2V0KCl9O2ZuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXt2YXIgZTtsZSh0aGlzKTt2YXIgdD10aGlzLnZtO3RyeXtlPXRoaXMuZ2V0dGVyLmNhbGwodCx0KX1jYXRjaChlKXtpZighdGhpcy51c2VyKXRocm93IGU7UmUoZSx0LCdnZXR0ZXIgZm9yIHdhdGNoZXIgXCInK3RoaXMuZXhwcmVzc2lvbisnXCInKX1maW5hbGx5e3RoaXMuZGVlcCYmZXQoZSksZmUoKSx0aGlzLmNsZWFudXBEZXBzKCl9cmV0dXJuIGV9LGZuLnByb3RvdHlwZS5hZGREZXA9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pZDt0aGlzLm5ld0RlcElkcy5oYXModCl8fCh0aGlzLm5ld0RlcElkcy5hZGQodCksdGhpcy5uZXdEZXBzLnB1c2goZSksdGhpcy5kZXBJZHMuaGFzKHQpfHxlLmFkZFN1Yih0aGlzKSl9LGZuLnByb3RvdHlwZS5jbGVhbnVwRGVwcz1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmRlcHMubGVuZ3RoO2UtLTspe3ZhciB0PXRoaXMuZGVwc1tlXTt0aGlzLm5ld0RlcElkcy5oYXModC5pZCl8fHQucmVtb3ZlU3ViKHRoaXMpfXZhciBuPXRoaXMuZGVwSWRzO3RoaXMuZGVwSWRzPXRoaXMubmV3RGVwSWRzLHRoaXMubmV3RGVwSWRzPW4sdGhpcy5uZXdEZXBJZHMuY2xlYXIoKSxuPXRoaXMuZGVwcyx0aGlzLmRlcHM9dGhpcy5uZXdEZXBzLHRoaXMubmV3RGVwcz1uLHRoaXMubmV3RGVwcy5sZW5ndGg9MH0sZm4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3RoaXMubGF6eT90aGlzLmRpcnR5PSEwOnRoaXMuc3luYz90aGlzLnJ1bigpOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaWQ7aWYobnVsbD09dG5bdF0pe2lmKHRuW3RdPSEwLHJuKXtmb3IodmFyIG49UXQubGVuZ3RoLTE7bj5vbiYmUXRbbl0uaWQ+ZS5pZDspbi0tO1F0LnNwbGljZShuKzEsMCxlKX1lbHNlIFF0LnB1c2goZSk7bm58fChubj0hMCxZZSh1bikpfX0odGhpcyl9LGZuLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXtpZih0aGlzLmFjdGl2ZSl7dmFyIGU9dGhpcy5nZXQoKTtpZihlIT09dGhpcy52YWx1ZXx8byhlKXx8dGhpcy5kZWVwKXt2YXIgdD10aGlzLnZhbHVlO2lmKHRoaXMudmFsdWU9ZSx0aGlzLnVzZXIpdHJ5e3RoaXMuY2IuY2FsbCh0aGlzLnZtLGUsdCl9Y2F0Y2goZSl7UmUoZSx0aGlzLnZtLCdjYWxsYmFjayBmb3Igd2F0Y2hlciBcIicrdGhpcy5leHByZXNzaW9uKydcIicpfWVsc2UgdGhpcy5jYi5jYWxsKHRoaXMudm0sZSx0KX19fSxmbi5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXt0aGlzLnZhbHVlPXRoaXMuZ2V0KCksdGhpcy5kaXJ0eT0hMX0sZm4ucHJvdG90eXBlLmRlcGVuZD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmRlcHMubGVuZ3RoO2UtLTspdGhpcy5kZXBzW2VdLmRlcGVuZCgpfSxmbi5wcm90b3R5cGUudGVhcmRvd249ZnVuY3Rpb24oKXtpZih0aGlzLmFjdGl2ZSl7dGhpcy52bS5faXNCZWluZ0Rlc3Ryb3llZHx8aCh0aGlzLnZtLl93YXRjaGVycyx0aGlzKTtmb3IodmFyIGU9dGhpcy5kZXBzLmxlbmd0aDtlLS07KXRoaXMuZGVwc1tlXS5yZW1vdmVTdWIodGhpcyk7dGhpcy5hY3RpdmU9ITF9fTt2YXIgcG49e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpTLHNldDpTfTtmdW5jdGlvbiBkbihlLHQsbil7cG4uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbdF1bbl19LHBuLnNldD1mdW5jdGlvbihlKXt0aGlzW3RdW25dPWV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4scG4pfWZ1bmN0aW9uIHZuKGUpe2UuX3dhdGNoZXJzPVtdO3ZhciB0PWUuJG9wdGlvbnM7dC5wcm9wcyYmZnVuY3Rpb24oZSx0KXt2YXIgbj1lLiRvcHRpb25zLnByb3BzRGF0YXx8e30scj1lLl9wcm9wcz17fSxpPWUuJG9wdGlvbnMuX3Byb3BLZXlzPVtdO2UuJHBhcmVudCYmJGUoITEpO3ZhciBvPWZ1bmN0aW9uKG8pe2kucHVzaChvKTt2YXIgYT1NZShvLHQsbixlKTt4ZShyLG8sYSksbyBpbiBlfHxkbihlLFwiX3Byb3BzXCIsbyl9O2Zvcih2YXIgYSBpbiB0KW8oYSk7JGUoITApfShlLHQucHJvcHMpLHQubWV0aG9kcyYmZnVuY3Rpb24oZSx0KXtlLiRvcHRpb25zLnByb3BzO2Zvcih2YXIgbiBpbiB0KWVbbl09XCJmdW5jdGlvblwiIT10eXBlb2YgdFtuXT9TOngodFtuXSxlKX0oZSx0Lm1ldGhvZHMpLHQuZGF0YT9mdW5jdGlvbihlKXt2YXIgdD1lLiRvcHRpb25zLmRhdGE7cyh0PWUuX2RhdGE9XCJmdW5jdGlvblwiPT10eXBlb2YgdD9mdW5jdGlvbihlLHQpe2xlKCk7dHJ5e3JldHVybiBlLmNhbGwodCx0KX1jYXRjaChlKXtyZXR1cm4gUmUoZSx0LFwiZGF0YSgpXCIpLHt9fWZpbmFsbHl7ZmUoKX19KHQsZSk6dHx8e30pfHwodD17fSk7dmFyIG49T2JqZWN0LmtleXModCkscj1lLiRvcHRpb25zLnByb3BzLGk9KGUuJG9wdGlvbnMubWV0aG9kcyxuLmxlbmd0aCk7Zm9yKDtpLS07KXt2YXIgbz1uW2ldO3ImJnkocixvKXx8KGE9dm9pZCAwLDM2IT09KGE9KG8rXCJcIikuY2hhckNvZGVBdCgwKSkmJjk1IT09YSYmZG4oZSxcIl9kYXRhXCIsbykpfXZhciBhO0NlKHQsITApfShlKTpDZShlLl9kYXRhPXt9LCEwKSx0LmNvbXB1dGVkJiZmdW5jdGlvbihlLHQpe3ZhciBuPWUuX2NvbXB1dGVkV2F0Y2hlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSxyPXRlKCk7Zm9yKHZhciBpIGluIHQpe3ZhciBvPXRbaV0sYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBvP286by5nZXQ7cnx8KG5baV09bmV3IGZuKGUsYXx8UyxTLGhuKSksaSBpbiBlfHxtbihlLGksbyl9fShlLHQuY29tcHV0ZWQpLHQud2F0Y2gmJnQud2F0Y2ghPT1ZJiZmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXt2YXIgcj10W25dO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspX24oZSxuLHJbaV0pO2Vsc2UgX24oZSxuLHIpfX0oZSx0LndhdGNoKX12YXIgaG49e2xhenk6ITB9O2Z1bmN0aW9uIG1uKGUsdCxuKXt2YXIgcj0hdGUoKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuPyhwbi5nZXQ9cj95bih0KTpnbihuKSxwbi5zZXQ9Uyk6KHBuLmdldD1uLmdldD9yJiYhMSE9PW4uY2FjaGU/eW4odCk6Z24obi5nZXQpOlMscG4uc2V0PW4uc2V0fHxTKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHBuKX1mdW5jdGlvbiB5bihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb21wdXRlZFdhdGNoZXJzJiZ0aGlzLl9jb21wdXRlZFdhdGNoZXJzW2VdO2lmKHQpcmV0dXJuIHQuZGlydHkmJnQuZXZhbHVhdGUoKSxjZS50YXJnZXQmJnQuZGVwZW5kKCksdC52YWx1ZX19ZnVuY3Rpb24gZ24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuY2FsbCh0aGlzLHRoaXMpfX1mdW5jdGlvbiBfbihlLHQsbixyKXtyZXR1cm4gcyhuKSYmKHI9bixuPW4uaGFuZGxlciksXCJzdHJpbmdcIj09dHlwZW9mIG4mJihuPWVbbl0pLGUuJHdhdGNoKHQsbixyKX12YXIgYm49MDtmdW5jdGlvbiAkbihlKXt2YXIgdD1lLm9wdGlvbnM7aWYoZS5zdXBlcil7dmFyIG49JG4oZS5zdXBlcik7aWYobiE9PWUuc3VwZXJPcHRpb25zKXtlLnN1cGVyT3B0aW9ucz1uO3ZhciByPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5vcHRpb25zLHI9ZS5zZWFsZWRPcHRpb25zO2Zvcih2YXIgaSBpbiBuKW5baV0hPT1yW2ldJiYodHx8KHQ9e30pLHRbaV09bltpXSk7cmV0dXJuIHR9KGUpO3ImJkEoZS5leHRlbmRPcHRpb25zLHIpLCh0PWUub3B0aW9ucz1EZShuLGUuZXh0ZW5kT3B0aW9ucykpLm5hbWUmJih0LmNvbXBvbmVudHNbdC5uYW1lXT1lKX19cmV0dXJuIHR9ZnVuY3Rpb24gd24oZSl7dGhpcy5faW5pdChlKX1mdW5jdGlvbiBDbihlKXtlLmNpZD0wO3ZhciB0PTE7ZS5leHRlbmQ9ZnVuY3Rpb24oZSl7ZT1lfHx7fTt2YXIgbj10aGlzLHI9bi5jaWQsaT1lLl9DdG9yfHwoZS5fQ3Rvcj17fSk7aWYoaVtyXSlyZXR1cm4gaVtyXTt2YXIgbz1lLm5hbWV8fG4ub3B0aW9ucy5uYW1lLGE9ZnVuY3Rpb24oZSl7dGhpcy5faW5pdChlKX07cmV0dXJuKGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1hLGEuY2lkPXQrKyxhLm9wdGlvbnM9RGUobi5vcHRpb25zLGUpLGEuc3VwZXI9bixhLm9wdGlvbnMucHJvcHMmJmZ1bmN0aW9uKGUpe3ZhciB0PWUub3B0aW9ucy5wcm9wcztmb3IodmFyIG4gaW4gdClkbihlLnByb3RvdHlwZSxcIl9wcm9wc1wiLG4pfShhKSxhLm9wdGlvbnMuY29tcHV0ZWQmJmZ1bmN0aW9uKGUpe3ZhciB0PWUub3B0aW9ucy5jb21wdXRlZDtmb3IodmFyIG4gaW4gdCltbihlLnByb3RvdHlwZSxuLHRbbl0pfShhKSxhLmV4dGVuZD1uLmV4dGVuZCxhLm1peGluPW4ubWl4aW4sYS51c2U9bi51c2UsTS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2FbZV09bltlXX0pLG8mJihhLm9wdGlvbnMuY29tcG9uZW50c1tvXT1hKSxhLnN1cGVyT3B0aW9ucz1uLm9wdGlvbnMsYS5leHRlbmRPcHRpb25zPWUsYS5zZWFsZWRPcHRpb25zPUEoe30sYS5vcHRpb25zKSxpW3JdPWEsYX19ZnVuY3Rpb24geG4oZSl7cmV0dXJuIGUmJihlLkN0b3Iub3B0aW9ucy5uYW1lfHxlLnRhZyl9ZnVuY3Rpb24ga24oZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLmluZGV4T2YodCk+LTE6XCJzdHJpbmdcIj09dHlwZW9mIGU/ZS5zcGxpdChcIixcIikuaW5kZXhPZih0KT4tMToobj1lLFwiW29iamVjdCBSZWdFeHBdXCI9PT1hLmNhbGwobikmJmUudGVzdCh0KSk7dmFyIG59ZnVuY3Rpb24gQW4oZSx0KXt2YXIgbj1lLmNhY2hlLHI9ZS5rZXlzLGk9ZS5fdm5vZGU7Zm9yKHZhciBvIGluIG4pe3ZhciBhPW5bb107aWYoYSl7dmFyIHM9eG4oYS5jb21wb25lbnRPcHRpb25zKTtzJiYhdChzKSYmT24obixvLHIsaSl9fX1mdW5jdGlvbiBPbihlLHQsbixyKXt2YXIgaT1lW3RdOyFpfHxyJiZpLnRhZz09PXIudGFnfHxpLmNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCksZVt0XT1udWxsLGgobix0KX0hZnVuY3Rpb24odCl7dC5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCl7dmFyIG49dGhpcztuLl91aWQ9Ym4rKyxuLl9pc1Z1ZT0hMCx0JiZ0Ll9pc0NvbXBvbmVudD9mdW5jdGlvbihlLHQpe3ZhciBuPWUuJG9wdGlvbnM9T2JqZWN0LmNyZWF0ZShlLmNvbnN0cnVjdG9yLm9wdGlvbnMpLHI9dC5fcGFyZW50Vm5vZGU7bi5wYXJlbnQ9dC5wYXJlbnQsbi5fcGFyZW50Vm5vZGU9cjt2YXIgaT1yLmNvbXBvbmVudE9wdGlvbnM7bi5wcm9wc0RhdGE9aS5wcm9wc0RhdGEsbi5fcGFyZW50TGlzdGVuZXJzPWkubGlzdGVuZXJzLG4uX3JlbmRlckNoaWxkcmVuPWkuY2hpbGRyZW4sbi5fY29tcG9uZW50VGFnPWkudGFnLHQucmVuZGVyJiYobi5yZW5kZXI9dC5yZW5kZXIsbi5zdGF0aWNSZW5kZXJGbnM9dC5zdGF0aWNSZW5kZXJGbnMpfShuLHQpOm4uJG9wdGlvbnM9RGUoJG4obi5jb25zdHJ1Y3RvciksdHx8e30sbiksbi5fcmVuZGVyUHJveHk9bixuLl9zZWxmPW4sZnVuY3Rpb24oZSl7dmFyIHQ9ZS4kb3B0aW9ucyxuPXQucGFyZW50O2lmKG4mJiF0LmFic3RyYWN0KXtmb3IoO24uJG9wdGlvbnMuYWJzdHJhY3QmJm4uJHBhcmVudDspbj1uLiRwYXJlbnQ7bi4kY2hpbGRyZW4ucHVzaChlKX1lLiRwYXJlbnQ9bixlLiRyb290PW4/bi4kcm9vdDplLGUuJGNoaWxkcmVuPVtdLGUuJHJlZnM9e30sZS5fd2F0Y2hlcj1udWxsLGUuX2luYWN0aXZlPW51bGwsZS5fZGlyZWN0SW5hY3RpdmU9ITEsZS5faXNNb3VudGVkPSExLGUuX2lzRGVzdHJveWVkPSExLGUuX2lzQmVpbmdEZXN0cm95ZWQ9ITF9KG4pLGZ1bmN0aW9uKGUpe2UuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLGUuX2hhc0hvb2tFdmVudD0hMTt2YXIgdD1lLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7dCYmcXQoZSx0KX0obiksZnVuY3Rpb24odCl7dC5fdm5vZGU9bnVsbCx0Ll9zdGF0aWNUcmVlcz1udWxsO3ZhciBuPXQuJG9wdGlvbnMscj10LiR2bm9kZT1uLl9wYXJlbnRWbm9kZSxpPXImJnIuY29udGV4dDt0LiRzbG90cz11dChuLl9yZW5kZXJDaGlsZHJlbixpKSx0LiRzY29wZWRTbG90cz1lLHQuX2M9ZnVuY3Rpb24oZSxuLHIsaSl7cmV0dXJuIFB0KHQsZSxuLHIsaSwhMSl9LHQuJGNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSxuLHIsaSl7cmV0dXJuIFB0KHQsZSxuLHIsaSwhMCl9O3ZhciBvPXImJnIuZGF0YTt4ZSh0LFwiJGF0dHJzXCIsbyYmby5hdHRyc3x8ZSxudWxsLCEwKSx4ZSh0LFwiJGxpc3RlbmVyc1wiLG4uX3BhcmVudExpc3RlbmVyc3x8ZSxudWxsLCEwKX0obiksWXQobixcImJlZm9yZUNyZWF0ZVwiKSxmdW5jdGlvbihlKXt2YXIgdD1jdChlLiRvcHRpb25zLmluamVjdCxlKTt0JiYoJGUoITEpLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7eGUoZSxuLHRbbl0pfSksJGUoITApKX0obiksdm4obiksZnVuY3Rpb24oZSl7dmFyIHQ9ZS4kb3B0aW9ucy5wcm92aWRlO3QmJihlLl9wcm92aWRlZD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3QuY2FsbChlKTp0KX0obiksWXQobixcImNyZWF0ZWRcIiksbi4kb3B0aW9ucy5lbCYmbi4kbW91bnQobi4kb3B0aW9ucy5lbCl9fSh3biksZnVuY3Rpb24oZSl7dmFyIHQ9e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kYXRhfX0sbj17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Byb3BzfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwiJGRhdGFcIix0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsXCIkcHJvcHNcIixuKSxlLnByb3RvdHlwZS4kc2V0PWtlLGUucHJvdG90eXBlLiRkZWxldGU9QWUsZS5wcm90b3R5cGUuJHdhdGNoPWZ1bmN0aW9uKGUsdCxuKXtpZihzKHQpKXJldHVybiBfbih0aGlzLGUsdCxuKTsobj1ufHx7fSkudXNlcj0hMDt2YXIgcj1uZXcgZm4odGhpcyxlLHQsbik7aWYobi5pbW1lZGlhdGUpdHJ5e3QuY2FsbCh0aGlzLHIudmFsdWUpfWNhdGNoKGUpe1JlKGUsdGhpcywnY2FsbGJhY2sgZm9yIGltbWVkaWF0ZSB3YXRjaGVyIFwiJytyLmV4cHJlc3Npb24rJ1wiJyl9cmV0dXJuIGZ1bmN0aW9uKCl7ci50ZWFyZG93bigpfX19KHduKSxmdW5jdGlvbihlKXt2YXIgdD0vXmhvb2s6LztlLnByb3RvdHlwZS4kb249ZnVuY3Rpb24oZSxuKXt2YXIgcj10aGlzO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciBpPTAsbz1lLmxlbmd0aDtpPG87aSsrKXIuJG9uKGVbaV0sbik7ZWxzZShyLl9ldmVudHNbZV18fChyLl9ldmVudHNbZV09W10pKS5wdXNoKG4pLHQudGVzdChlKSYmKHIuX2hhc0hvb2tFdmVudD0hMCk7cmV0dXJuIHJ9LGUucHJvdG90eXBlLiRvbmNlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztmdW5jdGlvbiByKCl7bi4kb2ZmKGUsciksdC5hcHBseShuLGFyZ3VtZW50cyl9cmV0dXJuIHIuZm49dCxuLiRvbihlLHIpLG59LGUucHJvdG90eXBlLiRvZmY9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxuO2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyluLiRvZmYoZVtyXSx0KTtyZXR1cm4gbn12YXIgbyxhPW4uX2V2ZW50c1tlXTtpZighYSlyZXR1cm4gbjtpZighdClyZXR1cm4gbi5fZXZlbnRzW2VdPW51bGwsbjtmb3IodmFyIHM9YS5sZW5ndGg7cy0tOylpZigobz1hW3NdKT09PXR8fG8uZm49PT10KXthLnNwbGljZShzLDEpO2JyZWFrfXJldHVybiBufSxlLnByb3RvdHlwZS4kZW1pdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9ldmVudHNbZV07aWYodCl7dD10Lmxlbmd0aD4xP2sodCk6dDtmb3IodmFyIG49ayhhcmd1bWVudHMsMSkscj0nZXZlbnQgaGFuZGxlciBmb3IgXCInK2UrJ1wiJyxpPTAsbz10Lmxlbmd0aDtpPG87aSsrKUhlKHRbaV0sdGhpcyxuLHRoaXMscil9cmV0dXJuIHRoaXN9fSh3biksZnVuY3Rpb24oZSl7ZS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLiRlbCxpPW4uX3Zub2RlLG89WnQobik7bi5fdm5vZGU9ZSxuLiRlbD1pP24uX19wYXRjaF9fKGksZSk6bi5fX3BhdGNoX18obi4kZWwsZSx0LCExKSxvKCksciYmKHIuX192dWVfXz1udWxsKSxuLiRlbCYmKG4uJGVsLl9fdnVlX189biksbi4kdm5vZGUmJm4uJHBhcmVudCYmbi4kdm5vZGU9PT1uLiRwYXJlbnQuX3Zub2RlJiYobi4kcGFyZW50LiRlbD1uLiRlbCl9LGUucHJvdG90eXBlLiRmb3JjZVVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuX3dhdGNoZXImJnRoaXMuX3dhdGNoZXIudXBkYXRlKCl9LGUucHJvdG90eXBlLiRkZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZighZS5faXNCZWluZ0Rlc3Ryb3llZCl7WXQoZSxcImJlZm9yZURlc3Ryb3lcIiksZS5faXNCZWluZ0Rlc3Ryb3llZD0hMDt2YXIgdD1lLiRwYXJlbnQ7IXR8fHQuX2lzQmVpbmdEZXN0cm95ZWR8fGUuJG9wdGlvbnMuYWJzdHJhY3R8fGgodC4kY2hpbGRyZW4sZSksZS5fd2F0Y2hlciYmZS5fd2F0Y2hlci50ZWFyZG93bigpO2Zvcih2YXIgbj1lLl93YXRjaGVycy5sZW5ndGg7bi0tOyllLl93YXRjaGVyc1tuXS50ZWFyZG93bigpO2UuX2RhdGEuX19vYl9fJiZlLl9kYXRhLl9fb2JfXy52bUNvdW50LS0sZS5faXNEZXN0cm95ZWQ9ITAsZS5fX3BhdGNoX18oZS5fdm5vZGUsbnVsbCksWXQoZSxcImRlc3Ryb3llZFwiKSxlLiRvZmYoKSxlLiRlbCYmKGUuJGVsLl9fdnVlX189bnVsbCksZS4kdm5vZGUmJihlLiR2bm9kZS5wYXJlbnQ9bnVsbCl9fX0od24pLGZ1bmN0aW9uKGUpe1N0KGUucHJvdG90eXBlKSxlLnByb3RvdHlwZS4kbmV4dFRpY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIFllKGUsdGhpcyl9LGUucHJvdG90eXBlLl9yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMsbj10LiRvcHRpb25zLHI9bi5yZW5kZXIsaT1uLl9wYXJlbnRWbm9kZTtpJiYodC4kc2NvcGVkU2xvdHM9ZnQoaS5kYXRhLnNjb3BlZFNsb3RzLHQuJHNsb3RzLHQuJHNjb3BlZFNsb3RzKSksdC4kdm5vZGU9aTt0cnl7SHQ9dCxlPXIuY2FsbCh0Ll9yZW5kZXJQcm94eSx0LiRjcmVhdGVFbGVtZW50KX1jYXRjaChuKXtSZShuLHQsXCJyZW5kZXJcIiksZT10Ll92bm9kZX1maW5hbGx5e0h0PW51bGx9cmV0dXJuIEFycmF5LmlzQXJyYXkoZSkmJjE9PT1lLmxlbmd0aCYmKGU9ZVswXSksZSBpbnN0YW5jZW9mIHBlfHwoZT12ZSgpKSxlLnBhcmVudD1pLGV9fSh3bik7dmFyIFNuPVtTdHJpbmcsUmVnRXhwLEFycmF5XSxUbj17S2VlcEFsaXZlOntuYW1lOlwia2VlcC1hbGl2ZVwiLGFic3RyYWN0OiEwLHByb3BzOntpbmNsdWRlOlNuLGV4Y2x1ZGU6U24sbWF4OltTdHJpbmcsTnVtYmVyXX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuY2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmtleXM9W119LGRlc3Ryb3llZDpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLmNhY2hlKU9uKHRoaXMuY2FjaGUsZSx0aGlzLmtleXMpfSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLiR3YXRjaChcImluY2x1ZGVcIixmdW5jdGlvbih0KXtBbihlLGZ1bmN0aW9uKGUpe3JldHVybiBrbih0LGUpfSl9KSx0aGlzLiR3YXRjaChcImV4Y2x1ZGVcIixmdW5jdGlvbih0KXtBbihlLGZ1bmN0aW9uKGUpe3JldHVybiFrbih0LGUpfSl9KX0scmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kc2xvdHMuZGVmYXVsdCx0PXp0KGUpLG49dCYmdC5jb21wb25lbnRPcHRpb25zO2lmKG4pe3ZhciByPXhuKG4pLGk9dGhpcy5pbmNsdWRlLG89dGhpcy5leGNsdWRlO2lmKGkmJighcnx8IWtuKGkscikpfHxvJiZyJiZrbihvLHIpKXJldHVybiB0O3ZhciBhPXRoaXMuY2FjaGUscz10aGlzLmtleXMsYz1udWxsPT10LmtleT9uLkN0b3IuY2lkKyhuLnRhZz9cIjo6XCIrbi50YWc6XCJcIik6dC5rZXk7YVtjXT8odC5jb21wb25lbnRJbnN0YW5jZT1hW2NdLmNvbXBvbmVudEluc3RhbmNlLGgocyxjKSxzLnB1c2goYykpOihhW2NdPXQscy5wdXNoKGMpLHRoaXMubWF4JiZzLmxlbmd0aD5wYXJzZUludCh0aGlzLm1heCkmJk9uKGEsc1swXSxzLHRoaXMuX3Zub2RlKSksdC5kYXRhLmtlZXBBbGl2ZT0hMH1yZXR1cm4gdHx8ZSYmZVswXX19fTshZnVuY3Rpb24oZSl7dmFyIHQ9e2dldDpmdW5jdGlvbigpe3JldHVybiBGfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJjb25maWdcIix0KSxlLnV0aWw9e3dhcm46YWUsZXh0ZW5kOkEsbWVyZ2VPcHRpb25zOkRlLGRlZmluZVJlYWN0aXZlOnhlfSxlLnNldD1rZSxlLmRlbGV0ZT1BZSxlLm5leHRUaWNrPVllLGUub2JzZXJ2YWJsZT1mdW5jdGlvbihlKXtyZXR1cm4gQ2UoZSksZX0sZS5vcHRpb25zPU9iamVjdC5jcmVhdGUobnVsbCksTS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Uub3B0aW9uc1t0K1wic1wiXT1PYmplY3QuY3JlYXRlKG51bGwpfSksZS5vcHRpb25zLl9iYXNlPWUsQShlLm9wdGlvbnMuY29tcG9uZW50cyxUbiksZnVuY3Rpb24oZSl7ZS51c2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW5zdGFsbGVkUGx1Z2luc3x8KHRoaXMuX2luc3RhbGxlZFBsdWdpbnM9W10pO2lmKHQuaW5kZXhPZihlKT4tMSlyZXR1cm4gdGhpczt2YXIgbj1rKGFyZ3VtZW50cywxKTtyZXR1cm4gbi51bnNoaWZ0KHRoaXMpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuaW5zdGFsbD9lLmluc3RhbGwuYXBwbHkoZSxuKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlLmFwcGx5KG51bGwsbiksdC5wdXNoKGUpLHRoaXN9fShlKSxmdW5jdGlvbihlKXtlLm1peGluPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9wdGlvbnM9RGUodGhpcy5vcHRpb25zLGUpLHRoaXN9fShlKSxDbihlKSxmdW5jdGlvbihlKXtNLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1mdW5jdGlvbihlLG4pe3JldHVybiBuPyhcImNvbXBvbmVudFwiPT09dCYmcyhuKSYmKG4ubmFtZT1uLm5hbWV8fGUsbj10aGlzLm9wdGlvbnMuX2Jhc2UuZXh0ZW5kKG4pKSxcImRpcmVjdGl2ZVwiPT09dCYmXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKG49e2JpbmQ6bix1cGRhdGU6bn0pLHRoaXMub3B0aW9uc1t0K1wic1wiXVtlXT1uLG4pOnRoaXMub3B0aW9uc1t0K1wic1wiXVtlXX19KX0oZSl9KHduKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod24ucHJvdG90eXBlLFwiJGlzU2VydmVyXCIse2dldDp0ZX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3bi5wcm90b3R5cGUsXCIkc3NyQ29udGV4dFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdm5vZGUmJnRoaXMuJHZub2RlLnNzckNvbnRleHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHduLFwiRnVuY3Rpb25hbFJlbmRlckNvbnRleHRcIix7dmFsdWU6VHR9KSx3bi52ZXJzaW9uPVwiMi42LjEyXCI7dmFyIEVuPXAoXCJzdHlsZSxjbGFzc1wiKSxObj1wKFwiaW5wdXQsdGV4dGFyZWEsb3B0aW9uLHNlbGVjdCxwcm9ncmVzc1wiKSxqbj1mdW5jdGlvbihlLHQsbil7cmV0dXJuXCJ2YWx1ZVwiPT09biYmTm4oZSkmJlwiYnV0dG9uXCIhPT10fHxcInNlbGVjdGVkXCI9PT1uJiZcIm9wdGlvblwiPT09ZXx8XCJjaGVja2VkXCI9PT1uJiZcImlucHV0XCI9PT1lfHxcIm11dGVkXCI9PT1uJiZcInZpZGVvXCI9PT1lfSxEbj1wKFwiY29udGVudGVkaXRhYmxlLGRyYWdnYWJsZSxzcGVsbGNoZWNrXCIpLExuPXAoXCJldmVudHMsY2FyZXQsdHlwaW5nLHBsYWludGV4dC1vbmx5XCIpLE1uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEhuKHQpfHxcImZhbHNlXCI9PT10P1wiZmFsc2VcIjpcImNvbnRlbnRlZGl0YWJsZVwiPT09ZSYmTG4odCk/dDpcInRydWVcIn0sSW49cChcImFsbG93ZnVsbHNjcmVlbixhc3luYyxhdXRvZm9jdXMsYXV0b3BsYXksY2hlY2tlZCxjb21wYWN0LGNvbnRyb2xzLGRlY2xhcmUsZGVmYXVsdCxkZWZhdWx0Y2hlY2tlZCxkZWZhdWx0bXV0ZWQsZGVmYXVsdHNlbGVjdGVkLGRlZmVyLGRpc2FibGVkLGVuYWJsZWQsZm9ybW5vdmFsaWRhdGUsaGlkZGVuLGluZGV0ZXJtaW5hdGUsaW5lcnQsaXNtYXAsaXRlbXNjb3BlLGxvb3AsbXVsdGlwbGUsbXV0ZWQsbm9ocmVmLG5vcmVzaXplLG5vc2hhZGUsbm92YWxpZGF0ZSxub3dyYXAsb3BlbixwYXVzZW9uZXhpdCxyZWFkb25seSxyZXF1aXJlZCxyZXZlcnNlZCxzY29wZWQsc2VhbWxlc3Msc2VsZWN0ZWQsc29ydGFibGUsdHJhbnNsYXRlLHRydWVzcGVlZCx0eXBlbXVzdG1hdGNoLHZpc2libGVcIiksRm49XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsUG49ZnVuY3Rpb24oZSl7cmV0dXJuXCI6XCI9PT1lLmNoYXJBdCg1KSYmXCJ4bGlua1wiPT09ZS5zbGljZSgwLDUpfSxSbj1mdW5jdGlvbihlKXtyZXR1cm4gUG4oZSk/ZS5zbGljZSg2LGUubGVuZ3RoKTpcIlwifSxIbj1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZXx8ITE9PT1lfTtmdW5jdGlvbiBCbihlKXtmb3IodmFyIHQ9ZS5kYXRhLHI9ZSxpPWU7bihpLmNvbXBvbmVudEluc3RhbmNlKTspKGk9aS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUpJiZpLmRhdGEmJih0PVVuKGkuZGF0YSx0KSk7Zm9yKDtuKHI9ci5wYXJlbnQpOylyJiZyLmRhdGEmJih0PVVuKHQsci5kYXRhKSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYobihlKXx8bih0KSlyZXR1cm4gem4oZSxWbih0KSk7cmV0dXJuXCJcIn0odC5zdGF0aWNDbGFzcyx0LmNsYXNzKX1mdW5jdGlvbiBVbihlLHQpe3JldHVybntzdGF0aWNDbGFzczp6bihlLnN0YXRpY0NsYXNzLHQuc3RhdGljQ2xhc3MpLGNsYXNzOm4oZS5jbGFzcyk/W2UuY2xhc3MsdC5jbGFzc106dC5jbGFzc319ZnVuY3Rpb24gem4oZSx0KXtyZXR1cm4gZT90P2UrXCIgXCIrdDplOnR8fFwiXCJ9ZnVuY3Rpb24gVm4oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9XCJcIixpPTAsbz1lLmxlbmd0aDtpPG87aSsrKW4odD1WbihlW2ldKSkmJlwiXCIhPT10JiYociYmKHIrPVwiIFwiKSxyKz10KTtyZXR1cm4gcn0oZSk6byhlKT9mdW5jdGlvbihlKXt2YXIgdD1cIlwiO2Zvcih2YXIgbiBpbiBlKWVbbl0mJih0JiYodCs9XCIgXCIpLHQrPW4pO3JldHVybiB0fShlKTpcInN0cmluZ1wiPT10eXBlb2YgZT9lOlwiXCJ9dmFyIEtuPXtzdmc6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLG1hdGg6XCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCJ9LEpuPXAoXCJodG1sLGJvZHksYmFzZSxoZWFkLGxpbmssbWV0YSxzdHlsZSx0aXRsZSxhZGRyZXNzLGFydGljbGUsYXNpZGUsZm9vdGVyLGhlYWRlcixoMSxoMixoMyxoNCxoNSxoNixoZ3JvdXAsbmF2LHNlY3Rpb24sZGl2LGRkLGRsLGR0LGZpZ2NhcHRpb24sZmlndXJlLHBpY3R1cmUsaHIsaW1nLGxpLG1haW4sb2wscCxwcmUsdWwsYSxiLGFiYnIsYmRpLGJkbyxicixjaXRlLGNvZGUsZGF0YSxkZm4sZW0saSxrYmQsbWFyayxxLHJwLHJ0LHJ0YyxydWJ5LHMsc2FtcCxzbWFsbCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNrLHZpZGVvLGVtYmVkLG9iamVjdCxwYXJhbSxzb3VyY2UsY2FudmFzLHNjcmlwdCxub3NjcmlwdCxkZWwsaW5zLGNhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxlLHRoZWFkLHRib2R5LHRkLHRoLHRyLGJ1dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRncm91cCxvcHRpb24sb3V0cHV0LHByb2dyZXNzLHNlbGVjdCx0ZXh0YXJlYSxkZXRhaWxzLGRpYWxvZyxtZW51LG1lbnVpdGVtLHN1bW1hcnksY29udGVudCxlbGVtZW50LHNoYWRvdyx0ZW1wbGF0ZSxibG9ja3F1b3RlLGlmcmFtZSx0Zm9vdFwiKSxxbj1wKFwic3ZnLGFuaW1hdGUsY2lyY2xlLGNsaXBwYXRoLGN1cnNvcixkZWZzLGRlc2MsZWxsaXBzZSxmaWx0ZXIsZm9udC1mYWNlLGZvcmVpZ25PYmplY3QsZyxnbHlwaCxpbWFnZSxsaW5lLG1hcmtlcixtYXNrLG1pc3NpbmctZ2x5cGgscGF0aCxwYXR0ZXJuLHBvbHlnb24scG9seWxpbmUscmVjdCxzd2l0Y2gsc3ltYm9sLHRleHQsdGV4dHBhdGgsdHNwYW4sdXNlLHZpZXdcIiwhMCksV249ZnVuY3Rpb24oZSl7cmV0dXJuIEpuKGUpfHxxbihlKX07ZnVuY3Rpb24gWm4oZSl7cmV0dXJuIHFuKGUpP1wic3ZnXCI6XCJtYXRoXCI9PT1lP1wibWF0aFwiOnZvaWQgMH12YXIgR249T2JqZWN0LmNyZWF0ZShudWxsKTt2YXIgWG49cChcInRleHQsbnVtYmVyLHBhc3N3b3JkLHNlYXJjaCxlbWFpbCx0ZWwsdXJsXCIpO2Z1bmN0aW9uIFluKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXt2YXIgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpO3JldHVybiB0fHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpfXJldHVybiBlfXZhciBRbj1PYmplY3QuZnJlZXplKHtjcmVhdGVFbGVtZW50OmZ1bmN0aW9uKGUsdCl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlKTtyZXR1cm5cInNlbGVjdFwiIT09ZT9uOih0LmRhdGEmJnQuZGF0YS5hdHRycyYmdm9pZCAwIT09dC5kYXRhLmF0dHJzLm11bHRpcGxlJiZuLnNldEF0dHJpYnV0ZShcIm11bHRpcGxlXCIsXCJtdWx0aXBsZVwiKSxuKX0sY3JlYXRlRWxlbWVudE5TOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhLbltlXSx0KX0sY3JlYXRlVGV4dE5vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpfSxjcmVhdGVDb21tZW50OmZ1bmN0aW9uKGUpe3JldHVybiBkb2N1bWVudC5jcmVhdGVDb21tZW50KGUpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0LG4pe2UuaW5zZXJ0QmVmb3JlKHQsbil9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKGUsdCl7ZS5yZW1vdmVDaGlsZCh0KX0sYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSx0KXtlLmFwcGVuZENoaWxkKHQpfSxwYXJlbnROb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnBhcmVudE5vZGV9LG5leHRTaWJsaW5nOmZ1bmN0aW9uKGUpe3JldHVybiBlLm5leHRTaWJsaW5nfSx0YWdOYW1lOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRhZ05hbWV9LHNldFRleHRDb250ZW50OmZ1bmN0aW9uKGUsdCl7ZS50ZXh0Q29udGVudD10fSxzZXRTdHlsZVNjb3BlOmZ1bmN0aW9uKGUsdCl7ZS5zZXRBdHRyaWJ1dGUodCxcIlwiKX19KSxlcj17Y3JlYXRlOmZ1bmN0aW9uKGUsdCl7dHIodCl9LHVwZGF0ZTpmdW5jdGlvbihlLHQpe2UuZGF0YS5yZWYhPT10LmRhdGEucmVmJiYodHIoZSwhMCksdHIodCkpfSxkZXN0cm95OmZ1bmN0aW9uKGUpe3RyKGUsITApfX07ZnVuY3Rpb24gdHIoZSx0KXt2YXIgcj1lLmRhdGEucmVmO2lmKG4ocikpe3ZhciBpPWUuY29udGV4dCxvPWUuY29tcG9uZW50SW5zdGFuY2V8fGUuZWxtLGE9aS4kcmVmczt0P0FycmF5LmlzQXJyYXkoYVtyXSk/aChhW3JdLG8pOmFbcl09PT1vJiYoYVtyXT12b2lkIDApOmUuZGF0YS5yZWZJbkZvcj9BcnJheS5pc0FycmF5KGFbcl0pP2Fbcl0uaW5kZXhPZihvKTwwJiZhW3JdLnB1c2gobyk6YVtyXT1bb106YVtyXT1vfX12YXIgbnI9bmV3IHBlKFwiXCIse30sW10pLHJyPVtcImNyZWF0ZVwiLFwiYWN0aXZhdGVcIixcInVwZGF0ZVwiLFwicmVtb3ZlXCIsXCJkZXN0cm95XCJdO2Z1bmN0aW9uIGlyKGUsaSl7cmV0dXJuIGUua2V5PT09aS5rZXkmJihlLnRhZz09PWkudGFnJiZlLmlzQ29tbWVudD09PWkuaXNDb21tZW50JiZuKGUuZGF0YSk9PT1uKGkuZGF0YSkmJmZ1bmN0aW9uKGUsdCl7aWYoXCJpbnB1dFwiIT09ZS50YWcpcmV0dXJuITA7dmFyIHIsaT1uKHI9ZS5kYXRhKSYmbihyPXIuYXR0cnMpJiZyLnR5cGUsbz1uKHI9dC5kYXRhKSYmbihyPXIuYXR0cnMpJiZyLnR5cGU7cmV0dXJuIGk9PT1vfHxYbihpKSYmWG4obyl9KGUsaSl8fHIoZS5pc0FzeW5jUGxhY2Vob2xkZXIpJiZlLmFzeW5jRmFjdG9yeT09PWkuYXN5bmNGYWN0b3J5JiZ0KGkuYXN5bmNGYWN0b3J5LmVycm9yKSl9ZnVuY3Rpb24gb3IoZSx0LHIpe3ZhciBpLG8sYT17fTtmb3IoaT10O2k8PXI7KytpKW4obz1lW2ldLmtleSkmJihhW29dPWkpO3JldHVybiBhfXZhciBhcj17Y3JlYXRlOnNyLHVwZGF0ZTpzcixkZXN0cm95OmZ1bmN0aW9uKGUpe3NyKGUsbnIpfX07ZnVuY3Rpb24gc3IoZSx0KXsoZS5kYXRhLmRpcmVjdGl2ZXN8fHQuZGF0YS5kaXJlY3RpdmVzKSYmZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbz1lPT09bnIsYT10PT09bnIscz11cihlLmRhdGEuZGlyZWN0aXZlcyxlLmNvbnRleHQpLGM9dXIodC5kYXRhLmRpcmVjdGl2ZXMsdC5jb250ZXh0KSx1PVtdLGw9W107Zm9yKG4gaW4gYylyPXNbbl0saT1jW25dLHI/KGkub2xkVmFsdWU9ci52YWx1ZSxpLm9sZEFyZz1yLmFyZyxmcihpLFwidXBkYXRlXCIsdCxlKSxpLmRlZiYmaS5kZWYuY29tcG9uZW50VXBkYXRlZCYmbC5wdXNoKGkpKTooZnIoaSxcImJpbmRcIix0LGUpLGkuZGVmJiZpLmRlZi5pbnNlcnRlZCYmdS5wdXNoKGkpKTtpZih1Lmxlbmd0aCl7dmFyIGY9ZnVuY3Rpb24oKXtmb3IodmFyIG49MDtuPHUubGVuZ3RoO24rKylmcih1W25dLFwiaW5zZXJ0ZWRcIix0LGUpfTtvP2l0KHQsXCJpbnNlcnRcIixmKTpmKCl9bC5sZW5ndGgmJml0KHQsXCJwb3N0cGF0Y2hcIixmdW5jdGlvbigpe2Zvcih2YXIgbj0wO248bC5sZW5ndGg7bisrKWZyKGxbbl0sXCJjb21wb25lbnRVcGRhdGVkXCIsdCxlKX0pO2lmKCFvKWZvcihuIGluIHMpY1tuXXx8ZnIoc1tuXSxcInVuYmluZFwiLGUsZSxhKX0oZSx0KX12YXIgY3I9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiB1cihlLHQpe3ZhciBuLHIsaT1PYmplY3QuY3JlYXRlKG51bGwpO2lmKCFlKXJldHVybiBpO2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspKHI9ZVtuXSkubW9kaWZpZXJzfHwoci5tb2RpZmllcnM9Y3IpLGlbbHIocildPXIsci5kZWY9TGUodC4kb3B0aW9ucyxcImRpcmVjdGl2ZXNcIixyLm5hbWUpO3JldHVybiBpfWZ1bmN0aW9uIGxyKGUpe3JldHVybiBlLnJhd05hbWV8fGUubmFtZStcIi5cIitPYmplY3Qua2V5cyhlLm1vZGlmaWVyc3x8e30pLmpvaW4oXCIuXCIpfWZ1bmN0aW9uIGZyKGUsdCxuLHIsaSl7dmFyIG89ZS5kZWYmJmUuZGVmW3RdO2lmKG8pdHJ5e28obi5lbG0sZSxuLHIsaSl9Y2F0Y2gocil7UmUocixuLmNvbnRleHQsXCJkaXJlY3RpdmUgXCIrZS5uYW1lK1wiIFwiK3QrXCIgaG9va1wiKX19dmFyIHByPVtlcixhcl07ZnVuY3Rpb24gZHIoZSxyKXt2YXIgaT1yLmNvbXBvbmVudE9wdGlvbnM7aWYoIShuKGkpJiYhMT09PWkuQ3Rvci5vcHRpb25zLmluaGVyaXRBdHRyc3x8dChlLmRhdGEuYXR0cnMpJiZ0KHIuZGF0YS5hdHRycykpKXt2YXIgbyxhLHM9ci5lbG0sYz1lLmRhdGEuYXR0cnN8fHt9LHU9ci5kYXRhLmF0dHJzfHx7fTtmb3IobyBpbiBuKHUuX19vYl9fKSYmKHU9ci5kYXRhLmF0dHJzPUEoe30sdSkpLHUpYT11W29dLGNbb10hPT1hJiZ2cihzLG8sYSk7Zm9yKG8gaW4ocXx8WikmJnUudmFsdWUhPT1jLnZhbHVlJiZ2cihzLFwidmFsdWVcIix1LnZhbHVlKSxjKXQodVtvXSkmJihQbihvKT9zLnJlbW92ZUF0dHJpYnV0ZU5TKEZuLFJuKG8pKTpEbihvKXx8cy5yZW1vdmVBdHRyaWJ1dGUobykpfX1mdW5jdGlvbiB2cihlLHQsbil7ZS50YWdOYW1lLmluZGV4T2YoXCItXCIpPi0xP2hyKGUsdCxuKTpJbih0KT9IbihuKT9lLnJlbW92ZUF0dHJpYnV0ZSh0KToobj1cImFsbG93ZnVsbHNjcmVlblwiPT09dCYmXCJFTUJFRFwiPT09ZS50YWdOYW1lP1widHJ1ZVwiOnQsZS5zZXRBdHRyaWJ1dGUodCxuKSk6RG4odCk/ZS5zZXRBdHRyaWJ1dGUodCxNbih0LG4pKTpQbih0KT9IbihuKT9lLnJlbW92ZUF0dHJpYnV0ZU5TKEZuLFJuKHQpKTplLnNldEF0dHJpYnV0ZU5TKEZuLHQsbik6aHIoZSx0LG4pfWZ1bmN0aW9uIGhyKGUsdCxuKXtpZihIbihuKSllLnJlbW92ZUF0dHJpYnV0ZSh0KTtlbHNle2lmKHEmJiFXJiZcIlRFWFRBUkVBXCI9PT1lLnRhZ05hbWUmJlwicGxhY2Vob2xkZXJcIj09PXQmJlwiXCIhPT1uJiYhZS5fX2llcGgpe3ZhciByPWZ1bmN0aW9uKHQpe3Quc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiaW5wdXRcIixyKX07ZS5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIixyKSxlLl9faWVwaD0hMH1lLnNldEF0dHJpYnV0ZSh0LG4pfX12YXIgbXI9e2NyZWF0ZTpkcix1cGRhdGU6ZHJ9O2Z1bmN0aW9uIHlyKGUscil7dmFyIGk9ci5lbG0sbz1yLmRhdGEsYT1lLmRhdGE7aWYoISh0KG8uc3RhdGljQ2xhc3MpJiZ0KG8uY2xhc3MpJiYodChhKXx8dChhLnN0YXRpY0NsYXNzKSYmdChhLmNsYXNzKSkpKXt2YXIgcz1CbihyKSxjPWkuX3RyYW5zaXRpb25DbGFzc2VzO24oYykmJihzPXpuKHMsVm4oYykpKSxzIT09aS5fcHJldkNsYXNzJiYoaS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLHMpLGkuX3ByZXZDbGFzcz1zKX19dmFyIGdyLF9yLGJyLCRyLHdyLENyLHhyPXtjcmVhdGU6eXIsdXBkYXRlOnlyfSxrcj0vW1xcdykuK1xcLV8kXFxdXS87ZnVuY3Rpb24gQXIoZSl7dmFyIHQsbixyLGksbyxhPSExLHM9ITEsYz0hMSx1PSExLGw9MCxmPTAscD0wLGQ9MDtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKWlmKG49dCx0PWUuY2hhckNvZGVBdChyKSxhKTM5PT09dCYmOTIhPT1uJiYoYT0hMSk7ZWxzZSBpZihzKTM0PT09dCYmOTIhPT1uJiYocz0hMSk7ZWxzZSBpZihjKTk2PT09dCYmOTIhPT1uJiYoYz0hMSk7ZWxzZSBpZih1KTQ3PT09dCYmOTIhPT1uJiYodT0hMSk7ZWxzZSBpZigxMjQhPT10fHwxMjQ9PT1lLmNoYXJDb2RlQXQocisxKXx8MTI0PT09ZS5jaGFyQ29kZUF0KHItMSl8fGx8fGZ8fHApe3N3aXRjaCh0KXtjYXNlIDM0OnM9ITA7YnJlYWs7Y2FzZSAzOTphPSEwO2JyZWFrO2Nhc2UgOTY6Yz0hMDticmVhaztjYXNlIDQwOnArKzticmVhaztjYXNlIDQxOnAtLTticmVhaztjYXNlIDkxOmYrKzticmVhaztjYXNlIDkzOmYtLTticmVhaztjYXNlIDEyMzpsKys7YnJlYWs7Y2FzZSAxMjU6bC0tfWlmKDQ3PT09dCl7Zm9yKHZhciB2PXItMSxoPXZvaWQgMDt2Pj0wJiZcIiBcIj09PShoPWUuY2hhckF0KHYpKTt2LS0pO2gmJmtyLnRlc3QoaCl8fCh1PSEwKX19ZWxzZSB2b2lkIDA9PT1pPyhkPXIrMSxpPWUuc2xpY2UoMCxyKS50cmltKCkpOm0oKTtmdW5jdGlvbiBtKCl7KG98fChvPVtdKSkucHVzaChlLnNsaWNlKGQscikudHJpbSgpKSxkPXIrMX1pZih2b2lkIDA9PT1pP2k9ZS5zbGljZSgwLHIpLnRyaW0oKTowIT09ZCYmbSgpLG8pZm9yKHI9MDtyPG8ubGVuZ3RoO3IrKylpPU9yKGksb1tyXSk7cmV0dXJuIGl9ZnVuY3Rpb24gT3IoZSx0KXt2YXIgbj10LmluZGV4T2YoXCIoXCIpO2lmKG48MClyZXR1cm4nX2YoXCInK3QrJ1wiKSgnK2UrXCIpXCI7dmFyIHI9dC5zbGljZSgwLG4pLGk9dC5zbGljZShuKzEpO3JldHVybidfZihcIicrcisnXCIpKCcrZSsoXCIpXCIhPT1pP1wiLFwiK2k6aSl9ZnVuY3Rpb24gU3IoZSx0KXtjb25zb2xlLmVycm9yKFwiW1Z1ZSBjb21waWxlcl06IFwiK2UpfWZ1bmN0aW9uIFRyKGUsdCl7cmV0dXJuIGU/ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGVbdF19KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KTpbXX1mdW5jdGlvbiBFcihlLHQsbixyLGkpeyhlLnByb3BzfHwoZS5wcm9wcz1bXSkpLnB1c2goUnIoe25hbWU6dCx2YWx1ZTpuLGR5bmFtaWM6aX0scikpLGUucGxhaW49ITF9ZnVuY3Rpb24gTnIoZSx0LG4scixpKXsoaT9lLmR5bmFtaWNBdHRyc3x8KGUuZHluYW1pY0F0dHJzPVtdKTplLmF0dHJzfHwoZS5hdHRycz1bXSkpLnB1c2goUnIoe25hbWU6dCx2YWx1ZTpuLGR5bmFtaWM6aX0scikpLGUucGxhaW49ITF9ZnVuY3Rpb24ganIoZSx0LG4scil7ZS5hdHRyc01hcFt0XT1uLGUuYXR0cnNMaXN0LnB1c2goUnIoe25hbWU6dCx2YWx1ZTpufSxyKSl9ZnVuY3Rpb24gRHIoZSx0LG4scixpLG8sYSxzKXsoZS5kaXJlY3RpdmVzfHwoZS5kaXJlY3RpdmVzPVtdKSkucHVzaChScih7bmFtZTp0LHJhd05hbWU6bix2YWx1ZTpyLGFyZzppLGlzRHluYW1pY0FyZzpvLG1vZGlmaWVyczphfSxzKSksZS5wbGFpbj0hMX1mdW5jdGlvbiBMcihlLHQsbil7cmV0dXJuIG4/XCJfcChcIit0KycsXCInK2UrJ1wiKSc6ZSt0fWZ1bmN0aW9uIE1yKHQsbixyLGksbyxhLHMsYyl7dmFyIHU7KGk9aXx8ZSkucmlnaHQ/Yz9uPVwiKFwiK24rXCIpPT09J2NsaWNrJz8nY29udGV4dG1lbnUnOihcIituK1wiKVwiOlwiY2xpY2tcIj09PW4mJihuPVwiY29udGV4dG1lbnVcIixkZWxldGUgaS5yaWdodCk6aS5taWRkbGUmJihjP249XCIoXCIrbitcIik9PT0nY2xpY2snPydtb3VzZXVwJzooXCIrbitcIilcIjpcImNsaWNrXCI9PT1uJiYobj1cIm1vdXNldXBcIikpLGkuY2FwdHVyZSYmKGRlbGV0ZSBpLmNhcHR1cmUsbj1McihcIiFcIixuLGMpKSxpLm9uY2UmJihkZWxldGUgaS5vbmNlLG49THIoXCJ+XCIsbixjKSksaS5wYXNzaXZlJiYoZGVsZXRlIGkucGFzc2l2ZSxuPUxyKFwiJlwiLG4sYykpLGkubmF0aXZlPyhkZWxldGUgaS5uYXRpdmUsdT10Lm5hdGl2ZUV2ZW50c3x8KHQubmF0aXZlRXZlbnRzPXt9KSk6dT10LmV2ZW50c3x8KHQuZXZlbnRzPXt9KTt2YXIgbD1Scih7dmFsdWU6ci50cmltKCksZHluYW1pYzpjfSxzKTtpIT09ZSYmKGwubW9kaWZpZXJzPWkpO3ZhciBmPXVbbl07QXJyYXkuaXNBcnJheShmKT9vP2YudW5zaGlmdChsKTpmLnB1c2gobCk6dVtuXT1mP28/W2wsZl06W2YsbF06bCx0LnBsYWluPSExfWZ1bmN0aW9uIElyKGUsdCxuKXt2YXIgcj1GcihlLFwiOlwiK3QpfHxGcihlLFwidi1iaW5kOlwiK3QpO2lmKG51bGwhPXIpcmV0dXJuIEFyKHIpO2lmKCExIT09bil7dmFyIGk9RnIoZSx0KTtpZihudWxsIT1pKXJldHVybiBKU09OLnN0cmluZ2lmeShpKX19ZnVuY3Rpb24gRnIoZSx0LG4pe3ZhciByO2lmKG51bGwhPShyPWUuYXR0cnNNYXBbdF0pKWZvcih2YXIgaT1lLmF0dHJzTGlzdCxvPTAsYT1pLmxlbmd0aDtvPGE7bysrKWlmKGlbb10ubmFtZT09PXQpe2kuc3BsaWNlKG8sMSk7YnJlYWt9cmV0dXJuIG4mJmRlbGV0ZSBlLmF0dHJzTWFwW3RdLHJ9ZnVuY3Rpb24gUHIoZSx0KXtmb3IodmFyIG49ZS5hdHRyc0xpc3Qscj0wLGk9bi5sZW5ndGg7cjxpO3IrKyl7dmFyIG89bltyXTtpZih0LnRlc3Qoby5uYW1lKSlyZXR1cm4gbi5zcGxpY2UociwxKSxvfX1mdW5jdGlvbiBScihlLHQpe3JldHVybiB0JiYobnVsbCE9dC5zdGFydCYmKGUuc3RhcnQ9dC5zdGFydCksbnVsbCE9dC5lbmQmJihlLmVuZD10LmVuZCkpLGV9ZnVuY3Rpb24gSHIoZSx0LG4pe3ZhciByPW58fHt9LGk9ci5udW1iZXIsbz1cIiQkdlwiO3IudHJpbSYmKG89XCIodHlwZW9mICQkdiA9PT0gJ3N0cmluZyc/ICQkdi50cmltKCk6ICQkdilcIiksaSYmKG89XCJfbihcIitvK1wiKVwiKTt2YXIgYT1Ccih0LG8pO2UubW9kZWw9e3ZhbHVlOlwiKFwiK3QrXCIpXCIsZXhwcmVzc2lvbjpKU09OLnN0cmluZ2lmeSh0KSxjYWxsYmFjazpcImZ1bmN0aW9uICgkJHYpIHtcIithK1wifVwifX1mdW5jdGlvbiBCcihlLHQpe3ZhciBuPWZ1bmN0aW9uKGUpe2lmKGU9ZS50cmltKCksZ3I9ZS5sZW5ndGgsZS5pbmRleE9mKFwiW1wiKTwwfHxlLmxhc3RJbmRleE9mKFwiXVwiKTxnci0xKXJldHVybigkcj1lLmxhc3RJbmRleE9mKFwiLlwiKSk+LTE/e2V4cDplLnNsaWNlKDAsJHIpLGtleTonXCInK2Uuc2xpY2UoJHIrMSkrJ1wiJ306e2V4cDplLGtleTpudWxsfTtfcj1lLCRyPXdyPUNyPTA7Zm9yKDshenIoKTspVnIoYnI9VXIoKSk/SnIoYnIpOjkxPT09YnImJktyKGJyKTtyZXR1cm57ZXhwOmUuc2xpY2UoMCx3ciksa2V5OmUuc2xpY2Uod3IrMSxDcil9fShlKTtyZXR1cm4gbnVsbD09PW4ua2V5P2UrXCI9XCIrdDpcIiRzZXQoXCIrbi5leHArXCIsIFwiK24ua2V5K1wiLCBcIit0K1wiKVwifWZ1bmN0aW9uIFVyKCl7cmV0dXJuIF9yLmNoYXJDb2RlQXQoKyskcil9ZnVuY3Rpb24genIoKXtyZXR1cm4gJHI+PWdyfWZ1bmN0aW9uIFZyKGUpe3JldHVybiAzND09PWV8fDM5PT09ZX1mdW5jdGlvbiBLcihlKXt2YXIgdD0xO2Zvcih3cj0kcjshenIoKTspaWYoVnIoZT1VcigpKSlKcihlKTtlbHNlIGlmKDkxPT09ZSYmdCsrLDkzPT09ZSYmdC0tLDA9PT10KXtDcj0kcjticmVha319ZnVuY3Rpb24gSnIoZSl7Zm9yKHZhciB0PWU7IXpyKCkmJihlPVVyKCkpIT09dDspO312YXIgcXIsV3I9XCJfX3JcIixacj1cIl9fY1wiO2Z1bmN0aW9uIEdyKGUsdCxuKXt2YXIgcj1xcjtyZXR1cm4gZnVuY3Rpb24gaSgpe251bGwhPT10LmFwcGx5KG51bGwsYXJndW1lbnRzKSYmUXIoZSxpLG4scil9fXZhciBYcj1WZSYmIShYJiZOdW1iZXIoWFsxXSk8PTUzKTtmdW5jdGlvbiBZcihlLHQsbixyKXtpZihYcil7dmFyIGk9YW4sbz10O3Q9by5fd3JhcHBlcj1mdW5jdGlvbihlKXtpZihlLnRhcmdldD09PWUuY3VycmVudFRhcmdldHx8ZS50aW1lU3RhbXA+PWl8fGUudGltZVN0YW1wPD0wfHxlLnRhcmdldC5vd25lckRvY3VtZW50IT09ZG9jdW1lbnQpcmV0dXJuIG8uYXBwbHkodGhpcyxhcmd1bWVudHMpfX1xci5hZGRFdmVudExpc3RlbmVyKGUsdCxRP3tjYXB0dXJlOm4scGFzc2l2ZTpyfTpuKX1mdW5jdGlvbiBRcihlLHQsbixyKXsocnx8cXIpLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0Ll93cmFwcGVyfHx0LG4pfWZ1bmN0aW9uIGVpKGUscil7aWYoIXQoZS5kYXRhLm9uKXx8IXQoci5kYXRhLm9uKSl7dmFyIGk9ci5kYXRhLm9ufHx7fSxvPWUuZGF0YS5vbnx8e307cXI9ci5lbG0sZnVuY3Rpb24oZSl7aWYobihlW1dyXSkpe3ZhciB0PXE/XCJjaGFuZ2VcIjpcImlucHV0XCI7ZVt0XT1bXS5jb25jYXQoZVtXcl0sZVt0XXx8W10pLGRlbGV0ZSBlW1dyXX1uKGVbWnJdKSYmKGUuY2hhbmdlPVtdLmNvbmNhdChlW1pyXSxlLmNoYW5nZXx8W10pLGRlbGV0ZSBlW1pyXSl9KGkpLHJ0KGksbyxZcixRcixHcixyLmNvbnRleHQpLHFyPXZvaWQgMH19dmFyIHRpLG5pPXtjcmVhdGU6ZWksdXBkYXRlOmVpfTtmdW5jdGlvbiByaShlLHIpe2lmKCF0KGUuZGF0YS5kb21Qcm9wcyl8fCF0KHIuZGF0YS5kb21Qcm9wcykpe3ZhciBpLG8sYT1yLmVsbSxzPWUuZGF0YS5kb21Qcm9wc3x8e30sYz1yLmRhdGEuZG9tUHJvcHN8fHt9O2ZvcihpIGluIG4oYy5fX29iX18pJiYoYz1yLmRhdGEuZG9tUHJvcHM9QSh7fSxjKSkscylpIGluIGN8fChhW2ldPVwiXCIpO2ZvcihpIGluIGMpe2lmKG89Y1tpXSxcInRleHRDb250ZW50XCI9PT1pfHxcImlubmVySFRNTFwiPT09aSl7aWYoci5jaGlsZHJlbiYmKHIuY2hpbGRyZW4ubGVuZ3RoPTApLG89PT1zW2ldKWNvbnRpbnVlOzE9PT1hLmNoaWxkTm9kZXMubGVuZ3RoJiZhLnJlbW92ZUNoaWxkKGEuY2hpbGROb2Rlc1swXSl9aWYoXCJ2YWx1ZVwiPT09aSYmXCJQUk9HUkVTU1wiIT09YS50YWdOYW1lKXthLl92YWx1ZT1vO3ZhciB1PXQobyk/XCJcIjpTdHJpbmcobyk7aWkoYSx1KSYmKGEudmFsdWU9dSl9ZWxzZSBpZihcImlubmVySFRNTFwiPT09aSYmcW4oYS50YWdOYW1lKSYmdChhLmlubmVySFRNTCkpeyh0aT10aXx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuaW5uZXJIVE1MPVwiPHN2Zz5cIitvK1wiPC9zdmc+XCI7Zm9yKHZhciBsPXRpLmZpcnN0Q2hpbGQ7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCk7Zm9yKDtsLmZpcnN0Q2hpbGQ7KWEuYXBwZW5kQ2hpbGQobC5maXJzdENoaWxkKX1lbHNlIGlmKG8hPT1zW2ldKXRyeXthW2ldPW99Y2F0Y2goZSl7fX19fWZ1bmN0aW9uIGlpKGUsdCl7cmV0dXJuIWUuY29tcG9zaW5nJiYoXCJPUFRJT05cIj09PWUudGFnTmFtZXx8ZnVuY3Rpb24oZSx0KXt2YXIgbj0hMDt0cnl7bj1kb2N1bWVudC5hY3RpdmVFbGVtZW50IT09ZX1jYXRjaChlKXt9cmV0dXJuIG4mJmUudmFsdWUhPT10fShlLHQpfHxmdW5jdGlvbihlLHQpe3ZhciByPWUudmFsdWUsaT1lLl92TW9kaWZpZXJzO2lmKG4oaSkpe2lmKGkubnVtYmVyKXJldHVybiBmKHIpIT09Zih0KTtpZihpLnRyaW0pcmV0dXJuIHIudHJpbSgpIT09dC50cmltKCl9cmV0dXJuIHIhPT10fShlLHQpKX12YXIgb2k9e2NyZWF0ZTpyaSx1cGRhdGU6cml9LGFpPWcoZnVuY3Rpb24oZSl7dmFyIHQ9e30sbj0vOiguKykvO3JldHVybiBlLnNwbGl0KC87KD8hW14oXSpcXCkpL2cpLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHI9ZS5zcGxpdChuKTtyLmxlbmd0aD4xJiYodFtyWzBdLnRyaW0oKV09clsxXS50cmltKCkpfX0pLHR9KTtmdW5jdGlvbiBzaShlKXt2YXIgdD1jaShlLnN0eWxlKTtyZXR1cm4gZS5zdGF0aWNTdHlsZT9BKGUuc3RhdGljU3R5bGUsdCk6dH1mdW5jdGlvbiBjaShlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9PKGUpOlwic3RyaW5nXCI9PXR5cGVvZiBlP2FpKGUpOmV9dmFyIHVpLGxpPS9eLS0vLGZpPS9cXHMqIWltcG9ydGFudCQvLHBpPWZ1bmN0aW9uKGUsdCxuKXtpZihsaS50ZXN0KHQpKWUuc3R5bGUuc2V0UHJvcGVydHkodCxuKTtlbHNlIGlmKGZpLnRlc3QobikpZS5zdHlsZS5zZXRQcm9wZXJ0eShDKHQpLG4ucmVwbGFjZShmaSxcIlwiKSxcImltcG9ydGFudFwiKTtlbHNle3ZhciByPXZpKHQpO2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHZhciBpPTAsbz1uLmxlbmd0aDtpPG87aSsrKWUuc3R5bGVbcl09bltpXTtlbHNlIGUuc3R5bGVbcl09bn19LGRpPVtcIldlYmtpdFwiLFwiTW96XCIsXCJtc1wiXSx2aT1nKGZ1bmN0aW9uKGUpe2lmKHVpPXVpfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLnN0eWxlLFwiZmlsdGVyXCIhPT0oZT1iKGUpKSYmZSBpbiB1aSlyZXR1cm4gZTtmb3IodmFyIHQ9ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpLG49MDtuPGRpLmxlbmd0aDtuKyspe3ZhciByPWRpW25dK3Q7aWYociBpbiB1aSlyZXR1cm4gcn19KTtmdW5jdGlvbiBoaShlLHIpe3ZhciBpPXIuZGF0YSxvPWUuZGF0YTtpZighKHQoaS5zdGF0aWNTdHlsZSkmJnQoaS5zdHlsZSkmJnQoby5zdGF0aWNTdHlsZSkmJnQoby5zdHlsZSkpKXt2YXIgYSxzLGM9ci5lbG0sdT1vLnN0YXRpY1N0eWxlLGw9by5ub3JtYWxpemVkU3R5bGV8fG8uc3R5bGV8fHt9LGY9dXx8bCxwPWNpKHIuZGF0YS5zdHlsZSl8fHt9O3IuZGF0YS5ub3JtYWxpemVkU3R5bGU9bihwLl9fb2JfXyk/QSh7fSxwKTpwO3ZhciBkPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj17fTtpZih0KWZvcih2YXIgaT1lO2kuY29tcG9uZW50SW5zdGFuY2U7KShpPWkuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlKSYmaS5kYXRhJiYobj1zaShpLmRhdGEpKSYmQShyLG4pOyhuPXNpKGUuZGF0YSkpJiZBKHIsbik7Zm9yKHZhciBvPWU7bz1vLnBhcmVudDspby5kYXRhJiYobj1zaShvLmRhdGEpKSYmQShyLG4pO3JldHVybiByfShyLCEwKTtmb3IocyBpbiBmKXQoZFtzXSkmJnBpKGMscyxcIlwiKTtmb3IocyBpbiBkKShhPWRbc10pIT09ZltzXSYmcGkoYyxzLG51bGw9PWE/XCJcIjphKX19dmFyIG1pPXtjcmVhdGU6aGksdXBkYXRlOmhpfSx5aT0vXFxzKy87ZnVuY3Rpb24gZ2koZSx0KXtpZih0JiYodD10LnRyaW0oKSkpaWYoZS5jbGFzc0xpc3QpdC5pbmRleE9mKFwiIFwiKT4tMT90LnNwbGl0KHlpKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmNsYXNzTGlzdC5hZGQodCl9KTplLmNsYXNzTGlzdC5hZGQodCk7ZWxzZXt2YXIgbj1cIiBcIisoZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikrXCIgXCI7bi5pbmRleE9mKFwiIFwiK3QrXCIgXCIpPDAmJmUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwobit0KS50cmltKCkpfX1mdW5jdGlvbiBfaShlLHQpe2lmKHQmJih0PXQudHJpbSgpKSlpZihlLmNsYXNzTGlzdCl0LmluZGV4T2YoXCIgXCIpPi0xP3Quc3BsaXQoeWkpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuY2xhc3NMaXN0LnJlbW92ZSh0KX0pOmUuY2xhc3NMaXN0LnJlbW92ZSh0KSxlLmNsYXNzTGlzdC5sZW5ndGh8fGUucmVtb3ZlQXR0cmlidXRlKFwiY2xhc3NcIik7ZWxzZXtmb3IodmFyIG49XCIgXCIrKGUuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCIpK1wiIFwiLHI9XCIgXCIrdCtcIiBcIjtuLmluZGV4T2Yocik+PTA7KW49bi5yZXBsYWNlKHIsXCIgXCIpOyhuPW4udHJpbSgpKT9lLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsbik6ZS5yZW1vdmVBdHRyaWJ1dGUoXCJjbGFzc1wiKX19ZnVuY3Rpb24gYmkoZSl7aWYoZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGUpe3ZhciB0PXt9O3JldHVybiExIT09ZS5jc3MmJkEodCwkaShlLm5hbWV8fFwidlwiKSksQSh0LGUpLHR9cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/JGkoZSk6dm9pZCAwfX12YXIgJGk9ZyhmdW5jdGlvbihlKXtyZXR1cm57ZW50ZXJDbGFzczplK1wiLWVudGVyXCIsZW50ZXJUb0NsYXNzOmUrXCItZW50ZXItdG9cIixlbnRlckFjdGl2ZUNsYXNzOmUrXCItZW50ZXItYWN0aXZlXCIsbGVhdmVDbGFzczplK1wiLWxlYXZlXCIsbGVhdmVUb0NsYXNzOmUrXCItbGVhdmUtdG9cIixsZWF2ZUFjdGl2ZUNsYXNzOmUrXCItbGVhdmUtYWN0aXZlXCJ9fSksd2k9eiYmIVcsQ2k9XCJ0cmFuc2l0aW9uXCIseGk9XCJhbmltYXRpb25cIixraT1cInRyYW5zaXRpb25cIixBaT1cInRyYW5zaXRpb25lbmRcIixPaT1cImFuaW1hdGlvblwiLFNpPVwiYW5pbWF0aW9uZW5kXCI7d2kmJih2b2lkIDA9PT13aW5kb3cub250cmFuc2l0aW9uZW5kJiZ2b2lkIDAhPT13aW5kb3cub253ZWJraXR0cmFuc2l0aW9uZW5kJiYoa2k9XCJXZWJraXRUcmFuc2l0aW9uXCIsQWk9XCJ3ZWJraXRUcmFuc2l0aW9uRW5kXCIpLHZvaWQgMD09PXdpbmRvdy5vbmFuaW1hdGlvbmVuZCYmdm9pZCAwIT09d2luZG93Lm9ud2Via2l0YW5pbWF0aW9uZW5kJiYoT2k9XCJXZWJraXRBbmltYXRpb25cIixTaT1cIndlYmtpdEFuaW1hdGlvbkVuZFwiKSk7dmFyIFRpPXo/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpzZXRUaW1lb3V0OmZ1bmN0aW9uKGUpe3JldHVybiBlKCl9O2Z1bmN0aW9uIEVpKGUpe1RpKGZ1bmN0aW9uKCl7VGkoZSl9KX1mdW5jdGlvbiBOaShlLHQpe3ZhciBuPWUuX3RyYW5zaXRpb25DbGFzc2VzfHwoZS5fdHJhbnNpdGlvbkNsYXNzZXM9W10pO24uaW5kZXhPZih0KTwwJiYobi5wdXNoKHQpLGdpKGUsdCkpfWZ1bmN0aW9uIGppKGUsdCl7ZS5fdHJhbnNpdGlvbkNsYXNzZXMmJmgoZS5fdHJhbnNpdGlvbkNsYXNzZXMsdCksX2koZSx0KX1mdW5jdGlvbiBEaShlLHQsbil7dmFyIHI9TWkoZSx0KSxpPXIudHlwZSxvPXIudGltZW91dCxhPXIucHJvcENvdW50O2lmKCFpKXJldHVybiBuKCk7dmFyIHM9aT09PUNpP0FpOlNpLGM9MCx1PWZ1bmN0aW9uKCl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKHMsbCksbigpfSxsPWZ1bmN0aW9uKHQpe3QudGFyZ2V0PT09ZSYmKytjPj1hJiZ1KCl9O3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjPGEmJnUoKX0sbysxKSxlLmFkZEV2ZW50TGlzdGVuZXIocyxsKX12YXIgTGk9L1xcYih0cmFuc2Zvcm18YWxsKSgsfCQpLztmdW5jdGlvbiBNaShlLHQpe3ZhciBuLHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSksaT0ocltraStcIkRlbGF5XCJdfHxcIlwiKS5zcGxpdChcIiwgXCIpLG89KHJba2krXCJEdXJhdGlvblwiXXx8XCJcIikuc3BsaXQoXCIsIFwiKSxhPUlpKGksbykscz0ocltPaStcIkRlbGF5XCJdfHxcIlwiKS5zcGxpdChcIiwgXCIpLGM9KHJbT2krXCJEdXJhdGlvblwiXXx8XCJcIikuc3BsaXQoXCIsIFwiKSx1PUlpKHMsYyksbD0wLGY9MDtyZXR1cm4gdD09PUNpP2E+MCYmKG49Q2ksbD1hLGY9by5sZW5ndGgpOnQ9PT14aT91PjAmJihuPXhpLGw9dSxmPWMubGVuZ3RoKTpmPShuPShsPU1hdGgubWF4KGEsdSkpPjA/YT51P0NpOnhpOm51bGwpP249PT1DaT9vLmxlbmd0aDpjLmxlbmd0aDowLHt0eXBlOm4sdGltZW91dDpsLHByb3BDb3VudDpmLGhhc1RyYW5zZm9ybTpuPT09Q2kmJkxpLnRlc3QocltraStcIlByb3BlcnR5XCJdKX19ZnVuY3Rpb24gSWkoZSx0KXtmb3IoO2UubGVuZ3RoPHQubGVuZ3RoOyllPWUuY29uY2F0KGUpO3JldHVybiBNYXRoLm1heC5hcHBseShudWxsLHQubWFwKGZ1bmN0aW9uKHQsbil7cmV0dXJuIEZpKHQpK0ZpKGVbbl0pfSkpfWZ1bmN0aW9uIEZpKGUpe3JldHVybiAxZTMqTnVtYmVyKGUuc2xpY2UoMCwtMSkucmVwbGFjZShcIixcIixcIi5cIikpfWZ1bmN0aW9uIFBpKGUscil7dmFyIGk9ZS5lbG07bihpLl9sZWF2ZUNiKSYmKGkuX2xlYXZlQ2IuY2FuY2VsbGVkPSEwLGkuX2xlYXZlQ2IoKSk7dmFyIGE9YmkoZS5kYXRhLnRyYW5zaXRpb24pO2lmKCF0KGEpJiYhbihpLl9lbnRlckNiKSYmMT09PWkubm9kZVR5cGUpe2Zvcih2YXIgcz1hLmNzcyxjPWEudHlwZSx1PWEuZW50ZXJDbGFzcyxsPWEuZW50ZXJUb0NsYXNzLHA9YS5lbnRlckFjdGl2ZUNsYXNzLGQ9YS5hcHBlYXJDbGFzcyx2PWEuYXBwZWFyVG9DbGFzcyxoPWEuYXBwZWFyQWN0aXZlQ2xhc3MsbT1hLmJlZm9yZUVudGVyLHk9YS5lbnRlcixnPWEuYWZ0ZXJFbnRlcixfPWEuZW50ZXJDYW5jZWxsZWQsYj1hLmJlZm9yZUFwcGVhciwkPWEuYXBwZWFyLHc9YS5hZnRlckFwcGVhcixDPWEuYXBwZWFyQ2FuY2VsbGVkLHg9YS5kdXJhdGlvbixrPVd0LEE9V3QuJHZub2RlO0EmJkEucGFyZW50OylrPUEuY29udGV4dCxBPUEucGFyZW50O3ZhciBPPSFrLl9pc01vdW50ZWR8fCFlLmlzUm9vdEluc2VydDtpZighT3x8JHx8XCJcIj09PSQpe3ZhciBTPU8mJmQ/ZDp1LFQ9TyYmaD9oOnAsRT1PJiZ2P3Y6bCxOPU8mJmJ8fG0saj1PJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiAkPyQ6eSxMPU8mJnd8fGcsTT1PJiZDfHxfLEk9ZihvKHgpP3guZW50ZXI6eCksRj0hMSE9PXMmJiFXLFA9QmkoaiksUj1pLl9lbnRlckNiPUQoZnVuY3Rpb24oKXtGJiYoamkoaSxFKSxqaShpLFQpKSxSLmNhbmNlbGxlZD8oRiYmamkoaSxTKSxNJiZNKGkpKTpMJiZMKGkpLGkuX2VudGVyQ2I9bnVsbH0pO2UuZGF0YS5zaG93fHxpdChlLFwiaW5zZXJ0XCIsZnVuY3Rpb24oKXt2YXIgdD1pLnBhcmVudE5vZGUsbj10JiZ0Ll9wZW5kaW5nJiZ0Ll9wZW5kaW5nW2Uua2V5XTtuJiZuLnRhZz09PWUudGFnJiZuLmVsbS5fbGVhdmVDYiYmbi5lbG0uX2xlYXZlQ2IoKSxqJiZqKGksUil9KSxOJiZOKGkpLEYmJihOaShpLFMpLE5pKGksVCksRWkoZnVuY3Rpb24oKXtqaShpLFMpLFIuY2FuY2VsbGVkfHwoTmkoaSxFKSxQfHwoSGkoSSk/c2V0VGltZW91dChSLEkpOkRpKGksYyxSKSkpfSkpLGUuZGF0YS5zaG93JiYociYmcigpLGomJmooaSxSKSksRnx8UHx8UigpfX19ZnVuY3Rpb24gUmkoZSxyKXt2YXIgaT1lLmVsbTtuKGkuX2VudGVyQ2IpJiYoaS5fZW50ZXJDYi5jYW5jZWxsZWQ9ITAsaS5fZW50ZXJDYigpKTt2YXIgYT1iaShlLmRhdGEudHJhbnNpdGlvbik7aWYodChhKXx8MSE9PWkubm9kZVR5cGUpcmV0dXJuIHIoKTtpZighbihpLl9sZWF2ZUNiKSl7dmFyIHM9YS5jc3MsYz1hLnR5cGUsdT1hLmxlYXZlQ2xhc3MsbD1hLmxlYXZlVG9DbGFzcyxwPWEubGVhdmVBY3RpdmVDbGFzcyxkPWEuYmVmb3JlTGVhdmUsdj1hLmxlYXZlLGg9YS5hZnRlckxlYXZlLG09YS5sZWF2ZUNhbmNlbGxlZCx5PWEuZGVsYXlMZWF2ZSxnPWEuZHVyYXRpb24sXz0hMSE9PXMmJiFXLGI9QmkodiksJD1mKG8oZyk/Zy5sZWF2ZTpnKSx3PWkuX2xlYXZlQ2I9RChmdW5jdGlvbigpe2kucGFyZW50Tm9kZSYmaS5wYXJlbnROb2RlLl9wZW5kaW5nJiYoaS5wYXJlbnROb2RlLl9wZW5kaW5nW2Uua2V5XT1udWxsKSxfJiYoamkoaSxsKSxqaShpLHApKSx3LmNhbmNlbGxlZD8oXyYmamkoaSx1KSxtJiZtKGkpKToocigpLGgmJmgoaSkpLGkuX2xlYXZlQ2I9bnVsbH0pO3k/eShDKTpDKCl9ZnVuY3Rpb24gQygpe3cuY2FuY2VsbGVkfHwoIWUuZGF0YS5zaG93JiZpLnBhcmVudE5vZGUmJigoaS5wYXJlbnROb2RlLl9wZW5kaW5nfHwoaS5wYXJlbnROb2RlLl9wZW5kaW5nPXt9KSlbZS5rZXldPWUpLGQmJmQoaSksXyYmKE5pKGksdSksTmkoaSxwKSxFaShmdW5jdGlvbigpe2ppKGksdSksdy5jYW5jZWxsZWR8fChOaShpLGwpLGJ8fChIaSgkKT9zZXRUaW1lb3V0KHcsJCk6RGkoaSxjLHcpKSl9KSksdiYmdihpLHcpLF98fGJ8fHcoKSl9fWZ1bmN0aW9uIEhpKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiYhaXNOYU4oZSl9ZnVuY3Rpb24gQmkoZSl7aWYodChlKSlyZXR1cm4hMTt2YXIgcj1lLmZucztyZXR1cm4gbihyKT9CaShBcnJheS5pc0FycmF5KHIpP3JbMF06cik6KGUuX2xlbmd0aHx8ZS5sZW5ndGgpPjF9ZnVuY3Rpb24gVWkoZSx0KXshMCE9PXQuZGF0YS5zaG93JiZQaSh0KX12YXIgemk9ZnVuY3Rpb24oZSl7dmFyIG8sYSxzPXt9LGM9ZS5tb2R1bGVzLHU9ZS5ub2RlT3BzO2ZvcihvPTA7bzxyci5sZW5ndGg7KytvKWZvcihzW3JyW29dXT1bXSxhPTA7YTxjLmxlbmd0aDsrK2EpbihjW2FdW3JyW29dXSkmJnNbcnJbb11dLnB1c2goY1thXVtycltvXV0pO2Z1bmN0aW9uIGwoZSl7dmFyIHQ9dS5wYXJlbnROb2RlKGUpO24odCkmJnUucmVtb3ZlQ2hpbGQodCxlKX1mdW5jdGlvbiBmKGUsdCxpLG8sYSxjLGwpe2lmKG4oZS5lbG0pJiZuKGMpJiYoZT1jW2xdPW1lKGUpKSxlLmlzUm9vdEluc2VydD0hYSwhZnVuY3Rpb24oZSx0LGksbyl7dmFyIGE9ZS5kYXRhO2lmKG4oYSkpe3ZhciBjPW4oZS5jb21wb25lbnRJbnN0YW5jZSkmJmEua2VlcEFsaXZlO2lmKG4oYT1hLmhvb2spJiZuKGE9YS5pbml0KSYmYShlLCExKSxuKGUuY29tcG9uZW50SW5zdGFuY2UpKXJldHVybiBkKGUsdCksdihpLGUuZWxtLG8pLHIoYykmJmZ1bmN0aW9uKGUsdCxyLGkpe2Zvcih2YXIgbyxhPWU7YS5jb21wb25lbnRJbnN0YW5jZTspaWYoYT1hLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSxuKG89YS5kYXRhKSYmbihvPW8udHJhbnNpdGlvbikpe2ZvcihvPTA7bzxzLmFjdGl2YXRlLmxlbmd0aDsrK28pcy5hY3RpdmF0ZVtvXShucixhKTt0LnB1c2goYSk7YnJlYWt9dihyLGUuZWxtLGkpfShlLHQsaSxvKSwhMH19KGUsdCxpLG8pKXt2YXIgZj1lLmRhdGEscD1lLmNoaWxkcmVuLG09ZS50YWc7bihtKT8oZS5lbG09ZS5ucz91LmNyZWF0ZUVsZW1lbnROUyhlLm5zLG0pOnUuY3JlYXRlRWxlbWVudChtLGUpLGcoZSksaChlLHAsdCksbihmKSYmeShlLHQpLHYoaSxlLmVsbSxvKSk6cihlLmlzQ29tbWVudCk/KGUuZWxtPXUuY3JlYXRlQ29tbWVudChlLnRleHQpLHYoaSxlLmVsbSxvKSk6KGUuZWxtPXUuY3JlYXRlVGV4dE5vZGUoZS50ZXh0KSx2KGksZS5lbG0sbykpfX1mdW5jdGlvbiBkKGUsdCl7bihlLmRhdGEucGVuZGluZ0luc2VydCkmJih0LnB1c2guYXBwbHkodCxlLmRhdGEucGVuZGluZ0luc2VydCksZS5kYXRhLnBlbmRpbmdJbnNlcnQ9bnVsbCksZS5lbG09ZS5jb21wb25lbnRJbnN0YW5jZS4kZWwsbShlKT8oeShlLHQpLGcoZSkpOih0cihlKSx0LnB1c2goZSkpfWZ1bmN0aW9uIHYoZSx0LHIpe24oZSkmJihuKHIpP3UucGFyZW50Tm9kZShyKT09PWUmJnUuaW5zZXJ0QmVmb3JlKGUsdCxyKTp1LmFwcGVuZENoaWxkKGUsdCkpfWZ1bmN0aW9uIGgoZSx0LG4pe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpZih0W3JdLG4sZS5lbG0sbnVsbCwhMCx0LHIpO2Vsc2UgaShlLnRleHQpJiZ1LmFwcGVuZENoaWxkKGUuZWxtLHUuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKGUudGV4dCkpKX1mdW5jdGlvbiBtKGUpe2Zvcig7ZS5jb21wb25lbnRJbnN0YW5jZTspZT1lLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtyZXR1cm4gbihlLnRhZyl9ZnVuY3Rpb24geShlLHQpe2Zvcih2YXIgcj0wO3I8cy5jcmVhdGUubGVuZ3RoOysrcilzLmNyZWF0ZVtyXShucixlKTtuKG89ZS5kYXRhLmhvb2spJiYobihvLmNyZWF0ZSkmJm8uY3JlYXRlKG5yLGUpLG4oby5pbnNlcnQpJiZ0LnB1c2goZSkpfWZ1bmN0aW9uIGcoZSl7dmFyIHQ7aWYobih0PWUuZm5TY29wZUlkKSl1LnNldFN0eWxlU2NvcGUoZS5lbG0sdCk7ZWxzZSBmb3IodmFyIHI9ZTtyOyluKHQ9ci5jb250ZXh0KSYmbih0PXQuJG9wdGlvbnMuX3Njb3BlSWQpJiZ1LnNldFN0eWxlU2NvcGUoZS5lbG0sdCkscj1yLnBhcmVudDtuKHQ9V3QpJiZ0IT09ZS5jb250ZXh0JiZ0IT09ZS5mbkNvbnRleHQmJm4odD10LiRvcHRpb25zLl9zY29wZUlkKSYmdS5zZXRTdHlsZVNjb3BlKGUuZWxtLHQpfWZ1bmN0aW9uIF8oZSx0LG4scixpLG8pe2Zvcig7cjw9aTsrK3IpZihuW3JdLG8sZSx0LCExLG4scil9ZnVuY3Rpb24gYihlKXt2YXIgdCxyLGk9ZS5kYXRhO2lmKG4oaSkpZm9yKG4odD1pLmhvb2spJiZuKHQ9dC5kZXN0cm95KSYmdChlKSx0PTA7dDxzLmRlc3Ryb3kubGVuZ3RoOysrdClzLmRlc3Ryb3lbdF0oZSk7aWYobih0PWUuY2hpbGRyZW4pKWZvcihyPTA7cjxlLmNoaWxkcmVuLmxlbmd0aDsrK3IpYihlLmNoaWxkcmVuW3JdKX1mdW5jdGlvbiAkKGUsdCxyKXtmb3IoO3Q8PXI7Kyt0KXt2YXIgaT1lW3RdO24oaSkmJihuKGkudGFnKT8odyhpKSxiKGkpKTpsKGkuZWxtKSl9fWZ1bmN0aW9uIHcoZSx0KXtpZihuKHQpfHxuKGUuZGF0YSkpe3ZhciByLGk9cy5yZW1vdmUubGVuZ3RoKzE7Zm9yKG4odCk/dC5saXN0ZW5lcnMrPWk6dD1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oKXswPT0tLW4ubGlzdGVuZXJzJiZsKGUpfXJldHVybiBuLmxpc3RlbmVycz10LG59KGUuZWxtLGkpLG4ocj1lLmNvbXBvbmVudEluc3RhbmNlKSYmbihyPXIuX3Zub2RlKSYmbihyLmRhdGEpJiZ3KHIsdCkscj0wO3I8cy5yZW1vdmUubGVuZ3RoOysrcilzLnJlbW92ZVtyXShlLHQpO24ocj1lLmRhdGEuaG9vaykmJm4ocj1yLnJlbW92ZSk/cihlLHQpOnQoKX1lbHNlIGwoZS5lbG0pfWZ1bmN0aW9uIEMoZSx0LHIsaSl7Zm9yKHZhciBvPXI7bzxpO28rKyl7dmFyIGE9dFtvXTtpZihuKGEpJiZpcihlLGEpKXJldHVybiBvfX1mdW5jdGlvbiB4KGUsaSxvLGEsYyxsKXtpZihlIT09aSl7bihpLmVsbSkmJm4oYSkmJihpPWFbY109bWUoaSkpO3ZhciBwPWkuZWxtPWUuZWxtO2lmKHIoZS5pc0FzeW5jUGxhY2Vob2xkZXIpKW4oaS5hc3luY0ZhY3RvcnkucmVzb2x2ZWQpP08oZS5lbG0saSxvKTppLmlzQXN5bmNQbGFjZWhvbGRlcj0hMDtlbHNlIGlmKHIoaS5pc1N0YXRpYykmJnIoZS5pc1N0YXRpYykmJmkua2V5PT09ZS5rZXkmJihyKGkuaXNDbG9uZWQpfHxyKGkuaXNPbmNlKSkpaS5jb21wb25lbnRJbnN0YW5jZT1lLmNvbXBvbmVudEluc3RhbmNlO2Vsc2V7dmFyIGQsdj1pLmRhdGE7bih2KSYmbihkPXYuaG9vaykmJm4oZD1kLnByZXBhdGNoKSYmZChlLGkpO3ZhciBoPWUuY2hpbGRyZW4seT1pLmNoaWxkcmVuO2lmKG4odikmJm0oaSkpe2ZvcihkPTA7ZDxzLnVwZGF0ZS5sZW5ndGg7KytkKXMudXBkYXRlW2RdKGUsaSk7bihkPXYuaG9vaykmJm4oZD1kLnVwZGF0ZSkmJmQoZSxpKX10KGkudGV4dCk/bihoKSYmbih5KT9oIT09eSYmZnVuY3Rpb24oZSxyLGksbyxhKXtmb3IodmFyIHMsYyxsLHA9MCxkPTAsdj1yLmxlbmd0aC0xLGg9clswXSxtPXJbdl0seT1pLmxlbmd0aC0xLGc9aVswXSxiPWlbeV0sdz0hYTtwPD12JiZkPD15Oyl0KGgpP2g9clsrK3BdOnQobSk/bT1yWy0tdl06aXIoaCxnKT8oeChoLGcsbyxpLGQpLGg9clsrK3BdLGc9aVsrK2RdKTppcihtLGIpPyh4KG0sYixvLGkseSksbT1yWy0tdl0sYj1pWy0teV0pOmlyKGgsYik/KHgoaCxiLG8saSx5KSx3JiZ1Lmluc2VydEJlZm9yZShlLGguZWxtLHUubmV4dFNpYmxpbmcobS5lbG0pKSxoPXJbKytwXSxiPWlbLS15XSk6aXIobSxnKT8oeChtLGcsbyxpLGQpLHcmJnUuaW5zZXJ0QmVmb3JlKGUsbS5lbG0saC5lbG0pLG09clstLXZdLGc9aVsrK2RdKToodChzKSYmKHM9b3IocixwLHYpKSx0KGM9bihnLmtleSk/c1tnLmtleV06QyhnLHIscCx2KSk/ZihnLG8sZSxoLmVsbSwhMSxpLGQpOmlyKGw9cltjXSxnKT8oeChsLGcsbyxpLGQpLHJbY109dm9pZCAwLHcmJnUuaW5zZXJ0QmVmb3JlKGUsbC5lbG0saC5lbG0pKTpmKGcsbyxlLGguZWxtLCExLGksZCksZz1pWysrZF0pO3A+dj9fKGUsdChpW3krMV0pP251bGw6aVt5KzFdLmVsbSxpLGQseSxvKTpkPnkmJiQocixwLHYpfShwLGgseSxvLGwpOm4oeSk/KG4oZS50ZXh0KSYmdS5zZXRUZXh0Q29udGVudChwLFwiXCIpLF8ocCxudWxsLHksMCx5Lmxlbmd0aC0xLG8pKTpuKGgpPyQoaCwwLGgubGVuZ3RoLTEpOm4oZS50ZXh0KSYmdS5zZXRUZXh0Q29udGVudChwLFwiXCIpOmUudGV4dCE9PWkudGV4dCYmdS5zZXRUZXh0Q29udGVudChwLGkudGV4dCksbih2KSYmbihkPXYuaG9vaykmJm4oZD1kLnBvc3RwYXRjaCkmJmQoZSxpKX19fWZ1bmN0aW9uIGsoZSx0LGkpe2lmKHIoaSkmJm4oZS5wYXJlbnQpKWUucGFyZW50LmRhdGEucGVuZGluZ0luc2VydD10O2Vsc2UgZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDsrK28pdFtvXS5kYXRhLmhvb2suaW5zZXJ0KHRbb10pfXZhciBBPXAoXCJhdHRycyxjbGFzcyxzdGF0aWNDbGFzcyxzdGF0aWNTdHlsZSxrZXlcIik7ZnVuY3Rpb24gTyhlLHQsaSxvKXt2YXIgYSxzPXQudGFnLGM9dC5kYXRhLHU9dC5jaGlsZHJlbjtpZihvPW98fGMmJmMucHJlLHQuZWxtPWUscih0LmlzQ29tbWVudCkmJm4odC5hc3luY0ZhY3RvcnkpKXJldHVybiB0LmlzQXN5bmNQbGFjZWhvbGRlcj0hMCwhMDtpZihuKGMpJiYobihhPWMuaG9vaykmJm4oYT1hLmluaXQpJiZhKHQsITApLG4oYT10LmNvbXBvbmVudEluc3RhbmNlKSkpcmV0dXJuIGQodCxpKSwhMDtpZihuKHMpKXtpZihuKHUpKWlmKGUuaGFzQ2hpbGROb2RlcygpKWlmKG4oYT1jKSYmbihhPWEuZG9tUHJvcHMpJiZuKGE9YS5pbm5lckhUTUwpKXtpZihhIT09ZS5pbm5lckhUTUwpcmV0dXJuITF9ZWxzZXtmb3IodmFyIGw9ITAsZj1lLmZpcnN0Q2hpbGQscD0wO3A8dS5sZW5ndGg7cCsrKXtpZighZnx8IU8oZix1W3BdLGksbykpe2w9ITE7YnJlYWt9Zj1mLm5leHRTaWJsaW5nfWlmKCFsfHxmKXJldHVybiExfWVsc2UgaCh0LHUsaSk7aWYobihjKSl7dmFyIHY9ITE7Zm9yKHZhciBtIGluIGMpaWYoIUEobSkpe3Y9ITAseSh0LGkpO2JyZWFrfSF2JiZjLmNsYXNzJiZldChjLmNsYXNzKX19ZWxzZSBlLmRhdGEhPT10LnRleHQmJihlLmRhdGE9dC50ZXh0KTtyZXR1cm4hMH1yZXR1cm4gZnVuY3Rpb24oZSxpLG8sYSl7aWYoIXQoaSkpe3ZhciBjLGw9ITEscD1bXTtpZih0KGUpKWw9ITAsZihpLHApO2Vsc2V7dmFyIGQ9bihlLm5vZGVUeXBlKTtpZighZCYmaXIoZSxpKSl4KGUsaSxwLG51bGwsbnVsbCxhKTtlbHNle2lmKGQpe2lmKDE9PT1lLm5vZGVUeXBlJiZlLmhhc0F0dHJpYnV0ZShMKSYmKGUucmVtb3ZlQXR0cmlidXRlKEwpLG89ITApLHIobykmJk8oZSxpLHApKXJldHVybiBrKGkscCwhMCksZTtjPWUsZT1uZXcgcGUodS50YWdOYW1lKGMpLnRvTG93ZXJDYXNlKCkse30sW10sdm9pZCAwLGMpfXZhciB2PWUuZWxtLGg9dS5wYXJlbnROb2RlKHYpO2lmKGYoaSxwLHYuX2xlYXZlQ2I/bnVsbDpoLHUubmV4dFNpYmxpbmcodikpLG4oaS5wYXJlbnQpKWZvcih2YXIgeT1pLnBhcmVudCxnPW0oaSk7eTspe2Zvcih2YXIgXz0wO188cy5kZXN0cm95Lmxlbmd0aDsrK18pcy5kZXN0cm95W19dKHkpO2lmKHkuZWxtPWkuZWxtLGcpe2Zvcih2YXIgdz0wO3c8cy5jcmVhdGUubGVuZ3RoOysrdylzLmNyZWF0ZVt3XShucix5KTt2YXIgQz15LmRhdGEuaG9vay5pbnNlcnQ7aWYoQy5tZXJnZWQpZm9yKHZhciBBPTE7QTxDLmZucy5sZW5ndGg7QSsrKUMuZm5zW0FdKCl9ZWxzZSB0cih5KTt5PXkucGFyZW50fW4oaCk/JChbZV0sMCwwKTpuKGUudGFnKSYmYihlKX19cmV0dXJuIGsoaSxwLGwpLGkuZWxtfW4oZSkmJmIoZSl9fSh7bm9kZU9wczpRbixtb2R1bGVzOlttcix4cixuaSxvaSxtaSx6P3tjcmVhdGU6VWksYWN0aXZhdGU6VWkscmVtb3ZlOmZ1bmN0aW9uKGUsdCl7ITAhPT1lLmRhdGEuc2hvdz9SaShlLHQpOnQoKX19Ont9XS5jb25jYXQocHIpfSk7VyYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdGlvbmNoYW5nZVwiLGZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtlJiZlLnZtb2RlbCYmWGkoZSxcImlucHV0XCIpfSk7dmFyIFZpPXtpbnNlcnRlZDpmdW5jdGlvbihlLHQsbixyKXtcInNlbGVjdFwiPT09bi50YWc/KHIuZWxtJiYhci5lbG0uX3ZPcHRpb25zP2l0KG4sXCJwb3N0cGF0Y2hcIixmdW5jdGlvbigpe1ZpLmNvbXBvbmVudFVwZGF0ZWQoZSx0LG4pfSk6S2koZSx0LG4uY29udGV4dCksZS5fdk9wdGlvbnM9W10ubWFwLmNhbGwoZS5vcHRpb25zLFdpKSk6KFwidGV4dGFyZWFcIj09PW4udGFnfHxYbihlLnR5cGUpKSYmKGUuX3ZNb2RpZmllcnM9dC5tb2RpZmllcnMsdC5tb2RpZmllcnMubGF6eXx8KGUuYWRkRXZlbnRMaXN0ZW5lcihcImNvbXBvc2l0aW9uc3RhcnRcIixaaSksZS5hZGRFdmVudExpc3RlbmVyKFwiY29tcG9zaXRpb25lbmRcIixHaSksZS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsR2kpLFcmJihlLnZtb2RlbD0hMCkpKX0sY29tcG9uZW50VXBkYXRlZDpmdW5jdGlvbihlLHQsbil7aWYoXCJzZWxlY3RcIj09PW4udGFnKXtLaShlLHQsbi5jb250ZXh0KTt2YXIgcj1lLl92T3B0aW9ucyxpPWUuX3ZPcHRpb25zPVtdLm1hcC5jYWxsKGUub3B0aW9ucyxXaSk7aWYoaS5zb21lKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIU4oZSxyW3RdKX0pKShlLm11bHRpcGxlP3QudmFsdWUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gcWkoZSxpKX0pOnQudmFsdWUhPT10Lm9sZFZhbHVlJiZxaSh0LnZhbHVlLGkpKSYmWGkoZSxcImNoYW5nZVwiKX19fTtmdW5jdGlvbiBLaShlLHQsbil7SmkoZSx0LG4pLChxfHxaKSYmc2V0VGltZW91dChmdW5jdGlvbigpe0ppKGUsdCxuKX0sMCl9ZnVuY3Rpb24gSmkoZSx0LG4pe3ZhciByPXQudmFsdWUsaT1lLm11bHRpcGxlO2lmKCFpfHxBcnJheS5pc0FycmF5KHIpKXtmb3IodmFyIG8sYSxzPTAsYz1lLm9wdGlvbnMubGVuZ3RoO3M8YztzKyspaWYoYT1lLm9wdGlvbnNbc10saSlvPWoocixXaShhKSk+LTEsYS5zZWxlY3RlZCE9PW8mJihhLnNlbGVjdGVkPW8pO2Vsc2UgaWYoTihXaShhKSxyKSlyZXR1cm4gdm9pZChlLnNlbGVjdGVkSW5kZXghPT1zJiYoZS5zZWxlY3RlZEluZGV4PXMpKTtpfHwoZS5zZWxlY3RlZEluZGV4PS0xKX19ZnVuY3Rpb24gcWkoZSx0KXtyZXR1cm4gdC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4hTih0LGUpfSl9ZnVuY3Rpb24gV2koZSl7cmV0dXJuXCJfdmFsdWVcImluIGU/ZS5fdmFsdWU6ZS52YWx1ZX1mdW5jdGlvbiBaaShlKXtlLnRhcmdldC5jb21wb3Npbmc9ITB9ZnVuY3Rpb24gR2koZSl7ZS50YXJnZXQuY29tcG9zaW5nJiYoZS50YXJnZXQuY29tcG9zaW5nPSExLFhpKGUudGFyZ2V0LFwiaW5wdXRcIikpfWZ1bmN0aW9uIFhpKGUsdCl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJIVE1MRXZlbnRzXCIpO24uaW5pdEV2ZW50KHQsITAsITApLGUuZGlzcGF0Y2hFdmVudChuKX1mdW5jdGlvbiBZaShlKXtyZXR1cm4hZS5jb21wb25lbnRJbnN0YW5jZXx8ZS5kYXRhJiZlLmRhdGEudHJhbnNpdGlvbj9lOllpKGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlKX12YXIgUWk9e21vZGVsOlZpLHNob3c6e2JpbmQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQudmFsdWUsaT0obj1ZaShuKSkuZGF0YSYmbi5kYXRhLnRyYW5zaXRpb24sbz1lLl9fdk9yaWdpbmFsRGlzcGxheT1cIm5vbmVcIj09PWUuc3R5bGUuZGlzcGxheT9cIlwiOmUuc3R5bGUuZGlzcGxheTtyJiZpPyhuLmRhdGEuc2hvdz0hMCxQaShuLGZ1bmN0aW9uKCl7ZS5zdHlsZS5kaXNwbGF5PW99KSk6ZS5zdHlsZS5kaXNwbGF5PXI/bzpcIm5vbmVcIn0sdXBkYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LnZhbHVlOyFyIT0hdC5vbGRWYWx1ZSYmKChuPVlpKG4pKS5kYXRhJiZuLmRhdGEudHJhbnNpdGlvbj8obi5kYXRhLnNob3c9ITAscj9QaShuLGZ1bmN0aW9uKCl7ZS5zdHlsZS5kaXNwbGF5PWUuX192T3JpZ2luYWxEaXNwbGF5fSk6UmkobixmdW5jdGlvbigpe2Uuc3R5bGUuZGlzcGxheT1cIm5vbmVcIn0pKTplLnN0eWxlLmRpc3BsYXk9cj9lLl9fdk9yaWdpbmFsRGlzcGxheTpcIm5vbmVcIil9LHVuYmluZDpmdW5jdGlvbihlLHQsbixyLGkpe2l8fChlLnN0eWxlLmRpc3BsYXk9ZS5fX3ZPcmlnaW5hbERpc3BsYXkpfX19LGVvPXtuYW1lOlN0cmluZyxhcHBlYXI6Qm9vbGVhbixjc3M6Qm9vbGVhbixtb2RlOlN0cmluZyx0eXBlOlN0cmluZyxlbnRlckNsYXNzOlN0cmluZyxsZWF2ZUNsYXNzOlN0cmluZyxlbnRlclRvQ2xhc3M6U3RyaW5nLGxlYXZlVG9DbGFzczpTdHJpbmcsZW50ZXJBY3RpdmVDbGFzczpTdHJpbmcsbGVhdmVBY3RpdmVDbGFzczpTdHJpbmcsYXBwZWFyQ2xhc3M6U3RyaW5nLGFwcGVhckFjdGl2ZUNsYXNzOlN0cmluZyxhcHBlYXJUb0NsYXNzOlN0cmluZyxkdXJhdGlvbjpbTnVtYmVyLFN0cmluZyxPYmplY3RdfTtmdW5jdGlvbiB0byhlKXt2YXIgdD1lJiZlLmNvbXBvbmVudE9wdGlvbnM7cmV0dXJuIHQmJnQuQ3Rvci5vcHRpb25zLmFic3RyYWN0P3RvKHp0KHQuY2hpbGRyZW4pKTplfWZ1bmN0aW9uIG5vKGUpe3ZhciB0PXt9LG49ZS4kb3B0aW9ucztmb3IodmFyIHIgaW4gbi5wcm9wc0RhdGEpdFtyXT1lW3JdO3ZhciBpPW4uX3BhcmVudExpc3RlbmVycztmb3IodmFyIG8gaW4gaSl0W2IobyldPWlbb107cmV0dXJuIHR9ZnVuY3Rpb24gcm8oZSx0KXtpZigvXFxkLWtlZXAtYWxpdmUkLy50ZXN0KHQudGFnKSlyZXR1cm4gZShcImtlZXAtYWxpdmVcIix7cHJvcHM6dC5jb21wb25lbnRPcHRpb25zLnByb3BzRGF0YX0pfXZhciBpbz1mdW5jdGlvbihlKXtyZXR1cm4gZS50YWd8fFV0KGUpfSxvbz1mdW5jdGlvbihlKXtyZXR1cm5cInNob3dcIj09PWUubmFtZX0sYW89e25hbWU6XCJ0cmFuc2l0aW9uXCIscHJvcHM6ZW8sYWJzdHJhY3Q6ITAscmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLiRzbG90cy5kZWZhdWx0O2lmKG4mJihuPW4uZmlsdGVyKGlvKSkubGVuZ3RoKXt2YXIgcj10aGlzLm1vZGUsbz1uWzBdO2lmKGZ1bmN0aW9uKGUpe2Zvcig7ZT1lLnBhcmVudDspaWYoZS5kYXRhLnRyYW5zaXRpb24pcmV0dXJuITB9KHRoaXMuJHZub2RlKSlyZXR1cm4gbzt2YXIgYT10byhvKTtpZighYSlyZXR1cm4gbztpZih0aGlzLl9sZWF2aW5nKXJldHVybiBybyhlLG8pO3ZhciBzPVwiX190cmFuc2l0aW9uLVwiK3RoaXMuX3VpZCtcIi1cIjthLmtleT1udWxsPT1hLmtleT9hLmlzQ29tbWVudD9zK1wiY29tbWVudFwiOnMrYS50YWc6aShhLmtleSk/MD09PVN0cmluZyhhLmtleSkuaW5kZXhPZihzKT9hLmtleTpzK2Eua2V5OmEua2V5O3ZhciBjPShhLmRhdGF8fChhLmRhdGE9e30pKS50cmFuc2l0aW9uPW5vKHRoaXMpLHU9dGhpcy5fdm5vZGUsbD10byh1KTtpZihhLmRhdGEuZGlyZWN0aXZlcyYmYS5kYXRhLmRpcmVjdGl2ZXMuc29tZShvbykmJihhLmRhdGEuc2hvdz0hMCksbCYmbC5kYXRhJiYhZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5rZXk9PT1lLmtleSYmdC50YWc9PT1lLnRhZ30oYSxsKSYmIVV0KGwpJiYoIWwuY29tcG9uZW50SW5zdGFuY2V8fCFsLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZS5pc0NvbW1lbnQpKXt2YXIgZj1sLmRhdGEudHJhbnNpdGlvbj1BKHt9LGMpO2lmKFwib3V0LWluXCI9PT1yKXJldHVybiB0aGlzLl9sZWF2aW5nPSEwLGl0KGYsXCJhZnRlckxlYXZlXCIsZnVuY3Rpb24oKXt0Ll9sZWF2aW5nPSExLHQuJGZvcmNlVXBkYXRlKCl9KSxybyhlLG8pO2lmKFwiaW4tb3V0XCI9PT1yKXtpZihVdChhKSlyZXR1cm4gdTt2YXIgcCxkPWZ1bmN0aW9uKCl7cCgpfTtpdChjLFwiYWZ0ZXJFbnRlclwiLGQpLGl0KGMsXCJlbnRlckNhbmNlbGxlZFwiLGQpLGl0KGYsXCJkZWxheUxlYXZlXCIsZnVuY3Rpb24oZSl7cD1lfSl9fXJldHVybiBvfX19LHNvPUEoe3RhZzpTdHJpbmcsbW92ZUNsYXNzOlN0cmluZ30sZW8pO2Z1bmN0aW9uIGNvKGUpe2UuZWxtLl9tb3ZlQ2ImJmUuZWxtLl9tb3ZlQ2IoKSxlLmVsbS5fZW50ZXJDYiYmZS5lbG0uX2VudGVyQ2IoKX1mdW5jdGlvbiB1byhlKXtlLmRhdGEubmV3UG9zPWUuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWZ1bmN0aW9uIGxvKGUpe3ZhciB0PWUuZGF0YS5wb3Msbj1lLmRhdGEubmV3UG9zLHI9dC5sZWZ0LW4ubGVmdCxpPXQudG9wLW4udG9wO2lmKHJ8fGkpe2UuZGF0YS5tb3ZlZD0hMDt2YXIgbz1lLmVsbS5zdHlsZTtvLnRyYW5zZm9ybT1vLldlYmtpdFRyYW5zZm9ybT1cInRyYW5zbGF0ZShcIityK1wicHgsXCIraStcInB4KVwiLG8udHJhbnNpdGlvbkR1cmF0aW9uPVwiMHNcIn19ZGVsZXRlIHNvLm1vZGU7dmFyIGZvPXtUcmFuc2l0aW9uOmFvLFRyYW5zaXRpb25Hcm91cDp7cHJvcHM6c28sYmVmb3JlTW91bnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5fdXBkYXRlO3RoaXMuX3VwZGF0ZT1mdW5jdGlvbihuLHIpe3ZhciBpPVp0KGUpO2UuX19wYXRjaF9fKGUuX3Zub2RlLGUua2VwdCwhMSwhMCksZS5fdm5vZGU9ZS5rZXB0LGkoKSx0LmNhbGwoZSxuLHIpfX0scmVuZGVyOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRhZ3x8dGhpcy4kdm5vZGUuZGF0YS50YWd8fFwic3BhblwiLG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPXRoaXMucHJldkNoaWxkcmVuPXRoaXMuY2hpbGRyZW4saT10aGlzLiRzbG90cy5kZWZhdWx0fHxbXSxvPXRoaXMuY2hpbGRyZW49W10sYT1ubyh0aGlzKSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBjPWlbc107Yy50YWcmJm51bGwhPWMua2V5JiYwIT09U3RyaW5nKGMua2V5KS5pbmRleE9mKFwiX192bGlzdFwiKSYmKG8ucHVzaChjKSxuW2Mua2V5XT1jLChjLmRhdGF8fChjLmRhdGE9e30pKS50cmFuc2l0aW9uPWEpfWlmKHIpe2Zvcih2YXIgdT1bXSxsPVtdLGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIHA9cltmXTtwLmRhdGEudHJhbnNpdGlvbj1hLHAuZGF0YS5wb3M9cC5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbltwLmtleV0/dS5wdXNoKHApOmwucHVzaChwKX10aGlzLmtlcHQ9ZSh0LG51bGwsdSksdGhpcy5yZW1vdmVkPWx9cmV0dXJuIGUodCxudWxsLG8pfSx1cGRhdGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcmV2Q2hpbGRyZW4sdD10aGlzLm1vdmVDbGFzc3x8KHRoaXMubmFtZXx8XCJ2XCIpK1wiLW1vdmVcIjtlLmxlbmd0aCYmdGhpcy5oYXNNb3ZlKGVbMF0uZWxtLHQpJiYoZS5mb3JFYWNoKGNvKSxlLmZvckVhY2godW8pLGUuZm9yRWFjaChsbyksdGhpcy5fcmVmbG93PWRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0LGUuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLmRhdGEubW92ZWQpe3ZhciBuPWUuZWxtLHI9bi5zdHlsZTtOaShuLHQpLHIudHJhbnNmb3JtPXIuV2Via2l0VHJhbnNmb3JtPXIudHJhbnNpdGlvbkR1cmF0aW9uPVwiXCIsbi5hZGRFdmVudExpc3RlbmVyKEFpLG4uX21vdmVDYj1mdW5jdGlvbiBlKHIpe3ImJnIudGFyZ2V0IT09bnx8ciYmIS90cmFuc2Zvcm0kLy50ZXN0KHIucHJvcGVydHlOYW1lKXx8KG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihBaSxlKSxuLl9tb3ZlQ2I9bnVsbCxqaShuLHQpKX0pfX0pKX0sbWV0aG9kczp7aGFzTW92ZTpmdW5jdGlvbihlLHQpe2lmKCF3aSlyZXR1cm4hMTtpZih0aGlzLl9oYXNNb3ZlKXJldHVybiB0aGlzLl9oYXNNb3ZlO3ZhciBuPWUuY2xvbmVOb2RlKCk7ZS5fdHJhbnNpdGlvbkNsYXNzZXMmJmUuX3RyYW5zaXRpb25DbGFzc2VzLmZvckVhY2goZnVuY3Rpb24oZSl7X2kobixlKX0pLGdpKG4sdCksbi5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLHRoaXMuJGVsLmFwcGVuZENoaWxkKG4pO3ZhciByPU1pKG4pO3JldHVybiB0aGlzLiRlbC5yZW1vdmVDaGlsZChuKSx0aGlzLl9oYXNNb3ZlPXIuaGFzVHJhbnNmb3JtfX19fTt3bi5jb25maWcubXVzdFVzZVByb3A9am4sd24uY29uZmlnLmlzUmVzZXJ2ZWRUYWc9V24sd24uY29uZmlnLmlzUmVzZXJ2ZWRBdHRyPUVuLHduLmNvbmZpZy5nZXRUYWdOYW1lc3BhY2U9Wm4sd24uY29uZmlnLmlzVW5rbm93bkVsZW1lbnQ9ZnVuY3Rpb24oZSl7aWYoIXopcmV0dXJuITA7aWYoV24oZSkpcmV0dXJuITE7aWYoZT1lLnRvTG93ZXJDYXNlKCksbnVsbCE9R25bZV0pcmV0dXJuIEduW2VdO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuIGUuaW5kZXhPZihcIi1cIik+LTE/R25bZV09dC5jb25zdHJ1Y3Rvcj09PXdpbmRvdy5IVE1MVW5rbm93bkVsZW1lbnR8fHQuY29uc3RydWN0b3I9PT13aW5kb3cuSFRNTEVsZW1lbnQ6R25bZV09L0hUTUxVbmtub3duRWxlbWVudC8udGVzdCh0LnRvU3RyaW5nKCkpfSxBKHduLm9wdGlvbnMuZGlyZWN0aXZlcyxRaSksQSh3bi5vcHRpb25zLmNvbXBvbmVudHMsZm8pLHduLnByb3RvdHlwZS5fX3BhdGNoX189ej96aTpTLHduLnByb3RvdHlwZS4kbW91bnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiBlLiRlbD10LGUuJG9wdGlvbnMucmVuZGVyfHwoZS4kb3B0aW9ucy5yZW5kZXI9dmUpLFl0KGUsXCJiZWZvcmVNb3VudFwiKSxyPWZ1bmN0aW9uKCl7ZS5fdXBkYXRlKGUuX3JlbmRlcigpLG4pfSxuZXcgZm4oZSxyLFMse2JlZm9yZTpmdW5jdGlvbigpe2UuX2lzTW91bnRlZCYmIWUuX2lzRGVzdHJveWVkJiZZdChlLFwiYmVmb3JlVXBkYXRlXCIpfX0sITApLG49ITEsbnVsbD09ZS4kdm5vZGUmJihlLl9pc01vdW50ZWQ9ITAsWXQoZSxcIm1vdW50ZWRcIikpLGV9KHRoaXMsZT1lJiZ6P1luKGUpOnZvaWQgMCx0KX0seiYmc2V0VGltZW91dChmdW5jdGlvbigpe0YuZGV2dG9vbHMmJm5lJiZuZS5lbWl0KFwiaW5pdFwiLHduKX0sMCk7dmFyIHBvPS9cXHtcXHsoKD86LnxcXHI/XFxuKSs/KVxcfVxcfS9nLHZvPS9bLS4qKz9eJHt9KCl8W1xcXVxcL1xcXFxdL2csaG89ZyhmdW5jdGlvbihlKXt2YXIgdD1lWzBdLnJlcGxhY2Uodm8sXCJcXFxcJCZcIiksbj1lWzFdLnJlcGxhY2Uodm8sXCJcXFxcJCZcIik7cmV0dXJuIG5ldyBSZWdFeHAodCtcIigoPzoufFxcXFxuKSs/KVwiK24sXCJnXCIpfSk7dmFyIG1vPXtzdGF0aWNLZXlzOltcInN0YXRpY0NsYXNzXCJdLHRyYW5zZm9ybU5vZGU6ZnVuY3Rpb24oZSx0KXt0Lndhcm47dmFyIG49RnIoZSxcImNsYXNzXCIpO24mJihlLnN0YXRpY0NsYXNzPUpTT04uc3RyaW5naWZ5KG4pKTt2YXIgcj1JcihlLFwiY2xhc3NcIiwhMSk7ciYmKGUuY2xhc3NCaW5kaW5nPXIpfSxnZW5EYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PVwiXCI7cmV0dXJuIGUuc3RhdGljQ2xhc3MmJih0Kz1cInN0YXRpY0NsYXNzOlwiK2Uuc3RhdGljQ2xhc3MrXCIsXCIpLGUuY2xhc3NCaW5kaW5nJiYodCs9XCJjbGFzczpcIitlLmNsYXNzQmluZGluZytcIixcIiksdH19O3ZhciB5byxnbz17c3RhdGljS2V5czpbXCJzdGF0aWNTdHlsZVwiXSx0cmFuc2Zvcm1Ob2RlOmZ1bmN0aW9uKGUsdCl7dC53YXJuO3ZhciBuPUZyKGUsXCJzdHlsZVwiKTtuJiYoZS5zdGF0aWNTdHlsZT1KU09OLnN0cmluZ2lmeShhaShuKSkpO3ZhciByPUlyKGUsXCJzdHlsZVwiLCExKTtyJiYoZS5zdHlsZUJpbmRpbmc9cil9LGdlbkRhdGE6ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIjtyZXR1cm4gZS5zdGF0aWNTdHlsZSYmKHQrPVwic3RhdGljU3R5bGU6XCIrZS5zdGF0aWNTdHlsZStcIixcIiksZS5zdHlsZUJpbmRpbmcmJih0Kz1cInN0eWxlOihcIitlLnN0eWxlQmluZGluZytcIiksXCIpLHR9fSxfbz1mdW5jdGlvbihlKXtyZXR1cm4oeW89eW98fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmlubmVySFRNTD1lLHlvLnRleHRDb250ZW50fSxibz1wKFwiYXJlYSxiYXNlLGJyLGNvbCxlbWJlZCxmcmFtZSxocixpbWcsaW5wdXQsaXNpbmRleCxrZXlnZW4sbGluayxtZXRhLHBhcmFtLHNvdXJjZSx0cmFjayx3YnJcIiksJG89cChcImNvbGdyb3VwLGRkLGR0LGxpLG9wdGlvbnMscCx0ZCx0Zm9vdCx0aCx0aGVhZCx0cixzb3VyY2VcIiksd289cChcImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxiYXNlLGJsb2NrcXVvdGUsYm9keSxjYXB0aW9uLGNvbCxjb2xncm91cCxkZCxkZXRhaWxzLGRpYWxvZyxkaXYsZGwsZHQsZmllbGRzZXQsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGZvcm0saDEsaDIsaDMsaDQsaDUsaDYsaGVhZCxoZWFkZXIsaGdyb3VwLGhyLGh0bWwsbGVnZW5kLGxpLG1lbnVpdGVtLG1ldGEsb3B0Z3JvdXAsb3B0aW9uLHBhcmFtLHJwLHJ0LHNvdXJjZSxzdHlsZSxzdW1tYXJ5LHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRpdGxlLHRyLHRyYWNrXCIpLENvPS9eXFxzKihbXlxcc1wiJzw+XFwvPV0rKSg/OlxccyooPSlcXHMqKD86XCIoW15cIl0qKVwiK3wnKFteJ10qKScrfChbXlxcc1wiJz08PmBdKykpKT8vLHhvPS9eXFxzKigoPzp2LVtcXHctXSs6fEB8OnwjKVxcW1tePV0rXFxdW15cXHNcIic8PlxcLz1dKikoPzpcXHMqKD0pXFxzKig/OlwiKFteXCJdKilcIit8JyhbXiddKiknK3woW15cXHNcIic9PD5gXSspKSk/Lyxrbz1cIlthLXpBLVpfXVtcXFxcLVxcXFwuMC05X2EtekEtWlwiK1Auc291cmNlK1wiXSpcIixBbz1cIigoPzpcIitrbytcIlxcXFw6KT9cIitrbytcIilcIixPbz1uZXcgUmVnRXhwKFwiXjxcIitBbyksU289L15cXHMqKFxcLz8pPi8sVG89bmV3IFJlZ0V4cChcIl48XFxcXC9cIitBbytcIltePl0qPlwiKSxFbz0vXjwhRE9DVFlQRSBbXj5dKz4vaSxObz0vXjwhXFwtLS8sam89L148IVxcWy8sRG89cChcInNjcmlwdCxzdHlsZSx0ZXh0YXJlYVwiLCEwKSxMbz17fSxNbz17XCImbHQ7XCI6XCI8XCIsXCImZ3Q7XCI6XCI+XCIsXCImcXVvdDtcIjonXCInLFwiJmFtcDtcIjpcIiZcIixcIiYjMTA7XCI6XCJcXG5cIixcIiYjOTtcIjpcIlxcdFwiLFwiJiMzOTtcIjpcIidcIn0sSW89LyYoPzpsdHxndHxxdW90fGFtcHwjMzkpOy9nLEZvPS8mKD86bHR8Z3R8cXVvdHxhbXB8IzM5fCMxMHwjOSk7L2csUG89cChcInByZSx0ZXh0YXJlYVwiLCEwKSxSbz1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZQbyhlKSYmXCJcXG5cIj09PXRbMF19O2Z1bmN0aW9uIEhvKGUsdCl7dmFyIG49dD9GbzpJbztyZXR1cm4gZS5yZXBsYWNlKG4sZnVuY3Rpb24oZSl7cmV0dXJuIE1vW2VdfSl9dmFyIEJvLFVvLHpvLFZvLEtvLEpvLHFvLFdvLFpvPS9eQHxedi1vbjovLEdvPS9edi18XkB8Xjp8XiMvLFhvPS8oW1xcc1xcU10qPylcXHMrKD86aW58b2YpXFxzKyhbXFxzXFxTXSopLyxZbz0vLChbXixcXH1cXF1dKikoPzosKFteLFxcfVxcXV0qKSk/JC8sUW89L15cXCh8XFwpJC9nLGVhPS9eXFxbLipcXF0kLyx0YT0vOiguKikkLyxuYT0vXjp8XlxcLnxedi1iaW5kOi8scmE9L1xcLlteLlxcXV0rKD89W15cXF1dKiQpL2csaWE9L152LXNsb3QoOnwkKXxeIy8sb2E9L1tcXHJcXG5dLyxhYT0vXFxzKy9nLHNhPWcoX28pLGNhPVwiX2VtcHR5X1wiO2Z1bmN0aW9uIHVhKGUsdCxuKXtyZXR1cm57dHlwZToxLHRhZzplLGF0dHJzTGlzdDp0LGF0dHJzTWFwOm1hKHQpLHJhd0F0dHJzTWFwOnt9LHBhcmVudDpuLGNoaWxkcmVuOltdfX1mdW5jdGlvbiBsYShlLHQpe0JvPXQud2Fybnx8U3IsSm89dC5pc1ByZVRhZ3x8VCxxbz10Lm11c3RVc2VQcm9wfHxULFdvPXQuZ2V0VGFnTmFtZXNwYWNlfHxUO3QuaXNSZXNlcnZlZFRhZzt6bz1Ucih0Lm1vZHVsZXMsXCJ0cmFuc2Zvcm1Ob2RlXCIpLFZvPVRyKHQubW9kdWxlcyxcInByZVRyYW5zZm9ybU5vZGVcIiksS289VHIodC5tb2R1bGVzLFwicG9zdFRyYW5zZm9ybU5vZGVcIiksVW89dC5kZWxpbWl0ZXJzO3ZhciBuLHIsaT1bXSxvPSExIT09dC5wcmVzZXJ2ZVdoaXRlc3BhY2UsYT10LndoaXRlc3BhY2Uscz0hMSxjPSExO2Z1bmN0aW9uIHUoZSl7aWYobChlKSxzfHxlLnByb2Nlc3NlZHx8KGU9ZmEoZSx0KSksaS5sZW5ndGh8fGU9PT1ufHxuLmlmJiYoZS5lbHNlaWZ8fGUuZWxzZSkmJmRhKG4se2V4cDplLmVsc2VpZixibG9jazplfSksciYmIWUuZm9yYmlkZGVuKWlmKGUuZWxzZWlmfHxlLmVsc2UpYT1lLCh1PWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2Zvcig7dC0tOyl7aWYoMT09PWVbdF0udHlwZSlyZXR1cm4gZVt0XTtlLnBvcCgpfX0oci5jaGlsZHJlbikpJiZ1LmlmJiZkYSh1LHtleHA6YS5lbHNlaWYsYmxvY2s6YX0pO2Vsc2V7aWYoZS5zbG90U2NvcGUpe3ZhciBvPWUuc2xvdFRhcmdldHx8J1wiZGVmYXVsdFwiJzsoci5zY29wZWRTbG90c3x8KHIuc2NvcGVkU2xvdHM9e30pKVtvXT1lfXIuY2hpbGRyZW4ucHVzaChlKSxlLnBhcmVudD1yfXZhciBhLHU7ZS5jaGlsZHJlbj1lLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5zbG90U2NvcGV9KSxsKGUpLGUucHJlJiYocz0hMSksSm8oZS50YWcpJiYoYz0hMSk7Zm9yKHZhciBmPTA7ZjxLby5sZW5ndGg7ZisrKUtvW2ZdKGUsdCl9ZnVuY3Rpb24gbChlKXtpZighYylmb3IodmFyIHQ7KHQ9ZS5jaGlsZHJlbltlLmNoaWxkcmVuLmxlbmd0aC0xXSkmJjM9PT10LnR5cGUmJlwiIFwiPT09dC50ZXh0OyllLmNoaWxkcmVuLnBvcCgpfXJldHVybiBmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLGk9W10sbz10LmV4cGVjdEhUTUwsYT10LmlzVW5hcnlUYWd8fFQscz10LmNhbkJlTGVmdE9wZW5UYWd8fFQsYz0wO2U7KXtpZihuPWUsciYmRG8ocikpe3ZhciB1PTAsbD1yLnRvTG93ZXJDYXNlKCksZj1Mb1tsXXx8KExvW2xdPW5ldyBSZWdFeHAoXCIoW1xcXFxzXFxcXFNdKj8pKDwvXCIrbCtcIltePl0qPilcIixcImlcIikpLHA9ZS5yZXBsYWNlKGYsZnVuY3Rpb24oZSxuLHIpe3JldHVybiB1PXIubGVuZ3RoLERvKGwpfHxcIm5vc2NyaXB0XCI9PT1sfHwobj1uLnJlcGxhY2UoLzwhXFwtLShbXFxzXFxTXSo/KS0tPi9nLFwiJDFcIikucmVwbGFjZSgvPCFcXFtDREFUQVxcWyhbXFxzXFxTXSo/KV1dPi9nLFwiJDFcIikpLFJvKGwsbikmJihuPW4uc2xpY2UoMSkpLHQuY2hhcnMmJnQuY2hhcnMobiksXCJcIn0pO2MrPWUubGVuZ3RoLXAubGVuZ3RoLGU9cCxBKGwsYy11LGMpfWVsc2V7dmFyIGQ9ZS5pbmRleE9mKFwiPFwiKTtpZigwPT09ZCl7aWYoTm8udGVzdChlKSl7dmFyIHY9ZS5pbmRleE9mKFwiLS1cXHgzZVwiKTtpZih2Pj0wKXt0LnNob3VsZEtlZXBDb21tZW50JiZ0LmNvbW1lbnQoZS5zdWJzdHJpbmcoNCx2KSxjLGMrdiszKSxDKHYrMyk7Y29udGludWV9fWlmKGpvLnRlc3QoZSkpe3ZhciBoPWUuaW5kZXhPZihcIl0+XCIpO2lmKGg+PTApe0MoaCsyKTtjb250aW51ZX19dmFyIG09ZS5tYXRjaChFbyk7aWYobSl7QyhtWzBdLmxlbmd0aCk7Y29udGludWV9dmFyIHk9ZS5tYXRjaChUbyk7aWYoeSl7dmFyIGc9YztDKHlbMF0ubGVuZ3RoKSxBKHlbMV0sZyxjKTtjb250aW51ZX12YXIgXz14KCk7aWYoXyl7ayhfKSxSbyhfLnRhZ05hbWUsZSkmJkMoMSk7Y29udGludWV9fXZhciBiPXZvaWQgMCwkPXZvaWQgMCx3PXZvaWQgMDtpZihkPj0wKXtmb3IoJD1lLnNsaWNlKGQpOyEoVG8udGVzdCgkKXx8T28udGVzdCgkKXx8Tm8udGVzdCgkKXx8am8udGVzdCgkKXx8KHc9JC5pbmRleE9mKFwiPFwiLDEpKTwwKTspZCs9dywkPWUuc2xpY2UoZCk7Yj1lLnN1YnN0cmluZygwLGQpfWQ8MCYmKGI9ZSksYiYmQyhiLmxlbmd0aCksdC5jaGFycyYmYiYmdC5jaGFycyhiLGMtYi5sZW5ndGgsYyl9aWYoZT09PW4pe3QuY2hhcnMmJnQuY2hhcnMoZSk7YnJlYWt9fWZ1bmN0aW9uIEModCl7Yys9dCxlPWUuc3Vic3RyaW5nKHQpfWZ1bmN0aW9uIHgoKXt2YXIgdD1lLm1hdGNoKE9vKTtpZih0KXt2YXIgbixyLGk9e3RhZ05hbWU6dFsxXSxhdHRyczpbXSxzdGFydDpjfTtmb3IoQyh0WzBdLmxlbmd0aCk7IShuPWUubWF0Y2goU28pKSYmKHI9ZS5tYXRjaCh4byl8fGUubWF0Y2goQ28pKTspci5zdGFydD1jLEMoclswXS5sZW5ndGgpLHIuZW5kPWMsaS5hdHRycy5wdXNoKHIpO2lmKG4pcmV0dXJuIGkudW5hcnlTbGFzaD1uWzFdLEMoblswXS5sZW5ndGgpLGkuZW5kPWMsaX19ZnVuY3Rpb24gayhlKXt2YXIgbj1lLnRhZ05hbWUsYz1lLnVuYXJ5U2xhc2g7byYmKFwicFwiPT09ciYmd28obikmJkEocikscyhuKSYmcj09PW4mJkEobikpO2Zvcih2YXIgdT1hKG4pfHwhIWMsbD1lLmF0dHJzLmxlbmd0aCxmPW5ldyBBcnJheShsKSxwPTA7cDxsO3ArKyl7dmFyIGQ9ZS5hdHRyc1twXSx2PWRbM118fGRbNF18fGRbNV18fFwiXCIsaD1cImFcIj09PW4mJlwiaHJlZlwiPT09ZFsxXT90LnNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZjp0LnNob3VsZERlY29kZU5ld2xpbmVzO2ZbcF09e25hbWU6ZFsxXSx2YWx1ZTpIbyh2LGgpfX11fHwoaS5wdXNoKHt0YWc6bixsb3dlckNhc2VkVGFnOm4udG9Mb3dlckNhc2UoKSxhdHRyczpmLHN0YXJ0OmUuc3RhcnQsZW5kOmUuZW5kfSkscj1uKSx0LnN0YXJ0JiZ0LnN0YXJ0KG4sZix1LGUuc3RhcnQsZS5lbmQpfWZ1bmN0aW9uIEEoZSxuLG8pe3ZhciBhLHM7aWYobnVsbD09biYmKG49YyksbnVsbD09byYmKG89YyksZSlmb3Iocz1lLnRvTG93ZXJDYXNlKCksYT1pLmxlbmd0aC0xO2E+PTAmJmlbYV0ubG93ZXJDYXNlZFRhZyE9PXM7YS0tKTtlbHNlIGE9MDtpZihhPj0wKXtmb3IodmFyIHU9aS5sZW5ndGgtMTt1Pj1hO3UtLSl0LmVuZCYmdC5lbmQoaVt1XS50YWcsbixvKTtpLmxlbmd0aD1hLHI9YSYmaVthLTFdLnRhZ31lbHNlXCJiclwiPT09cz90LnN0YXJ0JiZ0LnN0YXJ0KGUsW10sITAsbixvKTpcInBcIj09PXMmJih0LnN0YXJ0JiZ0LnN0YXJ0KGUsW10sITEsbixvKSx0LmVuZCYmdC5lbmQoZSxuLG8pKX1BKCl9KGUse3dhcm46Qm8sZXhwZWN0SFRNTDp0LmV4cGVjdEhUTUwsaXNVbmFyeVRhZzp0LmlzVW5hcnlUYWcsY2FuQmVMZWZ0T3BlblRhZzp0LmNhbkJlTGVmdE9wZW5UYWcsc2hvdWxkRGVjb2RlTmV3bGluZXM6dC5zaG91bGREZWNvZGVOZXdsaW5lcyxzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWY6dC5zaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYsc2hvdWxkS2VlcENvbW1lbnQ6dC5jb21tZW50cyxvdXRwdXRTb3VyY2VSYW5nZTp0Lm91dHB1dFNvdXJjZVJhbmdlLHN0YXJ0OmZ1bmN0aW9uKGUsbyxhLGwsZil7dmFyIHA9ciYmci5uc3x8V28oZSk7cSYmXCJzdmdcIj09PXAmJihvPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07eWEudGVzdChyLm5hbWUpfHwoci5uYW1lPXIubmFtZS5yZXBsYWNlKGdhLFwiXCIpLHQucHVzaChyKSl9cmV0dXJuIHR9KG8pKTt2YXIgZCx2PXVhKGUsbyxyKTtwJiYodi5ucz1wKSxcInN0eWxlXCIhPT0oZD12KS50YWcmJihcInNjcmlwdFwiIT09ZC50YWd8fGQuYXR0cnNNYXAudHlwZSYmXCJ0ZXh0L2phdmFzY3JpcHRcIiE9PWQuYXR0cnNNYXAudHlwZSl8fHRlKCl8fCh2LmZvcmJpZGRlbj0hMCk7Zm9yKHZhciBoPTA7aDxWby5sZW5ndGg7aCsrKXY9Vm9baF0odix0KXx8djtzfHwoIWZ1bmN0aW9uKGUpe251bGwhPUZyKGUsXCJ2LXByZVwiKSYmKGUucHJlPSEwKX0odiksdi5wcmUmJihzPSEwKSksSm8odi50YWcpJiYoYz0hMCkscz9mdW5jdGlvbihlKXt2YXIgdD1lLmF0dHJzTGlzdCxuPXQubGVuZ3RoO2lmKG4pZm9yKHZhciByPWUuYXR0cnM9bmV3IEFycmF5KG4pLGk9MDtpPG47aSsrKXJbaV09e25hbWU6dFtpXS5uYW1lLHZhbHVlOkpTT04uc3RyaW5naWZ5KHRbaV0udmFsdWUpfSxudWxsIT10W2ldLnN0YXJ0JiYocltpXS5zdGFydD10W2ldLnN0YXJ0LHJbaV0uZW5kPXRbaV0uZW5kKTtlbHNlIGUucHJlfHwoZS5wbGFpbj0hMCl9KHYpOnYucHJvY2Vzc2VkfHwocGEodiksZnVuY3Rpb24oZSl7dmFyIHQ9RnIoZSxcInYtaWZcIik7aWYodCllLmlmPXQsZGEoZSx7ZXhwOnQsYmxvY2s6ZX0pO2Vsc2V7bnVsbCE9RnIoZSxcInYtZWxzZVwiKSYmKGUuZWxzZT0hMCk7dmFyIG49RnIoZSxcInYtZWxzZS1pZlwiKTtuJiYoZS5lbHNlaWY9bil9fSh2KSxmdW5jdGlvbihlKXtudWxsIT1GcihlLFwidi1vbmNlXCIpJiYoZS5vbmNlPSEwKX0odikpLG58fChuPXYpLGE/dSh2KToocj12LGkucHVzaCh2KSl9LGVuZDpmdW5jdGlvbihlLHQsbil7dmFyIG89aVtpLmxlbmd0aC0xXTtpLmxlbmd0aC09MSxyPWlbaS5sZW5ndGgtMV0sdShvKX0sY2hhcnM6ZnVuY3Rpb24oZSx0LG4pe2lmKHImJighcXx8XCJ0ZXh0YXJlYVwiIT09ci50YWd8fHIuYXR0cnNNYXAucGxhY2Vob2xkZXIhPT1lKSl7dmFyIGksdSxsLGY9ci5jaGlsZHJlbjtpZihlPWN8fGUudHJpbSgpP1wic2NyaXB0XCI9PT0oaT1yKS50YWd8fFwic3R5bGVcIj09PWkudGFnP2U6c2EoZSk6Zi5sZW5ndGg/YT9cImNvbmRlbnNlXCI9PT1hJiZvYS50ZXN0KGUpP1wiXCI6XCIgXCI6bz9cIiBcIjpcIlwiOlwiXCIpY3x8XCJjb25kZW5zZVwiIT09YXx8KGU9ZS5yZXBsYWNlKGFhLFwiIFwiKSksIXMmJlwiIFwiIT09ZSYmKHU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10P2hvKHQpOnBvO2lmKG4udGVzdChlKSl7Zm9yKHZhciByLGksbyxhPVtdLHM9W10sYz1uLmxhc3RJbmRleD0wO3I9bi5leGVjKGUpOyl7KGk9ci5pbmRleCk+YyYmKHMucHVzaChvPWUuc2xpY2UoYyxpKSksYS5wdXNoKEpTT04uc3RyaW5naWZ5KG8pKSk7dmFyIHU9QXIoclsxXS50cmltKCkpO2EucHVzaChcIl9zKFwiK3UrXCIpXCIpLHMucHVzaCh7XCJAYmluZGluZ1wiOnV9KSxjPWkrclswXS5sZW5ndGh9cmV0dXJuIGM8ZS5sZW5ndGgmJihzLnB1c2gobz1lLnNsaWNlKGMpKSxhLnB1c2goSlNPTi5zdHJpbmdpZnkobykpKSx7ZXhwcmVzc2lvbjphLmpvaW4oXCIrXCIpLHRva2VuczpzfX19KGUsVW8pKT9sPXt0eXBlOjIsZXhwcmVzc2lvbjp1LmV4cHJlc3Npb24sdG9rZW5zOnUudG9rZW5zLHRleHQ6ZX06XCIgXCI9PT1lJiZmLmxlbmd0aCYmXCIgXCI9PT1mW2YubGVuZ3RoLTFdLnRleHR8fChsPXt0eXBlOjMsdGV4dDplfSksbCYmZi5wdXNoKGwpfX0sY29tbWVudDpmdW5jdGlvbihlLHQsbil7aWYocil7dmFyIGk9e3R5cGU6Myx0ZXh0OmUsaXNDb21tZW50OiEwfTtyLmNoaWxkcmVuLnB1c2goaSl9fX0pLG59ZnVuY3Rpb24gZmEoZSx0KXt2YXIgbixyOyhyPUlyKG49ZSxcImtleVwiKSkmJihuLmtleT1yKSxlLnBsYWluPSFlLmtleSYmIWUuc2NvcGVkU2xvdHMmJiFlLmF0dHJzTGlzdC5sZW5ndGgsZnVuY3Rpb24oZSl7dmFyIHQ9SXIoZSxcInJlZlwiKTt0JiYoZS5yZWY9dCxlLnJlZkluRm9yPWZ1bmN0aW9uKGUpe3ZhciB0PWU7Zm9yKDt0Oyl7aWYodm9pZCAwIT09dC5mb3IpcmV0dXJuITA7dD10LnBhcmVudH1yZXR1cm4hMX0oZSkpfShlKSxmdW5jdGlvbihlKXt2YXIgdDtcInRlbXBsYXRlXCI9PT1lLnRhZz8odD1GcihlLFwic2NvcGVcIiksZS5zbG90U2NvcGU9dHx8RnIoZSxcInNsb3Qtc2NvcGVcIikpOih0PUZyKGUsXCJzbG90LXNjb3BlXCIpKSYmKGUuc2xvdFNjb3BlPXQpO3ZhciBuPUlyKGUsXCJzbG90XCIpO24mJihlLnNsb3RUYXJnZXQ9J1wiXCInPT09bj8nXCJkZWZhdWx0XCInOm4sZS5zbG90VGFyZ2V0RHluYW1pYz0hKCFlLmF0dHJzTWFwW1wiOnNsb3RcIl0mJiFlLmF0dHJzTWFwW1widi1iaW5kOnNsb3RcIl0pLFwidGVtcGxhdGVcIj09PWUudGFnfHxlLnNsb3RTY29wZXx8TnIoZSxcInNsb3RcIixuLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucmF3QXR0cnNNYXBbXCI6XCIrdF18fGUucmF3QXR0cnNNYXBbXCJ2LWJpbmQ6XCIrdF18fGUucmF3QXR0cnNNYXBbdF19KGUsXCJzbG90XCIpKSk7aWYoXCJ0ZW1wbGF0ZVwiPT09ZS50YWcpe3ZhciByPVByKGUsaWEpO2lmKHIpe3ZhciBpPXZhKHIpLG89aS5uYW1lLGE9aS5keW5hbWljO2Uuc2xvdFRhcmdldD1vLGUuc2xvdFRhcmdldER5bmFtaWM9YSxlLnNsb3RTY29wZT1yLnZhbHVlfHxjYX19ZWxzZXt2YXIgcz1QcihlLGlhKTtpZihzKXt2YXIgYz1lLnNjb3BlZFNsb3RzfHwoZS5zY29wZWRTbG90cz17fSksdT12YShzKSxsPXUubmFtZSxmPXUuZHluYW1pYyxwPWNbbF09dWEoXCJ0ZW1wbGF0ZVwiLFtdLGUpO3Auc2xvdFRhcmdldD1sLHAuc2xvdFRhcmdldER5bmFtaWM9ZixwLmNoaWxkcmVuPWUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGUpe2lmKCFlLnNsb3RTY29wZSlyZXR1cm4gZS5wYXJlbnQ9cCwhMH0pLHAuc2xvdFNjb3BlPXMudmFsdWV8fGNhLGUuY2hpbGRyZW49W10sZS5wbGFpbj0hMX19fShlKSxmdW5jdGlvbihlKXtcInNsb3RcIj09PWUudGFnJiYoZS5zbG90TmFtZT1JcihlLFwibmFtZVwiKSl9KGUpLGZ1bmN0aW9uKGUpe3ZhciB0Oyh0PUlyKGUsXCJpc1wiKSkmJihlLmNvbXBvbmVudD10KTtudWxsIT1GcihlLFwiaW5saW5lLXRlbXBsYXRlXCIpJiYoZS5pbmxpbmVUZW1wbGF0ZT0hMCl9KGUpO2Zvcih2YXIgaT0wO2k8em8ubGVuZ3RoO2krKyllPXpvW2ldKGUsdCl8fGU7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYSxzLGMsdT1lLmF0dHJzTGlzdDtmb3IodD0wLG49dS5sZW5ndGg7dDxuO3QrKylpZihyPWk9dVt0XS5uYW1lLG89dVt0XS52YWx1ZSxHby50ZXN0KHIpKWlmKGUuaGFzQmluZGluZ3M9ITAsKGE9aGEoci5yZXBsYWNlKEdvLFwiXCIpKSkmJihyPXIucmVwbGFjZShyYSxcIlwiKSksbmEudGVzdChyKSlyPXIucmVwbGFjZShuYSxcIlwiKSxvPUFyKG8pLChjPWVhLnRlc3QocikpJiYocj1yLnNsaWNlKDEsLTEpKSxhJiYoYS5wcm9wJiYhYyYmXCJpbm5lckh0bWxcIj09PShyPWIocikpJiYocj1cImlubmVySFRNTFwiKSxhLmNhbWVsJiYhYyYmKHI9YihyKSksYS5zeW5jJiYocz1CcihvLFwiJGV2ZW50XCIpLGM/TXIoZSwnXCJ1cGRhdGU6XCIrKCcrcitcIilcIixzLG51bGwsITEsMCx1W3RdLCEwKTooTXIoZSxcInVwZGF0ZTpcIitiKHIpLHMsbnVsbCwhMSwwLHVbdF0pLEMocikhPT1iKHIpJiZNcihlLFwidXBkYXRlOlwiK0MocikscyxudWxsLCExLDAsdVt0XSkpKSksYSYmYS5wcm9wfHwhZS5jb21wb25lbnQmJnFvKGUudGFnLGUuYXR0cnNNYXAudHlwZSxyKT9FcihlLHIsbyx1W3RdLGMpOk5yKGUscixvLHVbdF0sYyk7ZWxzZSBpZihaby50ZXN0KHIpKXI9ci5yZXBsYWNlKFpvLFwiXCIpLChjPWVhLnRlc3QocikpJiYocj1yLnNsaWNlKDEsLTEpKSxNcihlLHIsbyxhLCExLDAsdVt0XSxjKTtlbHNle3ZhciBsPShyPXIucmVwbGFjZShHbyxcIlwiKSkubWF0Y2godGEpLGY9bCYmbFsxXTtjPSExLGYmJihyPXIuc2xpY2UoMCwtKGYubGVuZ3RoKzEpKSxlYS50ZXN0KGYpJiYoZj1mLnNsaWNlKDEsLTEpLGM9ITApKSxEcihlLHIsaSxvLGYsYyxhLHVbdF0pfWVsc2UgTnIoZSxyLEpTT04uc3RyaW5naWZ5KG8pLHVbdF0pLCFlLmNvbXBvbmVudCYmXCJtdXRlZFwiPT09ciYmcW8oZS50YWcsZS5hdHRyc01hcC50eXBlLHIpJiZFcihlLHIsXCJ0cnVlXCIsdVt0XSl9KGUpLGV9ZnVuY3Rpb24gcGEoZSl7dmFyIHQ7aWYodD1GcihlLFwidi1mb3JcIikpe3ZhciBuPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWF0Y2goWG8pO2lmKCF0KXJldHVybjt2YXIgbj17fTtuLmZvcj10WzJdLnRyaW0oKTt2YXIgcj10WzFdLnRyaW0oKS5yZXBsYWNlKFFvLFwiXCIpLGk9ci5tYXRjaChZbyk7aT8obi5hbGlhcz1yLnJlcGxhY2UoWW8sXCJcIikudHJpbSgpLG4uaXRlcmF0b3IxPWlbMV0udHJpbSgpLGlbMl0mJihuLml0ZXJhdG9yMj1pWzJdLnRyaW0oKSkpOm4uYWxpYXM9cjtyZXR1cm4gbn0odCk7biYmQShlLG4pfX1mdW5jdGlvbiBkYShlLHQpe2UuaWZDb25kaXRpb25zfHwoZS5pZkNvbmRpdGlvbnM9W10pLGUuaWZDb25kaXRpb25zLnB1c2godCl9ZnVuY3Rpb24gdmEoZSl7dmFyIHQ9ZS5uYW1lLnJlcGxhY2UoaWEsXCJcIik7cmV0dXJuIHR8fFwiI1wiIT09ZS5uYW1lWzBdJiYodD1cImRlZmF1bHRcIiksZWEudGVzdCh0KT97bmFtZTp0LnNsaWNlKDEsLTEpLGR5bmFtaWM6ITB9OntuYW1lOidcIicrdCsnXCInLGR5bmFtaWM6ITF9fWZ1bmN0aW9uIGhhKGUpe3ZhciB0PWUubWF0Y2gocmEpO2lmKHQpe3ZhciBuPXt9O3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24oZSl7bltlLnNsaWNlKDEpXT0hMH0pLG59fWZ1bmN0aW9uIG1hKGUpe2Zvcih2YXIgdD17fSxuPTAscj1lLmxlbmd0aDtuPHI7bisrKXRbZVtuXS5uYW1lXT1lW25dLnZhbHVlO3JldHVybiB0fXZhciB5YT0vXnhtbG5zOk5TXFxkKy8sZ2E9L15OU1xcZCs6LztmdW5jdGlvbiBfYShlKXtyZXR1cm4gdWEoZS50YWcsZS5hdHRyc0xpc3Quc2xpY2UoKSxlLnBhcmVudCl9dmFyIGJhPVttbyxnbyx7cHJlVHJhbnNmb3JtTm9kZTpmdW5jdGlvbihlLHQpe2lmKFwiaW5wdXRcIj09PWUudGFnKXt2YXIgbixyPWUuYXR0cnNNYXA7aWYoIXJbXCJ2LW1vZGVsXCJdKXJldHVybjtpZigocltcIjp0eXBlXCJdfHxyW1widi1iaW5kOnR5cGVcIl0pJiYobj1JcihlLFwidHlwZVwiKSksci50eXBlfHxufHwhcltcInYtYmluZFwiXXx8KG49XCIoXCIrcltcInYtYmluZFwiXStcIikudHlwZVwiKSxuKXt2YXIgaT1GcihlLFwidi1pZlwiLCEwKSxvPWk/XCImJihcIitpK1wiKVwiOlwiXCIsYT1udWxsIT1GcihlLFwidi1lbHNlXCIsITApLHM9RnIoZSxcInYtZWxzZS1pZlwiLCEwKSxjPV9hKGUpO3BhKGMpLGpyKGMsXCJ0eXBlXCIsXCJjaGVja2JveFwiKSxmYShjLHQpLGMucHJvY2Vzc2VkPSEwLGMuaWY9XCIoXCIrbitcIik9PT0nY2hlY2tib3gnXCIrbyxkYShjLHtleHA6Yy5pZixibG9jazpjfSk7dmFyIHU9X2EoZSk7RnIodSxcInYtZm9yXCIsITApLGpyKHUsXCJ0eXBlXCIsXCJyYWRpb1wiKSxmYSh1LHQpLGRhKGMse2V4cDpcIihcIituK1wiKT09PSdyYWRpbydcIitvLGJsb2NrOnV9KTt2YXIgbD1fYShlKTtyZXR1cm4gRnIobCxcInYtZm9yXCIsITApLGpyKGwsXCI6dHlwZVwiLG4pLGZhKGwsdCksZGEoYyx7ZXhwOmksYmxvY2s6bH0pLGE/Yy5lbHNlPSEwOnMmJihjLmVsc2VpZj1zKSxjfX19fV07dmFyICRhLHdhLENhPXtleHBlY3RIVE1MOiEwLG1vZHVsZXM6YmEsZGlyZWN0aXZlczp7bW9kZWw6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQudmFsdWUsaT10Lm1vZGlmaWVycyxvPWUudGFnLGE9ZS5hdHRyc01hcC50eXBlO2lmKGUuY29tcG9uZW50KXJldHVybiBIcihlLHIsaSksITE7aWYoXCJzZWxlY3RcIj09PW8pIWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0ndmFyICQkc2VsZWN0ZWRWYWwgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoJGV2ZW50LnRhcmdldC5vcHRpb25zLGZ1bmN0aW9uKG8pe3JldHVybiBvLnNlbGVjdGVkfSkubWFwKGZ1bmN0aW9uKG8pe3ZhciB2YWwgPSBcIl92YWx1ZVwiIGluIG8gPyBvLl92YWx1ZSA6IG8udmFsdWU7cmV0dXJuICcrKG4mJm4ubnVtYmVyP1wiX24odmFsKVwiOlwidmFsXCIpK1wifSk7XCI7cj1yK1wiIFwiK0JyKHQsXCIkZXZlbnQudGFyZ2V0Lm11bHRpcGxlID8gJCRzZWxlY3RlZFZhbCA6ICQkc2VsZWN0ZWRWYWxbMF1cIiksTXIoZSxcImNoYW5nZVwiLHIsbnVsbCwhMCl9KGUscixpKTtlbHNlIGlmKFwiaW5wdXRcIj09PW8mJlwiY2hlY2tib3hcIj09PWEpIWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uJiZuLm51bWJlcixpPUlyKGUsXCJ2YWx1ZVwiKXx8XCJudWxsXCIsbz1JcihlLFwidHJ1ZS12YWx1ZVwiKXx8XCJ0cnVlXCIsYT1JcihlLFwiZmFsc2UtdmFsdWVcIil8fFwiZmFsc2VcIjtFcihlLFwiY2hlY2tlZFwiLFwiQXJyYXkuaXNBcnJheShcIit0K1wiKT9faShcIit0K1wiLFwiK2krXCIpPi0xXCIrKFwidHJ1ZVwiPT09bz9cIjooXCIrdCtcIilcIjpcIjpfcShcIit0K1wiLFwiK28rXCIpXCIpKSxNcihlLFwiY2hhbmdlXCIsXCJ2YXIgJCRhPVwiK3QrXCIsJCRlbD0kZXZlbnQudGFyZ2V0LCQkYz0kJGVsLmNoZWNrZWQ/KFwiK28rXCIpOihcIithK1wiKTtpZihBcnJheS5pc0FycmF5KCQkYSkpe3ZhciAkJHY9XCIrKHI/XCJfbihcIitpK1wiKVwiOmkpK1wiLCQkaT1faSgkJGEsJCR2KTtpZigkJGVsLmNoZWNrZWQpeyQkaTwwJiYoXCIrQnIodCxcIiQkYS5jb25jYXQoWyQkdl0pXCIpK1wiKX1lbHNleyQkaT4tMSYmKFwiK0JyKHQsXCIkJGEuc2xpY2UoMCwkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpKzEpKVwiKStcIil9fWVsc2V7XCIrQnIodCxcIiQkY1wiKStcIn1cIixudWxsLCEwKX0oZSxyLGkpO2Vsc2UgaWYoXCJpbnB1dFwiPT09byYmXCJyYWRpb1wiPT09YSkhZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4mJm4ubnVtYmVyLGk9SXIoZSxcInZhbHVlXCIpfHxcIm51bGxcIjtFcihlLFwiY2hlY2tlZFwiLFwiX3EoXCIrdCtcIixcIisoaT1yP1wiX24oXCIraStcIilcIjppKStcIilcIiksTXIoZSxcImNoYW5nZVwiLEJyKHQsaSksbnVsbCwhMCl9KGUscixpKTtlbHNlIGlmKFwiaW5wdXRcIj09PW98fFwidGV4dGFyZWFcIj09PW8pIWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmF0dHJzTWFwLnR5cGUsaT1ufHx7fSxvPWkubGF6eSxhPWkubnVtYmVyLHM9aS50cmltLGM9IW8mJlwicmFuZ2VcIiE9PXIsdT1vP1wiY2hhbmdlXCI6XCJyYW5nZVwiPT09cj9XcjpcImlucHV0XCIsbD1cIiRldmVudC50YXJnZXQudmFsdWVcIjtzJiYobD1cIiRldmVudC50YXJnZXQudmFsdWUudHJpbSgpXCIpLGEmJihsPVwiX24oXCIrbCtcIilcIik7dmFyIGY9QnIodCxsKTtjJiYoZj1cImlmKCRldmVudC50YXJnZXQuY29tcG9zaW5nKXJldHVybjtcIitmKSxFcihlLFwidmFsdWVcIixcIihcIit0K1wiKVwiKSxNcihlLHUsZixudWxsLCEwKSwoc3x8YSkmJk1yKGUsXCJibHVyXCIsXCIkZm9yY2VVcGRhdGUoKVwiKX0oZSxyLGkpO2Vsc2UgaWYoIUYuaXNSZXNlcnZlZFRhZyhvKSlyZXR1cm4gSHIoZSxyLGkpLCExO3JldHVybiEwfSx0ZXh0OmZ1bmN0aW9uKGUsdCl7dC52YWx1ZSYmRXIoZSxcInRleHRDb250ZW50XCIsXCJfcyhcIit0LnZhbHVlK1wiKVwiLHQpfSxodG1sOmZ1bmN0aW9uKGUsdCl7dC52YWx1ZSYmRXIoZSxcImlubmVySFRNTFwiLFwiX3MoXCIrdC52YWx1ZStcIilcIix0KX19LGlzUHJlVGFnOmZ1bmN0aW9uKGUpe3JldHVyblwicHJlXCI9PT1lfSxpc1VuYXJ5VGFnOmJvLG11c3RVc2VQcm9wOmpuLGNhbkJlTGVmdE9wZW5UYWc6JG8saXNSZXNlcnZlZFRhZzpXbixnZXRUYWdOYW1lc3BhY2U6Wm4sc3RhdGljS2V5czpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb25jYXQodC5zdGF0aWNLZXlzfHxbXSl9LFtdKS5qb2luKFwiLFwiKX0oYmEpfSx4YT1nKGZ1bmN0aW9uKGUpe3JldHVybiBwKFwidHlwZSx0YWcsYXR0cnNMaXN0LGF0dHJzTWFwLHBsYWluLHBhcmVudCxjaGlsZHJlbixhdHRycyxzdGFydCxlbmQscmF3QXR0cnNNYXBcIisoZT9cIixcIitlOlwiXCIpKX0pO2Z1bmN0aW9uIGthKGUsdCl7ZSYmKCRhPXhhKHQuc3RhdGljS2V5c3x8XCJcIiksd2E9dC5pc1Jlc2VydmVkVGFnfHxULGZ1bmN0aW9uIGUodCl7dC5zdGF0aWM9ZnVuY3Rpb24oZSl7aWYoMj09PWUudHlwZSlyZXR1cm4hMTtpZigzPT09ZS50eXBlKXJldHVybiEwO3JldHVybiEoIWUucHJlJiYoZS5oYXNCaW5kaW5nc3x8ZS5pZnx8ZS5mb3J8fGQoZS50YWcpfHwhd2EoZS50YWcpfHxmdW5jdGlvbihlKXtmb3IoO2UucGFyZW50Oyl7aWYoXCJ0ZW1wbGF0ZVwiIT09KGU9ZS5wYXJlbnQpLnRhZylyZXR1cm4hMTtpZihlLmZvcilyZXR1cm4hMH1yZXR1cm4hMX0oZSl8fCFPYmplY3Qua2V5cyhlKS5ldmVyeSgkYSkpKX0odCk7aWYoMT09PXQudHlwZSl7aWYoIXdhKHQudGFnKSYmXCJzbG90XCIhPT10LnRhZyYmbnVsbD09dC5hdHRyc01hcFtcImlubGluZS10ZW1wbGF0ZVwiXSlyZXR1cm47Zm9yKHZhciBuPTAscj10LmNoaWxkcmVuLmxlbmd0aDtuPHI7bisrKXt2YXIgaT10LmNoaWxkcmVuW25dO2UoaSksaS5zdGF0aWN8fCh0LnN0YXRpYz0hMSl9aWYodC5pZkNvbmRpdGlvbnMpZm9yKHZhciBvPTEsYT10LmlmQ29uZGl0aW9ucy5sZW5ndGg7bzxhO28rKyl7dmFyIHM9dC5pZkNvbmRpdGlvbnNbb10uYmxvY2s7ZShzKSxzLnN0YXRpY3x8KHQuc3RhdGljPSExKX19fShlKSxmdW5jdGlvbiBlKHQsbil7aWYoMT09PXQudHlwZSl7aWYoKHQuc3RhdGljfHx0Lm9uY2UpJiYodC5zdGF0aWNJbkZvcj1uKSx0LnN0YXRpYyYmdC5jaGlsZHJlbi5sZW5ndGgmJigxIT09dC5jaGlsZHJlbi5sZW5ndGh8fDMhPT10LmNoaWxkcmVuWzBdLnR5cGUpKXJldHVybiB2b2lkKHQuc3RhdGljUm9vdD0hMCk7aWYodC5zdGF0aWNSb290PSExLHQuY2hpbGRyZW4pZm9yKHZhciByPTAsaT10LmNoaWxkcmVuLmxlbmd0aDtyPGk7cisrKWUodC5jaGlsZHJlbltyXSxufHwhIXQuZm9yKTtpZih0LmlmQ29uZGl0aW9ucylmb3IodmFyIG89MSxhPXQuaWZDb25kaXRpb25zLmxlbmd0aDtvPGE7bysrKWUodC5pZkNvbmRpdGlvbnNbb10uYmxvY2ssbil9fShlLCExKSl9dmFyIEFhPS9eKFtcXHckX10rfFxcKFteKV0qP1xcKSlcXHMqPT58XmZ1bmN0aW9uKD86XFxzK1tcXHckXSspP1xccypcXCgvLE9hPS9cXChbXildKj9cXCk7KiQvLFNhPS9eW0EtWmEtel8kXVtcXHckXSooPzpcXC5bQS1aYS16XyRdW1xcdyRdKnxcXFsnW14nXSo/J118XFxbXCJbXlwiXSo/XCJdfFxcW1xcZCtdfFxcW1tBLVphLXpfJF1bXFx3JF0qXSkqJC8sVGE9e2VzYzoyNyx0YWI6OSxlbnRlcjoxMyxzcGFjZTozMix1cDozOCxsZWZ0OjM3LHJpZ2h0OjM5LGRvd246NDAsZGVsZXRlOls4LDQ2XX0sRWE9e2VzYzpbXCJFc2NcIixcIkVzY2FwZVwiXSx0YWI6XCJUYWJcIixlbnRlcjpcIkVudGVyXCIsc3BhY2U6W1wiIFwiLFwiU3BhY2ViYXJcIl0sdXA6W1wiVXBcIixcIkFycm93VXBcIl0sbGVmdDpbXCJMZWZ0XCIsXCJBcnJvd0xlZnRcIl0scmlnaHQ6W1wiUmlnaHRcIixcIkFycm93UmlnaHRcIl0sZG93bjpbXCJEb3duXCIsXCJBcnJvd0Rvd25cIl0sZGVsZXRlOltcIkJhY2tzcGFjZVwiLFwiRGVsZXRlXCIsXCJEZWxcIl19LE5hPWZ1bmN0aW9uKGUpe3JldHVyblwiaWYoXCIrZStcIilyZXR1cm4gbnVsbDtcIn0samE9e3N0b3A6XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCIscHJldmVudDpcIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1wiLHNlbGY6TmEoXCIkZXZlbnQudGFyZ2V0ICE9PSAkZXZlbnQuY3VycmVudFRhcmdldFwiKSxjdHJsOk5hKFwiISRldmVudC5jdHJsS2V5XCIpLHNoaWZ0Ok5hKFwiISRldmVudC5zaGlmdEtleVwiKSxhbHQ6TmEoXCIhJGV2ZW50LmFsdEtleVwiKSxtZXRhOk5hKFwiISRldmVudC5tZXRhS2V5XCIpLGxlZnQ6TmEoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMFwiKSxtaWRkbGU6TmEoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMVwiKSxyaWdodDpOYShcIididXR0b24nIGluICRldmVudCAmJiAkZXZlbnQuYnV0dG9uICE9PSAyXCIpfTtmdW5jdGlvbiBEYShlLHQpe3ZhciBuPXQ/XCJuYXRpdmVPbjpcIjpcIm9uOlwiLHI9XCJcIixpPVwiXCI7Zm9yKHZhciBvIGluIGUpe3ZhciBhPUxhKGVbb10pO2Vbb10mJmVbb10uZHluYW1pYz9pKz1vK1wiLFwiK2ErXCIsXCI6cis9J1wiJytvKydcIjonK2ErXCIsXCJ9cmV0dXJuIHI9XCJ7XCIrci5zbGljZSgwLC0xKStcIn1cIixpP24rXCJfZChcIityK1wiLFtcIitpLnNsaWNlKDAsLTEpK1wiXSlcIjpuK3J9ZnVuY3Rpb24gTGEoZSl7aWYoIWUpcmV0dXJuXCJmdW5jdGlvbigpe31cIjtpZihBcnJheS5pc0FycmF5KGUpKXJldHVyblwiW1wiK2UubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBMYShlKX0pLmpvaW4oXCIsXCIpK1wiXVwiO3ZhciB0PVNhLnRlc3QoZS52YWx1ZSksbj1BYS50ZXN0KGUudmFsdWUpLHI9U2EudGVzdChlLnZhbHVlLnJlcGxhY2UoT2EsXCJcIikpO2lmKGUubW9kaWZpZXJzKXt2YXIgaT1cIlwiLG89XCJcIixhPVtdO2Zvcih2YXIgcyBpbiBlLm1vZGlmaWVycylpZihqYVtzXSlvKz1qYVtzXSxUYVtzXSYmYS5wdXNoKHMpO2Vsc2UgaWYoXCJleGFjdFwiPT09cyl7dmFyIGM9ZS5tb2RpZmllcnM7bys9TmEoW1wiY3RybFwiLFwic2hpZnRcIixcImFsdFwiLFwibWV0YVwiXS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWNbZV19KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuXCIkZXZlbnQuXCIrZStcIktleVwifSkuam9pbihcInx8XCIpKX1lbHNlIGEucHVzaChzKTtyZXR1cm4gYS5sZW5ndGgmJihpKz1mdW5jdGlvbihlKXtyZXR1cm5cImlmKCEkZXZlbnQudHlwZS5pbmRleE9mKCdrZXknKSYmXCIrZS5tYXAoTWEpLmpvaW4oXCImJlwiKStcIilyZXR1cm4gbnVsbDtcIn0oYSkpLG8mJihpKz1vKSxcImZ1bmN0aW9uKCRldmVudCl7XCIraSsodD9cInJldHVybiBcIitlLnZhbHVlK1wiKCRldmVudClcIjpuP1wicmV0dXJuIChcIitlLnZhbHVlK1wiKSgkZXZlbnQpXCI6cj9cInJldHVybiBcIitlLnZhbHVlOmUudmFsdWUpK1wifVwifXJldHVybiB0fHxuP2UudmFsdWU6XCJmdW5jdGlvbigkZXZlbnQpe1wiKyhyP1wicmV0dXJuIFwiK2UudmFsdWU6ZS52YWx1ZSkrXCJ9XCJ9ZnVuY3Rpb24gTWEoZSl7dmFyIHQ9cGFyc2VJbnQoZSwxMCk7aWYodClyZXR1cm5cIiRldmVudC5rZXlDb2RlIT09XCIrdDt2YXIgbj1UYVtlXSxyPUVhW2VdO3JldHVyblwiX2soJGV2ZW50LmtleUNvZGUsXCIrSlNPTi5zdHJpbmdpZnkoZSkrXCIsXCIrSlNPTi5zdHJpbmdpZnkobikrXCIsJGV2ZW50LmtleSxcIitKU09OLnN0cmluZ2lmeShyKStcIilcIn12YXIgSWE9e29uOmZ1bmN0aW9uKGUsdCl7ZS53cmFwTGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVyblwiX2coXCIrZStcIixcIit0LnZhbHVlK1wiKVwifX0sYmluZDpmdW5jdGlvbihlLHQpe2Uud3JhcERhdGE9ZnVuY3Rpb24obil7cmV0dXJuXCJfYihcIituK1wiLCdcIitlLnRhZytcIicsXCIrdC52YWx1ZStcIixcIisodC5tb2RpZmllcnMmJnQubW9kaWZpZXJzLnByb3A/XCJ0cnVlXCI6XCJmYWxzZVwiKSsodC5tb2RpZmllcnMmJnQubW9kaWZpZXJzLnN5bmM/XCIsdHJ1ZVwiOlwiXCIpK1wiKVwifX0sY2xvYWs6U30sRmE9ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zPWUsdGhpcy53YXJuPWUud2Fybnx8U3IsdGhpcy50cmFuc2Zvcm1zPVRyKGUubW9kdWxlcyxcInRyYW5zZm9ybUNvZGVcIiksdGhpcy5kYXRhR2VuRm5zPVRyKGUubW9kdWxlcyxcImdlbkRhdGFcIiksdGhpcy5kaXJlY3RpdmVzPUEoQSh7fSxJYSksZS5kaXJlY3RpdmVzKTt2YXIgdD1lLmlzUmVzZXJ2ZWRUYWd8fFQ7dGhpcy5tYXliZUNvbXBvbmVudD1mdW5jdGlvbihlKXtyZXR1cm4hIWUuY29tcG9uZW50fHwhdChlLnRhZyl9LHRoaXMub25jZUlkPTAsdGhpcy5zdGF0aWNSZW5kZXJGbnM9W10sdGhpcy5wcmU9ITF9O2Z1bmN0aW9uIFBhKGUsdCl7dmFyIG49bmV3IEZhKHQpO3JldHVybntyZW5kZXI6XCJ3aXRoKHRoaXMpe3JldHVybiBcIisoZT9SYShlLG4pOidfYyhcImRpdlwiKScpK1wifVwiLHN0YXRpY1JlbmRlckZuczpuLnN0YXRpY1JlbmRlckZuc319ZnVuY3Rpb24gUmEoZSx0KXtpZihlLnBhcmVudCYmKGUucHJlPWUucHJlfHxlLnBhcmVudC5wcmUpLGUuc3RhdGljUm9vdCYmIWUuc3RhdGljUHJvY2Vzc2VkKXJldHVybiBIYShlLHQpO2lmKGUub25jZSYmIWUub25jZVByb2Nlc3NlZClyZXR1cm4gQmEoZSx0KTtpZihlLmZvciYmIWUuZm9yUHJvY2Vzc2VkKXJldHVybiB6YShlLHQpO2lmKGUuaWYmJiFlLmlmUHJvY2Vzc2VkKXJldHVybiBVYShlLHQpO2lmKFwidGVtcGxhdGVcIiE9PWUudGFnfHxlLnNsb3RUYXJnZXR8fHQucHJlKXtpZihcInNsb3RcIj09PWUudGFnKXJldHVybiBmdW5jdGlvbihlLHQpe3ZhciBuPWUuc2xvdE5hbWV8fCdcImRlZmF1bHRcIicscj1xYShlLHQpLGk9XCJfdChcIituKyhyP1wiLFwiK3I6XCJcIiksbz1lLmF0dHJzfHxlLmR5bmFtaWNBdHRycz9HYSgoZS5hdHRyc3x8W10pLmNvbmNhdChlLmR5bmFtaWNBdHRyc3x8W10pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57bmFtZTpiKGUubmFtZSksdmFsdWU6ZS52YWx1ZSxkeW5hbWljOmUuZHluYW1pY319KSk6bnVsbCxhPWUuYXR0cnNNYXBbXCJ2LWJpbmRcIl07IW8mJiFhfHxyfHwoaSs9XCIsbnVsbFwiKTtvJiYoaSs9XCIsXCIrbyk7YSYmKGkrPShvP1wiXCI6XCIsbnVsbFwiKStcIixcIithKTtyZXR1cm4gaStcIilcIn0oZSx0KTt2YXIgbjtpZihlLmNvbXBvbmVudCluPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LmlubGluZVRlbXBsYXRlP251bGw6cWEodCxuLCEwKTtyZXR1cm5cIl9jKFwiK2UrXCIsXCIrVmEodCxuKSsocj9cIixcIityOlwiXCIpK1wiKVwifShlLmNvbXBvbmVudCxlLHQpO2Vsc2V7dmFyIHI7KCFlLnBsYWlufHxlLnByZSYmdC5tYXliZUNvbXBvbmVudChlKSkmJihyPVZhKGUsdCkpO3ZhciBpPWUuaW5saW5lVGVtcGxhdGU/bnVsbDpxYShlLHQsITApO249XCJfYygnXCIrZS50YWcrXCInXCIrKHI/XCIsXCIrcjpcIlwiKSsoaT9cIixcIitpOlwiXCIpK1wiKVwifWZvcih2YXIgbz0wO288dC50cmFuc2Zvcm1zLmxlbmd0aDtvKyspbj10LnRyYW5zZm9ybXNbb10oZSxuKTtyZXR1cm4gbn1yZXR1cm4gcWEoZSx0KXx8XCJ2b2lkIDBcIn1mdW5jdGlvbiBIYShlLHQpe2Uuc3RhdGljUHJvY2Vzc2VkPSEwO3ZhciBuPXQucHJlO3JldHVybiBlLnByZSYmKHQucHJlPWUucHJlKSx0LnN0YXRpY1JlbmRlckZucy5wdXNoKFwid2l0aCh0aGlzKXtyZXR1cm4gXCIrUmEoZSx0KStcIn1cIiksdC5wcmU9bixcIl9tKFwiKyh0LnN0YXRpY1JlbmRlckZucy5sZW5ndGgtMSkrKGUuc3RhdGljSW5Gb3I/XCIsdHJ1ZVwiOlwiXCIpK1wiKVwifWZ1bmN0aW9uIEJhKGUsdCl7aWYoZS5vbmNlUHJvY2Vzc2VkPSEwLGUuaWYmJiFlLmlmUHJvY2Vzc2VkKXJldHVybiBVYShlLHQpO2lmKGUuc3RhdGljSW5Gb3Ipe2Zvcih2YXIgbj1cIlwiLHI9ZS5wYXJlbnQ7cjspe2lmKHIuZm9yKXtuPXIua2V5O2JyZWFrfXI9ci5wYXJlbnR9cmV0dXJuIG4/XCJfbyhcIitSYShlLHQpK1wiLFwiK3Qub25jZUlkKysrXCIsXCIrbitcIilcIjpSYShlLHQpfXJldHVybiBIYShlLHQpfWZ1bmN0aW9uIFVhKGUsdCxuLHIpe3JldHVybiBlLmlmUHJvY2Vzc2VkPSEwLGZ1bmN0aW9uIGUodCxuLHIsaSl7aWYoIXQubGVuZ3RoKXJldHVybiBpfHxcIl9lKClcIjt2YXIgbz10LnNoaWZ0KCk7cmV0dXJuIG8uZXhwP1wiKFwiK28uZXhwK1wiKT9cIithKG8uYmxvY2spK1wiOlwiK2UodCxuLHIsaSk6XCJcIithKG8uYmxvY2spO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIHI/cihlLG4pOmUub25jZT9CYShlLG4pOlJhKGUsbil9fShlLmlmQ29uZGl0aW9ucy5zbGljZSgpLHQsbixyKX1mdW5jdGlvbiB6YShlLHQsbixyKXt2YXIgaT1lLmZvcixvPWUuYWxpYXMsYT1lLml0ZXJhdG9yMT9cIixcIitlLml0ZXJhdG9yMTpcIlwiLHM9ZS5pdGVyYXRvcjI/XCIsXCIrZS5pdGVyYXRvcjI6XCJcIjtyZXR1cm4gZS5mb3JQcm9jZXNzZWQ9ITAsKHJ8fFwiX2xcIikrXCIoKFwiK2krXCIpLGZ1bmN0aW9uKFwiK28rYStzK1wiKXtyZXR1cm4gXCIrKG58fFJhKShlLHQpK1wifSlcIn1mdW5jdGlvbiBWYShlLHQpe3ZhciBuPVwie1wiLHI9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmRpcmVjdGl2ZXM7aWYoIW4pcmV0dXJuO3ZhciByLGksbyxhLHM9XCJkaXJlY3RpdmVzOltcIixjPSExO2ZvcihyPTAsaT1uLmxlbmd0aDtyPGk7cisrKXtvPW5bcl0sYT0hMDt2YXIgdT10LmRpcmVjdGl2ZXNbby5uYW1lXTt1JiYoYT0hIXUoZSxvLHQud2FybikpLGEmJihjPSEwLHMrPSd7bmFtZTpcIicrby5uYW1lKydcIixyYXdOYW1lOlwiJytvLnJhd05hbWUrJ1wiJysoby52YWx1ZT9cIix2YWx1ZTooXCIrby52YWx1ZStcIiksZXhwcmVzc2lvbjpcIitKU09OLnN0cmluZ2lmeShvLnZhbHVlKTpcIlwiKSsoby5hcmc/XCIsYXJnOlwiKyhvLmlzRHluYW1pY0FyZz9vLmFyZzonXCInK28uYXJnKydcIicpOlwiXCIpKyhvLm1vZGlmaWVycz9cIixtb2RpZmllcnM6XCIrSlNPTi5zdHJpbmdpZnkoby5tb2RpZmllcnMpOlwiXCIpK1wifSxcIil9aWYoYylyZXR1cm4gcy5zbGljZSgwLC0xKStcIl1cIn0oZSx0KTtyJiYobis9citcIixcIiksZS5rZXkmJihuKz1cImtleTpcIitlLmtleStcIixcIiksZS5yZWYmJihuKz1cInJlZjpcIitlLnJlZitcIixcIiksZS5yZWZJbkZvciYmKG4rPVwicmVmSW5Gb3I6dHJ1ZSxcIiksZS5wcmUmJihuKz1cInByZTp0cnVlLFwiKSxlLmNvbXBvbmVudCYmKG4rPSd0YWc6XCInK2UudGFnKydcIiwnKTtmb3IodmFyIGk9MDtpPHQuZGF0YUdlbkZucy5sZW5ndGg7aSsrKW4rPXQuZGF0YUdlbkZuc1tpXShlKTtpZihlLmF0dHJzJiYobis9XCJhdHRyczpcIitHYShlLmF0dHJzKStcIixcIiksZS5wcm9wcyYmKG4rPVwiZG9tUHJvcHM6XCIrR2EoZS5wcm9wcykrXCIsXCIpLGUuZXZlbnRzJiYobis9RGEoZS5ldmVudHMsITEpK1wiLFwiKSxlLm5hdGl2ZUV2ZW50cyYmKG4rPURhKGUubmF0aXZlRXZlbnRzLCEwKStcIixcIiksZS5zbG90VGFyZ2V0JiYhZS5zbG90U2NvcGUmJihuKz1cInNsb3Q6XCIrZS5zbG90VGFyZ2V0K1wiLFwiKSxlLnNjb3BlZFNsb3RzJiYobis9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZm9yfHxPYmplY3Qua2V5cyh0KS5zb21lKGZ1bmN0aW9uKGUpe3ZhciBuPXRbZV07cmV0dXJuIG4uc2xvdFRhcmdldER5bmFtaWN8fG4uaWZ8fG4uZm9yfHxLYShuKX0pLGk9ISFlLmlmO2lmKCFyKWZvcih2YXIgbz1lLnBhcmVudDtvOyl7aWYoby5zbG90U2NvcGUmJm8uc2xvdFNjb3BlIT09Y2F8fG8uZm9yKXtyPSEwO2JyZWFrfW8uaWYmJihpPSEwKSxvPW8ucGFyZW50fXZhciBhPU9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gSmEodFtlXSxuKX0pLmpvaW4oXCIsXCIpO3JldHVyblwic2NvcGVkU2xvdHM6X3UoW1wiK2ErXCJdXCIrKHI/XCIsbnVsbCx0cnVlXCI6XCJcIikrKCFyJiZpP1wiLG51bGwsZmFsc2UsXCIrZnVuY3Rpb24oZSl7dmFyIHQ9NTM4MSxuPWUubGVuZ3RoO2Zvcig7bjspdD0zMyp0XmUuY2hhckNvZGVBdCgtLW4pO3JldHVybiB0Pj4+MH0oYSk6XCJcIikrXCIpXCJ9KGUsZS5zY29wZWRTbG90cyx0KStcIixcIiksZS5tb2RlbCYmKG4rPVwibW9kZWw6e3ZhbHVlOlwiK2UubW9kZWwudmFsdWUrXCIsY2FsbGJhY2s6XCIrZS5tb2RlbC5jYWxsYmFjaytcIixleHByZXNzaW9uOlwiK2UubW9kZWwuZXhwcmVzc2lvbitcIn0sXCIpLGUuaW5saW5lVGVtcGxhdGUpe3ZhciBvPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5jaGlsZHJlblswXTtpZihuJiYxPT09bi50eXBlKXt2YXIgcj1QYShuLHQub3B0aW9ucyk7cmV0dXJuXCJpbmxpbmVUZW1wbGF0ZTp7cmVuZGVyOmZ1bmN0aW9uKCl7XCIrci5yZW5kZXIrXCJ9LHN0YXRpY1JlbmRlckZuczpbXCIrci5zdGF0aWNSZW5kZXJGbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVyblwiZnVuY3Rpb24oKXtcIitlK1wifVwifSkuam9pbihcIixcIikrXCJdfVwifX0oZSx0KTtvJiYobis9bytcIixcIil9cmV0dXJuIG49bi5yZXBsYWNlKC8sJC8sXCJcIikrXCJ9XCIsZS5keW5hbWljQXR0cnMmJihuPVwiX2IoXCIrbisnLFwiJytlLnRhZysnXCIsJytHYShlLmR5bmFtaWNBdHRycykrXCIpXCIpLGUud3JhcERhdGEmJihuPWUud3JhcERhdGEobikpLGUud3JhcExpc3RlbmVycyYmKG49ZS53cmFwTGlzdGVuZXJzKG4pKSxufWZ1bmN0aW9uIEthKGUpe3JldHVybiAxPT09ZS50eXBlJiYoXCJzbG90XCI9PT1lLnRhZ3x8ZS5jaGlsZHJlbi5zb21lKEthKSl9ZnVuY3Rpb24gSmEoZSx0KXt2YXIgbj1lLmF0dHJzTWFwW1wic2xvdC1zY29wZVwiXTtpZihlLmlmJiYhZS5pZlByb2Nlc3NlZCYmIW4pcmV0dXJuIFVhKGUsdCxKYSxcIm51bGxcIik7aWYoZS5mb3ImJiFlLmZvclByb2Nlc3NlZClyZXR1cm4gemEoZSx0LEphKTt2YXIgcj1lLnNsb3RTY29wZT09PWNhP1wiXCI6U3RyaW5nKGUuc2xvdFNjb3BlKSxpPVwiZnVuY3Rpb24oXCIrcitcIil7cmV0dXJuIFwiKyhcInRlbXBsYXRlXCI9PT1lLnRhZz9lLmlmJiZuP1wiKFwiK2UuaWYrXCIpP1wiKyhxYShlLHQpfHxcInVuZGVmaW5lZFwiKStcIjp1bmRlZmluZWRcIjpxYShlLHQpfHxcInVuZGVmaW5lZFwiOlJhKGUsdCkpK1wifVwiLG89cj9cIlwiOlwiLHByb3h5OnRydWVcIjtyZXR1cm5cIntrZXk6XCIrKGUuc2xvdFRhcmdldHx8J1wiZGVmYXVsdFwiJykrXCIsZm46XCIraStvK1wifVwifWZ1bmN0aW9uIHFhKGUsdCxuLHIsaSl7dmFyIG89ZS5jaGlsZHJlbjtpZihvLmxlbmd0aCl7dmFyIGE9b1swXTtpZigxPT09by5sZW5ndGgmJmEuZm9yJiZcInRlbXBsYXRlXCIhPT1hLnRhZyYmXCJzbG90XCIhPT1hLnRhZyl7dmFyIHM9bj90Lm1heWJlQ29tcG9uZW50KGEpP1wiLDFcIjpcIiwwXCI6XCJcIjtyZXR1cm5cIlwiKyhyfHxSYSkoYSx0KStzfXZhciBjPW4/ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl07aWYoMT09PWkudHlwZSl7aWYoV2EoaSl8fGkuaWZDb25kaXRpb25zJiZpLmlmQ29uZGl0aW9ucy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBXYShlLmJsb2NrKX0pKXtuPTI7YnJlYWt9KHQoaSl8fGkuaWZDb25kaXRpb25zJiZpLmlmQ29uZGl0aW9ucy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUuYmxvY2spfSkpJiYobj0xKX19cmV0dXJuIG59KG8sdC5tYXliZUNvbXBvbmVudCk6MCx1PWl8fFphO3JldHVyblwiW1wiK28ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB1KGUsdCl9KS5qb2luKFwiLFwiKStcIl1cIisoYz9cIixcIitjOlwiXCIpfX1mdW5jdGlvbiBXYShlKXtyZXR1cm4gdm9pZCAwIT09ZS5mb3J8fFwidGVtcGxhdGVcIj09PWUudGFnfHxcInNsb3RcIj09PWUudGFnfWZ1bmN0aW9uIFphKGUsdCl7cmV0dXJuIDE9PT1lLnR5cGU/UmEoZSx0KTozPT09ZS50eXBlJiZlLmlzQ29tbWVudD8ocj1lLFwiX2UoXCIrSlNPTi5zdHJpbmdpZnkoci50ZXh0KStcIilcIik6XCJfdihcIisoMj09PShuPWUpLnR5cGU/bi5leHByZXNzaW9uOlhhKEpTT04uc3RyaW5naWZ5KG4udGV4dCkpKStcIilcIjt2YXIgbixyfWZ1bmN0aW9uIEdhKGUpe2Zvcih2YXIgdD1cIlwiLG49XCJcIixyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl0sbz1YYShpLnZhbHVlKTtpLmR5bmFtaWM/bis9aS5uYW1lK1wiLFwiK28rXCIsXCI6dCs9J1wiJytpLm5hbWUrJ1wiOicrbytcIixcIn1yZXR1cm4gdD1cIntcIit0LnNsaWNlKDAsLTEpK1wifVwiLG4/XCJfZChcIit0K1wiLFtcIituLnNsaWNlKDAsLTEpK1wiXSlcIjp0fWZ1bmN0aW9uIFhhKGUpe3JldHVybiBlLnJlcGxhY2UoL1xcdTIwMjgvZyxcIlxcXFx1MjAyOFwiKS5yZXBsYWNlKC9cXHUyMDI5L2csXCJcXFxcdTIwMjlcIil9bmV3IFJlZ0V4cChcIlxcXFxiXCIrXCJkbyxpZixmb3IsbGV0LG5ldyx0cnksdmFyLGNhc2UsZWxzZSx3aXRoLGF3YWl0LGJyZWFrLGNhdGNoLGNsYXNzLGNvbnN0LHN1cGVyLHRocm93LHdoaWxlLHlpZWxkLGRlbGV0ZSxleHBvcnQsaW1wb3J0LHJldHVybixzd2l0Y2gsZGVmYXVsdCxleHRlbmRzLGZpbmFsbHksY29udGludWUsZGVidWdnZXIsZnVuY3Rpb24sYXJndW1lbnRzXCIuc3BsaXQoXCIsXCIpLmpvaW4oXCJcXFxcYnxcXFxcYlwiKStcIlxcXFxiXCIpO2Z1bmN0aW9uIFlhKGUsdCl7dHJ5e3JldHVybiBuZXcgRnVuY3Rpb24oZSl9Y2F0Y2gobil7cmV0dXJuIHQucHVzaCh7ZXJyOm4sY29kZTplfSksU319ZnVuY3Rpb24gUWEoZSl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZnVuY3Rpb24obixyLGkpeyhyPUEoe30scikpLndhcm47ZGVsZXRlIHIud2Fybjt2YXIgbz1yLmRlbGltaXRlcnM/U3RyaW5nKHIuZGVsaW1pdGVycykrbjpuO2lmKHRbb10pcmV0dXJuIHRbb107dmFyIGE9ZShuLHIpLHM9e30sYz1bXTtyZXR1cm4gcy5yZW5kZXI9WWEoYS5yZW5kZXIsYykscy5zdGF0aWNSZW5kZXJGbnM9YS5zdGF0aWNSZW5kZXJGbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBZYShlLGMpfSksdFtvXT1zfX12YXIgZXMsdHMsbnM9KGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49bGEoZS50cmltKCksdCk7ITEhPT10Lm9wdGltaXplJiZrYShuLHQpO3ZhciByPVBhKG4sdCk7cmV0dXJue2FzdDpuLHJlbmRlcjpyLnJlbmRlcixzdGF0aWNSZW5kZXJGbnM6ci5zdGF0aWNSZW5kZXJGbnN9fSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9T2JqZWN0LmNyZWF0ZShlKSxpPVtdLG89W107aWYobilmb3IodmFyIGEgaW4gbi5tb2R1bGVzJiYoci5tb2R1bGVzPShlLm1vZHVsZXN8fFtdKS5jb25jYXQobi5tb2R1bGVzKSksbi5kaXJlY3RpdmVzJiYoci5kaXJlY3RpdmVzPUEoT2JqZWN0LmNyZWF0ZShlLmRpcmVjdGl2ZXN8fG51bGwpLG4uZGlyZWN0aXZlcykpLG4pXCJtb2R1bGVzXCIhPT1hJiZcImRpcmVjdGl2ZXNcIiE9PWEmJihyW2FdPW5bYV0pO3Iud2Fybj1mdW5jdGlvbihlLHQsbil7KG4/bzppKS5wdXNoKGUpfTt2YXIgcz1lcyh0LnRyaW0oKSxyKTtyZXR1cm4gcy5lcnJvcnM9aSxzLnRpcHM9byxzfXJldHVybntjb21waWxlOnQsY29tcGlsZVRvRnVuY3Rpb25zOlFhKHQpfX0pKENhKSxycz0obnMuY29tcGlsZSxucy5jb21waWxlVG9GdW5jdGlvbnMpO2Z1bmN0aW9uIGlzKGUpe3JldHVybih0cz10c3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuaW5uZXJIVE1MPWU/JzxhIGhyZWY9XCJcXG5cIi8+JzonPGRpdiBhPVwiXFxuXCIvPicsdHMuaW5uZXJIVE1MLmluZGV4T2YoXCImIzEwO1wiKT4wfXZhciBvcz0hIXomJmlzKCExKSxhcz0hIXomJmlzKCEwKSxzcz1nKGZ1bmN0aW9uKGUpe3ZhciB0PVluKGUpO3JldHVybiB0JiZ0LmlubmVySFRNTH0pLGNzPXduLnByb3RvdHlwZS4kbW91bnQ7d24ucHJvdG90eXBlLiRtb3VudD1mdW5jdGlvbihlLHQpe2lmKChlPWUmJlluKGUpKT09PWRvY3VtZW50LmJvZHl8fGU9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy4kb3B0aW9ucztpZighbi5yZW5kZXIpe3ZhciByPW4udGVtcGxhdGU7aWYocilpZihcInN0cmluZ1wiPT10eXBlb2YgcilcIiNcIj09PXIuY2hhckF0KDApJiYocj1zcyhyKSk7ZWxzZXtpZighci5ub2RlVHlwZSlyZXR1cm4gdGhpcztyPXIuaW5uZXJIVE1MfWVsc2UgZSYmKHI9ZnVuY3Rpb24oZSl7aWYoZS5vdXRlckhUTUwpcmV0dXJuIGUub3V0ZXJIVE1MO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoZS5jbG9uZU5vZGUoITApKSx0LmlubmVySFRNTH0oZSkpO2lmKHIpe3ZhciBpPXJzKHIse291dHB1dFNvdXJjZVJhbmdlOiExLHNob3VsZERlY29kZU5ld2xpbmVzOm9zLHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZjphcyxkZWxpbWl0ZXJzOm4uZGVsaW1pdGVycyxjb21tZW50czpuLmNvbW1lbnRzfSx0aGlzKSxvPWkucmVuZGVyLGE9aS5zdGF0aWNSZW5kZXJGbnM7bi5yZW5kZXI9byxuLnN0YXRpY1JlbmRlckZucz1hfX1yZXR1cm4gY3MuY2FsbCh0aGlzLGUsdCl9LHduLmNvbXBpbGU9cnMsbW9kdWxlLmV4cG9ydHM9d247IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3dbXCJqUXVlcnlcIl07IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0bG9hZGVkOiBmYWxzZSxcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG5cdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm5tZCA9IChtb2R1bGUpID0+IHtcblx0bW9kdWxlLnBhdGhzID0gW107XG5cdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0cmV0dXJuIG1vZHVsZTtcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgTmF2YmFySGFuZGxlciBmcm9tICdAY29tcG9uZW50cy9uYXZiYXItaGFuZGxlcic7XG5pbXBvcnQgUHJvZHVjdE1hcCBmcm9tICdAcGFnZXMvcHJvZHVjdC9wcm9kdWN0LW1hcCc7XG5cbmltcG9ydCBDYXRlZ29yaWVzTWFuYWdlciBmcm9tICdAcGFnZXMvcHJvZHVjdC9jb21wb25lbnRzL2NhdGVnb3JpZXMnO1xuaW1wb3J0IENvbWJpbmF0aW9uc01hbmFnZXIgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvZWRpdC9jb21iaW5hdGlvbnMtbWFuYWdlcic7XG5pbXBvcnQgQ3VzdG9taXphdGlvbnNNYW5hZ2VyIGZyb20gJ0BwYWdlcy9wcm9kdWN0L2VkaXQvY3VzdG9taXphdGlvbnMtbWFuYWdlcic7XG5pbXBvcnQgRmVhdHVyZVZhbHVlc01hbmFnZXIgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvZWRpdC9mZWF0dXJlLXZhbHVlcy1tYW5hZ2VyJztcbmltcG9ydCBQcm9kdWN0Rm9vdGVyTWFuYWdlciBmcm9tICdAcGFnZXMvcHJvZHVjdC9lZGl0L3Byb2R1Y3QtZm9vdGVyLW1hbmFnZXInO1xuaW1wb3J0IFByb2R1Y3RGb3JtTW9kZWwgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvZWRpdC9wcm9kdWN0LWZvcm0tbW9kZWwnO1xuaW1wb3J0IFByb2R1Y3RNb2R1bGVzTWFuYWdlciBmcm9tICdAcGFnZXMvcHJvZHVjdC9lZGl0L3Byb2R1Y3QtbW9kdWxlcy1tYW5hZ2VyJztcbmltcG9ydCBQcm9kdWN0UGFydGlhbFVwZGF0ZXIgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvZWRpdC9wcm9kdWN0LXBhcnRpYWwtdXBkYXRlcic7XG5pbXBvcnQgUHJvZHVjdFNFT01hbmFnZXIgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvZWRpdC9wcm9kdWN0LXNlby1tYW5hZ2VyJztcbmltcG9ydCBQcm9kdWN0U3VwcGxpZXJzTWFuYWdlciBmcm9tICdAcGFnZXMvcHJvZHVjdC9lZGl0L3Byb2R1Y3Qtc3VwcGxpZXJzLW1hbmFnZXInO1xuaW1wb3J0IFByb2R1Y3RUeXBlTWFuYWdlciBmcm9tICdAcGFnZXMvcHJvZHVjdC9lZGl0L3Byb2R1Y3QtdHlwZS1tYW5hZ2VyJztcbmltcG9ydCBWaXJ0dWFsUHJvZHVjdE1hbmFnZXIgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvZWRpdC92aXJ0dWFsLXByb2R1Y3QtbWFuYWdlcic7XG5cbmltcG9ydCBpbml0RHJvcHpvbmUgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9kcm9wem9uZSc7XG5pbXBvcnQgaW5pdFRhYnMgZnJvbSAnQHBhZ2VzL3Byb2R1Y3QvY29tcG9uZW50cy9uYXYtdGFicyc7XG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuJCgoKSA9PiB7XG4gIHdpbmRvdy5wcmVzdGFzaG9wLmNvbXBvbmVudC5pbml0Q29tcG9uZW50cyhbXG4gICAgJ1RyYW5zbGF0YWJsZUZpZWxkJyxcbiAgICAnVGlueU1DRUVkaXRvcicsXG4gICAgJ1RyYW5zbGF0YWJsZUlucHV0JyxcbiAgICAnRXZlbnRFbWl0dGVyJyxcbiAgICAnVGV4dFdpdGhMZW5ndGhDb3VudGVyJyxcbiAgXSk7XG5cbiAgY29uc3QgJHByb2R1Y3RGb3JtID0gJChQcm9kdWN0TWFwLnByb2R1Y3RGb3JtKTtcbiAgY29uc3QgcHJvZHVjdElkID0gcGFyc2VJbnQoJHByb2R1Y3RGb3JtLmRhdGEoJ3Byb2R1Y3RJZCcpLCAxMCk7XG4gIGNvbnN0IHByb2R1Y3RUeXBlID0gJHByb2R1Y3RGb3JtLmRhdGEoJ3Byb2R1Y3RUeXBlJyk7XG5cbiAgLy8gUmVzcG9uc2l2ZSBuYXZpZ2F0aW9uIHRhYnNcbiAgaW5pdFRhYnMoKTtcblxuICBjb25zdCB7ZXZlbnRFbWl0dGVyfSA9IHdpbmRvdy5wcmVzdGFzaG9wLmluc3RhbmNlO1xuXG4gIC8vIEluaXQgcHJvZHVjdCBtb2RlbCBhbG9uZyB3aXRoIGlucHV0IHdhdGNoaW5nIGFuZCBzeW5jaW5nXG4gIGNvbnN0IHByb2R1Y3RGb3JtTW9kZWwgPSBuZXcgUHJvZHVjdEZvcm1Nb2RlbCgkcHJvZHVjdEZvcm0sIGV2ZW50RW1pdHRlcik7XG5cbiAgaWYgKHByb2R1Y3RJZCAmJiBwcm9kdWN0VHlwZSA9PT0gUHJvZHVjdE1hcC5wcm9kdWN0VHlwZS5DT01CSU5BVElPTlMpIHtcbiAgICAvLyBDb21iaW5hdGlvbnMgbWFuYWdlciBtdXN0IGJlIGluaXRpYWxpemVkIEJFRk9SRSBuYXYgaGFuZGxlciwgb3IgaXQgd29uJ3QgdHJpZ2dlciB0aGUgcGFnaW5hdGlvbiBpZiB0aGUgdGFiIGlzXG4gICAgLy8gc2VsZWN0ZWQgb24gbG9hZCwgaXQgaXMgb25seSBpbml0aWFsaXplZCB3aGVuIHByb2R1Y3RJZCBleGlzdHMgdGhvdWdoIChlZGl0aW9uIG1vZGUpXG4gICAgbmV3IENvbWJpbmF0aW9uc01hbmFnZXIocHJvZHVjdElkKTtcbiAgfVxuXG4gIG5ldyBOYXZiYXJIYW5kbGVyKFByb2R1Y3RNYXAubmF2aWdhdGlvbkJhcik7XG4gIG5ldyBQcm9kdWN0U0VPTWFuYWdlcigpO1xuXG4gIC8vIFByb2R1Y3QgdHlwZSBoYXMgc3Ryb25nIGltcGFjdCBvbiB0aGUgcGFnZSByZW5kZXJpbmcgc28gd2hlbiBpdCBpcyBtb2RpZmllZCBpdCBtdXN0IGJlIHN1Ym1pdHRlZCByaWdodCBhd2F5XG4gIG5ldyBQcm9kdWN0VHlwZU1hbmFnZXIoJChQcm9kdWN0TWFwLnByb2R1Y3RUeXBlU2VsZWN0b3IpLCAkcHJvZHVjdEZvcm0pO1xuICBuZXcgQ2F0ZWdvcmllc01hbmFnZXIoZXZlbnRFbWl0dGVyKTtcbiAgbmV3IFByb2R1Y3RGb290ZXJNYW5hZ2VyKCk7XG4gIG5ldyBQcm9kdWN0TW9kdWxlc01hbmFnZXIoKTtcblxuICBjb25zdCAkcHJvZHVjdEZvcm1TdWJtaXRCdXR0b24gPSAkKFByb2R1Y3RNYXAucHJvZHVjdEZvcm1TdWJtaXRCdXR0b24pO1xuICBuZXcgUHJvZHVjdFBhcnRpYWxVcGRhdGVyKFxuICAgIGV2ZW50RW1pdHRlcixcbiAgICAkcHJvZHVjdEZvcm0sXG4gICAgJHByb2R1Y3RGb3JtU3VibWl0QnV0dG9uLFxuICApLndhdGNoKCk7XG5cbiAgLy8gRm9ybSBoYXMgbm8gcHJvZHVjdElkIGRhdGEgbWVhbnMgdGhhdCB3ZSBhcmUgaW4gY3JlYXRpb24gbW9kZVxuICBpZiAoIXByb2R1Y3RJZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZyb20gaGVyZSB3ZSBpbml0IGNvbXBvbmVudCBzcGVjaWZpYyB0byBlZGl0aW9uXG4gIGluaXREcm9wem9uZShQcm9kdWN0TWFwLmRyb3B6b25lSW1hZ2VzQ29udGFpbmVyKTtcblxuICBuZXcgRmVhdHVyZVZhbHVlc01hbmFnZXIoZXZlbnRFbWl0dGVyKTtcbiAgbmV3IEN1c3RvbWl6YXRpb25zTWFuYWdlcigpO1xuXG4gIGlmIChwcm9kdWN0VHlwZSAhPT0gUHJvZHVjdE1hcC5wcm9kdWN0VHlwZS5DT01CSU5BVElPTlMpIHtcbiAgICBuZXcgUHJvZHVjdFN1cHBsaWVyc01hbmFnZXIoUHJvZHVjdE1hcC5zdXBwbGllcnMucHJvZHVjdFN1cHBsaWVycywgdHJ1ZSk7XG4gIH1cbiAgaWYgKHByb2R1Y3RUeXBlID09PSBQcm9kdWN0TWFwLnByb2R1Y3RUeXBlLlZJUlRVQUwpIHtcbiAgICBuZXcgVmlydHVhbFByb2R1Y3RNYW5hZ2VyKHByb2R1Y3RGb3JtTW9kZWwpO1xuICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=