Files
rspade_system/storage-broken/rsx-tmp/jqhtml-cache/5fe1c656af8d663816eb1b44f6f88b2a_1762928353.js
root 77b4d10af8 Refactor filename naming system and apply convention-based renames
Standardize settings file naming and relocate documentation files
Fix code quality violations from rsx:check
Reorganize user_management directory into logical subdirectories
Move Quill Bundle to core and align with Tom Select pattern
Simplify Site Settings page to focus on core site information
Complete Phase 5: Multi-tenant authentication with login flow and site selection
Add route query parameter rule and synchronize filename validation logic
Fix critical bug in UpdateNpmCommand causing missing JavaScript stubs
Implement filename convention rule and resolve VS Code auto-rename conflict
Implement js-sanitizer RPC server to eliminate 900+ Node.js process spawns
Implement RPC server architecture for JavaScript parsing
WIP: Add RPC server infrastructure for JS parsing (partial implementation)
Update jqhtml terminology from destroy to stop, fix datagrid DOM preservation
Add JQHTML-CLASS-01 rule and fix redundant class names
Improve code quality rules and resolve violations
Remove legacy fatal error format in favor of unified 'fatal' error type
Filter internal keys from window.rsxapp output
Update button styling and comprehensive form/modal documentation
Add conditional fly-in animation for modals
Fix non-deterministic bundle compilation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 19:10:02 +00:00

238 lines
31 KiB
JavaScript
Executable File

