diff --git a/.jshintrc b/.jshintrc
index 5582195ae..74c9584db 100644
--- a/.jshintrc
+++ b/.jshintrc
@@ -13,6 +13,7 @@
"_": false,
"t": false,
"bootstrap": false,
+ "Diff3": false,
"rbush": false,
"JXON": false,
"osmAuth": false,
diff --git a/Makefile b/Makefile
index e697a7544..3a36953af 100644
--- a/Makefile
+++ b/Makefile
@@ -29,6 +29,7 @@ dist/iD.js: \
js/lib/d3.typeahead.js \
js/lib/d3.curtain.js \
js/lib/d3.value.js \
+ js/lib/diff3.js \
js/lib/jxon.js \
js/lib/lodash.js \
js/lib/osmauth.js \
diff --git a/css/app.css b/css/app.css
index 103ca75a8..8b9e5e6ec 100644
--- a/css/app.css
+++ b/css/app.css
@@ -140,10 +140,6 @@ strong {
a:visited, a {
color: #7092ff;
- -webkit-transition: all 100ms;
- -moz-transition: all 100ms;
- -o-transition: all 100ms;
- transition: all 100ms;
}
a:hover {
@@ -172,10 +168,6 @@ input[type=email] {
width: 100%;
border-radius:4px;
text-overflow: ellipsis;
- -webkit-transition: all 200ms;
- -moz-transition: all 200ms;
- -o-transition: all 200ms;
- transition: all 200ms;
}
textarea:focus,
@@ -247,9 +239,6 @@ ul li { list-style: none;}
background-color: white;
color: #7092FF;
cursor: pointer;
- -moz-transition: all 100ms;
- -o-transition: all 100ms;
- transition: all 100ms;
}
.toggle-list > label:hover {
@@ -358,11 +347,6 @@ button {
display: inline-block;
height:40px;
border-radius:4px;
- /* Crashes Safari: https://github.com/openstreetmap/iD/issues/1188 */
- /*-webkit-transition: all 100ms;*/
- -moz-transition: all 100ms;
- -o-transition: all 100ms;
- transition: all 100ms;
}
button:focus,
@@ -418,6 +402,10 @@ button.minor:hover {
border-right: 1px solid rgba(0,0,0,.5);
}
+.fillL .joined button {
+ border-right: 1px solid white;
+}
+
.joined button:first-child {
border-radius:4px 0 0 4px;
}
@@ -429,6 +417,13 @@ button.minor:hover {
button.action {
background: #7092ff;
+ color: white;
+}
+
+button[disabled].action,
+button[disabled].action:hover {
+ background: #cccccc;
+ color: #888;
}
button.action:focus,
@@ -436,6 +431,15 @@ button.action:hover {
background: #597BE7;
}
+button.secondary-action {
+ background: #ececec;
+}
+
+button.secondary-action:focus,
+button.secondary-action:hover {
+ background: #cccccc;
+}
+
button.save.has-count {
padding: 9px;
}
@@ -565,13 +569,13 @@ button[disabled] .icon.avatar { background-position: -320px -40px;}
button[disabled] .icon.nearby { background-position: -340px -40px;}
button[disabled] .icon.data { background-position: -600px -40px;}
-.icon.point.deleted { background-position: -302px -80px;}
-.icon.line.deleted { background-position: -320px -80px;}
-.icon.area.deleted { background-position: -340px -80px;}
+.icon.point.deleted { background-position: -480px -80px;}
+.icon.line.deleted { background-position: -500px -80px;}
+.icon.area.deleted { background-position: -520px -80px;}
-.icon.point.created { background-position: -302px -100px;}
-.icon.line.created { background-position: -320px -100px;}
-.icon.area.created { background-position: -340px -100px;}
+.icon.point.created { background-position: -480px -100px;}
+.icon.line.created { background-position: -500px -100px;}
+.icon.area.created { background-position: -520px -100px;}
.icon.point.modified { background-position: -22px 0; }
@@ -619,7 +623,7 @@ a:hover .icon.out-link { background-position: -500px -14px;}
}
.header h3 {
- text-align: center;
+ text-align: left;
margin-bottom: 0;
white-space: nowrap;
text-overflow: ellipsis;
@@ -657,7 +661,7 @@ a:hover .icon.out-link { background-position: -500px -14px;}
.footer {
position: absolute;
bottom: 0;
- padding: 5px 30px 5px 30px;
+ padding: 5px 20px 5px 20px;
border-top: 1px solid #ccc;
background-color: #fafafa;
width: 100%;
@@ -816,9 +820,6 @@ a:hover .icon.out-link { background-position: -500px -14px;}
text-overflow: ellipsis;
overflow: hidden;
border-left: 1px solid rgba(0, 0, 0, .1);
- -moz-transition: all 100ms;
- -o-transition: all 100ms;
- transition: all 100ms;
}
.feature-list-item .label .icon {
@@ -898,9 +899,6 @@ a:hover .icon.out-link { background-position: -500px -14px;}
text-overflow: ellipsis;
overflow: hidden;
border-left: 1px solid rgba(0, 0, 0, .1);
- -moz-transition: all 100ms;
- -o-transition: all 100ms;
- transition: all 100ms;
border-radius: 0 3px 3px 0;
}
@@ -1051,6 +1049,10 @@ a:hover .icon.out-link { background-position: -500px -14px;}
text-align: right;
}
+.form-label-button-wrap .tag-reference-button {
+ border-radius: 0 3px 0 0;
+}
+
.form-label-button-wrap .icon {
opacity: .5;
}
@@ -1137,7 +1139,7 @@ a:hover .icon.out-link { background-position: -500px -14px;}
/* Styles for raw tag inspector on hover */
.inspector-hover .tag-row .key-wrap,
-.inspector-hover .tag-row .input-wrap-position {
+.inspector-hover .tag-row .form-field.input-wrap-position {
width: 50%;
}
@@ -1190,69 +1192,6 @@ a:hover .icon.out-link { background-position: -500px -14px;}
line-height: 0;
display: block;
overflow: hidden;
- -webkit-transition: opacity 200ms, width 0 200ms, padding 0 200ms, line-height 0 200ms;
- -moz-transition: opacity 200ms, width 0 200ms, padding 0 200ms, line-height 0 200ms;
- -o-transition: opacity 200ms, width 0 200ms, padding 0 200ms, line-height 0 200ms;
- transition: opacity 200ms, width 0 200ms, padding 0 200ms, line-height 0 200ms;
-}
-
-/* first phase hover-to-active animations */
-
-textarea,
-.form-label,
-.preset-input-wrap,
-.preset-input-wrap .label {
- -webkit-transition: all 200ms;
- -moz-transition: all 200ms;
- -o-transition: all 200ms;
- transition: all 200ms;
-}
-
-/* second phase hover-to-active animations */
-
-input,
-.checkselect label:last-of-type {
- -webkit-transition: opacity 200ms 200ms, width 200ms 200ms, margin-right 200ms 200ms;
- -moz-transition: opacity 200ms 200ms, width 200ms 200ms, margin-right 200ms 200ms;
- -o-transition: opacity 200ms 200ms, width 200ms 200ms, margin-right 200ms 200ms;
- transition: opacity 200ms 200ms, width 200ms 200ms, margin-right 200ms 200ms;
-}
-
-.entity-editor-pane button.minor,
-.combobox-caret,
-.entity-editor-pane .header button,
-.toggle-list label span,
-.spin-control,
-.more-fields,
-.view-on-osm,
-.hide-toggle:before,
-.entity-editor-pane .toggle-list label::before,
-.entity-editor-pane .toggle-list label.remove .icon {
- -webkit-transition: opacity 200ms 200ms;
- -moz-transition: opacity 200ms 200ms;
- -o-transition: opacity 200ms 200ms;
- transition: opacity 200ms 200ms;
-}
-
-.entity-editor-pane a.hide-toggle {
- -webkit-transition: padding-left 200ms 200ms, color 200ms 200ms;
- -moz-transition: padding-left 200ms 200ms, color 200ms 200ms;
- -o-transition: padding-left 200ms 200ms, color 200ms 200ms;
- transition: padding-left 200ms 200ms, color 200ms 200ms;
-}
-
-.entity-editor-pane .toggle-list label:not(.active) {
- -webkit-transition: height 200ms 200ms, padding 200ms 200ms, border-width 100ms 300ms;
- -moz-transition: height 200ms 200ms, padding 200ms 200ms, border-width 100ms 300ms;
- -o-transition: height 200ms 200ms, padding 200ms 200ms, border-width 100ms 300ms;
- transition: height 200ms 200ms, padding 200ms 200ms, border-width 100ms 300ms;
-}
-
-.entity-editor-pane .toggle-list label {
- -webkit-transition: border-width 100ms 300ms, padding 200ms 200ms, background-color 200ms 200ms, color 200ms 200ms;
- -moz-transition: border-width 100ms 300ms, padding 200ms 200ms, background-color 200ms 200ms, color 200ms 200ms;
- -o-transition: border-width 100ms 300ms, padding 200ms 200ms, background-color 200ms 200ms, color 200ms 200ms;
- transition: border-width 100ms 300ms, padding 200ms 200ms, background-color 200ms 200ms, color 200ms 200ms;
}
/* adding additional preset fields */
@@ -1260,10 +1199,6 @@ input,
.more-fields {
padding: 0 20px 20px 20px;
font-weight: bold;
- -webkit-transition: padding 200ms 200ms, max-height 200ms 200ms;
- -moz-transition: padding 200ms 200ms, max-height 200ms 200ms;
- -o-transition: padding 200ms 200ms, max-height 200ms 200ms;
- transition: padding 200ms 200ms, max-height 200ms 200ms;
}
.more-fields label { padding: 5px 10px 5px 0; }
@@ -1601,10 +1536,6 @@ div.combobox {
width: 40%;
float: left;
height: 30px;
- -webkit-transition: width 200ms;
- -moz-transition: width 200ms;
- -o-transition: width 200ms;
- transition: width 200ms;
}
.tag-row input.key {
@@ -2187,10 +2118,14 @@ img.wiki-image {
#attrib {
width: 100%;
height: 20px;
+ margin-bottom: 5px;
float: left;
clear: both;
+ pointer-events: none;
}
+#attrib * { pointer-events: all; }
+
.base-layer-attribution,
.overlay-layer-attribution {
position: absolute;
@@ -2298,7 +2233,7 @@ img.wiki-image {
clear: both;
text-align: right;
width: 100%;
- padding: 0px 5px;
+ padding: 0px 10px;
}
.api-status.offline,
@@ -2311,8 +2246,11 @@ img.wiki-image {
------------------------------------------------------- */
.modal {
+ top: 40px;
display: inline-block;
position:absolute;
+ border-radius: 3px;
+ overflow: hidden;
left: 0;
right: 0;
margin: auto;
@@ -2349,8 +2287,19 @@ img.wiki-image {
border-bottom: 1px solid #CCC;
}
-.modal-section:last-child {
- border-bottom: 0;
+.modal-section.header h3 {
+ padding: 0;
+}
+
+.modal-section.buttons {
+ text-align: center;
+}
+
+.modal-section.buttons .action {
+ display: inline-block;
+ margin: 0 10px;
+ text-align: center;
+ vertical-align: middle;
}
.loading-modal {
@@ -2379,7 +2328,8 @@ img.wiki-image {
display: block;
content: '';
height: 100px;
- width: 100px;
+ width: 100%;
+ max-width: 100px;
margin: auto;
margin-bottom: 10px;
background:transparent url(img/sprite.svg) no-repeat 0 -220px;
@@ -2389,6 +2339,10 @@ img.wiki-image {
border-right: 1px solid #CCC;
}
+.modal-section:last-child {
+ border-bottom: 0;
+}
+
/* Restore Modal
------------------------------------------------------- */
@@ -2458,14 +2412,6 @@ img.wiki-image {
margin-bottom: 0;
}
-.mode-save button.action {
- float: none;
- margin: auto;
- display: block;
- color: white;
- font-size: 14px;
-}
-
.mode-save .user-info img {
float: left;
}
@@ -2528,6 +2474,56 @@ img.wiki-image {
.changeset-list li:first-child { border-top: 0;}
+/* Conflict resolution
+------------------------------------------------------- */
+
+.conflicts-help {
+ padding: 20px;
+ background-color: #ffffbb;
+ border-bottom: 1px solid #ccc;
+}
+
+.conflicts-buttons {
+ padding: 20px;
+}
+
+.mode-save button.conflicts-button {
+ float: left;
+}
+
+.conflict-container {
+ border-bottom: 1px solid #ccc;
+}
+
+.conflict-description {
+ padding: 5px 20px;
+ display: block;
+}
+
+.conflicts-done {
+ padding: 20px 20px 0 20px;
+}
+
+.conflict-detail-container {
+ padding: 10px 20px;
+}
+
+.conflict-count {
+ padding: 10px 20px;
+}
+
+.conflict-choices {
+ margin-top: 10px;
+}
+
+.conflict-nav-buttons {
+ padding: 10px 0 20px 0;
+}
+
+.conflict-nav-button {
+ height: 30px;
+}
+
/* Notices
------------------------------------------------------- */
@@ -2708,28 +2704,7 @@ img.wiki-image {
}
.tooltip-inner .keyhint {
- font-size: 10px;
- padding: 0 7px;
font-weight: bold;
- display: inline-block;
- border-radius: 2px;
- border: 1px solid #CCC;
- position: relative;
- z-index: 1;
- text-align: left;
-}
-
-.tooltip-inner .keyhint::after {
- content: "";
- position: absolute;
- border-radius: 2px;
- height: 10px;
- width: 100%;
- z-index: 0;
- bottom: -4px;
- left: -1px;
- border: 1px solid #CCC;
- border-top: 0;
}
/* Exceptions for tooltip layouts */
diff --git a/data/core.yaml b/data/core.yaml
index dd002bfa0..dfceac898 100644
--- a/data/core.yaml
+++ b/data/core.yaml
@@ -313,10 +313,33 @@ en:
title: Save
help: "Save changes to OpenStreetMap, making them visible to other users."
no_changes: No changes to save.
- error: An error occurred while trying to save
+ error: Errors occurred while trying to save
+ status_code: "Server returned status code {code}"
unknown_error_details: "Please ensure you are connected to the internet."
uploading: Uploading changes to OpenStreetMap.
unsaved_changes: You have unsaved changes
+ conflict:
+ header: Resolve conflicting edits
+ count: 'Conflict {num} of {total}'
+ previous: '< Previous'
+ next: 'Next >'
+ keep_local: Keep mine
+ keep_remote: Use theirs
+ restore: Restore
+ delete: Leave Deleted
+ download_changes: Or download your changes.
+ done: "All conflicts resolved!"
+ help: |
+ Another user changed some of the same map features you changed.
+ Click on each item below for more details about the conflict, and choose whether to keep
+ your changes or the other user's changes.
+ merge_remote_changes:
+ conflict:
+ deleted: 'This object has been deleted by {user}.'
+ location: 'This object was moved by both you and {user}.'
+ nodelist: 'Nodes were changed by both you and {user}.'
+ memberlist: 'Relation members were changed by both you and {user}.'
+ tags: 'You changed the {tag} tag to "{local}" and {user} changed it to "{remote}".'
success:
edited_osm: "Edited OSM!"
just_edited: "You just edited OpenStreetMap!"
@@ -329,6 +352,7 @@ en:
(details).
confirm:
okay: "Okay"
+ cancel: "Cancel"
splash:
welcome: Welcome to the iD OpenStreetMap editor
text: "iD is a friendly but powerful tool for contributing to the world's best free world map. This is version {version}. For more information see {website} and report bugs at {github}."
diff --git a/dist/img/mini-loader.gif b/dist/img/mini-loader.gif
index cbe6674b8..89250511d 100644
Binary files a/dist/img/mini-loader.gif and b/dist/img/mini-loader.gif differ
diff --git a/dist/img/sprite.svg b/dist/img/sprite.svg
index a59937bdf..b47a50a64 100644
--- a/dist/img/sprite.svg
+++ b/dist/img/sprite.svg
@@ -29,13 +29,13 @@
id="namedview392"
showgrid="true"
inkscape:zoom="1"
- inkscape:cx="262.65678"
- inkscape:cy="510.36274"
+ inkscape:cx="475.13394"
+ inkscape:cy="495.7147"
inkscape:window-x="276"
inkscape:window-y="71"
inkscape:window-maximized="0"
inkscape:current-layer="svg12393"
- showguides="false"
+ showguides="true"
inkscape:guide-bbox="true"
inkscape:snap-global="true"
inkscape:snap-bbox="true"
@@ -78,6 +78,34 @@
orientation="-0.41576267,-0.90947315"
position="646,553.53846"
id="guide6219" />
+
+
+
+
+
+
+
@@ -98,7 +126,7 @@
image/svg+xml
-
+
@@ -1787,13 +1815,7 @@
inkscape:connector-curvature="0"
style="color:#000000;fill:#e06d5f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="path2997-7"
- d="m 514,84 -1,1 0,1.59375 L 506.59375,93 505,93 l -1,1 0,2 1,1 2,0 1,-1 0,-1.59375 L 514.40625,88 516,88 l 1,-1 0,-2 -1,-1 z m -22,1 c -2.76142,0 -5,2.23858 -5,5 0,2.76143 5,7 5,7 0,0 5,-4.23857 5,-7 0,-2.76142 -2.23858,-5 -5,-5 z m 23,0 c 0.55228,0 1,0.44772 1,1 0,0.55229 -0.44772,1 -1,1 -0.25152,0 -0.48052,-0.0967 -0.65625,-0.25 -0.0344,-0.03002 -0.0638,-0.05934 -0.0937,-0.09375 -0.15335,-0.175731 -0.25,-0.404729 -0.25,-0.65625 0,-0.55228 0.44772,-1 1,-1 z m 10,0 -1,1 0,2 1,1 0,4 -1,1 0,2 1,1 2,0 1,-1 4,0 1,1 2,0 1,-1 0,-2 -1,-1 0,-4 1,-1 0,-2 -1,-1 -2,0 -1,1 -4,0 -1,-1 z m 1,1 c 0.55228,0 1,0.447715 1,1 0,0.552285 -0.44772,1 -1,1 -0.55228,0 -1,-0.447715 -1,-1 0,-0.552285 0.44772,-1 1,-1 z m 8,0 c 0.55228,0 1,0.447715 1,1 0,0.552285 -0.44772,1 -1,1 -0.55228,0 -1,-0.447715 -1,-1 0,-0.552285 0.44772,-1 1,-1 z m -41.84375,2 c 1.10457,0 2,0.89543 2,2 0,1.10457 -0.89543,2 -2,2 -1.10457,0 -2,-0.89543 -2,-2 0,-1.10457 0.89543,-2 2,-2 z M 528,88 l 4,0 1,1 0,4 -1,1 -4,0 -1,-1 0,-4 z m -22,6 c 0.25152,0 0.48052,0.0967 0.65625,0.25 l 0.0937,0.09375 c 0.15335,0.175731 0.25,0.404734 0.25,0.65625 0,0.55229 -0.44772,1 -1,1 -0.55228,0 -1,-0.44771 -1,-1 0,-0.55228 0.44772,-1 1,-1 z m 20,0 c 0.55228,0 1,0.447715 1,1 0,0.552285 -0.44772,1 -1,1 -0.55228,0 -1,-0.447715 -1,-1 0,-0.552285 0.44772,-1 1,-1 z m 8,0 c 0.55228,0 1,0.447715 1,1 0,0.552285 -0.44772,1 -1,1 -0.55228,0 -1,-0.447715 -1,-1 0,-0.552285 0.44772,-1 1,-1 z" />
-
+ d="m 514,83 -1,1 0,1.59375 L 506.59375,92 505,92 l -1,1 0,2 1,1 2,0 1,-1 0,-1.59375 L 514.40625,87 516,87 l 1,-1 0,-2 -1,-1 z m -24,1 c -2.76142,0 -5,2.23858 -5,5 0,2.76143 5,7 5,7 0,0 5,-4.23857 5,-7 0,-2.76142 -2.23858,-5 -5,-5 z m 25,0 c 0.55228,0 1,0.44772 1,1 0,0.55229 -0.44772,1 -1,1 -0.25152,0 -0.48052,-0.0967 -0.65625,-0.25 -0.0344,-0.03002 -0.0638,-0.05934 -0.0937,-0.09375 -0.15335,-0.175731 -0.25,-0.404729 -0.25,-0.65625 0,-0.55228 0.44772,-1 1,-1 z m 10,0 -1,1 0,2 1,1 0,4 -1,1 0,2 1,1 2,0 1,-1 4,0 1,1 2,0 1,-1 0,-2 -1,-1 0,-4 1,-1 0,-2 -1,-1 -2,0 -1,1 -4,0 -1,-1 z m 1,1 c 0.55228,0 1,0.447715 1,1 0,0.552285 -0.44772,1 -1,1 -0.55228,0 -1,-0.447715 -1,-1 0,-0.552285 0.44772,-1 1,-1 z m 8,0 c 0.55228,0 1,0.447715 1,1 0,0.552285 -0.44772,1 -1,1 -0.55228,0 -1,-0.447715 -1,-1 0,-0.552285 0.44772,-1 1,-1 z m -43.84375,2 c 1.10457,0 2,0.89543 2,2 0,1.10457 -0.89543,2 -2,2 -1.10457,0 -2,-0.89543 -2,-2 0,-1.10457 0.89543,-2 2,-2 z M 528,87 l 4,0 1,1 0,4 -1,1 -4,0 -1,-1 0,-4 z m -22,6 c 0.25152,0 0.48052,0.0967 0.65625,0.25 l 0.0937,0.09375 c 0.15335,0.175731 0.25,0.404734 0.25,0.65625 0,0.55229 -0.44772,1 -1,1 -0.55228,0 -1,-0.44771 -1,-1 0,-0.55228 0.44772,-1 1,-1 z m 20,0 c 0.55228,0 1,0.447715 1,1 0,0.552285 -0.44772,1 -1,1 -0.55228,0 -1,-0.447715 -1,-1 0,-0.552285 0.44772,-1 1,-1 z m 8,0 c 0.55228,0 1,0.447715 1,1 0,0.552285 -0.44772,1 -1,1 -0.55228,0 -1,-0.447715 -1,-1 0,-0.552285 0.44772,-1 1,-1 z" />
+
diff --git a/dist/locales/en.json b/dist/locales/en.json
index 869941454..ec87f211e 100644
--- a/dist/locales/en.json
+++ b/dist/locales/en.json
@@ -387,10 +387,33 @@
"title": "Save",
"help": "Save changes to OpenStreetMap, making them visible to other users.",
"no_changes": "No changes to save.",
- "error": "An error occurred while trying to save",
+ "error": "Errors occurred while trying to save",
+ "status_code": "Server returned status code {code}",
"unknown_error_details": "Please ensure you are connected to the internet.",
"uploading": "Uploading changes to OpenStreetMap.",
- "unsaved_changes": "You have unsaved changes"
+ "unsaved_changes": "You have unsaved changes",
+ "conflict": {
+ "header": "Resolve conflicting edits",
+ "count": "Conflict {num} of {total}",
+ "previous": "< Previous",
+ "next": "Next >",
+ "keep_local": "Keep mine",
+ "keep_remote": "Use theirs",
+ "restore": "Restore",
+ "delete": "Leave Deleted",
+ "download_changes": "Or download your changes.",
+ "done": "All conflicts resolved!",
+ "help": "Another user changed some of the same map features you changed.\nClick on each item below for more details about the conflict, and choose whether to keep\nyour changes or the other user's changes.\n"
+ }
+ },
+ "merge_remote_changes": {
+ "conflict": {
+ "deleted": "This object has been deleted by {user}.",
+ "location": "This object was moved by both you and {user}.",
+ "nodelist": "Nodes were changed by both you and {user}.",
+ "memberlist": "Relation members were changed by both you and {user}.",
+ "tags": "You changed the {tag} tag to \"{local}\" and {user} changed it to \"{remote}\"."
+ }
},
"success": {
"edited_osm": "Edited OSM!",
@@ -402,7 +425,8 @@
"help_html": "Your changes should appear in the \"Standard\" layer in a few minutes. Other layers, and certain features, may take longer\n(details).\n"
},
"confirm": {
- "okay": "Okay"
+ "okay": "Okay",
+ "cancel": "Cancel"
},
"splash": {
"welcome": "Welcome to the iD OpenStreetMap editor",
diff --git a/index.html b/index.html
index 474ea4563..3e71faba6 100644
--- a/index.html
+++ b/index.html
@@ -30,6 +30,7 @@
+
@@ -81,6 +82,7 @@
+
@@ -158,6 +160,7 @@
+
@@ -259,6 +262,7 @@
"oauth_secret": "aMnOOCwExO2XYtRVWJ1bI9QOdqh1cay2UgpbhA6p"
}
]));
+
});