MPE Home Metamath Proof Explorer < Previous   Next >
Nearby theorems
Mirrors  >  Home  >  MPE Home  >  Th. List  >  logcn Structured version   Visualization version   GIF version

Theorem logcn 24830
Description: The logarithm function is continuous away from the branch cut at negative reals. (Contributed by Mario Carneiro, 25-Feb-2015.)
Hypothesis
Ref Expression
logcn.d 𝐷 = (ℂ ∖ (-∞(,]0))
Assertion
Ref Expression
logcn (log ↾ 𝐷) ∈ (𝐷cn→ℂ)

Proof of Theorem logcn
Dummy variables 𝑥 𝑦 are mutually distinct and distinct from all other variables.
StepHypRef Expression
1 logf1o 24748 . . . . . . 7 log:(ℂ ∖ {0})–1-1-onto→ran log
2 f1of 6391 . . . . . . 7 (log:(ℂ ∖ {0})–1-1-onto→ran log → log:(ℂ ∖ {0})⟶ran log)
31, 2ax-mp 5 . . . . . 6 log:(ℂ ∖ {0})⟶ran log
4 logcn.d . . . . . . 7 𝐷 = (ℂ ∖ (-∞(,]0))
54logdmss 24825 . . . . . 6 𝐷 ⊆ (ℂ ∖ {0})
6 fssres 6320 . . . . . 6 ((log:(ℂ ∖ {0})⟶ran log ∧ 𝐷 ⊆ (ℂ ∖ {0})) → (log ↾ 𝐷):𝐷⟶ran log)
73, 5, 6mp2an 682 . . . . 5 (log ↾ 𝐷):𝐷⟶ran log
8 ffn 6291 . . . . 5 ((log ↾ 𝐷):𝐷⟶ran log → (log ↾ 𝐷) Fn 𝐷)
97, 8ax-mp 5 . . . 4 (log ↾ 𝐷) Fn 𝐷
10 dffn5 6501 . . . 4 ((log ↾ 𝐷) Fn 𝐷 ↔ (log ↾ 𝐷) = (𝑥𝐷 ↦ ((log ↾ 𝐷)‘𝑥)))
119, 10mpbi 222 . . 3 (log ↾ 𝐷) = (𝑥𝐷 ↦ ((log ↾ 𝐷)‘𝑥))
12 fvres 6465 . . . . 5 (𝑥𝐷 → ((log ↾ 𝐷)‘𝑥) = (log‘𝑥))
134ellogdm 24822 . . . . . . . 8 (𝑥𝐷 ↔ (𝑥 ∈ ℂ ∧ (𝑥 ∈ ℝ → 𝑥 ∈ ℝ+)))
1413simplbi 493 . . . . . . 7 (𝑥𝐷𝑥 ∈ ℂ)
154logdmn0 24823 . . . . . . 7 (𝑥𝐷𝑥 ≠ 0)
1614, 15logcld 24754 . . . . . 6 (𝑥𝐷 → (log‘𝑥) ∈ ℂ)
1716replimd 14344 . . . . 5 (𝑥𝐷 → (log‘𝑥) = ((ℜ‘(log‘𝑥)) + (i · (ℑ‘(log‘𝑥)))))
18 relog 24780 . . . . . . . 8 ((𝑥 ∈ ℂ ∧ 𝑥 ≠ 0) → (ℜ‘(log‘𝑥)) = (log‘(abs‘𝑥)))
1914, 15, 18syl2anc 579 . . . . . . 7 (𝑥𝐷 → (ℜ‘(log‘𝑥)) = (log‘(abs‘𝑥)))
2014, 15absrpcld 14595 . . . . . . . 8 (𝑥𝐷 → (abs‘𝑥) ∈ ℝ+)
21 fvres 6465 . . . . . . . 8 ((abs‘𝑥) ∈ ℝ+ → ((log ↾ ℝ+)‘(abs‘𝑥)) = (log‘(abs‘𝑥)))
2220, 21syl 17 . . . . . . 7 (𝑥𝐷 → ((log ↾ ℝ+)‘(abs‘𝑥)) = (log‘(abs‘𝑥)))
2319, 22eqtr4d 2817 . . . . . 6 (𝑥𝐷 → (ℜ‘(log‘𝑥)) = ((log ↾ ℝ+)‘(abs‘𝑥)))
2423oveq1d 6937 . . . . 5 (𝑥𝐷 → ((ℜ‘(log‘𝑥)) + (i · (ℑ‘(log‘𝑥)))) = (((log ↾ ℝ+)‘(abs‘𝑥)) + (i · (ℑ‘(log‘𝑥)))))
2512, 17, 243eqtrd 2818 . . . 4 (𝑥𝐷 → ((log ↾ 𝐷)‘𝑥) = (((log ↾ ℝ+)‘(abs‘𝑥)) + (i · (ℑ‘(log‘𝑥)))))
2625mpteq2ia 4975 . . 3 (𝑥𝐷 ↦ ((log ↾ 𝐷)‘𝑥)) = (𝑥𝐷 ↦ (((log ↾ ℝ+)‘(abs‘𝑥)) + (i · (ℑ‘(log‘𝑥)))))
2711, 26eqtri 2802 . 2 (log ↾ 𝐷) = (𝑥𝐷 ↦ (((log ↾ ℝ+)‘(abs‘𝑥)) + (i · (ℑ‘(log‘𝑥)))))
28 eqid 2778 . . . 4 (TopOpen‘ℂfld) = (TopOpen‘ℂfld)
2928addcn 23076 . . . . 5 + ∈ (((TopOpen‘ℂfld) ×t (TopOpen‘ℂfld)) Cn (TopOpen‘ℂfld))
3029a1i 11 . . . 4 (⊤ → + ∈ (((TopOpen‘ℂfld) ×t (TopOpen‘ℂfld)) Cn (TopOpen‘ℂfld)))
3128cnfldtopon 22994 . . . . . . . 8 (TopOpen‘ℂfld) ∈ (TopOn‘ℂ)
3214ssriv 3825 . . . . . . . 8 𝐷 ⊆ ℂ
33 resttopon 21373 . . . . . . . 8 (((TopOpen‘ℂfld) ∈ (TopOn‘ℂ) ∧ 𝐷 ⊆ ℂ) → ((TopOpen‘ℂfld) ↾t 𝐷) ∈ (TopOn‘𝐷))
3431, 32, 33mp2an 682 . . . . . . 7 ((TopOpen‘ℂfld) ↾t 𝐷) ∈ (TopOn‘𝐷)
3534a1i 11 . . . . . 6 (⊤ → ((TopOpen‘ℂfld) ↾t 𝐷) ∈ (TopOn‘𝐷))
36 absf 14484 . . . . . . . . . . . 12 abs:ℂ⟶ℝ
37 fssres 6320 . . . . . . . . . . . 12 ((abs:ℂ⟶ℝ ∧ 𝐷 ⊆ ℂ) → (abs ↾ 𝐷):𝐷⟶ℝ)
3836, 32, 37mp2an 682 . . . . . . . . . . 11 (abs ↾ 𝐷):𝐷⟶ℝ
3938a1i 11 . . . . . . . . . 10 (⊤ → (abs ↾ 𝐷):𝐷⟶ℝ)
4039feqmptd 6509 . . . . . . . . 9 (⊤ → (abs ↾ 𝐷) = (𝑥𝐷 ↦ ((abs ↾ 𝐷)‘𝑥)))
41 fvres 6465 . . . . . . . . . 10 (𝑥𝐷 → ((abs ↾ 𝐷)‘𝑥) = (abs‘𝑥))
4241mpteq2ia 4975 . . . . . . . . 9 (𝑥𝐷 ↦ ((abs ↾ 𝐷)‘𝑥)) = (𝑥𝐷 ↦ (abs‘𝑥))
4340, 42syl6eq 2830 . . . . . . . 8 (⊤ → (abs ↾ 𝐷) = (𝑥𝐷 ↦ (abs‘𝑥)))
44 ffn 6291 . . . . . . . . . . 11 ((abs ↾ 𝐷):𝐷⟶ℝ → (abs ↾ 𝐷) Fn 𝐷)
4538, 44ax-mp 5 . . . . . . . . . 10 (abs ↾ 𝐷) Fn 𝐷
4641, 20eqeltrd 2859 . . . . . . . . . . 11 (𝑥𝐷 → ((abs ↾ 𝐷)‘𝑥) ∈ ℝ+)
4746rgen 3104 . . . . . . . . . 10 𝑥𝐷 ((abs ↾ 𝐷)‘𝑥) ∈ ℝ+
48 ffnfv 6652 . . . . . . . . . 10 ((abs ↾ 𝐷):𝐷⟶ℝ+ ↔ ((abs ↾ 𝐷) Fn 𝐷 ∧ ∀𝑥𝐷 ((abs ↾ 𝐷)‘𝑥) ∈ ℝ+))
4945, 47, 48mpbir2an 701 . . . . . . . . 9 (abs ↾ 𝐷):𝐷⟶ℝ+
50 rpssre 12144 . . . . . . . . . . 11 + ⊆ ℝ
51 ax-resscn 10329 . . . . . . . . . . 11 ℝ ⊆ ℂ
5250, 51sstri 3830 . . . . . . . . . 10 + ⊆ ℂ
53 abscncf 23112 . . . . . . . . . . 11 abs ∈ (ℂ–cn→ℝ)
54 rescncf 23108 . . . . . . . . . . 11 (𝐷 ⊆ ℂ → (abs ∈ (ℂ–cn→ℝ) → (abs ↾ 𝐷) ∈ (𝐷cn→ℝ)))
5532, 53, 54mp2 9 . . . . . . . . . 10 (abs ↾ 𝐷) ∈ (𝐷cn→ℝ)
56 cncffvrn 23109 . . . . . . . . . 10 ((ℝ+ ⊆ ℂ ∧ (abs ↾ 𝐷) ∈ (𝐷cn→ℝ)) → ((abs ↾ 𝐷) ∈ (𝐷cn→ℝ+) ↔ (abs ↾ 𝐷):𝐷⟶ℝ+))
5752, 55, 56mp2an 682 . . . . . . . . 9 ((abs ↾ 𝐷) ∈ (𝐷cn→ℝ+) ↔ (abs ↾ 𝐷):𝐷⟶ℝ+)
5849, 57mpbir 223 . . . . . . . 8 (abs ↾ 𝐷) ∈ (𝐷cn→ℝ+)
5943, 58syl6eqelr 2868 . . . . . . 7 (⊤ → (𝑥𝐷 ↦ (abs‘𝑥)) ∈ (𝐷cn→ℝ+))
60 eqid 2778 . . . . . . . . 9 ((TopOpen‘ℂfld) ↾t 𝐷) = ((TopOpen‘ℂfld) ↾t 𝐷)
61 eqid 2778 . . . . . . . . 9 ((TopOpen‘ℂfld) ↾t+) = ((TopOpen‘ℂfld) ↾t+)
6228, 60, 61cncfcn 23120 . . . . . . . 8 ((𝐷 ⊆ ℂ ∧ ℝ+ ⊆ ℂ) → (𝐷cn→ℝ+) = (((TopOpen‘ℂfld) ↾t 𝐷) Cn ((TopOpen‘ℂfld) ↾t+)))
6332, 52, 62mp2an 682 . . . . . . 7 (𝐷cn→ℝ+) = (((TopOpen‘ℂfld) ↾t 𝐷) Cn ((TopOpen‘ℂfld) ↾t+))
6459, 63syl6eleq 2869 . . . . . 6 (⊤ → (𝑥𝐷 ↦ (abs‘𝑥)) ∈ (((TopOpen‘ℂfld) ↾t 𝐷) Cn ((TopOpen‘ℂfld) ↾t+)))
65 ssid 3842 . . . . . . . . . 10 ℂ ⊆ ℂ
66 cncfss 23110 . . . . . . . . . 10 ((ℝ ⊆ ℂ ∧ ℂ ⊆ ℂ) → (ℝ+cn→ℝ) ⊆ (ℝ+cn→ℂ))
6751, 65, 66mp2an 682 . . . . . . . . 9 (ℝ+cn→ℝ) ⊆ (ℝ+cn→ℂ)
68 relogcn 24821 . . . . . . . . 9 (log ↾ ℝ+) ∈ (ℝ+cn→ℝ)
6967, 68sselii 3818 . . . . . . . 8 (log ↾ ℝ+) ∈ (ℝ+cn→ℂ)
7069a1i 11 . . . . . . 7 (⊤ → (log ↾ ℝ+) ∈ (ℝ+cn→ℂ))
7131toponrestid 21133 . . . . . . . . 9 (TopOpen‘ℂfld) = ((TopOpen‘ℂfld) ↾t ℂ)
7228, 61, 71cncfcn 23120 . . . . . . . 8 ((ℝ+ ⊆ ℂ ∧ ℂ ⊆ ℂ) → (ℝ+cn→ℂ) = (((TopOpen‘ℂfld) ↾t+) Cn (TopOpen‘ℂfld)))
7352, 65, 72mp2an 682 . . . . . . 7 (ℝ+cn→ℂ) = (((TopOpen‘ℂfld) ↾t+) Cn (TopOpen‘ℂfld))
7470, 73syl6eleq 2869 . . . . . 6 (⊤ → (log ↾ ℝ+) ∈ (((TopOpen‘ℂfld) ↾t+) Cn (TopOpen‘ℂfld)))
7535, 64, 74cnmpt11f 21876 . . . . 5 (⊤ → (𝑥𝐷 ↦ ((log ↾ ℝ+)‘(abs‘𝑥))) ∈ (((TopOpen‘ℂfld) ↾t 𝐷) Cn (TopOpen‘ℂfld)))
7628, 60, 71cncfcn 23120 . . . . . 6 ((𝐷 ⊆ ℂ ∧ ℂ ⊆ ℂ) → (𝐷cn→ℂ) = (((TopOpen‘ℂfld) ↾t 𝐷) Cn (TopOpen‘ℂfld)))
7732, 65, 76mp2an 682 . . . . 5 (𝐷cn→ℂ) = (((TopOpen‘ℂfld) ↾t 𝐷) Cn (TopOpen‘ℂfld))
7875, 77syl6eleqr 2870 . . . 4 (⊤ → (𝑥𝐷 ↦ ((log ↾ ℝ+)‘(abs‘𝑥))) ∈ (𝐷cn→ℂ))
7916imcld 14342 . . . . . . . 8 (𝑥𝐷 → (ℑ‘(log‘𝑥)) ∈ ℝ)
8079recnd 10405 . . . . . . 7 (𝑥𝐷 → (ℑ‘(log‘𝑥)) ∈ ℂ)
8180adantl 475 . . . . . 6 ((⊤ ∧ 𝑥𝐷) → (ℑ‘(log‘𝑥)) ∈ ℂ)
82 eqidd 2779 . . . . . 6 (⊤ → (𝑥𝐷 ↦ (ℑ‘(log‘𝑥))) = (𝑥𝐷 ↦ (ℑ‘(log‘𝑥))))
83 eqidd 2779 . . . . . 6 (⊤ → (𝑦 ∈ ℂ ↦ (i · 𝑦)) = (𝑦 ∈ ℂ ↦ (i · 𝑦)))
84 oveq2 6930 . . . . . 6 (𝑦 = (ℑ‘(log‘𝑥)) → (i · 𝑦) = (i · (ℑ‘(log‘𝑥))))
8581, 82, 83, 84fmptco 6661 . . . . 5 (⊤ → ((𝑦 ∈ ℂ ↦ (i · 𝑦)) ∘ (𝑥𝐷 ↦ (ℑ‘(log‘𝑥)))) = (𝑥𝐷 ↦ (i · (ℑ‘(log‘𝑥)))))
86 cncfss 23110 . . . . . . . . 9 ((ℝ ⊆ ℂ ∧ ℂ ⊆ ℂ) → (𝐷cn→ℝ) ⊆ (𝐷cn→ℂ))
8751, 65, 86mp2an 682 . . . . . . . 8 (𝐷cn→ℝ) ⊆ (𝐷cn→ℂ)
884logcnlem5 24829 . . . . . . . 8 (𝑥𝐷 ↦ (ℑ‘(log‘𝑥))) ∈ (𝐷cn→ℝ)
8987, 88sselii 3818 . . . . . . 7 (𝑥𝐷 ↦ (ℑ‘(log‘𝑥))) ∈ (𝐷cn→ℂ)
9089a1i 11 . . . . . 6 (⊤ → (𝑥𝐷 ↦ (ℑ‘(log‘𝑥))) ∈ (𝐷cn→ℂ))
91 ax-icn 10331 . . . . . . 7 i ∈ ℂ
92 eqid 2778 . . . . . . . 8 (𝑦 ∈ ℂ ↦ (i · 𝑦)) = (𝑦 ∈ ℂ ↦ (i · 𝑦))
9392mulc1cncf 23116 . . . . . . 7 (i ∈ ℂ → (𝑦 ∈ ℂ ↦ (i · 𝑦)) ∈ (ℂ–cn→ℂ))
9491, 93mp1i 13 . . . . . 6 (⊤ → (𝑦 ∈ ℂ ↦ (i · 𝑦)) ∈ (ℂ–cn→ℂ))
9590, 94cncfco 23118 . . . . 5 (⊤ → ((𝑦 ∈ ℂ ↦ (i · 𝑦)) ∘ (𝑥𝐷 ↦ (ℑ‘(log‘𝑥)))) ∈ (𝐷cn→ℂ))
9685, 95eqeltrrd 2860 . . . 4 (⊤ → (𝑥𝐷 ↦ (i · (ℑ‘(log‘𝑥)))) ∈ (𝐷cn→ℂ))
9728, 30, 78, 96cncfmpt2f 23125 . . 3 (⊤ → (𝑥𝐷 ↦ (((log ↾ ℝ+)‘(abs‘𝑥)) + (i · (ℑ‘(log‘𝑥))))) ∈ (𝐷cn→ℂ))
9897mptru 1609 . 2 (𝑥𝐷 ↦ (((log ↾ ℝ+)‘(abs‘𝑥)) + (i · (ℑ‘(log‘𝑥))))) ∈ (𝐷cn→ℂ)
9927, 98eqeltri 2855 1 (log ↾ 𝐷) ∈ (𝐷cn→ℂ)
Colors of variables: wff setvar class
Syntax hints:  wi 4  wb 198   = wceq 1601  wtru 1602  wcel 2107  wne 2969  wral 3090  cdif 3789  wss 3792  {csn 4398  cmpt 4965  ran crn 5356  cres 5357  ccom 5359   Fn wfn 6130  wf 6131  1-1-ontowf1o 6134  cfv 6135  (class class class)co 6922  cc 10270  cr 10271  0cc0 10272  ici 10274   + caddc 10275   · cmul 10277  -∞cmnf 10409  +crp 12137  (,]cioc 12488  cre 14244  cim 14245  abscabs 14381  t crest 16467  TopOpenctopn 16468  fldccnfld 20142  TopOnctopon 21122   Cn ccn 21436   ×t ctx 21772  cnccncf 23087  logclog 24738
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1839  ax-4 1853  ax-5 1953  ax-6 2021  ax-7 2055  ax-8 2109  ax-9 2116  ax-10 2135  ax-11 2150  ax-12 2163  ax-13 2334  ax-ext 2754  ax-rep 5006  ax-sep 5017  ax-nul 5025  ax-pow 5077  ax-pr 5138  ax-un 7226  ax-inf2 8835  ax-cnex 10328  ax-resscn 10329  ax-1cn 10330  ax-icn 10331  ax-addcl 10332  ax-addrcl 10333  ax-mulcl 10334  ax-mulrcl 10335  ax-mulcom 10336  ax-addass 10337  ax-mulass 10338  ax-distr 10339  ax-i2m1 10340  ax-1ne0 10341  ax-1rid 10342  ax-rnegex 10343  ax-rrecex 10344  ax-cnre 10345  ax-pre-lttri 10346  ax-pre-lttrn 10347  ax-pre-ltadd 10348  ax-pre-mulgt0 10349  ax-pre-sup 10350  ax-addf 10351  ax-mulf 10352
This theorem depends on definitions:  df-bi 199  df-an 387  df-or 837  df-3or 1072  df-3an 1073  df-tru 1605  df-fal 1615  df-ex 1824  df-nf 1828  df-sb 2012  df-mo 2551  df-eu 2587  df-clab 2764  df-cleq 2770  df-clel 2774  df-nfc 2921  df-ne 2970  df-nel 3076  df-ral 3095  df-rex 3096  df-reu 3097  df-rmo 3098  df-rab 3099  df-v 3400  df-sbc 3653  df-csb 3752  df-dif 3795  df-un 3797  df-in 3799  df-ss 3806  df-pss 3808  df-nul 4142  df-if 4308  df-pw 4381  df-sn 4399  df-pr 4401  df-tp 4403  df-op 4405  df-uni 4672  df-int 4711  df-iun 4755  df-iin 4756  df-br 4887  df-opab 4949  df-mpt 4966  df-tr 4988  df-id 5261  df-eprel 5266  df-po 5274  df-so 5275  df-fr 5314  df-se 5315  df-we 5316  df-xp 5361  df-rel 5362  df-cnv 5363  df-co 5364  df-dm 5365  df-rn 5366  df-res 5367  df-ima 5368  df-pred 5933  df-ord 5979  df-on 5980  df-lim 5981  df-suc 5982  df-iota 6099  df-fun 6137  df-fn 6138  df-f 6139  df-f1 6140  df-fo 6141  df-f1o 6142  df-fv 6143  df-isom 6144  df-riota 6883  df-ov 6925  df-oprab 6926  df-mpt2 6927  df-of 7174  df-om 7344  df-1st 7445  df-2nd 7446  df-supp 7577  df-wrecs 7689  df-recs 7751  df-rdg 7789  df-1o 7843  df-2o 7844  df-oadd 7847  df-er 8026  df-map 8142  df-pm 8143  df-ixp 8195  df-en 8242  df-dom 8243  df-sdom 8244  df-fin 8245  df-fsupp 8564  df-fi 8605  df-sup 8636  df-inf 8637  df-oi 8704  df-card 9098  df-cda 9325  df-pnf 10413  df-mnf 10414  df-xr 10415  df-ltxr 10416  df-le 10417  df-sub 10608  df-neg 10609  df-div 11033  df-nn 11375  df-2 11438  df-3 11439  df-4 11440  df-5 11441  df-6 11442  df-7 11443  df-8 11444  df-9 11445  df-n0 11643  df-z 11729  df-dec 11846  df-uz 11993  df-q 12096  df-rp 12138  df-xneg 12257  df-xadd 12258  df-xmul 12259  df-ioo 12491  df-ioc 12492  df-ico 12493  df-icc 12494  df-fz 12644  df-fzo 12785  df-fl 12912  df-mod 12988  df-seq 13120  df-exp 13179  df-fac 13379  df-bc 13408  df-hash 13436  df-shft 14214  df-cj 14246  df-re 14247  df-im 14248  df-sqrt 14382  df-abs 14383  df-limsup 14610  df-clim 14627  df-rlim 14628  df-sum 14825  df-ef 15200  df-sin 15202  df-cos 15203  df-tan 15204  df-pi 15205  df-struct 16257  df-ndx 16258  df-slot 16259  df-base 16261  df-sets 16262  df-ress 16263  df-plusg 16351  df-mulr 16352  df-starv 16353  df-sca 16354  df-vsca 16355  df-ip 16356  df-tset 16357  df-ple 16358  df-ds 16360  df-unif 16361  df-hom 16362  df-cco 16363  df-rest 16469  df-topn 16470  df-0g 16488  df-gsum 16489  df-topgen 16490  df-pt 16491  df-prds 16494  df-xrs 16548  df-qtop 16553  df-imas 16554  df-xps 16556  df-mre 16632  df-mrc 16633  df-acs 16635  df-mgm 17628  df-sgrp 17670  df-mnd 17681  df-submnd 17722  df-mulg 17928  df-cntz 18133  df-cmn 18581  df-psmet 20134  df-xmet 20135  df-met 20136  df-bl 20137  df-mopn 20138  df-fbas 20139  df-fg 20140  df-cnfld 20143  df-top 21106  df-topon 21123  df-topsp 21145  df-bases 21158  df-cld 21231  df-ntr 21232  df-cls 21233  df-nei 21310  df-lp 21348  df-perf 21349  df-cn 21439  df-cnp 21440  df-haus 21527  df-cmp 21599  df-tx 21774  df-hmeo 21967  df-fil 22058  df-fm 22150  df-flim 22151  df-flf 22152  df-xms 22533  df-ms 22534  df-tms 22535  df-cncf 23089  df-limc 24067  df-dv 24068  df-log 24740
This theorem is referenced by:  dvlog  24834  efopnlem2  24840  dvcncxp1  24924  cxpcn  24926  lgamgulmlem2  25208  lgamcvg2  25233  areacirclem4  34128
  Copyright terms: Public domain W3C validator