// Compiled from: Sample_Datagrid_Component.jqhtml
(function() {
'use strict';
const template_Sample_Datagrid_Component = {
_jqhtml_version: '2.2.185',
name: 'Sample_Datagrid_Component',
tag: 'div',
defaultAttributes: {"class": "card"},
render: function render(data, args, content, jqhtml) { let _output = []; const _cid = this._cid; const that = this;
_output.push(" ");
_output.push({tag: ["div", {"class": "card-header bg-light"}, false]});
_output.push(" ");_output.push({tag: ["div", {"class": "d-flex justify-content-between align-items-center"}, false]});
_output.push(" ");_output.push({tag: ["h5", {"class": "mb-0"}, false]}); (() => { const result = this.args.title || 'Data Table' ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push("</h5>");
_output.push(" ");_output.push({tag: ["small", {"class": "text-muted"}, false]});
_output.push(" "); _output.push(" Showing "); (() => { const result = this.args.showing || 10 ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push(" of "); (() => { const result = this.args.total || 100 ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push(" "); (() => { const result = this.args.entity_name || 'items' ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })();
_output.push(" "); _output.push("</small>");
_output.push("</div>");
_output.push("</div>");
_output.push({tag: ["div", {"class": "card-body p-0"}, false]});
_output.push(" ");_output.push({tag: ["div", {"class": "table-responsive"}, false]});
_output.push(" ");_output.push({tag: ["table", {"class": "table table-hover mb-0"}, false]});
_output.push(" ");
_output.push({tag: ["thead", {}, false]});
_output.push(" ");_output.push({tag: ["tr", {}, false]});
_output.push(" "); if (this.args.selectable) {
_output.push(" ");_output.push({tag: ["th", {"style": "width: 40px;"}, false]});
_output.push(" ");_output.push({tag: ["input", {"type": "checkbox", "class": "form-check-input", "id": "select_all" + ":" + this._cid, "data-id": "select_all"}, true]}); _output.push("</input>");
_output.push(" "); _output.push("</th>");
}
_output.push(" ");
if (this.args.columns && this.args.columns.length > 0) {
_output.push(" "); for (let column of this.args.columns) {
_output.push(" ");_output.push({tag: ["th", {"style": ((column.width ? 'width: '+column.width : ''))}, false]});
_output.push(" "); (() => { const result = column.label ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })();
_output.push(" "); _output.push("</th>");
}
_output.push(" "); } else {
_output.push(" ");
_output.push({tag: ["th", {}, false]}); _output.push("ID"); _output.push("</th>");
_output.push(" ");_output.push({tag: ["th", {}, false]}); _output.push("Name"); _output.push("</th>");
_output.push(" ");_output.push({tag: ["th", {}, false]}); _output.push("Company"); _output.push("</th>");
_output.push(" ");_output.push({tag: ["th", {}, false]}); _output.push("Email"); _output.push("</th>");
_output.push(" ");_output.push({tag: ["th", {}, false]}); _output.push("Phone"); _output.push("</th>");
_output.push(" ");_output.push({tag: ["th", {}, false]}); _output.push("Status"); _output.push("</th>");
_output.push(" ");_output.push({tag: ["th", {}, false]}); _output.push("Created"); _output.push("</th>");
_output.push(" ");_output.push({tag: ["th", {"style": "width: 100px;"}, false]}); _output.push("Actions"); _output.push("</th>");
_output.push(" "); }
_output.push(" "); _output.push("</tr>");
_output.push("</thead>");
_output.push({tag: ["tbody", {}, false]});
_output.push(" ");
if (Object.keys(this.data).length === 0) {
_output.push(" ");
for (let i = 0; i < (this.args.placeholder_rows || 10); i++) {
_output.push(" ");_output.push({tag: ["tr", {}, false]});
_output.push(" "); if (this.args.selectable) {
_output.push(" ");_output.push({tag: ["td", {}, false]});_output.push({tag: ["input", {"type": "checkbox", "class": "form-check-input", "disabled": "true"}, true]}); _output.push("</input>"); _output.push("</td>");
_output.push(" "); }
_output.push(" "); for (let j = 0; j < (this.args.columns ? this.args.columns.length : 8); j++) {
_output.push(" ");_output.push({tag: ["td", {}, false]});
_output.push(" ");_output.push({tag: ["div", {"class": "placeholder-glow"}, false]});
_output.push(" ");_output.push({tag: ["span", {"class": "placeholder col-" + (Math.floor(Math.random() * 8) + 4)}, false]}); _output.push("</span>");
_output.push(" "); _output.push("</div>");
_output.push("</td>");
}
_output.push(" "); _output.push("</tr>");
}
_output.push(" "); } else if (this.data.rows && this.data.rows.length > 0) {
_output.push(" ");
for (let row of this.data.rows) {
_output.push(" ");_output.push({tag: ["tr", {}, false]});
_output.push(" "); if (this.args.selectable) {
_output.push(" ");_output.push({tag: ["td", {}, false]});_output.push({tag: ["input", {"type": "checkbox", "class": "form-check-input", "id": row.id + ":" + this._cid, "data-id": row.id}, true]}); _output.push("</input>"); _output.push("</td>");
_output.push(" "); }
_output.push(" ");
if (this.args.columns) {
_output.push(" "); for (let column of this.args.columns) {
_output.push(" ");_output.push({tag: ["td", {}, false]});
_output.push(" "); if (column.type === 'badge') {
_output.push(" ");
_output.push({tag: ["span", {"class": "badge bg-" + (row[column.field + '_color'] || 'secondary')}, false]});
_output.push(" "); (() => { const result = row[column.field] ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })();
_output.push(" "); _output.push("</span>");
} else if (column.type === 'actions') {
_output.push(" ");
_output.push({tag: ["div", {"class": "btn-group btn-group-sm"}, false]});
_output.push(" "); if (this.args.view_url) {
_output.push(" ");_output.push({tag: ["a", {"href": (this.args.view_url.replace('{id}', row.id)), "class": "btn btn-primary", "title": "View"}, false]});
_output.push(" ");_output.push({tag: ["i", {"class": "bi bi-eye"}, false]}); _output.push("</i>");
_output.push(" "); _output.push("</a>");
}
_output.push(" "); if (this.args.edit_url) {
_output.push(" ");_output.push({tag: ["a", {"href": (this.args.edit_url.replace('{id}', row.id)), "class": "btn btn-secondary", "title": "Edit"}, false]});
_output.push(" ");_output.push({tag: ["i", {"class": "bi bi-pencil"}, false]}); _output.push("</i>");
_output.push(" "); _output.push("</a>");
}
_output.push(" "); if (this.args.allow_delete) {
_output.push(" ");_output.push({tag: ["button", {"class": "btn btn-danger", "id": "delete_button" + ":" + this._cid, "data-id": "delete_button", "title": "Delete"}, false]});
_output.push(" ");_output.push({tag: ["i", {"class": "bi bi-trash"}, false]}); _output.push("</i>");
_output.push(" "); _output.push("</button>");
}
_output.push(" "); _output.push("</div>");
} else {
_output.push(" ");
(() => { const result = row[column.field] ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })();
_output.push(" "); }
_output.push(" "); _output.push("</td>");
}
_output.push(" "); } else {
_output.push(" ");
_output.push({tag: ["td", {}, false]}); (() => { const result = row.id ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push("</td>");
_output.push(" ");_output.push({tag: ["td", {}, false]}); (() => { const result = row.name ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push("</td>");
_output.push(" ");_output.push({tag: ["td", {}, false]}); (() => { const result = row.company ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push("</td>");
_output.push(" ");_output.push({tag: ["td", {}, false]}); (() => { const result = row.email ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push("</td>");
_output.push(" ");_output.push({tag: ["td", {}, false]}); (() => { const result = row.phone ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push("</td>");
_output.push(" ");_output.push({tag: ["td", {}, false]});
_output.push(" ");_output.push({tag: ["span", {"class": "badge bg-" + (row.status_color || 'success')}, false]});
_output.push(" "); (() => { const result = row.status ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })();
_output.push(" "); _output.push("</span>");
_output.push("</td>");
_output.push({tag: ["td", {}, false]}); (() => { const result = row.created ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push("</td>");
_output.push(" ");_output.push({tag: ["td", {}, false]});
_output.push(" ");_output.push({tag: ["div", {"class": "btn-group btn-group-sm"}, false]});
_output.push(" ");_output.push({tag: ["button", {"class": "btn btn-primary", "title": "View"}, false]});
_output.push(" ");_output.push({tag: ["i", {"class": "bi bi-eye"}, false]}); _output.push("</i>");
_output.push(" "); _output.push("</button>");
_output.push({tag: ["button", {"class": "btn btn-secondary", "title": "Edit"}, false]});
_output.push(" ");_output.push({tag: ["i", {"class": "bi bi-pencil"}, false]}); _output.push("</i>");
_output.push(" "); _output.push("</button>");
_output.push({tag: ["button", {"class": "btn btn-danger", "title": "Delete"}, false]});
_output.push(" ");_output.push({tag: ["i", {"class": "bi bi-trash"}, false]}); _output.push("</i>");
_output.push(" "); _output.push("</button>");
_output.push("</div>");
_output.push("</td>");
}
_output.push(" "); _output.push("</tr>");
}
_output.push(" "); } else {
_output.push(" ");
_output.push({tag: ["tr", {}, false]});
_output.push(" ");_output.push({tag: ["td", {"colspan": ((this.args.selectable ? 1 : 0) + (this.args.columns ? this.args.columns.length : 8)), "class": "text-center text-muted py-5"}, false]});
_output.push(" ");_output.push({tag: ["i", {"class": "bi bi-inbox fs-1 d-block mb-2"}, false]}); _output.push("</i>");
_output.push(" "); _output.push(" No "); (() => { const result = this.args.entity_name || 'items' ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push(" found "); _output.push("</td>");
_output.push(" "); _output.push("</tr>");
}
_output.push(" "); _output.push("</tbody>");
_output.push("</table>");
_output.push("</div>");
_output.push("</div>");
if (this.args.pagination !== false && Object.keys(this.data).length > 0) {
_output.push(" ");_output.push({tag: ["div", {"class": "card-footer bg-light"}, false]});
_output.push(" ");_output.push({tag: ["div", {"class": "d-flex justify-content-between align-items-center"}, false]});
_output.push(" ");_output.push({tag: ["div", {}, false]});
_output.push(" ");_output.push({tag: ["small", {"class": "text-muted"}, false]});
_output.push(" "); _output.push(" Showing "); (() => { const result = this.data.pagination?.from || 1 ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push(" to "); (() => { const result = this.data.pagination?.to || 10 ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })();
_output.push(" "); _output.push(" of "); (() => { const result = this.data.pagination?.total || 100 ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push(" entries "); _output.push("</small>");
_output.push(" "); _output.push("</div>");
_output.push({tag: ["nav", {}, false]});
_output.push(" ");_output.push({tag: ["ul", {"class": "pagination pagination-sm mb-0"}, false]});
_output.push(" ");
_output.push({tag: ["li", {"class": "page-item" + (this.data.pagination?.current_page === 1 ? 'disabled' : '')}, false]});
_output.push(" ");_output.push({tag: ["a", {"class": "page-link", "href": "#", "tabindex": "-1", "id": "prev_page" + ":" + this._cid, "data-id": "prev_page"}, false]}); _output.push("Previous"); _output.push("</a>");
_output.push(" "); _output.push("</li>");
if (this.data.pagination?.pages) {
_output.push(" "); for (let page of this.data.pagination.pages) {
_output.push(" "); if (page === '...') {
_output.push(" ");_output.push({tag: ["li", {"class": "page-item disabled"}, false]});_output.push({tag: ["a", {"class": "page-link", "href": "#"}, false]}); _output.push("..."); _output.push("</a>"); _output.push("</li>");
_output.push(" "); } else {
_output.push(" ");_output.push({tag: ["li", {"class": "page-item" + (page === this.data.pagination.current_page ? 'active' : '')}, false]});
_output.push(" ");_output.push({tag: ["a", {"class": "page-link", "href": "#", "data-page": (page)}, false]}); (() => { const result = page ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push("</a>");
_output.push(" "); _output.push("</li>");
}
_output.push(" "); }
_output.push(" "); } else {
_output.push(" ");
for (let i = 1; i <= 5; i++) {
_output.push(" ");_output.push({tag: ["li", {"class": "page-item" + (i === 1 ? 'active' : '')}, false]});
_output.push(" ");_output.push({tag: ["a", {"class": "page-link", "href": "#", "data-page": (i)}, false]}); (() => { const result = i ; if (Array.isArray(result)) { if (result.length === 2 && Array.isArray(result[0])) { _output.push(...result[0]); } else { _output.push(...result); } } else { _output.push(jqhtml.escape_html(result)); } })(); _output.push("</a>");
_output.push(" "); _output.push("</li>");
}
_output.push(" "); }
_output.push(" ");
_output.push({tag: ["li", {"class": "page-item" + (this.data.pagination?.current_page === this.data.pagination?.total_pages ? 'disabled' : '')}, false]});
_output.push(" ");_output.push({tag: ["a", {"class": "page-link", "href": "#", "id": "next_page" + ":" + this._cid, "data-id": "next_page"}, false]}); _output.push("Next"); _output.push("</a>");
_output.push(" "); _output.push("</li>");
_output.push("</ul>");
_output.push("</nav>");
_output.push("</div>");
_output.push("</div>");
}
_output.push(" "); return [_output, this]; },
dependencies: []
};
// Self-register with jqhtml runtime
// Must use window.jqhtml since we're in bundle scope
if (!window.jqhtml) {
throw new Error('FATAL: window.jqhtml is not defined. The jqhtml runtime must be loaded before registering templates.');
}
// Auto-register following standard jqhtml pattern
window.jqhtml.register_template(template_Sample_Datagrid_Component);
})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNhbXBsZV9EYXRhZ3JpZF9Db21wb25lbnQuanFodG1sIl0sInNvdXJjZXNDb250ZW50IjpbIjwlLS1cbiAgU2FtcGxlIERhdGFncmlkIENvbXBvbmVudFxuICBEZW1vbnN0cmF0ZXMgYSBmdWxsLWZlYXR1cmVkIGRhdGEgdGFibGUgd2l0aDpcbiAgLSBTZWxlY3RhYmxlIHJvd3NcbiAgLSBDb2x1bW4gaGVhZGVyc1xuICAtIEFjdGlvbiBidXR0b25zXG4gIC0gUGFnaW5hdGlvblxuICAtIFN0YXR1cyBiYWRnZXNcbiAgLSBVc2luZyBsb29wcyB0byBhdm9pZCByZXBldGl0aW9uXG4tLSU+XG5cbjxEZWZpbmU6U2FtcGxlX0RhdGFncmlkX0NvbXBvbmVudCBjbGFzcz1cImNhcmRcIj5cbiAgPCUtLSBDYXJkIEhlYWRlciB3aXRoIFRpdGxlIGFuZCBDb3VudCAtLSU+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBiZy1saWdodFwiPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICA8aDUgY2xhc3M9XCJtYi0wXCI+PCU9IHRoaXMuYXJncy50aXRsZSB8fCAnRGF0YSBUYWJsZScgJT48L2g1PlxuICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZFwiPlxuICAgICAgICBTaG93aW5nIDwlPSB0aGlzLmFyZ3Muc2hvd2luZyB8fCAxMCAlPiBvZiA8JT0gdGhpcy5hcmdzLnRvdGFsIHx8IDEwMCAlPiA8JT0gdGhpcy5hcmdzLmVudGl0eV9uYW1lIHx8ICdpdGVtcycgJT5cbiAgICAgIDwvc21hbGw+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwlLS0gVGFibGUgLS0lPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHAtMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ob3ZlciBtYi0wXCI+XG4gICAgICAgIDwlLS0gVGFibGUgSGVhZGVyIC0tJT5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDwlIGlmICh0aGlzLmFyZ3Muc2VsZWN0YWJsZSk6ICU+XG4gICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiA0MHB4O1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiAkaWQ9XCJzZWxlY3RfYWxsXCIgLz5cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDwlIGVuZGlmOyAlPlxuXG4gICAgICAgICAgICA8JS0tIENvbHVtbiBIZWFkZXJzIChmcm9tIGFyZ3MuY29sdW1ucyBhcnJheSkgLS0lPlxuICAgICAgICAgICAgPCUgaWYgKHRoaXMuYXJncy5jb2x1bW5zICYmIHRoaXMuYXJncy5jb2x1bW5zLmxlbmd0aCA+IDApIHsgJT5cbiAgICAgICAgICAgICAgPCUgZm9yIChsZXQgY29sdW1uIG9mIHRoaXMuYXJncy5jb2x1bW5zKSB7ICU+XG4gICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwiPCU9IChjb2x1bW4ud2lkdGggPyAnd2lkdGg6ICcrY29sdW1uLndpZHRoIDogJycpICU+XCI+XG4gICAgICAgICAgICAgICAgICA8JT0gY29sdW1uLmxhYmVsICU+XG4gICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPCUgfSAlPlxuICAgICAgICAgICAgPCUgfSBlbHNlIHsgJT5cbiAgICAgICAgICAgICAgPCUtLSBEZWZhdWx0IGNvbHVtbnMgaWYgbm9uZSBzcGVjaWZpZWQgLS0lPlxuICAgICAgICAgICAgICA8dGg+SUQ8L3RoPlxuICAgICAgICAgICAgICA8dGg+TmFtZTwvdGg+XG4gICAgICAgICAgICAgIDx0aD5Db21wYW55PC90aD5cbiAgICAgICAgICAgICAgPHRoPkVtYWlsPC90aD5cbiAgICAgICAgICAgICAgPHRoPlBob25lPC90aD5cbiAgICAgICAgICAgICAgPHRoPlN0YXR1czwvdGg+XG4gICAgICAgICAgICAgIDx0aD5DcmVhdGVkPC90aD5cbiAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6IDEwMHB4O1wiPkFjdGlvbnM8L3RoPlxuICAgICAgICAgICAgPCUgfSAlPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG5cbiAgICAgICAgPCUtLSBUYWJsZSBCb2R5IC0tJT5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIDwlLS0gQ2hlY2sgaWYgd2UgaGF2ZSByZWFsIGRhdGEgbG9hZGVkIC0tJT5cbiAgICAgICAgICA8JSBpZiAoT2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGggPT09IDApIHsgJT5cbiAgICAgICAgICAgIDwlLS0gTG9hZGluZyBzdGF0ZSAtIGdlbmVyYXRlIHBsYWNlaG9sZGVyIHJvd3MgLS0lPlxuICAgICAgICAgICAgPCUgZm9yIChsZXQgaSA9IDA7IGkgPCAodGhpcy5hcmdzLnBsYWNlaG9sZGVyX3Jvd3MgfHwgMTApOyBpKyspIHsgJT5cbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgIDwlIGlmICh0aGlzLmFyZ3Muc2VsZWN0YWJsZSkgeyAlPlxuICAgICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBkaXNhYmxlZCAvPjwvdGQ+XG4gICAgICAgICAgICAgICAgPCUgfSAlPlxuICAgICAgICAgICAgICAgIDwlIGZvciAobGV0IGogPSAwOyBqIDwgKHRoaXMuYXJncy5jb2x1bW5zID8gdGhpcy5hcmdzLmNvbHVtbnMubGVuZ3RoIDogOCk7IGorKykgeyAlPlxuICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGxhY2Vob2xkZXItZ2xvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGxhY2Vob2xkZXIgY29sLTwlPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA4KSArIDQgJT5cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8JSB9ICU+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8JSB9ICU+XG4gICAgICAgICAgPCUgfSBlbHNlIGlmICh0aGlzLmRhdGEucm93cyAmJiB0aGlzLmRhdGEucm93cy5sZW5ndGggPiAwKSB7ICU+XG4gICAgICAgICAgICA8JS0tIFJlYWwgZGF0YSByb3dzIC0tJT5cbiAgICAgICAgICAgIDwlIGZvciAobGV0IHJvdyBvZiB0aGlzLmRhdGEucm93cykgeyAlPlxuICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgPCUgaWYgKHRoaXMuYXJncy5zZWxlY3RhYmxlKSB7ICU+XG4gICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGRhdGEtaWQ9XCI8JT0gcm93LmlkICU+XCIgLz48L3RkPlxuICAgICAgICAgICAgICAgIDwlIH0gJT5cblxuICAgICAgICAgICAgICAgIDwlLS0gUmVuZGVyIGNlbGxzIGJhc2VkIG9uIGNvbHVtbnMgZGVmaW5pdGlvbiAtLSU+XG4gICAgICAgICAgICAgICAgPCUgaWYgKHRoaXMuYXJncy5jb2x1bW5zKSB7ICU+XG4gICAgICAgICAgICAgICAgICA8JSBmb3IgKGxldCBjb2x1bW4gb2YgdGhpcy5hcmdzLmNvbHVtbnMpIHsgJT5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgIDwlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2JhZGdlJykgeyAlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCUtLSBSZW5kZXIgYXMgYmFkZ2UgLS0lPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy08JT0gcm93W2NvbHVtbi5maWVsZCArICdfY29sb3InXSB8fCAnc2Vjb25kYXJ5JyAlPlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8JT0gcm93W2NvbHVtbi5maWVsZF0gJT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8JSB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYWN0aW9ucycpIHsgJT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwlLS0gQWN0aW9uIGJ1dHRvbnMgLS0lPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBidG4tZ3JvdXAtc21cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCUgaWYgKHRoaXMuYXJncy52aWV3X3VybCkgeyAlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI8JT0gdGhpcy5hcmdzLnZpZXdfdXJsLnJlcGxhY2UoJ3tpZH0nLCByb3cuaWQpICU+XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJWaWV3XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWV5ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwlIH0gJT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCUgaWYgKHRoaXMuYXJncy5lZGl0X3VybCkgeyAlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI8JT0gdGhpcy5hcmdzLmVkaXRfdXJsLnJlcGxhY2UoJ3tpZH0nLCByb3cuaWQpICU+XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkVkaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktcGVuY2lsXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCUgfSAlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8JSBpZiAodGhpcy5hcmdzLmFsbG93X2RlbGV0ZSkgeyAlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWlkPVwiPCU9IHJvdy5pZCAlPlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWQ9XCJkZWxldGVfYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiRGVsZXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXRyYXNoXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8JSB9ICU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8JSB9IGVsc2UgeyAlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCUtLSBSZWd1bGFyIHRleHQgY2VsbCAtLSU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8JT0gcm93W2NvbHVtbi5maWVsZF0gJT5cbiAgICAgICAgICAgICAgICAgICAgICA8JSB9ICU+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8JSB9ICU+XG4gICAgICAgICAgICAgICAgPCUgfSBlbHNlIHsgJT5cbiAgICAgICAgICAgICAgICAgIDwlLS0gRGVmYXVsdCBjZWxsIHJlbmRlcmluZyB3aXRob3V0IGNvbHVtbiBkZWZpbml0aW9ucyAtLSU+XG4gICAgICAgICAgICAgICAgICA8dGQ+PCU9IHJvdy5pZCAlPjwvdGQ+XG4gICAgICAgICAgICAgICAgICA8dGQ+PCU9IHJvdy5uYW1lICU+PC90ZD5cbiAgICAgICAgICAgICAgICAgIDx0ZD48JT0gcm93LmNvbXBhbnkgJT48L3RkPlxuICAgICAgICAgICAgICAgICAgPHRkPjwlPSByb3cuZW1haWwgJT48L3RkPlxuICAgICAgICAgICAgICAgICAgPHRkPjwlPSByb3cucGhvbmUgJT48L3RkPlxuICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJnLTwlPSByb3cuc3RhdHVzX2NvbG9yIHx8ICdzdWNjZXNzJyAlPlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwlPSByb3cuc3RhdHVzICU+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8dGQ+PCU9IHJvdy5jcmVhdGVkICU+PC90ZD5cbiAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBidG4tZ3JvdXAtc21cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdGl0bGU9XCJWaWV3XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWV5ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiB0aXRsZT1cIkVkaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktcGVuY2lsXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIHRpdGxlPVwiRGVsZXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXRyYXNoXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPCUgfSAlPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPCUgfSAlPlxuICAgICAgICAgIDwlIH0gZWxzZSB7ICU+XG4gICAgICAgICAgICA8JS0tIEVtcHR5IHN0YXRlIC0tJT5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI8JT0gKHRoaXMuYXJncy5zZWxlY3RhYmxlID8gMSA6IDApICsgKHRoaXMuYXJncy5jb2x1bW5zID8gdGhpcy5hcmdzLmNvbHVtbnMubGVuZ3RoIDogOCkgJT5cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWNlbnRlciB0ZXh0LW11dGVkIHB5LTVcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWluYm94IGZzLTEgZC1ibG9jayBtYi0yXCI+PC9pPlxuICAgICAgICAgICAgICAgIE5vIDwlPSB0aGlzLmFyZ3MuZW50aXR5X25hbWUgfHwgJ2l0ZW1zJyAlPiBmb3VuZFxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8JSB9ICU+XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8JS0tIFBhZ2luYXRpb24gRm9vdGVyIC0tJT5cbiAgPCUgaWYgKHRoaXMuYXJncy5wYWdpbmF0aW9uICE9PSBmYWxzZSAmJiBPYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aCA+IDApIHsgJT5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYmctbGlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZFwiPlxuICAgICAgICAgICAgU2hvd2luZyA8JT0gdGhpcy5kYXRhLnBhZ2luYXRpb24/LmZyb20gfHwgMSAlPiB0byA8JT0gdGhpcy5kYXRhLnBhZ2luYXRpb24/LnRvIHx8IDEwICU+XG4gICAgICAgICAgICBvZiA8JT0gdGhpcy5kYXRhLnBhZ2luYXRpb24/LnRvdGFsIHx8IDEwMCAlPiBlbnRyaWVzXG4gICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuYXY+XG4gICAgICAgICAgPHVsIGNsYXNzPVwicGFnaW5hdGlvbiBwYWdpbmF0aW9uLXNtIG1iLTBcIj5cbiAgICAgICAgICAgIDwlLS0gUHJldmlvdXMgQnV0dG9uIC0tJT5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbSA8JT0gdGhpcy5kYXRhLnBhZ2luYXRpb24/LmN1cnJlbnRfcGFnZSA9PT0gMSA/ICdkaXNhYmxlZCcgOiAnJyAlPlwiPlxuICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgdGFiaW5kZXg9XCItMVwiICRpZD1cInByZXZfcGFnZVwiPlByZXZpb3VzPC9hPlxuICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgPCUtLSBQYWdlIE51bWJlcnMgLS0lPlxuICAgICAgICAgICAgPCUgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uPy5wYWdlcykgeyAlPlxuICAgICAgICAgICAgICA8JSBmb3IgKGxldCBwYWdlIG9mIHRoaXMuZGF0YS5wYWdpbmF0aW9uLnBhZ2VzKSB7ICU+XG4gICAgICAgICAgICAgICAgPCUgaWYgKHBhZ2UgPT09ICcuLi4nKSB7ICU+XG4gICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gZGlzYWJsZWRcIj48YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCI+Li4uPC9hPjwvbGk+XG4gICAgICAgICAgICAgICAgPCUgfSBlbHNlIHsgJT5cbiAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbSA8JT0gcGFnZSA9PT0gdGhpcy5kYXRhLnBhZ2luYXRpb24uY3VycmVudF9wYWdlID8gJ2FjdGl2ZScgOiAnJyAlPlwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgZGF0YS1wYWdlPVwiPCU9IHBhZ2UgJT5cIj48JT0gcGFnZSAlPjwvYT5cbiAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPCUgfSAlPlxuICAgICAgICAgICAgICA8JSB9ICU+XG4gICAgICAgICAgICA8JSB9IGVsc2UgeyAlPlxuICAgICAgICAgICAgICA8JS0tIEdlbmVyYXRlIDUgcGFnZSBidXR0b25zIGlmIHBhZ2luYXRpb24gZGF0YSBub3QgZnVsbHkgbG9hZGVkIC0tJT5cbiAgICAgICAgICAgICAgPCUgZm9yIChsZXQgaSA9IDE7IGkgPD0gNTsgaSsrKSB7ICU+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIDwlPSBpID09PSAxID8gJ2FjdGl2ZScgOiAnJyAlPlwiPlxuICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiI1wiIGRhdGEtcGFnZT1cIjwlPSBpICU+XCI+PCU9IGkgJT48L2E+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPCUgfSAlPlxuICAgICAgICAgICAgPCUgfSAlPlxuXG4gICAgICAgICAgICA8JS0tIE5leHQgQnV0dG9uIC0tJT5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbSA8JT0gdGhpcy5kYXRhLnBhZ2luYXRpb24/LmN1cnJlbnRfcGFnZSA9PT0gdGhpcy5kYXRhLnBhZ2luYXRpb24/LnRvdGFsX3BhZ2VzID8gJ2Rpc2FibGVkJyA6ICcnICU+XCI+XG4gICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiAkaWQ9XCJuZXh0X3BhZ2VcIj5OZXh0PC9hPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L25hdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8JSB9ICU+XG48L0RlZmluZTpTYW1wbGVfRGF0YWdyaWRfQ29tcG9uZW50PlxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBIiwibmFtZXMiOltdfQ==